diff --git a/AUTHORS b/AUTHORS index 8c20802f9..d376c4455 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,85 +1,92 @@ Authors of GNU Privacy Guard (GnuPG) ==================================== GNUPG Werner Koch 1998-02-23 Assigns GNU Privacy Guard and future changes. werner.koch@guug.de Designed and implemented GnuPG. GNUPG Matthew Skala 1998-08-10 Disclaims changes. mskala@ansuz.sooke.bc.ca Wrote cipher/twofish.c. GNUPG Natural Resources Canada 1998-08-11 Disclaims changes by Matthew Skala. GNUPG Michael Roth Germany 1998-09-17 Assigns changes. mroth@nessie.de Wrote cipher/des.c. Changes and bug fixes all over the place. GNUPG Niklas Hernaeus 1998-09-18 Disclaims changes. nh@df.lth.se Weak key patches. +GNUPG Rémi Guyomarch ???????????? +Assigns changes. +rguyom@mail.dotcom.fr +Various speed up patches. + + TRANSLATIONS Marco d'Itri 1997-02-22 Disclaimer. [it] md@linux.it TRANSLATIONS Gael Queri 1998-09-08 Disclaimer. [fr] gqueri@mail.dotcom.fr Fixed a lot of typos. TRANSLATIONS Walter Koch 1998-09-08 Disclaimer. [de] walterk@dip.de TRANSLATIONS Gregory Steuck 1998-10-20 Disclaimer. [ru?] steuck@iname.com TRANSLATIONS Urko Lusa ?????????? es_ES.po TRANSLATIONS Thiago Jung Bauermann ???????????????? pt_BR.po jungmann@cwb.matrix.com.br TRANSLATIONS Janusz Aleksander Urbanowicz 1999-01-09 pl.po +alex@bofh.torun.pl -Other notes: +More credits ============ 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 keybox implementation is based on GDBM 1.7.3 by Philip A. Nelson. The file cipher/rndunix.c is based on rndunix.c from cryptlib. Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999. The files in debian/ are by James Troup who is the Debian maintainer for GnuPG. The RPM specs file scripts/gnupg.spec has been contributed by several people. diff --git a/BUGS b/BUGS index bfadaa002..753265aef 100644 --- a/BUGS +++ b/BUGS @@ -1,47 +1,51 @@ List of some known bugs ------------------------- This following list contains those bugs which we are aware of. Please make sure that bugs you report are not listed here. If you can fix one of these bugs/limitations we will certainly be glad to receive a patch. (Please note that we need a disclaimer if a patch is longer than about 10 lines; but it may help anyway to show us where we have to fix it. Do an "info standards" to find out why a disclaimer is needed for GNU.) Format: severity: [ *] to [***], no, first reported, by, version. Bugs which are marked with "FIX: yyyy-mm-dd" are fixed in the CVS and after about half a day in the rsync snapshots. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ *] #3 --list-packets should continue even w/o a passphrase (or in batch mode). Maybe we have to move it to a separate program?? [ *] #4 1999-01-13 0.9.1 v3 key 'expiration date' problem: 1. generate a key, set expiration date 2. 3. edit a v3 secret key, try to set expiration date - output: "You can't change... 4. save 5. key has expiration date from 1. and gpg reports that pubkey and seckey differ. The for loop the exp.date is set before v3 detection? [is this bug still alive?] [ *] #5 /home/jam/.gnupg/pubring.gpg: can't open gdbm file: Can't be writer keyblock resource `/home/jam/.gnupg/pubring.gpg': file open error OOPS in close enum_keyblocks - ignored [gdbm is experimental and will be replaced by the new keybox code] [***] #6 1999-02-22 0.9.3 Buserror on IRIX 6.4: Crash while doing a keygen. I think while creating the prime. Other buserrors are reported when doing a "gpg README" on sparc-solaris2.6. --> Solaris fixed. --> IRIX bug still there +[ *] #18 1999-05-27 0.9.7 + rndunix hangs on hp/ux. The problme is related to my_plcose which is + not always called. (I suggest to use EGD instead of rndunix.) -Next #18 + +Next #19 diff --git a/TODO b/TODO index df6a958a6..dbe27bffb 100644 --- a/TODO +++ b/TODO @@ -1,59 +1,61 @@ + * add keylength and type to status output. + * add some status output put for signing and encryption. replace the putc in primegen with some kind of status-fd outputs. * Speed up calculation of key validity. * See why we always get this "Hmmm, public key not anymore available" Rewrite that stuff. * print a warning when a revoked/expired _secret_ key is used. * remove more "Fixmes" * Use capabilities if available. glibc2 does not support it yet? What about 2.2 or should we use the system calls directly? * when decryptiong multiple key: print a warning only if no usable pubkey encrypt package was found. Extension: display a list of all recipients. * Add NO_PUBKEY and NO_SECKEY status lines. * Solaris make has problems with the generated POTFILES - seems to be a gettext bug. * find a way to allow the import of non-self-signed keys. This is needed for the IN ENCR/SIGN hack. Nice to have ------------ * Let take --help an option to select some topics. * Offcial test vectors for 3DES-EDE3 * use DEL and ^H for erasing the previous character (util/ttyio.c). or better readline. * Print a warning if the directory mode is wrong. * replace the keyserver stuff either by a call to a specialized utility and SOCKSify this utility. * Do a real fix for bug #7 or document that it is a PGP 5 error. * clearsig: Keep lineendings while writing the output of a clearsig * preferences of hash algorithms are not yet used. * new menu to delete signatures and list signature in menu * Replace the SIGUSR1 stuff by semaphores to avoid loss of a signal. or use POSIX.4 realtime signals. Overhaul the interface and the test program. Use it with the test suite? * add test cases for invalid data (scrambled armor or other random data) * add checking of armor trailers * Burn the buffers used by fopen(), or use read(2). Does this really make sense? And while we are at it: implement a secure deletion stuff? * Stats about used random numbers. * the pubkey encrypt functions should do some sanity checks. * dynload: implement the hint stuff. * "gpg filename.tar.gz.asc" sollte wie mit --verify funktionieren (-sab). * Den Dateinamen aus der message nicht benutzen, sondern nur das gpg/asc strippen. * for messages created with "-t", it might make sense to append the verification status of the message to the output (i.e. write something to the --output file and not only to stderr. diff --git a/doc/gpg.1pod b/doc/gpg.1pod index 1ad795c37..af4186964 100644 --- a/doc/gpg.1pod +++ b/doc/gpg.1pod @@ -1,606 +1,602 @@ =head1 NAME gpg - GNU Privacy Guard =head1 SYNOPSIS B [--homedir name] [--options file] [options] command [args] =head1 DESCRIPTION B is the main program for the GnuPG system. =head1 COMMANDS B recognizes these commands: B<-s>, B<--sign> Make a signature. This option may be combined with B<--encrypt>. B<--clearsign> Make a clear text signature. B<-b>, B<--detach-sign> Make a detached signature. B<-e>, B<--encrypt> Encrypt data. This option may be combined with B<--sign>. B<-c>, B<--symmetric> Encrypt with symmetric cipher only This command asks for a passphrase. B<--store> Store only (make a simple RFC1991 packet). B<--decrypt> [I] Decrypt file (or stdin if no file is specified) and write it to stdout (or the file specified with B<--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. B<--verify> [[I] {I}] Assume that I 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 in a file without the I<.sig> or I<.asc> extension (if such a file does not exist it is expected at stdin - use B<-> as filename to force a read from stdin). With more than 1 argument, the first should be a detached signature and the remaining files are the signed stuff. B<-k> [I] [I] Kludge to be somewhat compatible with PGP. Without arguments, all public keyrings are listed. With one argument, only I is listed. Special combinations are also allowed, but they may give strange results when combined with more options. B<-kv> Same as B<-k> B<-kvv> List the signatures with every key. B<-kvvv> Additionally check all signatures. B<-kvc> List fingerprints B<-kvvc> List fingerprints and signatures B B<--list-keys> [I] B<--list-public-keys> [I] List all keys from the public keyrings, or just the ones given on the command line. B<--list-secret-keys> [I] List all keys from the secret keyrings, or just the ones given on the command line. B<--list-sigs> [I] Same as B<--list-keys>, but the signatures are listed too. B<--check-sigs> [I] Same as B<--list-sigs>, but the signatures are verified. B<--fingerprint> [I] List all keys with their fingerprints. This is the same output as B but with the additional output of a line with the fingerprint. May also be combined with B<--list-sigs> or B<--check-sigs>. If this command is given twice, the fingerprints of all secondary keys are listed too. B<--list-packets> List only the sequence of packets. This is mainly useful for debugging. B<--gen-key> Generate a new key pair. This command can only be used interactive. B<--edit-key> I Present a menu which enables you to do all key related tasks: B Make a signature on key of user I. If the key is not yet signed by the default user (or the users given with B<-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 B<-u>. B Same as B but the signature is marked as non-exportbale and will therefore never be used by others. This may be used to make keys valid only in the local environment. B Revoke a signature. GnuPG asks for every every signature which has been done by one of teh secret keys, whether a revocation certificate should be generated. B Change the owner trust value. This updates the trust-db immediately and no save is required. B Create an alternate user id. B Delete an user id. B Add a subkey to this key. B Remove a subkey. B Revoke a subkey. B Change the key expiration time. If a key is selected, the time of this key will be changed. With no selection the key expiration of the primary key is changed. B Change the passphrase of the secret key. B I Toggle selection of user id with index I. Use 0 to deselect all. B I Toggle selection of subkey with index I. Use 0 to deselect all. B Check all selected user ids. B List preferences. B Toggle between public and secret key listing. B Save all changes to the key rings and quit. B Quit the program without updating the key rings. The listing shows you the key with its secondary keys and all user ids. 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: B<-> No ownertrust assigned / not yet calculated. B Trust calculation has failed. B Not enough information for calculation. B Never trust this key. B Marginally trusted. B Fully trusted. B Ultimately trusted B<--delete-key> Remove key from the public keyring B<--delete-secret-key> Remove key from the secret and public keyring B<--gen-revoke> Generate a revocation certificate. B<--export> [I] Either export all keys from all keyrings (default keyrings and those registered via option B<--keyring>), or if at least one name is given, those of the given name. The new keyring is written to F or to the file given with option "output". Use together with B<-a> to mail those keys. B<--send-keys> [I] Same as B<--export> but sends the keys to a keyserver. Option B<--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. B<--export-all> [I] Same as B<--export> but does also export keys which are not compatible to OpenPGP. B<--export-secret-keys> [I] Same as B<--export>, but does export the secret keys. This is normally not very useful. B<--import>, B<--fast-import> Import/merge keys. The fast version does not build the trustdb; this can be done at any time with the command B<--update-trustdb>. B<--recv-keys> I Import the keys with the given key IDs from a HKP keyserver. Option B<--keyserver> must be used to give the name of this keyserver. B<--export-ownertrust> List the assigned ownertrust values in ASCII format for backup purposes B<--import-ownertrust> [I] Update the trustdb with the ownertrust values stored in I (or stdin if not given); existing values will be overwritten. =head1 OPTIONS Long options can be put in an options file (default F<~/.gnupg/options>). 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 does not make sense. B recognizes these options: B<-a>, B<--armor> Create ASCII armored output. B<-o> I, B<--output> I Write output to I. B<-u> I, B<--local-user> I Use I as the user-id to sign. This option is silently ignored for the list commands, so that it can be used in an options file. B<--default-key> I Use I as default user-id for signatures. If this is not used the default user-id is the first user-id from the secret keyring. B<-r> I, B<--recipient> I Encrypt for user id I. If this option is not specified, GnuPG asks for the user id. B<--encrypt-to> I Same as B<--recipient> but this one is intended for in the options file and may be used together with an 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. B<--no-encrypt-to> Disable the use of all B<--encrypt-to> keys. B<-v>, B<--verbose> Give more information during processing. If used twice, the input data is listed in detail. B<-q>, B<--quiet> Be somewhat more quiet in some cases. B<-z> I Set compress level to I. A value of 0 for I disables compression. Default is to use the default compression level of zlib (normally 6). B<-t>, B<--textmode> Use canonical text mode. If B<-t> (but not B<--textmode>) is used together with armoring and signing, this enables clearsigned messages. This kludge is needed for PGP compatibility; normally you would use B<--sign> or B<--clearsign> to selected the type of the signature. B<-n>, B<--dry-run> Don't make any changes (not yet implemented). B<-i>, B<--interactive> Prompt before overwriting any files. B<--batch> Use batch mode. Never ask, do not allow interactive commands. B<--no-batch> Disable batch mode. This may be used if B is used in the options file. B<--yes> Assume "yes" on most questions. B<--no> Assume "no" on most questions. B<--keyserver> I Use I to lookup keys which are not yet in your keyring. This is only done while verifying messages with signatures. The option is also required for the command B<--send-keys> to specify the keyserver to where the keys should be send. All keyservers synchronize with each other - so there is no need to send keys to more than one server. Using the command "host -l pgp.net | grep wwwkeys" gives you a list of keyservers. Because there is load balancing using round-robin-dns you may notice that you get different key servers. B<--keyring> I Add I to the list of keyrings. If I begins with a tilde and a slash, these are replaced by the HOME directory. If the filename does not contain a slash, it is assumed to be in the home-directory (F<~/.gnupg> if B<--homedir>) is not used. The filename may be prefixed with a scheme: "gnupg-ring:" is the default one. "gnupg-gdbm:" may be used for a GDBM ring. It might make sense to use it together with B<--no-default-keyring>. B<--secret-keyring> I Same as B<--keyring> but for the secret keyrings. B<--homedir> I Set the name of the home directory to I. If this option is not used it defaults to F<~/.gnupg>. It does not make sense to use this in a options file. This also overrides the environment variable C. B<--charset> I Set the name of the native character set. This is used to convert some strings to proper UTF-8 encoding. Valid values for I are: B This is the default. B The usual Russian set (rfc1489). B<--options> I Read options from I and do not try to read them from the default options file in the homedir (see B<--homedir>). This option is ignored when used in an options file. B<--no-options> Shortcut for B<--options> I. This option is detected before an attempt to open an option file. B<--load-extension> I Load an extension module. If I does not contain a slash it is searched in B See the manual for more information about extensions. B<--debug> I Set debugging flags. All flags are or-ed and I may be given in C syntax (e.g. 0x0042). B<--debug-all> Set all useful debugging flags. B<--status-fd> I Write special status strings to the file descriptor I. B<--logger-fd> I Write log output to file descriptor I and not to stderr. B<--no-comment> Do not write comment packets. This option affects only the generation of secret keys. Output of option packets is disabled since version 0.4.2. B<--comment> I Use I as comment string in clear text signatures. B<--notation-data>, B<-N> I= Put the name value pair into the signature as notation data. I Must consists only of alphanumeric characters, digits or the underscore; the first character muts not be a digit. B May be any printable string; it will encoded in UTF8, so sou should have check that your B<--charset> is set right. If you prefix I with an exclamation mark, the notation data will be flagged as critical. (rfc2440:5.2.3.15). B<--set-policy-url> I Use I as Policy URL for signatures (rfc2440:5.2.3.19). If you prefix it with an exclamation mark, the policy URL packet will be flagged as critical. B<--set-filename> I Use I as the name of file which is stored in messages. B<--completes-needed> I Number of completely trusted users to introduce a new key signer (defaults to 1). B<--marginals-needed> I Number of marginally trusted users to introduce a new key signer (defaults to 3) B<--max-cert-depth> I Maximum depth of a certification chain (default is 5). B<--cipher-algo> I Use I as cipher algorithm. Running the program with the command B<--version> yields a list of supported algorithms. If this is not used the cipher algorithm is selected from the preferences stored with the key. B<--digest-algo> I Use I as message digest algorithm. Running the program with the command B<--version> yields a list of supported algorithms. Please note that using this option may violate the OpenPGP requirement, that a 160 bit hash is to be used for DSA. B<--s2k-cipher-algo> I Use I as the cipher algorithm used to protect secret keys. The default cipher is BLOWFISH. This cipher is also used for conventional encryption if B<--cipher-algo> is not given. B<--s2k-digest-algo> I Use I as the digest algorithm used to mangle the passphrases. The default algorithm is RIPE-MD-160. This digest algorithm is also used for conventional encryption if B<--digest-algo> is not given. B<--s2k-mode> I Selects how passphrases are mangled. A number of I<0> uses the plain passphrase (which is not recommended), a I<1> (default) adds a salt to the passphrase and I<3> iterates the whole process a couple of times. Unless -B<--rfc1991> is used, this mode is also used for conventional encryption. B<--compress-algo> I Use compress algorithm I. Default is I<2> which is RFC1950 compression. You may use I<1> to use the old zlib version which is used by PGP. The default algorithm may give better results because the window size is not limited to 8K. If this is not used the OpenPGP behavior is used, i.e. the compression algorithm is selected from the preferences. -B<--digest-algo> I - Use I as message digest algorithm. Running the - program with the command B<--version> yields a list of - supported algorithms. - - B<--throw-keyid> Do not put the keyid into encrypted packets. This option hides the receiver of the message and is a countermeasure against traffic analysis. It may slow down the decryption process because all available secret keys are tried. B<--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. B<--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. All other PGP versions do it this way too. This option is not enabled by default because it would violate rfc2440. B<--passphrase-fd> I Read the passphrase from file descriptor I. If you use 0 for I, the passphrase will be read from stdin. This can only be used if only one passphrase is supplied. B B<--rfc1991> Try to be more RFC1991 (PGP 2.x) compliant. B<--force-v3-sigs> OpenPGP states that an implementation should generate v4 signatures but PGP 5.x recognizes v4 signatures only on key material. This options forces v3 signatures for signatures on data. B<--force-mdc> Force the use of encryption with appended manipulation code. This is always used with the newer cipher (those with a blocksize greater than 64 bit). B<--lock-once> Lock the file the first time a lock is requested and do not release the lock until the process terminates. B<--no-verbose> Reset verbose level to 0. B<--no-greeting> Suppress the initial copyright message but do not enter batch mode. B<--no-armor> Assume the input data is not in ASCII armored format. B<--no-default-keyring> Do not add the default keyrings to the list of keyrings. B<--skip-verify> Skip the signature verification step. This may be used to make the encryption faster if the signature verification is not needed. B<--version> Print version information along with a list of supported algorithms. B<--with-colons> Print key listings delimited by colons. B<--warranty> Print warranty information. B<-h>, B<--help> Print usage information. =head1 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. =head1 EXAMPLES -se -r Bob [file] sign and encrypt for user Bob -sat [file] make a clear text signature -sb [file] make a detached signature -k [userid] show keys -kc [userid] show fingerprint =head1 ENVIRONMENT C Used to locate the default home directory. C If set directory used instead of F<~/.gnupg>. =head1 FILES F<~/.gnupg/secring.gpg> The secret keyring F<~/.gnupg/secring.gpg.lock> and the lock file F<~/.gnupg/pubring.gpg> The public keyring F<~/.gnupg/pubring.gpg.lock> and the lock file F<~/.gnupg/trustdb.gpg> The trust database F<~/.gnupg/trustdb.gpg.lock> and the lock file F<~/.gnupg/options> May contain options F Skeleton file F Default location for extensions =head1 SEE ALSO gpg(1) =head1 WARNINGS Use a B password for your user account and a B 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 B<~/.gnupg/> directory very well. Keep in mind that, if this program is used over a network (telnet), it is B easy to spy out your passphrase! =head1 BUGS On many systems this program should be installed as setuid(root). This -is necessary to lock memory pages. If you get no warning message about -insecure memory your OS kernel supports locking without being root. -The program drops root privileges as soon as locked memory is allocated. +is necessary to lock memory pages. Locking memory pages prevents the +operating system from writing memory pages 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. diff --git a/g10/ChangeLog b/g10/ChangeLog index 6c1fe9f50..5096b94fa 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,2014 +1,2021 @@ +Mon May 31 19:41:10 CEST 1999 Werner Koch + + * g10.c (main): Fix for SHM init (Michael). + + * compress.c, encr-data.c, mdfilter.c, + plaintext.c, free-packet.c: Speed patches (Rémi). + Thu May 27 09:40:55 CEST 1999 Werner Koch * status.c (cpr_get_answer_yes_no_quit): New. * keyedit.c (menu_delsig): New. (check_all_keysigs): Splitted. (print_and_check_one_sig): New. Wed May 26 14:36:29 CEST 1999 Werner Koch * build-packet.c (build_sig_subpkt): Support large packets. * parse-packet.c (enum_sig_subpkt): Replaces parse_sig_subpkt. * mainproc.c (print_notation_data): Print all notation packets. * g10.c (add_notation_data): Add a way to specify the critical flag. (main): Add option --set-policy-url. (check_policy_url): Basic checks. * sign.c (mk_notation_and_policy): Replaces mk_notation. * parse-packet.c (can_handle_critical): Moved decision whether we can handle critical subpacket to an extra function. Tue May 25 19:50:32 CEST 1999 Werner Koch * sign.c (sign_file): Always use compression algo 1 for signed onyl file becuase we can´ be sure the the verifier supports other algorithms. * build-packet.c (build_sig_subpkt): Support for notation data. * sign.c (sign_file,clearsign_file,make_keysig_packet): Ditto. (mk_notation): New. * g10.c (add_notation_data): New and add option -N * mainproc.c (print_notation_data): New. (check_sig_and_print): Print any notation data of the signed text. Sun May 23 14:20:22 CEST 1999 Werner Koch * pkclist.c (check_signatures_trust): Print a warning and return immediateley if opt.always_trust is true. * g10.c (main): Corrected handling of no-default-keyring * pkclist.c (algo_available): Disable Twofish until we have settled how to do the MDC. * hkp.c: Disable everything for mingw32 Sat May 22 22:47:26 CEST 1999 Werner Koch * mainproc.c (check_sig_and_print): Add sig creation time to the VALIDSIG status output. Add more info to the ERRSIG output. * sig-check.c (signature_check): Add sig time after epoch to SIG_ID. * import.c (import_one): Merge duplicate user IDs. (collapse_uids): New. * kbnode.c (move_kbnode): New. (remove_kbnode): New. * keyedit.c (keyedit_menu): Call collapse_uids. * g10.c: new option --logger-fd. * import.c: s/log_*_f/log_*/ Thu May 20 14:04:08 CEST 1999 Werner Koch * misc.c (pull_in_libs): do the volatile only for gcc * sig-check (signature_check): Emit SIG_iD only for classes 0 and 1. * armor.c (armor_filter): Add detection of PGP2 created clearsigs. (fake_packet): A tab is not a WS for pgp2 - handle this. * textfilter.c (len_without_trailing_chars): New. (copy_clearsig_text): Add pgp2mode arg. * sign.c (clearsign_file): pass old_style to the above fnc. Wed May 19 16:04:30 CEST 1999 Werner Koch * g10.c: New option --interactive. * mainproc.c (proc_plaintext): Add workaround for pgp2 bug (do_check_sig): Ditto. (proc_tree): Ditto. * plaintext.c (do_hash): Ditto. (hash_datafiles): Ditto, add an arg, changed all callers. * mdfilter.c (md_filter): Add support for the alternate hash context. Mon May 17 21:54:43 CEST 1999 Werner Koch * parse-packet.c (parse_encrypted): Support for PKT_ENCRYPTED_MDC. * build-packet.c (do_encrypted_mdc): Ditto. * cipher.c (write_header): Add mdc hashing. (cipher_filter): write out the hash. * mainproc.c (do_proc_packets): Add PKT_ENCRYPTED_MDC. * encr-data.c (decrypt_data): Add mdc hashing. (mdc_decode_filter): New. * parse-packet.c (parse_sig_subpkt): Fixed stupid bug for subpkt length calculation (parse_signature): Fixed even more stupid bug. Sat May 8 19:28:08 CEST 1999 Werner Koch * build-packet.c (do_signature): Removed MDC hack. * encode.c (encode_crypt_mdc): Removed. * mainproc.c (do_check_sig): Removed MDC hack. (check_sig_and_print): Ditto. * parse-packet.c (parse_signature): Ditto. * sig-check.c (mdc_kludge_check): Ditto. * free-packte.c (copy_signature, free_seckey_enc): Ditto. * parse-packet.c (parse_signature,parse_key): Store data of unknown algorithms with mpi_set_opaque inseatd of the old faked data stuff. (read_rest): Removed. (read_rest2): Renamed to read_rest * build-packet.c (write_fake_data): Use mpi_get_opaque. * free-packet.c (cp_fake_data): Removed and cahnged all callers to use mpi_copy. (free_pubkey_enc,free_seckey_enc,release_public_key_parts, release_secret_key_parts): Use mpi_free for opaque data. Thu May 6 14:18:17 CEST 1999 Werner Koch * trustdb.c (check_trust): Check for revoked subkeys. * pkclist.c (do_we_trust): Handled revoked subkeys. (do_we_trust_pre): Ditto. (check_signatures_trust): Ditto. * build-packet.c (hash_public_key): Fix for ancient g10 keys. * mainproc.c (do_proc_packets): Return EOF if no data has been read. * g10.c (main): Catch errors for default operation. Thu Apr 29 12:29:22 CEST 1999 Werner Koch * sign.c (sign_file): Fixed hashing in case of no subpackets. (clearsign_file): Ditto. (make_keysig_packet): Ditto. Wed Apr 28 13:03:03 CEST 1999 Werner Koch * keyedit.c (keyedit_menu): Add new command revkey. * (menu_revkey): New. Mon Apr 26 17:48:15 CEST 1999 Werner Koch * parse-packet.c (parse_signature): Add the MDC hack. * build-packet.c (do_signature): Ditto. * free-packet.c (free_seckey_enc,copy_signature,cmp_signatures): Ditto. * mainproc.c (do_check_sig): Ditto. * sig-check.c (mdc_kludge_check): New. * encode.c (encrypt_mdc_file): New. * keyedit.c (check_all_keysigs): List revocations. * (menu_revsig): New. * sign (make_keysig_packet): Support for class 0x30. Sun Apr 18 20:48:15 CEST 1999 Werner Koch * pkclist.c (select_algo_from_prefs): Fixed the case that one key has no preferences (Remi Guyomarch). keylist.c (list_keyblock): ulti_hack to propagate trust to all uids. Sun Apr 18 10:11:28 CEST 1999 Werner Koch * seckey-cert.c (do_check): Use real IV instead of a 0 one, so that it works even if the length of the IV doesn't match the blocksize. Removed the save_iv stuff. (protect_secret_key): Likewise. Create the IV here. * packet.h (PKT_secret_key): Increased size of IV field and add a ivlen field. * parse-packet.c (parse_key): Use the len protect.ivlen. * build-packet.c (do_secret_key). Ditto. * getkey.c (key_byname): Close keyblocks. * Makefile.am (gpgm): Removed this * g10.c: Merged gpg and gpgm * import.c (import): Utilize option quiet. * tdbio.c (tdbio_set_dbname): Ditto. * ringedit.c (add_keyblock_resource,keyring_copy): Ditto. * keyedit.c (sign_uids): Add some batch support. * g10.c (main): add call to tty_batchmode. Fri Apr 9 12:26:25 CEST 1999 Werner Koch * status.c (write_status_text): Some more status codes. * passphrase_to_dek (passphrase_to_dek): add a status code. * seckey_cert.c (check_secret_key): Likewise. * encr-data.c (decrypt_data): Reverse the last changes * cipher.c (write_header): Ditto. * parse-packet.c (parse_key): Dropped kludge for ancient blowfish mode. Thu Apr 8 09:35:53 CEST 1999 Werner Koch * mainproc.c (proc_encrypted): Add a new status output * passphrase.c (passphrase_to_dek): Ditto. * status.h status.c: Add new status tokens. Wed Apr 7 20:51:39 CEST 1999 Werner Koch * encr-data.c (decrypt_data): Fixes for 128 bit blocksize * cipher.c (write_header): Ditto. * seckey-cert.c (do_check): Ditto. (protect_secret_key). Ditto. * misc.c (print_cipher_algo_note): Twofish is now a standard algo. * keygen.c (do_create): Fixed spelling (Gaël Quéri) (ask_keysize): Only allow keysizes up to 4096 * ringedit.c (add_keyblock_resource): chmod newly created secrings. * import.c (delete_inv_parts): Fixed accidently deleted subkeys. Tue Apr 6 19:58:12 CEST 1999 Werner Koch * armor.c: Removed duped include (John Bley) * mainproc.c: Ditto. * build-packet.c (hash_public_key): Fixed hashing of the header. * import.c (delete_inv_parts): Allow import of own non-exportable sigs. Sat Mar 20 13:59:47 CET 1999 Werner Koch * armor.c (fake_packet): Fix for not not-dash-escaped Sat Mar 20 11:44:21 CET 1999 Werner Koch * g10.c (main): Added command --recv-keys * hkp.c (hkp_import): New. Wed Mar 17 13:09:03 CET 1999 Werner Koch * trustdb.c (check_trust): add new arg add_fnc and changed all callers. (do_check): Ditto. (verify_key): Ditto. (propagate_validity): Use the new add_fnc arg. (print_user_id): Add the FILE arg. (propagate_ownertrust): New. * pkclist.c (add_ownertrust_cb): New and changed the add_ownertrust logic. * getkey.c (get_keyblock_bylid): New. * trustdb.c (print_uid_from_keyblock): New. (dump_tn_tree_with_colons): New. (list_trust_path): Add colon print mode. * trustdb.c (insert_trust_record): Always use the primary key. * encode.c (encode_simple): Added text_mode filter (Rémi Guyomarch) (encode_crypt): Ditto. * mainproc.c (proc_pubkey_enc): Added status ENC_TO. * armor.c (armor_filter): Added status NODATA. * passphrase.c (passphrase_to_dek): Always print NEED_PASSPHRASE * seckey_cert.c (check_secret_key): Added BAD_PASS status. * g10.c (main): Set g10_opt_homedir. Sun Mar 14 19:34:36 CET 1999 Werner Koch * keygen.c (do_create): Changed wording of the note (Hugh Daniel) Thu Mar 11 16:39:46 CET 1999 Werner Koch * tdbdump.c: New * trustdb.c (walk_sigrecs,do_list_sigs,list_sigs, list_records,list_trustdb,export_ownertrust,import_ownertrust): Moved to tdbdump.c (init_trustdb): renamed to setup_trustdb. Changed all callers. (do_init_trustdb): renamed to init_trustdb(). * trustdb.c (die_invalid_db): replaced by tdbio_invalid. * tdbio.c (tdbio_invalid): New. * import.c (delete_inv_parts): Skip non exportable signatures. * keyedit.c (sign_uid_mk_attrib): New. (sign_uids): Add the local argument. (keyedit_menu): New "lsign" command. * trustdb.c (register_trusted_key): Removed this and all related stuff. * g10.c (oTrustedKey): Removed option. * tdbio.h (dir.valcheck): New trustdb field. * tdbio.c: Add support for this field (tdbio_read_modify_stamp): New. (tdbio_write_modify_stamp): New. * trustdb.c (do_check): Check against this field. Removed cache update. (verify_key): Add cache update. (upd_uid_record): Some functional changes. (upd_cert_record): Ditto Wed Mar 10 11:26:18 CET 1999 Werner Koch * keylist.c (list_keyblock): Fixed segv in uid. Print 'u' as validity of sks. Mon Mar 8 20:47:17 CET 1999 Werner Koch * getkey.c (classify_user_id): Add new mode 12 (#). * seckey-cert.c (check_secret_key): replaced error by info. * trustdb.c (query_trust_info): Add another arg, changed all callers. (check_trust): Ditto. (do_check): Ditto. (verify_key): Handle namehash. * keylist.c (list_keyblock): print trust info for user ids. * sig-check.c (signature_check): Add sig-created to status output. Tue Mar 2 16:44:57 CET 1999 Werner Koch * textfilter.c (copy_clearsig_text): New. (clearsign): Removed. * sign.c (clearsign_file): does not use textfiler anymore. * keygen.c (ask_user_id): print a note about the used charset. Tue Mar 2 10:38:42 CET 1999 Werner Koch * sig-check.c (signature_check): sig-id now works for all algos. * armor.c (armor_filter): Fixed armor bypassing. Sun Feb 28 19:11:00 CET 1999 Werner Koch * keygen.c (ask_user_id): Don't change the case of email addresses. (has_invalid_email_chars): Adjusted. * keylist.c (list_one): Really list serect keys (Remi Guyomarch) * keyedit.c (menu_select_uid): Add some braces to make egcs happy. (menu_select_key): Ditto. * mainproc.c (do_proc_packets): List sym-enc packets (Remi Guyomarch) Fri Feb 26 17:55:41 CET 1999 Werner Koch * pkclist.c (build_pk_list): Return error if there are no recipients. * sig-check.c (signature_check): New signature id feature. * armor.c (make_radic64_string): New. * mainproc.c (proc_pubkey_enc): early check for seckey availability. * pkclist.c (do_we_trust_pre): print user id before asking. * ringedit.c (add_keyblock_resource,get_keyblock_handle): Cleaner handling of default resource. Thu Feb 25 18:47:39 CET 1999 Werner Koch * pkclist.c (algo_available): New. (select_algo_from_prefs): Check whether algo is available. * ringedit.c (keyring_copy): Take care of opt.dry_run. (do_gdbm_store): Ditto. * openfile.c (open_outfile). Ditto. (copy_options_file): Ditto. * trustdb.c (update_trustdb): Ditto. (clear_trust_checked_flag): Ditto. (update_trust_record): Ditto. (insert_trust_record): Ditto. Wed Feb 24 11:07:27 CET 1999 Werner Koch * keylist.c (secret_key_list): Now really list the secret key. * trustdb.c (do_init_trustdb): New. Init is now deferred. Mon Feb 22 20:04:00 CET 1999 Werner Koch * getkey.c (lookup_sk): Return G10ERR_NO_SECKEY and not x_PUBKEY. Fri Feb 19 15:49:15 CET 1999 Werner Koch * pkclist.c (select_algo_from_prefs): retrieve LID if not there. * armor.c (fake_packet): Replaced ugly lineending handling. * g10.c (oNoEncryptTo): New. * pkclist.c (build_pk_list): Implemented this option. * g10.c (main): Greeting is now printed to stderr and not to tty. Use add_to_strlist() instead of direct coding. * import.c (import): Use iobuf_push_filter2. * mainproc.c (check_sig_and_print): Print all user ids for good signatures. * getkey.c (get_pubkeyblock): New. * import.c (chk_self_sigs): Fixed SEGV for unbounded class 0x18 keys. (delete_inv_parts): Delete special marked packets. Tue Feb 16 14:10:02 CET 1999 Werner Koch * g10.c (main): New option --encrypt-to * pkclist.c (build_pk_list): Implemented encrypt-to. * parse-packet.c (parse_user_id): Removed the hack to work with utf-8 strings. * g10.c (main): Install lockfile cleanup handler. * tdbio.c (cleanup): Removed: this is now handled by dotlock. Sat Feb 13 14:13:04 CET 1999 Werner Koch * tdbio.c (tdbio_set_dbname): Init lockhandle for a new trustdb Wed Feb 10 17:15:39 CET 1999 Werner Koch * g10.c (main): check for development version now in configure * tdbio.c (tdbio_write_record): Add uid.validity (tdbio_read_record) : Ditto. (tdbio_dump_record) : Ditto. * keygen.c (keygen_add_std_prefs): Replaced Blowfish by Twofish, removed MD5 and Tiger. * pubkey-enc.c (get_it): Suppress warning about missing Blowfish in preferences in certain cases. * ringedit.c (lock_rentry,unlock_rentry): New. * getkey.c (key_byname): Pass ret_kb down to lookup_xx. * armor.c (armor_filter): No output of of empty comment lines. Add option --no-version to suppress the output of the version string. * getkey.c: Release the getkey context for auto context variables. Sun Jan 24 18:16:26 CET 1999 Werner Koch * getkey.c: Changed the internal design to allow simultaneous lookup of multible user ids (get_pubkey_bynames): New. (get_seckey_bynames): New. (get_seckey_next): New. (get_seckey_end): New. * keylist.c (list_one): Use the new functions. * keylist.c (list_keyblock): add a newline for normal listings. * g10.c (--recipient): New option name to replace --remote-user Wed Jan 20 18:59:49 CET 1999 Werner Koch * textfilter.c: Mostly rewritten * plaintext.c (handle_plaintext): Use now text_filter semantics. Tue Jan 19 19:34:58 CET 1999 Werner Koch * export.c (export_pubkeys_stream): New. (do_export_stream): New. * g10.c (aSendKeys): New command. * hkp.c (hkp_export): New. * compress.c (do_uncompress): Hack for algo 1 and 1.1.3 Sun Jan 17 11:04:33 CET 1999 Werner Koch * textfilter.c (text_filter): Now uses iobuf_read_line(). (read_line): Removed. * armor.c (trim_trailing_spaces): Removed and replaced by trim_trailing_ws from libutil Sat Jan 16 12:03:27 CET 1999 Werner Koch * hkp.c (hkp_ask_import): Use only the short keyid Sat Jan 16 09:27:30 CET 1999 Werner Koch * import.c (import_key_stream): New (import): New, moved most of import_keys here. * g10.c: New option --keyserver * mainproc.c (check_sig_and_print): Hook to import a pubkey. * pref.c pref.h : Removed * hkp.c hkp.h: New Wed Jan 13 14:10:15 CET 1999 Werner Koch * armor.c (radix64_read): Print an error if a bad armor was detected. Wed Jan 13 12:49:36 CET 1999 Werner Koch * armor.c (radix64_read): Now handles malformed armors produced by some buggy MUAs. Tue Jan 12 11:17:18 CET 1999 Werner Koch * ringedit.c (find_keyblock_bysk): New. * skc_list.c (is_insecure): New. (build_sk_list): usage check for insecure keys. * import.c (chk_self_sigs): Add handling for subkeys. (delete_inv_parts): Skip unsigned subkeys * sig-check.c (do_check): Print info if the signature is older than the key. * keygen.c (generate_subkeypair): Fail on time warp. * sign.c (do_sign): Ditto. Sun Jan 10 15:10:02 CET 1999 Werner Koch * armor.c (fake_packet): Fixed not-dash-escaped bug. Sat Jan 9 16:02:23 CET 1999 Werner Koch * sig-check.c (do_check): Output time diff on error * status.c (STATUS_VALIDSIG): New. (is_status_enabled): New. * mainproc.c (check_sig_and_print): Issue that status message. * plaintext.c (special_md_putc): Removed * armor.c (armor_filter): print error for truncated lines. * free-packet.c (free_encrypted): Revomed call to set_block_mode. (free_plaintext): Ditto. Thu Jan 7 18:00:58 CET 1999 Werner Koch * pkclist.c (add_ownertrust): Fixed return value. * encr-data.c (decrypt_data): Disabled iobuf_set_limit and iobuf_pop_filter stuff. * compress.c (handle_compressed): Disabled iobuf_pop_filter. * packet.h (PKT_secret_key): Add is_primary flag. * parse-packet.c (parse_key): Set this flag. * passphrase.c (passphrase_to_dek): Kludge to print the primary keyid - changed the API: keyid must now hold 2 keyids. * getkey.c (get_primary_seckey): New. * seckey-cert.c (do_check): pass primary keyid to passphrase query * tbdio.c (open_db): removed the atexit (tdbio_set_dbname): and moved it to here. * armor.c: Rewrote large parts. Tue Dec 29 19:55:38 CET 1998 Werner Koch * revoke.c (gen_revoke): Removed compression. * pkclist.c (do_we_trust_pre): special check for revoked keys * trustdb.c (update_trust_record): Fixed revoke flag. Tue Dec 29 14:41:47 CET 1998 Werner Koch * misc.c (disable_core_dumps): Check for EINVAL (Atari) * getkey (merge_one_pk_and_selfsig): Fixed search of expiredate. (merge_keys_and_selfsig): Ditto. * free-packet.c (cmp_public_keys): cmp expire only for v3 packets (cmp_secret_keys): Ditto. (cmp_public_secret_key): Ditto. Wed Dec 23 17:12:24 CET 1998 Werner Koch * armor.c (find_header): Reset not_dashed at every header Wed Dec 23 13:18:14 CET 1998 Werner Koch * pkclist.c (add_ownertrust): Refresh validity values. * trustdb.c (enum_cert_paths_print): New arg refresh. * ringedit.c: Fixed problems fix keyrings * parse-packet.c (dbg_parse_packet): New debug functions. * getkey.c (getkey_disable_caches): New. * import.c (import_keys): Disable caches. Thu Dec 17 18:31:15 CET 1998 Werner Koch * misc.c (trap_unaligned): Only for glibc 1 * sign.c (write_dash_escaped): Now escapes "From " lines * g10.c: New option --escape-from-lines * trustdb.c (sort_tsl_list): New (list_trust_path): Now prints sorted list. (enum_cert_paths): Likewise. (enum_cert_paths_print): New. (print_paths): New printing format. * pkclist.c (add_ownertrust): New arg quit. (edit_ownertrust): New quit selection and does not query the recipients ownertrust anymore. (add_ownertrust): Print the ceritficate path. Mon Dec 14 21:18:49 CET 1998 Werner Koch * parse-packet.c (parse_signature): Now checks for critical bit (parse_sig_subpkt): Splitted. (parse_one_sig_subpkt): New. * sig-check.c (do_check): handle critical bit. Sun Dec 13 14:10:56 CET 1998 Werner Koch * pcklist.c (select_algo_from_prefs): Preferences should now work (lost the != ? ) Thu Dec 10 20:15:36 CET 1998 Werner Koch * ringedit.c (gdbm_store): Fix for inserts * g10.c (main): New option --export-all * export.c (export_pubkeys): New arg. (do_export): Now may skip old keys. * status.c: Minor patches for Sun's cc * keygen.c (ask_algo): Disabled v3 ElGamal choice, rearranged the numbers. Add a warning question when a sign+encrypt key is selected. * g10.c (do_not_use_RSA): Removed. * misc.c (print_pubkey_algo_note): New as replacement for the do_not_use_RSA() and chnaged all callers. (print_cipher_algo_note): New. (print_hash_algo_note): New. * cipher.c (write_header): Add a call to print_cipher_algo_note. * seckey-cert.c (protect_secret_key): Ditto * sign.c (do_sign): Add a call to print_digest_algo_note. * getkey.c (get_long_user_id_string): New. * mainproc.c (check_sig_and_print): Changed the format of the status output. * encrypt.c (write_pubkey_enc_from_list): print used symmetric cipher. * pkclist.c (do_we_trust): Changed a message. Wed Dec 9 13:41:06 CET 1998 Werner Koch * misc.c (trap_unaligned) [ALPHA]: Only if UAC_SIGBUS is defined. * sign.c (write_dash_escaped): Add the forgotten patch by Brian Moore. * compress.c (do_uncompress): Fixed the inflating bug. Tue Dec 8 13:15:16 CET 1998 Werner Koch * trustdb.c (upd_uid_record): Now uses the newest self-signature (insert_trust_record): Now calls update with recheck set to true. (register_trusted_key): New. (verify_own_keys): Enhanced by list of trusted keys. * g10.c (main): Print a warning when a devel version is used. (main): New option --trusted-key * import.c (merge_blocks): Fixed merging of new user ids and added merging of subkeys. (append_uid): Ditto. (merge_keysig): New. (append_key): New. * getkey.c (merge_one_pk_and_selfsig): Get the expiration time from the newest self-signature. (merge_keys_and_selfsig): Ditto. * free-packet.c (cmp_secret_key): New. Fri Nov 27 21:37:41 CET 1998 Werner Koch * g10.c: New option --lock-once * tdbio.c (open_db): Add an atexit (cleanup): New. (tdbio_sync): Add locking. (tdbio_end_transaction): Ditto. (put_record_into_cache): Ditto. * ringedit.c (keyring_copy): Ditto. (cleanup): New. (add_keyblock_resource): Add an atexit. Fri Nov 27 15:30:24 CET 1998 Werner Koch * armor.c (find_header): Another fix for clearsigs. Fri Nov 27 12:39:29 CET 1998 Werner Koch * status.c (display_help): Removed. * helptext.c: New and removed the N_() from all cpr_gets. Fri Nov 20 16:54:52 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): New option --not-dash-escaped * sign.c (write_dashed_escaped): Ditto. * armor.c (find_header): Support for NotDashEscaped header. * getkey.c: print "disabled cache.." only if verbose is used. Thu Nov 19 07:17:31 1998 Werner Koch * parse-packet.c (dump_sig_subpkt): Fixed expire listing * getkey.c (merge_keys_and_selfsig): Fixed expire calculation. (merge_one_pk_and_selfsig): Ditto. * keyedit.c (menu_expire). Ditto. * keygen.c (keygen_add_key_expire): Ditto. (ask_expire_interval): New and changed all local function to use this instead. (keygen_add_key_expire): Opaque should now be a public key; changed all callers. * parse.packet.c (parse): use skip_rest to skip packets. * keyedit.c (keyedit_menu): New arg for cmdline cmds. Wed Nov 18 20:33:50 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (check_trustdb): Now rechecks all gived userids. (collect_paths): Some fixes. (upd_pref_records): Skips empty items, evaluate all items. * parse-packet.c (dump_sig_subpkt): Better listing of prefs. (skip_packet): Now knows about marker packet * g10.c: removed cmd "--edit-sig". * pubring.asc: Updated. Sat Nov 14 14:01:29 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Changed syntax of --list-trust-path * trustdb.c (list_trust_path): Replaced max_depth by opt.max_cert_depth Fri Nov 13 07:39:58 1998 Werner Koch * trustdb.c (collect_paths): Removed a warning message. (enum_trust_web): Removed. (enum_cert_paths): New. * pkclist.c (add_ownertrust): Changed to use enum_cert_paths. (edit_ownertrust): Now list ceritficates on request. (show_paths): New. Wed Nov 11 18:05:44 1998 Werner Koch * g10.c (main): New option --max-cert-depth * tdbio.h: add new fields to ver and dir record. * tdbio.c: read/write/dump of these fields. (tdbio_db_matches_options): New. * trustdb.c: replaced MAC_CERT_DEPTH by opt.max_cert_depth. (do_check): cache validity and changed other functions to reset the cached value. * keylist.c (list_one): Now lists the ownertrust. * mainproc.c (list_node): Ditto. Tue Nov 10 10:08:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (g10_exit): Now looks at the new g10_errors_seen. * mainproc.c (check_sig_and_print): Sets g10_errors_seen. * *.c : i18n many more strings. * ringedit.c (locate_keyblock_by_keyid): Add HAVE_LIBGDBM (locate_keyblock_by_fpr): Ditto. * g10.c (main): removed unsused "int errors". (main): Add new option --charset. * g10.c (main): special message for the unix newbie. Mon Nov 9 07:17:42 1998 Werner Koch * getkey.c (finish_lookup): Kludge to prefere algo 16. * trustdb.c (new_lid_table): Clear cached item. * status.c (cpr_get_utf8): New. * pkclist.c (build_pk_list): Uses this. Sun Nov 8 17:20:39 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (check_sig_and_print): Why did I use strlen()-1 in the printf? - This truncated the TZ. Sat Nov 7 15:57:28 1998 me,,, (wk@tobold) * getkey.c (lookup): Changes to support a read_next. (get_pubkey): Fixed a memory leak. * keylist.c (list_one): Now lists all matching user IDs. Tue Nov 3 16:19:21 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (ask_user_id): Now converted to UTF-8 * g10.c (main): Kludge for pgp clearsigs and textmode. Fri Oct 30 16:40:39 1998 me,,, (wk@tobold) * signal.c (block_all_signals): New. (unblock_all_signals): New * tdbio.c (tdbio_end_transaction): Now blocks all signals. * trustdb.c (new_lid_table): Changed the representation of the former local_lid_info stuff. * trustdb.c (update_trust_record): Reorganized the whole thing. * sig-check.c (check_key_signature): Now handles class 0x28 Wed Oct 28 18:56:33 1998 me,,, (wk@tobold) * export.c (do_export): Takes care of the exportable sig flag. Tue Oct 27 14:53:04 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (update_trust_record): New "fast" parameter. Sun Oct 25 19:32:05 1998 Werner Koch (wk@isil.d.shuttle.de) * openfile.c (copy_options_File): New. * ringedit.c (add_keyblock_resource): Creates options file * tdbio.c (tdbio_set_dbname): Ditto. Sat Oct 24 14:10:53 1998 brian moore * mainproc.c (proc_pubkey_enc): Don't release the DEK (do_proc_packets): Ditto. Fri Oct 23 06:49:38 1998 me,,, (wk@tobold) * keyedit.c (keyedit_menu): Comments are now allowed * trustdb.c: Rewrote large parts. Thu Oct 22 15:56:45 1998 Michael Roth (mroth@nessie.de) * encode.c: (encode_simple): Only the plain filename without a given directory is stored in generated packets. (encode_crypt): Ditto. * sign.c: (sign_file) Ditto. Thu Oct 22 10:53:41 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (update_trust_record): Add new optional arg. * import.c (import_keys): Add statistics output * trustdb.c (update_trustdb): Ditto. (insert_trustdb): Ditto. * tdbio.c (tdbio_begin_transaction): New. (tdbio_end_transaction): New. (tdbio_cancel_transaction): New. * g10.c (main): New option --quit. * trustdb.c (check_hint_sig): No tests for user-id w/o sig. This caused an assert while checking the sigs. * trustdb.c (upd_sig_record): Splitted into several functions. * import.c (import_keys): New arg "fast". * g10.c (main): New command --fast-import. Wed Oct 21 18:19:36 1998 Michael Roth * ringedit.c (add_keyblock_resource): Directory is now created. * tdbio.c (tdbio_set_dbname): New info message. Wed Oct 21 11:52:04 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (update_trustdb): released keyblock in loop. * keylist.c (list_block): New. (list_all): Changed to use list_block. * trustdb.c: Completed support for GDBM * sign.c (only_old_style): Changed the way force_v3 is handled (sign_file): Ditto. (clearsign_file): Ditto. * keygen.c (has_invalid_email_chars): Splitted into mailbox and host part. * keylist.c (list_one): Add a merge_keys_and_selfsig. * mainproc.c (proc_tree): Ditto. Sun Oct 18 11:49:03 1998 Werner Koch (wk@isil.d.shuttle.de) * sign.c (only_old_style): Add option force_v3_sigs (sign_file): Fixed a bug in sig->version (clearsign_file): Ditto. * parse-packet.c (dump_sig_subpkt): New * keyedit.c (menu_expire): New. * free-packet.c (cmp_signatures): New Sat Oct 17 10:22:39 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c: changed output line length from 72 to 64. * keyedit.c (fix_keyblock): New. Fri Oct 16 10:24:47 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c: Rewrote most. * tdbio.c: Add cache and generalized hash tables. * options.h (ENABLE_COMMENT_PACKETS): New but undef'ed. * encode.c, sign.c, keygen.c: Disabled comment packets. * export.c (do_export): Comment packets are never exported, except for those in the secret keyring. * g10.c (main): Removed option do-no-export-rsa; should be be replaced by a secpial tool. * export.c (do_export): Removed the code for the above option. * armor.c (find_header): Support for new only_keyblocks. * import.c (import_keys): Only looks for keyblock armors. * packet.h: replaced valid_days by expiredate and changed all users. * build-packet.c (do_public_key): calculates valid-days (do_secret_key): Ditto. * parse-packet.c (parse_key): expiredate is calucated from the valid_period in v3 packets. * keyid.c (do_fingerprint_md): calculates valid_dates. * keygen.c (add_key_expire): fixed key expiration time for v4 packets. * armor.c (find_header): A LF in the first 28 bytes was skipped for non-armored data. Thu Oct 8 11:35:51 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (is_armored): Add test on old comment packets. * tdbio.c (tdbio_search_dir_bypk): fixed memory leak. * getkey.c: Changed the caching algorithms. Wed Oct 7 19:33:28 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnodes.c (unused_nodes): New. Wed Oct 7 11:15:36 1998 Werner Koch (wk@isil.d.shuttle.de) * keyedit.c (sign_uids): Fixed a problem with SK which could caused a save of an unprotected key. (menu_adduid): Ditto. * keyedit.c (keyedit_menu): Prefs are now correctly listed for new user ids. * trustdb.c (update_trust_record): New. (insert_trust_record): Now makes use of update_trust_record. Tue Oct 6 16:18:03 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (read_record): replaces most of the tdbio_read_records. (write_record): Ditto. Sat Oct 3 11:01:21 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (ask_alogo): enable ElGamal enc-only only for addmode. Wed Sep 30 10:15:33 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (import_one): Fixed update of wrong keyblock. Tue Sep 29 08:32:08 1998 me,,, (wk@tobold) * mainproc.c (proc_plaintext): Display note for special filename. * plaintext.c (handle_plaintext): Suppress output of special file. Mon Sep 28 12:57:12 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (verify_own_keys): Add warning if a key is not protected. * passphrase (hash_passphrase): Fixed iterated+salted mode and setup for keysizes > hashsize. * g10.c (main): New options: --s2k-{cipher,digest,mode}. Fri Sep 25 09:34:23 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c: Chnaged some help texts. Tue Sep 22 19:34:39 1998 Werner Koch (wk@isil.d.shuttle.de) * passphrase.c (read_passphrase_from_fd): fixed bug for long passphrases. Mon Sep 21 11:28:05 1998 Werner Koch (wk@(none)) * getkey.c (lookup): Add code to use the sub key if the primary one does not match the usage. * armor.c (armor_filter): New error message: no valid data found. (radix64_read): Changes to support multiple messages. (i18n.h): New. * mainproc.c (add_onepass_sig): bug fix. Mon Sep 21 08:03:16 1998 Werner Koch (wk@isil.d.shuttle.de) * pkclist.c (do_we_trust): Add keyid to most messages. * passphrase.c (read_passphrase_from_fd): New. (have_static_passphrase): New (get_passphrase_fd): Removed. (set_passphrase_fd): Removed. * g10.c (main): passphrase is now read here. * keyedit.c (keyedit_menu): "help" texts should now translate fine. Mon Sep 21 06:40:02 1998 Werner Koch (wk@isil.d.shuttle.de) * encode.c (encode_simple): Now disables compression when --rfc1991 is used. (encode_crypt): Ditto. Fri Sep 18 16:50:32 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (merge_key_and_selfsig): New. Fri Sep 18 10:20:11 1998 Werner Koch (wk@isil.d.shuttle.de) * pkclist.c (select_algo_from_prefs): Removed 3DES kludge. * seskey.c (make_session_key): Fixed SERIOUS bug introduced by adding the weak key detection code. * sign.c (sign_file): Changed aremor header in certain cases. Tue Sep 15 17:52:55 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (check_sig_and_print): Replaced ascime by asctimestamp. Mon Sep 14 11:40:52 1998 Werner Koch (wk@isil.d.shuttle.de) * seskey.c (make_session_key): Now detects weak keys. * trustdb (clear_trust_checked_flag): New. * plaintext.c (handle_plaintext): Does no anymore suppress CR from cleartext signed messages. Sun Sep 13 12:54:29 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (insert_trust_record): Fixed a stupid bug in the free liunked list loops. Sat Sep 12 15:49:16 1998 Werner Koch (wk@isil.d.shuttle.de) * status.c (remove_shmid): New. (init_shm_comprocess): Now sets permission to the real uid. Wed Sep 9 11:15:03 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (PKT_pubkey_enc): New flah throw_keyid, and add logic to implement it. * g10.c (main): New Option --throw-keyid * getkey.c (enum_secret_keys): Add new ar and changed all callers. Tue Sep 8 20:04:09 1998 Werner Koch (wk@isil.d.shuttle.de) * delkey.c (delete_key): Moved from keyedit.c. Mon Sep 7 16:37:52 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (calc_length_header): New arg new_ctb to correctly calculate the length of new style packets. * armor.c (is_armored): Checks for symkey_enc packets. * pkclist.c (select_algo_from_prefs): 3DEs substitute is now CAST5. Tue Aug 11 17:54:50 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (do_secret_key): Fixed handling of old keys. * getkey.c (compare_name): Fixed exact and email matching * openfile.c (open_outfile): Changed arguments and all callers. Tue Aug 11 09:14:35 1998 Werner Koch (wk@isil.d.shuttle.de) * encode.c (encode_simple): Applied option set-filename and comment. (encode_crypt): Ditto. * sign.c (sign_file): Ditto. * armor.c (armor_filter): Applied option comment. * encode.c (encode_crypt): Moved init_packet to the begin. (encode_simple): add an init_packet(). * comment (write_comment): Now enforces a hash sign as the 1st byte. * import.c (import_one): Add explanation for "no user ids". * compress.c (do_uncompress): Applied Brian Warner's patch to support zlib 1.1.3 etc. * trustdb.c (check_trust): Fixed a problem after inserting new keys. * getkey (lookup): do not return the primary key if usage is given (lookup_sk): Ditto and take usage into account. * status.c (cpr_get_answer_is_yes): add display_help. Mon Aug 10 10:11:28 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (lookup_sk): Now always returns the primary if arg primary is true. (lookup): Likewise. (get_pubkey_byname): Now returns the primary key (get_seckey_byname): Ditto. Mon Aug 10 08:34:03 1998 Werner Koch (wk@isil.d.shuttle.de) * keyid.c (pubkey_letter): ELG_E is now a small g. Sat Aug 8 17:26:12 1998 Werner Koch (wk@isil.d.shuttle.de) * openfile (overwrite_filep): Changed semantics and all callers. Sat Aug 8 12:17:07 1998 Werner Koch (wk@isil.d.shuttle.de) * status.c (display_help): New. Thu Aug 6 16:30:41 1998 Werner Koch,mobil,,, (wk@tobold) * seskey.c (encode_session_key): Now uses get_random_bits(). Thu Aug 6 07:34:56 1998 Werner Koch,mobil,,, (wk@tobold) * ringedit.c (keyring_copy): No more backupfiles for secret keyrings and add additional warning in case of a failed secret keyring operation. Wed Aug 5 11:54:37 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (check_opts): Moved to main. Changed def_cipher_algo semantics and chnaged all users. * pubkey-enc.c (get_sssion_key): New informational output about preferences. * parse-packet.c (parse_symkeyenc): Fixed salted+iterated S2K (parse_key): Ditto. * build-packet.c (do_secret_key): Ditto. (do_symkey_enc): Ditto. Tue Aug 4 08:59:10 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (enum_secret_keys): Now returns only primary keys. * getkey (lookup): Now sets the new namehash field. * parse-packet.c (parse_sig_subpkt2): New. * sign.c (sign_file): one-pass sigs are now emiited reverse. Preference data is considered when selecting the compress algo. Wed Jul 29 12:53:03 1998 Werner Koch (wk@isil.d.shuttle.de) * free-packet.c (copy_signature): New. * keygen.c (generate_subkeypair): rewritten * g10.c (aKeyadd): Removed option --add-key Mon Jul 27 10:37:28 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (do_check): Additional check on cipher blocksize. (protect_secret_key): Ditto. * encr-data.c: Support for other blocksizes. * cipher.c (write_header): Ditto. Fri Jul 24 16:47:59 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnode.c (insert_kbnode): Changed semantics and all callers. * keyedit.c : More or less a complete rewrite Wed Jul 22 17:10:04 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (write_sign_packet_header): New. Tue Jul 21 14:37:09 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (import_one): Now creates a trustdb record. * g10.c (main): New command --check-trustdb Mon Jul 20 11:15:07 1998 Werner Koch (wk@isil.d.shuttle.de) * genkey.c (generate_keypair): Default key is now DSA with encryption only ElGamal subkey. Thu Jul 16 10:58:33 1998 Werner Koch (wk@isil.d.shuttle.de) * keyid.c (keyid_from_fingerprint): New. * getkey.c (get_pubkey_byfprint): New. Tue Jul 14 18:09:51 1998 Werner Koch (wk@isil.d.shuttle.de) * keyid.c (fingerprint_from_pk): Add argument and changed all callers. (fingerprint_from_sk): Ditto. Tue Jul 14 10:10:03 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (handle_plaintext): Now returns create error if the file could not be created or the user responded not to overwrite the file. * mainproc.c (proc_plaintext): Tries again if the file could not be created to check the signature without output. * misc.c (disable_core_dumps): New. * g10.c (main): disable coredumps for gpg * g10.c (MAINTAINER_OPTIONS): New to disable some options Mon Jul 13 16:47:54 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (hash_datafiles): New arg for better support of detached sigs. Changed all callers. * mainproc.c (proc_signature_packets): Ditto. * g10.c (main): New option "compress-sigs" * sig.c (sign_file): detached signatures are not anymore compressed unless the option --compress-sigs is used. Thu Jul 9 19:54:54 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c: Fixes to allow zero length cleartext signatures Thu Jul 9 14:52:47 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (build_list): Now drops setuid. (main): Changed the way keyrings and algorithms are registered . Wed Jul 8 14:17:30 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (PKT_public_key): Add field keyid. * parse-packet.c (parse_key): Reset the above field. * keyid.c (keyid_from_pk): Use above field as cache. * tdbio.c, tdbio.h: New * trustdb.c: Moved some functions to tdbio.c. (print_keyid): New. * pkclist.c (check_signatures_trust): New. Wed Jul 8 10:45:28 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (special_md_putc): New. (handle_plaintext): add clearsig argument * mainproc.c (proc_plaintext): detection of clearsig * sign.c (write_dased_escaped): Changed clearsig format Tue Jul 7 18:56:19 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (find_header): Now makes sure that there is only one empty line for clearsigs, as this is what OP now says. Mon Jul 6 13:09:07 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): New option default-secret-key * getkey.c (get_seckey_byname): support for this option. Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (add_keyring): Keyrings are now added to end of the list of keyrings. The first added keyringwill be created. (add_secret_keyring): Likewise. * ringedit.c (add_keyblock_resource): Files are created here. * g10.c (aNOP): Removed * getkey.c (lookup): Add checking of usage for name lookups * packet.h (pubkey_usage): Add a field which may be used to store usage capabilities. * pkclist.c (build_pk_list): getkey now called with usage arg. * skclist.c (build_sk_list): Ditto. * sign.c (clearsign_file): Fixed "Hash:" headers Sat Jul 4 13:33:31 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (list_ownertrust): New. * g10.c (aListOwnerTrust): New. * g10.c (def_pubkey_algo): Removed. * trustdb.c (verify_private_data): Removed and also the call to it. (sign_private_data): Removed. Fri Jul 3 13:26:10 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aEditKey): was aEditSig. Changed usage msg. * keyedit.c: Done some i18n stuff. * g10.c (do_not_use_RSA): New. * sign.c (do_sign): Add call to above function. * encode.c (write_pubkey_enc_from_list): Ditto. Thu Jul 2 21:01:25 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c: Now is able sto store data of unknown algorithms. * free-packet.c: Support for this. * build-packet.c: Can write data of packet with unknown algos. Thu Jul 2 11:46:36 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse): fixed 4 byte length header Wed Jul 1 12:36:55 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (new_ctb): New field for some packets * build-packet.c (build_packet): Support for new_ctb * parse-packet.c (parse): Ditto. Mon Jun 29 12:54:45 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h: changed all "_cert" to "_key", "subcert" to "subkey". * free-packet.c (free_packet): Removed memory leak for subkeys. Sun Jun 28 18:32:27 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (import_keys): Renamed from import_pubkeys. (import_secret_one): New. * g10.c (aExportSecret): New. * export.c (export_seckeys): New. * parse-packet.c (parse_certificate): Cleaned up. (parse_packet): Trust packets are now considered as unknown. (parse_pubkey_warning): New. Fri Jun 26 10:37:35 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (has_invalid_email_chars): New. Wed Jun 24 16:40:22 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (armor_filter): Now creates valid onepass_sig packets with all detected hash algorithms. * mainproc.c (proc_plaintext): Now uses the hash algos as specified in the onepass_sig packets (if there are any) Mon Jun 22 11:54:08 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (handle_plaintext): add arg to disable outout * mainproc.c (proc_plaintext): disable output when in sigs_only mode. Thu Jun 18 13:17:27 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c: Removed all rsa packet stuff, chnaged defaults for key generation. Sun Jun 14 21:28:31 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c (checksum_u16): Fixed a stupid bug which caused a wrong checksum calculation for the secret key protection and add a backward compatibility option. * g10.c (main): Add option --emulate-checksum-bug. Thu Jun 11 13:26:44 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h: Major changes to the structure of public key material which is now stored in an array and not anaymore in a union of algorithm specific structures. These is needed to make the system more extendable and makes a lot of stuff much simpler. Changed all over the system. * dsa.c, rsa.c, elg.c: Removed. Wed Jun 10 07:22:02 1998 Werner Koch,mobil,,, (wk@tobold) * g10.c ("load-extension"): New option. Mon Jun 8 22:23:37 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (do_check): Removed cipher constants (protect_secret_key): Ditto. Fri May 29 10:00:28 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (query_trust_info): New. * keylist.c (list_one): Add output of trust info * mainproc (list_node): ditto. * g10.c (main): full trustdb init if -with-colons and any of the key list modes. Thu May 28 10:34:42 1998 Werner Koch (wk@isil.d.shuttle.de) * status.c (STATUS_RSA_OR_IDEA): New. * sig-check.c (check_signature): Output special status message. * pubkey-enc.c (get_session_key): Ditto. * mainproc.c (check_sig_and_print): Changed format of output. * passpharse.c (passphrase_to_dek): Likewise. Wed May 27 13:46:48 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aListSecretKeys): New option --list-secret-keys * keylist.c (std_key_list): Renamed to public_key_list. (secret_key_list): New (list_one, list_all): Add support for secret keys. * getkey.c (get_secret_keyring): New. * mainproc.c (list_node): Add option --with-colons for secret keys * sig-check.c (check_key_signature): detection of selfsigs * mainproc.c (list_node): fixed listing. * g10.c (aListSecretKeys): New option --always-trust * pkclist.c (do_we_trust): Override per option added * status.c (write_status_text): Add a prefix to every output line. Wed May 27 07:49:21 1998 Werner Koch (wk@isil.d.shuttle.de) * g10 (--compress-keys): New. * options.h (compress_keys): New. * export.c (export_pubkeys): Only compresses with the new option. Tue May 26 11:24:33 1998 Werner Koch (wk@isil.d.shuttle.de) * passphrase.c (get_last_passphrase): New (set_next_passphrase): New. (passphrase_to_dek): add support for the above functions. * keyedit.c (make_keysig_packet): Add sigclass 0x18, changed all callers due to a new argument. * keygen.c (write_keybinding): New (generate_subkeypair): Add functionality (ask_algo, ask_keysize, ask_valid_days): Broke out of generate_keypair (ask_user_id, ask_passphrase): Ditto. Thu May 21 11:26:13 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c,gpgd.c (main): Does now return an int, so that egcs does not complain. * armor.c (fake_packet): Removed erro message and add a noticed that this part should be fixed. * sign.c (sign_file): Compression now comes in front of encryption. * encode.c (encode_simple): Ditto. (encode_crypt): Ditto. Tue May 19 16:18:19 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (fake_packet): Changed assertion to log_error Sat May 16 16:02:06 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (build_packet): Add SUBKEY packets. Fri May 15 17:57:23 1998 Werner Koch (wk@isil.d.shuttle.de) * sign.c (hash_for): New and used in all places here. * main.h (DEFAULT_): new macros. * g10.c (opt.def_digest_algo): Now set to 0 * compress.c (init_compress): Add support for algo 1 * options.h (def_compress_algo): New * g10.c (main): New option --compress-algo Fri May 15 13:23:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (print_mds): New feature to print only one hash, chnaged formatting. Thu May 14 15:36:24 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c (trap_unaligned) [__alpha__]: New * g10.c (trap_unaligned): Add call to this to track down SIGBUS on Alphas (to avoid the slow emulation code). Wed May 13 11:48:27 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (do_signature): Support for v4 pakets. * keyedit.c (make_keysig_packet): Ditto. * build-packet.c (build_sig_subpkt_from_sig): New. (build_sig_subpkt): New. * elg.c (g10_elg_sign): removed keyid_from_skc. * dsa.c (g10_dsa_sign): Ditto. * rsa.c (g10_rsa_sign): Ditto. * keyedit.c (make_keysig_packet): Add call to keyid_from_skc * sign.c (clearsign_file): Support for v4 signatures. (sign_file): Ditto. Wed May 6 09:31:24 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (do_parse): add support for 5 byte length leader. (parse_subpkt): Ditto. * build-packet.c (write_new_header): Ditto. * packet.h (SIGSUBPKT_): New constants. * parse-packet.c (parse_sig_subpkt): Changed name, made global, and arg to return packet length, chnaged all callers Tue May 5 22:11:59 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (gen_dsa): New. * build_packet.c (do_secret_cert): Support for DSA Mon May 4 19:01:25 1998 Werner Koch (wk@isil.d.shuttle.de) * compress.c: doubled buffer sizes * parse-packet.c (do_plaintext): now uses iobuf_read/write. Mon May 4 09:35:53 1998 Werner Koch (wk@isil.d.shuttle.de) * seskey.c (encode_md_value): Add optional argument hash_algo, changed all callers. * passphrase.c (make_dek_from_passphrase): Removed * (get_passhrase_hash): Changed name to passphrase_to_dek, add arg, changed all callers. * all: Introduced the new ELG identifier and added support for the encryption only one (which is okay to use by GNUPG for signatures). Sun May 3 17:50:26 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (PKT_OLD_COMMENT): New name for type 16. * parse-packet.c (parse_comment): Now uses type 61 Fri May 1 12:44:39 1998 Werner Koch,mobil,,, (wk@tobold) * packet.h (count): Chnaged s2k count from byte to u32. * seckey-cert.c (do_check): Changed s2k algo 3 to 4, changed reading of count. * build-packet.c (do_secret_cert): ditto. * parse-packet.c (parse_certificate): ditto. * parse-packet.c (parse_symkeyenc): New. * build-packet.c (do_symkey_enc): New. Thu Apr 30 16:33:34 1998 Werner Koch (wk@isil.d.shuttle.de) * sign.c (clearsign_file): Fixed "Hash: " armor line. Tue Apr 28 14:27:42 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_subpkt): Some new types. Mon Apr 27 12:53:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Add option --skip-verify. * mainproc.c (check_sig_and_print): Ditto. * g10.c (print_mds): Add output for Tiger. * sign.c (sign_file): Now uses partial length headers if used in canonical textmode (kludge to fix a bug). * parse-packet.c (parse_certificate): Changed BLOWFISH id. * pubkey-enc.c (get_session_key): Ditto. * seskey.c (make_session_key): Ditto. * seckey-cert.c (protect_secret_key,do_check): Add BLOWFISH160. Fri Apr 24 17:38:48 1998 Werner Koch,mobil,,, (wk@tobold) * sig-check.c (check_key_signature): Add sig-class 0x14..0x17 * keyedit.c (sign-key): Some changes to start with support of the above new sig-classes. Wed Apr 22 09:01:57 1998 Werner Koch,mobil,,, (wk@tobold) * getkey.c (compare_name): add email matching Tue Apr 21 16:17:12 1998 Werner Koch,mobil,,, (wk@tobold) * armor.c (armor_filter): fixed missing last LF before CSUM. Thu Apr 9 11:35:22 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (do_check): New; combines all the check functions into one. * sign.c: removed all key management functions * keyedit.c: New. Thu Apr 9 09:49:36 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (chk_self_sigs): Changed an error message. Wed Apr 8 16:19:39 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h: packet structs now uses structs from the pubkey, removed all copy operations from packet to pubkey structs. Wed Apr 8 13:40:33 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (verify_own_certs): Fixed "public key not found". * getkey.c (key_byname): New, combines public and secret key search. * pkclist.c (build_pkc_list): Add new arg usage, changed all callers. * skclist.c (build_skc_list): Likewise. * ringedit.c (find_keyblock, keyring_search2): Removed. Wed Apr 8 09:47:21 1998 Werner Koch (wk@isil.d.shuttle.de) * sig-check.c (do_check): Applied small fix from Ulf Möller. Tue Apr 7 19:28:07 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c, encr-data.c, seckey-cert.c: Now uses cipher_xxxx functions instead of blowfish_xxx or cast_xxx Tue Apr 7 11:04:02 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (g10maint.o): Changed the way it is created. Mon Apr 6 11:17:08 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c: New. * keygen.c (checksum,checksum_u16,checksum_mpi): Moved to misc.c * seckey-cert.c: Kludge for wrong ELG checksum implementation. Sat Apr 4 20:07:01 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c (cipher_filter): Support for CAST5 * encr-data.c (decode_filter): Ditto. (decrypt_data): Ditto. * seskey.c (make_session_key): Ditto. * seckey-cert.c (check_elg, check_dsa): Ditto, (protect_secret_key): Ditto. * pubkey-enc.c (get_session_key): Ditto. * passphrase.c (hash_passphrase): Ditto. Thu Apr 2 20:22:35 1998 Werner Koch (wk@isil.d.shuttle.de) * gpgd.c: New Thu Apr 2 10:38:16 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (generate_keypair): Add valid_days stuff. * trustdb.c (check_trust): Add check for valid_days. Wed Apr 1 16:15:58 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (generate_keypair): Addional question whether the selected large keysize is really needed. Wed Apr 1 15:56:33 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (protect_secret_key): merged protect_xxx to here. Wed Apr 1 10:34:46 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (g10maint.c): Changed creation rule, so that it works on FreeBSD (missing CFLAGS). * parse-packet.c (parse_subkey): Removed. Thu Mar 19 15:22:36 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (keyring_enum): Fixed problem with reading too many packets. Add support to read secret keyrings. * getkey.c (scan_keyring): Removed (lookup): New to replace scan_keyring. (scan_secret_keyring): Removed. (lookup_skc): New. Wed Mar 18 11:47:34 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (enum_keyblocks): New read mode 11. * keyid.c (elg_fingerprint_md): New and changed all other functions to call this if the packet version is 4 or above. Tue Mar 17 20:46:16 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_certificate): Add listing support for subkeys. Tue Mar 17 20:32:22 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (is_armored): Allow marker packet. Thu Mar 12 13:36:49 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (check_trust): Checks timestamp of pubkey. * sig-check. (do_check): Compares timestamps. Tue Mar 10 17:01:56 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Add call to init_signals. * signal.c: New. Mon Mar 9 12:43:42 1998 Werner Koch (wk@isil.d.shuttle.de) * dsa.c: New * packet.h, free-packet.c, parse-packet.c : Add support for DSA * sig-check.c, getkey.c, keyid.c, ringedit.c: Ditto. * seckey-cert.c: Ditto. * packet.h : Moved .digest_algo of signature packets to outer structure. Changed all references Sun Mar 8 13:06:42 1998 Werner Koch (wk@isil.d.shuttle.de) * openfile.c : Support for stdout filename "-". * mainproc.c (check_sig_and_print): Enhanced status output: * status.c (write_status_text): New. Fri Mar 6 16:10:54 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnode.c (clone_kbnode): Fixed private_flag. * mainproc.c (list_node): Output of string "Revoked" as user-id. Fri Mar 6 14:26:39 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Add userids to "-kv" and cleaned up this stuff. Fri Mar 6 12:45:58 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Changed semantics of the list-... commands and added a new one. Removed option "-d" * decrypt.c: New. * trustdb.c (init_trustdb): Autocreate directory only if it ends in "/.gnupg". Thu Mar 5 12:12:11 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (do_proc_packets): New. Common part of proc_packet. (proc_signature_packets): special version to handle signature data. * verify.c: New. * g10.c (aVerify): New. * plaintext.c (hash_datafiles): New. * compress.c (handle_compressed): Add callback arg, changed caller. Thu Mar 5 10:20:06 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c: Is nom the common source for gpg and gpgm * g10maint.c: Removed * Makefile.am: Add rule to build g10maint.c Thu Mar 5 08:43:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Changed the way clear text sigs are faked. Wed Mar 4 19:47:37 1998 Werner Koch (wk@isil.d.shuttle.de) * g10maint.c (aMuttKeyList): New * keylist.c: New. Wed Mar 4 17:20:33 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (get_pubkey_byname): Kludge to allow 0x prefix. Tue Mar 3 13:46:55 1998 Werner Koch (wk@isil.d.shuttle.de) * g10maint.c (main): New option --gen-random. Tue Mar 3 09:50:08 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aDeleteSecretKey): New. (aEditSig): Add option "--edit-key" as synonym for "--edit-sig". (aDeleteSecretKey): New. * getkey.c (seckey_available): New. * sign.c (delete_key): Enhanced to delete secret keys, changed all callers. Mon Mar 2 21:23:48 1998 Werner Koch (wk@isil.d.shuttle.de) * pkc_list.c (build_pkc_list): Add interactive input of user ID. Mon Mar 2 20:54:05 1998 Werner Koch (wk@isil.d.shuttle.de) * pkclist.c (do_we_trust_pre): New. (add_ownertrust): Add message. * trustdb.c (enum_trust_web): Quick fix. Mon Mar 2 13:50:53 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): New action aDeleteKey * sign.c (delete_key): New. Sun Mar 1 16:38:58 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (do_check): No returns TRUST_UNDEFINED instead of eof error. Fri Feb 27 18:14:03 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (find_header): Removed trailing CR on headers. Fri Feb 27 18:02:48 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (keyring_search) [MINGW32]: Open and close file here because rename does not work on open files. Chnaged callers. Fri Feb 27 16:43:11 1998 Werner Koch (wk@isil.d.shuttle.de) * sig-check.c (do_check): Add an md_enable. * mainproc.c (do_check_sig): Use md_open in case of detached sig (proc_tree): Take detached sigs into account. Fri Feb 27 15:22:46 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Make use of GNUPGHOME envvar. * g10main.c (main): Ditto. Wed Feb 25 11:40:04 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (ask_for_detached_datafile): add opt.verbose to info output. * openfile.c (open_sigfile): Try also name ending in ".asc" Wed Feb 25 08:41:00 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (generate_keypair): Fixed memory overflow. Tue Feb 24 15:51:55 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_certificate): Support for S2K. * build-packet.c (do_secret_cert): Ditto. * keygen.c (gen_elg): Ditto. * seckey-cert.c (check_elg): Ditto (protect_elg): Ditto. * sign.c (chnage_passphrase): Ditto. * passphrase.c (get_passphrase_hash): Support for a salt and changed all callers. (make_dek_from_passphrase): Ditto. Tue Feb 24 12:30:56 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (hash_public_cert): Disabled debug output. Fri Feb 20 17:22:28 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (init_trustdb) [MINGW32]: Removed 2nd mkdir arg. (keyring_copy) [MINGW32]: Add a remove prior to the renames. Wed Feb 18 18:39:02 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (OMIT_DEPENDENCIES): New. * rsa.c: Replaced log_bug by BUG. Wed Feb 18 13:35:58 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (do_check_sig): Now uses hash_public_cert. * parse-packet.c (parse_certificate): Removed hashing. * packet.h (public_cert): Removed hash variable. * free-packet.c (copy_public_cert, free_public_cert): Likewise. * sig-check.c (check_key_signatures): Changed semantics. Wed Feb 18 12:11:28 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (do_check): Add handling for revocation certificates. (build_sigrecs): Ditto. (check_sigs): Ditto. Wed Feb 18 09:31:04 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (armor_filter): Add afx->hdrlines. * revoke.c (gen_revoke): Add comment line. * dearmor.c (enarmor_file): Ditto. * sig-check.c (check_key_signature): Add handling for class 0x20. * mainproc.c : Ditto. Tue Feb 17 21:24:17 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c : Add header lines "...ARMORED FILE .." * dearmor.c (enarmor_file): New. * g10maint.c (main): New option "--enarmor" Tue Feb 17 19:03:33 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c : Changed a lot, because the packets are now stored a simple linlked list and not anymore in a complicatd tree structure. Tue Feb 17 10:14:48 1998 Werner Koch (wk@isil.d.shuttle.de) * free_packet.c (cmp_public_certs): New. (cmp_user_ids): New. * kbnode.c (clone_kbnode): New. (release_kbnode): Add clone support. * ringedit.c (find_keyblock_bypkc): New. * sign.c (remove_keysigs): Self signatures are now skipped, changed arguments and all callers. * import.c : Add functionality. Tue Feb 17 09:31:40 1998 Werner Koch (wk@isil.d.shuttle.de) * options.h (homedir): New option. * g10.c, g10maint.c, getkey.c, keygen.c, trustdb.c (opt.homedir): New. * trustdb.c (init_trustdb): mkdir for hoem directory (sign_private_data): Renamed "sig" to "g10.sig" Mon Feb 16 20:02:03 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnode.c (commit_kbnode): New. (delete_kbnode): removed unused first arg. Changed all Callers. * ringedit.c (keyblock_resource_name): New. (get_keyblock_handle): NULL for filename returns default resource. Mon Feb 16 19:38:48 1998 Werner Koch (wk@isil.d.shuttle.de) * sig-check.s (check_key_signature): Now uses the supplied public key to check the signature and not any more the one from the getkey.c (do_check): New. (check_signature): Most work moved to do_check. Mon Feb 16 14:48:57 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (find_header): Fixed another bug. Mon Feb 16 12:18:34 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (scan_keyring): Add handling of compressed keyrings. Mon Feb 16 10:44:51 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c, g10maint.c (strusage): Rewrote. (build_list): New Mon Feb 16 08:58:41 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (use_armor): New. Sat Feb 14 14:30:57 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (proc_tree): Sigclass fix. Sat Feb 14 14:16:33 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (armor_filter): Changed version and comment string. * encode.c, sign.c, keygen.c: Changed all comment packet strings. Sat Feb 14 12:39:24 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aGenRevoke): New command. * revoke.c: New. * sign.c (make_keysig_packet): Add support for sigclass 0x20. Fri Feb 13 20:18:14 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (enum_keyblocks, keyring_enum): New. Fri Feb 13 19:33:40 1998 Werner Koch (wk@isil.d.shuttle.de) * export.c: Add functionality. * keygen.c (generate_keypair): Moved the leading comment behind the key packet. * kbnode.c (walk_kbnode): Fixed. * g10.c (main): listing armored keys now work. Fri Feb 13 16:17:43 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_publickey, parse_signature): Fixed calls to mpi_read used for ELG b. Fri Feb 13 15:13:23 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): changed formatting of help output. Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo) * pubkey-enc.c (get_session_key): rewritten diff --git a/g10/build-packet.c b/g10/build-packet.c index ee19287b1..75066de2b 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -1,993 +1,991 @@ /* build-packet.c - assemble packets and write them * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include "packet.h" #include "errors.h" #include "iobuf.h" #include "mpi.h" #include "util.h" #include "cipher.h" #include "memory.h" #include "options.h" static int do_comment( IOBUF out, int ctb, PKT_comment *rem ); 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, int blkmode ); 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; if( DBG_PACKET ) log_debug("build_packet() type=%d\n", pkt->pkttype ); assert( pkt->pkt.generic ); switch( pkt->pkttype ) { case PKT_OLD_COMMENT: pkt->pkttype = PKT_COMMENT; break; 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; default: break; } if( new_ctb || pkt->pkttype > 15 ) /* new format */ ctb = 0xc0 | (pkt->pkttype & 0x3f); else ctb = 0x80 | ((pkt->pkttype & 15)<<2); switch( pkt->pkttype ) { case PKT_USER_ID: rc = do_user_id( out, ctb, pkt->pkt.user_id ); break; case PKT_COMMENT: rc = do_comment( out, ctb, pkt->pkt.comment ); 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: 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_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 ) { int i; void *p; p = mpi_get_opaque( a, &i ); iobuf_write( out, p, i ); } } static int do_comment( IOBUF out, int ctb, PKT_comment *rem ) { if( !opt.no_comment ) { write_header(out, ctb, rem->len); if( iobuf_write( out, rem->data, rem->len ) ) return G10ERR_WRITE_FILE; } return 0; } static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid ) { write_header(out, ctb, uid->len); 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, 1 ); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; } /**************** * Make a hash value from the public key certificate */ void hash_public_key( MD_HANDLE md, PKT_public_key *pk ) { PACKET pkt; int rc = 0; int ctb; ulong pktlen; int c; IOBUF a = iobuf_temp(); #if 0 FILE *fp = fopen("dump.pk", "a"); int i=0; fprintf(fp, "\nHashing PK (v%d):\n", pk->version); #endif /* build the packet */ init_packet(&pkt); pkt.pkttype = PKT_PUBLIC_KEY; pkt.pkt.public_key = pk; if( (rc = build_packet( a, &pkt )) ) log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc)); if( !(pk->version == 3 && pk->pubkey_algo == 16) ) { /* skip the constructed header but don't do this for our very old * v3 ElG keys */ ctb = iobuf_get_noeof(a); pktlen = 0; if( (ctb & 0x40) ) { c = iobuf_get_noeof(a); if( c < 192 ) pktlen = c; else if( c < 224 ) { pktlen = (c - 192) * 256; c = iobuf_get_noeof(a); pktlen += c + 192; } else if( c == 255 ) { pktlen = iobuf_get_noeof(a) << 24; pktlen |= iobuf_get_noeof(a) << 16; pktlen |= iobuf_get_noeof(a) << 8; pktlen |= iobuf_get_noeof(a); } } else { int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3)); for( ; lenbytes; lenbytes-- ) { pktlen <<= 8; pktlen |= iobuf_get_noeof(a); } } /* hash a header */ md_putc( md, 0x99 ); pktlen &= 0xffff; /* can't handle longer packets */ md_putc( md, pktlen >> 8 ); md_putc( md, pktlen & 0xff ); } /* hash the packet body */ while( (c=iobuf_get(a)) != -1 ) { #if 0 fprintf( fp," %02x", c ); if( (++i == 24) ) { putc('\n', fp); i=0; } #endif md_putc( md, c ); } #if 0 putc('\n', fp); fclose(fp); #endif iobuf_cancel(a); } static int do_secret_key( IOBUF out, int ctb, PKT_secret_key *sk ) { int rc = 0; int i, nskey, npkey; IOBUF a = iobuf_temp(); if( !sk->version ) iobuf_put( a, 3 ); else iobuf_put( a, sk->version ); write_32(a, sk->timestamp ); if( sk->version < 4 ) { u16 ndays; if( sk->expiredate ) ndays = (u16)((sk->expiredate - sk->timestamp) / 86400L); else ndays = 0; write_16(a, 0 ); } iobuf_put(a, sk->pubkey_algo ); nskey = pubkey_get_nskey( sk->pubkey_algo ); npkey = pubkey_get_npkey( sk->pubkey_algo ); if( !npkey ) { write_fake_data( a, sk->skey[0] ); goto leave; } assert( npkey < nskey ); for(i=0; i < npkey; i++ ) mpi_write(a, sk->skey[i] ); if( sk->is_protected ) { if( is_RSA(sk->pubkey_algo) && sk->version < 4 && !sk->protect.s2k.mode ) { iobuf_put(a, sk->protect.algo ); iobuf_write(a, sk->protect.iv, sk->protect.ivlen ); } else { iobuf_put(a, 0xff ); iobuf_put(a, sk->protect.algo ); 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 ); iobuf_write(a, sk->protect.iv, sk->protect.ivlen ); } } else iobuf_put(a, 0 ); if( sk->is_protected && sk->version >= 4 ) { byte *p; assert( mpi_is_opaque( sk->skey[npkey] ) ); p = mpi_get_opaque( sk->skey[npkey], &i ); iobuf_write(a, p, i ); } else { for( ; i < nskey; i++ ) mpi_write(a, sk->skey[i] ); write_16(a, sk->csum ); } leave: write_header2(out, ctb, iobuf_get_temp_length(a), sk->hdrbytes, 1 ); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); 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 ) { 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; } memset(buf,0,1000); /* at least burn the buffer */ if( !pt->len ) iobuf_set_block_mode(out, 0 ); /* write end marker */ else if( n != pt->len ) log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n", (ulong)n, (ulong)pt->len ); return rc; } static int do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed ) { int rc = 0; u32 n; n = ed->len ? (ed->len + 10) : 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 ); n = ed->len ? (ed->len + 10) : 0; write_header(out, ctb, n ); iobuf_put(out, 1 ); /* version */ iobuf_put(out, ed->mdc_method ); /* 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 */ write_header2(out, ctb, 0, 0, 0 ); iobuf_put(out, cd->algorithm ); /* This is all. The caller has to write the real data */ return rc; } /**************** * Find a subpacket of type REQTYPE in BUFFER and a return a pointer * to the first byte of that subpacket data. * And return the length of the packet in RET_N and the number of * header bytes in RET_HLEN (length header and type byte). */ byte * find_subpkt( byte *buffer, sigsubpkttype_t reqtype, size_t *ret_hlen, size_t *ret_n ) { int buflen; sigsubpkttype_t type; byte *bufstart; size_t n; if( !buffer ) return NULL; buflen = (*buffer << 8) | buffer[1]; buffer += 2; - log_debug("find_subpkt: tyoe=%d bufferlength=%d\n", reqtype, buflen ); for(;;) { if( !buflen ) return NULL; /* end of packets; not found */ bufstart = buffer; n = *buffer++; buflen--; if( n == 255 ) { if( buflen < 4 ) break; n = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; buffer += 4; buflen -= 4; } else if( n >= 192 ) { if( buflen < 2 ) break; n = (( n - 192 ) << 8) + *buffer + 192; buffer++; buflen--; } - log_debug("find_subpkt: this len=%u\n", n ); if( buflen < n ) break; type = *buffer & 0x7f; if( type == reqtype ) { buffer++; n--; if( n > buflen ) break; if( ret_hlen ) *ret_hlen = buffer - bufstart; if( ret_n ) *ret_n = n; return buffer; } buffer += n; buflen -=n; } log_error("find_subpkt: buffer shorter than subpacket\n"); return NULL; } /**************** * 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 unhased part to the hashed one. * Note: All pointers into sig->[un]hashed are not valid after a call * to this function. The data to but into the subpaket should be * in buffer with a length of buflen. */ void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type, const byte *buffer, size_t buflen ) { byte *data; size_t hlen, dlen, nlen; int found=0; int critical, hashed, realloced; size_t n, n0; critical = (type & SIGSUBPKT_FLAG_CRITICAL); type &= ~SIGSUBPKT_FLAG_CRITICAL; if( type == SIGSUBPKT_NOTATION ) ; /* we allow multiple packets */ else if( (data = find_subpkt( sig->hashed_data, type, &hlen, &dlen )) ) found = 1; else if( (data = find_subpkt( sig->unhashed_data, type, &hlen, &dlen ))) found = 2; if( found ) log_bug("build_sig_packet: update nyi\n"); if( (buflen+1) >= 8384 ) nlen = 5; else if( (buflen+1) >= 192 ) nlen = 2; else nlen = 1; switch( type ) { case SIGSUBPKT_SIG_CREATED: case SIGSUBPKT_PRIV_ADD_SIG: case SIGSUBPKT_PREF_SYM: case SIGSUBPKT_PREF_HASH: case SIGSUBPKT_PREF_COMPR: case SIGSUBPKT_KS_FLAGS: case SIGSUBPKT_KEY_EXPIRE: case SIGSUBPKT_NOTATION: case SIGSUBPKT_POLICY: hashed = 1; break; default: hashed = 0; break; } if( hashed ) { n0 = sig->hashed_data ? ((*sig->hashed_data << 8) | sig->hashed_data[1]) : 0; n = n0 + nlen + 1 + buflen; /* length, type, buffer */ realloced = !!sig->hashed_data; data = sig->hashed_data ? m_realloc( sig->hashed_data, n+2 ) : m_alloc( n+2 ); } else { n0 = sig->unhashed_data ? ((*sig->unhashed_data << 8) | sig->unhashed_data[1]) : 0; n = n0 + nlen + 1 + buflen; /* length, type, buffer */ realloced = !!sig->unhashed_data; data = sig->unhashed_data ? m_realloc( sig->unhashed_data, n+2 ) : m_alloc( n+2 ); } if( critical ) type |= SIGSUBPKT_FLAG_CRITICAL; data[0] = (n >> 8) & 0xff; data[1] = n & 0xff; if( nlen == 5 ) { data[n0+2] = 255; data[n0+3] = (buflen+1) >> 24; data[n0+4] = (buflen+1) >> 16; data[n0+5] = (buflen+1) >> 8; data[n0+6] = (buflen+1); data[n0+7] = type; memcpy(data+n0+8, buffer, buflen ); } else if( nlen == 2 ) { data[n0+2] = (buflen+1-192) / 256 + 192; data[n0+3] = (buflen+1-192) & 256; data[n0+4] = type; memcpy(data+n0+5, buffer, buflen ); } else { data[n0+2] = buflen+1; data[n0+3] = type; memcpy(data+n0+4, buffer, buflen ); } if( hashed ) { if( !realloced ) m_free(sig->hashed_data); sig->hashed_data = data; } else { if( !realloced ) m_free(sig->unhashed_data); sig->unhashed_data = data; } } /**************** * Put all the required stuff from SIG into subpackets of sig. */ 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 ); } 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_data?((sig->hashed_data[0]<<8) |sig->hashed_data[1]) :0; write_16(a, nn); if( nn ) iobuf_write( a, sig->hashed_data+2, nn ); nn = sig->unhashed_data?((sig->unhashed_data[0]<<8) |sig->unhashed_data[1]) :0; write_16(a, nn); if( nn ) iobuf_write( a, sig->unhashed_data+2, 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, 1 ); } static int write_sign_packet_header( IOBUF out, int ctb, u32 len ) { /* 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. */ static int write_header2( IOBUF out, int ctb, u32 len, int hdrlen, int blkmode ) { if( ctb & 0x40 ) return write_new_header( out, ctb, len, hdrlen ); if( hdrlen ) { if( !len ) ctb |= 3; else 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 ) { if( blkmode ) iobuf_set_block_mode(out, 8196 ); } else { if( ctb & 2 ) { iobuf_put(out, len >> 24 ); iobuf_put(out, len >> 16 ); } if( ctb & 3 ) iobuf_put(out, len >> 8 ); 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 ) { if( iobuf_put( out, 3 ) ) return -1; return 0; } diff --git a/g10/compress.c b/g10/compress.c index 5ad4a27de..4862346ad 100644 --- a/g10/compress.c +++ b/g10/compress.c @@ -1,285 +1,285 @@ /* compress.c - compress filter * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include #include #include #include "util.h" #include "memory.h" #include "packet.h" #include "filter.h" #include "options.h" static void init_compress( compress_filter_context_t *zfx, z_stream *zs ) { int rc; int level; if( opt.compress >= 0 && opt.compress <= 9 ) level = opt.compress; else if( opt.compress == -1 ) level = Z_DEFAULT_COMPRESSION; else if( opt.compress == 10 ) /* remove this ! */ level = 0; 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 = m_alloc( zfx->outbufsize ); } static int do_compress( compress_filter_context_t *zfx, z_stream *zs, int flush, IOBUF a ) { int zrc; unsigned n; do { zs->next_out = zfx->outbuf; 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. */ if( (rc = zfx->algo == 1? inflateInit2( zs, -13) : 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 = m_alloc( 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; size_t n; - byte *p; - int c; + 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 ) zs->next_in = zfx->inbuf; - for( p=zfx->inbuf+n; n < zfx->inbufsize; n++, p++ ) { - if( (c=iobuf_get(a)) == -1 ) { - /* If we use the undocumented feature to suppress - * the zlib header, we have to give inflate an - * extra dummy byte to read */ - if( zfx->algo != 1 || zfx->algo1hack ) - break; - zfx->algo1hack = 1; - } - *p = c & 0xff; + count = zfx->inbufsize - n; + nread = iobuf_read( a, zfx->inbuf + n, count ); + if( nread == -1 ) nread = 0; + n += nread; + /* If we use the undocumented feature to suppress + * the zlib header, we have to give inflate an + * extra dummy byte to read */ + if( nread < count && zfx->algo == 1 ) { + *(zfx->inbuf + n) = 0xFF; /* is it really needed ? */ + zfx->algo1hack = 1; + n++; } 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 ); *ret_len = zfx->outbufsize - zs->avail_out; if( DBG_FILTER ) log_debug("do_uncompress: returning %u bytes\n", (unsigned)*ret_len ); return rc; } 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 = m_alloc_clear( sizeof *zs ); init_uncompress( zfx, zs ); zfx->status = 1; } zs->next_out = buf; 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 ) zfx->algo = opt.def_compress_algo; 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 = m_alloc_clear( sizeof *zs ); init_compress( zfx, zs ); zfx->status = 2; } zs->next_in = buf; zs->avail_in = size; rc = do_compress( zfx, zs, Z_NO_FLUSH, a ); } else if( control == IOBUFCTRL_FREE ) { if( zfx->status == 1 ) { inflateEnd(zs); m_free(zs); zfx->opaque = NULL; m_free(zfx->outbuf); zfx->outbuf = NULL; } else if( zfx->status == 2 ) { zs->next_in = buf; zs->avail_in = 0; do_compress( zfx, zs, Z_FINISH, a ); deflateEnd(zs); m_free(zs); zfx->opaque = NULL; m_free(zfx->outbuf); zfx->outbuf = NULL; } } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "compress_filter"; return rc; } /**************** * 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; memset( &cfx, 0, sizeof cfx ); if( cd->algorithm < 1 || cd->algorithm > 2 ) return G10ERR_COMPR_ALGO; cfx.algo = cd->algorithm; iobuf_push_filter( cd->buf, compress_filter, &cfx ); if( callback ) rc = callback(cd->buf, passthru ); else rc = proc_packets(procctx, cd->buf); #if 0 iobuf_pop_filter( cd->buf, compress_filter, &cfx ); if( cd->len ) iobuf_set_limit( cd->buf, 0 ); /* disable the readlimit */ else iobuf_clear_eof( cd->buf ); #endif cd->buf = NULL; return rc; } diff --git a/g10/encr-data.c b/g10/encr-data.c index fd3da055b..0593efe97 100644 --- a/g10/encr-data.c +++ b/g10/encr-data.c @@ -1,241 +1,236 @@ /* encr-data.c - process an encrypted data packet * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "packet.h" #include "mpi.h" #include "cipher.h" #include "options.h" #include "i18n.h" static int decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); static int mdc_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[20]; int defer_filled; int eof_seen; } decode_filter_ctx_t; /**************** * 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; memset( &dfx, 0, sizeof dfx ); if( opt.verbose ) { 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 ); } 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 ); dfx.cipher_hd = cipher_open( dek->algo, 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")); else if( rc ) { log_error("key setup failed: %s\n", g10_errstr(rc) ); 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); if( dfx.mdc_hash ) md_write( dfx.mdc_hash, temp, nprefix+2 ); cipher_sync( dfx.cipher_hd ); p = temp; /* log_hexdump( "prefix", temp, nprefix+2 ); */ if( p[nprefix-2] != p[nprefix] || p[nprefix-1] != p[nprefix+1] ) { rc = G10ERR_BAD_KEY; goto leave; } 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 */ int datalen = md_digest_length( ed->mdc_method ); md_final( dfx.mdc_hash ); if( datalen != 20 || memcmp(md_read( dfx.mdc_hash, 0 ), dfx.defer, datalen) ) rc = G10ERR_BAD_SIGN; log_hexdump("MDC calculated:", md_read( dfx.mdc_hash, 0), datalen); log_hexdump("MDC message :", dfx.defer, 20); } leave: cipher_close(dfx.cipher_hd); md_close( dfx.mdc_hash ); 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 > 40 ); /* get at least 20 bytes and put it somewhere ahead in the buffer */ for(n=20; n < 40 ; n++ ) { if( (c = iobuf_get(a)) == -1 ) break; buf[n] = c; } if( n == 40 ) { /* 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+20, 20 ); else memcpy(buf, dfx->defer, 20 ); /* now fill up */ for(; n < size; n++ ) { if( (c = iobuf_get(a)) == -1 ) break; buf[n] = c; } /* move the last 20 bytes back to the defer buffer */ /* (okay, we are wasting 20 bytes of supplied buffer) */ n -= 20; memcpy( dfx->defer, buf+n, 20 ); dfx->defer_filled = 1; } else if( !dfx->defer_filled ) { /* eof seen buf empty defer */ /* this is very bad because there is an incomplete hash */ n -= 20; memcpy(buf, buf+20, n ); dfx->eof_seen = 2; /* eof with incomplete hash */ } else { /* eof seen */ memcpy(buf, dfx->defer, 20 ); n -= 20; memcpy( dfx->defer, buf+n, 20 ); dfx->eof_seen = 1; /* normal eof */ } if( n ) { cipher_decrypt( dfx->cipher_hd, buf, buf, n); md_write( dfx->mdc_hash, buf, n ); } else { assert( dfx->eof_seen ); rc = -1; /* eof */ } *ret_len = n; } 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; - int c; if( control == IOBUFCTRL_UNDERFLOW ) { assert(a); - for(n=0; n < size; n++ ) { - if( (c = iobuf_get(a)) == -1 ) - break; - buf[n] = c; - } - + n = iobuf_read( a, buf, size ); + if( n == -1 ) n = 0; if( n ) cipher_decrypt( fc->cipher_hd, buf, buf, n); else rc = -1; /* eof */ *ret_len = n; } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "decode_filter"; } return rc; } diff --git a/g10/free-packet.c b/g10/free-packet.c index aef8e2fb0..5d74544fc 100644 --- a/g10/free-packet.c +++ b/g10/free-packet.c @@ -1,441 +1,441 @@ /* free-packet.c - cleanup stuff for packets * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include "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 ) { m_free(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] ); m_free(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] ); m_free(sig->hashed_data); m_free(sig->unhashed_data); m_free(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->namehash ) { m_free(pk->namehash); pk->namehash = NULL; } } void free_public_key( PKT_public_key *pk ) { release_public_key_parts( pk ); m_free(pk); } static void * cp_data_block( byte *s ) { byte *d; u16 len; if( !s ) return NULL; len = (s[0] << 8) | s[1]; d = m_alloc( len+2 ); memcpy(d, s, len+2); return d; } PKT_public_key * copy_public_key_new_namehash( PKT_public_key *d, PKT_public_key *s, const byte *namehash ) { int n, i; if( !d ) d = m_alloc(sizeof *d); memcpy( d, s, sizeof *d ); if( namehash ) { d->namehash = m_alloc( 20 ); memcpy(d->namehash, namehash, 20 ); } else if( s->namehash ) { d->namehash = m_alloc( 20 ); memcpy(d->namehash, s->namehash, 20 ); } 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] ); } return d; } PKT_public_key * copy_public_key( PKT_public_key *d, PKT_public_key *s ) { return copy_public_key_new_namehash( d, s, NULL ); } PKT_signature * copy_signature( PKT_signature *d, PKT_signature *s ) { int n, i; if( !d ) d = m_alloc(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->hashed_data = cp_data_block(s->hashed_data); d->unhashed_data = cp_data_block(s->unhashed_data); return d; } PKT_user_id * copy_user_id( PKT_user_id *d, PKT_user_id *s ) { if( !d ) d = m_alloc(sizeof *d + s->len - 1 ); memcpy( d, s, sizeof *d + s->len - 1 ); return d; } 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 ); m_free(sk); } PKT_secret_key * copy_secret_key( PKT_secret_key *d, PKT_secret_key *s ) { int n, i; if( !d ) d = m_alloc(sizeof *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 ) { m_free(rem); } void free_user_id( PKT_user_id *uid ) { m_free(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_get(zd->buf) != -1 ) + while( iobuf_read( zd->buf, NULL, 1<<30 ) != -1 ) ; } m_free(zd); } void free_encrypted( PKT_encrypted *ed ) { if( ed->buf ) { /* have to skip some bytes */ if( iobuf_in_block_mode(ed->buf) ) { - while( iobuf_get(ed->buf) != -1 ) + while( iobuf_read( ed->buf, NULL, 1<<30 ) != -1 ) ; } else { - for( ; ed->len; ed->len-- ) /* skip the packet */ - iobuf_get(ed->buf); + while( ed->len ) /* skip the packet */ + ed->len -= iobuf_read( ed->buf, NULL, ed->len ); } } m_free(ed); } void free_plaintext( PKT_plaintext *pt ) { if( pt->buf ) { /* have to skip some bytes */ if( iobuf_in_block_mode(pt->buf) ) { - while( iobuf_get(pt->buf) != -1 ) + while( iobuf_read( pt->buf, NULL, 1<<30 ) != -1 ) ; } else { - for( ; pt->len; pt->len-- ) /* skip the packet */ - iobuf_get(pt->buf); + while( pt->len ) /* skip the packet */ + pt->len -= iobuf_read( pt->buf, NULL, pt->len ); } } m_free(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: free_encrypted( pkt->pkt.encrypted ); break; case PKT_PLAINTEXT: free_plaintext( pkt->pkt.plaintext ); break; default: m_free( 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 ) return -1; /* can't compare due to unknown algorithm */ 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 ) return -1; /* can't compare due to unknown algorithm */ 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; res = a->len - b->len; if( !res ) res = memcmp( a->name, b->name, a->len ); return res; } diff --git a/g10/g10.c b/g10/g10.c index c53053746..eb6d32ff3 100644 --- a/g10/g10.c +++ b/g10/g10.c @@ -1,1472 +1,1477 @@ /* g10.c - The GnuPG utility (main for gpg) * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include #include #define MAINTAINER_OPTIONS #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 "g10defs.h" #include "hkp.h" 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', aSign = 's', oTextmodeShort= 't', oUser = 'u', oVerbose = 'v', oCompress = 'z', oNotation = 'N', oBatch = 500, aClearsign, aStore, aKeygen, aSignEncr, aSignKey, aListPackets, aEditKey, aDeleteKey, aDeleteSecretKey, aKMode, aKModeC, aImport, aFastImport, aVerify, aListKeys, aListSigs, aListSecretKeys, aSendKeys, aRecvKeys, aExport, aExportAll, aExportSecret, aCheckKeys, aGenRevoke, aPrimegen, aPrintMD, aPrintMDs, aCheckTrustDB, aUpdateTrustDB, aFixTrustDB, aListTrustDB, aListTrustPath, aExportOwnerTrust, aImportOwnerTrust, aDeArmor, aEnArmor, aGenRandom, oTextmode, oFingerprint, oAnswerYes, oAnswerNo, oKeyring, oSecretKeyring, oDefaultKey, oOptions, oDebug, oDebugAll, oStatusFD, oNoComment, oNoVersion, oCompletesNeeded, oMarginalsNeeded, oMaxCertDepth, oLoadExtension, oRFC1991, oCipherAlgo, oDigestAlgo, oCompressAlgo, oPasswdFD, oQuickRandom, oNoVerbose, oTrustDBName, oNoSecmemWarn, oNoArmor, oNoDefKeyring, oNoGreeting, oNoOptions, oNoBatch, oHomedir, oWithColons, oSkipVerify, oCompressKeys, oCompressSigs, oAlwaysTrust, oEmuChecksumBug, oRunAsShmCP, oSetFilename, oSetPolicyURL, oComment, oThrowKeyid, oForceV3Sigs, oForceMDC, oS2KMode, oS2KDigest, oS2KCipher, oCharset, oNotDashEscaped, oEscapeFrom, oLockOnce, oKeyServer, oEncryptTo, oNoEncryptTo, oLoggerFD, aTest }; 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")}, { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")}, { aStore, "store", 256, N_("store only")}, { aDecrypt, "decrypt", 256, N_("decrypt data (default)")}, { aVerify, "verify" , 256, N_("verify a signature")}, { 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_("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")}, { aDeleteKey, "delete-key",256, N_("remove key from the public keyring")}, { aEditKey, "edit-key" ,256, N_("sign or edit a key")}, { aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")}, { 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") }, { aExportAll, "export-all" , 256, "@" }, { aExportSecret, "export-secret-keys" , 256, "@" }, { aImport, "import", 256 , N_("import/merge keys")}, { aFastImport, "fast-import", 256 , "@"}, { aListPackets, "list-packets",256,N_("list only the sequence of packets")}, { aExportOwnerTrust, "export-ownertrust", 256, N_("export the ownertrust values")}, { aImportOwnerTrust, "import-ownertrust", 256 , N_("import ownertrust values")}, { aUpdateTrustDB, "update-trustdb",0 , N_("|[NAMES]|update the trust database")}, { aCheckTrustDB, "check-trustdb",0 , N_("|[NAMES]|check the trust database")}, { aFixTrustDB, "fix-trustdb",0 , N_("fix a corrupted trust database")}, { aDeArmor, "dearmor", 256, N_("De-Armor a file or stdin") }, { aEnArmor, "enarmor", 256, N_("En-Armor a file or stdin") }, { aPrintMD, "print-md" , 256, N_("|algo [files]|print message digests")}, { aPrintMDs, "print-mds" , 256, N_("print all message digests")}, #ifdef MAINTAINER_OPTIONS { aPrimegen, "gen-prime" , 256, "@" }, { aGenRandom, "gen-random" , 256, "@" }, #endif { 301, NULL, 0, N_("@\nOptions:\n ") }, { oArmor, "armor", 0, N_("create ascii armored output")}, { oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")}, { oRecipient, "remote-user", 2, "@"}, /* old option name */ { oEncryptTo, "encrypt-to", 2, "@" }, { oNoEncryptTo, "no-encrypt-to", 0, "@" }, { oUser, "local-user",2, N_("use this user-id to sign or decrypt")}, { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") }, { oTextmodeShort, NULL, 0, "@"}, { oTextmode, "textmode", 0, N_("use canonical text mode")}, { oOutput, "output", 2, N_("use as output file")}, { oVerbose, "verbose", 0, N_("verbose") }, { oQuiet, "quiet", 0, N_("be somewhat more quiet") }, { oForceV3Sigs, "force-v3-sigs", 0, N_("force v3 signatures") }, { oForceMDC, "force-mdc", 0, N_("always use a MDC for encryption") }, { oDryRun, "dry-run", 0, N_("do not make any changes") }, /*{ oInteractive, "interactive", 0, N_("prompt before overwriting") }, */ { oBatch, "batch", 0, N_("batch mode: never ask")}, { oAnswerYes, "yes", 0, N_("assume yes on most questions")}, { oAnswerNo, "no", 0, N_("assume no on most questions")}, { oKeyring, "keyring" ,2, N_("add this keyring to the list of keyrings")}, { oSecretKeyring, "secret-keyring" ,2, N_("add this secret keyring to the list")}, { oDefaultKey, "default-key" ,2, N_("|NAME|use NAME as default secret key")}, { oKeyServer, "keyserver",2, N_("|HOST|use this keyserver to lookup keys")}, { oCharset, "charset" , 2, N_("|NAME|set terminal charset to NAME") }, { oOptions, "options" , 2, N_("read options from file")}, { oDebug, "debug" ,4|16, N_("set debugging flags")}, { oDebugAll, "debug-all" ,0, N_("enable full debugging")}, { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") }, { oNoComment, "no-comment", 0, N_("do not write comment packets")}, { oCompletesNeeded, "completes-needed", 1, N_("(default is 1)")}, { oMarginalsNeeded, "marginals-needed", 1, N_("(default is 3)")}, { oMaxCertDepth, "max-cert-depth", 1, "@" }, { oLoadExtension, "load-extension" ,2, N_("|FILE|load extension module FILE")}, { oRFC1991, "rfc1991", 0, N_("emulate the mode described in RFC1991")}, { oS2KMode, "s2k-mode", 1, N_("|N|use passphrase mode N")}, { oS2KDigest, "s2k-digest-algo",2, N_("|NAME|use message digest algorithm NAME for passphrases")}, { oS2KCipher, "s2k-cipher-algo",2, N_("|NAME|use cipher algorithm NAME for passphrases")}, { oCipherAlgo, "cipher-algo", 2 , N_("|NAME|use cipher algorithm NAME")}, { oDigestAlgo, "digest-algo", 2 , N_("|NAME|use message digest algorithm NAME")}, { oCompressAlgo, "compress-algo", 1 , N_("|N|use compress algorithm N")}, { oThrowKeyid, "throw-keyid", 0, N_("throw keyid field of encrypted packets")}, { oNotation, "notation-data", 2, N_("|NAME=VALUE|use this notation data")}, { 302, 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 */ { aExportOwnerTrust, "list-ownertrust",0 , "@"}, /* alias */ { aListTrustDB, "list-trustdb",0 , "@"}, { aListTrustPath, "list-trust-path",0, "@"}, { oKOption, NULL, 0, "@"}, { oPasswdFD, "passphrase-fd",1, "@" }, { aSignKey, "sign-key" ,256, "@" }, /* alias for edit-key */ { aDeleteSecretKey, "delete-secret-key",0, "@" }, { oQuickRandom, "quick-random", 0, "@"}, { oNoVerbose, "no-verbose", 0, "@"}, { oTrustDBName, "trustdb-name", 2, "@" }, { oNoSecmemWarn, "no-secmem-warning", 0, "@" }, /* used only by regression tests */ { oNoArmor, "no-armor", 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, "@"}, { 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, "@"}, { oAlwaysTrust, "always-trust", 0, "@"}, { oEmuChecksumBug, "emulate-checksum-bug", 0, "@"}, { oRunAsShmCP, "run-as-shm-coprocess", 4, "@" }, { oSetFilename, "set-filename", 2, "@" }, { oSetPolicyURL, "set-policy-url", 2, "@" }, { oComment, "comment", 2, "@" }, { oNoVersion, "no-version", 0, "@"}, { oNotDashEscaped, "not-dash-escaped", 0, "@" }, { oEscapeFrom, "escape-from-lines", 0, "@" }, { oLockOnce, "lock-once", 0, "@" }, { oLoggerFD, "logger-fd",1, "@" }, {0} }; int g10_errors_seen = 0; static int maybe_setuid = 1; static char *build_list( const char *text, 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_hex( byte *p, size_t n ); static void print_mds( const char *fname, int algo ); static void add_notation_data( const char *string ); static int check_policy_url( const char *s ); const char * strusage( int level ) { static char *digests, *pubkeys, *ciphers; 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; 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 = _("\nSupported algorithms:\n"); break; case 32: if( !ciphers ) ciphers = build_list("Cipher: ", cipher_algo_to_string, check_cipher_algo ); p = ciphers; break; case 33: if( !pubkeys ) pubkeys = build_list("Pubkey: ", pubkey_algo_to_string, check_pubkey_algo ); p = pubkeys; break; case 34: if( !digests ) digests = build_list("Hash: ", digest_algo_to_string, check_digest_algo ); p = digests; break; default: p = default_strusage(level); } return p; } static char * build_list( const char *text, const char * (*mapf)(int), int (*chkf)(int) ) { int i; const char *s; size_t n=strlen(text)+2; char *list, *p; if( maybe_setuid ) secmem_init( 0 ); /* drop setuid */ for(i=1; i < 110; i++ ) if( !chkf(i) && (s=mapf(i)) ) n += strlen(s) + 2; list = m_alloc( 21 + n ); *list = 0; for(p=NULL, i=1; i < 110; i++ ) { if( !chkf(i) && (s=mapf(i)) ) { if( !p ) p = stpcpy( list, text ); else p = stpcpy( p, ", "); p = stpcpy(p, s ); } } if( p ) p = stpcpy(p, "\n" ); return list; } static void i18n_init(void) { #ifdef ENABLE_NLS #ifdef HAVE_LC_MESSAGES setlocale( LC_TIME, "" ); setlocale( LC_MESSAGES, "" ); #else setlocale( LC_ALL, "" ); #endif bindtextdomain( PACKAGE, G10_LOCALEDIR ); textdomain( PACKAGE ); #endif } static void wrong_args( const char *text) { fputs(_("usage: gpg [options] "),stderr); fputs(text,stderr); putc('\n',stderr); g10_exit(2); } 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; } 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 == aKMode && new_cmd == aSym ) cmd = aKModeC; 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; } int main( int argc, char **argv ) { ARGPARSE_ARGS pargs; IOBUF a; int rc=0; int orig_argc; char **orig_argv; const char *fname; STRLIST sl, remusr= NULL, locusr=NULL; STRLIST nrings=NULL, sec_nrings=NULL; armor_filter_context_t afx; int detached_sig = 0; FILE *configfp = NULL; char *configname = NULL; unsigned configlineno; int parse_debug = 0; int default_config =1; int default_keyring = 1; int greeting = 1; enum cmd_and_opt_values cmd = 0; const char *trustdb_name = NULL; char *def_cipher_string = NULL; char *def_digest_string = NULL; char *s2k_cipher_string = NULL; char *s2k_digest_string = NULL; int pwfd = -1; #ifdef USE_SHM_COPROCESSING ulong requested_shm_size=0; #endif trap_unaligned(); secmem_set_flags( secmem_get_flags() | 2 ); /* suspend warnings */ /* Please note that we may running SUID(ROOT), so be very CAREFUL * when adding any stuff between here and the call to * secmem_init() somewhere after the option parsing */ log_set_name("gpg"); secure_random_alloc(); /* put random number into secure memory */ disable_core_dumps(); init_signals(); create_dotlock(NULL); /* register locking cleanup */ i18n_init(); opt.compress = -1; /* defaults to standard compress level */ /* fixme: set the next two to zero and decide where used */ opt.def_cipher_algo = 0; opt.def_digest_algo = 0; opt.def_compress_algo = 2; opt.s2k_mode = 1; /* salted */ opt.s2k_digest_algo = DIGEST_ALGO_RMD160; opt.s2k_cipher_algo = CIPHER_ALGO_BLOWFISH; opt.completes_needed = 1; opt.marginals_needed = 3; opt.max_cert_depth = 5; opt.homedir = getenv("GNUPGHOME"); if( !opt.homedir || !*opt.homedir ) { #ifdef HAVE_DRIVE_LETTERS opt.homedir = "c:/gnupg"; #else opt.homedir = "~/.gnupg"; #endif } /* check whether we have a config file on the commandline */ orig_argc = argc; orig_argv = argv; pargs.argc = &argc; pargs.argv = &argv; pargs.flags= 1|(1<<6); /* do not remove the args, ignore version */ while( arg_parse( &pargs, opts) ) { if( pargs.r_opt == oDebug || pargs.r_opt == oDebugAll ) parse_debug++; else if( pargs.r_opt == oOptions ) { /* yes there is one, so we do not try the default one, but * read the option file when it is encountered at the commandline */ default_config = 0; } else if( pargs.r_opt == oNoOptions ) default_config = 0; /* --no-options */ else if( pargs.r_opt == oHomedir ) opt.homedir = pargs.r.ret_str; #ifdef USE_SHM_COPROCESSING else if( pargs.r_opt == oRunAsShmCP ) { /* does not make sense in a options file, we do it here, * so that we are the able to drop setuid as soon as possible */ opt.shm_coprocess = 1; requested_shm_size = pargs.r.ret_ulong; } + else if ( pargs.r_opt == oStatusFD ) { + /* this is needed to ensure that the status-fd filedescriptor is + * initialized when init_shm_coprocessing() is called */ + set_status_fd( pargs.r.ret_int ); + } #endif } #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) { init_shm_coprocessing(requested_shm_size, 1 ); } #endif /* initialize the secure memory. */ secmem_init( 16384 ); maybe_setuid = 0; /* Okay, we are now working under our real uid */ if( default_config ) configname = make_filename(opt.homedir, "options", NULL ); argc = orig_argc; argv = orig_argv; pargs.argc = &argc; pargs.argv = &argv; pargs.flags= 1; /* do not remove the args */ next_pass: if( configname ) { configlineno = 0; configfp = fopen( configname, "r" ); if( !configfp ) { if( default_config ) { if( parse_debug ) log_info(_("NOTE: no default option file `%s'\n"), configname ); } else { log_error(_("option file `%s': %s\n"), configname, strerror(errno) ); g10_exit(2); } m_free(configname); configname = NULL; } if( parse_debug && configname ) log_info(_("reading options from `%s'\n"), configname ); default_config = 0; } while( optfile_parse( configfp, configname, &configlineno, &pargs, opts) ) { switch( pargs.r_opt ) { case aCheckKeys: set_cmd( &cmd, aCheckKeys); break; case aListPackets: set_cmd( &cmd, aListPackets); break; case aImport: set_cmd( &cmd, aImport); break; case aFastImport: set_cmd( &cmd, aFastImport); break; case aSendKeys: set_cmd( &cmd, aSendKeys); break; case aRecvKeys: set_cmd( &cmd, aRecvKeys); break; case aExport: set_cmd( &cmd, aExport); break; case aExportAll: set_cmd( &cmd, aExportAll); break; case aListKeys: set_cmd( &cmd, aListKeys); break; case aListSigs: set_cmd( &cmd, aListSigs); break; case aExportSecret: set_cmd( &cmd, aExportSecret); break; case aDeleteSecretKey: set_cmd( &cmd, aDeleteSecretKey); break; case aDeleteKey: set_cmd( &cmd, aDeleteKey); break; case aDetachedSign: detached_sig = 1; set_cmd( &cmd, aSign ); break; case aSym: set_cmd( &cmd, aSym); break; case aDecrypt: set_cmd( &cmd, aDecrypt); break; case aEncr: set_cmd( &cmd, aEncr); break; case aSign: set_cmd( &cmd, aSign ); break; case aKeygen: set_cmd( &cmd, aKeygen); break; case aSignKey: set_cmd( &cmd, aSignKey); break; case aStore: set_cmd( &cmd, aStore); break; case aEditKey: set_cmd( &cmd, aEditKey); break; case aClearsign: set_cmd( &cmd, aClearsign); break; case aGenRevoke: set_cmd( &cmd, aGenRevoke); break; case aVerify: set_cmd( &cmd, aVerify); break; #ifdef MAINTAINER_OPTIONS case aPrimegen: set_cmd( &cmd, aPrimegen); break; case aGenRandom: set_cmd( &cmd, aGenRandom); break; #endif case aPrintMD: set_cmd( &cmd, aPrintMD); break; case aPrintMDs: set_cmd( &cmd, aPrintMDs); break; case aListTrustDB: set_cmd( &cmd, aListTrustDB); break; case aCheckTrustDB: set_cmd( &cmd, aCheckTrustDB); break; case aUpdateTrustDB: set_cmd( &cmd, aUpdateTrustDB); break; case aFixTrustDB: set_cmd( &cmd, aFixTrustDB); break; case aListTrustPath: set_cmd( &cmd, aListTrustPath); break; case aDeArmor: set_cmd( &cmd, aDeArmor); greeting = 0; break; case aEnArmor: set_cmd( &cmd, aEnArmor); greeting = 0; break; case aExportOwnerTrust: set_cmd( &cmd, aExportOwnerTrust); break; case aImportOwnerTrust: set_cmd( &cmd, aImportOwnerTrust); break; case oArmor: opt.armor = 1; opt.no_armor=0; break; case oOutput: opt.outfile = pargs.r.ret_str; break; case oQuiet: opt.quiet = 1; break; case oDryRun: opt.dry_run = 1; break; case oInteractive: opt.interactive = 1; break; case oVerbose: g10_opt_verbose++; opt.verbose++; opt.list_sigs=1; break; case oKOption: set_cmd( &cmd, aKMode ); break; case oBatch: opt.batch = 1; greeting = 0; break; case oAnswerYes: opt.answer_yes = 1; break; case oAnswerNo: opt.answer_no = 1; break; case oKeyring: append_to_strlist( &nrings, pargs.r.ret_str); break; case oDebug: opt.debug |= pargs.r.ret_ulong; break; case oDebugAll: opt.debug = ~0; break; case oStatusFD: set_status_fd( pargs.r.ret_int ); break; case oLoggerFD: log_set_logfile( NULL, pargs.r.ret_int ); break; case oFingerprint: opt.fingerprint++; 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 ) { m_free(configname); configname = m_strdup(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: greeting = 0; break; case oNoVerbose: g10_opt_verbose = 0; opt.verbose = 0; opt.list_sigs=0; break; case oQuickRandom: quick_random_gen(1); break; case oNoComment: opt.no_comment=1; break; case oNoVersion: opt.no_version=1; 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 oNoOptions: break; /* no-options */ case oHomedir: opt.homedir = pargs.r.ret_str; break; case oNoBatch: opt.batch = 0; break; case oWithColons: opt.with_colons=':'; break; case oSkipVerify: opt.skip_verify=1; break; case oCompressAlgo: opt.def_compress_algo = pargs.r.ret_int; break; case oCompressKeys: opt.compress_keys = 1; break; case aListSecretKeys: set_cmd( &cmd, aListSecretKeys); break; case oAlwaysTrust: opt.always_trust = 1; break; case oLoadExtension: register_cipher_extension(orig_argc? *orig_argv:NULL, pargs.r.ret_str); break; case oRFC1991: opt.rfc1991 = 1; opt.no_comment = 1; opt.escape_from = 1; break; case oEmuChecksumBug: opt.emulate_bugs |= EMUBUG_GPGCHKSUM; break; case oCompressSigs: opt.compress_sigs = 1; break; case oRunAsShmCP: #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 break; case oSetFilename: opt.set_filename = pargs.r.ret_str; break; case oSetPolicyURL: opt.set_policy_url = pargs.r.ret_str; break; case oComment: opt.comment_string = pargs.r.ret_str; break; case oThrowKeyid: opt.throw_keyid = 1; break; case oForceV3Sigs: opt.force_v3_sigs = 1; break; case oForceMDC: opt.force_mdc = 1; break; case oS2KMode: opt.s2k_mode = pargs.r.ret_int; break; case oS2KDigest: s2k_digest_string = m_strdup(pargs.r.ret_str); break; case oS2KCipher: s2k_cipher_string = m_strdup(pargs.r.ret_str); break; case oNoEncryptTo: opt.no_encrypt_to = 1; break; case oEncryptTo: /* store the recipient in the second list */ sl = add_to_strlist( &remusr, pargs.r.ret_str ); sl->flags = 1; break; case oRecipient: /* store the recipient */ add_to_strlist( &remusr, pargs.r.ret_str ); break; case oTextmodeShort: opt.textmode = 2; break; case oTextmode: opt.textmode=1; break; case oUser: /* store the local users */ add_to_strlist( &locusr, pargs.r.ret_str ); break; case oCompress: opt.compress = pargs.r.ret_int; break; case oPasswdFD: pwfd = pargs.r.ret_int; break; case oCipherAlgo: def_cipher_string = m_strdup(pargs.r.ret_str); break; case oDigestAlgo: def_digest_string = m_strdup(pargs.r.ret_str); break; case oNoSecmemWarn: secmem_set_flags( secmem_get_flags() | 1 ); break; case oCharset: 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 oLockOnce: opt.lock_once = 1; break; case oKeyServer: opt.keyserver_name = pargs.r.ret_str; break; case oNotation: add_notation_data( pargs.r.ret_str ); break; default : pargs.err = configfp? 1:2; break; } } if( configfp ) { fclose( configfp ); configfp = NULL; m_free(configname); configname = NULL; goto next_pass; } m_free( configname ); configname = NULL; if( log_get_errorcount(0) ) g10_exit(2); if( greeting ) { fprintf(stderr, "%s %s; %s\n", strusage(11), strusage(13), strusage(14) ); fprintf(stderr, "%s\n", strusage(15) ); #ifdef IS_DEVELOPMENT_VERSION log_info("NOTE: this is a development version!\n"); #endif } if( opt.batch ) tty_batchmode( 1 ); secmem_set_flags( secmem_get_flags() & ~2 ); /* resume warnings */ set_debug(); g10_opt_homedir = opt.homedir; /* 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); m_free(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); m_free(def_digest_string); def_digest_string = NULL; if( check_digest_algo(opt.def_digest_algo) ) log_error(_("selected digest algorithm is invalid\n")); } if( s2k_cipher_string ) { opt.s2k_cipher_algo = string_to_cipher_algo(s2k_cipher_string); m_free(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); m_free(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.set_policy_url ) { if( check_policy_url( opt.set_policy_url ) ) log_error(_("the given policy URL is invalid\n")); } if( opt.def_compress_algo < 1 || opt.def_compress_algo > 2 ) log_error(_("compress algorithm must be in range %d..%d\n"), 1, 2); 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 range 1 to 255\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")); } if( log_get_errorcount(0) ) g10_exit(2); if( !cmd && opt.fingerprint ) 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); /* add the keyrings, but not for some special commands and * not in case of "-kvv userid keyring" */ if( cmd != aDeArmor && cmd != aEnArmor && !(cmd == aKMode && argc == 2 ) ) { if( !sec_nrings && default_keyring ) /* add default secret rings */ add_keyblock_resource("secring.gpg", 0, 1); for(sl = sec_nrings; sl; sl = sl->next ) add_keyblock_resource( sl->d, 0, 1 ); if( !nrings && default_keyring ) /* add default ring */ add_keyblock_resource("pubring.gpg", 0, 0); for(sl = nrings; sl; sl = sl->next ) add_keyblock_resource( sl->d, 0, 0 ); } FREE_STRLIST(nrings); FREE_STRLIST(sec_nrings); if( pwfd != -1 ) /* read the passphrase now. */ read_passphrase_from_fd( pwfd ); fname = argc? *argv : NULL; switch( cmd ) { case aPrimegen: case aPrintMD: case aPrintMDs: case aGenRandom: case aDeArmor: case aEnArmor: case aFixTrustDB: break; case aKMode: case aListKeys: case aListSecretKeys: case aCheckKeys: if( opt.with_colons ) /* need this to list the trust */ rc = setup_trustdb(1, trustdb_name ); break; case aExportOwnerTrust: rc = setup_trustdb( 0, trustdb_name ); break; case aListTrustDB: rc = setup_trustdb( argc? 1:0, trustdb_name ); break; default: rc = setup_trustdb(1, trustdb_name ); break; } if( rc ) log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc)); switch( cmd ) { case aStore: /* only store the file */ if( argc > 1 ) wrong_args(_("--store [filename]")); if( (rc = encode_store(fname)) ) log_error_f( print_fname_stdin(fname), "store failed: %s\n", 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_f(print_fname_stdin(fname), "symmetric encryption failed: %s\n",g10_errstr(rc) ); break; case aEncr: /* encrypt the given file */ if( argc > 1 ) wrong_args(_("--encrypt [filename]")); if( (rc = encode_crypt(fname,remusr)) ) 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 = m_alloc_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 = m_alloc_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 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( (rc = verify_signatures( argc, argv ) )) log_error("verify signatures failed: %s\n", g10_errstr(rc) ); break; case aDecrypt: 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: /* sign the key given as argument */ case aEditKey: /* Edit a key signature */ if( !argc ) wrong_args(_("--edit-key username [commands]")); if( argc > 1 ) { sl = NULL; for( argc--, argv++ ; argc; argc--, argv++ ) append_to_strlist( &sl, *argv ); keyedit_menu( fname, locusr, sl ); free_strlist(sl); } else keyedit_menu(fname, locusr, NULL ); break; case aDeleteSecretKey: if( argc != 1 ) wrong_args(_("--delete-secret-key username")); case aDeleteKey: if( argc != 1 ) wrong_args(_("--delete-key username")); /* note: fname is the user id! */ if( (rc = delete_key(fname, cmd==aDeleteSecretKey)) ) log_error("%s: delete key failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); break; case aCheckKeys: opt.check_sigs = 1; case aListSigs: opt.list_sigs = 1; case aListKeys: public_key_list( argc, argv ); break; case aListSecretKeys: secret_key_list( argc, argv ); break; case aKMode: /* list keyring */ if( argc < 2 ) /* -kv [userid] */ public_key_list( (argc && **argv)? 1:0, argv ); 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 */ add_keyblock_resource( argv[1], 0, 0 ); public_key_list( **argv?1:0, argv ); } } else wrong_args(_("-k[v][v][v][c] [userid] [keyring]") ); break; case aKeygen: /* generate a key (interactive) */ if( argc ) wrong_args("--gen-key"); generate_keypair(); break; case aFastImport: case aImport: if( !argc ) { rc = import_keys( NULL, (cmd == aFastImport) ); if( rc ) log_error("import failed: %s\n", g10_errstr(rc) ); } for( ; argc; argc--, argv++ ) { rc = import_keys( *argv, (cmd == aFastImport) ); if( rc ) log_error("import from `%s' failed: %s\n", *argv, g10_errstr(rc) ); } break; case aExport: case aExportAll: case aSendKeys: case aRecvKeys: sl = NULL; for( ; argc; argc--, argv++ ) add_to_strlist( &sl, *argv ); if( cmd == aSendKeys ) hkp_export( sl ); else if( cmd == aRecvKeys ) hkp_import( sl ); else export_pubkeys( sl, (cmd == aExport) ); free_strlist(sl); break; case aExportSecret: sl = NULL; for( ; argc; argc--, argv++ ) add_to_strlist( &sl, *argv ); export_seckeys( sl ); free_strlist(sl); break; case aGenRevoke: if( argc != 1 ) wrong_args("--gen-revoke user-id"); gen_revoke( *argv ); 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; #ifdef MAINTAINER_OPTIONS case aPrimegen: if( argc == 1 ) { mpi_print( stdout, generate_public_prime( atoi(argv[0]) ), 1); putchar('\n'); } else if( argc == 2 ) { mpi_print( stdout, generate_elg_prime( 0, atoi(argv[0]), atoi(argv[1]), NULL,NULL ), 1); putchar('\n'); } else if( argc == 3 ) { MPI g = mpi_alloc(1); mpi_print( stdout, generate_elg_prime( 0, atoi(argv[0]), atoi(argv[1]), g, NULL ), 1); printf("\nGenerator: "); mpi_print( stdout, g, 1 ); putchar('\n'); mpi_free(g); } else if( argc == 4 ) { mpi_print( stdout, generate_elg_prime( 1, atoi(argv[0]), atoi(argv[1]), NULL,NULL ), 1); putchar('\n'); } else usage(1); break; #endif /* MAINTAINER OPTIONS */ #ifdef MAINTAINER_OPTIONS case aGenRandom: if( argc < 1 || argc > 2 ) wrong_args("--gen-random level [hex]"); { int c; int level = atoi(*argv); for(;;) { byte *p; if( argc == 2 ) { p = get_random_bits( 8, level, 0); printf("%02x", *p ); fflush(stdout); } else { p = get_random_bits( 800, level, 0); for(c=0; c < 100; c++ ) putchar( p[c] ); } m_free(p); } } break; #endif /* MAINTAINER OPTIONS */ case aPrintMD: if( argc < 1) wrong_args("--print-md algo [file]"); else { int algo = string_to_digest_algo(*argv); if( !algo ) 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: 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: if( !argc ) check_trustdb(NULL); else { for( ; argc; argc--, argv++ ) check_trustdb( *argv ); } break; case aFixTrustDB: log_error("this command ist not yet implemented.\"\n"); log_error("A workaround is to use \"--export-ownertrust\", remove\n"); log_error("the trustdb file and do an \"--import-ownertrust\".\n" ); break; case aListTrustPath: if( !argc ) wrong_args("--list-trust-path "); for( ; argc; argc--, argv++ ) list_trust_path( *argv ); 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 aListPackets: opt.list_packets=1; 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")); if( !(a = iobuf_open(fname)) ) 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 ) { if( opt.debug & DBG_MEMSTAT_VALUE ) m_print_stats("on exit"); if( opt.debug ) secmem_dump_stats(); secmem_term(); rc = rc? rc : log_get_errorcount(0)? 2 : g10_errors_seen? 1 : 0; /*write_status( STATUS_LEAVE );*/ exit(rc ); } static void print_hex( byte *p, size_t n ) { int i; if( n == 20 ) { for(i=0; i < n ; i++, i++, p += 2 ) { if( i ) putchar(' '); if( i == 10 ) putchar(' '); printf("%02X%02X", *p, p[1] ); } } else if( n == 24 ) { for(i=0; i < n ; i += 4, p += 4 ) { if( i ) putchar(' '); if( i == 12 ) putchar(' '); printf("%02X%02X%02X%02X", *p, p[1], p[2], p[3] ); } } else { for(i=0; i < n ; i++, p++ ) { if( i ) putchar(' '); if( i && !(i%8) ) putchar(' '); printf("%02X", *p ); } } } static void print_mds( const char *fname, int algo ) { FILE *fp; char buf[1024]; size_t n; MD_HANDLE md; char *pname; if( !fname ) { fp = stdin; pname = m_strdup("[stdin]: "); } else { pname = m_alloc(strlen(fname)+3); strcpy(stpcpy(pname,fname),": "); fp = fopen( fname, "rb" ); } if( !fp ) { log_error("%s%s\n", pname, strerror(errno) ); m_free(pname); 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 ); if( !check_digest_algo(DIGEST_ALGO_TIGER) ) md_enable( md, DIGEST_ALGO_TIGER ); } while( (n=fread( buf, 1, DIM(buf), fp )) ) md_write( md, buf, n ); if( ferror(fp) ) log_error("%s%s\n", pname, strerror(errno) ); else { md_final(md); if( algo ) { if( fname ) fputs( pname, stdout ); print_hex(md_read(md, algo), md_digest_length(algo) ); } else { printf( "%s MD5 = ", fname?pname:"" ); print_hex(md_read(md, DIGEST_ALGO_MD5), 16 ); printf("\n%s SHA1 = ", fname?pname:"" ); print_hex(md_read(md, DIGEST_ALGO_SHA1), 20 ); printf("\n%sRMD160 = ", fname?pname:"" ); print_hex(md_read(md, DIGEST_ALGO_RMD160), 20 ); if( !check_digest_algo(DIGEST_ALGO_TIGER) ) { printf("\n%s TIGER = ", fname?pname:"" ); print_hex(md_read(md, DIGEST_ALGO_TIGER), 24 ); } } putchar('\n'); } 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. */ static void add_notation_data( const char *string ) { const char *s; const char *s2; STRLIST sl; int critical=0; int highbit=0; if( *string == '!' ) { critical = 1; string++; } s = string; if( !*s || (*s & 0x80) || (!isalpha(*s) && *s != '_') ) { log_error(_("the first character of a notation name " "must be a letter or an underscore\n") ); return; } for(s++; *s != '='; s++ ) { if( !*s || (*s & 0x80) || (!isalnum(*s) && *s != '_' && *s != '.' ) ) { log_error(_("a notation name must have only letters, " "digits, dots or underscores and end with an '='\n") ); return; } } if( s[-1] == '.' || ((s2=strstr(string, "..")) && s2 < s ) ) { log_error(_("dots in a notation name must be surrounded " "by other characters\n") ); return; } /* we do only support printabe text - therefore we enforce the use * of only printable characters (an empty value is valid) */ for( s++; *s ; s++ ) { if( iscntrl(*s) ) { log_error(_("a notation value must not use " "any control characters\n") ); return; } else if( *s & 0x80 ) highbit = 1; } if( highbit ) { /* must use UTF8 encoding */ char *p = native_to_utf8( string ); sl = add_to_strlist( &opt.notation_data, p ); m_free( p ); } else sl = add_to_strlist( &opt.notation_data, string ); if( critical ) sl->flags |= 1; } static int check_policy_url( const char *s ) { if( *s == '!' ) s++; if( !*s ) return -1; for(; *s ; s++ ) { if( (*s & 0x80) || iscntrl(*s) ) return -1; } return 0; } diff --git a/g10/mdfilter.c b/g10/mdfilter.c index 2cdbd326d..951fd730e 100644 --- a/g10/mdfilter.c +++ b/g10/mdfilter.c @@ -1,80 +1,76 @@ /* mdfilter.c - filter data and calculate a message digest * Copyright (C) 1998 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include #include "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, c, rc=0; + int i, rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { if( mfx->maxbuf_size && size > mfx->maxbuf_size ) size = mfx->maxbuf_size; - for(i=0; i < size; i++ ) { - if( (c = iobuf_get(a)) == -1 ) - break; - buf[i] = c; - } - + 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; } diff --git a/g10/plaintext.c b/g10/plaintext.c index 577641a6d..000ede0c3 100644 --- a/g10/plaintext.c +++ b/g10/plaintext.c @@ -1,317 +1,368 @@ /* plaintext.c - process an plaintext packet * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include #include "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" /**************** * 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; int rc = 0; int c; int convert = pt->mode == 't'; /* create the filename as C string */ if( nooutput ) ; else if( opt.outfile ) { fname = m_alloc( 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 { fname = m_alloc( pt->namelen +1 ); memcpy( fname, pt->name, pt->namelen ); fname[pt->namelen] = 0; } if( nooutput ) ; else if( !*fname || (*fname=='-' && !fname[1])) { /* no filename or "-" given; write to stdout */ fp = stdout; } else if( !overwrite_filep( fname ) ) { rc = G10ERR_CREATE_FILE; goto leave; } if( fp || nooutput ) ; else if( !(fp = fopen(fname,"wb")) ) { log_error("Error creating `%s': %s\n", fname, strerror(errno) ); rc = G10ERR_CREATE_FILE; goto leave; } if( pt->len ) { assert( !clearsig ); - 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( 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 ); + if( c == '\r' ) + continue; /* fixme: this hack might be too simple */ + if( fp ) { + 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 ) - md_putc(mfx->md, c ); - if( convert && c == '\r' ) - continue; /* fixme: this hack might be too simple */ - if( fp ) { - if( putc( c, fp ) == EOF ) { - log_error("Error writing to `%s': %s\n", - fname, strerror(errno) ); - rc = G10ERR_WRITE_FILE; + } + else { // binary mode + byte *buffer = m_alloc( 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; + m_free( buffer ); goto leave; } + if( mfx->md ) + md_write( mfx->md, buffer, len ); + if( fp ) { + if( fwrite( buffer, 1, len, fp ) != len ) { + log_error("Error writing to `%s': %s\n", + fname, strerror(errno) ); + rc = G10ERR_WRITE_FILE; + m_free( buffer ); + goto leave; + } + } + pt->len -= len; } + m_free( buffer ); } } else if( !clearsig ) { - while( (c = iobuf_get(pt->buf)) != -1 ) { - if( mfx->md ) - md_putc(mfx->md, c ); - if( convert && c == '\r' ) - continue; /* fixme: this hack might be too simple */ - if( fp ) { - if( putc( c, fp ) == EOF ) { - log_error("Error writing to `%s': %s\n", - fname, strerror(errno) ); - rc = G10ERR_WRITE_FILE; - goto leave; + if( convert ) { // text mode + while( (c = iobuf_get(pt->buf)) != -1 ) { + if( mfx->md ) + md_putc(mfx->md, c ); + if( convert && c == '\r' ) + continue; /* fixme: this hack might be too simple */ + if( fp ) { + 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 = m_alloc( 32768 ); + for( ;; ) { + int len = iobuf_read( pt->buf, buffer, 32768 ); + if( len == -1 ) + break; + if( mfx->md ) + md_write( mfx->md, buffer, len ); + if( fp ) { + if( fwrite( buffer, 1, len, fp ) != len ) { + log_error("Error writing to `%s': %s\n", + fname, strerror(errno) ); + rc = G10ERR_WRITE_FILE; + m_free( buffer ); + goto leave; + } } } + m_free( 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( 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 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: if( fp && fp != stdout ) fclose(fp); m_free(fname); return rc; } /**************** * 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_filter_context_t *mfx, const char *inname ) { char *answer = NULL; IOBUF fp; int rc = 0; int c; fp = open_sigfile( inname ); /* open default file */ if( !fp && !opt.batch ) { int any=0; tty_printf("Detached signature.\n"); do { m_free(answer); answer = cpr_get("detached_signature.filename", _("Please enter name of data file: ")); cpr_kill_prompt(); if( any && !*answer ) { rc = G10ERR_READ_FILE; goto leave; } fp = iobuf_open(answer); 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")); while( (c = getchar()) != EOF ) { if( mfx->md ) md_putc(mfx->md, c ); } } else { while( (c = iobuf_get(fp)) != -1 ) { if( mfx->md ) md_putc(mfx->md, c ); } iobuf_close(fp); } leave: m_free(answer); 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 */ while( (c = iobuf_get(fp)) != -1 ) { if( c == '\n' ) md_putc(md2, '\r' ); md_putc(md, c ); md_putc(md2, c ); } } else { while( (c = iobuf_get(fp)) != -1 ) md_putc(md, c ); } } /**************** * 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 ) { IOBUF fp; STRLIST sl=NULL; if( !files ) { /* check whether we can open the signed material */ fp = open_sigfile( sigfilename ); if( fp ) { do_hash( md, md2, fp, textmode ); iobuf_close(fp); return 0; } /* no we can't (no sigfile) - read signed stuff from stdin */ add_to_strlist( &sl, "-"); } else sl = files; for( ; sl; sl = sl->next ) { fp = iobuf_open( sl->d ); if( !fp ) { log_error(_("can't open signed data `%s'\n"), print_fname_stdin(sl->d)); if( !files ) free_strlist(sl); return G10ERR_OPEN_FILE; } do_hash( md, md2, fp, textmode ); iobuf_close(fp); } if( !files ) free_strlist(sl); return 0; } diff --git a/po/ChangeLog b/po/ChangeLog index b7f63faa1..09fa6e29f 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,118 +1,124 @@ +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 diff --git a/po/de.po b/po/de.po index 8a4017421..184169e11 100644 --- a/po/de.po +++ b/po/de.po @@ -1,3546 +1,3651 @@ # GnuPG german translation # Copyright (C) 1998 Free Software Foundation, Inc. # Walter Koch , 1998. msgid "" msgstr "" -"POT-Creation-Date: 1999-05-23 15:36+0200\n" -"PO-Revision-Date: 1999-05-08 20:24+0200\n" +"POT-Creation-Date: 1999-05-30 21:55+0200\n" +"PO-Revision-Date: 1999-05-30 21:56+0200\n" "Last-Translator: Walter Koch \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: util/secmem.c:76 msgid "Warning: using insecure memory!\n" msgstr "Warnung: Sensible Daten könnten auf Platte ausgelagert werden.\n" # " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n" # " Bitte wenden Sie sich hierzu an den Systemadministrator.\n" #: util/secmem.c:249 msgid "operation is not possible without initialized secure memory\n" msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n" #: util/secmem.c:250 msgid "(you may have used the wrong program for this task)\n" msgstr "" "(möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt)\n" -#: util/miscutil.c:156 +#: util/miscutil.c:156 util/miscutil.c:173 msgid "yes" msgstr "ja" -#: util/miscutil.c:157 +#: util/miscutil.c:157 util/miscutil.c:175 msgid "yY" msgstr "jJyY" +#: g10/keyedit.c:559 util/miscutil.c:174 +msgid "quit" +msgstr "quit" + +#: util/miscutil.c:176 +msgid "qQ" +msgstr "qQ" + #: util/errors.c:54 msgid "general error" msgstr "Allgemeiner Fehler" #: util/errors.c:55 msgid "unknown packet type" msgstr "Unbekannter Pakettyp" #: util/errors.c:56 msgid "unknown version" msgstr "Unbekannte Version" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "Unbekanntes Public-Key Verfahren" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "Unbekanntes Hashverfahren" #: util/errors.c:59 msgid "bad public key" msgstr "Falscher öffentlicher Schüssel" #: util/errors.c:60 msgid "bad secret key" msgstr "Falscher geheimer Schlüssel" #: util/errors.c:61 msgid "bad signature" msgstr "Falsche Unterschrift" #: util/errors.c:62 msgid "checksum error" msgstr "Prüfsummen-Fehler" #: util/errors.c:63 msgid "bad passphrase" msgstr "Falsches Mantra" #: util/errors.c:64 msgid "public key not found" msgstr "Öffentlicher Schlüssel nicht gefunden" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "Unbekanntes Verschlüsselungsverfahren" #: util/errors.c:66 msgid "can't open the keyring" msgstr "Der Schlüsselbund kann nicht geöffnet werden" #: util/errors.c:67 msgid "invalid packet" msgstr "Ungültiges Paket" #: util/errors.c:68 msgid "invalid armor" msgstr "Ungültige ASCII-Hülle" #: util/errors.c:69 msgid "no such user id" msgstr "Keine solche User-ID" #: util/errors.c:70 msgid "secret key not available" msgstr "Geheimer Schlüssel ist nicht vorhanden" #: util/errors.c:71 msgid "wrong secret key used" msgstr "Falscher geheimer Schlüssel benutzt" #: util/errors.c:72 msgid "not supported" msgstr "Wird nicht unterstützt" #: util/errors.c:73 msgid "bad key" msgstr "Falscher Schlüssel" #: util/errors.c:74 msgid "file read error" msgstr "Dateilesefehler" #: util/errors.c:75 msgid "file write error" msgstr "Dateischreibfehler" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "Unbekanntes Komprimierverfahren" #: util/errors.c:77 msgid "file open error" msgstr "Fehler beim Öffnen der Datei" #: util/errors.c:78 msgid "file create error" msgstr "Fehler beim Erzeugen der Datei" #: util/errors.c:79 msgid "invalid passphrase" msgstr "Ungültiges Mantra" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "Öffentliches Schlüsselverfahren ist nicht implementiert." #: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "Verschlüsselungsverfahren ist nicht implementiert" #: util/errors.c:82 msgid "unknown signature class" msgstr "Unbekannte Unterschriftenklasse" #: util/errors.c:83 msgid "trust database error" msgstr "Fehler in der Trust-DB" #: util/errors.c:84 msgid "bad MPI" msgstr "Falsche MPI" #: util/errors.c:85 msgid "resource limit" msgstr "festdefinierte Resourcenobergrenze erreicht" #: util/errors.c:86 msgid "invalid keyring" msgstr "Ungültiger Schlüsselbund" #: util/errors.c:87 msgid "bad certificate" msgstr "Falsches Zertifikat" #: util/errors.c:88 msgid "malformed user id" msgstr "Ungünstig aufgebaute User-ID" #: util/errors.c:89 msgid "file close error" msgstr "Fehler beim Schließen der Datei" #: util/errors.c:90 msgid "file rename error" msgstr "Fehler beim Umbenennen einer Datei" #: util/errors.c:91 msgid "file delete error" msgstr "Fehler beim Löschen einer Datei" #: util/errors.c:92 msgid "unexpected data" msgstr "Unerwartete Daten" #: util/errors.c:93 msgid "timestamp conflict" msgstr "Zeitangaben differieren" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "Unbenutzbares öffentliches Schlüsselverfahren" #: util/errors.c:95 msgid "file exists" msgstr "Datei existiert bereits" #: util/errors.c:96 msgid "weak key" msgstr "Unsicherer Schlüssel" #: util/errors.c:97 msgid "invalid argument" msgstr "Ungültiges Argument" #: util/errors.c:98 msgid "bad URI" msgstr "fehlerhafter URI" #: util/errors.c:99 msgid "unsupported URI" msgstr "Nicht unterstützter URI" #: util/errors.c:100 msgid "network error" msgstr "Netzwerkfehler" #: util/errors.c:102 msgid "not encrypted" msgstr "nicht verschlüsselt" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Sie haben eine Bug (Programmfehler) gefunden ... (%s:%d)\n" #: cipher/random.c:412 msgid "WARNING: using insecure random number generator!!\n" msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n" #: cipher/random.c:413 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" "\n" "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" "\n" msgstr "" "Der Zufallsgenerator (RNG) ist lediglich ein \"kludge\", damit das\n" "Programms überhaupt läuft - es ist KEINESFALLS ein starker RNG!\n" "\n" "BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT!\n" "\n" #: cipher/rndlinux.c:110 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Es sind nicht genügend Zufallswerte vorhanden. Bitte führen Sie andere\n" "Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!\n" "(Es werden noch %d Byte benötigt.)\n" -#: g10/g10.c:165 +#: g10/g10.c:167 msgid "" "@Commands:\n" " " msgstr "" "@Befehle:\n" " " -#: g10/g10.c:167 +#: g10/g10.c:169 msgid "|[file]|make a signature" -msgstr "|[file]|Eine Unterschrift erzeugen" +msgstr "|[Datei]|Eine Unterschrift erzeugen" -#: g10/g10.c:168 +#: g10/g10.c:170 msgid "|[file]|make a clear text signature" -msgstr "|[file]|Eine Klartextunterschrift erzeugen" +msgstr "|[Datei]|Eine Klartextunterschrift erzeugen" -#: g10/g10.c:169 +#: g10/g10.c:171 msgid "make a detached signature" msgstr "Eine abgetrennte Unterschrift erzeugen" -#: g10/g10.c:170 +#: g10/g10.c:172 msgid "encrypt data" msgstr "Daten verschlüsseln" -#: g10/g10.c:171 +#: g10/g10.c:173 msgid "encryption only with symmetric cipher" msgstr "Daten symmetrisch verschlüsseln" -#: g10/g10.c:172 +#: g10/g10.c:174 msgid "store only" msgstr "Nur speichern" -#: g10/g10.c:173 +#: g10/g10.c:175 msgid "decrypt data (default)" msgstr "Daten entschlüsseln (Voreinstellung)" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "verify a signature" msgstr "Signatur prüfen" -#: g10/g10.c:175 +#: g10/g10.c:177 msgid "list keys" msgstr "Liste der Schlüssel" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "list keys and signatures" msgstr "Liste der Schlüssel und ihrer Signaturen" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "check key signatures" msgstr "Signaturen der Schlüssel prüfen" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "list keys and fingerprints" msgstr "Liste der Schlüssel und ihrer \"Fingerabdrücke\"" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "list secret keys" msgstr "Liste der geheimen Schlüssel" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "generate a new key pair" msgstr "Ein neues Schlüsselpaar erzeugen" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "remove key from the public keyring" msgstr "Schlüssel entfernen" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "sign or edit a key" msgstr "Unterschreiben oder Bearbeiten eines Schlüssels" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "generate a revocation certificate" msgstr "Ein Schlüsselwiderruf-Zertifikat erzeugen" -#: g10/g10.c:185 +#: g10/g10.c:187 msgid "export keys" msgstr "Schlüssel exportieren" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "export keys to a key server" msgstr "Schlüssel zu einem Schlüsselserver exportieren" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "import keys from a key server" msgstr "Schlüssel von einem Schlüsselserver importieren" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "import/merge keys" msgstr "Schlüssel importieren/kombinieren" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "list only the sequence of packets" msgstr "Lediglich die Struktur der Datenpakete anzeigen" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export the ownertrust values" msgstr "Exportieren der \"Owner trust\" Werte" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import ownertrust values" msgstr "Importieren der \"Owner trust\" Werte" -#: g10/g10.c:198 +#: g10/g10.c:200 msgid "|[NAMES]|update the trust database" -msgstr "|[NAMES]|Ändern der \"Trust\"-Datenbank" +msgstr "|[NAMEN]|Ändern der \"Trust\"-Datenbank" -#: g10/g10.c:200 +#: g10/g10.c:202 msgid "|[NAMES]|check the trust database" -msgstr "|[NAMES]|Überprüfen der \"Trust\"-Datenbank" +msgstr "|[NAMEN]|Überprüfen der \"Trust\"-Datenbank" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "fix a corrupted trust database" msgstr "Reparieren einer beschädigten \"Trust\"-Datenbank" -#: g10/g10.c:202 +#: g10/g10.c:204 msgid "De-Armor a file or stdin" msgstr "Datei oder stdin von der ASCII-Hülle befreien" -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "En-Armor a file or stdin" msgstr "Datei oder stdin in eine ASCII-Hülle einpacken" -#: g10/g10.c:204 +#: g10/g10.c:206 msgid "|algo [files]|print message digests" -msgstr "|algo [files]|Message-Digests für die Dateien ausgeben" +msgstr "|algo [Dateien]|Message-Digests für die Dateien ausgeben" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "print all message digests" msgstr "Message-Digests für die Eingabedaten ausgeben" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Optionen:\n" " " -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "create ascii armored output" msgstr "Ausgabe mit ASCII-Hülle versehen" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "|NAME|encrypt for NAME" -msgstr "|NAME|verschlüsseln für NAME" +msgstr "|NAME|Verschlüsseln für NAME" -#: g10/g10.c:218 +#: g10/g10.c:220 msgid "use this user-id to sign or decrypt" msgstr "Mit dieser User-ID signieren" -#: g10/g10.c:219 +#: g10/g10.c:221 msgid "|N|set compress level N (0 disables)" msgstr "Kompressionsstufe auf N setzen (0=keine Kompr.)" -#: g10/g10.c:221 +#: g10/g10.c:223 msgid "use canonical text mode" msgstr "Textmodus benutzen" -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "use as output file" msgstr "Als Ausgabedatei benutzen" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "verbose" msgstr "Detaillierte Informationen" -#: g10/g10.c:224 +#: g10/g10.c:226 msgid "be somewhat more quiet" msgstr "Etwas weniger Infos" -#: g10/g10.c:225 +#: g10/g10.c:227 msgid "force v3 signatures" msgstr "v3 Signaturen erzwingen" -#: g10/g10.c:226 +#: g10/g10.c:228 msgid "always use a MDC for encryption" -msgstr "Beim Verschlüssen ein Siegel (MDC) verwenden" +msgstr "Beim Verschlüsseln ein Siegel (MDC) verwenden" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "do not make any changes" msgstr "Keine wirklichen Änderungen durchführen" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:229 +#: g10/g10.c:231 msgid "batch mode: never ask" msgstr "Stapelmodus: Keine Abfragen" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "assume yes on most questions" msgstr "\"Ja\" als Standardantwort annehmen" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "assume no on most questions" msgstr "\"Nein\" als Standardantwort annehmen" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "add this keyring to the list of keyrings" msgstr "Als öffentlichen Schlüsselbund mitbenutzen" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "add this secret keyring to the list" msgstr "Als geheimen Schlüsselbund mitbenutzen" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "|NAME|use NAME as default secret key" msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen" -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "|HOST|use this keyserver to lookup keys" -msgstr "|HOST|Schlüssel bei diesen Server nachschlagen" +msgstr "|HOST|Schlüssel bei diesem Server nachschlagen" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "|NAME|set terminal charset to NAME" msgstr "|NAME|Terminalzeichensatz NAME benutzen" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "read options from file" msgstr "Optionen aus der Datei lesen" -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "set debugging flags" msgstr "Debug-Flags einschalten" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "enable full debugging" msgstr "Alle Debug-Flags einschalten" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "|FD|write status info to this FD" msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "do not write comment packets" msgstr "Keine Kommentarpakete schreiben" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "(default is 1)" msgstr "Benötigte Vollvertrauen (Voreinstellung 1)" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "(default is 3)" msgstr "Benötigte Teilvertrauen (Voreinstellung 3)" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|FILE|load extension module FILE" -msgstr "|FILE|Erweiterungsmodul DATEI laden" +msgstr "|DATEI|Erweiterungsmodul DATEI laden" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "emulate the mode described in RFC1991" msgstr "Den in RFC1991 beschriebenen Modus nachahmen" -#: g10/g10.c:248 +#: g10/g10.c:250 msgid "|N|use passphrase mode N" msgstr "|N|Verwenden des Mantra-Modus N" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAME|Das Hashverfahren NAME für Mantras benutzen" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAME|Das Verschlü.verfahren NAME für Mantras benutzen" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAME|Das Verschlü.verfahren NAME benutzen" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|Das Hashverfahren NAME benutzen" -#: g10/g10.c:255 +#: g10/g10.c:257 msgid "|N|use compress algorithm N" msgstr "|N|Die Komprimierverfahren N benutzen" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "throw keyid field of encrypted packets" -msgstr "entferne die Absender-ID verschlüsselter Pakete" +msgstr "Entferne die Absender-ID verschlüsselter Pakete" -#: g10/g10.c:258 +#: g10/g10.c:259 +msgid "|NAME=VALUE|use this notation data" +msgstr "|NAME=WERT|verwende diese \"notation\"-Daten" + +#: g10/g10.c:261 msgid "" "@\n" "Examples:\n" "\n" " -se -r Bob [file] sign and encrypt for user Bob\n" " --clearsign [file] make a clear text signature\n" " --detach-sign [file] make a detached signature\n" " --list-keys [names] show keys\n" " --fingerprint [names] show fingerprints\n" msgstr "" "@\n" "Beispiele:\n" "\n" " -se -r Bob [Datei] Signieren und verschlüsseln für Benutzer Bob\n" " --clearsign [Datei] Eine Klartextsignatur erzeugen\n" " --detach-sign [Datei] Eine abgetrennte Signatur erzeugen\n" " --list-keys [Namen] Schlüssel anzeigen\n" " --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\n" -#: g10/g10.c:327 +#: g10/g10.c:333 msgid "Please report bugs to .\n" msgstr "Berichte über Bugs (Programmfehler) bitte an .\n" -#: g10/g10.c:331 +#: g10/g10.c:337 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)" -#: g10/g10.c:334 +#: g10/g10.c:340 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Aufruf: gpg [Optionen] [Dateien]\n" "Signieren, prüfen, verschlüsseln, entschlüsseln\n" "Die voreingestellte Operation ist abhängig von den Eingabedaten\n" -#: g10/g10.c:339 +#: g10/g10.c:345 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Unterstützte Verfahren:\n" -#: g10/g10.c:413 +#: g10/g10.c:419 msgid "usage: gpg [options] " msgstr "Aufruf: gpg [Optionen] " -#: g10/g10.c:453 +#: g10/g10.c:459 msgid "conflicting commands\n" msgstr "Widersprüchliche Befehle\n" -#: g10/g10.c:580 +#: g10/g10.c:586 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n" -#: g10/g10.c:584 +#: g10/g10.c:590 #, c-format msgid "option file `%s': %s\n" msgstr "Optionendatei '%s': %s\n" -#: g10/g10.c:591 +#: g10/g10.c:597 #, c-format msgid "reading options from `%s'\n" msgstr "Optionen werden aus '%s' gelesen\n" -#: g10/g10.c:737 +#: g10/g10.c:744 #, c-format msgid "%s is not a valid character set\n" msgstr "%s ist kein gültiger Zeichensatz.\n" -#: g10/g10.c:780 g10/g10.c:792 +#: g10/g10.c:788 g10/g10.c:800 msgid "selected cipher algorithm is invalid\n" msgstr "Das ausgewählte Verschlüsslungsverfahren ist ungültig\n" -#: g10/g10.c:786 g10/g10.c:798 +#: g10/g10.c:794 g10/g10.c:806 msgid "selected digest algorithm is invalid\n" msgstr "Das ausgewählte Hashverfahren ist ungültig\n" -#: g10/g10.c:801 +#: g10/g10.c:810 +msgid "the given policy URL is invalid\n" +msgstr "Die angegebene URL für Richtlinien ist ungültig\n" + +#: g10/g10.c:813 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "Das Komprimierverfahren muß im Bereich %d bis %d liegen\n" -#: g10/g10.c:803 +#: g10/g10.c:815 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed müssen größer als 0 sein\n" -#: g10/g10.c:805 +#: g10/g10.c:817 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed müssen größer als 1 sein\n" -#: g10/g10.c:807 +#: g10/g10.c:819 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth muß im Bereich 1 bis 255 liegen\n" -#: g10/g10.c:810 +#: g10/g10.c:822 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n" -#: g10/g10.c:814 +#: g10/g10.c:826 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ungültiger \"simple S2K\"-Modus; Wert muß 0, 1 oder 3 sein\n" -#: g10/g10.c:891 +#: g10/g10.c:903 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n" -#: g10/g10.c:897 +#: g10/g10.c:909 msgid "--store [filename]" msgstr "--store [Dateiname]" -#: g10/g10.c:904 +#: g10/g10.c:916 msgid "--symmetric [filename]" msgstr "--symmetric [Dateiname]" -#: g10/g10.c:912 +#: g10/g10.c:924 msgid "--encrypt [filename]" msgstr "--encrypt [Dateiname]" -#: g10/g10.c:925 +#: g10/g10.c:937 msgid "--sign [filename]" msgstr "--sign [Dateiname]" -#: g10/g10.c:938 +#: g10/g10.c:950 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [Dateiname]" -#: g10/g10.c:952 +#: g10/g10.c:964 msgid "--clearsign [filename]" msgstr "--clearsign [Dateiname]" -#: g10/g10.c:964 +#: g10/g10.c:976 msgid "--decrypt [filename]" msgstr "--decrypt [Dateiname]" -#: g10/g10.c:973 +#: g10/g10.c:985 msgid "--edit-key username [commands]" msgstr "--edit-key Username [Befehle]" -#: g10/g10.c:987 +#: g10/g10.c:999 msgid "--delete-secret-key username" msgstr "--delete-secret-key Username" -#: g10/g10.c:990 +#: g10/g10.c:1002 msgid "--delete-key username" msgstr "--delete-key Benutzername" -#: g10/encode.c:231 g10/g10.c:1013 g10/sign.c:311 +#: g10/encode.c:231 g10/g10.c:1025 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "'%s' kann nicht geöffnet werden: %s\n" -#: g10/g10.c:1024 +#: g10/g10.c:1036 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [Benutzername] [Keyring]" -#: g10/g10.c:1083 +#: g10/g10.c:1095 #, c-format msgid "dearmoring failed: %s\n" msgstr "Entfernen der ASCII-Hülle ist fehlgeschlagen: %s\n" -#: g10/g10.c:1091 +#: g10/g10.c:1103 #, c-format msgid "enarmoring failed: %s\n" msgstr "Anbringen der ASCII-Hülle ist fehlgeschlagen: %s\n" -#: g10/g10.c:1157 +#: g10/g10.c:1169 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "Ungültiges Hashverfahren '%s'\n" -#: g10/g10.c:1232 +#: g10/g10.c:1244 msgid "[filename]" msgstr "[Dateiname]" -#: g10/g10.c:1236 +#: g10/g10.c:1248 msgid "Go ahead and type your message ...\n" msgstr "Auf geht's - Botschaft eintippen ...\n" -#: g10/decrypt.c:59 g10/g10.c:1239 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1251 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "'%s' kann nicht geöffnet werden\n" +#: g10/g10.c:1418 +msgid "" +"the first character of a notation name must be a letter or an underscore\n" +msgstr "" +"Das erste Zeichen eines \"notation\"-Namens muß ein Buchstabe oder\n" +"ein Unterstrich sein\n" + +#: g10/g10.c:1424 +msgid "" +"a notation name must have only letters, digits, dots or underscores and end " +"with an '='\n" +msgstr "" +"Ein \"notation\"-Name darf nur Buchstaben, Zahlen, Punkte oder Unterstriche " +"enthalten und muß mit einem '=' enden\n" + +#: g10/g10.c:1430 +msgid "dots in a notation name must be surrounded by other characters\n" +msgstr "Punkte in einem \"notation\"-Namen müssen von anderen Zeichen umgeben sein\n" + +#: g10/g10.c:1438 +msgid "a notation value must not use any control characters\n" +msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n" + #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "ASCII-Hülle: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "Ungültige ASCII-Hülle" #: g10/armor.c:326 msgid "armor header: " msgstr "ASCII-Hülle: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "Ungültige Klartextsignatur-Einleitung\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "verschachtelte Klartextunterschriften\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "Ungültige mit Bindestrich \"escapte\" Zeile: " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "Unerwartete ASCII-Hülle:" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "Ungültiges \"radix64\" Zeichen %02x ignoriert\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "vorzeitiges Dateiende (keine Prüfsumme)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "vorzeitiges Dateiende (innerhalb der Prüfsumme)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "Falsch aufgebaute Prüfsumme\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Prüfsummenfehler; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "vorzeitiges Dateiende (im Nachsatz)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "Fehler in der Nachsatzzeile\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "Keine gültigen OpenPGP-Daten gefunden.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ungültige ASCII-Hülle: Zeile ist länger als %d Zeichen\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "\"quoted printable\" Zeichen in der ASCII-Hülle gefunden - möglicherweise\n" " war ein fehlerhafter E-Mail-Transporter(\"MTA\") die Ursache\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Es ist kein \"Owner trust\" für %lu definiert:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n" "den Schlüssel eines anderen Users korrekt zu prüfen (Vergleich mit\n" "Lictbildausweisen, Vergleich der Fingerabdrücke aus unterschiedlichen\n" "Quellen ...)?\n" "\n" " 1 = Weiß nicht so recht\n" " 2 = Nee, dem traue ich das nicht zu\n" " 3 = Ich vertraue ihm normalerweise\n" " 4 = Ich vertraue ihm vollständig\n" " s = Bitte weitere Information anzeigen\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = Zurück zum Menü\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = verlassen\n" # valid user replies (not including 1..4) #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Ihre Auswahl? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel:\n" #: g10/pkclist.c:254 msgid "" "Could not find a valid trust path to the key. Let's see whether we\n" "can assign some missing owner trust values.\n" "\n" msgstr "" "Für diesen Schlüssel konnte kein gültiger \"Trust Path\" gefunden werden.\n" "Mal sehen, ob wir sonst irgendwie ein paar fehlende \"Owner trust\" Werte \n" "ermitteln können.\n" "\n" #: g10/pkclist.c:260 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Kein Pfad führt zu einen unserer Schlüsseln.\n" "\n" #: g10/pkclist.c:262 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Keine Zertifikate mit undefinierten Vertrauen gefunden.\n" "\n" #: g10/pkclist.c:264 msgid "" "No trust values changed.\n" "\n" msgstr "" "Keine \"trust\" Werte geändert.\n" "\n" #: g10/pkclist.c:281 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "Schlüssel %08lX: Schlüssel wurde widerrufen\n" #: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 msgid "Use this key anyway? " msgstr "Diesen Schlüssel trotzdem benutzen?" #: g10/pkclist.c:291 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "Schlüssel %08lX: Unterschlüssel wurde widerrufen\n" #: g10/pkclist.c:321 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: Schlüssel ist verfallen!\n" #: g10/pkclist.c:327 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "" "%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit " "vorgefunden\n" #: g10/pkclist.c:341 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" #: g10/pkclist.c:347 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" "%08lX: Es ist nicht sicher, daß dieser Schlüssel wirklich dem vorgeblichen\n" "Besitzer gehört, aber er wird trotzdem akzeptiert\n" #: g10/pkclist.c:353 msgid "This key probably belongs to the owner\n" msgstr "" "Dieser Schlüssel gehört höchstwahrscheinlich dem angegebenen Besitzer\n" #: g10/pkclist.c:358 msgid "This key belongs to us\n" msgstr "" "Dieser Schlüssel gehört uns (da wir nämlich den geheimen Schlüssel dazu " "haben)\n" #: g10/pkclist.c:398 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "Es ist NICHT sicher, daß der Schlüssel dem vorgeblichen Besitzer gehört.\n" "Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste\n" "Frage mit ja beantworten\n" #: g10/pkclist.c:411 g10/pkclist.c:433 msgid "WARNING: Using untrusted key!\n" msgstr "WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt!\n" #: g10/pkclist.c:454 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "WARNUNG: Dieser Schlüssel wurde von seinem Besitzer widerrufen!\n" #: g10/pkclist.c:455 msgid " This could mean that the signature is forgery.\n" msgstr " Das könnte bedeuten, daß die Signatur gefälscht ist.\n" #: g10/pkclist.c:459 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "WARNUNG: Dieser Unterschlüssel wurde von seinem Besitzer widerrufen!\n" #: g10/pkclist.c:480 msgid "Note: This key has expired!\n" msgstr "Hinweis: Dieser Schlüssel ist verfallen!\n" #: g10/pkclist.c:487 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!\n" #: g10/pkclist.c:489 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen " "Besitzer gehört.\n" #: g10/pkclist.c:505 msgid "WARNING: We do NOT trust this key!\n" msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" #: g10/pkclist.c:506 msgid " The signature is probably a FORGERY.\n" msgstr " Die Signatur ist wahrscheinlich eine FÄLSCHUNG.\n" #: g10/pkclist.c:513 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "WARNUNG: Dieser Schlüssel ist nicht durch hinreichend vertrauenswürdige " "Signaturen zertifiziert!\n" #: g10/pkclist.c:516 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:569 g10/pkclist.c:582 g10/pkclist.c:645 g10/pkclist.c:673 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: übersprungen: %s\n" #: g10/pkclist.c:591 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Sie gaben keine User-ID angegeben (Benutzen Sie die Option \"-r\").\n" "\n" #: g10/pkclist.c:596 msgid "Enter the user ID: " msgstr "Geben Sie die User-ID ein: " #: g10/pkclist.c:607 msgid "No such user ID.\n" msgstr "Keine solche User-ID vorhanden.\n" #: g10/pkclist.c:653 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: Fehler beim Prüfen des Schlüssels: %s\n" #: g10/pkclist.c:679 msgid "no valid addressees\n" msgstr "Keine gültigen Adressaten\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "Die Eigenbeglaubigung wird geschrieben\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "Schreiben der \"key-binding\" Signatur\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "Bitte wählen Sie, welche Art von Schlüssel Sie möchten:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA und ElGamal (voreingestellt)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (nur signieren/beglaubigen)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (nur verschlüsseln)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signieren/beglaubigen und verschlüsseln)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal in einem v3-Paket\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Ihre Auswahl? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "" "Möchten Sie wirklich einen Unterschriften-/Verschlüsselungschlüssel " "erzeugen? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "Ungültige Auswahl.\n" #: g10/keygen.c:442 #, c-format msgid "" "About to generate a new %s keypair.\n" " minimum keysize is 768 bits\n" " default keysize is 1024 bits\n" " highest suggested keysize is 2048 bits\n" msgstr "" "Es wird ein neues %s Schlüsselpaar erzeugt.\n" " kleinste Schlüssellänge ist 768 Bit\n" " standard Schlüssellänge ist 1024 Bit\n" " größte sinnvolle Schlüssellänge ist 2048 Bit\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Welche Schlüssellänge wünschen Sie? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA erlaubt nur Schlüssellängen von 512 bis 1024\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n" #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity #. * to create such a key (but less than the time the Sirius #. * Computer Corporation needs to process one of the usual #. * complaints) and {de,en}cryption although needs some time. #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. #: g10/keygen.c:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "Schüsselgröße zu hoch; %d ist der Maximalwert.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Schlüssellängen größer als 2048 werden nicht empfohlen, da die\n" "Berechnungen dann WIRKLICH lange brauchen!\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Sind Sie sicher, daß Sie diese Schlüssellänge wünschen? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "Gut, aber bitte denken Sie auch daran, daß Monitor und Tastatur Daten " "abstrahlen und diese leicht mitgelesen werden können.\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Brauchen Sie wirklich einen derartig langen Schlüssel? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Die verlangte Schlüssellänge beträgt %u Bit\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "aufgerundet auf %u Bit\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.\n" " 0 = Schlüssel verfällt nie\n" " = Schlüssel verfällt nach n Tagen\n" " w = Schlüssel verfällt nach n Wochen\n" " m = Schlüssel verfällt nach n Monaten\n" " y = Schlüssel verfällt nach n Jahren\n" #: g10/keygen.c:524 msgid "Key is valid for? (0) " msgstr "Der Schlüssel bleibt wie lange gültig? (0) " #: g10/keygen.c:535 msgid "invalid value\n" msgstr "Ungültiger Wert.\n" #: g10/keygen.c:540 msgid "Key does not expire at all\n" msgstr "Der Schlüssel verfällt nie.\n" #. print the date when the key expires #: g10/keygen.c:546 #, c-format msgid "Key expires at %s\n" msgstr "Der Schlüssel verfällt am %s\n" #: g10/keygen.c:552 msgid "Is this correct (y/n)? " msgstr "Ist dies richtig? (j/n) " #: g10/keygen.c:595 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " "id\n" "from Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das\n" "Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und\n" "Ihrer E-Mail-Adresse in dieser Form auf:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:606 msgid "Real name: " msgstr "Ihr Name (\"Vorname Nachname\"): " #: g10/keygen.c:610 msgid "Invalid character in name\n" msgstr "Ungültiges Zeichen im Namen\n" #: g10/keygen.c:612 msgid "Name may not start with a digit\n" msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n" #: g10/keygen.c:614 msgid "Name must be at least 5 characters long\n" msgstr "Der Name muß min. 5 Zeichen lang sein.\n" #: g10/keygen.c:622 msgid "Email address: " msgstr "E-Mail-Adresse: " #: g10/keygen.c:633 msgid "Not a valid email address\n" msgstr "Diese E-Mail-Adresse ist ungültig\n" #: g10/keygen.c:641 msgid "Comment: " msgstr "Kommentar: " #: g10/keygen.c:647 msgid "Invalid character in comment\n" msgstr "Ungültiges Zeichen im Kommentar.\n" #: g10/keygen.c:669 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Sie benutzen den Zeichensatz `%s'\n" #: g10/keygen.c:675 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Sie haben diese User-ID gewählt:\n" " \"%s\"\n" "\n" #: g10/keygen.c:678 msgid "NnCcEeOoQq" msgstr "NnKkEeFfBb" #: g10/keygen.c:688 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? " #: g10/keygen.c:740 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.\n" "\n" -#: g10/keyedit.c:433 g10/keygen.c:748 +#: g10/keyedit.c:455 g10/keygen.c:748 msgid "passphrase not correctly repeated; try again.\n" msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen.\n" #: g10/keygen.c:754 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" "using this program with the option \"--edit-key\".\n" "\n" msgstr "" "Sie möchten kein Mantra - Dies ist *nicht* zu empfehlen!\n" "Es ist trotzdem möglich. Sie können Ihr Mantra jederzeit\n" "ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n" "aufrufen.\n" "\n" #: g10/keygen.c:775 msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" "disks) during the prime generation; this gives the random number\n" "generator a better chance to gain enough entropy.\n" msgstr "" "Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies\n" "unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n" "tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.\n" #: g10/keygen.c:845 msgid "Key generation can only be used in interactive mode\n" msgstr "" "Die Schlüsselerzeugung kann nur im interaktiven Modus benutzt werden.\n" #: g10/keygen.c:853 msgid "DSA keypair will have 1024 bits.\n" msgstr "Der DSA Schlüssel wird 1024 Bits haben.\n" #: g10/keygen.c:859 msgid "Key generation cancelled.\n" msgstr "Schlüsselerzeugung abgebrochen.\n" #: g10/keygen.c:869 #, c-format msgid "writing public certificate to `%s'\n" msgstr "schreiben des öffentlichen Zertifikats nach '%s'\n" #: g10/keygen.c:870 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "schreiben des geheimen Zertifikats nach '%s'\n" #: g10/keygen.c:947 msgid "public and secret key created and signed.\n" msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n" #: g10/keygen.c:949 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" "Bitte beachten Sie, daß dieser Schlüssel nicht zum Verschlüsseln benutzt\n" "werden kann. Sie können aber mit dem Befehl \"--edit-key\" einen\n" "Zweitschlüssel für diesem Zweck erzeugen.\n" #: g10/keygen.c:963 g10/keygen.c:1062 #, c-format msgid "Key generation failed: %s\n" msgstr "Schlüsselerzeugung fehlgeschlagen: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:52 +#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "Der Schlüssel wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder Uhren " "stimmen nicht überein)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:54 +#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "Der Schlüssel wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder " "Uhren stimmen nicht überein)\n" #: g10/keygen.c:1040 msgid "Really create? " msgstr "Wirklich erzeugen? " #: g10/encode.c:91 g10/openfile.c:88 g10/openfile.c:176 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: kann nicht geöffnet werden: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "Fehler beim Erzeugen des Mantras: %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: WARNUNG: Leere Datei\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "Lesen von '%s'\n" #: g10/encode.c:417 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s verschlüsselt für: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: Benutzer nicht gefunden: %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "Zertifikat Leseproblem: %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "Schlüssel %08lX: dies ist kein rfc2440-Schüssel - übersprungen\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "WARNUNG: Nichts exportiert\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "zu viele Einträge im pk-Lager - abgeschaltet\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "zu viele Einträge im unk-Lager - abgeschaltet\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "" "der Zweitschlüssel %08lX wird anstelle des Hauptschlüssels %08lX verwendet\n" #: g10/import.c:116 -#, fuzzy, c-format +#, c-format msgid "can't open `%s': %s\n" msgstr "'%s' kann nicht geöffnet werden: %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "überspringe den Block vom Typ %d\n" #: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu Schlüssel bislang bearbeitet\n" #: g10/import.c:172 -#, fuzzy, c-format +#, c-format msgid "error reading `%s': %s\n" -msgstr "Fehler beim Lesen des Schl.Satzes: %s\n" +msgstr "Fehler beim Lesen von `%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "Anzahl insgesamt bearbeiteter Schlüssel: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " ohne User-ID: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " importiert: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " unverändert: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " neue User-IDs: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " neue Unterschlüssel: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " neue Signaturen: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr "neue Schlüsselwiderrufe: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " gelesene geheime Schl.: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr "geheime Schlüssel importiert: %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " unveränderte geh.Schl.: %lu\n" #: g10/import.c:342 g10/import.c:529 #, c-format msgid "key %08lX: no user id\n" msgstr "Schlüssel %08lX: Keine User-ID\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "Schlüssel %08lX: Keine gültigen User-IDs\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "dies könnte durch fehlende Eigenbeglaubigung verursacht worden sein\n" #: g10/import.c:366 g10/import.c:596 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "Schlüssel %08lX: Öffentlicher Schlüssel nicht gefunden: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "Kein voreingestellter öffentlicher Schlüsselbund\n" -#: g10/import.c:376 g10/openfile.c:117 g10/sign.c:215 g10/sign.c:501 +#: g10/import.c:376 g10/openfile.c:117 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "Schreiben nach '%s'\n" -#: g10/import.c:379 g10/import.c:435 -#, fuzzy -msgid "can't lock keyring `%': %s\n" -msgstr "kann öffentlichen Schlüsselbund nicht sperren: %s\n" +#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#, c-format +msgid "can't lock keyring `%s': %s\n" +msgstr "kann Schlüsselbund `%s' nicht sperren: %s\n" -#: g10/import.c:382 -#, fuzzy -msgid "error writing keyring `%': %s\n" -msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" +#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "Fehler beim Schreiben des Schlüsselbundes `%s': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "Schlüssel %08lX: Öffentlicher Schlüssel importiert\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "Schlüssel %08lX: Stimmt nicht mit unserer Kopie überein\n" #: g10/import.c:411 g10/import.c:604 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "" "Schlüssel %08lX: der lokale originale Schlüsselblocks wurde nicht gefunden: " "%s\n" #: g10/import.c:417 g10/import.c:610 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "" "Schlüssel %08lX: Lesefehler im lokalen originalen Schlüsselblocks: %s\n" -#: g10/import.c:438 g10/import.c:547 g10/import.c:648 -#, fuzzy, c-format -msgid "error writing keyring `%s': %s\n" -msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" - #: g10/import.c:444 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "Schlüssel %08lX: 1 neue User-ID\n" #: g10/import.c:447 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "Schlüssel %08lX: %d neue User-IDs\n" #: g10/import.c:450 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "Schlüssel %08lX: 1 neue Signatur\n" #: g10/import.c:453 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "Schlüssel %08lX: %d neue Signaturen\n" #: g10/import.c:456 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "Schlüssel %08lX: 1 neuer Unterschlüssel\n" #: g10/import.c:459 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "Schlüssel %08lX: %d neue Unterschlüssel\n" #: g10/import.c:469 #, c-format msgid "key %08lX: not changed\n" msgstr "Schlüssel %08lX: Nicht geändert\n" -#: g10/import.c:544 g10/import.c:645 -#, fuzzy, c-format -msgid "can't lock keyring `%s': %s\n" -msgstr "kann öffentlichen Schlüsselbund nicht sperren: %s\n" - #: g10/import.c:552 #, c-format msgid "key %08lX: secret key imported\n" msgstr "Schlüssel %08lX: Geheimer Schlüssel importiert\n" #. we can't merge secret keys #: g10/import.c:556 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "Schlüssel %08lX: Ist bereits im geheimen Schlüsselbund\n" #: g10/import.c:561 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "Schlüssel %08lX: geheimer Schlüssel nicht gefunden: %s\n" #: g10/import.c:590 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "Schlüssel %08lX: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann " "nicht angebracht werden\n" #: g10/import.c:621 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n" #: g10/import.c:653 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "Schlüssel %08lX: Widerrufzertifikat importiert\n" #: g10/import.c:686 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n" #: g10/import.c:693 g10/import.c:717 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "Schlüssel %08lX: Nicht unterstützetes Public-Key-Verfahren\n" #: g10/import.c:694 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung\n" #: g10/import.c:709 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "Schlüssel %08lX: Kein Unterschlüssel für die Schlüsselanbindung\n" #: g10/import.c:718 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung\n" #: g10/import.c:750 #, c-format msgid "key %08lX: skipped userid '" msgstr "Schlüssel %08lX: übergehe User-ID '" #: g10/import.c:773 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "Schlüssel %08lX: Unterschlüssel ignoriert\n" #. here we violate the rfc a bit by still allowing #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense #: g10/import.c:798 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "Schlüssel %08lX: Nicht exportfähige Unterschrift - übergangen\n" #: g10/import.c:807 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n" #: g10/import.c:815 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - übergangen\n" #: g10/import.c:915 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" -msgstr "" +msgstr "Schlüssel %08lX: Doppelte User-ID entdeckt - zusammengeführt\n" #: g10/import.c:966 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "Schlüssel %08lX: Widerrufzertifikat hinzugefügt\n" #: g10/import.c:1079 g10/import.c:1134 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "Schlüssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n" -#: g10/keyedit.c:91 +#: g10/keyedit.c:92 #, c-format msgid "%s: user not found\n" msgstr "%s: Benutzer nicht gefunden\n" -#: g10/keyedit.c:177 +#: g10/keyedit.c:153 msgid "[revocation]" msgstr "[Widerruf]" -#: g10/keyedit.c:178 +#: g10/keyedit.c:154 msgid "[self-signature]" msgstr "[Eigenbeglaubigung]" -#: g10/keyedit.c:196 +#: g10/keyedit.c:218 msgid "1 bad signature\n" msgstr "1 falsche Beglaubigung\n" -#: g10/keyedit.c:198 +#: g10/keyedit.c:220 #, c-format msgid "%d bad signatures\n" msgstr "%d falsche Beglaubigungen\n" -#: g10/keyedit.c:200 +#: g10/keyedit.c:222 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:202 +#: g10/keyedit.c:224 #, 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:204 +#: g10/keyedit.c:226 msgid "1 signature not checked due to an error\n" msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n" -#: g10/keyedit.c:206 +#: g10/keyedit.c:228 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n" -#: g10/keyedit.c:208 +#: g10/keyedit.c:230 msgid "1 user id without valid self-signature detected\n" msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n" -#: g10/keyedit.c:210 +#: g10/keyedit.c:232 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:290 +#: g10/keyedit.c:312 #, c-format msgid "Already signed by key %08lX\n" msgstr "Ist bereits durch Schlüssel %08lX beglaubigt.\n" -#: g10/keyedit.c:298 +#: g10/keyedit.c:320 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nichts zu beglaubigen für Schlüssel %08lX\n" -#: g10/keyedit.c:307 +#: g10/keyedit.c:329 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n" "Schlüssel beglaubigen wollen: \"" -#: g10/keyedit.c:316 +#: g10/keyedit.c:338 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "Die Unterschrift wird als nicht exportfähig markiert werden.\n" "\n" -#: g10/keyedit.c:321 +#: g10/keyedit.c:343 msgid "Really sign? " msgstr "Wirklich unterschreiben? " -#: g10/keyedit.c:347 g10/keyedit.c:1688 g10/keyedit.c:1737 g10/sign.c:75 +#: g10/keyedit.c:369 g10/keyedit.c:1779 g10/keyedit.c:1828 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "Beglaubigung fehlgeschlagen: %s\n" -#: g10/keyedit.c:400 +#: g10/keyedit.c:422 msgid "This key is not protected.\n" msgstr "Dieser Schlüssel ist nicht geschützt.\n" -#: g10/keyedit.c:403 +#: g10/keyedit.c:425 msgid "Key is protected.\n" msgstr "Schlüssel ist geschützt.\n" -#: g10/keyedit.c:420 +#: g10/keyedit.c:442 #, c-format msgid "Can't edit this key: %s\n" msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:447 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Geben Sie das neue Mantra für diesen geheimen Schlüssel ein.\n" "\n" -#: g10/keyedit.c:437 +#: g10/keyedit.c:459 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Sie wollen kein Mantra - dies ist bestimmt *keine* gute Idee!\n" "\n" -#: g10/keyedit.c:440 +#: g10/keyedit.c:462 msgid "Do you really want to do this? " msgstr "Möchten Sie dies wirklich tun? " -#: g10/keyedit.c:501 +#: g10/keyedit.c:523 msgid "moving a key signature to the correct place\n" msgstr "schiebe eine Beglaubigung an die richtige Stelle\n" -#: g10/keyedit.c:537 -msgid "quit" -msgstr "quit" - -#: g10/keyedit.c:537 +#: g10/keyedit.c:559 msgid "quit this menu" msgstr "Menü verlassen" -#: g10/keyedit.c:538 +#: g10/keyedit.c:560 msgid "q" msgstr "q" -#: g10/keyedit.c:539 +#: g10/keyedit.c:561 msgid "save" msgstr "save" -#: g10/keyedit.c:539 +#: g10/keyedit.c:561 msgid "save and quit" msgstr "speichern und Menü verlassen" -#: g10/keyedit.c:540 +#: g10/keyedit.c:562 msgid "help" msgstr "help" -#: g10/keyedit.c:540 +#: g10/keyedit.c:562 msgid "show this help" msgstr "Diese Hilfe zeigen" -#: g10/keyedit.c:542 +#: g10/keyedit.c:564 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:542 +#: g10/keyedit.c:564 msgid "show fingerprint" msgstr "\"Fingerabdruck\" anzeigen" -#: g10/keyedit.c:543 +#: g10/keyedit.c:565 msgid "list" msgstr "Liste der Schlüssel" -#: g10/keyedit.c:543 +#: g10/keyedit.c:565 msgid "list key and user ids" msgstr "Schlüssel und User-ID auflisten" -#: g10/keyedit.c:544 +#: g10/keyedit.c:566 msgid "l" msgstr "l" -#: g10/keyedit.c:545 +#: g10/keyedit.c:567 msgid "uid" msgstr "uid" -#: g10/keyedit.c:545 +#: g10/keyedit.c:567 msgid "select user id N" msgstr "User-ID N auswählen" -#: g10/keyedit.c:546 +#: g10/keyedit.c:568 msgid "key" msgstr "key" -#: g10/keyedit.c:546 +#: g10/keyedit.c:568 msgid "select secondary key N" msgstr "Zweitschlüssel N auswählen" -#: g10/keyedit.c:547 +#: g10/keyedit.c:569 msgid "check" msgstr "check" -#: g10/keyedit.c:547 +#: g10/keyedit.c:569 msgid "list signatures" msgstr "Liste der Signaturen" -#: g10/keyedit.c:548 +#: g10/keyedit.c:570 msgid "c" msgstr "c" -#: g10/keyedit.c:549 +#: g10/keyedit.c:571 msgid "sign" msgstr "sign" -#: g10/keyedit.c:549 +#: g10/keyedit.c:571 msgid "sign the key" msgstr "Den Schlüssel signieren" -#: g10/keyedit.c:550 +#: g10/keyedit.c:572 msgid "s" msgstr "s" -#: g10/keyedit.c:551 +#: g10/keyedit.c:573 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:551 +#: g10/keyedit.c:573 msgid "sign the key locally" msgstr "Den Schlüssel nur auf diesem Rechner signieren" -#: g10/keyedit.c:552 +#: g10/keyedit.c:574 msgid "debug" msgstr "debug" -#: g10/keyedit.c:553 +#: g10/keyedit.c:575 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:553 +#: g10/keyedit.c:575 msgid "add a user id" msgstr "Eine User-ID hinzufügen" -#: g10/keyedit.c:554 +#: g10/keyedit.c:576 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:554 +#: g10/keyedit.c:576 msgid "delete user id" msgstr "User-ID entfernen" -#: g10/keyedit.c:555 +#: g10/keyedit.c:577 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:555 +#: g10/keyedit.c:577 msgid "add a secondary key" msgstr "Einen Zweitschlüssel hinzufügen" -#: g10/keyedit.c:556 +#: g10/keyedit.c:578 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:556 +#: g10/keyedit.c:578 msgid "delete a secondary key" msgstr "Einen Zweitschlüssel entfernen" -#: g10/keyedit.c:557 +#: g10/keyedit.c:579 +msgid "delsig" +msgstr "delsig" + +#: g10/keyedit.c:579 +msgid "delete signatures" +msgstr "Signatur entfernen" + +#: g10/keyedit.c:580 msgid "expire" msgstr "expire" -#: g10/keyedit.c:557 +#: g10/keyedit.c:580 msgid "change the expire date" msgstr "Ändern des Verfallsdatums" -#: g10/keyedit.c:558 +#: g10/keyedit.c:581 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:558 +#: g10/keyedit.c:581 msgid "toggle between secret and public key listing" msgstr "Umschalten zwischen Anzeige geheimer und öffentlicher Schlüssel" -#: g10/keyedit.c:560 +#: g10/keyedit.c:583 msgid "t" msgstr "t" -#: g10/keyedit.c:561 +#: g10/keyedit.c:584 msgid "pref" msgstr "pref" -#: g10/keyedit.c:561 +#: g10/keyedit.c:584 msgid "list preferences" msgstr "Liste der Voreinstellungen" -#: g10/keyedit.c:562 +#: g10/keyedit.c:585 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:562 +#: g10/keyedit.c:585 msgid "change the passphrase" msgstr "Das Mantra ändern" -#: g10/keyedit.c:563 +#: g10/keyedit.c:586 msgid "trust" msgstr "trust" -#: g10/keyedit.c:563 +#: g10/keyedit.c:586 msgid "change the ownertrust" msgstr "Den \"Owner trust\" ändern" -#: g10/keyedit.c:564 -#, fuzzy +#: g10/keyedit.c:587 msgid "revsig" -msgstr "sign" +msgstr "revsig" -#: g10/keyedit.c:564 +#: g10/keyedit.c:587 msgid "revoke signatures" msgstr "Signaturen widerrufen" -#: g10/keyedit.c:565 -#, fuzzy +#: g10/keyedit.c:588 msgid "revkey" -msgstr "key" +msgstr "revkey" -#: g10/keyedit.c:565 +#: g10/keyedit.c:588 msgid "revoke a secondary key" msgstr "Einen Zweitschlüssel widerrufen" -#: g10/keyedit.c:584 +#: g10/keyedit.c:607 msgid "can't do that in batchmode\n" msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:613 +#: g10/keyedit.c:636 msgid "Secret key is available.\n" msgstr "Geheimer Schlüssel ist vorhanden.\n" -#: g10/keyedit.c:642 +#: g10/keyedit.c:665 msgid "Command> " msgstr "Befehl> " -#: g10/keyedit.c:669 +#: g10/keyedit.c:692 msgid "Need the secret key to do this.\n" msgstr "Hierzu wird der geheime Schlüssel benötigt.\n" -#: g10/keyedit.c:691 +#: g10/keyedit.c:714 msgid "Save changes? " msgstr "Änderungen speichern? " -#: g10/keyedit.c:694 +#: g10/keyedit.c:717 msgid "Quit without saving? " msgstr "Beenden ohne zu speichern? " -#: g10/keyedit.c:704 +#: g10/keyedit.c:727 #, c-format msgid "update failed: %s\n" msgstr "Änderung fehlgeschlagen: %s\n" -#: g10/keyedit.c:711 +#: g10/keyedit.c:734 #, c-format msgid "update secret failed: %s\n" msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n" -#: g10/keyedit.c:718 +#: g10/keyedit.c:741 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:721 g10/keyedit.c:780 +#: g10/keyedit.c:744 g10/keyedit.c:803 #, c-format msgid "update of trustdb failed: %s\n" msgstr "Änderung der \"Trust-DB\" fehlgeschlagen: %s\n" -#: g10/keyedit.c:754 +#: g10/keyedit.c:777 msgid "Really sign all user ids? " msgstr "Wirklich alle User-IDs beglaubigen? " -#: g10/keyedit.c:755 +#: g10/keyedit.c:778 msgid "Hint: Select the user ids to sign\n" msgstr "Tip: Wählen Sie die User-ID, die beglaubigt werden soll\n" -#: g10/keyedit.c:791 +#: g10/keyedit.c:814 g10/keyedit.c:835 msgid "You must select at least one user id.\n" msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n" -#: g10/keyedit.c:793 +#: g10/keyedit.c:816 msgid "You can't delete the last user id!\n" msgstr "Die letzte User-ID kann nicht gelöscht werden!\n" -#: g10/keyedit.c:796 +#: g10/keyedit.c:819 msgid "Really remove all selected user ids? " msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? " -#: g10/keyedit.c:797 +#: g10/keyedit.c:820 msgid "Really remove this user id? " msgstr "Diese User-ID wirklich entfernen? " -#: g10/keyedit.c:820 g10/keyedit.c:842 +#: g10/keyedit.c:856 g10/keyedit.c:878 msgid "You must select at least one key.\n" msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n" -#: g10/keyedit.c:824 +#: g10/keyedit.c:860 msgid "Do you really want to delete the selected keys? " msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? " -#: g10/keyedit.c:825 +#: g10/keyedit.c:861 msgid "Do you really want to delete this key? " msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? " -#: g10/keyedit.c:846 +#: g10/keyedit.c:882 msgid "Do you really want to revoke the selected keys? " msgstr "Möchten Sie die ausgewählten Schlüssel wirklich widerrufen? " -#: g10/keyedit.c:847 +#: g10/keyedit.c:883 msgid "Do you really want to revoke this key? " msgstr "Möchten Sie diesen Schlüssel wirklich wiederrufen? " -#: g10/keyedit.c:901 +#: g10/keyedit.c:937 msgid "Invalid command (try \"help\")\n" msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n" -#: g10/keyedit.c:1293 +#: g10/keyedit.c:1289 +msgid "Delete this good signature? (y/N/q)" +msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)" + +#: g10/keyedit.c:1292 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)" + +#: g10/keyedit.c:1297 +msgid "Really delete this self-signature? (y/N)" +msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)" + +#: g10/keyedit.c:1311 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "%d Beglaubigungen entfernt.\n" + +#: g10/keyedit.c:1312 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "%d Beglaubigungen entfernt.\n" + +#: g10/keyedit.c:1315 +msgid "Nothing deleted.\n" +msgstr "Nichts entfernt.\n" + +#: g10/keyedit.c:1384 msgid "Please remove selections from the secret keys.\n" msgstr "Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln.\n" -#: g10/keyedit.c:1299 +#: g10/keyedit.c:1390 msgid "Please select at most one secondary key.\n" msgstr "Bitte wählen Sie höchstens einen Zweitschlüssel aus.\n" -#: g10/keyedit.c:1303 +#: g10/keyedit.c:1394 msgid "Changing exiration time for a secondary key.\n" msgstr "Ändern des Verfallsdatums des Zweitschlüssels.\n" -#: g10/keyedit.c:1305 +#: g10/keyedit.c:1396 msgid "Changing exiration time for the primary key.\n" msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n" -#: g10/keyedit.c:1346 +#: g10/keyedit.c:1437 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:1362 +#: g10/keyedit.c:1453 msgid "No corresponding signature in secret ring\n" msgstr "Keine entsprechende Signatur im geheimen Schlüsselbund\n" -#: g10/keyedit.c:1422 +#: g10/keyedit.c:1513 #, c-format msgid "No user id with index %d\n" msgstr "Keine User-ID mit Index %d\n" -#: g10/keyedit.c:1468 +#: g10/keyedit.c:1559 #, c-format msgid "No secondary key with index %d\n" msgstr "Kein Zweitschlüssel mit Index %d\n" -#: g10/keyedit.c:1566 +#: g10/keyedit.c:1657 msgid "user ID: \"" msgstr "User-ID: \"" -#: g10/keyedit.c:1569 -#, fuzzy, c-format +#: g10/keyedit.c:1660 +#, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" "unterschrieben mit Ihrem Schlüssel %08lX um %s\n" -#: g10/keyedit.c:1573 +#: g10/keyedit.c:1664 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)" -#: g10/keyedit.c:1653 +#: g10/keyedit.c:1744 msgid "Really create the revocation certificates? (y/N)" msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) " -#: g10/keyedit.c:1676 +#: g10/keyedit.c:1767 msgid "no secret key\n" msgstr "Kein geheimer Schlüssel\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "Öffentlicher Schlüssel ist %08lX\n" #: g10/mainproc.c:212 msgid "public key encrypted data: good DEK\n" msgstr "Mit öffentlichem Schüssel verschlüsselte Daten: Korrekte DEK\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information #: g10/mainproc.c:219 #, c-format msgid "public key decryption failed: %s\n" msgstr "Entschlüsselung mit öffentlichem Schlüssel fehlgeschlagen: %s\n" #: g10/mainproc.c:247 msgid "decryption okay\n" msgstr "Enschlüsselung fehlgeschlagen: %s\n" #: g10/mainproc.c:252 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "Warnung: Verschlüsselte Botschaft ist manipuliert worden!\n" #: g10/mainproc.c:257 #, c-format msgid "decryption failed: %s\n" msgstr "Enschlüsselung fehlgeschlagen: %s\n" #: g10/mainproc.c:275 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" "Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n" #: g10/mainproc.c:277 #, c-format msgid "original file name='%.*s'\n" msgstr "Ursprünglicher Dateiname='%.*s'\n" -#: g10/mainproc.c:890 +#: g10/mainproc.c:505 g10/mainproc.c:514 +msgid "WARNING: invalid notation data found\n" +msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n" + +#: g10/mainproc.c:517 +msgid "Notation: " +msgstr "\"Notation\": " + +#: g10/mainproc.c:524 +msgid "Policy: " +msgstr "Richtlinie: " + +#: g10/mainproc.c:929 msgid "signature verification suppressed\n" msgstr "Unterschriften-Überprüfung unterdrückt\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( -#: g10/mainproc.c:896 +#: g10/mainproc.c:935 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Unterschrift vom %.*s, %s Schlüssel ID %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:922 g10/mainproc.c:933 +#: g10/mainproc.c:961 g10/mainproc.c:972 msgid "BAD signature from \"" msgstr "FALSCHE Unterschrift von \"" -#: g10/mainproc.c:923 g10/mainproc.c:934 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "Good signature from \"" msgstr "Korrekte Unterschrift von \"" -#: g10/mainproc.c:925 +#: g10/mainproc.c:964 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:975 +#: g10/mainproc.c:1015 #, c-format msgid "Can't check signature: %s\n" msgstr "Unterschrift kann nicht geprüft werden: %s\n" -#: g10/mainproc.c:1056 +#: g10/mainproc.c:1096 msgid "old style (PGP 2.x) signature\n" msgstr "Unterschrift nach alter (PGP 2.x) Art\n" -#: g10/mainproc.c:1061 +#: g10/mainproc.c:1101 msgid "invalid root packet detected in proc_tree()\n" msgstr "ungültiges root-Paket in proc_tree() entdeckt\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Experimentiermethoden sollten nicht benutzt werden!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "RSA Schlüssel sind nicht erwünscht; bitte denken Sie darüber nach, einen\n" "neuen Schlüssel zu erzeugen und diesen in Zukunft zu benutzen\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "Diees Verschlüsselungsmethode taugt nicht mehr viel; verwenden Sie eine " "stärker standardisierte Methode!\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "dieses Public-Key Verfahren %d kann nicht benutzt werden\n" -#: g10/parse-packet.c:872 +#: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "Im Unterpaket des Typs %d ist das \"critical bit\" gesetzt\n" #: g10/passphrase.c:157 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n" "Benutzer: \"" #: g10/passphrase.c:166 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-Bit %s Schlüssel, ID %08lX, erzeugt %s" #: g10/passphrase.c:171 #, c-format msgid " (main key ID %08lX)" msgstr " (Hauptschlüssel-ID %08lX)" #: g10/passphrase.c:190 msgid "Enter passphrase: " msgstr "Geben Sie das Mantra ein: " #: g10/passphrase.c:194 msgid "Repeat passphrase: " msgstr "Geben Sie das Mantra nochmal ein: " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "Daten wurden nicht gespeichert; verwenden Sie dafür die Option \"--output\"\n" #: g10/plaintext.c:208 msgid "Please enter name of data file: " msgstr "Bitte geben Sie den Namen der Datendatei ein: " #: g10/plaintext.c:229 msgid "reading stdin ...\n" msgstr "lese stdin ...\n" #: g10/plaintext.c:302 #, c-format msgid "can't open signed data `%s'\n" msgstr "kann signierte Datei '%s' nicht öffnen.\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "Ungenannter Empfänger: Versuch mit geheimen Schlüssel %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "Alles klar, wir sind der ungenannte Empfänger.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "alte Kodierung des DEK wird nicht unterstützt\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "Hinweis: Verfahren %d ist kein bevorzugtes Verschlüsselungsverfahren\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "Schutzverfahren %d wird nicht unterstützt\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "Ungültiges Mantra; versuchen Sie's doch noch einmal ...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "WARNUNG: Unsicherer Schlüssel entdeckt -\n" " bitte Mantra nochmals wechseln.\n" #: g10/sig-check.c:187 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "" "Vermutlich ist das Siegel (MDC) BESCHÄDIGT (wegen unbekanntem \"critical " "bit\")\n" #: g10/sig-check.c:283 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Dieser durch PGP erzeugte ElGamal-Schlüssel ist für Signaturen NICHT sicher " "genug!\n" #: g10/sig-check.c:291 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "" "Öffentlicher Schlüssel ist um %lu Sekunde jünger als die Unterschrift\n" #: g10/sig-check.c:292 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "" "Öffentlicher Schlüssel ist um %lu Sekunden jünger als die Unterschrift\n" #: g10/sig-check.c:308 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "Hinweis: Schlüssel der Signatur ist verfallen am %s.\n" #: g10/sig-check.c:365 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "Vermutlich eine FALSCHE Unterschrift, wegen unbekanntem \"critical bit\"\n" -#: g10/sign.c:79 +#: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "%s Unterschrift von: %s\n" -#: g10/sign.c:210 g10/sign.c:496 +#: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "%s kann nicht erzeugt werden: %s\n" -#: g10/sign.c:306 +#: g10/sign.c:361 msgid "signing:" msgstr "unterschreibe:" -#: g10/sign.c:346 +#: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "WARNUNG: '%s' ist eine leere Datei.\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "Textzeilen länger als %d Zeichen können nicht benutzt werden\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "Eingabezeile ist länger als %d Zeichen\n" #: g10/tdbio.c:116 g10/tdbio.c:1505 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n" #: g10/tdbio.c:122 g10/tdbio.c:1512 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb Satz %lu: write fehlgeschlagen (n=%d): %s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "trustdb Transaktion zu groß\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: kann nicht zugegriffen werden: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: Verzeichnis kann nicht erzeugt werden: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: Verzeichnis erzeugt\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: Verzeichnis existiert nicht!\n" #: g10/openfile.c:113 g10/openfile.c:183 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: kann nicht erzeugt werden: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s: Sperre kann nicht erzeugt werden\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ungültige trust-db erzeugt\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trust-db erzeugt\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ungültige 'Trust'-Datenbank\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: hashtable kann nicht erzeugt werden: %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: Fehler beim Ändern des Versionsatzes: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 #: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" #: g10/tdbio.c:1132 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek fehlgeschlagen: %s\n" #: g10/tdbio.c:1140 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" #: g10/tdbio.c:1161 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: keine trustdb Datei\n" #: g10/tdbio.c:1177 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: version record with recnum %lu\n" #: g10/tdbio.c:1182 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: invalid file version %d\n" #: g10/tdbio.c:1471 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n" #: g10/tdbio.c:1479 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n" #: g10/tdbio.c:1489 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: konnte einen Satz nicht Nullen: %s\n" #: g10/tdbio.c:1519 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: konnte Satz nicht anhängen: %s\n" #: g10/tdbio.c:1630 msgid "The trustdb is corrupted; please run \"gpgm --fix-trustdb\".\n" msgstr "" "Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpgm " "--fix-trustdb\".\n" #: g10/trustdb.c:163 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "trust record %lu, req type %d: read failed: %s\n" #: g10/trustdb.c:178 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, type %d: write failed: %s\n" #: g10/trustdb.c:192 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "Vertrauenssatz %lu: löschen fehlgeschlagen: %s\n" #: g10/trustdb.c:206 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n" #: g10/trustdb.c:386 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "Fehler beim Lesen des Dir-Satzes für LID %lu: %s\n" #: g10/trustdb.c:393 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n" #: g10/trustdb.c:398 #, c-format msgid "no primary key for LID %lu\n" msgstr "Kein Hauptschlüssel für LID %lu\n" #: g10/trustdb.c:403 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "Fehler beim Lesen den Hauptschlüssels der LID %lu: %s\n" #: g10/trustdb.c:442 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: search_record fehlgeschlagen: %s\n" #: g10/trustdb.c:510 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "HINWEIS: Geheimer Schlüssel %08lX ist NICHT geschützt.\n" #: g10/trustdb.c:518 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "" "Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - " "übersprungen\n" #: g10/trustdb.c:525 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "" "Schlüssel %08lX: geheimer und öffentlicher Schlüssel passen nicht zusammen.\n" #: g10/trustdb.c:535 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "Schlüssel %08lX kann nicht in die \"trustdb\" eingefügt werden\n" #: g10/trustdb.c:541 #, c-format msgid "key %08lX: query record failed\n" msgstr "Schlüssel %08lX: Satzabfrage fehlgeschlagen\n" #: g10/trustdb.c:550 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "Schlüssel %08lX: Ist bereits in geheimer Schlüsseltabelle\n" #: g10/trustdb.c:553 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "Schlüssel %08lX: Akzeptiert als vertrauenswürdiger Schlüssel.\n" #: g10/trustdb.c:561 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "enum_secret_keys fehlgeschlagen: %s\n" #: g10/trustdb.c:851 #, c-format msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" msgstr "Hinweis: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" #: g10/trustdb.c:855 #, c-format msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" msgstr "Hinweis: sig rec %lu[%d] in hintlist of %lu but not marked\n" #. we need the dir record #: g10/trustdb.c:862 #, c-format msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" msgstr "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" #: g10/trustdb.c:868 #, c-format msgid "lid %lu: no primary key\n" msgstr "lid %lu: kein Hauptschlüssel\n" #: g10/trustdb.c:901 #, c-format msgid "lid %lu: user id not found in keyblock\n" msgstr "lid %lu: User-ID im Schlüsselblock nicht gefunden\n" #: g10/trustdb.c:905 #, c-format msgid "lid %lu: user id without signature\n" msgstr "lid %lu: User-ID ohne Signatur\n" #: g10/trustdb.c:912 #, c-format msgid "lid %lu: self-signature in hintlist\n" msgstr "lid %lu: Eigenbeglaubigung in 'hintlist'\n" #: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 msgid "Valid certificate revocation" msgstr "Gültiger Zerifikat-Widerruf" #: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 msgid "Good certificate" msgstr "Korrektes Zertifikat" #: g10/trustdb.c:933 msgid "very strange: no public key\n" msgstr "sehr seltsam: kein öffentlicher Schlüssel\n" #: g10/trustdb.c:982 #, c-format msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" msgstr "hintlist %lu[%d] of %lu zeigt nicht auf einen 'dir record'\n" #: g10/trustdb.c:988 #, c-format msgid "lid %lu does not have a key\n" msgstr "lid %lu hat keinen Schlüssel\n" #: g10/trustdb.c:998 #, c-format msgid "lid %lu: can't get keyblock: %s\n" msgstr "lid %lu: Schlüsselblock nicht verfügbar: %s\n" #: g10/trustdb.c:1055 g10/trustdb.c:2030 #, c-format msgid "tdbio_search_dir failed: %s\n" msgstr "tdbio_search_dir fehlgeschlagen: %s\n" #: g10/trustdb.c:1210 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "Schlüssel %08lX.%lu: Korrekte Unterschlüssel-Anbindung\n" #: g10/trustdb.c:1216 g10/trustdb.c:1259 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "Schlüssel %08lX.%lu: Ungültige Unterschlüssel-Anbindung\n" #: g10/trustdb.c:1232 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "Schlüssel %08lX.%lu: Gültiger Schlüsselwiderruf\n" #: g10/trustdb.c:1238 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "Schlüssel %08lX.%lu: Ungültiger Schlüsselwiderruf: %s\n" #: g10/trustdb.c:1253 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "Schlüssel %08lX.%lu: Gültiger Unterschlüsselwiderruf\n" #: g10/trustdb.c:1360 msgid "Good self-signature" msgstr "Korrekte Eigenbeglaubigung" #: g10/trustdb.c:1371 msgid "Invalid self-signature" msgstr "Ungültige Eigenbeglaubigung" #: g10/trustdb.c:1403 msgid "Valid user ID revocation skipped due to a newer self signature\n" msgstr "" "Gültiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung " "vorliegt\n" #: g10/trustdb.c:1410 msgid "Valid user ID revocation\n" msgstr "Gültiger User-ID-Widerruf\n" #: g10/trustdb.c:1417 msgid "Invalid user ID revocation" msgstr "Ungültiger User-ID-Widerruf" #: g10/trustdb.c:1512 msgid "Too many preferences" msgstr "Zu viele Einstellungen" #: g10/trustdb.c:1526 msgid "Too many preference items" msgstr "Zu viele Angaben zur Bevorzugung" #: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 msgid "WARNING: can't yet handle long pref records\n" msgstr "WARNUNG: Lange 'Pref'-Records können noch nicht benutzt werden\n" #: g10/trustdb.c:1654 msgid "duplicated certificate - deleted" msgstr "Doppelte Zertifikate - entfernt" #: g10/trustdb.c:1692 msgid "public key not anymore available" msgstr "Öffentlicher Schlüssel ist nicht mehr vorhanden" #: g10/trustdb.c:1702 g10/trustdb.c:1791 msgid "Invalid certificate revocation" msgstr "Ungültiger Zertifikatswiderruf" #: g10/trustdb.c:1703 g10/trustdb.c:1792 msgid "Invalid certificate" msgstr "Ungültiges Zertifikat" #: g10/trustdb.c:1720 #, c-format msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" msgstr "" "uid %08lX.%lu/%02X%02X: hat \"shadow-dir\" %lu, aber ist noch nicht " "markiert.\n" #: g10/trustdb.c:1734 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n" #. that should never happen #: g10/trustdb.c:2007 #, c-format msgid "insert_trust_record: keyblock not found: %s\n" msgstr "insert_trust_record: Schlüsselblock nicht gefunden: %s\n" #: g10/trustdb.c:2408 msgid "Ooops, no keys\n" msgstr "Huch, keine Schlüssel\n" #: g10/trustdb.c:2412 msgid "Ooops, no user ids\n" msgstr "Huch, keine User-IDs\n" #: g10/trustdb.c:2529 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: Einfügen fehlgeschlagen: %s\n" #: g10/trustdb.c:2534 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: Einfügen fehlgeschlagen: %s\n" #: g10/trustdb.c:2540 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: eingefügt\n" #: g10/trustdb.c:2545 g10/trustdb.c:2654 #, c-format msgid "lid %lu: update failed: %s\n" msgstr "lid %lu: Änderung fehlgeschlagen: %s\n" #: g10/trustdb.c:2551 g10/trustdb.c:2660 #, c-format msgid "lid %lu: updated\n" msgstr "lid %lu: geändert\n" #: g10/trustdb.c:2556 g10/trustdb.c:2664 #, c-format msgid "lid %lu: okay\n" msgstr "lid %lu: In Ordnung\n" #: g10/trustdb.c:2562 g10/trustdb.c:2671 #, c-format msgid "%lu keys processed\n" msgstr "%lu Schlüssel bearbeitet\n" #: g10/trustdb.c:2564 g10/trustdb.c:2675 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu Schlüssel mit Fehlern\n" #: g10/trustdb.c:2566 g10/trustdb.c:2677 #, c-format msgid "\t%lu keys updated\n" msgstr "\t%lu Schlüssel geändert\n" #: g10/trustdb.c:2568 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu Schlüssel eingefügt\n" #: g10/trustdb.c:2571 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "enumerate Schlüsselblock fehlgeschlagen: %s\n" #: g10/trustdb.c:2598 #, c-format msgid "%s: keyblock read problem: %s\n" msgstr "%s: Schlüsselblock Leseproblem: %s\n" #: g10/trustdb.c:2612 #, c-format msgid "%s: update failed: %s\n" msgstr "%s: Änderung fehlgeschlagen: %s\n" #: g10/trustdb.c:2615 #, c-format msgid "%s: updated\n" msgstr "%s: geändert\n" #: g10/trustdb.c:2617 #, c-format msgid "%s: okay\n" msgstr "%s: In Ordnung\n" #: g10/trustdb.c:2632 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: Dir-Satz ohne Schlüssel - übergangen\n" #: g10/trustdb.c:2645 #, c-format msgid "lid %lu: keyblock not found: %s\n" msgstr "lid %lu: Schlüsselblock nicht gefunden: %s\n" #: g10/trustdb.c:2673 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu Schlüssel übersprungen\n" #: g10/trustdb.c:2743 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n" #: g10/trustdb.c:2750 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "Schlüssel %08lX: 'trust record' einfügen fehlgeschlagen: %s\n" #: g10/trustdb.c:2754 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "Schlüssel %08lX.%lu: in \"trustdb\" eingefügt\n" #: g10/trustdb.c:2762 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "Schlüssel %08lX.%lu: wurde in der Zukunft erzeugt (Zeitreise oder Uhren " "stimmen nicht überein)\n" #: g10/trustdb.c:2769 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "Schlüssel %08lX.%lu: verfallen am %s\n" #: g10/trustdb.c:2777 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "Schlüssel %08lX.%lu: Vertrauensprüfung fehlgeschlagen: %s\n" #: g10/trustdb.c:2881 #, c-format msgid "user '%s' not found: %s\n" msgstr "Benutzer '%s' nicht gefunden: %s\n" #: g10/trustdb.c:2883 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n" #: g10/trustdb.c:2886 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefügt\n" #: g10/trustdb.c:2889 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n" #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: Schlüsselbund kann nicht erzeugt werden: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: Schlüsselbund erstellt\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s ist der Unveränderte\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s ist der Neue\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n" "echten Zufallsgenerator verwendbar\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "übersprungen '%s': %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "'%s übersprungen: Dies ist ein durch PGP erzeugter ElGamal-Schlüssel. Das " "ist für Signaturen NICHT sicher genug!\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Datei '%s' existiert bereits. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "Überschreiben (j/N)? " #: g10/openfile.c:92 msgid "writing to stdout\n" msgstr "Schreiben auf die Standardausgabe\n" #: g10/openfile.c:149 #, c-format msgid "assuming signed data in `%s'\n" msgstr "die unterzeichneten Daten sind wohl in '%s'\n" #: g10/openfile.c:199 #, c-format msgid "%s: new options file created\n" msgstr "%s: neue Optionendatei erstellt\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "%s verschlüsselte Daten\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "Unsicherer Schlüssel erzeugt - neuer Versuch\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Trotz %d-fachen Versuch konnte die Erzeugung eines unsicheren Schlüssels für " "sym.Verschlüsselung nicht vermieden werden!\n" # "It's up to you to assign a value here; this value will never be exported\n" # "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" # "to do with the (implicitly created) web-of-certificates." #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" "SIE müssen hier einen Wert eingeben. Dieser Wert wird niemals an eine " "Dritte\n" "weitergegeben (exportiert) werden. Wir brauchen ihn zum Aufbau des\n" "\"web-of-trust\", Er hat nichts mit dem (stillschweigend aufgebautem)\n" "\"web-of-certificates\" zu tun." # "If you want to use this revoked key anyway, answer \"yes\"." #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" "Wenn Sie diesen widerrufenen Schlüssel trotzdem benutzen wollen,\n" "so antworten Sie mit \"ja\" oder schweigen für immer." # "If you want to use this untrusted key anyway, answer \"yes\"." #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" "Wenn Sie diesen nichtvertruenswürdigen Schlüssel trotzdem benutzen wollen,\n" "so antworten Sie mit \"ja\" oder schweigen Sie für immer." # "Enter the user id of the addresse to whom you want to send the message." #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "" "Geben Sie die User-ID dessen ein, an den Sie die Botschaft senden wollen." #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" "Wählen Sie die zu verwendende Methode aus.\n" "DSA (alias DSS) bedeutet \"digital signature algorithm\" (Digitales\n" " Unterschrift-Verfahren). Es kann nur zum Unterschreiben und Beglaubigen\n" " benutzt werden. Dies ist das empfohlene Verfahren, da dessen Überprüfung\n" " wesentlich schneller abläuft, als die von \"ElGamal\".\n" "\n" "ElGamal ist ein Verfahren für Unterschrift, Beglaubigung und " "Verschlüsselung\n" " OpenPGP unterscheidet zwischen zwei Arten von ElGamal: eines nur zum\n" " Unterschreiben/Beglaubigen und eines zusätzlich zum Verschlüsseln.\n" " Eigentlich sind diese Arten identisch; allerdings müssen einige Parameter\n" " auf eine besondere Art gewählt werden, um einen sicheren Schlüssel für\n" " Unterschriften zu erzeugen. Dieses Programm macht dies zwar so, aber " "andere\n" " Programme sind nach OpenPGP-Spezifikation nicht verpflichtet die zweite " "Art\n" " (die mit zusätzlichem Verschlüsseln) zu verstehen.\n" "\n" "Der Hauptschlüssel (\"primary Key\") muß auf jeden Fall zum Unterschreiben " "fähig\n" "sein. Deshalb kann ein Nur-Verschlüssel-ElGamal-Schlüssel dafür nicht\n" "verwendet werden.\n" "Auch sollte man \"ElGamal in einem v3-Paket\" nicht verwenden, denn solch " "ein\n" "Schlüssel ist nicht mit anderen Programmen nach der OpenPGP-Spezifikation\n" "verträglich." # 0.9.0: Although these keys are defined in RFC2440 they are not suggested\n" # because they are not supported by all programs and signatures created\n" # with them are quite large and very slow to verify." #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" "Obwohl diese Schlüssel in RFC 2440 definiert sind, ist ihre Verwendung " "nicht\n" "empfohlen. Sie werden nämlich nicht von allen Programmen unterstützt.\n" "Außerdem sind damit ezeugte Unterschriften recht groß und die Überprüfung\n" "ist langsam." # "Enter the size of the key" #: g10/helptext.c:89 msgid "keygen.size" msgstr "" "Wählen Sie die gewünschte Schlüssellänge.\n" "\n" "Ein langer Schlüssel bietet mehr Sicherheit, kostet aber auch mehr " "Rechenzeit.\n" "Ein kurzer Schlüssel ist nicht ganz so sicher, wird aber schneller " "bearbeitet.\n" "1024 Bit ist für den Heimgebrauch ein brauchbarer Wert. Wenn Sie aber z.B. " "in\n" "Atlanta, Georgia, USA für eine Limonandenfabrik arbeiten, und das Rezept\n" "speichern wollen (\"SCHLEMMER!\"), so wären 2048 Bit kein schlechter Wert." # "Answer \"yes\" or \"no\"" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "Geben Sie den erforderlichen Wert ein" #: g10/helptext.c:107 msgid "keygen.valid.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Enter the name of the key holder" #: g10/helptext.c:112 msgid "keygen.name" msgstr "Geben Sie den Namen des Schlüsselinhabers ein" # "please enter an optional but highly suggested email address" #: g10/helptext.c:117 msgid "keygen.email" msgstr "" "Geben Sie eine E-Mail-Adresse ein. Dies ist zwar nicht notwendig,\n" "aber empfehlenswert." # "Please enter an optional comment" #: g10/helptext.c:121 msgid "keygen.comment" msgstr "Geben Sie (bei Bedarf) einen Kommentar ein" # "N to change the name.\n" # "C to change the comment.\n" # "E to change the email address.\n" # "O to continue with key generation.\n" # "Q to to quit the key generation." #: g10/helptext.c:126 msgid "keygen.userid.cmd" msgstr "" "N um den Namen zu ändern.\n" "K um den Kommentar zu ändern.\n" "E um die E-Mail-Adresse zu ändern.\n" "F um mit der Schlüsselerzeugung fortzusetzen.\n" "B um die Schlüsselerzeugung abbrechen." # "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." #: g10/helptext.c:135 msgid "keygen.sub.okay" msgstr "" "Geben Sie \"Ja\" (oder nur \"j\") ein, um den Unterschlüssel zu erzeugen." # "Answer \"yes\" or \"no\"" #: g10/helptext.c:139 msgid "sign_uid.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Answer \"yes\" or \"no\"" #: g10/helptext.c:144 msgid "change_passwd.empty.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Please enter \"help\" to see the list of commands." #: g10/helptext.c:149 msgid "keyedit.cmd" msgstr "Geben Sie \"help\" ein, um die Liste der Befehle einzusehen." # "Answer \"yes\" or \"no\"" #: g10/helptext.c:153 msgid "keyedit.save.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" #: g10/helptext.c:158 msgid "keyedit.cancel.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Answer \"yes\" is you want to sign ALL the user IDs" #: g10/helptext.c:162 msgid "keyedit.sign_all.okay" msgstr "Geben Sie \"Ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen" # "Answer \"yes\" if you really want to delete this user ID.\n" # "All ceritifcates are then also lost!" #: g10/helptext.c:166 msgid "keyedit.remove.uid.okay" msgstr "" "Geben Sie \"Ja\" (oder nur \"j\") ein, um diese User-ID zu LÖSCHEN.\n" "Alle Zertifikate werden dann auch weg sein!" # "Answer \"yes\" if it is okay to delete the subkey" #: g10/helptext.c:171 msgid "keyedit.remove.subkey.okay" msgstr "" "Geben Sie \"Ja\" (oder nur \"j\") ein, um diesen Unterschlüssel zu löschen" +# ("keyedit.delsig.valid"), +# "This is a valid signature on the key; you normally don't want\n" +# "to delete this signature may be important to establish a trust\n" +# "connection to the key or another key certified by this key." +#: g10/helptext.c:176 +msgid "keyedit.delsig.valid" +msgstr "" +"Dies ist eine gültige Beglaubigung für den Schlüssel. Es ist normalerweise\n" +"unnötig sie zu löschen. Sie ist möglicherweise sogar notwendig, um einen\n" +"Trust-Weg zu diesem oder einem durch diesen Schlüssel beglaubigten Schlüssel\n" +"herzustellen" + +# ("keyedit.delsig.invalid"), +# "The signature is not valid. It does make sense to remove it from\n" +# "your keyring if it is really invalid and not just unchecked due to\n" +# "a missing public key (marked by \"sig?\")." +#: g10/helptext.c:181 +msgid "keyedit.delsig.invalid" +msgstr "Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem\n" +"Schlüsselbund zu entfernen, sofern sie wirklich ungültig ist und nicht nur\n" +"wegen eines fehlenden öff.Schlüssel (\"sig?\") unkontrollierbar ist." + +# ("keyedit.delsig.selfsig") +# "This is a signature which binds the user ID to the key. It is\n" +# "usually not a good idea to remove such a signature. Actually\n" +# "GnuPG might not be able to use this key anymore. So do this\n" +# "only if this self-signature is for some reason not valid and\n" +# "a second one is available." +#: g10/helptext.c:186 +msgid "keyedit.delsig.selfsig" +msgstr "" +"Diese Beglaubigung bindet die User-ID an den Schlüssel. Normalerweise ist\n" +"es nicht gut, solche Beglaubigungen zu entfernen. Um ehrlich zu sein:\n" +"Es kann sein, daß GnuPG solche Schlüssel gar nicht mehr benutzen kann.\n" +"Sie sollten diese Eigenbeglaubigung also nur dann entfernen, wenn sie aus\n" +"irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar ist." + # ################################ # ####### Help msgids ############ # ################################ -#: g10/helptext.c:175 +#: g10/helptext.c:195 msgid "passphrase.enter" msgstr "" "Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz, der aus\n" "beliebigen Zeichen bestehen kann. Was Sie eingegeben wird nicht angezeigt.\n" "\n" "Zur ihrer eigenen Sicherbeit benutzen Sie bitte einen Satz, den sie sich\n" "gut merken könne, der aber nicht leicht zu erraten ist; Zitate und andere\n" "bekannte Texte sind eine SCHLECHTE Wahl, da diese mit Sicherheit online\n" "verfügbar sind und durch entsprechende Programme zum Raten des Mantras\n" "benutzt werden. Sätze mit persönlicher Bedeutung, die auch noch durch\n" -"falsche Groß-/Kleinschreibung und eingestreute Sonderzeichen verändert " -"werden,\n" +"falsche Groß-/Kleinschreibung und eingestreute Sonderzeichen verändert werden,\n" "sind i.d.R. eine gute Wahl" -#: g10/helptext.c:182 +#: g10/helptext.c:202 msgid "passphrase.repeat" msgstr "" "Um sicher zu gehen, daß Sie sich bei der Eingabe des Mantras nicht\n" "vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n" "übereinstimmen, wird das Mantra akzeptiert." # "Give the name fo the file to which the signature applies" -#: g10/helptext.c:186 +#: g10/helptext.c:206 msgid "detached_signature.filename" msgstr "" "Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehört" # "Answer \"yes\" if it is okay to overwrite the file" -#: g10/helptext.c:190 +#: g10/helptext.c:210 msgid "openfile.overwrite.okay" msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten" -#: g10/helptext.c:204 +#: g10/helptext.c:224 msgid "No help available" msgstr "Keine Hilfe vorhanden." -#: g10/helptext.c:216 +#: g10/helptext.c:236 #, c-format msgid "No help available for `%s'" msgstr "Keine Hilfe für '%s' vorhanden." #~ msgid "can't open file: %s\n" #~ msgstr "Kann die Datei nicht öffnen: %s\n" #~ msgid "read error: %s\n" #~ msgstr "Lesefehler: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "kann Schlüsselbund nicht schreiben: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "Schreiben des Schlüsselblocks\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "Der Schlüsselblock kann nicht geschrieben werden: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "kann geheimen Schlüsselbund nicht sperren: %s\n" #~ msgid "can't write keyring: %s\n" #~ msgstr "kann Schlüsselbund nicht schreiben: %s\n" #~ msgid "encrypted message is valid\n" #~ msgstr "verschlüsselte Botschaft ist gültig\n" #~ msgid "Can't check MDC: %s\n" #~ msgstr "Siegel (MDC) kann nicht geprüft werden: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "Syntax: gpgm [Optionen] [Dateien] (-h für Hilfe)" #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG Wartungs-Hilfsprogramm\n" #~ msgid "usage: gpgm [options] " #~ msgstr "Aufruf: gpgm [Optionen] " #~ msgid "|KEYID|ulimately trust this key" #~ msgstr "|KEYID|Diesem Schlüssel uneingeschränkt vertrauen" #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "Verketteter Signatursatz %lu hat einen falschen Besitzer\n" #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "'%s' ist keine gültige lange Schlüssel-ID\n" #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "" #~ "Schlüssel %08lX: kein öffentlicher Schüssel für vertrauenswürdigen Schlüssel " #~ "- übersprungen\n" #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: Lesen des Verz.Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "lid %lu: Lesen des Schl..Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "lid %lu: Lesen des UserID-Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: Lesen des Pref.Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "lid %lu: Lesen des Sig.Satzes fehlgeschlagen: %s\n" #~ msgid "user '%s' read problem: %s\n" #~ msgstr "User '%s' Leseproblem: %s\n" #~ msgid "user '%s' list problem: %s\n" #~ msgstr "User '%s' Listenproblem: %s\n" #~ msgid "user '%s' not in trustdb\n" #~ msgstr "User '%s' ist nicht in der trustdb\n" #~ msgid "" #~ "# List of assigned trustvalues, created %s\n" #~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n" #~ msgstr "" #~ "# Liste der zugewisenen \"trustvalues\", erzeugt am %s\n" #~ "# (Verwenden Sie \"gpgm --import-ownertrust\" um sie wieder einzuspielen)\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "Verzeichnis-Satz ohne Hauptschlüssel\n" #~ msgid "line too long\n" #~ msgstr "Zeile zu lang\n" #~ msgid "error: missing colon\n" #~ msgstr "Fehler: Fehlender Doppelpunkt\n" #~ msgid "error: invalid fingerprint\n" #~ msgstr "Fehler: ungültiger Fingerabdruck\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "Fehler: Keine \"Owner trust\" Werte\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "Schlüssel ist nicht in der trustdb, Schl.bund wird durchsucht.\n" #~ msgid "key not in ring: %s\n" #~ msgstr "Schlüssel ist nicht im Schlüsselbund: %s\n" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Huch: Schlüssel ist ja gar nicht in der Trust-DB?\n" #~ msgid "insert trust record failed: %s\n" #~ msgstr "'trust record' einfügen fehlgeschlagen: %s\n" #~ msgid "error finding dir record: %s\n" #~ msgstr "Fehler beim Auffinden des Verz.Satzes: %s\n" #~ msgid "Hmmm, public key lost?" #~ msgstr "Hmmm, öffentlicher Schüssel verloren?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "Für insert_trust_record() wurde nicht der Hauptschlüssel benutzt\n" #~ msgid "second" #~ msgstr "Sekunde" #~ msgid "seconds" #~ msgstr "Sekunden" #~ msgid "invalid clear text header: " #~ msgstr "ungültige Klartexteinleitung" #~ msgid "LID %lu: changing trust from %u to %u\n" #~ msgstr "LID %lu: Ändern des 'Trusts' von %u auf %u\n" #~ msgid "LID %lu: setting trust to %u\n" #~ msgstr "LID %lu: Setze 'Trust' auf %u\n" #~ msgid "This key belongs to us (we have the secret key)\n" #~ msgstr "" #~ "Dieser Schlüssel gehört uns (alldieweil wir den geheimen Schlüssel dazu " #~ "haben)\n" #~ msgid "You will see a list of signators etc. here\n" #~ msgstr "Sie sollten hier eigentlich eine Liste der Signierer sehen.\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: good signature (3)\n" #~ msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung\n" #~ msgid "" #~ "key %08lX.%lu, uid %02X%02X, sig %08lX: very strange: no public key\n" #~ msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: invalid signature: %s\n" #~ msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung\n" #~ msgid "key %08lX.%lu, uid %02X%02X: good self-signature\n" #~ msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung\n" #~ msgid "" #~ "key %08lX.%lu, uid %02X%02X, sig %08lX: duplicated signature - deleted\n" #~ msgstr "Schlüssel %08lX: Ungültige Eigensignatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: good signature (1)\n" #~ msgstr "Schlüssel %08lX: Ungültige Eigensignatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: weird: no public key\n" #~ msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: good signature (2)\n" #~ msgstr "Schlüssel %08lX: Ungültige Eigensignatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: no public key\n" #~ msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n" #~ msgid "key %08lX: already in ultikey_table\n" #~ msgstr "Schlüssel %08lX: bereits in der Tabelle der geheime Schlüssel\n" #~ msgid "can't write keyring\n" #~ msgstr "kann Schlüsselbund nicht schreiben\n" #~ msgid "make a signature on a key in the keyring" #~ msgstr "Schlüssel signieren" #~ msgid "edit a key signature" #~ msgstr "Bearbeiten der Signaturen eines Schlüssels" #~ msgid "" #~ "It's up to you to assign a value here; this value will never be exported\n" #~ "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" #~ "to do with the (implicitly created) web-of-certificates.\n" #~ msgstr "" #~ "Sie müssen selbt entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n" #~ "wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n" #~ "um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem " #~ "(implizit\n" #~ "erzeugten) \"Netz der Zertifikate\" zu tun.\n" #~ msgid "public and secret subkey created.\n" #~ msgstr "Öffentlicher und geheimer Schlüssel erzeugt.\n" #~ msgid "No public key for %d signatures\n" #~ msgstr "Kein öffentlicher Schlüssel für %d Signaturen\n" #~ msgid "[User name not available] " #~ msgstr "[Benuzername nicht verfügbar] " #~ msgid "This is a BAD signature!\n" #~ msgstr "Dies ist eine FALSCHE Signatur!\n" #~ msgid "The signature could not be checked!\n" #~ msgstr "Die Signatur konnte nicht geprüft werden!\n" #~ msgid "Checking signatures of this public key certificate:\n" #~ msgstr "Die Signaturen dieses Zertifikats werden überprüft:\n" #~ msgid "Do you want to remove some of the invalid signatures? " #~ msgstr "Möchten Sie einige der ungültigen Signaturen entfernen? " #~ msgid "there is a secret key for this public key!\n" #~ msgstr "" #~ "Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel!\n" #~ msgid "use option \"--delete-secret-key\" to delete it first.\n" #~ msgstr "" #~ "Benutzen Sie das Kommando \"--delete-secret-key\", um ihn vorab zu " #~ "entfernen.\n" #~ msgid "can't do that in batchmode without \"--yes\"\n" #~ msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden.\n" #~ msgid "Delete this key from the keyring? " #~ msgstr "Diesen Schlüssel aus dem Schlüsselbund löschen? " #~ msgid "This is a secret key! - really delete? " #~ msgstr "Dies ist ein privater Schlüssel! - Wirklich löschen? " diff --git a/po/pl.po b/po/pl.po index 85ac9b741..380831b65 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,3416 +1,3384 @@ # GNU PG polish translation # Copyright (C) 1998 Free Software Foundation, Inc. # Janusz A. Urbanowicz , 1998. # # msgid "" msgstr "" -"Project-Id-Version: gnupg-0.9.2\n" +"Project-Id-Version: gnupg-0.9.7\n" "POT-Creation-Date: 1999-05-23 15:36+0200\n" -"PO-Revision-Date: 1999-01-26 01:30+01:00\n" +"PO-Revision-Date: 1999-05-30 19:08+02:00\n" "Last-Translator: Janusz A. Urbanowicz \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " -"--keywor\\d=_ --keyword=N_ --files-from=./POTFILES.in\n" -"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " -"cipher\\/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " -"g10/decrypt\\.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " -"g10/mainproc.c g10/pas\\sphrase.c g10/plaintext.c g10/pref.c " -"g10/seckey-cert.c g10/sig-check.c g10/sign\\.c g10/trustdb.c g10/verify.c " -"g10/status.c g10/pubkey-enc.c\n" +"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments --keywor\\d=_ --keyword=N_ --files-from=./POTFILES.in\n" +"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c cipher\\/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c g10/decrypt\\.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c g10/mainproc.c g10/pas\\sphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c g10/sig-check.c g10/sign\\.c g10/trustdb.c g10/verify.c g10/status.c g10/pubkey-enc.c\n" #: util/secmem.c:76 msgid "Warning: using insecure memory!\n" msgstr "Ostrzeżenie: używana pamięć nie jest pamięcią bezpieczną!\n" #: util/secmem.c:249 msgid "operation is not possible without initialized secure memory\n" -msgstr "" +msgstr "operacja niemożliwa do wykonania bez dostępnej pamięci bezpiecznej\n" #: util/secmem.c:250 msgid "(you may have used the wrong program for this task)\n" -msgstr "" +msgstr "(prawdopodobnie używany program jest niewłaściwy dlatego zadania)\n" #: util/miscutil.c:156 msgid "yes" msgstr "tak" #: util/miscutil.c:157 msgid "yY" msgstr "tT" #: util/errors.c:54 msgid "general error" msgstr "błąd ogólny" #: util/errors.c:55 msgid "unknown packet type" msgstr "nieznany rodzaj pakietu" #: util/errors.c:56 msgid "unknown version" msgstr "nieznana wersja" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "nieznany algorytm klucza publicznego" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "nieznany algorytm skrótu" #: util/errors.c:59 msgid "bad public key" msgstr "niepoprawny klucz publiczny" #: util/errors.c:60 msgid "bad secret key" msgstr "niepoprawny klucz prywatny" #: util/errors.c:61 msgid "bad signature" msgstr "niepoprawny podpis" #: util/errors.c:62 msgid "checksum error" msgstr "błąd sumy kontrolnej" #: util/errors.c:63 msgid "bad passphrase" msgstr "niepoprawne wyrażenie przejściowe" #: util/errors.c:64 msgid "public key not found" msgstr "klucz publiczny nie odnaleziony" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "nieznany algorytm szyfrujący" #: util/errors.c:66 msgid "can't open the keyring" msgstr "otwarcie zbioru kluczy jest niemożliwe" #: util/errors.c:67 msgid "invalid packet" msgstr "niepoprawny pakiet" #: util/errors.c:68 msgid "invalid armor" msgstr "błąd w opakowaniu ASCII" #: util/errors.c:69 msgid "no such user id" msgstr "brak takiego identyfikatora użytkownika." #: util/errors.c:70 msgid "secret key not available" msgstr "klucz tajny jest niedostępny" #: util/errors.c:71 msgid "wrong secret key used" msgstr "został użyty niewłaściwy klucz tajny" #: util/errors.c:72 msgid "not supported" msgstr "nie jet obsługiwany" #: util/errors.c:73 msgid "bad key" msgstr "klucz niepoprawny" #: util/errors.c:74 msgid "file read error" msgstr "błąd przy odczycie pliku" #: util/errors.c:75 msgid "file write error" msgstr "błąd przy zapisie pliku" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "nieznany algorytm kompresji" #: util/errors.c:77 msgid "file open error" msgstr "błąd przy otwieraniu pliku" #: util/errors.c:78 msgid "file create error" msgstr "błąd przy tworzeniu pliku" #: util/errors.c:79 msgid "invalid passphrase" msgstr "niepoprawne wyrażenie przejściowe" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algorytm szyfrowania z kluczem publicznym nie jest zaimplementowany" #: util/errors.c:81 msgid "unimplemented cipher algorithm" -msgstr "algorytm szyfrujący nie jest zaimplementowany." +msgstr "algorytm szyfrujący nie jest zaimplementowany" #: util/errors.c:82 msgid "unknown signature class" msgstr "nieznana klasa podpisu" #: util/errors.c:83 msgid "trust database error" msgstr "błąd w bazie zaufania" #: util/errors.c:84 msgid "bad MPI" msgstr "błąd MPI" #: util/errors.c:85 msgid "resource limit" msgstr "ograniczenie zasobów" #: util/errors.c:86 msgid "invalid keyring" msgstr "błąd w zbiorze kluczy" #: util/errors.c:87 msgid "bad certificate" msgstr "niepoprawny certyfikat" #: util/errors.c:88 msgid "malformed user id" msgstr "błąd formatu indentyfikatora użytkownika" #: util/errors.c:89 msgid "file close error" msgstr "błąd przy zamykaniu pliku" #: util/errors.c:90 msgid "file rename error" msgstr "błąd przy zmianie nazwy pliku" #: util/errors.c:91 msgid "file delete error" msgstr "błąd przy usuwaniu pliku" #: util/errors.c:92 msgid "unexpected data" msgstr "nieoczekiowane dane" #: util/errors.c:93 msgid "timestamp conflict" msgstr "konflikt znaczników czasu" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "nieużyteczny algorytm z kluczem publicznym" #: util/errors.c:95 msgid "file exists" msgstr "plik już istnieje" #: util/errors.c:96 msgid "weak key" msgstr "klucz słaby" #: util/errors.c:97 msgid "invalid argument" msgstr "błędny argument" #: util/errors.c:98 msgid "bad URI" msgstr "niepoprawny URI" #: util/errors.c:99 msgid "unsupported URI" -msgstr "URI nie obsługiwanego typu" +msgstr "URI typu nie obsługiwanego" #: util/errors.c:100 msgid "network error" msgstr "błąd sieci" #: util/errors.c:102 -#, fuzzy msgid "not encrypted" -msgstr "%s zaszyfrowane dane\n" +msgstr "nie zaszyfrowany" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... to jest błąd w programie (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "znalazłeś(aś) błąd w programie ... (%s:%d)\n" #: cipher/random.c:412 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "OSTRZEŻENIE: używany generator liczb losowych\n" "nie jest kryptograficznie bezpieczny!!\n" #: cipher/random.c:413 msgid "" "The random number generator is only a kludge to let\n" "it run - it is in no way a strong RNG!\n" "\n" "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" "\n" msgstr "" "Używany generator liczb losowych jest atrapą wprowadzoną dla umożliwienia\n" "normalnej kompilacji - nie jest kryptograficznie bezpieczny!\n" "\n" "JAKIEKOLWIEK DANE GENEROWANE PRZEZ TEN PROGRAM NIE NADAJĄ SIĘ DO \n" "NORMALNEGO UŻYTKU I NIE ZAPEWNIAJĄ BEZPIECZEŃSTWA!!\n" #: cipher/rndlinux.c:110 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Brakuje możliwości wygenerowania odpowiedniej liczby losowych bajtów.\n" "Proszę kontynuować inne działania aby system mógł zebrać odpowiednią\n" "ilość entropii do ich wygenerowania (brakuje %d bajtów).\n" #: g10/g10.c:165 msgid "" "@Commands:\n" " " msgstr "" "@Polecenia:\n" " " #: g10/g10.c:167 msgid "|[file]|make a signature" msgstr "|[plik]|złożenie podpisu" #: g10/g10.c:168 msgid "|[file]|make a clear text signature" msgstr "|[plik]|złożenie podpisu na czytelnym dokumencie" #: g10/g10.c:169 msgid "make a detached signature" msgstr "sporządzenie podpisu oddzielonego od dokumentu" #: g10/g10.c:170 msgid "encrypt data" msgstr "szyfrowanie danych" #: g10/g10.c:171 msgid "encryption only with symmetric cipher" msgstr "szyfrowanie tylko szyfrem symetrycznym" #: g10/g10.c:172 msgid "store only" msgstr "tylko zapis" #: g10/g10.c:173 msgid "decrypt data (default)" msgstr "odszyfrowywanie danych (domyślnie)" #: g10/g10.c:174 msgid "verify a signature" msgstr "sprawdzenie podpisu" #: g10/g10.c:175 msgid "list keys" msgstr "lista kluczy" #: g10/g10.c:177 msgid "list keys and signatures" msgstr "lista kluczy i podpisów" #: g10/g10.c:178 msgid "check key signatures" msgstr "sprawdzenie podpisów kluczy" #: g10/g10.c:179 msgid "list keys and fingerprints" msgstr "lista kluczy i ich odcisków" #: g10/g10.c:180 msgid "list secret keys" msgstr "lista kluczy tajnych" #: g10/g10.c:181 msgid "generate a new key pair" msgstr "generacja nowej pary klucza" #: g10/g10.c:182 msgid "remove key from the public keyring" msgstr "usunięcie klucza ze zbioru kluczy publicznych" #: g10/g10.c:183 msgid "sign or edit a key" msgstr "podpisanie lub modyfikacja klucza" #: g10/g10.c:184 msgid "generate a revocation certificate" msgstr "generacja certyfikatu unieważnienia klucza" #: g10/g10.c:185 msgid "export keys" msgstr "eksport kluczy do pliku" #: g10/g10.c:186 msgid "export keys to a key server" msgstr "eksport kluczy do serwera kluczy" #: g10/g10.c:187 -#, fuzzy msgid "import keys from a key server" -msgstr "eksport kluczy do serwera kluczy" +msgstr "import kluczy z serwera kluczy" #: g10/g10.c:190 msgid "import/merge keys" -msgstr "dołączanie klucza do zbioru" +msgstr "import/dołączenie kluczy" #: g10/g10.c:192 msgid "list only the sequence of packets" msgstr "wypisane sekwencji pakietów" #: g10/g10.c:194 msgid "export the ownertrust values" msgstr "eksport wartości zaufania" #: g10/g10.c:196 msgid "import ownertrust values" msgstr "wczytanie wartośći zaufania" #: g10/g10.c:198 msgid "|[NAMES]|update the trust database" msgstr "|[NAZWY]|naniesienie poprawek do bazy zaufania" #: g10/g10.c:200 msgid "|[NAMES]|check the trust database" msgstr "|[NAZWY]|sprawdzenie bazy zaufania" #: g10/g10.c:201 msgid "fix a corrupted trust database" msgstr "naprawa uszkodzonej Bazy Zaufania" #: g10/g10.c:202 msgid "De-Armor a file or stdin" -msgstr "Zdjęcie opakowania ASCII pliku lub potoku" +msgstr "zdjęcie opakowania ASCII pliku lub potoku" #: g10/g10.c:203 msgid "En-Armor a file or stdin" -msgstr "Opakowanie ASCII pliku lub potoku" +msgstr "opakowanie ASCII pliku lub potoku" #: g10/g10.c:204 msgid "|algo [files]|print message digests" msgstr "|algo [pliki]|skróty wiadomości" #: g10/g10.c:205 msgid "print all message digests" msgstr "wszystkie skróty wiadomości" #: g10/g10.c:211 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcje:\n" " " #: g10/g10.c:213 msgid "create ascii armored output" msgstr "plik wynikowy w opakowaniu ASCII" #: g10/g10.c:214 -#, fuzzy msgid "|NAME|encrypt for NAME" -msgstr "|NAZWA|zestaw znaków terminala NAZWA" +msgstr "|NAZWA|szyfrowanie dla odbiorcy NAZWA" #: g10/g10.c:218 msgid "use this user-id to sign or decrypt" msgstr "identyfikator do podpisania lub odszyfrowania" #: g10/g10.c:219 msgid "|N|set compress level N (0 disables)" msgstr "|N|poziom kompresji N (0 - brak)" #: g10/g10.c:221 msgid "use canonical text mode" msgstr "kanoniczny format tekstowy" #: g10/g10.c:222 msgid "use as output file" msgstr "plik wyjściowy" #: g10/g10.c:223 msgid "verbose" msgstr "z informacjami dodatkowymi" #: g10/g10.c:224 msgid "be somewhat more quiet" msgstr "mniej komunikatóww" #: g10/g10.c:225 msgid "force v3 signatures" msgstr "wymuszenie trzeciej wersji formatu podpisów" #: g10/g10.c:226 -#, fuzzy msgid "always use a MDC for encryption" -msgstr "użyć tego identyfikatora do szyfrowania" +msgstr "do szyfrowania będzie używany MDC" #: g10/g10.c:227 msgid "do not make any changes" -msgstr "" +msgstr "pozostawienie bez zmian" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, #: g10/g10.c:229 msgid "batch mode: never ask" msgstr "tryb wsadowy: żadnych pytań" #: g10/g10.c:230 msgid "assume yes on most questions" msgstr "automatyczna odpowiedź tak na większość pytań" #: g10/g10.c:231 msgid "assume no on most questions" msgstr "automatyczna odpowiedź nie na większość pytań" #: g10/g10.c:232 msgid "add this keyring to the list of keyrings" -msgstr "dodać zbiór kluczy do listy" +msgstr "dodać zbiór kluczy do listy używanych" #: g10/g10.c:233 msgid "add this secret keyring to the list" msgstr "dodać zbiór kluczy tajnych do listy" #: g10/g10.c:234 msgid "|NAME|use NAME as default secret key" msgstr "|NAZWA|użycie NAZWA jako domyślnego klucza tajnego" #: g10/g10.c:235 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|serwer kluczy w którym będą poszukiwane" #: g10/g10.c:236 msgid "|NAME|set terminal charset to NAME" msgstr "|NAZWA|zestaw znaków terminala NAZWA" #: g10/g10.c:237 msgid "read options from file" msgstr "wczytanie opcji z pliku" #: g10/g10.c:239 msgid "set debugging flags" msgstr "ustawienie opcji śledzenia wykonania programu" #: g10/g10.c:240 msgid "enable full debugging" msgstr "umożliwienie pełnego śledzenia programu" #: g10/g10.c:241 msgid "|FD|write status info to this FD" msgstr "|FD|zapisać opis stanu do FD" #: g10/g10.c:242 msgid "do not write comment packets" msgstr "nie zapisywać pakietów z komentarzem" #: g10/g10.c:243 msgid "(default is 1)" msgstr "(domyślnie 1)" #: g10/g10.c:244 msgid "(default is 3)" msgstr "(domyślnie 3)" #: g10/g10.c:246 msgid "|FILE|load extension module FILE" msgstr "|PLIK|ładowanie modułu rozszerzenia z PLIK" #: g10/g10.c:247 msgid "emulate the mode described in RFC1991" msgstr "emulacja trybu opisanego w RFC1991" #: g10/g10.c:248 msgid "|N|use passphrase mode N" msgstr "|N|N-ty tryb wprowadzania wyrażenia przejściowego" #: g10/g10.c:250 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|ALG|algorytm obliczania skrótów wiadomości ALG" #: g10/g10.c:252 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|ALG|algorytmu szyfrujący ALG dla hasła" #: g10/g10.c:253 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAZWA|algorytm szyfrujący NAZWA" #: g10/g10.c:254 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAZWA|algorytm obliczania skrótów wiadomości NAZWA" #: g10/g10.c:255 msgid "|N|use compress algorithm N" msgstr "|N|algorytm kompresji N" #: g10/g10.c:256 msgid "throw keyid field of encrypted packets" -msgstr "usunięcie identyfikatorów kluczy pakietów" +msgstr "usunięcie identyfikatorów kluczy z pakietów" #: g10/g10.c:258 msgid "" "@\n" "Examples:\n" "\n" " -se -r Bob [file] sign and encrypt for user Bob\n" " --clearsign [file] make a clear text signature\n" " --detach-sign [file] make a detached signature\n" " --list-keys [names] show keys\n" " --fingerprint [names] show fingerprints\n" msgstr "" "@\n" "Przykłady:\n" "\n" " -se -r Bob [plik] podpisać i zaszyfrować kluczem Boba\n" " --clearsign [plik] podpisać z pozostawieniem czytelności dokumentu\n" " --detach-sign [plik] podpisać z umieszczeniem podpisu w osobnym " "pliku\n" " --list-keys [nazwy] pokazuje klucze\n" " --fingerprint [nazwy] pokazuje odciski kluczy\n" #: g10/g10.c:327 msgid "Please report bugs to .\n" msgstr "Błędy prosimy zgłaszać na adres .\n" #: g10/g10.c:331 msgid "Usage: gpg [options] [files] (-h for help)" -msgstr "Sposób użycia: gpg [opcje] [pliki] (-h podaje pomoc)" +msgstr "Wywołanie: gpg [opcje] [pliki] (-h podaje pomoc)" #: g10/g10.c:334 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Składnia: gpg [opcje] [pliki]\n" "podpisywanie, sprawdzanie podpisów, szyfrowanie, deszyfrowanie\n" "domyślnie wykonywana operacja zależy od danych wejściowych\n" #: g10/g10.c:339 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Obsługiwane algorytmy:\n" #: g10/g10.c:413 msgid "usage: gpg [options] " -msgstr "sposób użycia: gpg [opcje]" +msgstr "wywołanie: gpg [opcje]" #: g10/g10.c:453 msgid "conflicting commands\n" msgstr "sprzeczne polecenia\n" #: g10/g10.c:580 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "UWAGA: brak domyślnego pliku opcji '%s'\n" #: g10/g10.c:584 #, c-format msgid "option file `%s': %s\n" msgstr "plik opcji '%s': %s\n" #: g10/g10.c:591 #, c-format msgid "reading options from `%s'\n" msgstr "odczyt opcji z '%s'\n" #: g10/g10.c:737 #, c-format msgid "%s is not a valid character set\n" msgstr "%s nie jest poprawną nazwą zestawu znaków\n" #: g10/g10.c:780 g10/g10.c:792 msgid "selected cipher algorithm is invalid\n" msgstr "wybrany algorytm szyfrujący jest niepoprawny\n" #: g10/g10.c:786 g10/g10.c:798 msgid "selected digest algorithm is invalid\n" msgstr "wybrany algorytm geenracji skrótów wiadomości jest niepoprawny\n" #: g10/g10.c:801 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "ustawienie algortytmu kompresji musi pochodzić z zakresu %d..%d\n" #: g10/g10.c:803 msgid "completes-needed must be greater than 0\n" msgstr "wartość completes-needed musi być większa od 0\n" #: g10/g10.c:805 msgid "marginals-needed must be greater than 1\n" msgstr "wartość marginals-needed musi być większa od 1\n" #: g10/g10.c:807 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "wartość max-cert-depth musi mieścić się w zakresie od 1 do 255\n" #: g10/g10.c:810 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "UWAGA: prosty tryb S2K (0) jest stanowczo odradzany\n" #: g10/g10.c:814 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "Niepoprawny tryb S2K; musi mieć wartość 0, 1 lub 3\n" #: g10/g10.c:891 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Inicjowanie Bazy Zaufania nie powiodło się: %s\n" #: g10/g10.c:897 msgid "--store [filename]" msgstr "--store [plik]" #: g10/g10.c:904 msgid "--symmetric [filename]" msgstr "--symmetric [plik]" #: g10/g10.c:912 msgid "--encrypt [filename]" msgstr "--encrypt [plik]" #: g10/g10.c:925 msgid "--sign [filename]" msgstr "--sign [plik]" #: g10/g10.c:938 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [plik]" #: g10/g10.c:952 msgid "--clearsign [filename]" msgstr "--clearsign [plik]\"" #: g10/g10.c:964 msgid "--decrypt [filename]" msgstr "--decrypt [plik]" #: g10/g10.c:973 msgid "--edit-key username [commands]" msgstr "--edit-key nazwa użytkownika [polecenia]" #: g10/g10.c:987 msgid "--delete-secret-key username" msgstr "--delete-secret-key nazwa użytkownika" #: g10/g10.c:990 msgid "--delete-key username" msgstr "--delete-key nazwa użytkownika" #: g10/encode.c:231 g10/g10.c:1013 g10/sign.c:311 #, c-format msgid "can't open %s: %s\n" msgstr "nie mogę otworzyć %s: %s\n" #: g10/g10.c:1024 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [identyfikator] [zbiór kluczy]" #: g10/g10.c:1083 #, c-format msgid "dearmoring failed: %s\n" -msgstr "Usunięcie opakowania ASCII nie powiodło się: %s\n" +msgstr "usunięcie opakowania ASCII nie powiodło się: %s\n" #: g10/g10.c:1091 #, c-format msgid "enarmoring failed: %s\n" -msgstr "Opakowywanie ASCII nie powiodło się: %s\n" +msgstr "opakowywanie ASCII nie powiodło się: %s\n" #: g10/g10.c:1157 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "niewłaściwy algorytm skrótu '%s'\n" #: g10/g10.c:1232 msgid "[filename]" msgstr "[nazwa pliku]" #: g10/g10.c:1236 msgid "Go ahead and type your message ...\n" msgstr "Wpisz tutaj swoją wiadomość ...\n" #: g10/decrypt.c:59 g10/g10.c:1239 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "nie mogę otworzyć '%s'\n" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "opakowanie: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " -msgstr "Niepoprawny nagłówek opakowania: " +msgstr "niepoprawny nagłówek opakowania: " #: g10/armor.c:326 msgid "armor header: " msgstr "nagłówek opakowania: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "niewłaściwy nagłówek czytelnego podpisanego dokumentu\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "zagnieżdżone podpisy na czytelnym dokumencie\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "niepoprawne oznaczenie linii minusami:" #: g10/armor.c:512 msgid "unexpected armor:" msgstr "nieoczekiwane opakowanie:" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "niewłaściwy znak formatu radix64 %02x został pominięty\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "przewczesny koniec pliku (brak CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "przedwczesny koniec pliku (w CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "błąd formatu CRC\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Błąd sumy CRC; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "przedwczesny koniec pliku (w linii kończącej)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "błąd w linii kończącej\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "błąd opakowania: linia dłuższa niż %d znaków\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "znak kodowania quoted-printable w opakowaniu ASCII - prawdopodobnie\n" "przekłamanie wprowadzone przez program transportowy poczty\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Brak wartości zaufania dla %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 msgid "" "Please decide how far you trust this user to correctly\n" "verify other users' keys (by looking at passports,\n" "checking fingerprints from different sources...)?\n" "\n" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "Zastanów się jak bardzo ufasz temu użytkownikowi w kwestii sprawdzania\n" "tożsamości innych właścicieli kluczy (czy sprawdzi on odciski klucza \n" "pobrane z różnych źródeł, dokumenty potwierdzające tożsamość właściciela\n" "klucza itd.)?\n" "\n" " 1 = Nie wiem.\n" " 2 = NIE ufam mu w tej kwestii.\n" " 3 = Ufam marginalnie.\n" " 4 = W pełni mu ufam.\n" " i = potrzebuję więcej informacji\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " p = powrót do głównego menu\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr "w = wyjście\n" #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "iIpPwW" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Twoja decyzja? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certyfikaty prowadzące do ostatecznie zaufanego klucza:\n" #: g10/pkclist.c:254 msgid "" "Could not find a valid trust path to the key. Let's see whether we\n" "can assign some missing owner trust values.\n" "\n" msgstr "" "Niemożliwe jest znalezienie poprawnej scieżki zaufania do tego klucza.\n" "Sprawdźmy czy można przypisać brakujące wartości zaufania.\n" "\n" #: g10/pkclist.c:260 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Brak ścieżki prowadzącej do któregoś z naszych kluczy.\n" "\n" #: g10/pkclist.c:262 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Brak certyfikatów o niezdefiniowanym poziomie zaufania.\n" "\n" #: g10/pkclist.c:264 msgid "" "No trust values changed.\n" "\n" msgstr "" "Parametry zaufania nie zostały zmienione.\n" "\n" #: g10/pkclist.c:281 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "klucz %08lX: klucz został unieważniony!\n" #: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 msgid "Use this key anyway? " msgstr "Użyć tego klucza pomimo to? " #: g10/pkclist.c:291 -#, fuzzy, c-format +#, c-format msgid "key %08lX: subkey has been revoked!\n" -msgstr "klucz %08lX: klucz został unieważniony!\n" +msgstr "klucz %08lX: podklucz został unieważniony!\n" #: g10/pkclist.c:321 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: data ważności klucza upłynęła\n" #: g10/pkclist.c:327 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "%08lX: brak informacji aby obliczyć prawdopodobieństwo zaufania\n" #: g10/pkclist.c:341 #, c-format msgid "%08lX: We do NOT trust this key\n" -msgstr "%08lX: OSTRZEŻENIE: Nie ufamy temu kluczowi!\n" +msgstr "%08lX: NIE UFAMY temu kluczowi\n" #: g10/pkclist.c:347 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" "%08lX: Nie ma pewnośći że ten klucz faktycznie należy do odoby podającej\n" "się za jego właściciela, ale jest akceptowalny.\n" #: g10/pkclist.c:353 msgid "This key probably belongs to the owner\n" msgstr "" "Ten klucz prawdopodobnie należy do osoby podającej się za jego właściciela.\n" #: g10/pkclist.c:358 msgid "This key belongs to us\n" msgstr "Ten klucz należy do nas\n" #: g10/pkclist.c:398 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "NIE MA pewności że ten klucz należy do osoby która podaje się za jego\n" "właściciela. Jeśli nie masz co do tego żadnych wątpliwości i *naprawdę*\n" "wiesz co robisz możesz odpowiedzieć \"tak\" na następne pytanie.\n" #: g10/pkclist.c:411 g10/pkclist.c:433 msgid "WARNING: Using untrusted key!\n" msgstr "OSTRZEŻENIE: używany jest klucz nie obdarzony zaufaniem!\n" #: g10/pkclist.c:454 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "OSTRZEŻENIE: Ten klucz został unieważniony przez właściciela!\n" #: g10/pkclist.c:455 msgid " This could mean that the signature is forgery.\n" msgstr " To może oznaczać że podpis jest fałszerstwem.\n" #: g10/pkclist.c:459 -#, fuzzy msgid "WARNING: This subkey has been revoked by its owner!\n" -msgstr "OSTRZEŻENIE: Ten klucz został unieważniony przez właściciela!\n" +msgstr "OSTRZEŻENIE: Ten podklucz został unieważniony przez właściciela!\n" #: g10/pkclist.c:480 msgid "Note: This key has expired!\n" msgstr "Uwaga: Data ważności tego klucza upłynęła!\n" #: g10/pkclist.c:487 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "OSTRZEŻENIE: Ten klucz nie jest poświadczony zaufanym podpisem!\n" #: g10/pkclist.c:489 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Nic nie wskazuje na to że ten podpis złożył właściciel klucza.\n" #: g10/pkclist.c:505 msgid "WARNING: We do NOT trust this key!\n" -msgstr "OSTRZEŻENIE: Nie ufamy temu kluczowi!\n" +msgstr "OSTRZEŻENIE: NIE UFAMY temu kluczowi!\n" #: g10/pkclist.c:506 msgid " The signature is probably a FORGERY.\n" msgstr " Ten podpis prawdopodobnie jest FAŁSZERSTWEM.\n" #: g10/pkclist.c:513 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "OSTRZEŻENIE: Ten klucz nie jest poświadczony wystarczająco zaufanymi " "podpisami!\n" #: g10/pkclist.c:516 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Nie ma pewności że ten podpis został złożnony przez właściciela.\n" #: g10/pkclist.c:569 g10/pkclist.c:582 g10/pkclist.c:645 g10/pkclist.c:673 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: pominięty: %s\n" #: g10/pkclist.c:591 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Nie podałeś identyfikatora użytkownika (user ID). \n" "Można to zrobić za pomocą opcji \"-r\".\n" #: g10/pkclist.c:596 msgid "Enter the user ID: " msgstr "Wprowadź identyfikator użytkownika (user ID): " #: g10/pkclist.c:607 msgid "No such user ID.\n" msgstr "Brak takiego identyfikatora użytkownika.\n" #: g10/pkclist.c:653 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: błąd podczas sprawdzania klucza: %s\n" #: g10/pkclist.c:679 msgid "no valid addressees\n" msgstr "brak poprawnych adresów\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "zapis podpisu klucza nim samym\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "zapis podpisu wiążącego klucz\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "Proszę wybrać rodzaj klucza:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) Para kluczy dla algorytmów DSA i ElGamala (domyślne)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (tylko do podpisywania)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowanie)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr "" " (%d) Klucz dla algorytmu ElGamala w pakiecie w trzeciej wersji formatu\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Twój wybór? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "Czy na pewno chcesz stworzyć klucz do szyfrowania i podpisywania? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "Niewłaściwy wybór.\n" #: g10/keygen.c:442 #, c-format msgid "" "About to generate a new %s keypair.\n" " minimum keysize is 768 bits\n" " default keysize is 1024 bits\n" " highest suggested keysize is 2048 bits\n" msgstr "" "Nastąpi generacja nowej pary kluczy dla algorytmu(ów) %s.\n" " minimalny rozmiar klucza wynosi 768 bitów\n" " domyślny rozmiar klucza wynosi 1024 bity\n" " największy sugerowany rozmiar klucza wynosi 2048 bitów\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Jakiej długości klucz wygenerować? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "Klucz dla DSA musi mieć długość pomiędzy 512 i 1024 bitow.\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "Długość klucza zbyt mała; minimalna dopuszczona wynosi 768 bitów.\n" #. It is ridiculous and an annoyance to use larger key sizes! #. * GnuPG can handle much larger sizes; but it takes an eternity #. * to create such a key (but less than the time the Sirius #. * Computer Corporation needs to process one of the usual #. * complaints) and {de,en}cryption although needs some time. #. * So, before you complain about this limitation, I suggest that #. * you start a discussion with Marvin about this theme and then #. * do whatever you want. #: g10/keygen.c:466 -#, fuzzy, c-format +#, c-format msgid "keysize too large; %d is largest value allowed.\n" -msgstr "Długość klucza zbyt mała; minimalna dopuszczona wynosi 768 bitów.\n" +msgstr "zbyt duży rozmiar klucza, ograniczenie wynosi %d.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" -"Klucze dłuższe niż 2048 bitów są odradzane ponieważ obliczenia\n" +"Klucze dłuższe niż 2048 bitów są odradzane, ponieważ obliczenia\n" "trwają wtedy BARDZO długo!\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Na pewno wygenerować klucz takiej długości? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "Należy także pamiętać o tym, że informacje mogą być też wykradzione z\n" "komputera przez podsłuch emisji elektromagnetycznej klawiatury i monitora!\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Czy naprawdę potrzebujesz takiego długiego klucza? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Żądana długość klucza to %u bity.\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrąglono do %u bitów\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Okres ważnośći klucza.\n" " 0 = klucz nie ma określonego terminu ważności\n" " = termin ważności klucza upływa za n dni\n" " w = termin ważności klucza upływa za n tygodni\n" " m = termin ważności klucza upływa za n miesięcy\n" " y = termin ważności klucza upływa za n lat\n" #: g10/keygen.c:524 msgid "Key is valid for? (0) " msgstr "Okres ważności klucza ? (0) " #: g10/keygen.c:535 msgid "invalid value\n" msgstr "niepoprawna wartość\n" #: g10/keygen.c:540 msgid "Key does not expire at all\n" msgstr "Klucz nie ma daty ważności (nie traci ważności z upływem czasu).\n" #. print the date when the key expires #: g10/keygen.c:546 #, c-format msgid "Key expires at %s\n" msgstr "Data ważności klucza: %s\n" #: g10/keygen.c:552 msgid "Is this correct (y/n)? " msgstr "Dane poprawne (t/n)? " #: g10/keygen.c:595 msgid "" "\n" "You need a User-ID to identify your key; the software constructs the user " "id\n" "from Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Musisz określić identyfikator użytkownika aby można było rozpoznać twój\n" "klucz; program złoży go z twojego imienia i nazwiska, komentarza i adresu\n" "poczty elektronicznej. Będzie on miał taką postać:\n" " \"Tadeusz Żeleński (Boy) \"\n" "\n" #: g10/keygen.c:606 msgid "Real name: " msgstr "Imię i nazwisko: " #: g10/keygen.c:610 msgid "Invalid character in name\n" msgstr "Niewłaściwy znak w imieniu lub nazwisku\n" #: g10/keygen.c:612 msgid "Name may not start with a digit\n" msgstr "Imię lub nazwisko nie może zaczynać się od cyfry\n" #: g10/keygen.c:614 msgid "Name must be at least 5 characters long\n" msgstr "Imię i nazwisko muszą mieć conajmniej 5 znaków długości.\n" #: g10/keygen.c:622 msgid "Email address: " msgstr "Adres poczty elektronicznej: " #: g10/keygen.c:633 msgid "Not a valid email address\n" msgstr "To nie jest poprawny adres poczty elektronicznej\n" #: g10/keygen.c:641 msgid "Comment: " msgstr "Komentarz: " #: g10/keygen.c:647 msgid "Invalid character in comment\n" msgstr "Niewłaściwy znak w komentarzu\n" #: g10/keygen.c:669 #, c-format msgid "You are using the `%s' character set.\n" -msgstr "" +msgstr "Używasz zestawu znaków %s.\n" #: g10/keygen.c:675 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Twój identyfikator użytkownika będzie wyglądał tak:\n" " \"%s\"\n" "\n" #: g10/keygen.c:678 msgid "NnCcEeOoQq" msgstr "IiKkEeDdWw" #: g10/keygen.c:688 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "Zmienić (I)mię/nazwisko, (K)omentarz, adres (E)mail, \n" "przejść (D)alej czy (W)yjść z programu ? " #: g10/keygen.c:740 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Musisz podać wyrażenie przejściowe (hasło) aby ochronić swój klucz tajny.\n" #: g10/keyedit.c:433 g10/keygen.c:748 msgid "passphrase not correctly repeated; try again.\n" msgstr "" "Powtórzone wyrażenie przejściowe nie zgadza się z podanym w pierwszej " "próbie;\n" "spróbuj jeszcze raz.\n" #: g10/keygen.c:754 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "I will do it anyway. You can change your passphrase at any time,\n" "using this program with the option \"--edit-key\".\n" "\n" msgstr "" "Nie chcesz podać wyrażenia przejściowego (hasła) - to zły pomysł!\n" "W każdej chwili możesz ustawić wyrażenie przejściowe używając tego programu\n" "i opcji \"--edit-key\".\n" "\n" #: g10/keygen.c:775 -#, fuzzy msgid "" "We need to generate a lot of random bytes. It is a good idea to perform\n" "some other action (type on the keyboard, move the mouse, utilize the\n" "disks) during the prime generation; this gives the random number\n" "generator a better chance to gain enough entropy.\n" msgstr "" -"Program musi wygenerować dużo losowych bajtów. Dobrze by było, zmusić " -"komputer\n" -"do równoległej pracy nad czymś innym (w innym oknie, wykonać jakieś ruchy\n" -"myszką, użyć sieci albo odwołać się do dysku) podczas generacji liczb\n" -"pierwszych; to daje komputerowi szansę zebrania dostatecznej ilości " -"entropii\n" -"do zasilenia generatora liczb losowych.\n" +"Musimy wygenerować dużo losowych bajtów. Dobrym pomysłem podczas " +"generowania\n" +"liczb pierszych jest wykonanywanie w tym czasie innych działań (pisanie na\n" +"klawiaturzeze, poruszanie myszką, odwołanie się do dysków); dzięki temu\n" +"generator liczb losowych ma możliwość zebrania odpowiedniej ilości " +"entropii.\n" #: g10/keygen.c:845 msgid "Key generation can only be used in interactive mode\n" msgstr "Generację klucza można wykonywać tylko w trybie interaktywnym\n" #: g10/keygen.c:853 msgid "DSA keypair will have 1024 bits.\n" msgstr "Para kluczy dla DSA będzie miała 1024 bity długości.\n" #: g10/keygen.c:859 msgid "Key generation cancelled.\n" msgstr "Procedura generacji klucza została anulowana.\n" #: g10/keygen.c:869 #, c-format msgid "writing public certificate to `%s'\n" msgstr "zapisuję certyfikat publiczny w '%s'\n" #: g10/keygen.c:870 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "zapisuję certyfikat prywatny w '%s'\n" #: g10/keygen.c:947 msgid "public and secret key created and signed.\n" msgstr "Prywatny i publiczny klucz został stworzony i podpisany.\n" #: g10/keygen.c:949 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a secondary key for this purpose.\n" msgstr "" "Ten klucz nie może być wykorzystany do szyfrowania. Komendą \"--edit-key\" \n" "można dodać do niego podklucz używany do szyfrowania.\n" #: g10/keygen.c:963 g10/keygen.c:1062 #, c-format msgid "Key generation failed: %s\n" msgstr "Generacja klucza nie powiodła się: %s\n" #: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:52 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "klucz został stworzony %lu sekundę w przyszłości (zaburzenia\n" "czasoprzestrzeni, lub źle ustawiony zegar systemowy)\n" #: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:54 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "klucz został stworzony %lu sekund w przyszłości (zaburzenia\n" "czasoprzestrzeni, lub źle ustawiony zegar systemowy)\n" #: g10/keygen.c:1040 msgid "Really create? " msgstr "Na pewno generować? " #: g10/encode.c:91 g10/openfile.c:88 g10/openfile.c:176 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: nie mogę otworzyć: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "błąd podczs tworzenia wyrażenia przejściowego (hasła): %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: OSTRZEŻENIE: plik jest pusty\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "odczyt z '%s'\n" #: g10/encode.c:417 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s zaszyfrowany dla: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: nie znaleziono użytkownika %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "błąd przy odczycie certyfikatu: %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominięty\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "OSTRZEŻENIE: nic nie zostało wyeksportowane!\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "zbyt wiele wpisów w buforze kluczy publicznych - wyłączony\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "zbyt wiele wpisów w buforze nieznanych kluczy - wyłączony\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "używany jest podklucz %08lX zamiast klucza głównego %08lX\n" #: g10/import.c:116 -#, fuzzy, c-format +#, c-format msgid "can't open `%s': %s\n" -msgstr "nie mogę otworzyć %s: %s\n" +msgstr "nie można otworzyć %s: %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "pomijam blok typu %d\n" #: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu kluczy przetworzonych do tej chwili\n" #: g10/import.c:172 -#, fuzzy, c-format +#, c-format msgid "error reading `%s': %s\n" -msgstr "błąd odczytu rekordu podpisu: %s\n" +msgstr "błąd odczytu '%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "Ogółem przetworzonych kluczy: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " bez identyfikatora: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " dołączono do zbioru: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " bez zmian: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " nowych identyfikatorów: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " nowych podkluczy: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " nowych podpisów: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr " nowych unieważnień kluczy: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " tajnych kluczy wczytanych: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr " tajnych kluczy dodanych: %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " tajnych kluczy bez zmian: %lu\n" #: g10/import.c:342 g10/import.c:529 #, c-format msgid "key %08lX: no user id\n" msgstr "klucz %08lX: brak identyfikatora użytkownika\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "klucz %08lX: brak poprawnych identyfikatorów użytkownika\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "to może być spowodowane brakiem podpisu właściciela klucza\n" #: g10/import.c:366 g10/import.c:596 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "klucz %08lX: brak klucza publicznego: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "brak domyślnego zbioru kluczy publicznych\n" #: g10/import.c:376 g10/openfile.c:117 g10/sign.c:215 g10/sign.c:501 #, c-format msgid "writing to `%s'\n" msgstr "zapis do '%s'\n" #: g10/import.c:379 g10/import.c:435 -#, fuzzy msgid "can't lock keyring `%': %s\n" -msgstr "nie mogę zablokować zbioru kluczy publicznych: %s\n" +msgstr "nie można zablokować zbioru kluczy publicznych: %s\n" #: g10/import.c:382 -#, fuzzy msgid "error writing keyring `%': %s\n" -msgstr "%s: błąd zapisu numeru wersji: %s\n" +msgstr "błąd zapisu zbioru kluczy '%': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "klucz %08lX: klucz publiczny wczytany do zbioru\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "klucz %08lX: nie zgadza się z lokalnie posiadaną kopią\n" #: g10/import.c:411 g10/import.c:604 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "klucz %08lX: brak oryginalnego bloku klucza; %s\n" #: g10/import.c:417 g10/import.c:610 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "klucz %08lX: nie można odczytać oryginalnego bloku klucza; %s\n" #: g10/import.c:438 g10/import.c:547 g10/import.c:648 -#, fuzzy, c-format +#, c-format msgid "error writing keyring `%s': %s\n" -msgstr "%s: błąd zapisu numeru wersji: %s\n" +msgstr "błąd zapisu zbioru kluczy '%s': %s\n" #: g10/import.c:444 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "klucz %08lX: 1 nowy identyfikator użytkownika\n" #: g10/import.c:447 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "klucz %08lX: %d nowych identyfikatorów użytkownika\n" #: g10/import.c:450 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "klucz %08lX: 1 nowy podpis\n" #: g10/import.c:453 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "klucz %08lX: %d nowych podpisów\n" #: g10/import.c:456 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "klucz %08lX: 1 nowy podklucz\n" #: g10/import.c:459 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "klucz %08lX: %d nowych podkluczy\n" #: g10/import.c:469 #, c-format msgid "key %08lX: not changed\n" msgstr "klucz %08lX: bez zmian\n" #: g10/import.c:544 g10/import.c:645 -#, fuzzy, c-format +#, c-format msgid "can't lock keyring `%s': %s\n" -msgstr "nie mogę zablokować zbioru kluczy publicznych: %s\n" +msgstr "nie można zablokować zbioru kluczy publicznych '%s': %s\n" #: g10/import.c:552 #, c-format msgid "key %08lX: secret key imported\n" msgstr "Klucz %08lX: klucz tajny wczytany do zbioru\n" #. we can't merge secret keys #: g10/import.c:556 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "Klucz %08lX: ten klucz już znajduje się w zbiorze\n" #: g10/import.c:561 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "klucz %08lX: brak klucza tajnego: %s\n" #: g10/import.c:590 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "klucz %08lX: brak klucza publicznego - wczytany certyfikat \n" "uniważnienia nie może być zastosowany\n" #: g10/import.c:621 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "" "klucz %08lX: niepoprawny certyfikat unieważnienia:\n" "%s - odrzucony\n" #: g10/import.c:653 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "klucz %08lX: wczytany certyfikat unieważnienia\n" #: g10/import.c:686 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "klucz %08lX: brak identyfikatora użytkownika do podpisu\n" #: g10/import.c:693 g10/import.c:717 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "" "klucz %08lX: nie obsługiwany algorytm szyfrowania z kluczem publicznym\n" #: g10/import.c:694 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "klucz %08lX: niepoprawny podpis właściciela klucza\n" #: g10/import.c:709 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "klucz %08lX: brak podklucza do dowiązania\n" #: g10/import.c:718 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "klucz %08lX: niepoprawne dowiązanie podklucza\n" #: g10/import.c:750 #, c-format msgid "key %08lX: skipped userid '" msgstr "klucz %08lX: został pominięty identyfikator użytkownika '" #: g10/import.c:773 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "klucz %08lX: podklucz pominięty\n" #. here we violate the rfc a bit by still allowing #. * to import non-exportable signature when we have the #. * the secret key used to create this signature - it #. * seems that this makes sense #: g10/import.c:798 -#, fuzzy, c-format +#, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" -msgstr "" -"klucz %08lX: certyfikat unieważnienia umieszczony w niewłaściwym \n" -"miejscu - został pominięty\n" +msgstr "klucz %08lX: podpis nieeksportowalny (klasa %02x) - pominięty\n" #: g10/import.c:807 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "" "klucz %08lX: certyfikat unieważnienia umieszczony w niewłaściwym \n" "miejscu - został pominięty\n" #: g10/import.c:815 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "klucz %08lX: niepoprawny certyfikat unieważnienia: %s - pominięty\n" #: g10/import.c:915 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" -msgstr "" +msgstr "key %08lX: powtórzony identyfikator użytkownika - dołączony\n" #: g10/import.c:966 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "klucz %08lX: dodany certyfikat unieważnienia\n" #: g10/import.c:1079 g10/import.c:1134 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "klucz %08lX: dostępna kopia nie jest podpisana nią samą\n" #: g10/keyedit.c:91 #, c-format msgid "%s: user not found\n" msgstr "%s: nie znaleziono użytkownika\n" #: g10/keyedit.c:177 msgid "[revocation]" -msgstr "" +msgstr "[unieważnienie]" #: g10/keyedit.c:178 msgid "[self-signature]" msgstr "[podpis klucza nim samym]" #: g10/keyedit.c:196 msgid "1 bad signature\n" msgstr "1 niepoprawny podpis\n" #: g10/keyedit.c:198 #, c-format msgid "%d bad signatures\n" msgstr "%d niepoprawnych podpisów\n" #: g10/keyedit.c:200 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:202 #, 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:204 msgid "1 signature not checked due to an error\n" msgstr "1 podpis nie został sprawdzony z powodu błędu\n" #: g10/keyedit.c:206 #, 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:208 msgid "1 user id without valid self-signature detected\n" msgstr "wykryto 1 identyfikator użytkownika bez podpisu właściciela klucza\n" #: g10/keyedit.c:210 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "" "wykryto %d identyfikatorów użytkownika bez podpisów właściciela klucza\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. #: g10/keyedit.c:290 #, c-format msgid "Already signed by key %08lX\n" msgstr "Już podpisano kluczem %08lX.\n" #: g10/keyedit.c:298 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nie ma nic do podpisania kluczem %08lX.\n" #: g10/keyedit.c:307 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "Czy jesteś naprawdę pewien że chcesz podpisać ten klucz \n" "swoim kluczem: \"" #: g10/keyedit.c:316 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" +"Podpis zostanie oznaczony jako nieeksportowalny.\n" +"\n" #: g10/keyedit.c:321 msgid "Really sign? " msgstr "Na pewno podpisać? " #: g10/keyedit.c:347 g10/keyedit.c:1688 g10/keyedit.c:1737 g10/sign.c:75 #, c-format msgid "signing failed: %s\n" -msgstr "podpisywanie nie powiodło się: %s\n" +msgstr "złożenie podpisu nie powiodło się: %s\n" #: g10/keyedit.c:400 msgid "This key is not protected.\n" msgstr "Ten klucz nie jest chroniony.\n" #: g10/keyedit.c:403 msgid "Key is protected.\n" msgstr "Klucz jest chroniony.\n" #: g10/keyedit.c:420 #, c-format msgid "Can't edit this key: %s\n" msgstr "Tego klucza nie można edytować: %s.\n" #: g10/keyedit.c:425 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Wprowadź nowe wyrażenie przejściowe (hasło) dla tego klucza tajnego.\n" "\n" #: g10/keyedit.c:437 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" -"Nie chcesz podać wyrażenia przejściowego (hasła) - to zły pomysł!\n" +"Nie chcesz podać wyrażenia przejściowego (hasła) - to *zły* pomysł!\n" "\n" #: g10/keyedit.c:440 msgid "Do you really want to do this? " msgstr "Czy na pewno chcesz to zrobić? " #: g10/keyedit.c:501 msgid "moving a key signature to the correct place\n" msgstr "przenoszę podpis klucza na właściwe miejsce\n" #: g10/keyedit.c:537 msgid "quit" msgstr "wyjście" #: g10/keyedit.c:537 msgid "quit this menu" msgstr "wyjście z tego menu" #: g10/keyedit.c:538 msgid "q" msgstr "w" #: g10/keyedit.c:539 msgid "save" msgstr "zapis" #: g10/keyedit.c:539 msgid "save and quit" msgstr "zapis zmian i wyjście" #: g10/keyedit.c:540 msgid "help" msgstr "pomoc" #: g10/keyedit.c:540 msgid "show this help" msgstr "ten tekst pomocy" #: g10/keyedit.c:542 msgid "fpr" msgstr "odc" #: g10/keyedit.c:542 msgid "show fingerprint" msgstr "okazanie odcisku klucza" #: g10/keyedit.c:543 msgid "list" msgstr "lista" #: g10/keyedit.c:543 msgid "list key and user ids" msgstr "lista kluczy i identyfikatorów użytkowników" #: g10/keyedit.c:544 msgid "l" msgstr "l" #: g10/keyedit.c:545 msgid "uid" msgstr "id" #: g10/keyedit.c:545 msgid "select user id N" msgstr "wybór identyfikatora użytkownika N" #: g10/keyedit.c:546 msgid "key" msgstr "klucz" #: g10/keyedit.c:546 msgid "select secondary key N" msgstr "wybór podklucza N" #: g10/keyedit.c:547 msgid "check" msgstr "lista" #: g10/keyedit.c:547 msgid "list signatures" msgstr "lista podpisów" #: g10/keyedit.c:548 msgid "c" msgstr "l" #: g10/keyedit.c:549 msgid "sign" msgstr "podpis" #: g10/keyedit.c:549 msgid "sign the key" msgstr "złożenie podpisu na kluczu" #: g10/keyedit.c:550 msgid "s" msgstr "p" #: g10/keyedit.c:551 -#, fuzzy msgid "lsign" -msgstr "podpis" +msgstr "lpodpis" #: g10/keyedit.c:551 -#, fuzzy msgid "sign the key locally" -msgstr "złożenie podpisu na kluczu" +msgstr "złożenie lokalnego podpisu na kluczu" #: g10/keyedit.c:552 msgid "debug" msgstr "śledzenia" #: g10/keyedit.c:553 msgid "adduid" msgstr "dodid" #: g10/keyedit.c:553 msgid "add a user id" msgstr "dodanie nowego identyfikatora użytkownika do klucza" #: g10/keyedit.c:554 msgid "deluid" msgstr "usid" #: g10/keyedit.c:554 msgid "delete user id" msgstr "usunięcie identyfikatora użytkownika z klucza" #: g10/keyedit.c:555 msgid "addkey" msgstr "dodkl" #: g10/keyedit.c:555 msgid "add a secondary key" msgstr "dodanie podklucza" #: g10/keyedit.c:556 msgid "delkey" msgstr "uskl" #: g10/keyedit.c:556 msgid "delete a secondary key" msgstr "usunięcie podklucza" #: g10/keyedit.c:557 msgid "expire" msgstr "data" #: g10/keyedit.c:557 msgid "change the expire date" msgstr "zmiana daty ważności klucza" #: g10/keyedit.c:558 msgid "toggle" msgstr "przeł" #: g10/keyedit.c:558 msgid "toggle between secret and public key listing" msgstr "przełączenie pomiędzy listą kluczy publicznych i tajnych" #: g10/keyedit.c:560 msgid "t" msgstr "p" #: g10/keyedit.c:561 msgid "pref" msgstr "opcje" #: g10/keyedit.c:561 msgid "list preferences" msgstr "lista opcji" #: g10/keyedit.c:562 msgid "passwd" msgstr "hasło" #: g10/keyedit.c:562 msgid "change the passphrase" msgstr "zmiana wyrażenia przejściowego (hasła)" #: g10/keyedit.c:563 msgid "trust" msgstr "zaufanie" #: g10/keyedit.c:563 msgid "change the ownertrust" msgstr "zmiana zaufania właściciela" #: g10/keyedit.c:564 -#, fuzzy msgid "revsig" -msgstr "podpis" +msgstr "unpod" #: g10/keyedit.c:564 -#, fuzzy msgid "revoke signatures" -msgstr "wymuszenie trzeciej wersji formatu podpisów" +msgstr "unieważnienie podpisu" #: g10/keyedit.c:565 -#, fuzzy msgid "revkey" -msgstr "klucz" +msgstr "unpkl" #: g10/keyedit.c:565 -#, fuzzy msgid "revoke a secondary key" -msgstr "usunięcie podklucza" +msgstr "unieważnienie podklucza" #: g10/keyedit.c:584 msgid "can't do that in batchmode\n" -msgstr "operacja niemożliwa do wykonania w trybie wsadowym\n" +msgstr "nie działa w trybie wsadowym\n" #. check that they match #. FIXME: check that they both match #: g10/keyedit.c:613 msgid "Secret key is available.\n" msgstr "Dostępny jest klucz tajny.\n" #: g10/keyedit.c:642 msgid "Command> " msgstr "Polecenie> " #: g10/keyedit.c:669 msgid "Need the secret key to do this.\n" msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n" #: g10/keyedit.c:691 msgid "Save changes? " msgstr "Zapisać zmiany? " #: g10/keyedit.c:694 msgid "Quit without saving? " msgstr "Wyjść bez zapisania zmian? " #: g10/keyedit.c:704 #, c-format msgid "update failed: %s\n" msgstr "naniesienie poprawek nie powiodło się: %s\n" #: g10/keyedit.c:711 #, c-format msgid "update secret failed: %s\n" msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n" #: g10/keyedit.c:718 msgid "Key not changed so no update needed.\n" msgstr "" "Klucz nie został zmieniony więc nanoszenie poprawek nie jest konieczne.\n" #: g10/keyedit.c:721 g10/keyedit.c:780 #, c-format msgid "update of trustdb failed: %s\n" msgstr "naniesienie poprawek bazy zaufania nie powiodło się: %s\n" #: g10/keyedit.c:754 msgid "Really sign all user ids? " msgstr "Podpisać wszystkie identyfikatory użytkownika na tym kluczu? " #: g10/keyedit.c:755 msgid "Hint: Select the user ids to sign\n" msgstr "Podpowiedź: wybierz identyfikatory użytkownika do podpisania.\n" #: g10/keyedit.c:791 msgid "You must select at least one user id.\n" msgstr "Musisz wybrać co najmniej jeden identyfikator użytkownika.\n" #: g10/keyedit.c:793 msgid "You can't delete the last user id!\n" msgstr "Nie możesz usunąć ostatniego identyfikatora użytkownika!\n" #: g10/keyedit.c:796 msgid "Really remove all selected user ids? " msgstr "Czy na pewno usunąć wszystkie wybrane identyfikatory użytkownika? " #: g10/keyedit.c:797 msgid "Really remove this user id? " msgstr "Czy na pewno usunąć ten identyfikator użytkownika? " #: g10/keyedit.c:820 g10/keyedit.c:842 msgid "You must select at least one key.\n" msgstr "Musisz wybrać co najmniej jeden klucz.\n" #: g10/keyedit.c:824 msgid "Do you really want to delete the selected keys? " msgstr "Czy na pewno chcesz usunąć wybrane klucze? " #: g10/keyedit.c:825 msgid "Do you really want to delete this key? " msgstr "Czy na pewno chcesz usunąć ten klucz? " #: g10/keyedit.c:846 -#, fuzzy msgid "Do you really want to revoke the selected keys? " -msgstr "Czy na pewno chcesz usunąć wybrane klucze? " +msgstr "Czy na pewno chcesz unieważnić wybrane klucze? " #: g10/keyedit.c:847 -#, fuzzy msgid "Do you really want to revoke this key? " -msgstr "Czy na pewno chcesz usunąć ten klucz? " +msgstr "Czy na pewno chcesz unieważnić ten klucz? " #: g10/keyedit.c:901 msgid "Invalid command (try \"help\")\n" msgstr "Niepoprawna komenda (spróbuj \"help\")\n" #: g10/keyedit.c:1293 msgid "Please remove selections from the secret keys.\n" msgstr "Proszę usunąć znacznik wyboru z kluczy tajnych.\n" #: g10/keyedit.c:1299 msgid "Please select at most one secondary key.\n" msgstr "Proszę wybrać najwyżej jeden podklucz.\n" #: g10/keyedit.c:1303 msgid "Changing exiration time for a secondary key.\n" msgstr "Zmiana daty ważności podklucza.\n" #: g10/keyedit.c:1305 msgid "Changing exiration time for the primary key.\n" msgstr "Zmiana daty ważności głównego klucza.\n" #: g10/keyedit.c:1346 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:1362 msgid "No corresponding signature in secret ring\n" msgstr "Brak odpowiadającego podpisu w zbiorze kluczy tajnych\n" #: g10/keyedit.c:1422 #, c-format msgid "No user id with index %d\n" msgstr "Brak identyfikatora użytkownika o numerze %d.\n" #: g10/keyedit.c:1468 #, c-format msgid "No secondary key with index %d\n" msgstr "Brak podklucza o indeksie %d\n" #: g10/keyedit.c:1566 -#, fuzzy msgid "user ID: \"" -msgstr "Wprowadź identyfikator użytkownika (user ID): " +msgstr "Identyfikator użytkownika: " #: g10/keyedit.c:1569 -#, fuzzy, c-format +#, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" -msgstr "Nie ma nic do podpisania kluczem %08lX.\n" +msgstr "" +"\"\n" +"podpisano Twoim kluczem %08lX w %s\n" #: g10/keyedit.c:1573 -#, fuzzy msgid "Create a revocation certificate for this signature? (y/N)" -msgstr "generacja certyfikatu unieważnienia klucza" +msgstr "Stworzyć certyfikat unieważnienia tego podpisu? (t/N)" #: g10/keyedit.c:1653 -#, fuzzy msgid "Really create the revocation certificates? (y/N)" -msgstr "generacja certyfikatu unieważnienia klucza" +msgstr "Na pewno utworzyć certyfikaty unieważnienia ? (t/N)" #: g10/keyedit.c:1676 -#, fuzzy msgid "no secret key\n" -msgstr "niepoprawny klucz prywatny" +msgstr "brak klucza prywatnego\n" #: g10/mainproc.c:184 -#, fuzzy, c-format +#, c-format msgid "public key is %08lX\n" -msgstr "klucz publiczny nie odnaleziony" +msgstr "klucz publiczny %08lX\n" #: g10/mainproc.c:212 msgid "public key encrypted data: good DEK\n" msgstr "dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information #: g10/mainproc.c:219 #, c-format msgid "public key decryption failed: %s\n" msgstr "błąd odszyfrowywania kluczem publicznym: %s\n" #: g10/mainproc.c:247 msgid "decryption okay\n" msgstr "odszyfrowane poprawnie\n" #: g10/mainproc.c:252 msgid "WARNING: encrypted message has been manipulated!\n" -msgstr "" +msgstr "OSTRZEŻENIE: zaszyfrowana wiadomość była manipulowana!\n" #: g10/mainproc.c:257 #, c-format msgid "decryption failed: %s\n" msgstr "błąd odszyfrowywania: %s\n" #: g10/mainproc.c:275 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "UWAGA: nadawca zaznaczył że wiadomość nie powinna być zapisywana\n" #: g10/mainproc.c:277 #, c-format msgid "original file name='%.*s'\n" msgstr "pierwotna nazwa pliku='%.*s'\n" #: g10/mainproc.c:890 msgid "signature verification suppressed\n" msgstr "wymuszono pominięcie sprawdzenia podpisu\n" #: g10/mainproc.c:896 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "" "Podpis złożony %.*s za pomocą %s,\n" "z użyciem klucza o identyfikatorze %08lX\n" #. just in case that we have no userid #: g10/mainproc.c:922 g10/mainproc.c:933 msgid "BAD signature from \"" msgstr "NIEPOPRAWNY podpis złożony przez \"" #: g10/mainproc.c:923 g10/mainproc.c:934 msgid "Good signature from \"" msgstr "Poprawny podpis złożony przez \"" #: g10/mainproc.c:925 -#, fuzzy msgid " aka \"" -msgstr " dołączono do zbioru: %lu" +msgstr " alias \"" #: g10/mainproc.c:975 #, c-format msgid "Can't check signature: %s\n" msgstr "Nie mogę sprawdzić podpisu: %s\n" #: g10/mainproc.c:1056 msgid "old style (PGP 2.x) signature\n" msgstr "podpis starego typu (PGP 2.x)\n" #: g10/mainproc.c:1061 msgid "invalid root packet detected in proc_tree()\n" msgstr "wykryto niepoprawny pakiet pierwotny w proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nie można wyłączyć zrzucania pamięci: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "OSTRZEŻENIE: program może stworzyć plik zrzutu pamięci!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Nie należy używać algorytmów doświadczalnych!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Klucze RSA są odradzane; proszę rozważyć przejście na inne algorytmy po\n" "wygenerowaniu odpowiednich kluczy.\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "ten algorytm szyfrujący jest odradzanym proszę używać bardziej " "standardowych!\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "algorytm klucza publicznego niemożliwy do obsłużenia: %d\n" #: g10/parse-packet.c:872 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "podpakiet typu %d ma ustawiony krytyczny bit\n" #: g10/passphrase.c:157 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Musisz podać wyrażenie przejściowe (hasło) aby uaktywnić klucz tajny\n" "dla użytkownika: \"" #: g10/passphrase.c:166 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "długość %u bitów, typ %s, klucz %08lX, stworzony %s" #: g10/passphrase.c:171 #, c-format msgid " (main key ID %08lX)" msgstr " (główny ID klucza %08lX)" #: g10/passphrase.c:190 msgid "Enter passphrase: " msgstr "Wyrażenie przejściowe: " #: g10/passphrase.c:194 msgid "Repeat passphrase: " msgstr "Powtórzone wyrażenie przejściowe: " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "dane nie zostały zapisane; należy użyć opcji \"--output\" aby je zapisać\n" #: g10/plaintext.c:208 msgid "Please enter name of data file: " msgstr "Nazwa pliku danych: " #: g10/plaintext.c:229 msgid "reading stdin ...\n" msgstr "czytam strumień standardowego wejścia\n" #: g10/plaintext.c:302 #, c-format msgid "can't open signed data `%s'\n" msgstr "nie można otworzyć podpisanego pliku '%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "adresat anonimowy; próbuję klucz tajny %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "OK, to my jesteśmy adresatem anonimowym.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "stary, nie obsługiwany algorytm szyfrowania klucza sesyjnego\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "UWAGA: brak algorytmu szyfrującego %d w ustawieniach\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "%d - algorytm ochrony nie obsługiwany\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "" "Niepoprawne wyrażenie przejściowe (hasło); proszę spróbować ponownie ...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "Ostrzeżenie: Wykryto klucz słaby algorytmu - należy ponownie zmienić \n" "wyrażenie przejściowe (hasło).\n" #: g10/sig-check.c:187 -#, fuzzy msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "" -"przyjęto nieważność podpisu z powonu ustawienia nieznanego bitu krytycznego\n" +"przyjęto niepoprawność MDC z powonu ustawienia nieznanego bitu krytycznego\n" #: g10/sig-check.c:283 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Klucz algorytmu ElGamala wygenerowany przez PGP - podpisy nim składane\n" "nie zapewniają bezpieczeństwa!\n" #: g10/sig-check.c:291 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "klucz publiczny jest o %lu sekund młodszy od podpisu\n" #: g10/sig-check.c:292 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "klucz publiczny jest o %lu sekund młodszy od podpisu\n" #: g10/sig-check.c:308 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "UWAGA: klucz podpisujący przekroczył datę ważności %s\n" #: g10/sig-check.c:365 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "przyjęto nieważność podpisu z powonu ustawienia nieznanego bitu krytycznego\n" #: g10/sign.c:79 #, c-format msgid "%s signature from: %s\n" msgstr "%s podpis złożony przez: %s\n" #: g10/sign.c:210 g10/sign.c:496 #, c-format msgid "can't create %s: %s\n" msgstr "nie mogę stworzyć %s: %s\n" #: g10/sign.c:306 msgid "signing:" msgstr "podpis:" #: g10/sign.c:346 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "OSTRZEŻENIE: plik '%s' jest pusty\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "nie mogę obsłużyć linii tekstu dłuższej niż %d znaków\n" #: g10/textfilter.c:197 -#, fuzzy, c-format +#, c-format msgid "input line longer than %d characters\n" -msgstr "błąd opakowania: linia dłuższa niż %d znaków\n" +msgstr "linia dłuższa niż %d znaków\n" #: g10/tdbio.c:116 g10/tdbio.c:1505 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "baza zaufania, wpis %lu: lseek() nie powiodła się: %s\n" #: g10/tdbio.c:122 g10/tdbio.c:1512 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "baza zaufania, wpis %lu: zapis nie powiódł się (n=%d): %s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "zbyt duże zlecenie dla bazy zaufania\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: dostęp niemożliwy: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: nie mogę utworzyć katalogu: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: katalog utworzony\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: katalog nie istnieje!\n" #: g10/openfile.c:113 g10/openfile.c:183 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: nie mogę utworzyć: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 -#, fuzzy, c-format +#, c-format msgid "%s: can't create lock\n" -msgstr "%s: nie mogę utworzyć: %s\n" +msgstr "%s: nie mogę utworzyć blokady\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: stworzenie zapisu o wersji nie powiodło się: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: stworzony niepoprawny plik bazy zaufania\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: baza zaufania utworzona\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: niepoprawny plik bazy zaufania\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: tworzenie tablicy skrótów nie powiodło się: %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: błąd przy uaktualnianiu numeru wersji: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 #: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: błąd odczytu numeru wersji: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: błąd zapisu numeru wersji: %s\n" #: g10/tdbio.c:1132 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "baza zaufania: procedura lseek() zawiodła: %s\n" #: g10/tdbio.c:1140 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "baza zaufania: procedura read() (n=%d) zawiodła: %s\n" #: g10/tdbio.c:1161 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: to nie jest plik bazy zaufania\n" #: g10/tdbio.c:1177 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: wpis wersji z numerem %lu\n" #: g10/tdbio.c:1182 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: niewłaściwa wersja pliku %d\n" #: g10/tdbio.c:1471 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: błąd odczytu pustego wpisu: %s\n" #: g10/tdbio.c:1479 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: błąd zapisu wpisu katalogowego: %s\n" #: g10/tdbio.c:1489 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: zerowanie rekordu nie powiodło się: %s\n" #: g10/tdbio.c:1519 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: dopisanie rekordu nie powiodło się: %s\n" #: g10/tdbio.c:1630 msgid "The trustdb is corrupted; please run \"gpgm --fix-trustdb\".\n" msgstr "" "Baza zaufania jest uszkodzona; proszę uruchomić \"gpgm --fix-trust-db\".\n" #: g10/trustdb.c:163 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "wpis zaufania %lu, typ zapytania %d: odczyt nie powiódł się: %s\n" #: g10/trustdb.c:178 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "wpis zaufania %lu, typ zapytania %d: zapis nie powiódł się: %s\n" #: g10/trustdb.c:192 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "wpis zaufania %lu: usunięcie nie powiodło się %s\n" #: g10/trustdb.c:206 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "baza zaufania: synchronizacja nie powiodła się %s\n" #: g10/trustdb.c:386 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "błąd odczytu wpisu katalogowego dla LID %lu: %s\n" #: g10/trustdb.c:393 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: oczekiwany wpis katalogowy, napotkano typ %d\n" #: g10/trustdb.c:398 #, c-format msgid "no primary key for LID %lu\n" msgstr "brak klucza głównego dla LID %lu\n" #: g10/trustdb.c:403 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "błąd odczytu głównego klucza dla LID %lu: %s\n" #: g10/trustdb.c:442 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: funkcja search_record zawiodła: %s\n" #: g10/trustdb.c:510 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "UWAGA: klucz tajny %08lX NIE jest chroniony.\n" #: g10/trustdb.c:518 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "klucz %08lX: klucz tajny bez klucza jawnego - pominięty\n" #: g10/trustdb.c:525 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "klucz %08lX: klucz tajny nie pasuje do klucza jawnego\n" #: g10/trustdb.c:535 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "klucz %08lX: wpisanie do bazy zaufania niemożliwe\n" #: g10/trustdb.c:541 #, c-format msgid "key %08lX: query record failed\n" msgstr "klucz %08lX: wyszukanie zapisu nie powiodło się\n" #: g10/trustdb.c:550 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "klucz %08lX: już znajduje się w tablicy kluczy zaufanych\n" #: g10/trustdb.c:553 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "Klucz %08lX: zaakceptowany jako klucz zaufany.\n" #: g10/trustdb.c:561 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "wyliczenie kluczy tajnych nie powiodło się %s\n" #: g10/trustdb.c:851 #, c-format msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" msgstr "" "UWAGA: wpis podpisu %lu[%d] znajduje się w liście domyślnej %lu,\n" "ale jest zaznaczony jako sprawdzony.\n" #: g10/trustdb.c:855 #, c-format msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" msgstr "" "UWAGA: wpis podpisu %lu[%d] znajduje się w liście domyślnej %lu,\n" "ale nie jest zaznaczony.\n" #. we need the dir record #: g10/trustdb.c:862 #, c-format msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" msgstr "" "wpis oi podpisie %lu[%d] w liście domyślnej %lu nie wskazuje \n" "na wpis katalogowy\n" #: g10/trustdb.c:868 #, c-format msgid "lid %lu: no primary key\n" msgstr "lid %lu: brak klucza głównego\n" #: g10/trustdb.c:901 #, c-format msgid "lid %lu: user id not found in keyblock\n" msgstr "" "lid %lu: identyfikator użytkownika nie został odnaleziony w bloku klucza\n" #: g10/trustdb.c:905 #, c-format msgid "lid %lu: user id without signature\n" msgstr "lid %lu: niepodpisany identyfikator użytkownika\n" #: g10/trustdb.c:912 #, c-format msgid "lid %lu: self-signature in hintlist\n" msgstr "lid %lu: podpis klucza nim samym w liście domyślnej\n" #: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 msgid "Valid certificate revocation" msgstr "Poprawne unieważnienie certyfikatu" #: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 msgid "Good certificate" msgstr "Poprawny certyfikat" #: g10/trustdb.c:933 msgid "very strange: no public key\n" msgstr "bardzo dziwne: brak klucza publicznego\n" #: g10/trustdb.c:982 #, c-format msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" msgstr "lista domyślna %lu[%d] z %lu nie wskazuje na wpis katalogowy\n" #: g10/trustdb.c:988 #, c-format msgid "lid %lu does not have a key\n" msgstr "lid %lu nie ma klucza\n" #: g10/trustdb.c:998 #, c-format msgid "lid %lu: can't get keyblock: %s\n" msgstr "lid %lu: pobranie bloku klucza niemożliwe: %s\n" #: g10/trustdb.c:1055 g10/trustdb.c:2030 #, c-format msgid "tdbio_search_dir failed: %s\n" msgstr "Procedura tdbio_search_dir nie powiodła się: %s\n" #: g10/trustdb.c:1210 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "klucz %08lX.%lu Dobre dowiązanie podklucza\n" #: g10/trustdb.c:1216 g10/trustdb.c:1259 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "klucz %08lX.%lu: Niepoprawne dowiązanie podklucza %s\n" #: g10/trustdb.c:1232 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "klucz %08lX.%lu: Poprawne unieważnienie klucza\n" #: g10/trustdb.c:1238 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "klucz %08lX.%lu: Niewłaściwe unieważnienie klucza: %s\n" #: g10/trustdb.c:1253 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "klucz %08lX.%lu: Poprawne unieważnienie podklucza\n" #: g10/trustdb.c:1360 msgid "Good self-signature" msgstr "Poprawny podpis klucza nim samym" #: g10/trustdb.c:1371 msgid "Invalid self-signature" msgstr "Niepoprawny podpis klucza nim samym" #: g10/trustdb.c:1403 msgid "Valid user ID revocation skipped due to a newer self signature\n" msgstr "" "Poprawne unieważnienie identyfikatora użytkownika pominięte z powodu \n" "nowszego podpisu tym samym kluczem\n" #: g10/trustdb.c:1410 msgid "Valid user ID revocation\n" msgstr "Poprawne unieważnienie identyfikatora użytkownika\n" #: g10/trustdb.c:1417 msgid "Invalid user ID revocation" msgstr "Niepoprawne unieważnienie identyfikatora użytkownika" #: g10/trustdb.c:1512 msgid "Too many preferences" msgstr "Zbyt wiele ustawień." #: g10/trustdb.c:1526 msgid "Too many preference items" msgstr "Zbyt wiele pozycji w ustawieniach" #: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 msgid "WARNING: can't yet handle long pref records\n" msgstr "OSTRZEŻENIE: długie wpisy ustawień jeszcze nie są obsługiwane.\n" #: g10/trustdb.c:1654 -#, fuzzy msgid "duplicated certificate - deleted" -msgstr "Podwójna kopia certyfikatu - usunięta" +msgstr "podwójny certyfikat - usunięty" #: g10/trustdb.c:1692 -#, fuzzy msgid "public key not anymore available" -msgstr "klucz tajny jest niedostępny" +msgstr "klucz publiczny jest już niedostępny" #: g10/trustdb.c:1702 g10/trustdb.c:1791 msgid "Invalid certificate revocation" msgstr "Niepoprawne unieważnienie certyfikatu" #: g10/trustdb.c:1703 g10/trustdb.c:1792 msgid "Invalid certificate" msgstr "Niepoprawny certyfikat" #: g10/trustdb.c:1720 #, c-format msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" msgstr "" "identyfikator %08lX.%lu/%02X%02X: ma zdublowany katalog %lu,\n" "ale nie jest jeszcze zaznaczony.\n" #: g10/trustdb.c:1734 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "zapis o podpisach %lu[%d] wskazuje na zły wpis.\n" #. that should never happen #: g10/trustdb.c:2007 #, c-format msgid "insert_trust_record: keyblock not found: %s\n" msgstr "insert_trust_record: brak bloku klucza: %s\n" #: g10/trustdb.c:2408 msgid "Ooops, no keys\n" msgstr "Oops, brak kluczy\n" #: g10/trustdb.c:2412 msgid "Ooops, no user ids\n" msgstr "Oops, brak identyfikatorów użytkowników\n" #: g10/trustdb.c:2529 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: wpisanie nie powiodło się: %s\n" #: g10/trustdb.c:2534 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: wpisanie nie powiodło się: %s\n" #: g10/trustdb.c:2540 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: wpisany\n" #: g10/trustdb.c:2545 g10/trustdb.c:2654 #, c-format msgid "lid %lu: update failed: %s\n" msgstr "lid %lu: naniesienie poprawek nie powiodło się: %s\n" #: g10/trustdb.c:2551 g10/trustdb.c:2660 #, c-format msgid "lid %lu: updated\n" msgstr "lid %lu: uaktualniony\n" #: g10/trustdb.c:2556 g10/trustdb.c:2664 #, c-format msgid "lid %lu: okay\n" msgstr "lid %lu: OK\n" #: g10/trustdb.c:2562 g10/trustdb.c:2671 #, c-format msgid "%lu keys processed\n" msgstr "%lu kluczy przetworzonych\n" #: g10/trustdb.c:2564 g10/trustdb.c:2675 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu kluczy z błędami\n" #: g10/trustdb.c:2566 g10/trustdb.c:2677 #, c-format msgid "\t%lu keys updated\n" msgstr "\t%lu kluczy uaktualnionych\n" #: g10/trustdb.c:2568 #, c-format msgid "\t%lu keys inserted\n" -msgstr " %lu kluczy wpisanych\n" +msgstr "\t%lu kluczy wpisanych\n" #: g10/trustdb.c:2571 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "wyliczenie bloków kluczy nie powiodło się: %s\n" #: g10/trustdb.c:2598 #, c-format msgid "%s: keyblock read problem: %s\n" msgstr "%s: problem przy odczycie bloku klucza: %s\n" #: g10/trustdb.c:2612 #, c-format msgid "%s: update failed: %s\n" msgstr "%s: zapis zmian nie powiodł się: %s\n" #: g10/trustdb.c:2615 #, c-format msgid "%s: updated\n" msgstr "%s: uaktualniony\n" #: g10/trustdb.c:2617 #, c-format msgid "%s: okay\n" msgstr "%s: OK\n" #: g10/trustdb.c:2632 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: wpis katalogowy bez bloku klucza - pominięty\n" #: g10/trustdb.c:2645 #, c-format msgid "lid %lu: keyblock not found: %s\n" msgstr "lid %lu: blok klucza nie został odnaleziony: %s\n" #: g10/trustdb.c:2673 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu kluczy pominiętych\n" #: g10/trustdb.c:2743 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: poszukiwanie wpisu katalogowego nie powiodło się: %s\n" #: g10/trustdb.c:2750 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n" #: g10/trustdb.c:2754 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "Klucz %08lX.%lu: wprowadzony do bazy zaufania\n" #: g10/trustdb.c:2762 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "Klucz %08lX.%lu: stworzony w przyszłości (zaburzenia czasoprzestrzeni,\n" "lub źle ustawiony zegar systemowy)\n" #: g10/trustdb.c:2769 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "klucz %08lX.%lu: okres ważności upłynął %s\n" #: g10/trustdb.c:2777 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "klucz %08lX.%lu: błąd przy sprawdzaniu zaufania: %s\n" #: g10/trustdb.c:2881 #, c-format msgid "user '%s' not found: %s\n" msgstr "użytkownik '%s' nie odnaleziony: %s\n" #: g10/trustdb.c:2883 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "problem podczas szukania '%s' w bazie zaufania: %s\n" #: g10/trustdb.c:2886 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "brak użytkownika '%s' w bazie zaufania - dodano\n" #: g10/trustdb.c:2889 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "umieszczenie '%s' w Bazie Zaufania nie powiodło się: %s\n" #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: stworzenie zbioru kluczy jest niemożliwe: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: zbiór kluczy utworzony\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "OSTRZEŻENIE: Istnieją dwa pliki z poufnymi informacjami.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s pozostał bez zmian\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s został utworzony\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "Proszę usunąć to naruszenie zasad bezpieczeństwa\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "klucz nie jest oznaczony jako niepewny - nie można go użyć z atrapą \n" "generatora liczb losowych!\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "pominięty '%s': %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "pominięty '%s': wygenerowany przez PGP klucz dla algorytmu ElGamala,\n" "podpisy składane tym kluczem nie zapewniają bezpieczeństwa!\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Plik '%s' już istnieje. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "Nadpisać (t/N)? " #: g10/openfile.c:92 msgid "writing to stdout\n" msgstr "zapisywanie na wyjście standardowe\n" #: g10/openfile.c:149 #, c-format msgid "assuming signed data in `%s'\n" msgstr "przyjęto obecność podpisanych danych w '%s'\n" #: g10/openfile.c:199 #, c-format msgid "%s: new options file created\n" msgstr "%s: stworzono nowy plik ustawień\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "%s zaszyfrowane dane\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "zaszyfrowane nieznanym algorytmem %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" -"OSTRZEŻENIE: Informacje były szyfrowane słabym kluczem szyfru " -"symetrycznego.\n" +"OSTRZEŻENIE: wiadomość była szyfrowana słabym kluczem szyfru symetrycznego.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "wygenerowano słaby klucz - operacja zostaje powtórzona\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "brak możliwości generacji dobrego klucza dla szyfru symetrycznego;\n" "operacja była powtarzana %d razy!\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" "Przypisanie tych wartości należy do Ciebie, nie będą one udostępnione\n" "nikomu innemu. Są one używane do stworzenia sieci zaufania i nie ma\n" "to nic wspólnego z tworzoną siecią certyfikatów." #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" "Jeśli mimo wszystko chcesz użyć tego unieważnionego klucza, odpowiedz " "\"tak\"." #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" "Jeśli mimo wszystko chcesz użyć tego klucza, klucza do którego nie masz\n" "zaufania, odpowiedz \"tak\"." #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "Podaj identyfikator użytkownika adresata tych informacji." #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" -"Wybór algorytmu.\n" +"Wybór algorytmu:\n" "DSA (znany też jako DSS) to Algorytm Podpisu Cyfrowego - używać go można " "tylko\n" "do tworzenia cyfrowych podpisów. Jego wybór jest sugerowany ponieważ\n" "sprawdzanie podpisów złożonych algorytmem DSA jest dużo szybsze niż tych\n" "złożonych algorytmem ElGamala.\n" "Algorytm ElGamala to algorytm klucza publicznego który nadaje można " "stosować\n" "zarówno do szyfrowania jak i do tworzenia podpisów cyfrowych\n" "W standardzie OpenPGP algorytm ElGamala występuje w dwóch wersjach:\n" "obsługującej podpisywanie, oraz obsługującej podpisywanie i szyfrowanie; z\n" "technicznego punktu widzenia algorytm działa tak samo, ale pewne " "współczynniki\n" "muszą być dobrane tak aby klucz nadawał się do składania bezpiecznych\n" "podpisów. Ten program obsługuje obie wersje, ale inne implementacje OpenPGP\n" "nie muszą rozumieć obsługiwać klucza przeznaczonego jednocześnie do\n" "podpisywania i szyfrowania.\n" "Główny klucz musi być zawsze kluczem służącym umożliwiającym podpisywanie,\n" "dlatego też ten program nie obsługuje osobnych kluczy ElGamala służących " "tylko\n" "do szyfrowania." #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" "Mimo że ten rodzaj kluczy jest zdefiniowany w RFC 2440, wybór takiego " "klucza\n" "nie jest sugerowany. Nie wszystkie programy taki klucz są w stanie " "obsłużyć,\n" "a podpisy złożone za jego pomocą są duże i ich sprawdzenie zajmuje dużo " "czasu." #: g10/helptext.c:89 msgid "keygen.size" msgstr "Rozmiar klucza" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "Podaj żądaną wartość" #: g10/helptext.c:107 msgid "keygen.valid.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:112 msgid "keygen.name" msgstr "Podaj nazwę (imię, nazwisko) właściciela klucza" #: g10/helptext.c:117 msgid "keygen.email" msgstr "Adres e-mail (opcjonalny ale warto go wpisać)" #: g10/helptext.c:121 msgid "keygen.comment" msgstr "Komentarz (opcjonalny)" #: g10/helptext.c:126 msgid "keygen.userid.cmd" msgstr "" "I - zmiana imienia lub nazwiska.\n" "K - zmiana komentarza.\n" "E - zmiana adresu email.\n" "D - przejście do właściwej generacji klucza.\n" "W - wyjście z procedury generacji i z programu." #: g10/helptext.c:135 msgid "keygen.sub.okay" msgstr "" "Odpowiedz \"tak\" (lub po prostu \"t\") jeśli zgadzasz się na stworzenie " "podklucza." #: g10/helptext.c:139 msgid "sign_uid.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:144 msgid "change_passwd.empty.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:149 msgid "keyedit.cmd" msgstr "Podaj \"help\" aby zobaczyć listę poleceń." #: g10/helptext.c:153 msgid "keyedit.save.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:158 msgid "keyedit.cancel.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:162 msgid "keyedit.sign_all.okay" msgstr "" "Odpowiedz \"tak\" jeśli chcesz podpisać wszystkie identyfikatory klucza" #: g10/helptext.c:166 msgid "keyedit.remove.uid.okay" msgstr "" "Odpowiedz \"tak\" jeśli na pewno chcesz skasować ten identyfikator klucza.\n" "Utracisz wszystkie podpisy innych użytkowników złożone na tym " "identyfikatorze!" #: g10/helptext.c:171 msgid "keyedit.remove.subkey.okay" msgstr "Odpowiedz \"tak\" jeśli na pewno chcesz skasować ten podklucz" #: g10/helptext.c:175 msgid "passphrase.enter" msgstr "" "Proszę wprowadzić wyrażenie przejściowe (tajne zdanie)\n" " Bla, bla, bla ..." #: g10/helptext.c:182 msgid "passphrase.repeat" msgstr "" "Proszę powtórzyć podane wyrażenie przejściowe dla wyeliminowania pomyłek." #: g10/helptext.c:186 msgid "detached_signature.filename" msgstr "Nazwa pliku którego dotyczy ten podpis" #: g10/helptext.c:190 msgid "openfile.overwrite.okay" msgstr "Odpowiedz \"tak\" jeśli na pewno chcesz nadpisać ten plik" #: g10/helptext.c:204 msgid "No help available" msgstr "Pomoc niedostępna" #: g10/helptext.c:216 #, c-format msgid "No help available for `%s'" msgstr "Brak pomocy o '%s'" #~ msgid "can't open file: %s\n" #~ msgstr "nie można otworzyć pliku: %s\n" #~ msgid "read error: %s\n" #~ msgstr "błąd odczytu: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "niemożliwy jest zapis do zbioru kluczy: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "zapisuję blok klucza\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "nie mogę zapisać bloku klucza: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "nie mogę zablokować zbioru kluczy tajnych: %s\n" #~ msgid "can't write keyring: %s\n" #~ msgstr "niemożliwy jest zapis zbioru kluczy: %s\n" -#, fuzzy #~ msgid "encrypted message is valid\n" -#~ msgstr "wybrany algorytm geenracji skrótów wiadomości jest niepoprawny\n" +#~ msgstr "zaszyfrowana wiadomość jest poprawna\n" -#, fuzzy #~ msgid "Can't check MDC: %s\n" -#~ msgstr "Nie mogę sprawdzić podpisu: %s\n" +#~ msgstr "Sprawdzenie MDC niemożliwe: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" -#~ msgstr "Sposób użycia: gpgm [opcje] [pliki] (-h podaje pomoc)" +#~ msgstr "Wywołanie: gpgm [opcje] [pliki] (-h podaje pomoc)" #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "Składnia: gpgm [opcje] [pliki]\n" #~ "GnuPG program obsługujący\n" #~ msgid "usage: gpgm [options] " #~ msgstr "sposób użycia: gpgm [opcje]" #~ msgid "|KEYID|ulimately trust this key" #~ msgstr "|KLUCZ|całkowite zaufanie dla tego klucza" #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "powiązany rekord podpisu %lu ma niewłaściwego właściciela\n" #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "'%s\" nie jest właściwym identyfikatorem klucza\n" #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "" #~ "klucz %08lX: brak klucza publicznego dla klucza zaufanego - pominięty\n" #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu katalogowego nie powiódł się: %s\n" #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu klucza nie powiódł się: %s\n" #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu z identyfikatorem nie powiódł się; %s\n" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu ustawień nie powiódł się: %s\n" #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu o podpisach nie powiódł się: %s\n" #~ msgid "user '%s' read problem: %s\n" #~ msgstr "użytkownik '%s' błąd przy odczycie: %s\n" #~ msgid "user '%s' list problem: %s\n" #~ msgstr "użytkownik '%s' błąd listy: %s\n" #~ msgid "user '%s' not in trustdb\n" #~ msgstr "brak użytkownika '%s' w bazie zaufania\n" #~ msgid "" #~ "# List of assigned trustvalues, created %s\n" #~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n" #~ msgstr "" #~ "# Lista przypisanych wartości zaufania, stworzona %s\n" #~ "# (użyj \"gpgm --import-ownertrust\" aby ją przywrócić)\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "wpis katalogowy bez klucza głównego\n" #~ msgid "line too long\n" #~ msgstr "linia za długa\n" #~ msgid "error: missing colon\n" #~ msgstr "błąd: brak dwukropka\n" #~ msgid "error: invalid fingerprint\n" #~ msgstr "błąd: niewłaściwy odcisk klucza\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "błąd: brak wartośći zaufania właściciela\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "brak klucza w bazie zaufania, przeszukiwany jest zbiór kluczy\n" #~ msgid "key not in ring: %s\n" #~ msgstr "klucza nie ma w zbiorze: %s\n" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oops: klucz już jest w bazie zaufania???\n" #~ msgid "insert trust record failed: %s\n" #~ msgstr "wstawienie wpisu zaufania nie powiodło się: %s\n" #~ msgid "error finding dir record: %s\n" #~ msgstr "błąd podczas poszukiwania wpisu katalogowego: %s\n" #~ msgid "Hmmm, public key lost?" -#~ msgstr "Hmmm, klucz publiczny starcony?" +#~ msgstr "Hmmm, klucz publiczny utracony?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "głowny klucz nie został użyty w procedurze insert_trust_record()\n" #~ msgid "second" #~ msgstr "sekunda" #~ msgid "seconds" #~ msgstr "sekund" #~ msgid "invalid clear text header: " #~ msgstr "niepoprawny nagłówek tekstu jawnego:" #~ msgid "This key belongs to us (we have the secret key)\n" #~ msgstr "Ten klucz należy do nas (mamy odpowiadający mu klucz tajny).\n" #~ msgid "You will see a list of signators etc. here\n" #~ msgstr "Tu ukaże się lista podpisów itd.\n" diff --git a/scripts/gnupg.spec.in b/scripts/gnupg.spec.in index fea79b519..e116ea3b4 100644 --- a/scripts/gnupg.spec.in +++ b/scripts/gnupg.spec.in @@ -1,107 +1,111 @@ # # 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: GPL public key crypto Name: %{name} Version: %{version} Release: 1 Copyright: GPL Group: Applications/Cryptography Source: ftp://ftp.gnupg.org/pub/gcrypt/%{name}-%{version}.tar.gz URL: http://www.gnupg.org Provides: gpg openpgp BuildRoot: /tmp/rpmbuild_%{name} %changelog +* 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 +- 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 is a complete and free replacement for PGP. Because it does not use IDEA or RSA it can be used without any restrictions. GnuPG is in compliance with the OpenPGP specification (RFC2440). %description -l it GnuPG č un sostituto completo e gratuito per il PGP. Non utilizzando IDEA o RSA puň essere utilizzato senza restrizioni. GnuPG č conforme alle specifiche OpenPGP (RFC2440). %description -l fr -GnuPG est remplacement complet et "libre" de PGP. Comme il n'utilise +GnuPG est un remplacement complet et Ť libre ť de PGP. Comme il n'utilise ni IDEA ni RSA il peut ętre utilisé sans restriction. GnuPG est conforme -avec la spécification OpenPGP (RFC2440). +ŕ la spécification OpenPGP (RFC2440). %prep rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_DIR/%{name}-%{version} %setup %build if test -n "$LINGUAS"; then unset LINGUAS fi CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr make %install make install-strip prefix=$RPM_BUILD_ROOT/usr %files %doc %attr (-,root,root) INSTALL %doc %attr (-,root,root) AUTHORS %doc %attr (-,root,root) COPYING %doc %attr (-,root,root) ChangeLog %doc %attr (-,root,root) NEWS %doc %attr (-,root,root) README %doc %attr (-,root,root) THANKS %doc %attr (-,root,root) TODO %doc %attr (-,root,root) PROJECTS %doc %attr (-,root,root) doc/DETAILS %doc %attr (-,root,root) doc/FAQ %doc %attr (-,root,root) doc/HACKING %doc %attr (-,root,root) doc/OpenPGP %doc %attr (-,root,root) g10/pubring.asc %doc %attr (-,root,root) g10/OPTIONS %attr (-,root,root) /usr/man/man1/gpg.1 %attr (4755,root,root) /usr/bin/gpg %attr (-,root,root) /usr/share/locale/de/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/share/locale/it/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/share/locale/fr/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/share/locale/ru/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/share/locale/es_ES/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/share/locale/pt_BR/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/share/locale/pl/LC_MESSAGES/%{name}.mo %attr (-,root,root) /usr/lib/%{name} %attr (-,root,root) /usr/share/%{name} %clean rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_DIR/%{name}-%{version} diff --git a/util/ChangeLog b/util/ChangeLog index bf0ebb5f9..e0288e2ef 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,354 +1,358 @@ +Mon May 31 19:41:10 CEST 1999 Werner Koch + + * iobuf.c (file_filter,block_filter): Speed patches (Rémi). + Thu May 27 09:40:55 CEST 1999 Werner Koch * miscutil.c (answer_is_yes_no_quit): New. Sun May 23 14:20:22 CEST 1999 Werner Koch * dotlock.c: Tweaked to make it compile under mingw32 * http.c: Disabled for mingw32. Sat May 22 22:47:26 CEST 1999 Werner Koch * logger.c (log_set_logfile): New. Thu May 20 14:04:08 CEST 1999 Werner Koch * memory.c (membug): Nanu, there was a const instead of a static. * strgutil.c (trim_trailing_chars): New. Mon May 17 21:54:43 CEST 1999 Werner Koch * logger.c (g10_log_hexdump): Made 2nd arg a const. Wed Apr 28 13:03:03 CEST 1999 Werner Koch * miscutil.c (asctimestamp): Use nl_langinfo (Gaël Quéri). Sun Apr 18 10:11:28 CEST 1999 Werner Koch * argparse.c (store_alias): Disabled becuase it is not used. * ttyio.c (tty_batchmode): New Sat Mar 20 11:44:21 CET 1999 Werner Koch * http.c: Swapped to includes. Tue Mar 2 16:44:57 CET 1999 Werner Koch * strgutil.c (get_native_charset): New. Fri Feb 26 17:55:41 CET 1999 Werner Koch * secmem.c (memblock_struct): Force align (Rémi Guyomarch) Wed Feb 24 11:07:27 CET 1999 Werner Koch * iobuf.c (block_filter): Fixed the oscillating partial packet chunks. Fri Feb 19 15:49:15 CET 1999 Werner Koch * iobuf.c (iobuf_push_filter2): New to allow transer of context ownership to the iobuf. Released the context where needed. Tue Feb 16 14:10:02 CET 1999 Werner Koch * strgutil.c (add_to_strglist): Clear the new flags field (append_to_strglist): Ditto. * dotlock.c (read_lockfile): terminate pidstr (Michael). Wed Feb 10 17:15:39 CET 1999 Werner Koch * dotlock.c (remove_lockfiles): Add cleanup function. (make_dotlock): Add deadlock check. * secmem.c (secmem_malloc): Changed error message. Wed Jan 20 21:40:21 CET 1999 Werner Koch * http.c (http_wait_response): Moved the shutdown behind the dup Wed Jan 20 18:59:49 CET 1999 Werner Koch * http.c (send_request): Removed double LF Tue Jan 19 19:34:58 CET 1999 Werner Koch * * iobuf.c (iobuf_push_filter): Allow filters for temp streams (iobuf_write_temp): Ditto. (iobuf_flush_temp): New. (iobuf_unget_and_close_temp): Removed. * http.c (close_http_document): Renamed to http_close(). (open_http_document): Renamed to http_open_document(). (http_open): New. (http_start_data): New. (http_wait_response): New. Sun Jan 17 11:04:33 CET 1999 Werner Koch * strgutil.c (trim_trailing_ws): New. Sat Jan 16 12:03:27 CET 1999 Werner Koch * http.c (connect_server): Fixed stupid bug. Sat Jan 16 09:27:30 CET 1999 Werner Koch * http.c: New Wed Jan 13 14:10:15 CET 1999 Werner Koch * iobuf.c (iobuf_fdopen): New. Sat Jan 9 16:02:23 CET 1999 Werner Koch * secmem.c (lock_pool): add another check that setuid() worked. (secmem_init): Ditto. Thu Jan 7 18:00:58 CET 1999 Werner Koch * iobuf.c (iobuf_clear_eof): Removed. (underflow): Changed the eof handling. (iobuf_pop_filter): Made static and renamed to pop_filter. * iobuf.c (iobuf_read_line): New. Sun Jan 3 15:28:44 CET 1999 Werner Koch * dotlock.c (make_dotlock): print another informal message. (make_dotlock): Removed the cpp checks. Tue Dec 29 14:41:47 CET 1998 Werner Koch * secmem.c: Moved unistd.h out of the #ifdef * dotlock.c (make_dotlock): Sun has no SYS_NMLN * iobuf.c (iobuf_unget_and_close_temp): Reset .start Sat Dec 12 18:40:32 CET 1998 Werner Koch * argparse.c (arg_pars): fixed opts[i] with negative index. Fri Nov 27 21:37:41 CET 1998 Werner Koch * dotlock.c: Implemented Wed Nov 25 11:30:07 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_pop_filter): Fixed sigsegv after error. Thu Nov 19 07:09:55 1998 Werner Koch * miscutil.c (strtimevalue): New. Tue Nov 10 10:01:53 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (set_native_charset): New. (native_to_utf8): Now handles koi8-r. Tue Nov 3 16:17:56 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (native_to_utf8): New. (utf8_to_native): New, but only as a stub. * argparse.c (optfile_parse): Trimmed spaces from args. Wed Oct 28 08:01:49 1998 me,,, (wk@tobold) * argparse.c (find_long_option): New. (arg_parse): option=value is now allowed. Add a new internal option "--dump-options". Thu Oct 22 16:25:49 1998 Michael Roth (mroth@nessie.de) * fileutil.c (make_basename): New. (make_dirname): New. Wed Oct 21 12:20:29 1998 Werner Koch (wk@isil.d.shuttle.de) * util.c (iobuf_flush): autoincreasing of a temp. iobuf (iobuf_temp_with_content): New. Tue Oct 13 12:40:13 1998 Werner Koch (wk@isil.d.shuttle.de) * util.c (.nofast): set this variable Wed Oct 7 19:27:50 1998 Werner Koch (wk@isil.d.shuttle.de) * memory.c (m_print_stats): New. Tue Oct 6 09:53:56 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (memicmp): Add HAVE_MEMICMP. Mon Sep 21 19:45:01 1998 Werner Koch (wk@(none)) * secmem.c: New flags to allow suspend/resume of warnings. Fri Sep 18 16:25:47 1998 Werner Koch (wk@(none)) * secmem.c (lock_pool): Kludge for broken mlock on HPUX 10.20 Tue Sep 15 17:52:21 1998 Werner Koch (wk@(none)) * miscutil.c (asctimestamp): New. Mon Sep 14 09:38:18 1998 Werner Koch (wk@(none)) * secmem.c (init_pool): Now mmaps /dev/zero if we do not have MAP_ANON. Wed Sep 9 13:52:28 1998 Werner Koch (wk@(none)) * ttyio.c (do_get): Ctrl-D is now a valid but special character Mon Sep 7 13:52:41 1998 Werner Koch (wk@(none)) * iobuf.c (get_real_fname): New and changed file_filter datastructures and their initialization. Tue Aug 11 15:12:35 1998 Werner Koch (wk@(none)) * miscutil.c (answer_is_yes): i18ned Sat Aug 8 18:35:00 1998 Werner Koch (wk@(none)) * ttyio.c (cleanup): New. Mon Aug 3 17:06:00 1998 Werner Koch (wk@(none)) * secmem.c (MAP_ANON): Add a macro test Wed Jul 29 14:53:34 1998 Werner Koch (wk@(none)) * ttyio.c (tty_get_answer_is_yes): New. Tue Jul 21 10:35:48 1998 Werner Koch (wk@(none)) * argparse.c: New option flag to distinguish options and commands. Sat Jul 18 19:49:30 1998 Werner Koch (wk@(none)) * argparse.c (arg_parse): Added -? as alias for -h Thu Jul 9 14:47:20 1998 Werner Koch (wk@isil.d.shuttle.de) * secmem.c (secmem_init): Drops setuid if called with 0. Tue Jul 7 11:49:25 1998 Werner Koch (wk@isil.d.shuttle.de) * logger.c (log_set_filename): New. Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (append_to_strlist): New. Thu Jul 2 15:55:44 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (block_filter): Add writing of OP partial length headers. Fri Jun 26 10:38:35 1998 Werner Koch (wk@isil.d.shuttle.de) * ttyio.c (do_get): all iso8859-1 characters are now allowed. Thu Jun 25 15:57:21 1998 Werner Koch (wk@isil.d.shuttle.de) * secmem.c (lock_pool): Removed left over test code. Wed Jun 10 07:39:41 1998 Werner Koch,mobil,,, (wk@tobold) * fileutil.c (compare_filenames): New. * argparse.c (arg_parse): New flag bit 6 to ignore --version Thu May 14 16:45:13 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_help): Add some formatting stuff Fri May 8 17:06:49 1998 Werner Koch (wk@isil.d.shuttle.de) * errors.c (strerror): New if !HAVE_STRERROR Mon May 4 19:48:03 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_read): Code is now faster. * (iobuf_write): ditto. Mon Apr 27 11:01:32 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (memicmp): New. Thu Mar 19 11:29:03 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (memistr): Add const to return and first arg. Sat Mar 7 11:54:35 1998 Werner Koch (wk@isil.d.shuttle.de) * miscutil.c (print_string): New arg delim; changed all callers. Thu Mar 5 12:19:30 1998 Werner Koch (wk@isil.d.shuttle.de) * errors.c: New strings. Thu Mar 5 12:06:31 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_open): A name of "-" now opens stdin. * fileutil.c (print_fname_stdout, print_fname_stdin): New. Fri Feb 27 10:20:03 1998 Werner Koch (wk@isil.d.shuttle.de) * memory.c (m_is_secure): Removed. * secmem.c (m_is_secure): Moved to here. * secmem.c (secmem_realloc): New. * memory.c (M_GUARD,EXTRA_ALIGN): New (all functions). Thu Feb 26 14:36:51 1998 Werner Koch (wk@isil.d.shuttle.de) * secmem.c (lock_pool): No error if EAGAIN is returned instead of EPERM. Fri Feb 20 17:43:05 1998 Werner Koch (wk@isil.d.shuttle.de) * ttyio.c [MINGW32]: Add support for mingw32. Tue Feb 17 19:43:44 1998 Werner Koch (wk@isil.d.shuttle.de) * memory.c (dump_table_at_exit): New. Mon Feb 16 10:07:28 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_version, show_help, default_strusage): Changed according to GNU standards. Mon Feb 16 08:58:25 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_peek): New Fri Feb 13 19:34:59 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_seek): Set counters to new offset. Fri Feb 13 17:13:04 1998 Werner Koch (wk@isil.d.shuttle.de) * logger.c (log_set_name, log_get_name): New. (print_prefix, pgm_name): New, changed all function to make use it. (log_mpidump): Removed the "DBG" prefix. (log_hexdump): Ditto. * logger.c (printstr): Removed. Fri Feb 13 15:14:13 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_help): New '\v' kludge. diff --git a/util/iobuf.c b/util/iobuf.c index 03fb35319..8e49a1606 100644 --- a/util/iobuf.c +++ b/util/iobuf.c @@ -1,1468 +1,1482 @@ /* iobuf.c - file handling * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GnuPG is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include #include #include #include #include #include #include #include "memory.h" #include "util.h" #include "iobuf.h" typedef struct { FILE *fp; /* open file handle */ int print_only_name; /* flags indicating that fname is not a real file*/ char fname[1]; /* name of the file */ } file_filter_ctx_t ; /* 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 underflow(IOBUF a); static const char *get_real_fname( IOBUF a ); /**************** * 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. * */ static int file_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) { file_filter_ctx_t *a = opaque; FILE *fp = a->fp; size_t size = *ret_len; size_t nbytes = 0; - int c, rc = 0; - char *p; + int rc = 0; if( control == IOBUFCTRL_UNDERFLOW ) { assert( size ); /* need a buffer */ - for(; size; size-- ) { - if( (c=getc(fp)) == EOF ) { - if( ferror(fp) && errno != EPIPE ) { - log_error("%s: read error: %s\n", - a->fname, strerror(errno)); - rc = G10ERR_READ_FILE; - } - else if( !nbytes ) - rc = -1; /* okay: we can return EOF now. */ - break; - } - buf[nbytes++] = c & 0xff; + clearerr( fp ); + nbytes = fread( buf, 1, size, fp ); + if( feof(fp) && !nbytes ) + rc = -1; /* okay: we can return EOF now. */ + else if( ferror(fp) && 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 ) { - for(p=buf; nbytes < size; nbytes++, p++ ) { - if( putc(*p, fp) == EOF ) { - log_error("%s: write error: %s\n", - a->fname, strerror(errno)); + if( size ) { + clearerr( fp ); + nbytes = fwrite( buf, 1, size, fp ); + if( ferror(fp) ) { + log_error("%s: write error: %s\n", a->fname, strerror(errno)); rc = G10ERR_WRITE_FILE; - break; } } *ret_len = nbytes; } else if( control == IOBUFCTRL_INIT ) { } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "file_filter"; } else if( control == IOBUFCTRL_FREE ) { if( fp != stdin && fp != stdout ) { if( DBG_IOBUF ) log_debug("%s: close fd %d\n", a->fname, fileno(fp) ); fclose(fp); } fp = NULL; m_free(a); /* we can free our context now */ } return rc; } /**************** * 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, rc = 0; + 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 encoded length * bytes are really a mess :-( */ if( a->first_c ) { c = a->first_c; a->first_c = 0; assert( c >= 224 && c < 255 ); } 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; } else { /* next partial body length */ a->size = 1 << (c & 0x1f); } } else { /* the gnupg partial length scheme - much better :-) */ c = iobuf_get(chain); a->size = c << 8; c = iobuf_get(chain); a->size |= c; if( c == -1 ) { log_error("block_filter: error reading length info\n"); rc = G10ERR_READ_FILE; } if( !a->size ) { a->eof = 1; if( !n ) rc = -1; break; } } } - for(; !rc && size && a->size; size--, a->size-- ) { - if( (c=iobuf_get(chain)) == -1 ) { + 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, (ulong)a->size); + a, (ulong)size+c, (ulong)a->size+c); rc = G10ERR_READ_FILE; } else { - *p++ = c; - n++; + 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 = m_alloc( 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 = m_alloc( OP_MIN_PARTIAL_CHUNK ); memcpy( a->buffer, p, nbytes ); a->buflen = nbytes; } } } else { /* the gnupg scheme (which is not openpgp compliant) */ size_t avail, n; for(p=buf; !rc && size; ) { n = size; avail = a->size - a->count; if( !avail ) { if( n > a->size ) { iobuf_put( chain, (a->size >> 8) & 0xff ); iobuf_put( chain, a->size & 0xff ); avail = a->size; a->count = 0; } else { iobuf_put( chain, (n >> 8) & 0xff ); iobuf_put( chain, n & 0xff ); avail = n; a->count = a->size - n; } } if( n > avail ) n = avail; if( iobuf_write(chain, p, n ) ) rc = G10ERR_WRITE_FILE; a->count += n; p += n; size -= n; } } } 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; 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; } m_free( a->buffer ); a->buffer = NULL; a->buflen = 0; } else { iobuf_writebyte(chain, 0); iobuf_writebyte(chain, 0); } } else if( a->size ) { log_error("block_filter: pending bytes!\n"); } if( DBG_IOBUF ) log_debug("free block_filter %p\n", a ); m_free(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, a->filter_eof, a->d.start, 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 = m_alloc_clear(sizeof *a); a->use = use; a->d.buf = m_alloc( bufsize ); a->d.size = bufsize; a->no = ++number; a->subno = 0; a->opaque = NULL; return a; } int iobuf_close( IOBUF a ) { IOBUF a2; size_t dummy_len; int rc=0; if( a && a->directfp ) { fclose( a->directfp ); 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 ); 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) ); m_free(a->d.buf); m_free(a); } return rc; } int iobuf_cancel( IOBUF a ) { const char *s; if( a && a->use == 2 ) { s = get_real_fname(a); if( s && *s ) remove(s); /* remove the file. Fixme: this will fail for MSDOZE*/ } /* because the file is still open */ return iobuf_close(a); } /**************** * 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, 8192 ); 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; } /**************** * 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; FILE *fp; file_filter_ctx_t *fcx; size_t len; int print_only = 0; if( !fname || (*fname=='-' && !fname[1]) ) { fp = stdin; /* fixme: set binary mode for msdoze */ fname = "[stdin]"; print_only = 1; } else if( !(fp = fopen(fname, "rb")) ) return NULL; a = iobuf_alloc(1, 8192 ); fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; fcx->print_only_name = print_only; strcpy(fcx->fname, 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, 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; FILE *fp; file_filter_ctx_t *fcx; size_t len; if( !(fp = fdopen(fd, mode)) ) return NULL; a = iobuf_alloc( strchr( mode, 'w')? 2:1, 8192 ); fcx = m_alloc( 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 ); return a; } /**************** * create an iobuf for writing to a file; the file will be created. */ IOBUF iobuf_create( const char *fname ) { IOBUF a; FILE *fp; file_filter_ctx_t *fcx; size_t len; int print_only = 0; if( !fname || (*fname=='-' && !fname[1]) ) { fp = stdout; fname = "[stdout]"; print_only = 1; } else if( !(fp = fopen(fname, "wb")) ) return NULL; a = iobuf_alloc(2, 8192 ); fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; fcx->print_only_name = print_only; strcpy(fcx->fname, 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 ); return a; } /**************** * append to an iobuf; if the file does not exist, create it. * cannot be used for stdout. */ 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 = fopen(fname, "ab")) ) return NULL; a = iobuf_alloc(2, 8192 ); fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; strcpy(fcx->fname, 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 ); return a; } IOBUF iobuf_openrw( const char *fname ) { IOBUF a; FILE *fp; file_filter_ctx_t *fcx; size_t len; if( !fname ) return NULL; else if( !(fp = fopen(fname, "r+b")) ) return NULL; a = iobuf_alloc(2, 8192 ); fcx = m_alloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; strcpy(fcx->fname, 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 ); return a; } /**************** * You can overwrite the normal iobuf behaviour by using this function. * If used the iobuf is a simple wrapper around stdio. * NULL if an error occures and sets errno */ IOBUF iobuf_fopen( const char *fname, const char *mode ) { IOBUF a; FILE *fp; int print_only = 0; if( !fname || (*fname=='-' && !fname[1]) ) { fp = stdin; /* fixme: set binary mode for msdoze */ fname = "[stdin]"; print_only = 1; } else if( !(fp = fopen(fname, mode) ) ) return NULL; a = iobuf_alloc(1, 8192 ); a->directfp = fp; if( DBG_IOBUF ) log_debug("iobuf_fopen -> %p\n", a->directfp ); return a; } /**************** * 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; /* 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 = m_alloc(sizeof *b); memcpy(b, a, sizeof *b ); /* 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 = m_alloc( a->d.size ); b->d.len = 0; b->d.start = 0; } else { /* allocate a fresh buffer for the new stream */ a->d.buf = m_alloc( 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 ); 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. */ 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 ); if( !a->filter ) { /* this is simple */ b = a->chain; assert(b); m_free(a->d.buf); memcpy(a,b, sizeof *a); m_free(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 ) { m_free( 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; m_free(a->d.buf); memcpy(a,b, sizeof *a); m_free(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 && a->filter_eof == 1 ) { IOBUF b = a->chain; if( DBG_IOBUF ) log_debug("iobuf-%d.%d: pop `%s' in underflow\n", a->no, a->subno, a->desc ); m_free(a->d.buf); memcpy(a, b, sizeof *a); m_free(b); print_chain(a); } else a->filter_eof = 0; 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; rc = a->filter( a->filter_ov, IOBUFCTRL_UNDERFLOW, a->chain, a->d.buf, &len ); if( DBG_IOBUF ) { log_debug("iobuf-%d.%d: underflow: req=%lu got=%lu rc=%d\n", a->no, a->subno, (ulong)a->d.size, (ulong)len, rc ); #if 0 if( a->no == 7 ) { print_string(stderr, a->d.buf, len, 0 ); putc('\n', stderr ); } #endif } if( a->use == 1 && rc == -1 ) { /* EOF: we can remove the filter */ size_t dummy_len; /* 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 ) { m_free( 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 `%s' in underflow (!len)\n", a->no, a->subno, a->desc ); print_chain(a); m_free(a->d.buf); memcpy(a,b, sizeof *a); m_free(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; /*log_debug("iobuf-%d.%d: flush\n", a->no, a->subno );*/ if( a->use == 3 ) { /* increase the temp buffer */ char *newbuf; size_t newsize = a->d.size + 8192; log_debug("increasing temp iobuf from %lu to %lu\n", (ulong)a->d.size, (ulong)newsize ); newbuf = m_alloc( newsize ); memcpy( newbuf, a->d.buf, a->d.len ); m_free(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++]; m_free(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++, buf++ ) { + for(n=0 ; n < buflen; n++ ) { if( (c = iobuf_readbyte(a)) == -1 ) { if( !n ) return -1; /* eof */ break; } else - *buf = c; + if( buf ) *buf = c; + if( buf ) buf++; } return n; } n = 0; do { - for( ; n < buflen && a->d.start < a->d.len; n++ ) - *buf++ = a->d.buf[a->d.start++]; + 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*/; } - *buf++ = c; n++; + 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 { - for( ; buflen && a->d.len < a->d.size; buflen--, buf++ ) - a->d.buf[a->d.len++] = *buf; + 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, unsigned long 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 */ u32 iobuf_get_filelength( IOBUF a ) { struct stat st; if( a->directfp ) { FILE *fp = a->directfp; if( !fstat(fileno(fp), &st) ) return st.st_size; log_error("fstat() failed: %s\n", strerror(errno) ); return 0; } for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; FILE *fp = b->fp; if( !fstat(fileno(fp), &st) ) return st.st_size; log_error("fstat() failed: %s\n", strerror(errno) ); break; } return 0; } /**************** * Tell the file position, where the next read will take place */ ulong iobuf_tell( IOBUF a ) { return a->ntotal + a->nbytes; } /**************** * 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, ulong newpos ) { file_filter_ctx_t *b = NULL; if( a->directfp ) { FILE *fp = a->directfp; if( fseek( fp, newpos, SEEK_SET ) ) { log_error("can't seek to %lu: %s\n", newpos, 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; if( fseek( b->fp, newpos, SEEK_SET ) ) { log_error("can't seek to %lu: %s\n", newpos, strerror(errno) ); return -1; } } 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 */ static const char * get_real_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->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; } /**************** * Start the block write mode, see rfc1991.new for details. * A value of 0 for N stops this mode (flushes and writes * the end marker) */ void iobuf_set_block_mode( IOBUF a, size_t n ) { block_filter_ctx_t *ctx = m_alloc_clear( sizeof *ctx ); assert( a->use == 1 || a->use == 2 ); ctx->use = a->use; if( !n ) { if( a->use == 1 ) log_debug("pop_filter called in set_block_mode - please report\n"); pop_filter(a, block_filter, NULL ); } else { ctx->size = n; /* only needed for use 2 */ iobuf_push_filter(a, block_filter, ctx ); } } /**************** * 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 = m_alloc_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 ); } } /**************** * Checks whether the stream is in block mode * Note: This does not work if other filters are pushed on the stream. */ int iobuf_in_block_mode( IOBUF a ) { if( a && a->filter == block_filter ) return 1; /* yes */ return 0; /* no */ } /**************** * 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 = m_alloc( 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 = m_realloc( 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; }