summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--INSTALL44
-rw-r--r--Makefile.am2
-rw-r--r--README369
-rw-r--r--TODO9
-rw-r--r--acconfig.h14
-rw-r--r--acinclude.m465
-rw-r--r--cipher/ChangeLog12
-rw-r--r--cipher/Makefile.am55
-rw-r--r--cipher/blowfish.c1
-rw-r--r--cipher/cipher.c3
-rw-r--r--cipher/dynload.c3
-rw-r--r--cipher/dynload.h5
-rw-r--r--cipher/md.c65
-rw-r--r--cipher/md5.c57
-rw-r--r--cipher/md5.h34
-rw-r--r--cipher/pubkey.c1
-rw-r--r--cipher/random.c11
-rw-r--r--cipher/rmd.h12
-rw-r--r--cipher/rmd160.c63
-rw-r--r--cipher/rndunix.c3
-rw-r--r--cipher/sha1.c65
-rw-r--r--cipher/sha1.h33
-rw-r--r--cipher/tiger.c18
-rw-r--r--cipher/twofish.c10
-rw-r--r--configure.in115
-rw-r--r--doc/DETAILS8
-rw-r--r--doc/FAQ166
-rw-r--r--doc/gpg.1pod87
-rw-r--r--g10/ChangeLog22
-rw-r--r--g10/armor.c29
-rw-r--r--g10/g10.c12
-rw-r--r--g10/getkey.c37
-rw-r--r--g10/keygen.c6
-rw-r--r--g10/keylist.c1
-rw-r--r--g10/mainproc.c6
-rw-r--r--g10/options.h1
-rw-r--r--g10/pubkey-enc.c13
-rw-r--r--g10/ringedit.c91
-rw-r--r--g10/signal.c12
-rw-r--r--g10/tdbio.c78
-rw-r--r--g10/tdbio.h10
-rw-r--r--g10/trustdb.c253
-rw-r--r--include/ChangeLog5
-rw-r--r--include/cipher.h15
-rw-r--r--include/util.h8
-rw-r--r--po/ChangeLog4
-rw-r--r--po/pl.po1051
-rw-r--r--scripts/ChangeLog4
-rwxr-xr-xscripts/config.guess4
-rwxr-xr-xscripts/config.sub6
-rwxr-xr-xscripts/mkwebpage4
-rw-r--r--tools/bftest.c4
-rw-r--r--tools/shmtest.c6
-rw-r--r--util/ChangeLog7
-rw-r--r--util/dotlock.c261
-rw-r--r--util/fileutil.c36
-rw-r--r--util/iobuf.c8
-rw-r--r--util/secmem.c10
-rw-r--r--util/ttyio.c2
60 files changed, 2007 insertions, 1341 deletions
diff --git a/ChangeLog b/ChangeLog
index 822861089..526f33eb6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for freebsd 2.2
+
+ * configure.in: a lot of changes to allow selection of modules.
+ Add support for OS/2.
+
+ * acinclude.m4: add some more caching
+
+ * README: Spelling and grammar corrections (John A. Martin)
+ * INSTALL: Ditto.
+
Wed Jan 20 21:40:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
* configure.in: --enable-m-guard is now default
diff --git a/INSTALL b/INSTALL
index 655b79097..e91622adf 100644
--- a/INSTALL
+++ b/INSTALL
@@ -13,10 +13,10 @@ Configure options for GNUPG
--disable-nls Disable NLS support (See ABOUT-NLS)
--enable-m-debug Compile with the integrated malloc debugging stuff.
- This makes the program slower but is checks every
+ This makes the program slower but it checks every
free operation and can be used to create statistics
of memory usage. If this option is used the program
- option "--debug 32" displays every call to a a malloc
+ option "--debug 32" displays every call to a malloc
function (this makes the program *really* slow), the
option "--debug 128" displays a memory statistic after
the program run.
@@ -55,8 +55,8 @@ Don't forget to delete "config.cache" and run "./config.status --recheck".
The Random Device
=================
Random devices are available in Linux, FreeBSD and OpenBSD.
-The device files may not exist on your system, please check this
-and create them if needed.
+The random device files may not exist on your system, please check whether
+they do and create them if needed.
The Linux files should look like this:
cr--r--r-- 1 root sys 1, 8 May 28 1997 /dev/random
@@ -72,23 +72,23 @@ You can create them with:
mknod /dev/random c 2 3
mknod /dev/urandom c 2 4
-Unices without a random devices must use another entropy collector
-which is called rndunix and available as an extension module. You
+Unices without a random devices must use another entropy collector. One
+entropy collector called rndunix and available as an extension module. You
should put this in your ~/.gnupg/options file:
===8<====================
load-extension rndunix
===>8====================
-This collector works by running a lot of tools which yields more or
+This collector works by running a lot of commands that yield more or
less unpredictable output and feds this as entropy into the random
-generator - It should work reliable but you should check whether
-it produces good output for your kind of Unix. There are some debug
+generator - It should work reliably but you should check whether
+it produces good output for your version of Unix. There are some debug
options to help you (see cipher/rndunix.c).
Installation
============
-gpg is not installed as suid:root; if you want to do it, do it manually.
+gpg is not installed as suid:root; if you want to do that, do it manually.
We will use capabilities in the future.
The ~/.gnupg directory will be created if it does not exist. Your first
@@ -135,9 +135,9 @@ diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
+ The file `configure.in' is used by the program `autoconf' to create
+`configure'. You only need `configure.in' if you want to change it or
+regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
@@ -147,7 +147,7 @@ The simplest way to compile this package is:
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
- Running `configure' takes awhile. While running, it prints some
+ Running `configure' takes a while. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
@@ -177,19 +177,19 @@ a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-Or on systems that have the `env' program, you can do it like this:
+Or, on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+ You can compile the package for more than one kind of computer at the same
+time by placing the object files for each architecture in their own
+directory. To do this, you must use a version of `make', such as GNU `make',
+that supports the `VPATH' variable. `cd' to the directory where you want the
+object files and executables to go and run the `configure' script.
+`configure' automatically checks for the source code in the directory that
+`configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
diff --git a/Makefile.am b/Makefile.am
index eb7e46686..a12267d17 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,7 +10,7 @@ all-recursive-am: g10defs.h
g10defs.h : config.h
@( set -e; \
echo "/* Generated automatically by Makefile */" ; \
- echo "#ifdef __MINGW32__"; \
+ echo "#ifdef HAVE_DRIVE_LETTERS"; \
echo "#define G10_LOCALEDIR \"c:/lib/gnupg/locale\""; \
echo "#define GNUPG_LIBDIR \"c:/lib/gnupg\""; \
echo "#define GNUPG_DATADIR \"c:/lib/gnupg\""; \
diff --git a/README b/README
index 0bec85ad0..845c15beb 100644
--- a/README
+++ b/README
@@ -1,19 +1,19 @@
-----BEGIN PGP SIGNED MESSAGE-----
- GnuPG - The GNU Privacy Guard
- -------------------------------
- Version 0.9
+ GnuPG - The GNU Privacy Guard
+ -------------------------------
+ Version 0.9
GnuPG is now in Beta test and you should report all bugs to the
- mailing list (see below). The 0.9.x versions are mainly released
- to fix all remaining serious bugs. As soon as version 1.0 is out,
+ mailing list (see below). The 0.9.x versions are released mainly
+ to fix all remaining serious bugs. As soon as version 1.0 is out,
development will continue with a 1.1 series and bug fixes for the
- 1.0 version are released as needed.
+ 1.0 version as needed.
GnuPG works best on GNU/Linux or *BSD. Other Unices are
- also supported but not as good tested as those Freenix ones.
- Please verify the tar file; there is a PGP2 and a GnuPG/PGP5
- signature available. My PGP2 key is well known and published in
+ also supported but are not as well tested as the Free Unices.
+ Please verify the tar file with the PGP2 or GnuPG/PGP5
+ signatures provided. My PGP2 key is well known and published in
the "Global Trust Register for 1998", ISBN 0-9532397-0-5.
I have included my pubring as "g10/pubring.asc", which contains
@@ -25,33 +25,33 @@
"pub 1024D/621CC013 1998-07-07 Werner Koch <werner.koch@guug.de>"
"Key fingerprint = ECAF 7590 EB34 43B5 C7CF 3ACB 6C7E E1B8 621C C013"
- You may want add it to your GnuPG pubring and use it in the future to
- verify new releases. Because you verified this README file and
- _checked_that_it_is_really_my PGP2 key 0C9857A5, you can be sure
- that the above fingerprints are correct.
+ You may want add my new DSA key to your GnuPG pubring and use it in
+ the future to verify new releases. Because you verified this README
+ file and _checked_that_it_is_really_my PGP2 key 0C9857A5, you can be
+ sure that the above fingerprints are correct.
Please subscribe to g10@net.lut.ac.uk by sending a mail with
the word "subscribe" in the body to "g10-request@net.lut.ac.uk".
- This mailing list is a closed one (only subscribers are allowed
- to post) to avoid misuse by folks who don't know the Netiquette
- and trash your mailspool with commercial junk.
+ This mailing list is closed (only subscribers are allowed to post)
+ to avoid misuse by folks who don't know the Netiquette and trash
+ your mailspool with commercial junk.
See the file COPYING for copyright and warranty information.
GnuPG is in compliance with RFC2440 (OpenPGP), see doc/OpenPGP for
details.
- Due to the fact that GnuPG does not use use any patented algorithm,
- it cannot be compatible with PGP2 versions; PGP 2.x does only use
- IDEA (which is patented worldwide) and RSA (which is patented in
- the United States until Sep 20, 2000).
+ Because GnuPG does not use use any patented algorithm it cannot be
+ compatible with PGP2 versions. PGP 2.x uses only IDEA (which is
+ patented worldwide) and RSA (which is patented in the United States
+ until Sep 20, 2000).
The default algorithms are now DSA and ElGamal. ElGamal for signing
- is still available, but due to the larger size of such signatures it
- is depreciated (Please note that the GnuPG implementation of ElGamal
- signatures is *not* insecure). Symmetric algorithms are: 3DES,
- Blowfish and CAST5 (Twofish will come soon), available digest
- algorithms are MD5, RIPEMD160, SHA1 and TIGER/192.
+ is still available, but because of the larger size of such
+ signatures it is deprecated (Please note that the GnuPG
+ implementation of ElGamal signatures is *not* insecure). Symmetric
+ algorithms are: 3DES, Blowfish, and CAST5 (Twofish will come soon).
+ Digest algorithms available are MD5, RIPEMD160, SHA1, and TIGER/192.
Installation
@@ -61,7 +61,7 @@
Here is a quick summary:
- 1) "./configure"
+ 1) "./configure"
2) "make"
@@ -69,24 +69,25 @@
4) You end up with the binaries "gpg" and "gpgm" in /usr/local/bin.
- 5) Optional, but suggested: install the binary "gpg" as suid root.
+ 5) Optional, but suggested, install the binary "gpg" as suid root.
- Intro
- -----
- This is a brief overview how to use GnuPG - it is highly suggested
- that you read the manual^H^H^H more information about the use
- of cryptography. GnuPG is only the technical tool to do it and
- the security highly depends on that YOU KNOW WHAT YOU ARE DOING.
+ Introduction
+ ------------
+
+ This is a brief overview how to use GnuPG - it is strongly suggested
+ that you read the manual^H^H^H more information about the use of
+ cryptography. GnuPG is only a tool, secure results require that YOU
+ KNOW WHAT YOU ARE DOING.
If you already have a DSA key from PGP 5 (they call them DH/ElGamal)
you can simply copy the pgp keyrings over the GnuPG keyrings after
- running gpg once, so that it can create the correct directory.
+ running gpg once to create the correct directory.
- The normal way to create a key is:
+ The normal way to create a key is
- gpg --gen-key
+ gpg --gen-key
This asks some questions and then starts key generation. To create
good random numbers for the key parameters, GnuPG needs to gather
@@ -98,209 +99,212 @@
access - don't do it over the network or on a machine used also
by others - especially if you have no access to the root account.
- When you are asked for a passphrase; use a good one which you can easy
- remember. Don't make the passphrase too long because you have to
- type it for every decryption or signing; but - AND THIS IS VERY
- IMPORTANT - use a good one which is not easily guessable as the
+ When you are asked for a passphrase use a good one which you can
+ easy remember. Don't make the passphrase too long because you have
+ to type it for every decryption or signing; but, - AND THIS IS VERY
+ IMPORTANT - use a good one that is not easily to guess because the
security of the whole system relies on your secret key and the
- passphrase is used to protect this secret key in case someone was
- able to get access to your secret keyring. A good way to select
- a passphrase is to figure out a short nonsense sentence which makes
- some sense for you and modify it by inserting extra spaces, non-letters
- and changing the case of some characters - this is really easy to
- remember especially if you associate some pictures with it.
+ passphrase that protects it when someone gains access to your secret
+ keyring. A good way to select a passphrase is to figure out a short
+ nonsense sentence which makes some sense for you and modify it by
+ inserting extra spaces, non-letters and changing the case of some
+ characters - this is really easy to remember especially if you
+ associate some pictures with it.
- Then you should create a revocation certificate in case someone
- gets knowledge of your secret key or you forgot your passphrase:
+ Next, you should create a revocation certificate in case someone
+ gets knowledge of your secret key or you forgot your passphrase
- gpg --gen-revoke your_user_id
+ gpg --gen-revoke your_user_id
- Run this command and store it away; output is always ASCII armored,
- so that you can print it and (hopefully never) re-create it if
- your electronic media fails.
+ Run this command and store the revocation certificate away. The output
+ is always ASCII armored, so that you can print it and (hopefully
+ never) re-create it if your electronic media fails.
- Now you can use your key to create digital signatures:
+ Now you can use your key to create digital signatures
- gpg -s file
+ gpg -s file
- This creates a file file.gpg which is compressed and has a signature
- attached.
+ This creates a file "file.gpg" which is compressed and has a
+ signature attached.
- gpg -sa file
+ gpg -sa file
- Same as above, but creates the file.asc which is ascii armored and
- and ready for sending by mail. Note: It is better to use your
+ Same as above, but creates a file "file.asc" which is ASCII armored
+ and and ready for sending by mail. It is better to use your
mailers features to create signatures (The mailer uses GnuPG to do
this) because the mailer has the ability to MIME encode such
signatures - but this is not a security issue.
- gpg -s -o out file
+ gpg -s -o out file
- Creates a signature of file, but writes the output to the file "out".
+ Creates a signature of "file", but writes the output to the file
+ "out".
Everyone who knows your public key (you can and should publish
your key by putting it on a key server, a web page or in your .plan
- file) is now able to check whether you really signed this text;
+ file) is now able to check whether you really signed this text
- gpg --verify file
+ gpg --verify file
GnuPG now checks whether the signature is valid and prints an
appropriate message. If the signature is good, you know at least
that the person (or machine) has access to the secret key which
corresponds to the published public key.
+
If you run gpg without an option it will verify the signature and
- create a new file which is identical to the original file. gpg
- can also run as a filter, so that you can pipe data to verify
- trough it:
+ create a new file that is identical to the original. gpg can also
+ run as a filter, so that you can pipe data to verify trough it
- cat signed-file | gpg | wc -l
+ cat signed-file | gpg | wc -l
- will check the signature of signed-file and then display the
+ which will check the signature of signed-file and then display the
number of lines in the original file.
- To send a message encrypted to someone you can use this:
+ To send a message encrypted to someone you can use
- gpg -e -r heine file
+ gpg -e -r heine file
- This encrypts file with the public key of the user "heine" and
+ This encrypts "file" with the public key of the user "heine" and
writes it to "file.gpg"
- echo "hallo" | gpg -ea -r heine | mail heine
+ echo "hello" | gpg -ea -r heine | mail heine
- Ditto, but encrypts "hallo\n" and mails it as ascii armored message
+ Ditto, but encrypts "hello\n" and mails it as ASCII armored message
to the user with the mail address heine.
- gpg -se -r heine file
+ gpg -se -r heine file
- This encrypts file with the public key of "heine" and writes it
+ This encrypts "file" with the public key of "heine" and writes it
to "file.gpg" after signing it with your user id.
- gpg -se -r heine -u Suttner file
+ gpg -se -r heine -u Suttner file
Ditto, but sign the file with your alternative user id "Suttner"
- GnuPG has some options to help you publish public keys; this is
- called "exporting" a key:
+ GnuPG has some options to help you publish public keys. This is
+ called "exporting" a key, thus
- gpg --export >all-my-keys
+ gpg --export >all-my-keys
- exports all the keys in the keyring and writes them (in a binary format)
- to all-my-keys. You may then mail "all-my-keys" as an MIME attachment
- to someone else or put it on an FTP server. To export only some
- user IDs, you give them as arguments on the command line.
+ exports all the keys in the keyring and writes them (in a binary
+ format) to "all-my-keys". You may then mail "all-my-keys" as an
+ MIME attachment to someone else or put it on an FTP server. To
+ export only some user IDs, you give them as arguments on the command
+ line.
To mail a public key or put it on a web page you have to create
- the key in ASCII armored format:
+ the key in ASCII armored format
- gpg --export --armor | mail panther@tiger.int
+ gpg --export --armor | mail panther@tiger.int
This will send all your public keys to your friend panther.
If you have received a key from someone else you can put it
- into your public keyring; is called "importing":
+ into your public keyring. This is called "importing"
- gpg --import [filenames]
+ gpg --import [filenames]
New keys are appended to your keyring and already existing
- keys are updated. Note that GnuPG does not allow keys which
- are not self-signed by the user.
+ keys are updated. Note that GnuPG does not import keys that
+ are not self-signed.
- Because anyone can claim that the public key belongs to her
- we must have some way to check that the public key really belongs
+ Because anyone can claim that a public key belongs to her
+ we must have some way to check that a public key really belongs
to the owner. This can be achieved by comparing the key during
a phone call. Sure, it is not very easy to compare a binary file
by reading the complete hex dump of the file - GnuPG (and nearly
every other program used for management of cryptographic keys)
- provides other solutions:
+ provides other solutions.
- gpg --fingerprint <username>
+ gpg --fingerprint <username>
- prints the so called "fingerprint" of the given username; this
+ prints the so called "fingerprint" of the given username which
is a sequence of hex bytes (which you may have noticed in mail
- sigs or on business cards) which uniquely identify the public
- key - two different keys will always have different fingerprints.
- It is easy to compare this fingerprint by phone and I suggest
+ sigs or on business cards) that uniquely identifies the public
+ key - different keys will always have different fingerprints.
+ It is easy to compare fingerprints by phone and I suggest
that you print your fingerprint on the back of your business
card.
- If you don't know the owner of the public key you are in trouble;
- but wait: A friend of you knows someone who knows someone who
- has met the owner of the public key at some computer conference.
- So all the persons between you and the public key holder may now
- act as introducer to you; this is done by signing the keys and
- thereby certifying the other keys. If you then trust all the
- introducers to correctly sign other keys, you can be be sure that
- the other key really belongs to the one who claims so.
-
- There are 2 steps to validate a target key:
- 1. First check that there is a complete chain
- of signed keys from the public key you want to use
- and your key and verify each signature.
- 2. Make sure that you have full trust in the certificates
- of all the introduces between the public key holder and
- you.
+ If you don't know the owner of the public key you are in trouble.
+ Suppose however that friend of yours knows someone who knows someone
+ who has met the owner of the public key at some computer conference.
+ Suppose that all the people between you and the public key holder
+ may now act as introducers to you. Introducers signing keys thereby
+ certify that they know the owner of the keys they sign. If you then
+ trust all the introducers to have correctly signed other keys, you
+ can be be sure that the other key really belongs to the one who
+ claims to own it..
+
+ There are 2 steps to validate a key:
+ 1. First check that there is a complete chain
+ of signed keys from the public key you want to use
+ and your key and verify each signature.
+ 2. Make sure that you have full trust in the certificates
+ of all the introduces between the public key holder and
+ you.
Step 2 is the more complicated part because there is no easy way
for a computer to decide who is trustworthy and who is not. GnuPG
leaves this decision to you and will ask you for a trust value
(here also referenced as the owner-trust of a key) for every key
- needed to check the chain of certificates. You may choose from:
+ needed to check the chain of certificates. You may choose from:
a) "I don't know" - then it is not possible to use any
- of the chains of certificates, in which this key is used
- as an introducer, to validate the target key. Use this if
- you don't know the introducer.
+ of the chains of certificates, in which this key is used
+ as an introducer, to validate the target key. Use this if
+ you don't know the introducer.
b) "I do not trust" - Use this if you know that the introducer
- does not do a good job in certifying other keys. The effect
- is the same as with a) but for a) you may later want to
- change the value because you got new information about this
- introducer.
+ does not do a good job in certifying other keys. The effect
+ is the same as with a) but for a) you may later want to
+ change the value because you got new information about this
+ introducer.
c) "I trust marginally" - Use this if you assume that the
- introducer knows what he is doing. Together with some
- other marginally trusted keys, GnuPG validates the target
- key then as good.
+ introducer knows what he is doing. Together with some
+ other marginally trusted keys, GnuPG validates the target
+ key then as good.
d) "I fully trust" - Use this if you really know that this
- introducer does a good job when certifying other keys.
- If all the introducer are of this trust value, GnuPG
- normally needs only one chain of signatures to validate
- a target key okay. (But this may be adjusted with the help
- of some options).
- These information are confidential because they give your
- personal opinion on the trustworthy of someone else. Therefore
- this data is not stored in the keyring but in the "trustdb"
+ introducer does a good job when certifying other keys.
+ If all the introducer are of this trust value, GnuPG
+ normally needs only one chain of signatures to validate
+ a target key okay. (But this may be adjusted with the help
+ of some options).
+ This information is confidential because it gives your personal
+ opinion on the trustworthiness of someone else. Therefore this data
+ is not stored in the keyring but in the "trustdb"
(~/.gnupg/trustdb.gpg). Do not assign a high trust value just
- because the introducer is a friend of you - decide how far she
- understands all the implications of key signatures and you may
- want to tell him more about public key cryptography so you
- can later change the trust value you assigned.
+ because the introducer is a friend of yours - decide how well she
+ understands the implications of key signatures and you may want to
+ tell her more about public key cryptography so you can later change
+ the trust value you assigned.
- Okay, here is how GnuPG helps you in key management: Most stuff is
- done with the --edit-key command:
+ Okay, here is how GnuPG helps you with key management. Most stuff
+ is done with the --edit-key command
- gpg --edit-key <keyid or username>
+ gpg --edit-key <keyid or username>
GnuPG displays some information about the key and then prompts
for a command (enter "help" to see a list of commands and see
the man page for a more detailed explanation). To sign a key
you select the user ID you want to sign by entering the number
- which is displayed in the leftmost column (or do nothing if the
+ that is displayed in the leftmost column (or do nothing if the
key has only one user ID) and then enter the command "sign" and
follow all the prompts. When you are ready, give the command
"save" (or use "quit" to cancel your actions).
- If you want to sign the key with another user ID of yours, you
+ If you want to sign the key with another of your user IDs, you
must give an "-u" option on the command line together with the
"--edit-key".
Normally you want to sign only one user ID because GnuPG
- does only use one and this keeps the public key certificate
+ uses only one and this keeps the public key certificate
small. Because such key signatures are very important you
- should make sure that the signators of your key sign a user ID
+ should make sure that the signatories of your key sign a user ID
which is very likely to stay for a long time - choose one with an
email address you have full control of or do not enter an email
address at all. In future GnuPG will have a way to tell which
user ID is the one with an email address you prefer - because
you have no signatures on this email address it is easy to change
- this address. Remember: Your signators sign your public key (the
+ this address. Remember, your signatories sign your public key (the
primary one) together with one of your user IDs - so it is not possible
to change the user ID later without voiding all the signatures.
@@ -310,51 +314,59 @@
trust you assign to a key).
- 7 Ways to Specify a User ID
+ 8 Ways to Specify a User ID
--------------------------
- There are several ways to specify a user ID, here are some examples:
+ There are several ways to specify a user ID, here are some examples.
* Only by the short keyid (prepend a zero if it begins with A..F):
- "234567C4"
- "0F34E556E"
- "01347A56A"
- "0xAB123456
+ "234567C4"
+ "0F34E556E"
+ "01347A56A"
+ "0xAB123456
* By a complete keyid:
- "234AABBCC34567C4"
- "0F323456784E56EAB"
- "01AB3FED1347A5612"
- "0x234AABBCC34567C4"
+ "234AABBCC34567C4"
+ "0F323456784E56EAB"
+ "01AB3FED1347A5612"
+ "0x234AABBCC34567C4"
* By a fingerprint:
- "1234343434343434C434343434343434"
- "123434343434343C3434343434343734349A3434"
- "0E12343434343434343434EAB3484343434343434"
+ "1234343434343434C434343434343434"
+ "123434343434343C3434343434343734349A3434"
+ "0E12343434343434343434EAB3484343434343434"
The first one is MD5 the others are ripemd160 or sha1.
* By an exact string:
- "=Heinrich Heine <heinrichh@uni-duesseldorf.de>"
+ "=Heinrich Heine <heinrichh@uni-duesseldorf.de>"
* By an email address:
- "<heinrichh@uni-duesseldorf.de>"
+ "<heinrichh@uni-duesseldorf.de>"
+
+ * By word match
+
+ "+Heinrich Heine duesseldorf"
+
+ All words must match excatly (not case sensitive) and appear in
+ any order in the user ID. Words are any sequences of letters,
+ digits, the underscore and characters with bit 7 set.
* By the Local ID (from the trust DB):
- "#34"
+ "#34"
This may be used by a MUA to specify an exact key after selecting
- a key from GnuPG (by the use of a special option or an extra utility)
+ a key from GnuPG (by using a special option or an extra utility)
* Or by the usual substring:
- "Heine"
- "*Heine"
+ "Heine"
+ "*Heine"
The '*' indicates substring search explicitly.
@@ -363,7 +375,7 @@
----------
If you use the option "--batch", GnuPG runs in non-interactive mode and
never prompts for input data. This does not even allow entering the
- passphrase; until we have a better solution (something like ssh-agent),
+ passphrase. Until we have a better solution (something like ssh-agent),
you can use the option "--passphrase-fd n", which works like PGPs
PGPPASSFD.
@@ -375,29 +387,29 @@
-----------
GnuPG returns with an exit status of 1 if in batch mode and a bad signature
has been detected or 2 or higher for all other errors. You should parse
- stderr or better the output of the fd specified with --status-fd to get
+ stderr or, better, the output of the fd specified with --status-fd to get
detailed information about the errors.
Esoteric commands
-----------------
- gpg --list-packets datafile
+ gpg --list-packets datafile
Use this to list the contents of a data file. If the file is encrypted
you are asked for the passphrase, so that GnuPG is able to look at the
- inner structure of a encrypted packet. This command should be able
- to list all kinds of rfc2440 messages.
+ inner structure of a encrypted packet. This command should list all
+ kinds of rfc2440 messages.
- gpgm --list-trustdb
+ gpgm --list-trustdb
List the contents of the trust DB in a human readable format
- gpgm --list-trustdb <usernames>
+ gpgm --list-trustdb <usernames>
List the tree of certificates for the given usernames
- gpgm --list-trust-path username
+ gpgm --list-trust-path username
List the possible trust paths for the given username. The length
of such a trust path is limited by the option --max-cert-depth
@@ -415,22 +427,21 @@
See http://www.gnupg.org/mirrors.html for a list of FTP mirrors
and use them if possible.
- Please direct bug reports to <gnupg-bugs@gnu.org> or better
+ Please direct bug reports to <gnupg-bugs@gnu.org> or, better,
post them to the mailing list <g10@net.lut.ac.uk> (this is a
closed list - subscribe before posting, see above (~line 33)).
Please direct questions about GnuPG to the mailing list or
- one of the pgp newsgroups; this gives me more time to improve
+ one of the pgp newsgroups and give me more time to improve
GnuPG. Commercial support for GnuPG will be available soon.
Have fun and remember: Echelon is looking at you kid.
-
-----BEGIN PGP SIGNATURE-----
-Version: GnuPG v0.9.1 (GNU/Linux)
+Version: GnuPG v0.9.2 (GNU/Linux)
Comment: For info see http://www.gnupg.org
-iQB1AwUBNpyIDR0Z9MEMmFelAQGn4gL+IVlEye5I6LplxdUExsrHQpLV21H0UXFa
-/Dl1T/HjrGHj41NeW2evO4Ck2K6Z0TG5jPg9CuJdcJp0siJ8odO7BTLaF3r6gwxF
-CA4EXgqhSyE8PXRPS4m4M5I7Ru/bsZrF
-=HfE0
+iQB1AwUBNr2fPh0Z9MEMmFelAQHqNAL/e7pApR0CGUJ/zuIsjaVhNGPEgKAglcEd
+YuVdB+RCN0wq7ZfI0AHU2FdVISRACmSN3xituTTgeiOUsczM40EZ4l1XNfyRF768
+fglui6XxEeYHFY7mSQMgzzFWDG0Squx0
+=enRo
-----END PGP SIGNATURE-----
diff --git a/TODO b/TODO
index b43dac34c..e1dbfb29b 100644
--- a/TODO
+++ b/TODO
@@ -8,8 +8,13 @@ Bugs
* clearsign bug Greg Troxel Jan 11.
+ * README does not verify okay. verify inserts an extra CR,LF
+ just before "Esoteric Command" (after ~8k of text).
+
Important
----------
+ * replace gettext by a non exploitable one.
+
* Check revocation and expire stuff. PLEASE: THIS MUST BE TESTED!
* Check calculation of key validity. PLEASE: IT IS IMPORTED THAT
@@ -34,6 +39,8 @@ Needed
-Wl,-export-dynamic flag from my Makefile and it linked and seems to
be working OK so far.
+ * Use capabilities if available.
+
Minor Bugs
----------
@@ -56,7 +63,7 @@ Nice to have
really make sense?
* change the fake_data stuff to mpi_set_opaque
* How about letting something like 'gpg --version -v', list the
- effective options.
+ effective options. Too much work.
* Stats about used random numbers.
diff --git a/acconfig.h b/acconfig.h
index d3b6cf02e..fe2ac2fc8 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -32,6 +32,7 @@
#undef VERSION
#undef PACKAGE
#undef PRINTABLE_OS_NAME
+#undef IS_DEVELOPMENT_VERSION
/* Define if your locale.h file contains LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
@@ -64,14 +65,6 @@
#undef HAVE_BROKEN_MLOCK
-/* One of the following macros is defined to select which of
- * the cipher/rndxxxx.c is linked into the program */
-#undef USE_RNDLINUX
-#undef USE_RNDUNIX
-#undef USE_RNDOS2
-#undef USE_RNDATARI
-#undef USE_RNDW32
-#undef USE_RNDMVS
/* defined if we have a /dev/random and /dev/urandom */
#undef HAVE_DEV_RANDOM
/* and the real names of the random devices */
@@ -92,6 +85,11 @@
#undef USE_ONLY_8DOT3
/* defined if we must run on a stupid file system */
#undef HAVE_DRIVE_LETTERS
+/* defined if we run on some of the PCDOS like systems (DOS, Windoze. OS/2)
+ * with special properties like no file modes */
+#undef HAVE_DOSISH_SYSTEM
+
+
@BOTTOM@
diff --git a/acinclude.m4 b/acinclude.m4
index ab6fbf33b..42c4ffb35 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,4 +1,4 @@
-dnl macros to configure g10
+dnl macros to configure g10 7cache_va
dnl GNUPG_MSG_PRINT(STRING)
@@ -203,6 +203,9 @@ define(GNUPG_CHECK_RDYNAMIC,
solaris*)
CFLAGS_RDYNAMIC="-Wl,-dy"
;;
+ freebsd2*)
+ CFLAGS_RDYNAMIC=""
+ ;;
*)
CFLAGS_RDYNAMIC="-Wl,-export-dynamic"
;;
@@ -221,8 +224,9 @@ dnl
define(GNUPG_CHECK_IPC,
[ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h)
if test "$ac_cv_header_sys_shm_h" = "yes"; then
- AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
- AC_TRY_RUN([
+ AC_MSG_CHECKING(whether IPC_RMID allowes subsequent attaches)
+ AC_CACHE_VAL(gnupg_cv_ipc_rmid_deferred_release,
+ AC_TRY_RUN([
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
@@ -245,19 +249,38 @@ define(GNUPG_CHECK_IPC,
exit (0);
}
],
- AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no),
- AC_MSG_RESULT(assuming no))
+ gnupg_cv_ipc_rmid_deferred_release="yes",
+ gnupg_cv_ipc_rmid_deferred_release="no",
+ gnupg_cv_ipc_rmid_deferred_release="assume-no")
+ )
+ if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then
+ AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
+ AC_MSG_RESULT(yes)
+ else
+ if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then
+ AC_MSG_RESULT(no)
+ else
+ AC_MSG_RESULT([assuming no])
+ fi
+ fi
+
AC_MSG_CHECKING(whether SHM_LOCK is available)
- AC_TRY_COMPILE([#include <sys/types.h>
+ AC_CACHE_VAL(gnupg_cv_ipc_have_shm_lock,
+ AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>],[
int foo( int shm_id ) { shmctl(shm_id, SHM_LOCK, 0); }
],
+ gnupg_cv_ipc_have_shm_lock="yes",
+ gnupg_cv_ipc_have_shm_lock="no"
+ )
+ )
+ if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then
AC_DEFINE(IPC_HAVE_SHM_LOCK)
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no))
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
fi
])
@@ -272,7 +295,8 @@ define(GNUPG_CHECK_MLOCK,
[ AC_CHECK_FUNCS(mlock)
if test "$ac_cv_func_mlock" = "yes"; then
AC_MSG_CHECKING(whether mlock is broken)
- AC_TRY_RUN([
+ AC_CACHE_VAL(gnupg_cv_have_broken_mlock,
+ AC_TRY_RUN([
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
@@ -299,10 +323,21 @@ define(GNUPG_CHECK_MLOCK,
}
],
- AC_MSG_RESULT(no),
- AC_DEFINE(HAVE_BROKEN_MLOCK)
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(assuming no))
+ gnupg_cv_have_broken_mlock="no",
+ gnupg_cv_have_broken_mlock="yes",
+ gnupg_cv_have_broken_mlock="assume-no"
+ )
+ )
+ if test "$gnupg_cv_have_broken_mlock" = "yes"; then
+ AC_DEFINE(HAVE_BROKEN_MLOCK)
+ AC_MSG_RESULT(yes)
+ else
+ if test "$gnupg_cv_have_broken_mlock" = "no"; then
+ AC_MSG_RESULT(no)
+ else
+ AC_MSG_RESULT(assuming no)
+ fi
+ fi
fi
])
diff --git a/cipher/ChangeLog b/cipher/ChangeLog
index 273b6fdee..1858f6a50 100644
--- a/cipher/ChangeLog
+++ b/cipher/ChangeLog
@@ -1,3 +1,15 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * Makefile.am: Modules are now figured out by configure
+ * construct.c: New. Generated by configure. Changed all modules
+ to work with that.
+ * sha1.h: Removed.
+ * md5.h: Removed.
+
+ * twofish.c: Changed interface to allow Twofish/256
+
+ * rndunix.c (start_gatherer): Die on SIGPIPE.
+
Wed Jan 20 18:59:49 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
* rndunix.c (gather_random): Fix to avoid infinite loop.
diff --git a/cipher/Makefile.am b/cipher/Makefile.am
index 4a7171071..b21dc18f5 100644
--- a/cipher/Makefile.am
+++ b/cipher/Makefile.am
@@ -1,12 +1,33 @@
## Process this file with automake to produce Makefile.in
+
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl
noinst_LIBRARIES = libcipher.a
-EXTRA_PROGRAMS = tiger twofish rndunix rndlinux
+# The configure script greps the module names from the following lines.
+# You must also add all these names to EXTRA_PROGRAMS some lines below
+# and EXTRA_foo_SOURCES entries.
+# Hmmm is there a more easy way to do this? (EXTRA_PROGRAMS
+# might also list programs which are not modules)
+# MODULES: rndunix rndlinux
+# MODULES: sha1 rmd160 md5 tiger
+# MODULES: twofish
+EXTRA_PROGRAMS = rndunix rndlinux \
+ sha1 rmd160 md5 tiger \
+ twofish
+
+EXTRA_rndlinux_SOURCES = rndlinux.c
+EXTRA_rndunix_SOURCES = rndunix.c
+EXTRA_md5_SOURCES = md5.c
+EXTRA_rmd160_SOURCES = rmd160.c
+EXTRA_sha1_SOURCES = sha1.c
+EXTRA_tiger_SOURCES = tiger.c
+EXTRA_twofish_SOURCES = twofish.c
+
+
if ENABLE_GNUPG_EXTENSIONS
-pkglib_PROGRAMS = @DYNAMIC_CIPHER_MODS@ @DYNAMIC_RANDOM_MODS@
+pkglib_PROGRAMS = @DYNAMIC_CIPHER_MODS@
else
pkglib_PROGRAMS =
endif
@@ -27,37 +48,41 @@ libcipher_a_SOURCES = cipher.c \
cast5.h \
elgamal.c \
elgamal.h \
- md5.c \
- md5.h \
primegen.c \
random.h \
random.c \
rand-internal.h \
rmd.h \
- rmd160.c \
- sha1.h \
- sha1.c \
dsa.h \
dsa.c \
g10c.c \
- smallprime.c
+ smallprime.c \
+ construct.c
+# configure creates the constructor file
+BUILT_SOURCES = construct.c
-EXTRA_libcipher_a_SOURCES = rndlinux.c rndunix.c
-EXTRA_tiger_SOURCES = tiger.c
-EXTRA_twofish_SOURCES = twofish.c
-libcipher_a_DEPENDENCIES = @STATIC_RANDOM_OBJS@ @STATIC_CIPHER_OBJS@
-libcipher_a_LIBADD = @STATIC_RANDOM_OBJS@ @STATIC_CIPHER_OBJS@
+libcipher_a_DEPENDENCIES = @STATIC_CIPHER_OBJS@
+libcipher_a_LIBADD = @STATIC_CIPHER_OBJS@
+
+# If I remember it correct, automake 1.4 has a feature to set
+# fooFLAGS depending on the program. So we should check it out.
tiger: $(srcdir)/tiger.c
`echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o tiger $(srcdir)/tiger.c | \
- sed -e 's/-O[2-9]*/-O1/' `
+ sed -e 's/-O[2-9]*/-O1/g' `
+
+tiger.o: $(srcdir)/tiger.c
+ `echo $(COMPILE) $(srcdir)/tiger.c | sed -e 's/-O[2-9]*/-O1/g' `
twofish: $(srcdir)/twofish.c
`echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c | \
- sed -e 's/-O[0-9]*/ /' `
+ sed -e 's/-O[0-9]*/ /g' `
+
+twofish.o: $(srcdir)/twofish.c
+ `echo $(COMPILE) $(srcdir)/twofish.c | sed -e 's/-O[0-9]*/ /g' `
rndunix: $(srcdir)/rndunix.c
diff --git a/cipher/blowfish.c b/cipher/blowfish.c
index 3bbc03835..8cffa8b3e 100644
--- a/cipher/blowfish.c
+++ b/cipher/blowfish.c
@@ -37,6 +37,7 @@
#include "types.h"
#include "errors.h"
#include "blowfish.h"
+#include "dynload.h"
diff --git a/cipher/cipher.c b/cipher/cipher.c
index f27eec397..37d60251b 100644
--- a/cipher/cipher.c
+++ b/cipher/cipher.c
@@ -18,8 +18,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
-#define DEFINES_CIPHER_HANDLE 1
-
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
@@ -160,6 +158,7 @@ load_cipher_modules()
int any = 0;
if( !initialized ) {
+ cipher_modules_constructor();
setup_cipher_table(); /* load static modules on the first call */
initialized = 1;
return 1;
diff --git a/cipher/dynload.c b/cipher/dynload.c
index 6b9263e18..b8c7c67d8 100644
--- a/cipher/dynload.c
+++ b/cipher/dynload.c
@@ -66,6 +66,7 @@ typedef struct {
int seq1;
int seq2;
void *sym;
+ int reqalgo;
} ENUMCONTEXT;
@@ -323,6 +324,7 @@ enum_gnupgext_digests( void **enum_context,
if( !*enum_context ) { /* init context */
ctx = m_alloc_clear( sizeof( *ctx ) );
ctx->r = extensions;
+ ctx->reqalgo = *algo;
*enum_context = ctx;
}
else if( !algo ) { /* release the context */
@@ -333,6 +335,7 @@ enum_gnupgext_digests( void **enum_context,
else
ctx = *enum_context;
+ /* fixme: have a look at the hint string */
for( r = ctx->r; r; r = r->next ) {
int class, vers;
diff --git a/cipher/dynload.h b/cipher/dynload.h
index f22f5f3ee..792531cf0 100644
--- a/cipher/dynload.h
+++ b/cipher/dynload.h
@@ -20,6 +20,8 @@
#ifndef G10_CIPHER_DYNLOAD_H
#define G10_CIPHER_DYNLOAD_H
+#include "mpi.h"
+
void register_internal_cipher_extension( const char *module_id,
void * (*enumfunc)(int, int*, int*, int*) );
@@ -60,4 +62,7 @@ void (*dynload_getfnc_fast_random_poll(void)
)( void (*)(const void*, size_t, int), int );
+/** This function is in construct.c **/
+void cipher_modules_constructor(void);
+
#endif /*G10_CIPHER_DYNLOAD_H*/
diff --git a/cipher/md.c b/cipher/md.c
index 6e335db80..6c4d1124b 100644
--- a/cipher/md.c
+++ b/cipher/md.c
@@ -18,8 +18,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
-#define DEFINES_MD_HANDLE 1
-
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
@@ -30,8 +28,6 @@
#include "cipher.h"
#include "errors.h"
#include "dynload.h"
-#include "md5.h"
-#include "sha1.h"
#include "rmd.h"
@@ -57,7 +53,6 @@ struct md_digest_list_s {
static struct md_digest_list_s *digest_list;
-
static struct md_digest_list_s *
new_list_item( int algo,
const char *(*get_info)( int, size_t*,byte**, int*, int*,
@@ -79,33 +74,19 @@ new_list_item( int algo,
return r;
}
-/****************
- * Put the static entries into the table.
- */
-static void
-setup_digest_list()
-{
- struct md_digest_list_s *r;
-
- r = new_list_item( DIGEST_ALGO_MD5, md5_get_info );
- if( r ) { r->next = digest_list; digest_list = r; }
-
- r = new_list_item( DIGEST_ALGO_RMD160, rmd160_get_info );
- if( r ) { r->next = digest_list; digest_list = r; }
-
- r = new_list_item( DIGEST_ALGO_SHA1, sha1_get_info );
- if( r ) { r->next = digest_list; digest_list = r; }
-}
/****************
- * Try to load all modules and return true if new modules are available
+ * Try to load the modules with the requeste algorithm
+ * and return true if new modules are available
+ * If req_alog is -1 try to load all digest algorithms.
*/
static int
-load_digest_modules()
+load_digest_module( int req_algo )
{
- static int done = 0;
static int initialized = 0;
+ static u32 checked_algos[256/32];
+ static int checked_all = 0;
struct md_digest_list_s *r;
void *context = NULL;
int algo;
@@ -116,16 +97,24 @@ load_digest_modules()
void (**)(void*),byte *(**)(void*));
if( !initialized ) {
- setup_digest_list(); /* load static modules on the first call */
+ cipher_modules_constructor();
initialized = 1;
- return 1;
}
-
- if( done )
- return 0;
- done = 1;
+ algo = req_algo;
+ if( algo > 255 || !algo )
+ return 0; /* algorithm number too high (does not fit into out bitmap)*/
+ if( checked_all )
+ return 0; /* already called with -1 */
+ if( algo < 0 )
+ checked_all = 1;
+ else if( (checked_algos[algo/32] & (1 << (algo%32))) )
+ return 0; /* already checked and not found */
+ else
+ checked_algos[algo/32] |= (1 << (algo%32));
while( enum_gnupgext_digests( &context, &algo, &get_info ) ) {
+ if( req_algo != -1 && algo != req_algo )
+ continue;
for(r=digest_list; r; r = r->next )
if( r->algo == algo )
break;
@@ -144,6 +133,8 @@ load_digest_modules()
r->next = digest_list;
digest_list = r;
any = 1;
+ if( req_algo != -1 )
+ break;
}
enum_gnupgext_digests( &context, NULL, NULL );
return any;
@@ -163,7 +154,7 @@ string_to_digest_algo( const char *string )
for(r = digest_list; r; r = r->next )
if( !stricmp( r->name, string ) )
return r->algo;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module(-1) );
return 0;
}
@@ -180,7 +171,7 @@ digest_algo_to_string( int algo )
for(r = digest_list; r; r = r->next )
if( r->algo == algo )
return r->name;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
return NULL;
}
@@ -194,7 +185,7 @@ check_digest_algo( int algo )
for(r = digest_list; r; r = r->next )
if( r->algo == algo )
return 0;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module(algo) );
return G10ERR_DIGEST_ALGO;
}
@@ -241,7 +232,7 @@ md_enable( MD_HANDLE h, int algo )
for(r = digest_list; r; r = r->next )
if( r->algo == algo )
break;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
if( !r ) {
log_error("md_enable: algorithm %d not available\n", algo );
return;
@@ -456,7 +447,7 @@ md_digest_length( int algo )
if( r->algo == algo )
return r->mdlen;
}
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
log_error("WARNING: no length for md algo %d\n", algo);
return 0;
}
@@ -479,7 +470,7 @@ md_asn_oid( int algo, size_t *asnlen, size_t *mdlen )
return r->asnoid;
}
}
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
log_bug("no asn for md algo %d\n", algo);
return NULL;
}
diff --git a/cipher/md5.c b/cipher/md5.c
index 214e13727..6a53deda8 100644
--- a/cipher/md5.c
+++ b/cipher/md5.c
@@ -34,8 +34,8 @@
#include <string.h>
#include <assert.h>
#include "util.h"
-#include "md5.h"
#include "memory.h"
+#include "dynload.h"
typedef struct {
@@ -338,7 +338,7 @@ md5_read( MD5_CONTEXT *hd )
* Returns: A pointer to string describing the algorithm or NULL if
* the ALGO is invalid.
*/
-const char *
+static const char *
md5_get_info( int algo, size_t *contextsize,
byte **r_asnoid, int *r_asnlen, int *r_mdlen,
void (**r_init)( void *c ),
@@ -367,5 +367,58 @@ md5_get_info( int algo, size_t *contextsize,
}
+#ifndef IS_MODULE
+static
+#endif
+const char * const gnupgext_version = "MD5 ($Revision$)";
+
+static struct {
+ int class;
+ int version;
+ int value;
+ void (*func)(void);
+} func_table[] = {
+ { 10, 1, 0, (void(*)(void))md5_get_info },
+ { 11, 1, 1 },
+};
+
+
+#ifndef IS_MODULE
+static
+#endif
+void *
+gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
+{
+ void *ret;
+ int i = *sequence;
+
+ do {
+ if( i >= DIM(func_table) || i < 0 )
+ return NULL;
+ *class = func_table[i].class;
+ *vers = func_table[i].version;
+ switch( *class ) {
+ case 11: case 21: case 31: ret = &func_table[i].value; break;
+ default: ret = func_table[i].func; break;
+ }
+ i++;
+ } while( what && what != *class );
+
+ *sequence = i;
+ return ret;
+}
+
+
+
+
+#ifndef IS_MODULE
+void
+md5_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
+}
+#endif
+
+
/* end of file */
diff --git a/cipher/md5.h b/cipher/md5.h
deleted file mode 100644
index 89fc843cc..000000000
--- a/cipher/md5.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* md5.h - message digest 5
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_MD5_H
-#define G10_MD5_H
-
-
-const char *
-md5_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asn_len, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-
-#endif /*G10_MD5_H*/
diff --git a/cipher/pubkey.c b/cipher/pubkey.c
index 2ca8dd854..58ba00007 100644
--- a/cipher/pubkey.c
+++ b/cipher/pubkey.c
@@ -170,6 +170,7 @@ load_pubkey_modules()
if( !initialized ) {
+ cipher_modules_constructor();
setup_pubkey_table();
initialized = 1;
return 1;
diff --git a/cipher/random.c b/cipher/random.c
index b0bc832e6..bcd017d4c 100644
--- a/cipher/random.c
+++ b/cipher/random.c
@@ -116,16 +116,7 @@ initialize()
keypool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
: m_alloc_clear(POOLSIZE+BLOCKLEN);
is_initialized = 1;
-
- #if USE_RNDLINUX
- rndlinux_constructor();
- #elif USE_RNDUNIX
- rndunix_constructor();
- #elif USE_RNDW32
- #elif USE_RNDOS2
- #elif USE_RNDATARI
- #elif USE_RNDMVS
- #endif
+ cipher_modules_constructor();
}
void
diff --git a/cipher/rmd.h b/cipher/rmd.h
index 0c1fbad99..cd5c453a3 100644
--- a/cipher/rmd.h
+++ b/cipher/rmd.h
@@ -32,16 +32,4 @@ typedef struct {
void rmd160_init( RMD160_CONTEXT *hd );
void rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer );
-
-
-const char *
-rmd160_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asn_len, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-
#endif /*G10_RMD_H*/
diff --git a/cipher/rmd160.c b/cipher/rmd160.c
index 4d644756f..70904a144 100644
--- a/cipher/rmd160.c
+++ b/cipher/rmd160.c
@@ -27,6 +27,7 @@
#include "memory.h"
#include "rmd.h"
#include "cipher.h" /* only used for the rmd160_hash_buffer() prototype */
+#include "dynload.h"
/*********************************
* RIPEMD-160 is not patented, see (as of 25.10.97)
@@ -554,7 +555,7 @@ rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length )
* Returns: A pointer to string describing the algorithm or NULL if
* the ALGO is invalid.
*/
-const char *
+static const char *
rmd160_get_info( int algo, size_t *contextsize,
byte **r_asnoid, int *r_asnlen, int *r_mdlen,
void (**r_init)( void *c ),
@@ -582,3 +583,63 @@ rmd160_get_info( int algo, size_t *contextsize,
return "RIPEMD160";
}
+
+#ifndef IS_MODULE
+static
+#endif
+const char * const gnupgext_version = "RMD160 ($Revision$)";
+
+static struct {
+ int class;
+ int version;
+ int value;
+ void (*func)(void);
+} func_table[] = {
+ { 10, 1, 0, (void(*)(void))rmd160_get_info },
+ { 11, 1, 3 },
+};
+
+
+#ifndef IS_MODULE
+static
+#endif
+void *
+gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
+{
+ void *ret;
+ int i = *sequence;
+
+ do {
+ if( i >= DIM(func_table) || i < 0 ) {
+ return NULL;
+ }
+ *class = func_table[i].class;
+ *vers = func_table[i].version;
+ switch( *class ) {
+ case 11:
+ case 21:
+ case 31:
+ ret = &func_table[i].value;
+ break;
+ default:
+ ret = func_table[i].func;
+ break;
+ }
+ i++;
+ } while( what && what != *class );
+
+ *sequence = i;
+ return ret;
+}
+
+
+
+
+#ifndef IS_MODULE
+void
+rmd160_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
+}
+#endif
+
diff --git a/cipher/rndunix.c b/cipher/rndunix.c
index 716b02672..0132cd901 100644
--- a/cipher/rndunix.c
+++ b/cipher/rndunix.c
@@ -642,6 +642,9 @@ start_gatherer( int pipefd )
select(0, NULL, NULL, NULL, &tv);
continue;
}
+ if( errno == EPIPE ) /* parent has exited, so give up */
+ exit(0);
+
/* we can't do very much here because stderr is closed */
if( dbgfp )
fprintf(dbgfp, "gatherer can't write to pipe: %s\n",
diff --git a/cipher/sha1.c b/cipher/sha1.c
index b3da296f8..04bdbac98 100644
--- a/cipher/sha1.c
+++ b/cipher/sha1.c
@@ -38,7 +38,7 @@
#include <assert.h>
#include "util.h"
#include "memory.h"
-#include "sha1.h"
+#include "dynload.h"
typedef struct {
@@ -331,7 +331,7 @@ sha1_read( SHA1_CONTEXT *hd )
* Returns: A pointer to string describing the algorithm or NULL if
* the ALGO is invalid.
*/
-const char *
+static const char *
sha1_get_info( int algo, size_t *contextsize,
byte **r_asnoid, int *r_asnlen, int *r_mdlen,
void (**r_init)( void *c ),
@@ -358,3 +358,64 @@ sha1_get_info( int algo, size_t *contextsize,
return "SHA1";
}
+
+
+#ifndef IS_MODULE
+static
+#endif
+const char * const gnupgext_version = "SHA1 ($Revision$)";
+
+static struct {
+ int class;
+ int version;
+ int value;
+ void (*func)(void);
+} func_table[] = {
+ { 10, 1, 0, (void(*)(void))sha1_get_info },
+ { 11, 1, 2 },
+};
+
+
+#ifndef IS_MODULE
+static
+#endif
+void *
+gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
+{
+ void *ret;
+ int i = *sequence;
+
+ do {
+ if( i >= DIM(func_table) || i < 0 ) {
+ return NULL;
+ }
+ *class = func_table[i].class;
+ *vers = func_table[i].version;
+ switch( *class ) {
+ case 11:
+ case 21:
+ case 31:
+ ret = &func_table[i].value;
+ break;
+ default:
+ ret = func_table[i].func;
+ break;
+ }
+ i++;
+ } while( what && what != *class );
+
+ *sequence = i;
+ return ret;
+}
+
+
+
+
+#ifndef IS_MODULE
+void
+sha1_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
+}
+#endif
+
diff --git a/cipher/sha1.h b/cipher/sha1.h
deleted file mode 100644
index 3d9302671..000000000
--- a/cipher/sha1.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* sha1.h - SHA1 hash function
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_SHA1_H
-#define G10_SHA1_H
-
-
-const char *
-sha1_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asn_len, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-#endif /*G10_SHA1_H*/
diff --git a/cipher/tiger.c b/cipher/tiger.c
index 20d17cae0..0765f0bbd 100644
--- a/cipher/tiger.c
+++ b/cipher/tiger.c
@@ -909,6 +909,9 @@ tiger_get_info( int algo, size_t *contextsize,
+#ifndef IS_MODULE
+static
+#endif
const char * const gnupgext_version = "TIGER ($Revision$)";
static struct {
@@ -938,6 +941,9 @@ static struct {
* version = interface version of the function/pointer
* (currently this is 1 for all functions)
*/
+#ifndef IS_MODULE
+static
+#endif
void *
gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
{
@@ -969,5 +975,17 @@ gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
return ret;
}
+
+
+#ifndef IS_MODULE
+void
+tiger_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version,
+ gnupgext_enum_func );
+}
+#endif
+
+
#endif /* HAVE_U64_TYPEDEF */
diff --git a/cipher/twofish.c b/cipher/twofish.c
index 6ff7dee9f..d1e171bad 100644
--- a/cipher/twofish.c
+++ b/cipher/twofish.c
@@ -24,6 +24,7 @@
#include "types.h" /* for byte and u32 typedefs */
#include "util.h"
#include "errors.h"
+#include "dynload.h"
/* Prototype for the self-test function. */
@@ -462,7 +463,7 @@ twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen)
static const char *selftest_failed=0;
/* Check key length. */
- if( keylen != 16 )
+ if( keylen != 16 ) /* enhance this code for 256 bit keys */
return G10ERR_WRONG_KEYLEN;
/* Do self-test if necessary. */
@@ -840,16 +841,18 @@ twofish_get_info (int algo, size_t *keylen,
void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
)
{
- *keylen = 128;
+ *keylen = algo==10? 256 : 128;
*blocksize = 16;
*contextsize = sizeof (TWOFISH_context);
*r_setkey = FNCCAST_SETKEY (twofish_setkey);
*r_encrypt= FNCCAST_CRYPT (twofish_encrypt);
*r_decrypt= FNCCAST_CRYPT (twofish_decrypt);
+ if( algo == 10 )
+ return "TWOFISH";
if (algo == 102) /* This algorithm number is assigned for
* experiments, so we can use it */
- return "TWOFISH";
+ return "TWOFISH128";
return NULL;
}
@@ -863,6 +866,7 @@ static struct {
void (*func)(void);
} func_table[] = {
{ 20, 1, 0, (void(*)(void))twofish_get_info },
+ { 21, 1, 10 },
{ 21, 1, 102 },
};
diff --git a/configure.in b/configure.in
index a9975bf69..6ea0a81ac 100644
--- a/configure.in
+++ b/configure.in
@@ -15,11 +15,15 @@ AM_CONFIG_HEADER(config.h)
VERSION=`cat $srcdir/VERSION`
PACKAGE=gnupg
ALL_LINGUAS="de es_ES fr it pl pt_BR ru"
+static_modules="sha1 md5 rmd160"
AC_SUBST(VERSION)
AC_SUBST(PACKAGE)
AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+MODULES_IN_CIPHER=`awk '/# MODULES: / { for(i=3;i<=NF;i++) print $i}' \
+ $srcdir/cipher/Makefile.am`
+
AC_MSG_CHECKING([whether use of /dev/random is requested])
AC_ARG_ENABLE(dev-random,
[ --disable-dev-random disable the use of dev random],
@@ -91,6 +95,8 @@ if test "$GCC" = yes; then
CFLAGS="$CFLAGS -Wall"
fi
+try_gettext=yes
+try_gdbm=yes
case "${target}" in
i386--mingw32)
# special stuff for Windoze NT
@@ -99,9 +105,19 @@ case "${target}" in
CPP="i386--mingw32-gcc -E"
RANLIB="i386--mingw32-ranlib"
ac_cv_have_dev_random=no
- AC_DEFINE(USE_RNDW32)
AC_DEFINE(USE_ONLY_8DOT3)
AC_DEFINE(HAVE_DRIVE_LETTERS)
+ AC_DEFINE(HAVE_DOSISH_SYSTEM)
+ try_gettext="no"
+ try_gdbm="no"
+ ;;
+ i386-emx-os2)
+ # OS/2 with the EMX environment
+ ac_cv_have_dev_random=no
+ AC_DEFINE(HAVE_DRIVE_LETTERS)
+ AC_DEFINE(HAVE_DOSISH_SYSTEM)
+ try_gettext="no"
+ try_gdbm="no"
;;
*-*-hpux*)
if test -z "$GCC" ; then
@@ -126,6 +142,9 @@ case "${target}" in
i386--mingw32)
PRINTABLE_OS_NAME="MingW32"
;;
+ i386-emx-os2)
+ PRINTABLE_OS_NAME="OS/2"
+ ;;
*-linux*)
PRINTABLE_OS_NAME="GNU/Linux"
;;
@@ -154,9 +173,13 @@ AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM")
dnl Checks for libraries.
+if test "$try_gettext" = yes; then
AM_GNU_GETTEXT
+fi
+if test "$try_gdbm" = yes; then
AC_CHECK_LIB(gdbm,gdbm_firstkey)
+fi
if test "$try_dynload" = yes ; then
@@ -252,7 +275,6 @@ AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
if test "$ac_cv_have_dev_random" = yes; then
AC_DEFINE(HAVE_DEV_RANDOM)
- AC_DEFINE(USE_RNDLINUX)
fi
else
AC_MSG_CHECKING(for random device)
@@ -262,42 +284,93 @@ fi
dnl
-dnl Figure how to link the random modules
+dnl Figure out the default linkage mode for cipher modules
dnl
+dnl (We always need a static rmd160)
+static_modules="$static_modules rmd160"
if test "$ac_cv_have_dev_random" = yes; then
- AC_DEFINE(USE_RNDLINUX)
- STATIC_RANDOM_OBJS="rndlinux.o"
- DYNAMIC_RANDOM_MODS=""
+ static_modules="$static_modules rndlinux"
else
case "${target}" in
i386--mingw32)
- AC_DEFINE(USE_RNDW32)
- STATIC_RANDOM_OBJS=""
- DYNAMIC_RANDOM_MODS=""
+ static_modules="$static_modules rndw32"
+ ;;
+ i386-emx-os2)
+ static_modules="$static_modules rndos2"
;;
m68k-atari-mint)
- AC_DEFINE(USE_RNDATARI)
- STATIC_RANDOM_OBJS=""
- DYNAMIC_RANDOM_MODS=""
+ static_modules="$static_modules rndatari"
;;
*)
- AC_DEFINE(USE_RNDUNIX)
- STATIC_RANDOM_OBJS="rndunix.o"
- DYNAMIC_RANDOM_MODS=""
+ static_modules="$static_modules rndunix"
;;
esac
fi
-AC_SUBST(STATIC_RANDOM_OBJS)
-AC_SUBST(DYNAMIC_RANDOM_MODS)
+dnl
+dnl Parse the modules list and build the list
+dnl of static and dymically linked modules
+dnl
+STATIC_CIPHER_NAMES=""
+STATIC_CIPHER_OBJS=""
+DYNAMIC_CIPHER_MODS=""
+GNUPG_MSG_PRINT([dynamically linked cipher modules:])
+for name in $MODULES_IN_CIPHER; do
+ x="no"
+ for i in $static_modules; do
+ if test "$name" = "$i" ; then
+ x="yes"
+ fi
+ done;
+ if test $x = yes; then
+ STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name"
+ STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o"
+ else
+ DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name"
+ GNUPG_MSG_PRINT([$name])
+ fi
+done
+AC_MSG_RESULT()
+AC_SUBST(STATIC_CIPHER_OBJS)
+AC_SUBST(STATIC_CIPHER_NAMES)
+AC_SUBST(DYNAMIC_CIPHER_MODS)
+
+dnl
+dnl And build the constructor file
+dnl
+cat <<EOF >cipher/construct.c
+/* automatically generated by configure - do not edit */
+
+EOF
+GNUPG_MSG_PRINT([statically linked cipher modules:])
+for name in $STATIC_CIPHER_NAMES; do
+ echo "void ${name}_constructor(void);" >>cipher/construct.c
+ GNUPG_MSG_PRINT([$name])
+done
+AC_MSG_RESULT()
+cat <<EOF >>cipher/construct.c
+
+void
+cipher_modules_constructor(void)
+{
+ static int done = 0;
+ if( done )
+ return;
+ done = 1;
+
+EOF
+for name in $STATIC_CIPHER_NAMES; do
+ echo " ${name}_constructor();" >>cipher/construct.c
+done
+echo '}' >>cipher/construct.c
+
+
dnl
dnl Figure how to link the cipher modules
dnl
dnl (form now these are only dynamic)
-STATIC_CIPHER_OBJS=""
-DYNAMIC_CIPHER_MODS="twofish tiger"
AC_SUBST(STATIC_CIPHER_OBJS)
AC_SUBST(DYNAMIC_CIPHER_MODS)
@@ -351,6 +424,10 @@ fi
fi
AC_SUBST(ZLIBS)
+if echo "$VERSION" | grep '[a-zA-Z]' >/dev/null ; then
+ AC_DEFINE(IS_DEVELOPMENT_VERSION)
+fi
+
GNUPG_DO_LINK_FILES
diff --git a/doc/DETAILS b/doc/DETAILS
index 5e765728d..ed2ad04c3 100644
--- a/doc/DETAILS
+++ b/doc/DETAILS
@@ -79,7 +79,7 @@ more arguments in future versions.
The used key has been revoked by his owner. No arguments yet.
BADARMOR
- The ascii armor is corrupted. No arguments yet.
+ The ASCII armor is corrupted. No arguments yet.
RSA_OR_IDEA
The RSA or IDEA algorithms has been used in the data. A
@@ -175,7 +175,7 @@ Record type 2: (directory record)
1 u32 cache record
1 byte ownertrust
1 byte dirflag
- 1 byte validity
+ 1 byte validity of the key calucalted over all user ids
19 byte reserved
@@ -208,7 +208,7 @@ Record type 4: (uid record)
1 u32 pointer to preference record
1 u32 siglist list of valid signatures
1 byte uidflags
- 1 byte reserved
+ 1 byte validity of the key calculated over this user id
20 bytes ripemd160 hash of the username.
@@ -418,7 +418,7 @@ Usage of gdbm files for keyrings
================================
The key to store the keyblock is it's fingerprint, other records
are used for secondary keys. fingerprints are always 20 bytes
- where 16 bit fingerprints are appded with zero.
+ where 16 bit fingerprints are appended with zero.
The first byte of the key gives some information on the type of the
key.
1 = key is a 20 bit fingerprint (16 bytes fpr are padded with zeroes)
diff --git a/doc/FAQ b/doc/FAQ
index b61bc5461..be2b6dc15 100644
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -23,11 +23,10 @@
GNUPG is also useful for signing things. Things that are encrypted with
the secret key can be decrypted with the public key. To sign something, a
- hash is taken of the data, and then the hash is in some form encoded
- with the secret
- key. If someone has your public key, they can verify that it is from
- you and that it hasn't changed by checking the encoded form of the
- hash with the public key.
+ hash is taken of the data, and then the hash is in some form encoded with
+ the secret key. If someone has your public key, they can verify that it
+ is from you and that it hasn't changed by checking the encoded form of
+ the hash with the public key.
A keyring is just a large file that stores keys. You have a public keyring
where you store yours and your friend's public keys. You have a secret
@@ -63,12 +62,12 @@
or at a meeting of your local GNU/Linux User Group.
Hmm, what else. You may use the option "-o filename" to force output
- to this filename (use "-" to force output to stdout).
- "-r" just lets you specify the recipient (which public key you encrypt with)
- on the command line instead of typing it interactively.
+ to this filename (use "-" to force output to stdout). "-r" just lets you
+ specify the recipient (which public key you encrypt with) on the command
+ line instead of typing it interactively.
Oh yeah, this is important. By default all data is encrypted in some weird
- binary format. If you want to have things appear in ascii text that is
+ binary format. If you want to have things appear in ASCII text that is
readable, just add the '-a' option. But the preferred method is to use
a MIME aware mail reader (Mutt, Pine and many more).
@@ -94,31 +93,31 @@
a v3 packet. GNUPG is the only program which had used
these v3 ElGamal keys - so this assumption is quite safe.
- Q: Why is PGP 5.x not able to encrypt messages with my public key.
+ Q: Why is PGP 5.x not able to encrypt messages with my public key?
A: PGP Inc refuses to accept ElGamal keys of type 20 even for
encryption. They only supports type 16 (which are identical
- at least for decryption). To be better interoperable, GNUPG
+ at least for decryption). To be more inter-operable, GNUPG
(starting with version 0.3.3) now also uses type 16 for the
ElGamal subkey which is created if the default key algorithm
is chosen. You may add an type 16 ElGamal key to your public
key which is easy as your key signatures are still valid.
- Q: Why is PGP 5.x not able to verify my messages.
+ Q: Why is PGP 5.x not able to verify my messages?
A: PGP 5.x does not accept V4 signatures for data material but
OpenPGP requires generation of V3 signatures for all kind of
data. Use the option "--force-v3-sigs" to generate V3 signatures
for data.
Q: I can't delete an user id because it is already deleted on my
- public keyring.
+ public keyring?
A: Because you can only select from the public key ring, there is
- no direct way to do this. However it is not so complicated
- do to it anyway: Create a new user id with exactly the same name,
- you will notice that there are two identical user ids on the
- secret ring now. Now select this user id and delete it; both
- user ids from the secret ring will be removed.
+ no direct way to do this. However it is not very complicated
+ to do it anyway. Create a new user id with exactly the same name
+ and you will see that there are now two identical user ids on the
+ secret ring. Now select this user id and delete it. Both user
+ ids will be removed from the secret ring.
- Q: How can I encrypt a message in way pgp 2.x is able to decrypt it later?
+ Q: How can I encrypt a message so that pgp 2.x is able to decrypt it?
A: You can't do that because pgp 2.x normally uses IDEA which is not
supported by GNUPG because it is patented, but if you have a modified
version of PGP you can try this:
@@ -130,11 +129,11 @@
gpg -c --cipher-algo 3des --compress-algo 1 --no-comment myfile
- You may replace "3des" by "cast5"; "blowfish" does not work with
+ You may replace "3des" by "cast5". "blowfish" does not work with
all versions of pgp5. You may also want to put
no-comment
compress-algo 1
- into your ~/.gnupg/options file - this does not affect the normal
+ into your ~/.gnupg/options file - this does not affect normal
gnupg operation.
@@ -142,42 +141,40 @@
A: The problem here is that we need a lot of random bytes and for that
we (on Linux the /dev/random device) must collect some random data.
It is really not easy to fill the Linux internal entropy buffer; I
- talked to Ted Ts'o and he commited that the best way to fill the
- buffer is to play with your keyboard.
- Good security has it's price.
- What I do is to hit several times on the shift,control, alternate,
- capslock keys, as these keys do not produce any output to the screen.
- This way you get your keys really fast (it's the same thing pgp2 does).
+ talked to Ted Ts'o and he commented that the best way to fill the buffer
+ is to play with your keyboard. Good security has it's price. What I do
+ is to hit several times on the shift, control, alternate, and capslock
+ keys, because these keys do not produce output to the screen. This way
+ you get your keys really fast (it's the same thing pgp2 does).
Another problem might be another program which eats up your random bytes
(a program (look at your daemons) that reads from /dev/[u]random).
Q: And it really takes long when I work on a remote system. Why?
- A: Don't do this at all!
- You should never create keys or even use gnupg on a remote system because
- you normally have
- no physical control over your secret keyring (which is in most cases
- vulnerable to advanced dictionary attacks) - I strongly encourage
- everyone to only create keys on a local computer (a disconnected
- laptop is probably the best choice) and if you need it on your
- connected box (I know: We all do this) be sure to have a strong
- password for your account, your secret key and trust your Root.
+ A: Don't do this at all! You should never create keys or even use gnupg
+ on a remote system because you normally have no physical control over
+ your secret keyring (which is in most cases vulnerable to advanced
+ dictionary attacks) - I strongly encourage everyone to only create keys
+ on a local computer (a disconnected laptop is probably the best choice)
+ and if you need it on your connected box (I know: We all do this) be
+ sure to have a strong password for your account and for your secret key
+ and trust your Root.
When I check gnupg on a remote system via ssh (I have no Alpha here ;-)
- I have the same problem too: it takes *very* long to create the keys,
- so I use a special option --quick-random to generate insecure keys which are
- only good for some tests.
+ I have the same problem. It takes a *very* long time to create the
+ keys, so I use a special option, --quick-random, to generate insecure
+ keys which are only good for some tests.
Q: How does the whole trust thing work?
- A: It works more or less like PGP. The difference is, that the trust is
- computed at the time it is needed; this is one of the reasons for the
+ A: It works more or less like PGP. The difference is that the trust is
+ computed at the time it is needed. This is one of the reasons for the
trustdb which holds a list of valid key signatures. If you are not
running in batch mode you will be asked to assign a trust parameter
(ownertrust) to a key. I have plans to use a cache for calculated
trust values to speed up calculation.
- You can see the validity (calculated trust value) using this command:
+ You can see the validity (calculated trust value) using this command.
gpgm --list-keys --with-colons
@@ -193,13 +190,13 @@
is only used for keys for which
the secret key is also available.
- You can get a list of the assigned trust values (how far you trust
- the owner to correctly sign another one's key)
+ You can get a list of the assigned trust values (how much you trust
+ the owner to correctly sign another person's key)
gpgm --list-ownertrust
- The first field is the fingerprint of the primary key, the second one
- the assigned value:
+ The first field is the fingerprint of the primary key, the second field
+ is the assigned value:
- = No Ownertrust value yet assigned.
n = Never trust this keyholder to correctly verify others signatures.
@@ -207,42 +204,42 @@
f = Assume that the key holder really knows how to sign keys.
u = No need to trust ourself because we have the secret key.
- Please keep these values confidential, as they express some opinions of
- you about others. PGP does store these information with the keyring, so
- it is not a good idea to publish the keyring instead of exporting the
- keyring - gnupg stores the trust in the trust-DB and therefor it is okay
- to give the keyring away (but we have a --export command too).
+ Keep these values confidential because they express your opinions
+ about others. PGP stores this information with the keyring thus
+ it is not a good idea to publish a PGP keyring instead of exporting the
+ keyring. gnupg stores the trust in the trust-DB so it is okay
+ to give a gpg keyring away (but we have a --export command too).
Q: What is the difference between options and commands?
- A: If you do a "gpg --help", you will get two separate lists. The first is a list
- of commands. The second is a list of options. Whenever you run GPG, you *must*
- pick exactly one command (**with one exception, see below). You *may* pick one
- or more options. The command should, just by convention, come at the end of the
- argument list, after all the options. If the command takes a file (all the
- basic ones do), the filename comes at the very end. So the basic way to
- run gpg is:
+ A: If you do a "gpg --help", you will get two separate lists. The first is
+ a list of commands. The second is a list of options. Whenever you run GPG,
+ you *must* pick exactly one command (**with one exception, see below). You
+ *may* pick one or more options. The command should, just by convention,
+ come at the end of the argument list, after all the options. If the
+ command takes a file (all the basic ones do), the filename comes at the
+ very end. So the basic way to run gpg is:
gpg [--option something] [--option2] [--option3 something] --command file
Some options take arguments, for example the --output option (which can be
- abbreviated -o) is an option which takes a filename. The option's argument
- must follow immediately after the option itself: otherwise gpg doesn't know
+ abbreviated -o) is an option that takes a filename. The option's argument
+ must follow immediately after the option itself, otherwise gpg doesn't know
which option the argument is supposed to go with. As an option, --output and
its filename must come before the command. The --remote-user (-r) option takes
a name or keyid to encrypt the message to, which must come right after the -r
- argument. The --encrypt (or -e) command comes after all the options, followed
- by the file you wish to encrypt. So use:
+ argument. The --encrypt (or -e) command comes after all the options followed
+ by the file you wish to encrypt. So use
gpg -r alice -o secret.txt -e test.txt
- If you write the options out in full, it is easier to read:
+ If you write the options out in full, it is easier to read
gpg --remote-user alice --output secret.txt --encrypt test.txt
If you're saving it in a file called ".txt" then you'd probably expect to see
- ascii-armored text in there, so you need to add the --armor (-a) option,
- which doesn't take any arguments:
+ ASCII-armored text in there, so you need to add the --armor (-a) option,
+ which doesn't take any arguments.
gpg --armor --remote-user alice --output secret.txt --encrypt test.txt
@@ -251,7 +248,7 @@
gpg [--armor] [--remote-user alice] [--output secret.txt] --encrypt test.txt
- The optional parts can be rearranged any way you want:
+ The optional parts can be rearranged any way you want.
gpg --output secret.txt --remote-user alice --armor --encrypt test.txt
@@ -268,30 +265,30 @@
Q: What kind of output is this: "key C26EE891.298, uid 09FB: ...."?
A: This is the internal representation of an user id in the trustdb.
"C26EE891" is the keyid, "298" is the local id (a record number
- in the trustdb) and "09FB" are the last two bytes of a ripe-md-160
+ in the trustdb) and "09FB" is the last two bytes of a ripe-md-160
hash of the user id for this key.
Q: What is trust, validity and ownertrust?
A: "ownertrust" is used instead of "trust" to make clear that
- this is the value you have assigned to key to express, how far you
+ this is the value you have assigned to key to express how much you
trust the owner of this key to correctly sign (and so introduce)
- other keys. "validity" or calculated trust is a value which
- says, how far the gnupg thinks a key is valid (that it really belongs
+ other keys. "validity", or calculated trust, is a value which
+ says how much the gnupg thinks a key is valid (that it really belongs
to the one who claims to be the owner of the key).
For more see the chapter "The Web of Trust" in the
Manual [gpg: Oops: Internal error: manual not found - sorry]
- Q: How do interpret some of the informational outputs:
- A: While checking the validness of a key, GnuPG sometimes print
- some informations which are prefixed with information about
- the checked item:
+ Q: How do interpret some of the informational outputs?
+ A: While checking the validity of a key, GnuPG sometimes prints
+ some information which is prefixed with information about
+ the checked item.
"key 12345678.3456"
This is about the key with key ID 12345678 and the internal
number 3456, which is the record number of the so called
directory record in the trustdb.
"uid 12345678.3456/ACDE"
- This is about the user ID for the same key; to identify the
+ This is about the user ID for the same key. To identify the
user ID the last two bytes of a ripe-md-160 over the user ID
ring is printed.
"sig 12345678.3456/ACDE/9A8B7C6D"
@@ -302,15 +299,14 @@
Q: How do I sign a patch file?
A: Use "gpg --clearsign --not-dash-escaped ...".
- The problem with --clearsign is
- that all lines starting with a dash are quoted with "- "; obviously
- diff produces many of lines starting with a dash and these are
- then quoted and that is not good for patch ;-). In order to use
- a patch file without removing the cleartext signature, the special
- option --not-dash-escaped may be used to suppress generation of
- these escape sequences. You should not mail such a patch because
- spaces and line endings are also subject to the signature and a mailer
- may not preserve these. If you want to mail a file you can simply sign
- it using your MUA.
+ The problem with --clearsign is that all lines starting with a dash are
+ quoted with "- "; obviously diff produces many of lines starting with a
+ dash and these are then quoted and that is not good for patch ;-). To
+ use a patch file without removing the cleartext signature, the special
+ option --not-dash-escaped may be used to suppress generation of these
+ escape sequences. You should not mail such a patch because spaces and
+ line endings are also subject to the signature and a mailer may not
+ preserve these. If you want to mail a file you can simply sign it
+ using your MUA.
diff --git a/doc/gpg.1pod b/doc/gpg.1pod
index 21cc126bf..f7e5a4ce8 100644
--- a/doc/gpg.1pod
+++ b/doc/gpg.1pod
@@ -67,7 +67,7 @@ B<-k> [I<username>] [I<keyring>]
Kludge to be somewhat compatible with PGP.
Without arguments, all public keyrings are listed.
With one argument, only I<keyring> is listed.
- Special combinations are also allowed, but it may
+ 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.
@@ -130,7 +130,7 @@ B<--edit-key> I<name>
Remove a subkey.
B<expire>
Change the key expiration time. If a key is
- select, the time of this key will be changed.
+ selected, the time of this key will be changed.
With no selection the key expiration of the
primary key is changed.
B<passwd>
@@ -154,10 +154,10 @@ B<--edit-key> I<name>
key rings.
The listing shows you the key with its secondary
keys and all user ids. Selected keys or user ids
- indicated by an asterisk. The trust value is
- displayed with the primary key: The first one is the
- assigned owner trust and the second the calculated
- trust value; letters are used for the values:
+ 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<e> Trust calculation has failed.
B<q> Not enough information for calculation.
@@ -201,11 +201,11 @@ B<--export-secret-keys> [I<names>]
B<--import>, B<--fast-import>
Import/merge keys. The fast version does not build
- the trustdb; this can be deon at anytime with the
+ the trustdb; this can be done at any time with the
command B<--update-trustdb>.
B<--export-ownertrust>
- List the assigned ownertrust values in ascii format
+ List the assigned ownertrust values in ASCII format
for backup purposes [B<gpgm> only].
B<--import-ownertrust> [I<filename>]
@@ -215,9 +215,9 @@ B<--import-ownertrust> [I<filename>]
=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
-arguments if required. Lines with a hash as the first non-white-space
+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.
@@ -250,7 +250,7 @@ B<--trusted-key> I<keyid>
You may also use this option to skip the verification
of your own secret keys which is normally done every
- time GnuPG starts up: Use for I<keyid> the one of
+ time GnuPG starts up by using the I<keyid> of
your key.
B<-r> I<name>, B<--recipient> I<name>
@@ -268,7 +268,7 @@ B<-q>, B<--quiet>
B<-z> I<n>
Set compress level to I<n>. A value of 0 for I<n>
disables compression. Default is to use the default
- compression level of zlib (which is 6).
+ compression level of zlib (normally 6).
B<-t>, B<--textmode>
Use canonical text mode. If B<-t> (but not
@@ -276,17 +276,17 @@ B<-t>, B<--textmode>
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 os signatures.
+ to selected the type of the signature.
B<-n>, B<--dry-run>
Don't make any changes (not yet implemented).
B<--batch>
- Batch mode; never ask, do not allow interactive
+ Use batch mode. Never ask, do not allow interactive
commands.
B<--no-batch>
- Disable batch mode; this may be used if B<batch>
+ Disable batch mode. This may be used if B<batch>
is used in the options file.
B<--yes>
@@ -297,7 +297,7 @@ B<--no>
B<--keyserver> I<name>
Use I<name> to lookup keys which are not yet in
- your keyring; this is only done while verifying
+ 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
@@ -374,11 +374,11 @@ B<--set-filename> I<string>
B<--completes-needed> I<n>
Number of completely trusted users to introduce a new
- key signator (defaults to 1).
+ key signer (defaults to 1).
B<--marginals-needed> I<n>
Number of marginally trusted users to introduce a new
- key signator (defaults to 3)
+ key signer (defaults to 3)
B<--max-cert-depth> I<n>
Maximum depth of a certification chain (default is 5).
@@ -409,7 +409,7 @@ B<--s2k-digest-algo> I<name>
encryption if B<--digest-algo> is not given.
B<--s2k-mode> I<number>
- Selects how passphrases are mangled: A number of I<0>
+ 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.
@@ -418,12 +418,12 @@ B<--s2k-mode> I<number>
B<--compress-algo> I<number>
Use compress algorithm I<number>. 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.
+ 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<name>
Use I<name> as message digest algorithm. Running the
@@ -438,21 +438,20 @@ B<--throw-keyid>
process because all available secret keys are tried.
B<--not-dash-escaped>
- This option changes the behavior of cleartext signature
+ 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 somewhere at the
- beginning of a line - patch files don't have this.
- A special armor header line tells GnuPG about this
- cleartext signature framework.
+ 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. Because this would violate
- rfc2440, this option is not enabled per default.
+ 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<n>
Read the passphrase from file descriptor I<n>. If you use
@@ -464,10 +463,10 @@ B<--rfc1991>
Try to be more RFC1991 (PGP 2.x) compliant.
B<--force-v3-sigs>
- OpenPGP states that a implementation should generate
- v4 signatures but PGP 5.x does only recognize such
- signatures on key material. This options forces
- v3 signatures for signatures on data.
+ 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<--lock-once>
Lock the file the first time a lock is requested
@@ -510,7 +509,7 @@ B<-h>, B<--help>
=head1 RETURN VALUE
The Program returns 0 if everything was fine, 1 if at least
-a signature was bad and other errorcode for fatal errors.
+a signature was bad, and other error codes for fatal errors.
=head1 EXAMPLES
@@ -552,15 +551,15 @@ Use a B<good> password for your user account and a B<good> passphrase
to protect your secret key. This passphrase is the weakest part of the
whole system. Programs to do dictionary attacks on your secret keyring
are very easy to write and so you should protect your B<~/.gnupg/>
-directory very good.
+directory very well.
Keep in mind that, if this program is used over a network (telnet), it
is B<very> easy to spy out your passphrase!
=head1 BUGS
-On many systems this program should be installed as setuid(root); this
-is necessary to lock some pages of memory. If you get no warning message
-about insecure memory your OS kernel supports locking without being root;
-setuid is dropped as soon as this memory is allocated.
+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.
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 8a09ff324..61551dc5d 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,25 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * 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 <wk@isil.d.shuttle.de>
* getkey.c: Changed the internal design to allow simultaneous
diff --git a/g10/armor.c b/g10/armor.c
index 663e824a6..5aba3322a 100644
--- a/g10/armor.c
+++ b/g10/armor.c
@@ -876,23 +876,26 @@ armor_filter( void *opaque, int control,
iobuf_writestr(a, "-----");
iobuf_writestr(a, head_strings[afx->what] );
iobuf_writestr(a, "-----\n");
- iobuf_writestr(a, "Version: GnuPG v" VERSION " ("
- PRINTABLE_OS_NAME ")\n");
+ if( !opt.no_version )
+ iobuf_writestr(a, "Version: GnuPG v" VERSION " ("
+ PRINTABLE_OS_NAME ")\n");
if( opt.comment_string ) {
const char *s = opt.comment_string;
- iobuf_writestr(a, "Comment: " );
- for( ; *s; s++ ) {
- if( *s == '\n' )
- iobuf_writestr(a, "\\n" );
- else if( *s == '\r' )
- iobuf_writestr(a, "\\r" );
- else if( *s == '\v' )
- iobuf_writestr(a, "\\v" );
- else
- iobuf_put(a, *s );
+ if( *s ) {
+ iobuf_writestr(a, "Comment: " );
+ for( ; *s; s++ ) {
+ if( *s == '\n' )
+ iobuf_writestr(a, "\\n" );
+ else if( *s == '\r' )
+ iobuf_writestr(a, "\\r" );
+ else if( *s == '\v' )
+ iobuf_writestr(a, "\\v" );
+ else
+ iobuf_put(a, *s );
+ }
+ iobuf_put(a, '\n' );
}
- iobuf_put(a, '\n' );
}
else
iobuf_writestr(a,
diff --git a/g10/g10.c b/g10/g10.c
index df0cd482c..df35870b7 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -117,6 +117,7 @@ enum cmd_and_opt_values { aNull = 0,
oDebugAll,
oStatusFD,
oNoComment,
+ oNoVersion,
oCompletesNeeded,
oMarginalsNeeded,
oMaxCertDepth,
@@ -307,6 +308,7 @@ static ARGPARSE_OPTS opts[] = {
{ oRunAsShmCP, "run-as-shm-coprocess", 4, "@" },
{ oSetFilename, "set-filename", 2, "@" },
{ oComment, "comment", 2, "@" },
+ { oNoVersion, "no-version", 0, "@"},
{ oNotDashEscaped, "not-dash-escaped", 0, "@" },
{ oEscapeFrom, "escape-from-lines", 0, "@" },
{ oLockOnce, "lock-once", 0, "@" },
@@ -716,6 +718,7 @@ main( int argc, char **argv )
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;
@@ -810,6 +813,9 @@ main( int argc, char **argv )
if( greeting ) {
tty_printf("%s %s; %s\n", strusage(11), strusage(13), strusage(14) );
tty_printf("%s\n", strusage(15) );
+ #ifdef IS_DEVELOPMENT_VERSION
+ log_info("NOTE: this is a development version!\n");
+ #endif
}
secmem_set_flags( secmem_get_flags() & ~2 ); /* resume warnings */
@@ -859,12 +865,6 @@ main( int argc, char **argv )
log_error(_("invalid S2K mode; must be 0, 1 or 3\n"));
}
- { const char *p = strusage(13);
- for( ; *p && (isdigit(*p) || *p=='.'); p++ )
- ;
- if( *p )
- log_info("NOTE: this is a development version!\n");
- }
if( log_get_errorcount(0) )
g10_exit(2);
diff --git a/g10/getkey.c b/g10/getkey.c
index 770aa5811..f7558703d 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -38,9 +38,9 @@
#define MAX_PK_CACHE_ENTRIES 50
#define MAX_UID_CACHE_ENTRIES 50
-/* Aa map of the all characters valid used for word_match()
+/* A map of the all characters valid used for word_match()
* Valid characters are in in this table converted to uppercase.
- * becuase the upper 128 bytes have special meanin, we assume
+ * because the upper 128 bytes have special meaning, we assume
* that they are all valid.
* Note: We must use numerical values here in case that this program
* will be converted to those little blue HAL9000s with their strange
@@ -95,6 +95,7 @@ struct getkey_ctx_s {
KBPOS kbpos;
int last_rc;
ulong count;
+ int not_allocated;
int nitems;
getkey_item_t items[1];
};
@@ -322,11 +323,13 @@ get_pubkey( PKT_public_key *pk, u32 *keyid )
/* do a lookup */
{ struct getkey_ctx_s ctx;
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.nitems = 1;
ctx.items[0].mode = 11;
ctx.items[0].keyid[0] = keyid[0];
ctx.items[0].keyid[1] = keyid[1];
rc = lookup_pk( &ctx, pk, NULL );
+ get_pubkey_end( &ctx );
}
if( !rc )
goto leave;
@@ -371,11 +374,13 @@ get_seckey( PKT_secret_key *sk, u32 *keyid )
struct getkey_ctx_s ctx;
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.nitems = 1;
ctx.items[0].mode = 11;
ctx.items[0].keyid[0] = keyid[0];
ctx.items[0].keyid[1] = keyid[1];
rc = lookup_sk( &ctx, sk, NULL );
+ get_seckey_end( &ctx );
if( !rc ) {
/* check the secret key (this may prompt for a passprase to
* unlock the secret key
@@ -395,14 +400,18 @@ int
get_primary_seckey( PKT_secret_key *sk, u32 *keyid )
{
struct getkey_ctx_s ctx;
+ int rc;
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.primary = 1;
ctx.nitems = 1;
ctx.items[0].mode = 11;
ctx.items[0].keyid[0] = keyid[0];
ctx.items[0].keyid[1] = keyid[1];
- return lookup_sk( &ctx, sk, NULL );
+ rc = lookup_sk( &ctx, sk, NULL );
+ get_seckey_end( &ctx );
+ return rc;
}
@@ -421,11 +430,13 @@ seckey_available( u32 *keyid )
sk = m_alloc_clear( sizeof *sk );
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.nitems = 1;
ctx.items[0].mode = 11;
ctx.items[0].keyid[0] = keyid[0];
ctx.items[0].keyid[1] = keyid[1];
rc = lookup_sk( &ctx, sk, NULL );
+ get_seckey_end( &ctx );
free_secret_key( sk );
return rc;
}
@@ -653,9 +664,9 @@ key_byname( GETKEY_CTX *retctx, STRLIST namelist,
/* and call the lookup function */
ctx->primary = 1; /* we want to look for the primary key only */
if( sk )
- rc = lookup_sk( ctx, sk, NULL );
+ rc = lookup_sk( ctx, sk, ret_kb );
else
- rc = lookup_pk( ctx, pk, NULL );
+ rc = lookup_pk( ctx, pk, ret_kb );
if( retctx ) /* caller wants the context */
*retctx = ctx;
@@ -733,7 +744,8 @@ get_pubkey_end( GETKEY_CTX ctx )
enum_keyblocks( 2, &ctx->kbpos, NULL ); /* close */
for(n=0; n < ctx->nitems; n++ )
m_free( ctx->items[n].namebuf );
- m_free( ctx );
+ if( !ctx->not_allocated )
+ m_free( ctx );
}
}
@@ -748,10 +760,12 @@ get_pubkey_byfprint( PKT_public_key *pk, const byte *fprint, size_t fprint_len)
if( fprint_len == 20 || fprint_len == 16 ) {
struct getkey_ctx_s ctx;
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.nitems = 1;
ctx.items[0].mode = fprint_len;
memcpy( ctx.items[0].fprint, fprint, fprint_len );
rc = lookup_pk( &ctx, pk, NULL );
+ get_pubkey_end( &ctx );
}
else
rc = G10ERR_GENERAL; /* Oops */
@@ -772,10 +786,12 @@ get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint,
if( fprint_len == 20 || fprint_len == 16 ) {
struct getkey_ctx_s ctx;
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.nitems = 1;
ctx.items[0].mode = fprint_len;
memcpy( ctx.items[0].fprint, fprint, fprint_len );
rc = lookup_pk( &ctx, pk, ret_keyblock );
+ get_pubkey_end( &ctx );
}
else
rc = G10ERR_GENERAL; /* Oops */
@@ -806,10 +822,12 @@ get_seckey_byname( PKT_secret_key *sk, const char *name, int unprotect )
struct getkey_ctx_s ctx;
memset( &ctx, 0, sizeof ctx );
+ ctx.not_allocated = 1;
ctx.primary = 1;
ctx.nitems = 1;
ctx.items[0].mode = 15;
rc = lookup_sk( &ctx, sk, NULL );
+ get_seckey_end( &ctx );
}
else {
add_to_strlist( &namelist, name );
@@ -868,7 +886,8 @@ get_seckey_end( GETKEY_CTX ctx )
enum_keyblocks( 2, &ctx->kbpos, NULL ); /* close */
for(n=0; n < ctx->nitems; n++ )
m_free( ctx->items[n].namebuf );
- m_free( ctx );
+ if( !ctx->not_allocated )
+ m_free( ctx );
}
}
@@ -1600,7 +1619,7 @@ lookup_pk( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE *ret_keyblock )
k = find_first( ctx->keyblock, pk );
else if( item->mode == 16 || item->mode == 20 )
k = find_by_fpr( ctx->keyblock, pk,
- item->name, item->mode );
+ item->fprint, item->mode );
else
BUG();
if( k ) {
@@ -1687,7 +1706,7 @@ lookup_sk( GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE *ret_keyblock )
k = find_first_sk( ctx->keyblock, sk );
else if( item->mode == 16 || item->mode == 20 )
k = find_by_fpr_sk( ctx->keyblock, sk,
- item->name, item->mode );
+ item->fprint, item->mode );
else
BUG();
if( k ) {
diff --git a/g10/keygen.c b/g10/keygen.c
index 7431d8c61..12fa9422c 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -83,15 +83,13 @@ keygen_add_std_prefs( PKT_signature *sig, void *opaque )
keygen_add_key_expire( sig, opaque );
- buf[0] = CIPHER_ALGO_BLOWFISH;
+ buf[0] = CIPHER_ALGO_TWOFISH;
buf[1] = CIPHER_ALGO_CAST5;
build_sig_subpkt( sig, SIGSUBPKT_PREF_SYM, buf, 2 );
buf[0] = DIGEST_ALGO_RMD160;
buf[1] = DIGEST_ALGO_SHA1;
- buf[2] = DIGEST_ALGO_TIGER;
- buf[3] = DIGEST_ALGO_MD5;
- build_sig_subpkt( sig, SIGSUBPKT_PREF_HASH, buf, 4 );
+ build_sig_subpkt( sig, SIGSUBPKT_PREF_HASH, buf, 2 );
buf[0] = 2;
buf[1] = 1;
diff --git a/g10/keylist.c b/g10/keylist.c
index 2a471b86c..0bfdb7725 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -169,6 +169,7 @@ list_keyblock( KBNODE keyblock, int secret )
node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
if( !node ) {
log_error("Oops; key lost!\n");
+ dump_kbnode( keyblock );
return;
}
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 2e5575dd8..0b3582c50 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -252,7 +252,11 @@ proc_plaintext( CTX c, PACKET *pkt )
free_md_filter_context( &c->mfx );
c->mfx.md = md_open( 0, 0);
/* fixme: we may need to push the textfilter if we have sigclass 1
- * and no armoring - Not yet tested */
+ * and no armoring - Not yet tested
+ * Hmmm, why don't we need it at all if we have sigclass 1
+ * Should we assume that plaintext in mode 't' has always sigclass 1??
+ * See: Russ Allbery's mail 1999-02-09
+ */
any = clearsig = 0;
for(n=c->list; n; n = n->next ) {
if( n->pkt->pkttype == PKT_ONEPASS_SIG ) {
diff --git a/g10/options.h b/g10/options.h
index d7450dba8..39564fb2e 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -47,6 +47,7 @@ struct {
int def_compress_algo;
const char *def_secret_key;
int no_comment;
+ int no_version;
int marginals_needed;
int completes_needed;
int max_cert_depth;
diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c
index f662c6206..af77a1e52 100644
--- a/g10/pubkey-enc.c
+++ b/g10/pubkey-enc.c
@@ -31,6 +31,7 @@
#include "trustdb.h"
#include "cipher.h"
#include "status.h"
+#include "options.h"
#include "i18n.h"
static int get_it( PKT_pubkey_enc *k,
@@ -179,9 +180,17 @@ get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid )
else if( !pk->local_id && query_trust_record(pk) )
log_error("can't check algorithm against preferences\n");
else if( dek->algo != CIPHER_ALGO_3DES
- && !is_algo_in_prefs( pk->local_id, PREFTYPE_SYM, dek->algo ) )
- log_info(_("NOTE: cipher algorithm %d not found in preferences\n"),
+ && !is_algo_in_prefs( pk->local_id, PREFTYPE_SYM, dek->algo ) ) {
+ /* Don't print a note while we are not on verbose mode,
+ * the cipher is blowfish and the preferences have twofish
+ * listed */
+ if( opt.verbose || dek->algo != CIPHER_ALGO_BLOWFISH
+ || !is_algo_in_prefs( pk->local_id, PREFTYPE_SYM,
+ CIPHER_ALGO_TWOFISH ) )
+ log_info(_(
+ "NOTE: cipher algorithm %d not found in preferences\n"),
dek->algo );
+ }
free_public_key( pk );
rc = 0;
}
diff --git a/g10/ringedit.c b/g10/ringedit.c
index 4a97f78f8..d5ac6ac77 100644
--- a/g10/ringedit.c
+++ b/g10/ringedit.c
@@ -72,12 +72,13 @@ struct resource_table_struct {
GDBM_FILE dbf;
#endif
enum resource_type rt;
+ DOTLOCK lockhd;
+ int is_locked;
};
typedef struct resource_table_struct RESTBL;
#define MAX_RESOURCES 10
static RESTBL resource_table[MAX_RESOURCES];
-static const char *keyring_lock;
static int search( PACKET *pkt, KBPOS *kbpos, int secret );
@@ -117,15 +118,40 @@ fatal_gdbm_error( const char *string )
#endif /* HAVE_LIBGDBM */
+
+/****************
+ * Hmmm, how to avoid deadlock? They should not happen if everyone
+ * locks the key resources in the same order; but who knows.
+ * A solution is to use only one lock file in the gnupg homedir but
+ * what will happen with key resources which normally don't belong
+ * to the gpg homedir?
+ */
static void
-cleanup( void )
+lock_rentry( RESTBL *rentry )
{
- if( keyring_lock ) {
- release_dotlock( keyring_lock );
- keyring_lock = NULL;
+ if( !rentry->lockhd ) {
+ rentry->lockhd = create_dotlock( rentry->fname );
+ if( !rentry->lockhd )
+ log_fatal("can't allocate lock for `%s'\n", rentry->fname );
+ rentry->is_locked = 0;
+ }
+ if( !rentry->is_locked ) {
+ if( make_dotlock( rentry->lockhd, -1 ) )
+ log_fatal("can't lock `%s'\n", rentry->fname );
+ rentry->is_locked = 1;
}
}
+static void
+unlock_rentry( RESTBL *rentry )
+{
+ if( opt.lock_once )
+ return;
+ if( !release_dotlock( rentry->lockhd ) )
+ rentry->is_locked = 0;
+}
+
+
/****************************************************************
****************** public functions ****************************
****************************************************************/
@@ -162,7 +188,6 @@ enum_keyblock_resources( int *sequence, int secret )
int
add_keyblock_resource( const char *url, int force, int secret )
{
- static int initialized = 0;
static int any_secret, any_public;
const char *resname = url;
IOBUF iobuf = NULL;
@@ -171,10 +196,6 @@ add_keyblock_resource( const char *url, int force, int secret )
int rc = 0;
enum resource_type rt = rt_UNKNOWN;
- if( !initialized ) {
- initialized = 1;
- atexit( cleanup );
- }
/* Do we have an URL?
* gnupg-gdbm:filename := this is a GDBM resource
@@ -190,7 +211,7 @@ add_keyblock_resource( const char *url, int force, int secret )
rt = rt_GDBM;
resname += 11;
}
- #ifndef __MINGW32__
+ #ifndef HAVE_DRIVE_LETTERS
else if( strchr( resname, ':' ) ) {
log_error("%s: invalid URL\n", url );
rc = G10ERR_GENERAL;
@@ -264,7 +285,7 @@ add_keyblock_resource( const char *url, int force, int secret )
if( access(filename, F_OK) ) {
if( strlen(filename) >= 7
&& !strcmp(filename+strlen(filename)-7, "/.gnupg") ) {
- #if __MINGW32__
+ #ifdef HAVE_DOSISH_SYSTEM
if( mkdir(filename) )
#else
if( mkdir(filename, S_IRUSR|S_IWUSR|S_IXUSR) )
@@ -298,10 +319,10 @@ add_keyblock_resource( const char *url, int force, int secret )
else
log_info(_("%s: keyring created\n"), filename );
}
- #if __MINGW32__ || 1
- /* must close it again */
+ #if HAVE_DOSISH_SYSTEM || 1
iobuf_close( iobuf );
iobuf = NULL;
+ /* must close it again */
#endif
break;
@@ -1039,7 +1060,7 @@ keyring_search( PACKET *req, KBPOS *kbpos, IOBUF iobuf, const char *fname )
kbpos->rt = rt_RING;
kbpos->valid = 0;
- #if __MINGW32__ || 1
+ #if HAVE_DOSISH_SYSTEM || 1
assert(!iobuf);
iobuf = iobuf_open( fname );
if( !iobuf ) {
@@ -1084,7 +1105,7 @@ keyring_search( PACKET *req, KBPOS *kbpos, IOBUF iobuf, const char *fname )
leave:
free_packet(&pkt);
set_packet_list_mode(save_mode);
- #if __MINGW32__ || 1
+ #if HAVE_DOSISH_SYSTEM || 1
iobuf_close(iobuf);
#endif
return rc;
@@ -1276,10 +1297,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
if( kbpos->fp )
BUG(); /* not allowed with such a handle */
- if( !keyring_lock );
- keyring_lock = make_dotlock( rentry->fname, -1 );
- if( !keyring_lock )
- log_fatal("can't lock `%s'\n", rentry->fname );
+ lock_rentry( rentry );
/* open the source file */
fp = iobuf_open( rentry->fname );
@@ -1290,10 +1308,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
newfp = iobuf_create( rentry->fname );
if( !newfp ) {
log_error(_("%s: can't create: %s\n"), rentry->fname, strerror(errno));
- if( !opt.lock_once ) {
- release_dotlock( keyring_lock );
- keyring_lock = NULL;
- }
+ unlock_rentry( rentry );
return G10ERR_OPEN_FILE;
}
else
@@ -1305,28 +1320,19 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
log_error("build_packet(%d) failed: %s\n",
node->pkt->pkttype, g10_errstr(rc) );
iobuf_cancel(newfp);
- if( !opt.lock_once ) {
- release_dotlock( keyring_lock );
- keyring_lock = NULL;
- }
+ unlock_rentry( rentry );
return G10ERR_WRITE_FILE;
}
}
if( iobuf_close(newfp) ) {
log_error("%s: close failed: %s\n", rentry->fname, strerror(errno));
- if( !opt.lock_once ) {
- release_dotlock( keyring_lock );
- keyring_lock = NULL;
- }
+ unlock_rentry( rentry );
return G10ERR_CLOSE_FILE;
}
if( chmod( rentry->fname, S_IRUSR | S_IWUSR ) ) {
log_error("%s: chmod failed: %s\n",
rentry->fname, strerror(errno) );
- if( !opt.lock_once ) {
- release_dotlock( keyring_lock );
- keyring_lock = NULL;
- }
+ unlock_rentry( rentry );
return G10ERR_WRITE_FILE;
}
return 0;
@@ -1338,7 +1344,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
}
/* create the new file */
- #ifdef __MINGW32__
+ #ifdef USE_ONLY_8DOT3
/* Here is another Windoze bug?:
* you cant rename("pubring.gpg.tmp", "pubring.gpg");
* but rename("pubring.gpg.tmp", "pubring.aaa");
@@ -1451,7 +1457,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
goto leave;
}
/* if the new file is a secring, restrict the permissions */
- #ifndef __MINGW32__
+ #ifndef HAVE_DOSISH_SYSTEM
if( rentry->secret ) {
if( chmod( tmpfname, S_IRUSR | S_IWUSR ) ) {
log_error("%s: chmod failed: %s\n",
@@ -1464,7 +1470,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
/* rename and make backup file */
if( !rentry->secret ) { /* but not for secret keyrings */
- #ifdef __MINGW32__
+ #ifdef HAVE_DOSISH_SYSTEM
remove( bakfname );
#endif
if( rename( rentry->fname, bakfname ) ) {
@@ -1474,7 +1480,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
goto leave;
}
}
- #ifdef __MINGW32__
+ #ifdef HAVE_DOSISH_SYSTEM
remove( rentry->fname );
#endif
if( rename( tmpfname, rentry->fname ) ) {
@@ -1492,10 +1498,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
}
leave:
- if( !opt.lock_once ) {
- release_dotlock( keyring_lock );
- keyring_lock = NULL;
- }
+ unlock_rentry( rentry );
m_free(bakfname);
m_free(tmpfname);
return rc;
diff --git a/g10/signal.c b/g10/signal.c
index 364fb47a4..29f99c64b 100644
--- a/g10/signal.c
+++ b/g10/signal.c
@@ -70,7 +70,7 @@ got_usr_signal( int sig )
caught_sigusr1 = 1;
}
-#ifndef __MINGW32__
+#ifndef HAVE_DOSISH_SYSTEM
static void
do_sigaction( int sig, struct sigaction *nact )
{
@@ -85,7 +85,7 @@ do_sigaction( int sig, struct sigaction *nact )
void
init_signals()
{
- #ifndef __MINGW32__
+ #ifndef HAVE_DOSISH_SYSTEM
struct sigaction nact;
nact.sa_handler = got_fatal_signal;
@@ -100,7 +100,7 @@ init_signals()
nact.sa_handler = got_usr_signal;
sigaction( SIGUSR1, &nact, NULL );
nact.sa_handler = SIG_IGN;
- sigaction( SIGPIPE, &nact, NULL );
+ sigaction( SIGPIPE, &nact, NULL );
#endif
}
@@ -108,7 +108,7 @@ init_signals()
void
pause_on_sigusr( int which )
{
- #ifndef __MINGW32__
+ #ifndef HAVE_DOSISH_SYSTEM
sigset_t mask, oldmask;
assert( which == 1 );
@@ -127,7 +127,7 @@ pause_on_sigusr( int which )
static void
do_block( int block )
{
- #ifndef __MINGW32__
+ #ifndef HAVE_DOSISH_SYSTEM
static int is_blocked;
static sigset_t oldmask;
@@ -146,7 +146,7 @@ do_block( int block )
sigprocmask( SIG_SETMASK, &oldmask, NULL );
is_blocked = 0;
}
- #endif /*__MINGW32__*/
+ #endif /*HAVE_DOSISH_SYSTEM*/
}
diff --git a/g10/tdbio.c b/g10/tdbio.c
index b69d6c3f0..2eddb4b2d 100644
--- a/g10/tdbio.c
+++ b/g10/tdbio.c
@@ -77,7 +77,8 @@ struct cmp_sdir_struct {
static char *db_name;
-static const char *lockname;
+static DOTLOCK lockhandle;
+static int is_locked;
static int db_fd = -1;
static int in_transaction;
@@ -236,10 +237,12 @@ put_record_into_cache( ulong recno, const char *data )
int n = dirty_count / 5; /* discard some dirty entries */
if( !n )
n = 1;
- if( !lockname )
- lockname = make_dotlock( db_name, -1 );
- if( !lockname )
- log_fatal("can't get a lock - giving up\n");
+ if( !is_locked ) {
+ if( make_dotlock( lockhandle, -1 ) )
+ log_fatal("can't acquire lock - giving up\n");
+ else
+ is_locked = 1;
+ }
for( unused = NULL, r = cache_list; r; r = r->next ) {
if( r->flags.used && r->flags.dirty ) {
int rc = write_cache_item( r );
@@ -254,8 +257,8 @@ put_record_into_cache( ulong recno, const char *data )
}
}
if( !opt.lock_once ) {
- release_dotlock( lockname );
- lockname=NULL;
+ if( !release_dotlock( lockhandle ) )
+ is_locked = 0;
}
assert( unused );
r = unused;
@@ -287,17 +290,20 @@ tdbio_sync()
CACHE_CTRL r;
int did_lock = 0;
+ if( db_fd == -1 )
+ open_db();
if( in_transaction )
log_bug("tdbio: syncing while in transaction\n");
if( !cache_is_dirty )
return 0;
- if( !lockname ) {
- lockname = make_dotlock( db_name, -1 );
+ if( !is_locked ) {
+ if( make_dotlock( lockhandle, -1 ) )
+ log_fatal("can't acquire lock - giving up\n");
+ else
+ is_locked = 1;
did_lock = 1;
- if( !lockname )
- log_fatal("can't get a lock - giving up\n");
}
for( r = cache_list; r; r = r->next ) {
if( r->flags.used && r->flags.dirty ) {
@@ -308,8 +314,8 @@ tdbio_sync()
}
cache_is_dirty = 0;
if( did_lock && !opt.lock_once ) {
- release_dotlock( lockname );
- lockname=NULL;
+ if( !release_dotlock( lockhandle ) )
+ is_locked = 0;
}
return 0;
}
@@ -344,17 +350,19 @@ tdbio_end_transaction()
if( !in_transaction )
log_bug("tdbio: no active transaction\n");
- if( !lockname )
- lockname = make_dotlock( db_name, -1 );
- if( !lockname )
- log_fatal("can't get a lock - giving up\n");
+ if( !is_locked ) {
+ if( make_dotlock( lockhandle, -1 ) )
+ log_fatal("can't acquire lock - giving up\n");
+ else
+ is_locked = 1;
+ }
block_all_signals();
in_transaction = 0;
rc = tdbio_sync();
unblock_all_signals();
if( !opt.lock_once ) {
- release_dotlock( lockname );
- lockname=NULL;
+ if( !release_dotlock( lockhandle ) )
+ is_locked = 0;
}
return rc;
}
@@ -392,9 +400,9 @@ tdbio_cancel_transaction()
static void
cleanup(void)
{
- if( lockname ) {
- release_dotlock(lockname);
- lockname = NULL;
+ if( is_locked ) {
+ if( !release_dotlock(lockhandle) )
+ is_locked = 0;
}
}
@@ -428,7 +436,7 @@ tdbio_set_dbname( const char *new_dbname, int create )
if( access( fname, F_OK ) ) {
if( strlen(fname) >= 7
&& !strcmp(fname+strlen(fname)-7, "/.gnupg" ) ) {
- #if __MINGW32__
+ #if HAVE_DOSISH_SYSTEM
if( mkdir( fname ) )
#else
if( mkdir( fname, S_IRUSR|S_IWUSR|S_IXUSR ) )
@@ -450,7 +458,7 @@ tdbio_set_dbname( const char *new_dbname, int create )
fclose(fp);
m_free(db_name);
db_name = fname;
- #ifdef __MINGW32__
+ #ifdef HAVE_DOSISH_SYSTEM
db_fd = open( db_name, O_RDWR | O_BINARY );
#else
db_fd = open( db_name, O_RDWR );
@@ -501,7 +509,10 @@ open_db()
TRUSTREC rec;
assert( db_fd == -1 );
- #ifdef __MINGW32__
+ lockhandle = create_dotlock( db_name );
+ if( !lockhandle )
+ log_fatal( _("%s: can't create lock\n"), db_name );
+ #ifdef HAVE_DOSISH_SYSTEM
db_fd = open( db_name, O_RDWR | O_BINARY );
#else
db_fd = open( db_name, O_RDWR );
@@ -970,6 +981,8 @@ tdbio_dump_record( TRUSTREC *rec, FILE *fp )
rec->r.uid.prefrec,
rec->r.uid.siglist,
rec->r.uid.namehash[18], rec->r.uid.namehash[19]);
+ if( rec->r.uid.uidflags & UIDF_VALVALID )
+ fprintf( fp, ", v=%02x", rec->r.uid.validity );
if( rec->r.uid.uidflags & UIDF_CHECKED ) {
if( rec->r.uid.uidflags & UIDF_VALID )
fputs(", valid", fp );
@@ -1155,7 +1168,18 @@ tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected )
rec->r.uid.prefrec = buftoulong(p); p += 4;
rec->r.uid.siglist = buftoulong(p); p += 4;
rec->r.uid.uidflags = *p++;
- p ++;
+ rec->r.uid.validity = *p++;
+ switch( rec->r.uid.validity ) {
+ case 0:
+ case TRUST_UNDEFINED:
+ case TRUST_NEVER:
+ case TRUST_MARGINAL:
+ case TRUST_FULLY:
+ case TRUST_ULTIMATE:
+ break;
+ default:
+ log_info("lid %lu: invalid validity value - cleared\n", recnum);
+ }
memcpy( rec->r.uid.namehash, p, 20);
break;
case RECTYPE_PREF: /* preference record */
@@ -1278,7 +1302,7 @@ tdbio_write_record( TRUSTREC *rec )
ulongtobuf(p, rec->r.uid.prefrec); p += 4;
ulongtobuf(p, rec->r.uid.siglist); p += 4;
*p++ = rec->r.uid.uidflags;
- p++;
+ *p++ = rec->r.uid.validity;
memcpy( p, rec->r.uid.namehash, 20 ); p += 20;
break;
diff --git a/g10/tdbio.h b/g10/tdbio.h
index 925c7f93c..62148d361 100644
--- a/g10/tdbio.h
+++ b/g10/tdbio.h
@@ -59,9 +59,10 @@
#define KEYF_EXPIRED 4 /* this key is expired */
#define KEYF_REVOKED 8 /* this key has been revoked */
-#define UIDF_CHECKED 1 /* user id has been checked - other bits are valid */
-#define UIDF_VALID 2 /* this is a valid user id */
-#define UIDF_REVOKED 8 /* this user id has been revoked */
+#define UIDF_CHECKED 1 /* user id has been checked - other bits are valid */
+#define UIDF_VALID 2 /* this is a valid user id */
+#define UIDF_REVOKED 8 /* this user id has been revoked */
+#define UIDF_VALVALID 16 /* the validity field is valid */
#define SIGF_CHECKED 1 /* signature has been checked - bits 0..6 are valid */
#define SIGF_VALID 2 /* the signature is valid */
@@ -98,7 +99,7 @@ struct trust_record {
ulong cacherec; /* the cache record */
byte ownertrust;
byte dirflags;
- byte validity; /* calculated trustlevel */
+ byte validity; /* calculated trustlevel over all uids */
} dir;
struct { /* primary public key record */
ulong lid;
@@ -114,6 +115,7 @@ struct trust_record {
ulong prefrec; /* recno of preference record */
ulong siglist; /* list of valid signatures (w/o self-sig)*/
byte uidflags;
+ byte validity; /* calculated trustlevel of this uid */
byte namehash[20]; /* ripemd hash of the username */
} uid;
struct { /* preference record */
diff --git a/g10/trustdb.c b/g10/trustdb.c
index 674240a7b..34890c2da 100644
--- a/g10/trustdb.c
+++ b/g10/trustdb.c
@@ -104,6 +104,8 @@ static void release_lid_table( LOCAL_ID_TABLE tbl );
static int ins_lid_table_item( LOCAL_ID_TABLE tbl, ulong lid, unsigned flag );
static int qry_lid_table_flag( LOCAL_ID_TABLE tbl, ulong lid, unsigned *flag );
+
+
static void print_user_id( const char *text, u32 *keyid );
static void sort_tsl_list( TRUST_SEG_LIST *trust_seg_list );
static int list_sigs( ulong pubkey_id );
@@ -839,42 +841,13 @@ collect_paths( int depth, int max_depth, int all, TRUSTREC *drec,
ulong rn, uidrn;
int marginal=0;
int fully=0;
- LOCAL_ID_TABLE sigs_seen = NULL;
+ /*LOCAL_ID_TABLE sigs_seen = NULL;*/
if( depth >= max_depth ) /* max cert_depth reached */
return TRUST_UNDEFINED;
- stack[depth].lid = drec->r.dir.lid;
- stack[depth].otrust = drec->r.dir.ownertrust;
- stack[depth].trust = 0;
- { int i;
-
- for(i=0; i < depth; i++ )
- if( stack[i].lid == drec->r.dir.lid )
- return TRUST_UNDEFINED; /* closed (we already visited this lid) */
- }
- if( !qry_lid_table_flag( ultikey_table, drec->r.dir.lid, NULL ) ) {
- /* we are at the end of a path */
- TRUST_SEG_LIST tsl;
- int i;
-
- stack[depth].trust = TRUST_ULTIMATE;
- stack[depth].otrust = TRUST_ULTIMATE;
- if( trust_seg_head ) {
- /* we can now put copy our current stack to the trust_seg_list */
- tsl = m_alloc( sizeof *tsl + (depth+1)*sizeof( TRUST_INFO ) );
- for(i=0; i <= depth; i++ )
- tsl->path[i] = stack[i];
- tsl->pathlen = i;
- tsl->next = *trust_seg_head;
- *trust_seg_head = tsl;
- }
- return TRUST_ULTIMATE;
- }
-
/* loop over all user-ids */
- if( !all )
- sigs_seen = new_lid_table();
+ /*if( !all ) sigs_seen = new_lid_table();*/
for( rn = drec->r.dir.uidlist; rn; rn = uidrn ) {
TRUSTREC rec; /* used for uids and sigs */
ulong sigrn;
@@ -888,7 +861,36 @@ collect_paths( int depth, int max_depth, int all, TRUSTREC *drec,
if( (rec.r.uid.uidflags & UIDF_REVOKED) )
continue; /* user id has been revoked */
- /* loop over all signature records */
+ stack[depth].lid = drec->r.dir.lid;
+ stack[depth].otrust = drec->r.dir.ownertrust;
+ stack[depth].trust = 0;
+ { int i;
+
+ for(i=0; i < depth; i++ )
+ if( stack[i].lid == drec->r.dir.lid )
+ return TRUST_UNDEFINED; /* closed (we already visited this lid) */
+ }
+ if( !qry_lid_table_flag( ultikey_table, drec->r.dir.lid, NULL ) ) {
+ /* we are at the end of a path */
+ TRUST_SEG_LIST tsl;
+ int i;
+
+ stack[depth].trust = TRUST_ULTIMATE;
+ stack[depth].otrust = TRUST_ULTIMATE;
+ if( trust_seg_head ) {
+ /* we can now put copy our current stack to the trust_seg_list */
+ tsl = m_alloc( sizeof *tsl + (depth+1)*sizeof( TRUST_INFO ) );
+ for(i=0; i <= depth; i++ )
+ tsl->path[i] = stack[i];
+ tsl->pathlen = i;
+ tsl->next = *trust_seg_head;
+ *trust_seg_head = tsl;
+ }
+ return TRUST_ULTIMATE;
+ }
+
+
+ /* loop over all signature records of this user id */
for( rn = rec.r.uid.siglist; rn; rn = sigrn ) {
int i;
@@ -917,11 +919,11 @@ collect_paths( int depth, int max_depth, int all, TRUSTREC *drec,
}
/* visit every signer only once (a signer may have
- * signed more than one user ID) */
- if( sigs_seen && ins_lid_table_item( sigs_seen,
- rec.r.sig.sig[i].lid, 0) )
- continue; /* we already have this one */
-
+ * signed more than one user ID)
+ * if( sigs_seen && ins_lid_table_item( sigs_seen,
+ * rec.r.sig.sig[i].lid, 0) )
+ * continue; we already have this one
+ */
read_record( rec.r.sig.sig[i].lid, &tmp, 0 );
if( tmp.rectype != RECTYPE_DIR ) {
if( tmp.rectype != RECTYPE_SDIR )
@@ -945,8 +947,7 @@ collect_paths( int depth, int max_depth, int all, TRUSTREC *drec,
/* we have signed this key and only in this special case
* we assume that this one is fully trusted */
if( !all ) {
- if( sigs_seen )
- release_lid_table( sigs_seen );
+ /*if( sigs_seen ) release_lid_table( sigs_seen );*/
return (stack[depth].trust = TRUST_FULLY);
}
}
@@ -962,16 +963,14 @@ collect_paths( int depth, int max_depth, int all, TRUSTREC *drec,
if( fully >= opt.completes_needed
|| marginal >= opt.marginals_needed ) {
if( !all ) {
- if( sigs_seen )
- release_lid_table( sigs_seen );
+ /*if( sigs_seen ) release_lid_table( sigs_seen );*/
return (stack[depth].trust = TRUST_FULLY);
}
}
}
}
}
- if( sigs_seen )
- release_lid_table( sigs_seen );
+ /*if( sigs_seen ) release_lid_table( sigs_seen ); */
if( all && ( fully >= opt.completes_needed
|| marginal >= opt.marginals_needed ) ) {
return (stack[depth].trust = TRUST_FULLY );
@@ -983,6 +982,145 @@ collect_paths( int depth, int max_depth, int all, TRUSTREC *drec,
}
+typedef struct {
+ ulong lid;
+ ulong uid;
+} CERT_ITEM;
+
+/* structure to hold certification chains. Item[nitems-1] is the
+ * ultimateley trusted key, item[0] is the key which
+ * is introduced, indices [1,(nitems-2)] are all introducers.
+ */
+typedef struct cert_chain *CERT_CHAIN;
+struct cert_chain {
+ CERT_CHAIN next;
+ int dups;
+ int nitems;
+ CERT_ITEM items[1];
+};
+
+
+
+/****************
+ * Copy all items to the set SET_HEAD in a way that the requirements
+ * of a CERT_CHAIN are met.
+ */
+static void
+add_cert_items_to_set( CERT_CHAIN *set_head, CERT_ITEM *items, int nitems )
+{
+ CERT_CHAIN ac;
+ int i;
+
+ ac = m_alloc_clear( sizeof *ac + (nitems-1)*sizeof(CERT_ITEM) );
+ ac->nitems = nitems;
+ for(i=0; i < nitems; i++ )
+ ac->items[i] = items[i];
+ ac->next = *set_head;
+ *set_head = ac;
+}
+
+
+/****************
+ * Find all certification paths of a given LID.
+ * Limit the search to MAX_DEPTH. stack is a helper variable which
+ * should have been allocated with size max_depth, stack[0] should
+ * be setup to the key we are investigating, so the minimal depth
+ * we should ever see in this function is 1.
+ * Returns: -1 max_depth reached
+ * 0 no paths found
+ * 1 ultimately trusted key found
+ * certchain_set must be a valid set or point to NULL; this function
+ * may modifiy it.
+ */
+static int
+find_cert_chain( ulong lid, int depth, int max_depth,
+ CERT_ITEM *stack, CERT_CHAIN *cert_chain_set )
+{
+ TRUSTREC dirrec;
+ TRUSTREC uidrec;
+ ulong uidrno;
+
+ if( depth >= max_depth )
+ return -1;
+
+ stack[depth].lid = lid;
+ stack[depth].uid = 0;
+
+ if( !qry_lid_table_flag( ultikey_table, lid, NULL ) ) {
+ /* this is an ultimately trusted key;
+ * which means that we have found the end of the chain:
+ * copy the chain to the set */
+ add_cert_items_to_set( cert_chain_set, stack, depth+1 );
+ return 1;
+ }
+
+
+ read_record( lid, &dirrec, 0 );
+ if( dirrec.rectype != RECTYPE_DIR ) {
+ if( dirrec.rectype != RECTYPE_SDIR )
+ log_debug("lid %lu, has rectype %d"
+ " - skipped\n", lid, dirrec.rectype );
+ return 0;
+ }
+ /* Performance hint: add stuff to ignore this one when the
+ * assigned validity of the key is bad */
+
+ /* loop over all user ids */
+ for( uidrno = dirrec.r.dir.uidlist; uidrno; uidrno = uidrec.r.uid.next ) {
+ TRUSTREC sigrec;
+ ulong sigrno;
+
+ stack[depth].uid = uidrno;
+ read_record( uidrno, &uidrec, RECTYPE_UID );
+
+ if( !(uidrec.r.uid.uidflags & UIDF_CHECKED) )
+ continue; /* user id has not been checked */
+ if( !(uidrec.r.uid.uidflags & UIDF_VALID) )
+ continue; /* user id is not valid */
+ if( (uidrec.r.uid.uidflags & UIDF_REVOKED) )
+ continue; /* user id has been revoked */
+
+ /* loop over all signature records */
+ for(sigrno=uidrec.r.uid.siglist; sigrno; sigrno = sigrec.r.sig.next ) {
+ int i, j;
+
+ read_record( sigrno, &sigrec, RECTYPE_SIG );
+
+ for(i=0; i < SIGS_PER_RECORD; i++ ) {
+ if( !sigrec.r.sig.sig[i].lid )
+ continue; /* skip deleted sigs */
+ if( !(sigrec.r.sig.sig[i].flag & SIGF_CHECKED) )
+ continue; /* skip unchecked signatures */
+ if( !(sigrec.r.sig.sig[i].flag & SIGF_VALID) )
+ continue; /* skip invalid signatures */
+ if( (sigrec.r.sig.sig[i].flag & SIGF_EXPIRED) )
+ continue; /* skip expired signatures */
+ if( (sigrec.r.sig.sig[i].flag & SIGF_REVOKED) )
+ continue; /* skip revoked signatures */
+ for(j=0; j < depth; j++ ) {
+ if( stack[j].lid == sigrec.r.sig.sig[i].lid )
+ break;
+ }
+ if( j < depth )
+ continue; /* avoid cycles as soon as possible */
+
+ if( find_cert_chain( sigrec.r.sig.sig[i].lid,
+ depth+1, max_depth,
+ stack, cert_chain_set ) > 0 ) {
+ /* ultimately trusted key found:
+ * no need to check more signatures of this uid */
+ sigrec.r.sig.next = 0;
+ break;
+ }
+ }
+ } /* end loop over sig recs */
+ } /* end loop over user ids */
+ return 0;
+}
+
+
+
+
/****************
* Given the directory record of a key, check whether we can
* find a path to an ultimately trusted key. We do this by
@@ -1337,6 +1475,7 @@ void
list_trust_path( const char *username )
{
int rc;
+ ulong lid;
TRUSTREC rec;
TRUST_INFO *tmppath;
TRUST_SEG_LIST trust_seg_list, tsl, tsl2;
@@ -1357,8 +1496,10 @@ list_trust_path( const char *username )
assert( pk->local_id );
}
}
+ lid = pk->local_id;
free_public_key( pk );
+ #if 0
/* collect the paths */
tmppath = m_alloc_clear( (opt.max_cert_depth+1)* sizeof *tmppath );
trust_seg_list = NULL;
@@ -1378,6 +1519,26 @@ list_trust_path( const char *username )
m_free( tsl );
}
trust_seg_list = NULL;
+ #else /* test code */
+ {
+ CERT_ITEM *stack;
+ CERT_CHAIN chains, r;
+ int i;
+
+ chains = NULL;
+ stack = m_alloc_clear( (opt.max_cert_depth+1)* sizeof *stack );
+ find_cert_chain( lid, 0, opt.max_cert_depth, stack, &chains);
+ m_free( stack );
+ /* dump chains */
+ for(r=chains; r ; r = r->next ) {
+ printf("chain:" );
+ for(i=0; i < r->nitems; i++ )
+ printf(" %4lu/%-4lu", r->items[i].lid, r->items[i].uid );
+ putchar('\n');
+ }
+
+ }
+ #endif
}
@@ -2719,15 +2880,17 @@ upd_cert_record( KBNODE keyblock, KBNODE signode, u32 *keyid,
continue; /* skip deleted sigs */
}
if( rec.r.sig.sig[i].lid == pk_lid ) {
+ #if 0 /* must take uid into account */
if( found_sig ) {
log_info( "sig %08lX.%lu/%02X%02X/%08lX: %s\n",
(ulong)keyid[1], lid, uidhash[18],
uidhash[19], (ulong)sig->keyid[1],
- _("Duplicated certificate - deleted") );
+ _("duplicated certificate - deleted") );
rec.r.sig.sig[i].lid = 0;
rec.dirty = 1;
continue;
}
+ #endif
found_sig = 1;
}
if( !recheck && !revoke && (rec.r.sig.sig[i].flag & SIGF_CHECKED) )
@@ -2811,7 +2974,7 @@ upd_cert_record( KBNODE keyblock, KBNODE signode, u32 *keyid,
}
}
- if( found_sig )
+ if( found_sig ) /* fixme: uid stuff */
return;
/* at this point, we have verified, that the signature is not in
diff --git a/include/ChangeLog b/include/ChangeLog
index bfe4dfe98..7f7045738 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * cipher.h (CIPHER_ALGO_TWOFISH): Chnaged ID to 10 and renamed
+ the old experimenatl algorithm to xx_OLD.
+
Thu Jan 7 18:00:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
* cipher.h (MD_BUFFER_SIZE): Removed.
diff --git a/include/cipher.h b/include/cipher.h
index 9cd5b5f3c..55a566264 100644
--- a/include/cipher.h
+++ b/include/cipher.h
@@ -33,9 +33,10 @@
#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
#define CIPHER_ALGO_SAFER_SK128 5
#define CIPHER_ALGO_DES_SK 6
+#define CIPHER_ALGO_TWOFISH 10 /* twofish 256 bit */
#define CIPHER_ALGO_BLOWFISH160 42 /* blowfish 160 bit key (not in OpenPGP)*/
#define CIPHER_ALGO_SKIPJACK 101 /* experimental: skipjack */
-#define CIPHER_ALGO_TWOFISH 102 /* experimental: twofish 128 bit */
+#define CIPHER_ALGO_TWOFISH_OLD 102 /* experimental: twofish 128 bit */
#define CIPHER_ALGO_DUMMY 110 /* no encryption at all */
#define PUBKEY_ALGO_RSA 1
@@ -63,11 +64,9 @@ typedef struct {
byte key[24]; /* this is the largest used keylen (3des) */
} DEK;
+struct cipher_handle_s;
typedef struct cipher_handle_s *CIPHER_HANDLE;
-#ifndef DEFINES_CIPHER_HANDLE
-struct cipher_handle_s { char does_not_matter[1]; };
-#endif
#define CIPHER_MODE_ECB 1
#define CIPHER_MODE_CFB 2
@@ -75,6 +74,8 @@ struct cipher_handle_s { char does_not_matter[1]; };
#define CIPHER_MODE_AUTO_CFB 4
#define CIPHER_MODE_DUMMY 5 /* used with algo DUMMY for no encryption */
+struct md_digest_list_s;
+
typedef struct {
int secure;
FILE *debug;
@@ -85,12 +86,6 @@ typedef struct {
} *MD_HANDLE;
-#ifndef DEFINES_MD_HANDLE /* not really the handle but the algorithm list */
-struct md_digest_list_s { char does_not_matter[1]; };
-#endif
-
-
-
int g10c_debug_mode;
int g10_opt_verbose;
diff --git a/include/util.h b/include/util.h
index 8b8df37e8..6462ddeae 100644
--- a/include/util.h
+++ b/include/util.h
@@ -127,10 +127,12 @@ const char *strusage( int level );
/*-- dotlock.c --*/
-const char *make_dotlock( const char *file_to_lock, long timeout );
-int release_dotlock( const char *lockfile );
-
+struct dotlock_handle;
+typedef struct dotlock_handle *DOTLOCK;
+DOTLOCK create_dotlock( const char *file_to_lock );
+int make_dotlock( DOTLOCK h, long timeout );
+int release_dotlock( DOTLOCK h );
/*-- fileutil.c --*/
diff --git a/po/ChangeLog b/po/ChangeLog
index 42e83fb2c..01a6913d1 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,7 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * pl.po: New version.
+
Wed Jan 20 21:40:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
* es_ES.po: Import of new version.
diff --git a/po/pl.po b/po/pl.po
index d81cb593b..76f0057d2 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,26 +1,20 @@
-# GNU PG polish translation
+# GNU PG polish translation
# Copyright (C) 1998 Free Software Foundation, Inc.
# Janusz A. Urbanowicz <alex@bofh.net.pl>, 1998.
#
#
msgid ""
msgstr ""
-"Project-Id-Version: gnupg-0.4.0\n"
-"POT-Creation-Date: 1999-01-20 22:45+0100\n"
-"PO-Revision-Date: 1998-12-24 03:12+01:00\n"
+"Project-Id-Version: gnupg-0.9.2\n"
+"POT-Creation-Date: 1999-01-25 23:23+0100\n"
+"PO-Revision-Date: 1999-01-26 01:30+01:00\n"
"Last-Translator: Janusz A. Urbanowicz <alex@bofh.net.pl>\n"
"Language-Team: Polish <pl@li.org>\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 "
-"--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n"
-"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c "
-"cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c "
-"g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c "
-"g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c "
-"g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c 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:77
msgid "Warning: using insecure memory!\n"
@@ -36,231 +30,206 @@ msgstr "tT"
#: util/errors.c:54
msgid "general error"
-msgstr ""
+msgstr "błąd ogólny"
#: util/errors.c:55
msgid "unknown packet type"
-msgstr ""
+msgstr "nieznany rodzaj pakietu"
#: util/errors.c:56
msgid "unknown version"
-msgstr ""
+msgstr "nieznana wersja"
#: util/errors.c:57
msgid "unknown pubkey algorithm"
-msgstr ""
+msgstr "nieznany algorytm klucza publicznego"
#: util/errors.c:58
msgid "unknown digest algorithm"
-msgstr ""
+msgstr "nieznany algorytm skrótu"
#: util/errors.c:59
-#, fuzzy
msgid "bad public key"
-msgstr "brak domyślnego zbioru kluczy publicznych\n"
+msgstr "niepoprawny klucz publiczny"
#: util/errors.c:60
-#, fuzzy
msgid "bad secret key"
-msgstr "lista kluczy tajnych"
+msgstr "niepoprawny klucz prywatny"
#: util/errors.c:61
-#, fuzzy
msgid "bad signature"
-msgstr "1 niepoprawny podpis\n"
+msgstr "niepoprawny podpis"
#: util/errors.c:62
msgid "checksum error"
-msgstr ""
+msgstr "błąd sumy kontrolnej"
#: util/errors.c:63
-#, fuzzy
msgid "bad passphrase"
-msgstr "Proszę powtórzyć wyrażenie przejściowe: "
+msgstr "niepoprawne wyrażenie przejściowe"
#: util/errors.c:64
-#, fuzzy
msgid "public key not found"
-msgstr "klucz %08lX: brak klucza publicznegoL %s\n"
+msgstr "klucz publiczny nie odnaleziony"
#: util/errors.c:65
-#, fuzzy
msgid "unknown cipher algorithm"
-msgstr "|NAZWA|algorytm szyfrujący NAZWA"
+msgstr "nieznany algorytm szyfrujący"
#: util/errors.c:66
-#, fuzzy
msgid "can't open the keyring"
-msgstr "nie mogę zapisać zbioru kluczy\n"
+msgstr "otwarcie zbioru kluczy jest niemożliwe"
#: util/errors.c:67
-#, fuzzy
msgid "invalid packet"
-msgstr "niepoprawna wartość\n"
+msgstr "niepoprawny pakiet"
#: util/errors.c:68
-#, fuzzy
msgid "invalid armor"
-msgstr "niepoprawna wartość\n"
+msgstr "błąd w opakowaniu ASCII"
#: util/errors.c:69
-#, fuzzy
msgid "no such user id"
-msgstr "Brak takiego identyfikatora użytkownika.\n"
+msgstr "brak takiego identyfikatora użytkownika."
#: util/errors.c:70
-#, fuzzy
msgid "secret key not available"
-msgstr "Dostępny jest klucz tajny.\n"
+msgstr "klucz tajny jest niedostępny"
#: util/errors.c:71
-#, fuzzy
msgid "wrong secret key used"
-msgstr "lista kluczy tajnych"
+msgstr "został użyty niewłaściwy klucz tajny"
#: util/errors.c:72
msgid "not supported"
-msgstr ""
+msgstr "nie jet obsługiwany"
#: util/errors.c:73
-#, fuzzy
msgid "bad key"
-msgstr "dodkl"
+msgstr "klucz niepoprawny"
#: util/errors.c:74
-#, fuzzy
msgid "file read error"
-msgstr "błąd odczytu: %s\n"
+msgstr "błąd przy odczycie pliku"
#: util/errors.c:75
msgid "file write error"
-msgstr ""
+msgstr "błąd przy zapisie pliku"
#: util/errors.c:76
-#, fuzzy
msgid "unknown compress algorithm"
-msgstr "|N|algorytm kompresji N"
+msgstr "nieznany algorytm kompresji"
#: util/errors.c:77
msgid "file open error"
-msgstr ""
+msgstr "błąd przy otwieraniu pliku"
#: util/errors.c:78
msgid "file create error"
-msgstr ""
+msgstr "błąd przy tworzeniu pliku"
#: util/errors.c:79
-#, fuzzy
msgid "invalid passphrase"
-msgstr "Wyrażenie przejściowe: "
+msgstr "niepoprawne wyrażenie przejściowe"
#: util/errors.c:80
-#, fuzzy
msgid "unimplemented pubkey algorithm"
-msgstr ""
-"klucz %08lX: nie obsługiwany algorytm szyfrowania z kluczem publicznym\n"
+msgstr "algorytm szyfrowania z kluczem publicznym nie jest zaimplementowany"
#: util/errors.c:81
-#, fuzzy
msgid "unimplemented cipher algorithm"
-msgstr "wybrany algorytm szyfrujący jest niepoprawny\n"
+msgstr "algorytm szyfrujący nie jest zaimplementowany."
#: util/errors.c:82
msgid "unknown signature class"
-msgstr ""
+msgstr "nieznana klasa podpisu"
#: util/errors.c:83
msgid "trust database error"
-msgstr ""
+msgstr "błąd w bazie zaufania"
#: util/errors.c:84
msgid "bad MPI"
-msgstr ""
+msgstr "błąd MPI"
#: util/errors.c:85
msgid "resource limit"
-msgstr ""
+msgstr "ograniczenie zasobów"
#: util/errors.c:86
-#, fuzzy
msgid "invalid keyring"
-msgstr "niepoprawna wartość\n"
+msgstr "błąd w zbiorze kluczy"
#: util/errors.c:87
msgid "bad certificate"
-msgstr ""
+msgstr "niepoprawny certyfikat"
#: util/errors.c:88
-#, fuzzy
msgid "malformed user id"
-msgstr "dodanie nowego identyfikatora użytkownika do klucza"
+msgstr "błąd formatu indentyfikatora użytkownika"
#: util/errors.c:89
msgid "file close error"
-msgstr ""
+msgstr "błąd przy zamykaniu pliku"
#: util/errors.c:90
msgid "file rename error"
-msgstr ""
+msgstr "błąd przy zmianie nazwy pliku"
#: util/errors.c:91
msgid "file delete error"
-msgstr ""
+msgstr "błąd przy usuwaniu pliku"
#: util/errors.c:92
msgid "unexpected data"
-msgstr ""
+msgstr "nieoczekiowane dane"
#: util/errors.c:93
msgid "timestamp conflict"
-msgstr ""
+msgstr "konflikt znaczników czasu"
#: util/errors.c:94
-#, fuzzy
msgid "unusable pubkey algorithm"
-msgstr "|N|algorytm kompresji N"
+msgstr "nieużyteczny algorytm z kluczem publicznym"
#: util/errors.c:95
-#, fuzzy
msgid "file exists"
-msgstr "Plik `%s' już istnieje. "
+msgstr "plik już istnieje"
#: util/errors.c:96
msgid "weak key"
-msgstr ""
+msgstr "klucz słaby"
#: util/errors.c:97
-#, fuzzy
msgid "invalid argument"
-msgstr "niepoprawna wartość\n"
+msgstr "błędny argument"
#: util/errors.c:98
msgid "bad URI"
-msgstr ""
+msgstr "niepoprawny URI"
#: util/errors.c:99
msgid "unsupported URI"
-msgstr ""
+msgstr "URI nie obsługiwanego typu"
#: util/errors.c:100
msgid "network error"
-msgstr ""
+msgstr "błąd sieci"
#: util/logger.c:178
#, c-format
msgid "... this is a bug (%s:%d:%s)\n"
-msgstr ""
+msgstr "... to jest błąd w programie (%s:%d:%s)\n"
#: util/logger.c:184
#, c-format
msgid "you found a bug ... (%s:%d)\n"
-msgstr ""
+msgstr "znalazłeś(aś) błąd w programie ... (%s:%d)\n"
#: cipher/random.c:412
-#, fuzzy
msgid "WARNING: using insecure random number generator!!\n"
msgstr ""
-"ostrzeżenie: używany generator liczb losowych\n"
+"OSTRZEŻENIE: używany generator liczb losowych\n"
"nie jest kryptograficznie bezpieczny!!\n"
#: cipher/random.c:413
@@ -371,7 +340,7 @@ msgstr "eksport kluczy do pliku"
#: g10/g10.c:189
msgid "export keys to a key server"
-msgstr ""
+msgstr "eksport kluczy do serwera kluczy"
#: g10/g10.c:192
msgid "import/merge keys"
@@ -383,22 +352,15 @@ msgstr "wypisane sekwencji pakietów"
#: g10/g10.c:197
msgid "export the ownertrust values"
-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."
+msgstr "eksport wartości zaufania"
#: g10/g10.c:199
msgid "import ownertrust values"
-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."
+msgstr "wczytanie wartośći zaufania"
#: g10/g10.c:201
-#, fuzzy
msgid "|[NAMES]|update the trust database"
-msgstr "|[NAZWY]|sprawdzenie bazy zaufania"
+msgstr "|[NAZWY]|naniesienie poprawek do bazy zaufania"
#: g10/g10.c:203
msgid "|[NAMES]|check the trust database"
@@ -406,7 +368,7 @@ msgstr "|[NAZWY]|sprawdzenie bazy zaufania"
#: g10/g10.c:204
msgid "fix a corrupted trust database"
-msgstr ""
+msgstr "naprawa uszkodzonej Bazy Zaufania"
#: g10/g10.c:205
msgid "De-Armor a file or stdin"
@@ -440,7 +402,7 @@ msgstr "plik wynikowy w opakowaniu ASCII"
#: g10/g10.c:219
msgid "use this user-id to sign or decrypt"
-msgstr "użyć tego identyfikatora do podpisania lub odszyfrowania"
+msgstr "identyfikator do podpisania lub odszyfrowania"
#: g10/g10.c:220
msgid "use this user-id for encryption"
@@ -464,12 +426,11 @@ msgstr "z informacjami dodatkowymi"
#: g10/g10.c:227
msgid "be somewhat more quiet"
-msgstr ""
+msgstr "mniej komunikatóww"
#: g10/g10.c:228
-#, fuzzy
msgid "force v3 signatures"
-msgstr "sprawdzenie podpisów kluczy"
+msgstr "wymuszenie trzeciej wersji formatu podpisów"
#. { oDryRun, "dry-run", 0, N_("do not make any changes") },
#: g10/g10.c:230
@@ -498,12 +459,11 @@ msgstr "|NAZWA|użycie NAZWA jako domyślnego klucza tajnego"
#: g10/g10.c:236
msgid "|HOST|use this keyserver to lookup keys"
-msgstr ""
+msgstr "|HOST|serwer kluczy w którym będą poszukiwane"
#: g10/g10.c:237
-#, fuzzy
msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAZWA|algorytm szyfrujący NAZWA"
+msgstr "|NAZWA|zestaw znaków terminala NAZWA"
#: g10/g10.c:238
msgid "read options from file"
@@ -535,31 +495,27 @@ msgstr "(domyślnie 3)"
#: g10/g10.c:247
msgid "|KEYID|ulimately trust this key"
-msgstr ""
+msgstr "|KLUCZ|całkowite zaufanie dla tego klucza"
#: g10/g10.c:248
-#, fuzzy
msgid "|FILE|load extension module FILE"
-msgstr "|plik|ładowanie modułu rozszerzenia"
+msgstr "|PLIK|ładowanie modułu rozszerzenia z PLIK"
#: g10/g10.c:249
msgid "emulate the mode described in RFC1991"
msgstr "emulacja trybu opisanego w RFC1991"
#: g10/g10.c:250
-#, fuzzy
msgid "|N|use passphrase mode N"
-msgstr "Wyrażenie przejściowe: "
+msgstr "|N|N-ty tryb wprowadzania wyrażenia przejściowego"
#: g10/g10.c:252
-#, fuzzy
msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NAZWA|algorytm obliczania skrótów wiadomości NAZWA"
+msgstr "|ALG|algorytm obliczania skrótów wiadomości ALG"
#: g10/g10.c:254
-#, fuzzy
msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NAZWA|algorytm szyfrujący NAZWA"
+msgstr "|ALG|algorytmu szyfrujący ALG dla hasła"
#: g10/g10.c:256
msgid "|NAME|use cipher algorithm NAME"
@@ -575,10 +531,9 @@ msgstr "|N|algorytm kompresji N"
#: g10/g10.c:259
msgid "throw keyid field of encrypted packets"
-msgstr "usunięcie identyfikatora klucza zaszyfrowanych pakietów"
+msgstr "usunięcie identyfikatorów kluczy pakietów"
#: g10/g10.c:267
-#, fuzzy
msgid ""
"@\n"
"Examples:\n"
@@ -592,13 +547,12 @@ msgstr ""
"@\n"
"Przykłady:\n"
"\n"
-" -se -r Bob [plik] podpisanie i zaszyfrowanie kluczem Boba\n"
-" -sat [plik] podpisanie z pozostawieniem czytelnego "
-"dokumentu\n"
-" -sb [plik] podpisanie z umieszczeniem podpisu w osobnym "
+" -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"
-" -k [identyfikator] pokazuje klucz\n"
-" -kc [identyfikator] pokazuje odcisk klucza\n"
+" --list-keys [nazwy] pokazuje klucze\n"
+" --fingerprint [nazwy] pokazuje odciski kluczy\n"
#: g10/g10.c:346
msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
@@ -613,13 +567,12 @@ msgid "Usage: gpg [options] [files] (-h for help)"
msgstr "Sposób użycia: gpg [opcje] [pliki] (-h podaje pomoc)"
#: g10/g10.c:358
-#, fuzzy
msgid ""
"Syntax: gpgm [options] [files]\n"
"GnuPG maintenance utility\n"
msgstr ""
"Składnia: gpgm [opcje] [pliki]\n"
-"GNUPG program obsługujący\n"
+"GnuPG program obsługujący\n"
#: g10/g10.c:361
msgid ""
@@ -627,7 +580,7 @@ msgid ""
"sign, check, encrypt or decrypt\n"
"default operation depends on the input data\n"
msgstr ""
-"Składnia: gpg [opcje] [pliki]\\n\n"
+"Składnia: gpg [opcje] [pliki]\n"
"podpisywanie, sprawdzanie podpisów, szyfrowanie, deszyfrowanie\n"
"domyślnie wykonywana operacja zależy od danych wejściowych\n"
@@ -652,24 +605,24 @@ msgid "conflicting commands\n"
msgstr "sprzeczne polecenia\n"
#: g10/g10.c:623
-#, fuzzy, c-format
+#, c-format
msgid "NOTE: no default option file `%s'\n"
-msgstr "uwaga: brak domyślnego pliku opcji '%s\"\n"
+msgstr "UWAGA: brak domyślnego pliku opcji '%s'\n"
#: g10/g10.c:627
#, c-format
msgid "option file `%s': %s\n"
-msgstr "plik opcji `%s': %s\n"
+msgstr "plik opcji '%s': %s\n"
#: g10/g10.c:634
#, c-format
msgid "reading options from `%s'\n"
-msgstr "odczyt opcji z `%s'\n"
+msgstr "odczyt opcji z '%s'\n"
#: g10/g10.c:788
-#, fuzzy, c-format
+#, c-format
msgid "%s is not a valid character set\n"
-msgstr "Niewłaściwy znak w komentarzu\n"
+msgstr "%s nie jest poprawną nazwą zestawu znaków\n"
#: g10/g10.c:824 g10/g10.c:836
msgid "selected cipher algorithm is invalid\n"
@@ -686,23 +639,23 @@ msgstr "ustawienie algortytmu kompresji musi pochodzić z zakresu %d..%d\n"
#: g10/g10.c:847
msgid "completes-needed must be greater than 0\n"
-msgstr "opcja completes-needed musi być ustawiona na wartość większą od 0\n"
+msgstr "wartość completes-needed musi być większa od 0\n"
#: g10/g10.c:849
msgid "marginals-needed must be greater than 1\n"
-msgstr "opcja marginals-needed musi być ustawiona na wartość większą od 1\n"
+msgstr "wartość marginals-needed musi być większa od 1\n"
#: g10/g10.c:851
msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr ""
+msgstr "wartość max-cert-depth musi mieścić się w zakresie od 1 do 255\n"
#: g10/g10.c:854
msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr ""
+msgstr "UWAGA: prosty tryb S2K (0) jest stanowczo odradzany\n"
#: g10/g10.c:858
msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr ""
+msgstr "Niepoprawny tryb S2K; musi mieć wartość 0, 1 lub 3\n"
#: g10/g10.c:941
#, c-format
@@ -738,9 +691,8 @@ msgid "--decrypt [filename]"
msgstr "--decrypt [plik]"
#: g10/g10.c:1024
-#, fuzzy
msgid "--edit-key username [commands]"
-msgstr "--edit-key nazwa użytkownika"
+msgstr "--edit-key nazwa użytkownika [polecenia]"
#: g10/g10.c:1040
msgid "--delete-secret-key username"
@@ -772,7 +724,7 @@ msgstr "Opakowywanie ASCII nie powiodło się: %s\n"
#: g10/g10.c:1212
#, c-format
msgid "invalid hash algorithm `%s'\n"
-msgstr "niewłaściwy algorytm skrótu `%s'\n"
+msgstr "niewłaściwy algorytm skrótu '%s'\n"
#: g10/g10.c:1291
msgid "[filename]"
@@ -780,95 +732,95 @@ msgstr "[nazwa pliku]"
#: g10/g10.c:1295
msgid "Go ahead and type your message ...\n"
-msgstr ""
+msgstr "Wpisz tutaj swoją wiadomość ...\n"
#: g10/decrypt.c:59 g10/g10.c:1298 g10/verify.c:66
#, c-format
msgid "can't open `%s'\n"
-msgstr "nie mogę otworzyć '%s\"\n"
+msgstr "nie mogę otworzyć '%s'\n"
#: g10/armor.c:297
-#, fuzzy, c-format
+#, c-format
msgid "armor: %s\n"
-msgstr "błąd odczytu: %s\n"
+msgstr "opakowanie: %s\n"
#: g10/armor.c:320
msgid "invalid armor header: "
-msgstr ""
+msgstr "Niepoprawny nagłówek opakowania: "
#: g10/armor.c:327
msgid "armor header: "
-msgstr ""
+msgstr "nagłówek opakowania: "
#: g10/armor.c:338
-#, fuzzy
msgid "invalid clearsig header\n"
-msgstr "Niewłaściwy znak w imieniu lub nazwisku\n"
+msgstr "niewłaściwy nagłówek czytelnego podpisanego dokumentu\n"
#: g10/armor.c:390
-#, fuzzy
msgid "nested clear text signatures\n"
-msgstr "|[plik]|złożenie podpisu na czytelnym dokumencie"
+msgstr "zagnieżdżone podpisy na czytelnym dokumencie\n"
#: g10/armor.c:508
msgid "invalid dash escaped line: "
-msgstr ""
+msgstr "niepoprawne oznaczenie linii minusami:"
#: g10/armor.c:516
msgid "unexpected armor:"
-msgstr ""
+msgstr "nieoczekiwane opakowanie:"
#: g10/armor.c:632
-#, fuzzy, c-format
+#, c-format
msgid "invalid radix64 character %02x skipped\n"
-msgstr "Niewłaściwy znak w imieniu lub nazwisku\n"
+msgstr "niewłaściwy znak formatu radix64 %02x został pominięty\n"
#: g10/armor.c:675
msgid "premature eof (no CRC)\n"
-msgstr ""
+msgstr "przewczesny koniec pliku (brak CRC)\n"
#: g10/armor.c:709
msgid "premature eof (in CRC)\n"
-msgstr ""
+msgstr "przedwczesny koniec pliku (w CRC)\n"
#: g10/armor.c:713
msgid "malformed CRC\n"
-msgstr ""
+msgstr "błąd formatu CRC\n"
#: g10/armor.c:717
#, c-format
msgid "CRC error; %06lx - %06lx\n"
-msgstr ""
+msgstr "Błąd sumy CRC; %06lx - %06lx\n"
#: g10/armor.c:734
msgid "premature eof (in Trailer)\n"
-msgstr ""
+msgstr "przedwczesny koniec pliku (w linii kończącej)\n"
#: g10/armor.c:738
msgid "error in trailer line\n"
-msgstr ""
+msgstr "błąd w linii kończącej\n"
#: g10/armor.c:999
msgid "no valid OpenPGP data found.\n"
-msgstr ""
+msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n"
#: g10/armor.c:1001
#, c-format
msgid "invalid armor: line longer than %d characters\n"
-msgstr ""
+msgstr "błąd opakowania: linia dłuższa niż %d znaków\n"
#: g10/armor.c:1005
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:138
-#, fuzzy, c-format
+#, c-format
msgid ""
"No trust value assigned to %lu:\n"
"%4u%c/%08lX %s \""
msgstr ""
-"Brak definicji zaufania właściciela dla %lu:\n"
+"Brak wartości zaufania dla %lu:\n"
"%4u%c/%08lX %s \""
#: g10/pkclist.c:148
@@ -900,13 +852,12 @@ msgstr " p = powrót do głównego menu\n"
#: g10/pkclist.c:159
msgid " q = quit\n"
-msgstr ""
+msgstr "w = wyjście\n"
#. a string with valid answers
#: g10/pkclist.c:164
-#, fuzzy
msgid "sSmMqQ"
-msgstr "iIpP"
+msgstr "iIpPwW"
#: g10/pkclist.c:168
msgid "Your decision? "
@@ -914,7 +865,7 @@ msgstr "Twoja decyzja? "
#: g10/pkclist.c:188
msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr ""
+msgstr "Certyfikaty prowadzące do ostatecznie zaufanego klucza:\n"
#: g10/pkclist.c:223
msgid ""
@@ -931,43 +882,48 @@ 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:263
msgid ""
"No certificates with undefined trust found.\n"
"\n"
msgstr ""
+"Brak certyfikatów o niezdefiniowanym poziomie zaufania.\n"
+"\n"
#: g10/pkclist.c:265
-#, fuzzy
msgid ""
"No trust values changed.\n"
"\n"
-msgstr "Parametry zaufania właściciela nie zostały zmienione.\n"
+msgstr ""
+"Parametry zaufania nie zostały zmienione.\n"
+"\n"
#: g10/pkclist.c:280
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: key has been revoked!\n"
-msgstr "klucz %08lX: pozostawiony bez zmian\n"
+msgstr "klucz %08lX: klucz został unieważniony!\n"
#: g10/pkclist.c:286 g10/pkclist.c:381
msgid "Use this key anyway? "
msgstr "Użyć tego klucza pomimo to? "
#: g10/pkclist.c:308
-#, fuzzy, c-format
+#, c-format
msgid "%08lX: key has expired\n"
-msgstr "Uwaga: Data ważności tego klucza upłynęła!\n"
+msgstr "%08lX: data ważności klucza upłynęła\n"
#: g10/pkclist.c:314
#, c-format
msgid "%08lX: no info to calculate a trust probability\n"
-msgstr ""
+msgstr "%08lX: brak informacji aby obliczyć prawdopodobieństwo zaufania\n"
#: g10/pkclist.c:332
-#, fuzzy, c-format
+#, c-format
msgid "%08lX: We do NOT trust this key\n"
-msgstr "OSTRZEŻENIE: Nie ufamy temu kluczowi!\n"
+msgstr "%08lX: OSTRZEŻENIE: Nie ufamy temu kluczowi!\n"
#: g10/pkclist.c:338
#, c-format
@@ -975,14 +931,17 @@ 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:344
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:349
msgid "This key belongs to us\n"
-msgstr ""
+msgstr "Ten klucz należy do nas\n"
#: g10/pkclist.c:376
msgid ""
@@ -1019,8 +978,7 @@ msgstr "OSTRZEŻENIE: Ten klucz nie jest poświadczony zaufanym podpisem!\n"
msgid ""
" There is no indication that the signature belongs to the owner.\n"
msgstr ""
-" Nic nie wskazuje na to że ten podpis należy do właściciela "
-"klucza.\n"
+" Nic nie wskazuje na to że ten podpis złożył właściciel klucza.\n"
#: g10/pkclist.c:468
msgid "WARNING: We do NOT trust this key!\n"
@@ -1097,12 +1055,12 @@ msgstr " (%d) DSA (tylko do podpisywania)\n"
#: g10/keygen.c:393
#, c-format
msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) Klucz dla algorytmu ElGamala (tylko szyfrowanie)\n"
+msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowanie)\n"
#: g10/keygen.c:394
#, c-format
msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) Klucz dla algorytmu ElGamala (szyfrowanie i podpisywanie)\n"
+msgstr " (%d) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)\n"
#: g10/keygen.c:396
#, c-format
@@ -1115,9 +1073,8 @@ msgid "Your selection? "
msgstr "Twój wybór? "
#: g10/keygen.c:411
-#, fuzzy
msgid "Do you really want to create a sign and encrypt key? "
-msgstr "Czy na pewno chcesz usunąć wybrane klucze? "
+msgstr "Czy na pewno chcesz stworzyć klucz do szyfrowania i podpisywania? "
#: g10/keygen.c:432
msgid "Invalid selection.\n"
@@ -1154,7 +1111,7 @@ msgid ""
"computations take REALLY long!\n"
msgstr ""
"Klucze dłuższe niż 2048 bitów są odradzane ponieważ obliczenia\n"
-"potrzebne do ich wygenerowania trwają BARDZO długo!\n"
+"trwają wtedy BARDZO długo!\n"
#: g10/keygen.c:464
msgid "Are you sure that you want this keysize? "
@@ -1233,7 +1190,7 @@ msgstr ""
"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"
-" \"Jan Kowalski (Ziutek) <jank@provider.com.pl>\"\n"
+" \"Tadeusz Żeleński (Boy) <tzb@provider.com.pl>\"\n"
"\n"
#: g10/keygen.c:595
@@ -1262,7 +1219,7 @@ msgstr "To nie jest poprawny adres poczty elektronicznej\n"
#: g10/keygen.c:631
msgid "Comment: "
-msgstr "Komentarz:"
+msgstr "Komentarz: "
#: g10/keygen.c:637
msgid "Invalid character in comment\n"
@@ -1294,7 +1251,7 @@ msgid ""
"You need a Passphrase to protect your secret key.\n"
"\n"
msgstr ""
-"Musisz podać wyrażenie przejściowe (hasło) aby ochronić swók klucz tajny.\n"
+"Musisz podać wyrażenie przejściowe (hasło) aby ochronić swój klucz tajny.\n"
#: g10/keyedit.c:389 g10/keygen.c:730
msgid "passphrase not correctly repeated; try again.\n"
@@ -1345,27 +1302,24 @@ msgstr "Procedura generacji klucza została anulowana.\n"
#: g10/keygen.c:851
#, c-format
msgid "writing public certificate to `%s'\n"
-msgstr "zapisuję certyfikat publiczny w `%s'\n"
+msgstr "zapisuję certyfikat publiczny w '%s'\n"
#: g10/keygen.c:852
#, c-format
msgid "writing secret certificate to `%s'\n"
-msgstr "zapisuję certyfikat prywatny w `%s'\n"
+msgstr "zapisuję certyfikat prywatny w '%s'\n"
#: g10/keygen.c:929
msgid "public and secret key created and signed.\n"
msgstr "Prywatny i publiczny klucz został stworzony i podpisany.\n"
#: g10/keygen.c:931
-#, fuzzy
msgid ""
"Note that this key cannot be used for encryption. You may want to use\n"
"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
msgstr ""
-"Uwaga: ten klucz nie może być wykorzystany do szyfrowania. Jeśli chcesz \n"
-"użyć go do szyfrowania, musisz komendą \"--add-key\" dodać do niego "
-"podklucz\n"
-"do obsługi szyfrowania i deszyfrowania.\n"
+"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:945 g10/keygen.c:1044
#, c-format
@@ -1373,19 +1327,19 @@ msgid "Key generation failed: %s\n"
msgstr "Generacja klucza nie powiodła się: %s\n"
#: g10/keygen.c:989 g10/sig-check.c:172 g10/sign.c:52
-#, fuzzy, c-format
+#, c-format
msgid ""
"key has been created %lu second in future (time warp or clock problem)\n"
msgstr ""
-"Klucz publiczny został stworzony w przyszłości (zaburzenia \n"
+"klucz został stworzony %lu sekundę w przyszłości (zaburzenia\n"
"czasoprzestrzeni, lub źle ustawiony zegar systemowy)\n"
#: g10/keygen.c:991 g10/sig-check.c:174 g10/sign.c:54
-#, fuzzy, c-format
+#, c-format
msgid ""
"key has been created %lu seconds in future (time warp or clock problem)\n"
msgstr ""
-"Klucz publiczny został stworzony w przyszłości (zaburzenia \n"
+"klucz został stworzony %lu sekund w przyszłości (zaburzenia\n"
"czasoprzestrzeni, lub źle ustawiony zegar systemowy)\n"
#: g10/keygen.c:1022
@@ -1404,52 +1358,51 @@ msgid "error creating passphrase: %s\n"
msgstr "błąd podczs tworzenia wyrażenia przejściowego (hasła): %s\n"
#: g10/encode.c:155 g10/encode.c:269
-#, fuzzy, c-format
+#, c-format
msgid "%s: WARNING: empty file\n"
-msgstr "%s: ostrzeżenie: plik jest pusty\n"
+msgstr "%s: OSTRZEŻENIE: plik jest pusty\n"
#: g10/encode.c:222
#, c-format
msgid "reading from `%s'\n"
-msgstr "odczyt z `%s'\n"
+msgstr "odczyt z '%s'\n"
#: g10/encode.c:397
-#, fuzzy, c-format
+#, c-format
msgid "%s/%s encrypted for: %s\n"
-msgstr "%s zaszyfrowany dla: %s\n"
+msgstr "%s/%s zaszyfrowany dla: %s\n"
#: g10/export.c:147
-#, fuzzy, c-format
+#, c-format
msgid "%s: user not found: %s\n"
-msgstr "%s: nie znaleziono użytkownika\n"
+msgstr "%s: nie znaleziono użytkownika %s\n"
#: g10/export.c:156
#, c-format
msgid "certificate read problem: %s\n"
-msgstr ""
+msgstr "błąd przy odczycie certyfikatu: %s\n"
#: g10/export.c:165
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "klucz %08lX: niepoprawny certyfikat unieważnienia: %s - pominięty\n"
+msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominięty\n"
#: g10/export.c:203
-#, fuzzy
msgid "WARNING: nothing exported\n"
-msgstr "OSTRZEŻENIE: używany jest klucz nie obdarzony zaufaniem!\n"
+msgstr "OSTRZEŻENIE: nic nie zostało wyeksportowane!\n"
#: g10/getkey.c:164
msgid "too many entries in pk cache - disabled\n"
-msgstr ""
+msgstr "zbyt wiele wpisów w buforze kluczy publicznych - wyłączony\n"
#: g10/getkey.c:294
msgid "too many entries in unk cache - disabled\n"
-msgstr ""
+msgstr "zbyt wiele wpisów w buforze nieznanych kluczy - wyłączony\n"
#: g10/getkey.c:1038
#, c-format
msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr ""
+msgstr "używany jest podklucz %08lX zamiast klucza głównego %08lX\n"
#: g10/import.c:117 g10/trustdb.c:1180
#, c-format
@@ -1464,7 +1417,7 @@ msgstr "pomijam blok typu %d\n"
#: g10/import.c:172 g10/trustdb.c:1474 g10/trustdb.c:1543
#, c-format
msgid "%lu keys so far processed\n"
-msgstr ""
+msgstr "%lu kluczy przetworzonych do tej chwili\n"
#: g10/import.c:177 g10/trustdb.c:1256
#, c-format
@@ -1474,57 +1427,57 @@ msgstr "błąd odczytu: %s\n"
#: g10/import.c:179
#, c-format
msgid "Total number processed: %lu\n"
-msgstr ""
+msgstr "Ogółem przetworzonych kluczy: %lu\n"
#: g10/import.c:181
#, c-format
msgid " w/o user IDs: %lu\n"
-msgstr ""
+msgstr " bez identyfikatora: %lu\n"
#: g10/import.c:183
#, c-format
msgid " imported: %lu"
-msgstr ""
+msgstr " dołączono do zbioru: %lu"
#: g10/import.c:189
#, c-format
msgid " unchanged: %lu\n"
-msgstr ""
+msgstr " bez zmian: %lu\n"
#: g10/import.c:191
#, c-format
msgid " new user IDs: %lu\n"
-msgstr ""
+msgstr " nowych identyfikatorów: %lu\n"
#: g10/import.c:193
#, c-format
msgid " new subkeys: %lu\n"
-msgstr ""
+msgstr " nowych podkluczy: %lu\n"
#: g10/import.c:195
-#, fuzzy, c-format
+#, c-format
msgid " new signatures: %lu\n"
-msgstr "klucz %08lX: %d nowych podpisów\n"
+msgstr " nowych podpisów: %lu\n"
#: g10/import.c:197
#, c-format
msgid " new key revocations: %lu\n"
-msgstr ""
+msgstr " nowych unieważnień kluczy: %lu\n"
#: g10/import.c:199
-#, fuzzy, c-format
+#, c-format
msgid " secret keys read: %lu\n"
-msgstr "błąd procedury enum_secret_keys: %s\n"
+msgstr " tajnych kluczy wczytanych: %lu\n"
#: g10/import.c:201
-#, fuzzy, c-format
+#, c-format
msgid " secret keys imported: %lu\n"
-msgstr "Klucz %08lX: klucz tajny wczytany do zbioru\n"
+msgstr " tajnych kluczy dodanych: %lu\n"
#: g10/import.c:203
-#, fuzzy, c-format
+#, c-format
msgid " secret keys unchanged: %lu\n"
-msgstr "błąd procedury enum_secret_keys: %s\n"
+msgstr " tajnych kluczy bez zmian: %lu\n"
#: g10/import.c:343 g10/import.c:535
#, c-format
@@ -1543,7 +1496,7 @@ msgstr "to może być spowodowane brakiem podpisu właściciela klucza\n"
#: g10/import.c:367 g10/import.c:603
#, c-format
msgid "key %08lX: public key not found: %s\n"
-msgstr "klucz %08lX: brak klucza publicznegoL %s\n"
+msgstr "klucz %08lX: brak klucza publicznego: %s\n"
#: g10/import.c:373
msgid "no default public keyring\n"
@@ -1552,7 +1505,7 @@ msgstr "brak domyślnego zbioru kluczy publicznych\n"
#: g10/import.c:377 g10/openfile.c:105 g10/sign.c:215 g10/sign.c:601
#, c-format
msgid "writing to `%s'\n"
-msgstr "zapisywanie '%s\"\n"
+msgstr "zapis do '%s'\n"
#: g10/import.c:381 g10/import.c:441 g10/import.c:657
#, c-format
@@ -1567,7 +1520,7 @@ msgstr "niemożliwy jest zapis do zbioru kluczy: %s\n"
#: g10/import.c:388
#, c-format
msgid "key %08lX: public key imported\n"
-msgstr "klucz %08lX: klucz publiczny wczytany\n"
+msgstr "klucz %08lX: klucz publiczny wczytany do zbioru\n"
#: g10/import.c:401
#, c-format
@@ -1626,7 +1579,7 @@ msgstr "klucz %08lX: %d nowych podkluczy\n"
#: g10/import.c:474
#, c-format
msgid "key %08lX: not changed\n"
-msgstr "klucz %08lX: pozostawiony bez zmian\n"
+msgstr "klucz %08lX: bez zmian\n"
#: g10/import.c:553
#, c-format
@@ -1634,9 +1587,9 @@ msgid "can't lock secret keyring: %s\n"
msgstr "nie mogę zablokować zbioru kluczy tajnych: %s\n"
#: g10/import.c:556
-#, fuzzy, c-format
+#, c-format
msgid "can't write keyring: %s\n"
-msgstr "niemożliwy jest zapis do zbioru kluczy: %s\n"
+msgstr "niemożliwy jest zapis zbioru kluczy: %s\n"
#. we are ready
#: g10/import.c:559
@@ -1691,14 +1644,14 @@ msgid "key %08lX: invalid self-signature\n"
msgstr "klucz %08lX: niepoprawny podpis właściciela klucza\n"
#: g10/import.c:722
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: no subkey for key binding\n"
-msgstr "klucz %08lX: brak identyfikatora użytkownika\n"
+msgstr "klucz %08lX: brak podklucza do dowiązania\n"
#: g10/import.c:730
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: invalid subkey binding\n"
-msgstr "klucz %08lX: brak poprawnych identyfikatorów użytkownika\n"
+msgstr "klucz %08lX: niepoprawne dowiązanie podklucza\n"
#: g10/import.c:761
#, c-format
@@ -1706,16 +1659,16 @@ msgid "key %08lX: skipped userid '"
msgstr "klucz %08lX: został pominięty identyfikator użytkownika '"
#: g10/import.c:781
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: skipped subkey\n"
-msgstr "klucz %08lX: 1 nowy podklucz\n"
+msgstr "klucz %08lX: podklucz pominięty\n"
#: g10/import.c:800
#, c-format
msgid "key %08lX: revocation certificate at wrong place - skipped\n"
msgstr ""
-"klucz %08lX: certyfikat unieważnienia umieszczony w niewłaściwym miejscu\n"
-"- pominięty\n"
+"klucz %08lX: certyfikat unieważnienia umieszczony w niewłaściwym \n"
+"miejscu - został pominięty\n"
#: g10/import.c:808
#, c-format
@@ -1840,7 +1793,7 @@ msgstr "Czy na pewno chcesz to zrobić? "
#: g10/keyedit.c:455
msgid "moving a key signature to the correct place\n"
-msgstr ""
+msgstr "przenoszę podpis klucza na właściwe miejsce\n"
#: g10/keyedit.c:490
msgid "quit"
@@ -1967,14 +1920,12 @@ msgid "delete a secondary key"
msgstr "usunięcie podklucza"
#: g10/keyedit.c:509
-#, fuzzy
msgid "expire"
-msgstr "opcje"
+msgstr "data"
#: g10/keyedit.c:509
-#, fuzzy
msgid "change the expire date"
-msgstr "zmiana wyrażenia przejściowego (hasła)"
+msgstr "zmiana daty ważności klucza"
#: g10/keyedit.c:510
msgid "toggle"
@@ -2027,7 +1978,6 @@ msgid "Command> "
msgstr "Polecenie> "
#: g10/keyedit.c:617
-#, fuzzy
msgid "Need the secret key to do this.\n"
msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n"
@@ -2055,9 +2005,9 @@ msgstr ""
"Klucz nie został zmieniony więc nanoszenie poprawek nie jest konieczne.\n"
#: g10/keyedit.c:669 g10/keyedit.c:727
-#, fuzzy, c-format
+#, c-format
msgid "update of trustdb failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "naniesienie poprawek bazy zaufania nie powiodło się: %s\n"
#: g10/keyedit.c:701
msgid "Really sign all user ids? "
@@ -2097,32 +2047,31 @@ msgstr "Czy na pewno chcesz usunąć ten klucz? "
#: g10/keyedit.c:819
msgid "Invalid command (try \"help\")\n"
-msgstr "Niepoprawna komenda (spróbuj \"pomoc\")\n"
+msgstr "Niepoprawna komenda (spróbuj \"help\")\n"
#: g10/keyedit.c:1197
msgid "Please remove selections from the secret keys.\n"
-msgstr ""
+msgstr "Proszę usunąć znacznik wyboru z kluczy tajnych.\n"
#: g10/keyedit.c:1203
-#, fuzzy
msgid "Please select at most one secondary key.\n"
-msgstr "Musisz wybrać co najmniej jeden klucz.\n"
+msgstr "Proszę wybrać najwyżej jeden podklucz.\n"
#: g10/keyedit.c:1207
msgid "Changing exiration time for a secondary key.\n"
-msgstr ""
+msgstr "Zmiana daty ważności podklucza.\n"
#: g10/keyedit.c:1209
msgid "Changing exiration time for the primary key.\n"
-msgstr ""
+msgstr "Zmiana daty ważności głównego klucza.\n"
#: g10/keyedit.c:1250
msgid "You can't change the expiration date of a v3 key\n"
-msgstr ""
+msgstr "Nie można zmienić daty ważności klucza w wersji 3.\n"
#: g10/keyedit.c:1266
msgid "No corresponding signature in secret ring\n"
-msgstr ""
+msgstr "Brak odpowiadającego podpisu w zbiorze kluczy tajnych\n"
#: g10/keyedit.c:1326
#, c-format
@@ -2135,19 +2084,17 @@ msgid "No secondary key with index %d\n"
msgstr "Brak podklucza o indeksie %d\n"
#: g10/mainproc.c:199
-#, fuzzy
msgid "public key encrypted data: good DEK\n"
-msgstr "błąd odszyfrowywania klucza publicznego: %s\n"
+msgstr "dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny\n"
#: g10/mainproc.c:202
#, c-format
msgid "public key decryption failed: %s\n"
-msgstr "błąd odszyfrowywania klucza publicznego: %s\n"
+msgstr "błąd odszyfrowywania kluczem publicznym: %s\n"
#: g10/mainproc.c:229
-#, fuzzy
msgid "decryption okay\n"
-msgstr "błąd odszyfrowywania: %s\n"
+msgstr "odszyfrowane poprawnie\n"
#: g10/mainproc.c:232
#, c-format
@@ -2156,16 +2103,16 @@ msgstr "błąd odszyfrowywania: %s\n"
#: g10/mainproc.c:249
msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr ""
+msgstr "UWAGA: nadawca zaznaczył że wiadomość nie powinna być zapisywana\n"
#: g10/mainproc.c:251
#, c-format
msgid "original file name='%.*s'\n"
-msgstr ""
+msgstr "pierwotna nazwa pliku='%.*s'\n"
#: g10/mainproc.c:834
msgid "signature verification suppressed\n"
-msgstr ""
+msgstr "wymuszono pominięcie sprawdzenia podpisu\n"
#: g10/mainproc.c:840
#, c-format
@@ -2189,24 +2136,24 @@ msgstr "Nie mogę sprawdzić podpisu: %s\n"
#: g10/mainproc.c:957
msgid "old style (PGP 2.x) signature\n"
-msgstr ""
+msgstr "podpis starego typu (PGP 2.x)\n"
#: g10/mainproc.c:962
msgid "invalid root packet detected in proc_tree()\n"
-msgstr ""
+msgstr "wykryto niepoprawny pakiet pierwotny w proc_tree()\n"
#: g10/misc.c:90
-#, fuzzy, c-format
+#, c-format
msgid "can't disable core dumps: %s\n"
-msgstr "nie mogę otworzyć %s: %s\n"
+msgstr "nie można wyłączyć zrzucania pamięci: %s\n"
#: g10/misc.c:93
msgid "WARNING: program may create a core file!\n"
-msgstr ""
+msgstr "OSTRZEŻENIE: program może stworzyć plik zrzutu pamięci!\n"
#: g10/misc.c:200
msgid "Experimental algorithms should not be used!\n"
-msgstr ""
+msgstr "Nie należy używać algorytmów doświadczalnych!\n"
#: g10/misc.c:214
msgid ""
@@ -2219,16 +2166,18 @@ msgstr ""
#: g10/misc.c:235
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:113
-#, fuzzy, c-format
+#, c-format
msgid "can't handle public key algorithm %d\n"
-msgstr "nie mogę zablokować zbioru kluczy publicznych: %s\n"
+msgstr "algorytm klucza publicznego niemożliwy do obsłużenia: %d\n"
#: g10/parse-packet.c:892
#, c-format
msgid "subpacket of type %d has critical bit set\n"
-msgstr ""
+msgstr "podpakiet typu %d ma ustawiony krytyczny bit\n"
#: g10/passphrase.c:141
msgid ""
@@ -2241,41 +2190,40 @@ msgstr ""
"dla użytkownika: \""
#: g10/passphrase.c:150
-#, fuzzy, c-format
+#, c-format
msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "(długość %u bitów, typ %s, klucz %08lX, stworzony %s)\n"
+msgstr "długość %u bitów, typ %s, klucz %08lX, stworzony %s"
#: g10/passphrase.c:155
#, c-format
msgid " (main key ID %08lX)"
-msgstr ""
+msgstr " (główny ID klucza %08lX)"
#: g10/passphrase.c:183
-#, fuzzy
msgid "Enter passphrase: "
msgstr "Wyrażenie przejściowe: "
#: g10/passphrase.c:187
-#, fuzzy
msgid "Repeat passphrase: "
-msgstr "Proszę powtórzyć wyrażenie przejściowe: "
+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: "
+msgstr "Nazwa pliku danych: "
#: g10/plaintext.c:229
msgid "reading stdin ...\n"
-msgstr ""
+msgstr "czytam strumień standardowego wejścia\n"
#: g10/plaintext.c:292
#, c-format
msgid "can't open signed data `%s'\n"
-msgstr "nie mogę otworzyć podpisanego pliku `%s'\n"
+msgstr "nie można otworzyć podpisanego pliku '%s'\n"
#: g10/pubkey-enc.c:78
#, c-format
@@ -2283,19 +2231,17 @@ msgid "anonymous receiver; trying secret key %08lX ...\n"
msgstr "adresat anonimowy; próbuję klucz tajny %08lX ...\n"
#: g10/pubkey-enc.c:84
-#, fuzzy
msgid "okay, we are the anonymous recipient.\n"
msgstr "OK, to my jesteśmy adresatem anonimowym.\n"
#: g10/pubkey-enc.c:136
-#, fuzzy
msgid "old encoding of the DEK is not supported\n"
-msgstr "%d - algorytm ochrony nie obsługiwany\n"
+msgstr "stary, nie obsługiwany algorytm szyfrowania klucza sesyjnego\n"
#: g10/pubkey-enc.c:183
-#, fuzzy, c-format
+#, c-format
msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "uwaga: brak algorytmu szyfrującego %d w ustawieniach\n"
+msgstr "UWAGA: brak algorytmu szyfrującego %d w ustawieniach\n"
#: g10/seckey-cert.c:56
#, c-format
@@ -2308,7 +2254,6 @@ msgstr ""
"Niepoprawne wyrażenie przejściowe (hasło); proszę spróbować ponownie ...\n"
#: g10/seckey-cert.c:223
-#, fuzzy
msgid "WARNING: Weak key detected - please change passphrase again.\n"
msgstr ""
"Ostrzeżenie: Wykryto klucz słaby algorytmu - należy ponownie zmienić \n"
@@ -2318,219 +2263,222 @@ msgstr ""
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:163
-#, fuzzy, c-format
+#, c-format
msgid "public key is %lu second newer than the signature\n"
-msgstr "klucz %08lX: brak identyfikatora użytkownika do podpisu\n"
+msgstr "klucz publiczny jest o %lu sekund młodszy od podpisu\n"
#: g10/sig-check.c:164
-#, fuzzy, c-format
+#, c-format
msgid "public key is %lu seconds newer than the signature\n"
-msgstr "klucz %08lX: brak identyfikatora użytkownika do podpisu\n"
+msgstr "klucz publiczny jest o %lu sekund młodszy od podpisu\n"
#: g10/sig-check.c:180
-#, fuzzy, c-format
+#, c-format
msgid "NOTE: signature key expired %s\n"
-msgstr "ostrzeżenie: klucz podpisujący przekroczył datę ważności %s\n"
+msgstr "UWAGA: klucz podpisujący przekroczył datę ważności %s\n"
#: g10/sig-check.c:237
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
-#, fuzzy, c-format
+#, c-format
msgid "%s signature from: %s\n"
-msgstr "NIEPOPRAWNY podpis złożony przez \""
+msgstr "%s podpis złożony przez: %s\n"
#: g10/sign.c:210 g10/sign.c:596
-#, fuzzy, c-format
+#, c-format
msgid "can't create %s: %s\n"
-msgstr "nie mogę otworzyć %s: %s\n"
+msgstr "nie mogę stworzyć %s: %s\n"
#: g10/sign.c:306
-#, fuzzy
msgid "signing:"
-msgstr "podpis"
+msgstr "podpis:"
#: g10/sign.c:346
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: `%s' is an empty file\n"
-msgstr "%s: ostrzeżenie: plik jest pusty\n"
+msgstr "OSTRZEŻENIE: plik '%s' jest pusty\n"
#: g10/textfilter.c:199
#, c-format
msgid "can't handle text lines longer than %d characters\n"
-msgstr ""
+msgstr "nie mogę obsłużyć linii tekstu dłuższej niż %d znaków\n"
#: g10/tdbio.c:116 g10/tdbio.c:1418
-#, fuzzy, c-format
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "baza zaufania, wpis %lu: lseek() nie powiodła się: %s\n"
#: g10/tdbio.c:122 g10/tdbio.c:1425
#, c-format
msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr ""
+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 ""
+msgstr "zbyt duże zlecenie dla bazy zaufania\n"
#: g10/tdbio.c:416
-#, fuzzy, c-format
+#, c-format
msgid "%s: can't access: %s\n"
-msgstr "%s: nie mogę otworzyć: %s\n"
+msgstr "%s: dostęp niemożliwy: %s\n"
#: g10/ringedit.c:273 g10/tdbio.c:436
-#, fuzzy, c-format
+#, c-format
msgid "%s: can't create directory: %s\n"
-msgstr "%s: nie mogę otworzyć: %s\n"
+msgstr "%s: nie mogę utworzyć katalogu: %s\n"
#: g10/ringedit.c:279 g10/tdbio.c:439
#, c-format
msgid "%s: directory created\n"
-msgstr ""
+msgstr "%s: katalog utworzony\n"
#: g10/tdbio.c:443
#, c-format
msgid "%s: directory does not exist!\n"
-msgstr ""
+msgstr "%s: katalog nie istnieje!\n"
#: g10/openfile.c:101 g10/openfile.c:165 g10/ringedit.c:1292 g10/tdbio.c:449
-#, fuzzy, c-format
+#, c-format
msgid "%s: can't create: %s\n"
-msgstr "%s: nie mogę otworzyć: %s\n"
+msgstr "%s: nie mogę utworzyć: %s\n"
#: g10/tdbio.c:473
#, c-format
msgid "%s: failed to create version record: %s"
-msgstr ""
+msgstr "%s: stworzenie zapisu o wersji nie powiodło się: %s"
#: g10/tdbio.c:477
#, c-format
msgid "%s: invalid trustdb created\n"
-msgstr ""
+msgstr "%s: stworzony niepoprawny plik bazy zaufania\n"
#: g10/tdbio.c:479
#, c-format
msgid "%s: trustdb created\n"
-msgstr ""
+msgstr "%s: baza zaufania utworzona\n"
#: g10/tdbio.c:512
#, c-format
msgid "%s: invalid trustdb\n"
-msgstr ""
+msgstr "%s: niepoprawny plik bazy zaufania\n"
#: g10/tdbio.c:545
#, c-format
msgid "%s: failed to create hashtable: %s\n"
-msgstr ""
+msgstr "%s: tworzenie tablicy skrótów nie powiodło się: %s\n"
#: g10/tdbio.c:553
-#, fuzzy, c-format
+#, c-format
msgid "%s: error updating version record: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "%s: błąd przy uaktualnianiu numeru wersji: %s\n"
#: g10/tdbio.c:569 g10/tdbio.c:608 g10/tdbio.c:633 g10/tdbio.c:1351
#: g10/tdbio.c:1378
-#, fuzzy, c-format
+#, c-format
msgid "%s: error reading version record: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "%s: błąd odczytu numeru wersji: %s\n"
#: g10/tdbio.c:582
-#, fuzzy, c-format
+#, c-format
msgid "%s: error writing version record: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "%s: błąd zapisu numeru wersji: %s\n"
#: g10/tdbio.c:1058
-#, fuzzy, c-format
+#, c-format
msgid "trustdb: lseek failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "baza zaufania: procedura lseek() zawiodła: %s\n"
#: g10/tdbio.c:1066
-#, fuzzy, c-format
+#, c-format
msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "naniesienie poprawek nie powiodło się: %s\n"
+msgstr "baza zaufania: procedura read() (n=%d) zawiodła: %s\n"
#: g10/tdbio.c:1087
#, c-format
msgid "%s: not a trustdb file\n"
-msgstr ""
+msgstr "%s: to nie jest plik bazy zaufania\n"
#: g10/tdbio.c:1103
#, c-format
msgid "%s: version record with recnum %lu\n"
-msgstr ""
+msgstr "%s: wpis wersji z numerem %lu\n"
#: g10/tdbio.c:1108
#, c-format
msgid "%s: invalid file version %d\n"
-msgstr ""
+msgstr "%s: niewłaściwa wersja pliku %d\n"
#: g10/tdbio.c:1384
-#, fuzzy, c-format
+#, c-format
msgid "%s: error reading free record: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "%s: błąd odczytu pustego wpisu: %s\n"
#: g10/tdbio.c:1392
-#, fuzzy, c-format
+#, c-format
msgid "%s: error writing dir record: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "%s: błąd zapisu wpisu katalogowego: %s\n"
#: g10/tdbio.c:1402
#, c-format
msgid "%s: failed to zero a record: %s\n"
-msgstr ""
+msgstr "%s: zerowanie rekordu nie powiodło się: %s\n"
#: g10/tdbio.c:1432
#, c-format
msgid "%s: failed to append a record: %s\n"
-msgstr ""
+msgstr "%s: dopisanie rekordu nie powiodło się: %s\n"
#: g10/trustdb.c:142
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:155
#, c-format
msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr ""
+msgstr "wpis zaufania %lu, typ zapytania %d: odczyt nie powiódł się: %s\n"
#: g10/trustdb.c:170
#, c-format
msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr ""
+msgstr "wpis zaufania %lu, typ zapytania %d: zapis nie powiódł się: %s\n"
#: g10/trustdb.c:184
-#, fuzzy, c-format
+#, c-format
msgid "trust record %lu: delete failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "wpis zaufania %lu: usunięcie nie powiodło się %s\n"
#: g10/trustdb.c:198
-#, fuzzy, c-format
+#, c-format
msgid "trustdb: sync failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "baza zaufania: synchronizacja nie powiodła się %s\n"
#: g10/trustdb.c:327
-#, fuzzy, c-format
+#, c-format
msgid "error reading dir record for LID %lu: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "błąd odczytu wpisu katalogowego dla LID %lu: %s\n"
#: g10/trustdb.c:334
#, c-format
msgid "lid %lu: expected dir record, got type %d\n"
-msgstr ""
+msgstr "lid %lu: oczekiwany wpis katalogowy, napotkano typ %d\n"
#: g10/trustdb.c:339
#, c-format
msgid "no primary key for LID %lu\n"
-msgstr ""
+msgstr "brak klucza głównego dla LID %lu\n"
#: g10/trustdb.c:344
-#, fuzzy, c-format
+#, c-format
msgid "error reading primary key for LID %lu: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "błąd odczytu głównego klucza dla LID %lu: %s\n"
#: g10/trustdb.c:420
#, c-format
@@ -2540,17 +2488,18 @@ msgstr "powiązany rekord podpisu %lu ma niewłaściwego właściciela\n"
#: g10/trustdb.c:463
#, c-format
msgid "'%s' is not a valid long keyID\n"
-msgstr ""
+msgstr "'%s\" nie jest właściwym identyfikatorem klucza\n"
#: g10/trustdb.c:498
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "klucz %08lX: klucz publiczny wczytany\n"
+msgstr ""
+"klucz %08lX: brak klucza publicznego dla klucza zaufanego - pominięty\n"
#: g10/trustdb.c:507 g10/trustdb.c:565
#, c-format
msgid "key %08lX: can't put it into the trustdb\n"
-msgstr "klucz %08lX: wpisanie do Bazy Zaufania niemożliwe\n"
+msgstr "klucz %08lX: wpisanie do bazy zaufania niemożliwe\n"
#: g10/trustdb.c:512 g10/trustdb.c:571
#, c-format
@@ -2558,24 +2507,24 @@ msgid "key %08lX: query record failed\n"
msgstr "klucz %08lX: wyszukanie zapisu nie powiodło się\n"
#: g10/trustdb.c:517 g10/trustdb.c:580
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: already in trusted key table\n"
-msgstr "klucz %08lX: już znajduje się w in ultikey_table\n"
+msgstr "klucz %08lX: już znajduje się w tablicy kluczy zaufanych\n"
#: g10/trustdb.c:520 g10/trustdb.c:583
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: accepted as trusted key.\n"
-msgstr "Klucz %08lX.%lu: wprowadzony do bazy zaufania\n"
+msgstr "Klucz %08lX: zaakceptowany jako klucz zaufany.\n"
#: g10/trustdb.c:536
-#, fuzzy, c-format
+#, c-format
msgid "NOTE: secret key %08lX is NOT protected.\n"
-msgstr "Ten klucz nie jest chroniony.\n"
+msgstr "UWAGA: klucz tajny %08lX NIE jest chroniony.\n"
#: g10/trustdb.c:548
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "klucz %08lX: klucz tajny bez klucza jawnego\n"
+msgstr "klucz %08lX: klucz tajny bez klucza jawnego - pominięty\n"
#: g10/trustdb.c:555
#, c-format
@@ -2583,68 +2532,67 @@ 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:591
-#, fuzzy, c-format
+#, c-format
msgid "enumerate secret keys failed: %s\n"
-msgstr "błąd procedury enum_secret_keys: %s\n"
+msgstr "wyliczenie kluczy tajnych nie powiodło się %s\n"
#: g10/trustdb.c:774
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: read dir record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "lid %lu: odczyt wpisu katalogowego nie powiódł się: %s\n"
#: g10/trustdb.c:783
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: read key record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "lid %lu: odczyt wpisu klucza nie powiódł się: %s\n"
#: g10/trustdb.c:793
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: read uid record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "lid %lu: odczyt wpisu z identyfikatorem nie powiódł się; %s\n"
#: g10/trustdb.c:802
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: read pref record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "lid %lu: odczyt wpisu ustawień nie powiódł się: %s\n"
#: g10/trustdb.c:812
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: read sig record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "lid %lu: odczyt wpisu o podpisach nie powiódł się: %s\n"
#: g10/trustdb.c:1013
msgid "Ooops, no keys\n"
-msgstr ""
+msgstr "Oops, brak kluczy\n"
#: g10/trustdb.c:1017
-#, fuzzy
msgid "Ooops, no user ids\n"
-msgstr "lista kluczy i identyfikatorów użytkowników"
+msgstr "Oops, brak identyfikatorów użytkowników\n"
#: g10/trustdb.c:1088 g10/trustdb.c:1106
#, c-format
msgid "user '%s' read problem: %s\n"
-msgstr ""
+msgstr "użytkownik '%s' błąd przy odczycie: %s\n"
#: g10/trustdb.c:1091 g10/trustdb.c:1109
#, c-format
msgid "user '%s' list problem: %s\n"
-msgstr ""
+msgstr "użytkownik '%s' błąd listy: %s\n"
#: g10/trustdb.c:1099 g10/trustdb.c:1346
-#, fuzzy, c-format
+#, c-format
msgid "user '%s' not found: %s\n"
-msgstr "%s: nie znaleziono użytkownika\n"
+msgstr "użytkownik '%s' nie odnaleziony: %s\n"
#: g10/trustdb.c:1101 g10/trustdb.c:1348
#, c-format
msgid "problem finding '%s' in trustdb: %s\n"
-msgstr ""
+msgstr "problem podczas szukania '%s' w bazie zaufania: %s\n"
#: g10/trustdb.c:1104
#, c-format
msgid "user '%s' not in trustdb\n"
-msgstr ""
+msgstr "brak użytkownika '%s' w bazie zaufania\n"
#: g10/trustdb.c:1139
#, c-format
@@ -2652,166 +2600,163 @@ 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"
#: g10/trustdb.c:1145
msgid "directory record w/o primary key\n"
-msgstr ""
+msgstr "wpis katalogowy bez klucza głównego\n"
#: g10/trustdb.c:1152
-#, fuzzy, c-format
+#, c-format
msgid "error reading key record: %s\n"
msgstr "błąd odczytu rekordu podpisu: %s\n"
#: g10/trustdb.c:1192
msgid "line too long\n"
-msgstr ""
+msgstr "linia za długa\n"
#: g10/trustdb.c:1200
msgid "error: missing colon\n"
-msgstr ""
+msgstr "błąd: brak dwukropka\n"
#: g10/trustdb.c:1205
-#, fuzzy
msgid "error: invalid fingerprint\n"
-msgstr "okazanie odcisku klucza"
+msgstr "błąd: niewłaściwy odcisk klucza\n"
#: g10/trustdb.c:1209
-#, fuzzy
msgid "error: no ownertrust value\n"
-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."
+msgstr "błąd: brak wartośći zaufania właściciela\n"
#: g10/trustdb.c:1234
msgid "key not in trustdb, searching ring.\n"
-msgstr ""
+msgstr "brak klucza w bazie zaufania, przeszukiwany jest zbiór kluczy\n"
#: g10/trustdb.c:1237
-#, fuzzy, c-format
+#, c-format
msgid "key not in ring: %s\n"
-msgstr "Generacja klucza nie powiodła się: %s\n"
+msgstr "klucza nie ma w zbiorze: %s\n"
#: g10/trustdb.c:1241
msgid "Oops: key is now in trustdb???\n"
-msgstr ""
+msgstr "Oops: klucz już jest w bazie zaufania???\n"
#. update the ownertrust
#: g10/trustdb.c:1246
-#, fuzzy, c-format
+#, c-format
msgid "insert trust record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "wstawienie wpisu zaufania nie powiodło się: %s\n"
#. error
#: g10/trustdb.c:1252
-#, fuzzy, c-format
+#, c-format
msgid "error finding dir record: %s\n"
-msgstr "błąd odczytu rekordu podpisu: %s\n"
+msgstr "błąd podczas poszukiwania wpisu katalogowego: %s\n"
#: g10/trustdb.c:1351
#, c-format
msgid "user '%s' not in trustdb - inserting\n"
-msgstr ""
+msgstr "brak użytkownika '%s' w bazie zaufania - dodano\n"
#: g10/trustdb.c:1354
-#, fuzzy, c-format
+#, c-format
msgid "failed to put '%s' into trustdb: %s\n"
-msgstr "Inicjowanie Bazy Zaufania nie powiodło się: %s\n"
+msgstr "umieszczenie '%s' w Bazie Zaufania nie powiodło się: %s\n"
#: g10/trustdb.c:1404
#, c-format
msgid "%s: keyblock read problem: %s\n"
-msgstr ""
+msgstr "%s: problem przy odczycie bloku klucza: %s\n"
#: g10/trustdb.c:1418
-#, fuzzy, c-format
+#, c-format
msgid "%s: update failed: %s\n"
-msgstr "naniesienie poprawek nie powiodło się: %s\n"
+msgstr "%s: zapis zmian nie powiodł się: %s\n"
#: g10/trustdb.c:1421
#, c-format
msgid "%s: updated\n"
-msgstr ""
+msgstr "%s: uaktualniony\n"
#: g10/trustdb.c:1423
#, c-format
msgid "%s: okay\n"
-msgstr ""
+msgstr "%s: OK\n"
#: g10/trustdb.c:1438
#, c-format
msgid "lid %lu: dir record w/o key - skipped\n"
-msgstr ""
+msgstr "lid %lu: wpis katalogowy bez bloku klucza - pominięty\n"
#: g10/trustdb.c:1451
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: keyblock not found: %s\n"
-msgstr "klucz %08lX: brak klucza publicznegoL %s\n"
+msgstr "lid %lu: blok klucza nie został odnaleziony: %s\n"
#: g10/trustdb.c:1460 g10/trustdb.c:1529
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: update failed: %s\n"
-msgstr "naniesienie poprawek nie powiodło się: %s\n"
+msgstr "lid %lu: naniesienie poprawek nie powiodło się: %s\n"
#: g10/trustdb.c:1466 g10/trustdb.c:1535
#, c-format
msgid "lid %lu: updated\n"
-msgstr ""
+msgstr "lid %lu: uaktualniony\n"
#: g10/trustdb.c:1470 g10/trustdb.c:1539
#, c-format
msgid "lid %lu: okay\n"
-msgstr ""
+msgstr "lid %lu: OK\n"
#: g10/trustdb.c:1477 g10/trustdb.c:1545
#, c-format
msgid "%lu keys processed\n"
-msgstr ""
+msgstr "%lu kluczy przetworzonych\n"
#: g10/trustdb.c:1479
-#, fuzzy, c-format
+#, c-format
msgid "\t%lu keys skipped\n"
-msgstr "%s: pominięty: %s\n"
+msgstr "\t%lu kluczy pominiętych\n"
#: g10/trustdb.c:1481 g10/trustdb.c:1547
#, c-format
msgid "\t%lu keys with errors\n"
-msgstr ""
+msgstr "\t%lu kluczy z błędami\n"
#: g10/trustdb.c:1483 g10/trustdb.c:1549
#, c-format
msgid "\t%lu keys updated\n"
-msgstr ""
+msgstr "\t%lu kluczy uaktualnionych\n"
#: g10/trustdb.c:1513
-#, fuzzy, c-format
+#, c-format
msgid "lid ?: insert failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "lid ?: wpisanie nie powiodło się: %s\n"
#: g10/trustdb.c:1518
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: insert failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "lid %lu: wpisanie nie powiodło się: %s\n"
#: g10/trustdb.c:1524
#, c-format
msgid "lid %lu: inserted\n"
-msgstr ""
+msgstr "lid %lu: wpisany\n"
#: g10/trustdb.c:1551
#, c-format
msgid "\t%lu keys inserted\n"
-msgstr ""
+msgstr " %lu kluczy wpisanych\n"
#: g10/trustdb.c:1554
-#, fuzzy, c-format
+#, c-format
msgid "enumerate keyblocks failed: %s\n"
-msgstr "błąd procedury enum_secret_keys: %s\n"
+msgstr "wyliczenie bloków kluczy nie powiodło się: %s\n"
#: g10/trustdb.c:1599
-#, fuzzy, c-format
+#, c-format
msgid "check_trust: search dir record failed: %s\n"
-msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodło się: %s\n"
+msgstr "check_trust: poszukiwanie wpisu katalogowego nie powiodło się: %s\n"
#: g10/trustdb.c:1606
#, c-format
@@ -2842,213 +2787,219 @@ msgstr "klucz %08lX.%lu: błąd przy sprawdzaniu zaufania: %s\n"
#: g10/trustdb.c:1842 g10/trustdb.c:1871 g10/trustdb.c:2610
msgid "WARNING: can't yet handle long pref records\n"
-msgstr ""
+msgstr "OSTRZEŻENIE: długie wpisy ustawień jeszcze nie są obsługiwane.\n"
#: g10/trustdb.c:1893
-#, fuzzy, c-format
+#, c-format
msgid "get_dir_record: search_record failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiodło się: %s\n"
+msgstr "get_dir_record: funkcja search_record zawiodła: %s\n"
#: g10/trustdb.c:1956
#, 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:1960
#, 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:1967
#, 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:1973
#, c-format
msgid "lid %lu: no primary key\n"
-msgstr ""
+msgstr "lid %lu: brak klucza głównego\n"
#: g10/trustdb.c:2006
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: user id not found in keyblock\n"
-msgstr "%s: nie znaleziono użytkownika\n"
+msgstr ""
+"lid %lu: identyfikator użytkownika nie został odnaleziony w bloku klucza\n"
#: g10/trustdb.c:2010
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: user id without signature\n"
-msgstr "klucz %08lX: brak identyfikatora użytkownika do podpisu\n"
+msgstr "lid %lu: niepodpisany identyfikator użytkownika\n"
#: g10/trustdb.c:2017
#, c-format
msgid "lid %lu: self-signature in hintlist\n"
-msgstr ""
+msgstr "lid %lu: podpis klucza nim samym w liście domyślnej\n"
#: g10/trustdb.c:2028 g10/trustdb.c:2747 g10/trustdb.c:2831
msgid "Valid certificate revocation"
-msgstr ""
+msgstr "Poprawne unieważnienie certyfikatu"
#: g10/trustdb.c:2029 g10/trustdb.c:2748 g10/trustdb.c:2832
msgid "Good certificate"
-msgstr ""
+msgstr "Poprawny certyfikat"
#: g10/trustdb.c:2038
msgid "very strange: no public key\n"
-msgstr ""
+msgstr "bardzo dziwne: brak klucza publicznego\n"
#: g10/trustdb.c:2086
#, c-format
msgid "hintlist %lu[%d] of %lu does not point to a dir record\n"
-msgstr ""
+msgstr "lista domyślna %lu[%d] z %lu nie wskazuje na wpis katalogowy\n"
#: g10/trustdb.c:2092
#, c-format
msgid "lid %lu does not have a key\n"
-msgstr ""
+msgstr "lid %lu nie ma klucza\n"
#: g10/trustdb.c:2102
-#, fuzzy, c-format
+#, c-format
msgid "lid %lu: can't get keyblock: %s\n"
-msgstr "nie mogę zapisać bloku klucza: %s\n"
+msgstr "lid %lu: pobranie bloku klucza niemożliwe: %s\n"
#: g10/trustdb.c:2159 g10/trustdb.c:3082
-#, fuzzy, c-format
+#, c-format
msgid "tdbio_search_dir failed: %s\n"
-msgstr "Usunięcie opakowania ASCII nie powiodło się: %s\n"
+msgstr "Procedura tdbio_search_dir nie powiodła się: %s\n"
#: g10/trustdb.c:2312
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX.%lu: Good subkey binding\n"
-msgstr "klucz %08lX: brak identyfikatora użytkownika\n"
+msgstr "klucz %08lX.%lu Dobre dowiązanie podklucza\n"
#: g10/trustdb.c:2318 g10/trustdb.c:2360
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-msgstr "klucz %08lX: brak poprawnych identyfikatorów użytkownika\n"
+msgstr "klucz %08lX.%lu: Niepoprawne dowiązanie podklucza %s\n"
#: g10/trustdb.c:2333
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX.%lu: Valid key revocation\n"
-msgstr "klucz %08lX.%lu: okres ważności upłynął %s\n"
+msgstr "klucz %08lX.%lu: Poprawne unieważnienie klucza\n"
#: g10/trustdb.c:2339
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-msgstr "klucz %08lX: brak klucza publicznegoL %s\n"
+msgstr "klucz %08lX.%lu: Niewłaściwe unieważnienie klucza: %s\n"
#: g10/trustdb.c:2354
-#, fuzzy, c-format
+#, c-format
msgid "key %08lX.%lu: Valid subkey revocation\n"
-msgstr "klucz %08lX: brak poprawnych identyfikatorów użytkownika\n"
+msgstr "klucz %08lX.%lu: Poprawne unieważnienie podklucza\n"
#: g10/trustdb.c:2454
-#, fuzzy
msgid "Good self-signature"
-msgstr "[podpis klucza nim samym]"
+msgstr "Poprawny podpis klucza nim samym"
#: g10/trustdb.c:2465
-#, fuzzy
msgid "Invalid self-signature"
-msgstr "klucz %08lX: niepoprawny podpis właściciela klucza\n"
+msgstr "Niepoprawny podpis klucza nim samym"
#: g10/trustdb.c:2475
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:2482
-#, fuzzy
msgid "Valid user ID revocation\n"
-msgstr "Niewłaściwy wybór.\n"
+msgstr "Poprawne unieważnienie identyfikatora użytkownika\n"
#: g10/trustdb.c:2489
-#, fuzzy
msgid "Invalid user ID revocation"
-msgstr "Niewłaściwy wybór.\n"
+msgstr "Niepoprawne unieważnienie identyfikatora użytkownika"
#: g10/trustdb.c:2573
-#, fuzzy
msgid "Too many preferences"
-msgstr "lista opcji"
+msgstr "Zbyt wiele ustawień."
#: g10/trustdb.c:2587
msgid "Too many preference items"
-msgstr ""
+msgstr "Zbyt wiele pozycji w ustawieniach"
#: g10/trustdb.c:2726
msgid "Duplicated certificate - deleted"
-msgstr ""
+msgstr "Podwójna kopia certyfikatu - usunięta"
#: g10/trustdb.c:2759
msgid "Hmmm, public key lost?"
-msgstr ""
+msgstr "Hmmm, klucz publiczny starcony?"
#: g10/trustdb.c:2769 g10/trustdb.c:2852
-#, fuzzy
msgid "Invalid certificate revocation"
-msgstr "Niewłaściwy wybór.\n"
+msgstr "Niepoprawne unieważnienie certyfikatu"
#: g10/trustdb.c:2770 g10/trustdb.c:2853
-#, fuzzy
msgid "Invalid certificate"
-msgstr "Niewłaściwy znak w imieniu lub nazwisku\n"
+msgstr "Niepoprawny certyfikat"
#: g10/trustdb.c:2785
#, 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:2799
#, c-format
msgid "sig record %lu[%d] points to wrong record.\n"
-msgstr ""
+msgstr "zapis o podpisach %lu[%d] wskazuje na zły wpis.\n"
#. that should never happen
#: g10/trustdb.c:3052
-#, fuzzy, c-format
+#, c-format
msgid "insert_trust_record: keyblock not found: %s\n"
-msgstr "klucz %08lX: brak klucza tajnego: %s\n"
+msgstr "insert_trust_record: brak bloku klucza: %s\n"
#: g10/trustdb.c:3070
msgid "did not use primary key for insert_trust_record()\n"
-msgstr ""
+msgstr "głowny klucz nie został użyty w procedurze insert_trust_record()\n"
#: g10/ringedit.c:293
-#, fuzzy, c-format
+#, c-format
msgid "%s: can't create keyring: %s\n"
-msgstr "niemożliwy jest zapis do zbioru kluczy: %s\n"
+msgstr "%s: stworzenie zbioru kluczy jest niemożliwe: %s\n"
#: g10/ringedit.c:299 g10/ringedit.c:1300
#, c-format
msgid "%s: keyring created\n"
-msgstr ""
+msgstr "%s: zbiór kluczy utworzony\n"
#: g10/ringedit.c:1486
msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr ""
+msgstr "OSTRZEŻENIE: Istnieją dwa pliki z poufnymi informacjami.\n"
#: g10/ringedit.c:1487
#, c-format
msgid "%s is the unchanged one\n"
-msgstr ""
+msgstr "%s pozostał bez zmian\n"
#: g10/ringedit.c:1488
#, c-format
msgid "%s is the new one\n"
-msgstr ""
+msgstr "%s został utworzony\n"
#: g10/ringedit.c:1489
msgid "Please fix this possible security flaw\n"
-msgstr ""
+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
-#, fuzzy, c-format
+#, c-format
msgid "skipped `%s': %s\n"
-msgstr "%s: pominięty: %s\n"
+msgstr "pominięty '%s': %s\n"
#: g10/skclist.c:119
#, c-format
@@ -3056,48 +3007,48 @@ 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:58
#, c-format
msgid "File `%s' exists. "
-msgstr "Plik `%s' już istnieje. "
+msgstr "Plik '%s' już istnieje. "
#: g10/openfile.c:60
msgid "Overwrite (y/N)? "
msgstr "Nadpisać (t/N)? "
#: g10/openfile.c:85
-#, fuzzy
msgid "writing to stdout\n"
-msgstr "zapisywanie '%s\"\n"
+msgstr "zapisywanie na wyjście standardowe\n"
#: g10/openfile.c:134
-#, fuzzy, c-format
+#, c-format
msgid "assuming signed data in `%s'\n"
-msgstr "nie mogę otworzyć podpisanego pliku `%s'\n"
+msgstr "przyjęto obecność podpisanych danych w '%s'\n"
#: g10/openfile.c:181
#, c-format
msgid "%s: new options file created\n"
-msgstr ""
+msgstr "%s: stworzono nowy plik ustawień\n"
#: g10/encr-data.c:59
-#, fuzzy, c-format
+#, c-format
msgid "%s encrypted data\n"
-msgstr "szyfrowanie danych"
+msgstr "%s zaszyfrowane dane\n"
#: g10/encr-data.c:61
#, c-format
msgid "encrypted with unknown algorithm %d\n"
-msgstr ""
+msgstr "zaszyfrowane nieznanym algorytmem %d\n"
#: g10/encr-data.c:74
-#, fuzzy
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 "
+"OSTRZEŻENIE: Informacje były szyfrowane słabym kluczem szyfru "
"symetrycznego.\n"
#: g10/seskey.c:52
@@ -3122,10 +3073,14 @@ msgstr ""
#: 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 "If you want to use this untrusted key anyway, answer \"yes\"."
+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"
@@ -3133,44 +3088,70 @@ msgstr "Podaj identyfikator użytkownika adresata tych informacji."
#: g10/helptext.c:66
msgid "keygen.algo"
-msgstr "Select the algorithm to use:Needs more explanation here."
+msgstr ""
+"Wybór algorytmu.\n"
+"DSA (znany też jako DSS) to Algorytm Podpisu Cyfrowego - używać go można "
+"tylko\n"
+"do tworzenia cyfrowych podpisów. Jego wybór jest sugerowany ponieważ\n"
+"sprawdzanie podpisów złożonych algorytmem DSA jest dużo szybsze niż tych\n"
+"złożonych algorytmem ElGamala.\n"
+"Algorytm ElGamala to algorytm klucza publicznego który nadaje można "
+"stosować\n"
+"zarówno do szyfrowania jak i do tworzenia podpisów cyfrowych\n"
+"W standardzie OpenPGP algorytm ElGamala występuje w dwóch wersjach:\n"
+"obsługującej podpisywanie, oraz obsługującej podpisywanie i szyfrowanie; z\n"
+"technicznego punktu widzenia algorytm działa tak samo, ale pewne "
+"współczynniki\n"
+"muszą być dobrane tak aby klucz nadawał się do składania bezpiecznych\n"
+"podpisów. Ten program obsługuje obie wersje, ale inne implementacje OpenPGP\n"
+"nie muszą rozumieć obsługiwać klucza przeznaczonego jednocześnie do\n"
+"podpisywania i szyfrowania.\n"
+"Główny klucz musi być zawsze kluczem służącym umożliwiającym podpisywanie,\n"
+"dlatego też ten program nie obsługuje osobnych kluczy ElGamala służących "
+"tylko\n"
+"do szyfrowania."
#: g10/helptext.c:82
-#, fuzzy
msgid "keygen.algo.elg_se"
-msgstr "Select the algorithm to use:Needs more explanation here."
+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 ""
+msgstr "Rozmiar klucza"
#: g10/helptext.c:93
msgid "keygen.size.huge.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" lub \"nie\""
#: g10/helptext.c:98
msgid "keygen.size.large.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" lub \"nie\""
#: g10/helptext.c:103
msgid "keygen.valid"
-msgstr ""
+msgstr "Podaj żądaną wartość"
#: g10/helptext.c:107
msgid "keygen.valid.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" lub \"nie\""
#: g10/helptext.c:112
msgid "keygen.name"
-msgstr ""
+msgstr "Podaj nazwę (imię, nazwisko) właściciela klucza"
#: g10/helptext.c:117
msgid "keygen.email"
-msgstr ""
+msgstr "Adres e-mail (opcjonalny ale warto go wpisać)"
#: g10/helptext.c:121
msgid "keygen.comment"
-msgstr ""
+msgstr "Komentarz (opcjonalny)"
#: g10/helptext.c:126
msgid "keygen.userid.cmd"
@@ -3189,35 +3170,39 @@ msgstr ""
#: g10/helptext.c:139
msgid "sign_uid.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" lub \"nie\""
#: g10/helptext.c:144
msgid "change_passwd.empty.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" lub \"nie\""
#: g10/helptext.c:149
msgid "keyedit.cmd"
-msgstr "Please enter \"help\"."
+msgstr "Podaj \"help\" aby zobaczyć listę poleceń."
#: g10/helptext.c:153
msgid "keyedit.save.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" lub \"nie\""
#: g10/helptext.c:158
msgid "keyedit.cancel.okay"
-msgstr ""
+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 ""
+msgstr "Odpowiedz \"tak\" jeśli na pewno chcesz skasować ten podklucz"
#: g10/helptext.c:175
msgid "passphrase.enter"
@@ -3232,11 +3217,11 @@ msgstr ""
#: g10/helptext.c:186
msgid "detached_signature.filename"
-msgstr ""
+msgstr "Nazwa pliku którego dotyczy ten podpis"
#: g10/helptext.c:190
msgid "openfile.overwrite.okay"
-msgstr ""
+msgstr "Odpowiedz \"tak\" jeśli na pewno chcesz nadpisać ten plik"
#: g10/helptext.c:204
msgid "No help available"
@@ -3245,7 +3230,19 @@ msgstr "Pomoc niedostępna"
#: g10/helptext.c:216
#, c-format
msgid "No help available for `%s'"
-msgstr "Brak informacji o `%s'"
+msgstr "Brak pomocy o '%s'"
+
+#~ 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/ChangeLog b/scripts/ChangeLog
index 9f2241b21..a2b6e9019 100644
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,7 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * config.sub, config.guess: Support i386-emx-os2
+
Sun Jan 17 11:04:33 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
* autogen.sh: Now checks for installed gettext
diff --git a/scripts/config.guess b/scripts/config.guess
index 03db0ec08..3aa18a54e 100755
--- a/scripts/config.guess
+++ b/scripts/config.guess
@@ -708,6 +708,10 @@ main ()
printf ("i860-alliant-bsd\n"); exit (0);
#endif
+#ifdef __EMX__
+ printf ("i386-emx-os2"); exit(0);
+#endif
+
exit (1);
}
EOF
diff --git a/scripts/config.sub b/scripts/config.sub
index 34c7b07b4..4d3675dbd 100755
--- a/scripts/config.sub
+++ b/scripts/config.sub
@@ -282,6 +282,9 @@ case $basic_machine in
atarist)
basic_machine=m68k-atari
;;
+ emx)
+ basic_machine=i386-emx
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -971,6 +974,9 @@ case $os in
-mint)
os=-mint
;;
+ -os2)
+ os=-os2
+ ;;
-none)
;;
*)
diff --git a/scripts/mkwebpage b/scripts/mkwebpage
index 8b6782477..f6b9dbd2b 100755
--- a/scripts/mkwebpage
+++ b/scripts/mkwebpage
@@ -18,6 +18,10 @@ fix_it () {
EOF
cvs -Q checkout -p gnupg/NEWS >>$dir/NEWS
+ here=`pwd`
+ cd $dir
+ ln -sf gnupg.html index.html
+ cd $here
}
diff --git a/tools/bftest.c b/tools/bftest.c
index 0bfb4105e..edfb8e36a 100644
--- a/tools/bftest.c
+++ b/tools/bftest.c
@@ -22,7 +22,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#ifdef __MINGW32__
+#ifdef HAVE_DOSISH_SYSTEM
#include <io.h>
#include <fcntl.h>
#endif
@@ -67,7 +67,7 @@ main(int argc, char **argv)
int n, size=4096;
int algo;
- #ifdef __MINGW32__
+ #ifdef HAVE_DOSISH_SYSTEM
setmode( fileno(stdin), O_BINARY );
setmode( fileno(stdout), O_BINARY );
#endif
diff --git a/tools/shmtest.c b/tools/shmtest.c
index 53637e174..1cfb9b4ed 100644
--- a/tools/shmtest.c
+++ b/tools/shmtest.c
@@ -19,10 +19,10 @@
#include "ttyio.h"
#include "i18n.h"
-#ifdef __MINGW32__
+#ifdef HAVE_DOSISH_SYSTEM
int main( int argc, char **argv )
{
- fprintf(stderr, "Sorry, not yet available for Windoze\n");
+ fprintf(stderr, "Sorry, not yet available for DOSish systems\n");
exit(1);
}
#else
@@ -193,4 +193,4 @@ main(int argc, char **argv)
}
-#endif /* !__MINGW32__ */
+#endif
diff --git a/util/ChangeLog b/util/ChangeLog
index 0c1597a51..a0a534603 100644
--- a/util/ChangeLog
+++ b/util/ChangeLog
@@ -1,3 +1,10 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * 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 <wk@isil.d.shuttle.de>
* http.c (http_wait_response): Moved the shutdown behind the dup
diff --git a/util/dotlock.c b/util/dotlock.c
index 71e6178b3..656454ee3 100644
--- a/util/dotlock.c
+++ b/util/dotlock.c
@@ -35,37 +35,56 @@
#include "util.h"
#include "memory.h"
+struct dotlock_handle {
+ struct dotlock_handle *next;
+ char *tname; /* name of lockfile template */
+ char *lockname; /* name of the real lockfile */
+ int locked; /* lock status */
+};
+
+
+static DOTLOCK all_lockfiles;
static int read_lockfile( const char *name );
+static void remove_lockfiles(void);
/****************
- * Create a lockfile with the given name. A TIMEOUT of 0
- * returns immediately, -1 waits forever (hopefully not), other
- * values are timeouts in milliseconds.
- * Returns: a char pointer used as handle for release lock
- * or NULL in case of an error.
+ * Create a lockfile with the given name and return an object of
+ * type DOTLOCK which may be used later to actually do the lock.
+ * A cleanup routine gets installed to cleanup left over locks
+ * or other files used together with the lockmechanism.
+ * Althoug the function is called dotlock, this does not necessarily
+ * mean that real lockfiles are used - the function may decide to
+ * use fcntl locking. Calling the function with NULL only install
+ * the atexit handler and maybe used to assure that the cleanup
+ * is called after all other atexit handlers.
*
* Notes: This function creates a lock file in the same directory
* as file_to_lock with the name "file_to_lock.lock"
* A temporary file ".#lk.<hostname>.pid[.threadid] is used.
* This function does nothing for Windoze.
*/
-const char *
-make_dotlock( const char *file_to_lock, long timeout )
+DOTLOCK
+create_dotlock( const char *file_to_lock )
{
- int fd=-1, pid;
+ static int initialized;
+ DOTLOCK h;
+ int fd = -1;
char pidstr[16];
- const char *handle = NULL;
- char *lockname = NULL;
- char *tname = NULL;
- int have_tfile = 0;
struct utsname uts;
const char *nodename;
const char *dirpart;
int dirpartlen;
- const char *maybe_dead="";
- int backoff=0;
+ if( !initialized ) {
+ atexit( remove_lockfiles );
+ initialized = 1;
+ }
+ if( !file_to_lock )
+ return NULL;
+
+ h = m_alloc_clear( sizeof *h );
+#ifndef HAVE_DOSISH_SYSTEM
sprintf( pidstr, "%10d\n", getpid() );
/* fixme: add the hostname to the second line (FQDN or IP addr?) */
@@ -84,131 +103,180 @@ make_dotlock( const char *file_to_lock, long timeout )
dirpart = file_to_lock;
}
- #ifdef _THREAD_SAFE
- tname = m_alloc( dirpartlen + 6 + strlen(nodename) + 11+ 20 );
- sprintf( tname, "%.*s/.#lk.%s.%d.%p",
- dirpartlen, dirpart, nodename, getpid(), &pid );
- #else
- tname = m_alloc( dirpartlen + 6 + strlen(nodename) + 11 );
- sprintf( tname, "%.*s/.#lk.%s.%d",
- dirpartlen, dirpart, nodename, getpid() );
+ #ifdef _REENTRANT
+ /* fixme: aquire mutex on all_lockfiles */
#endif
+ h->next = all_lockfiles;
+ all_lockfiles = h;
+
+ h->tname = m_alloc( dirpartlen + 6+30+ strlen(nodename) + 11 );
+ sprintf( h->tname, "%.*s/.#lk%p.%s.%d",
+ dirpartlen, dirpart, h, nodename, (int)getpid() );
+
do {
errno = 0;
- fd = open( tname, O_WRONLY|O_CREAT|O_EXCL,
+ fd = open( h->tname, O_WRONLY|O_CREAT|O_EXCL,
S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR );
} while( fd == -1 && errno == EINTR );
if( fd == -1 ) {
log_error( "failed to create temporary file `%s': %s\n",
- tname, strerror(errno));
- goto leave;
+ h->tname, strerror(errno));
+ m_free(h->tname);
+ m_free(h);
+ return NULL;
}
- have_tfile = 1;
if( write(fd, pidstr, 11 ) != 11 ) {
- log_fatal( "error writing to `%s': %s\n", tname, strerror(errno) );
- goto leave;
+ all_lockfiles = h->next;
+ #ifdef _REENTRANT
+ /* release mutex */
+ #endif
+ log_fatal( "error writing to `%s': %s\n", h->tname, strerror(errno) );
+ close(fd);
+ unlink(h->tname);
+ m_free(h->tname);
+ m_free(h);
+ return NULL;
}
if( close(fd) ) {
- log_error( "error closing `%s': %s\n", tname, strerror(errno));
- goto leave;
+ all_lockfiles = h->next;
+ #ifdef _REENTRANT
+ /* release mutex */
+ #endif
+ log_error( "error closing `%s': %s\n", h->tname, strerror(errno));
+ unlink(h->tname);
+ m_free(h->tname);
+ m_free(h);
+ return NULL;
}
- fd = -1;
- lockname = m_alloc( strlen(file_to_lock) + 6 );
- strcpy(stpcpy(lockname, file_to_lock), ".lock");
+ #ifdef _REENTRANT
+ /* release mutex */
+ #endif
+#endif /* !HAVE_DOSISH_SYSTEM */
+ h->lockname = m_alloc( strlen(file_to_lock) + 6 );
+ strcpy(stpcpy(h->lockname, file_to_lock), ".lock");
+ return h;
+}
+
+static int
+maybe_deadlock( DOTLOCK h )
+{
+ DOTLOCK r;
- retry:
- if( !link(tname, lockname) ) {/* fixme: better use stat to check the link count */
- handle = lockname;
- lockname = NULL;
+ for( r=all_lockfiles; r; r = r->next ) {
+ if( r != h && r->locked )
+ return 1;
}
- else if( errno == EEXIST ) {
- if( (pid = read_lockfile(lockname)) == -1 ) {
- if( errno == ENOENT ) {
- log_info( "lockfile disappeared\n");
- goto retry;
+ return 0;
+}
+
+/****************
+ * Do a lock on H. A TIMEOUT of 0 returns immediately,
+ * -1 waits forever (hopefully not), other
+ * values are timeouts in milliseconds.
+ * Returns: 0 on success
+ */
+int
+make_dotlock( DOTLOCK h, long timeout )
+{
+#ifdef HAVE_DOSISH_SYSTEM
+ return 0;
+#else
+ int pid;
+ const char *maybe_dead="";
+ int backoff=0;
+
+ if( h->locked ) {
+ log_debug("oops, `%s' is already locked\n", h->lockname );
+ return 0;
+ }
+
+ for(;;) {
+ if( !link(h->tname, h->lockname) ) {
+ /* fixme: better use stat to check the link count */
+ h->locked = 1;
+ return 0; /* okay */
+ }
+ if( errno != EEXIST ) {
+ log_error( "lock not made: link() failed: %s\n", strerror(errno) );
+ return -1;
+ }
+ if( (pid = read_lockfile(h->lockname)) == -1 ) {
+ if( errno != ENOENT ) {
+ log_info("cannot read lockfile\n");
+ return -1;
}
- log_info("cannot read lockfile\n");
+ log_info( "lockfile disappeared\n");
+ continue;
}
else if( pid == getpid() ) {
log_info( "Oops: lock already hold by us\n");
- handle = lockname;
- lockname = NULL;
+ h->locked = 1;
+ return 0; /* okay */
}
else if( kill(pid, 0) && errno == ESRCH ) {
maybe_dead = " - probably dead";
#if 0 /* we should not do this without checking the permissions */
/* and the hostname */
log_info( "removing stale lockfile (created by %d)", pid );
- remove( lockname );
- goto retry;
#endif
}
if( timeout == -1 ) {
struct timeval tv;
- log_info( "waiting for lock (hold by %d%s) ...\n", pid, maybe_dead );
+ log_info( "waiting for lock (hold by %d%s) %s...\n",
+ pid, maybe_dead, maybe_deadlock(h)? "(deadlock?) ":"");
+
+
/* can't use sleep, cause signals may be blocked */
tv.tv_sec = 1 + backoff;
tv.tv_usec = 0;
select(0, NULL, NULL, NULL, &tv);
if( backoff < 10 )
backoff++ ;
- goto retry;
}
- /* fixme: implement timeouts */
+ else
+ return -1;
}
- else
- log_error( "lock not made: link() failed: %s\n", strerror(errno) );
-
- leave:
- if( fd != -1 )
- close(fd);
- if( have_tfile )
- remove(tname);
- m_free(tname);
- m_free(lockname);
- return handle;
+ /*not reached */
+#endif /* !HAVE_DOSISH_SYSTEM */
}
-/****************
- * Create a lockfile for a existing file
- * Returns: a char pointer used as handle for release lock
- * or NULL in case of an error.
- *
- * Notes: This function creates a lock file in the same directory
- * as file_to_lock with the name "lock.<inode-no>"
- *
- * int
- * make_inodelock( const char *file_to_lock )
- *
- */
-
-
-
/****************
* release a lock
* Returns: 0 := success
*/
int
-release_dotlock( const char *lockfile )
+release_dotlock( DOTLOCK h )
{
- int pid = read_lockfile( lockfile );
+#ifdef HAVE_DOSISH_SYSTEM
+ return 0;
+#else
+ int pid;
+
+ if( !h->locked ) {
+ log_debug("oops, `%s' is not locked\n", h->lockname );
+ return 0;
+ }
+
+ pid = read_lockfile( h->lockname );
if( pid == -1 ) {
- log_error( "release_dotlock: lockfile error");
+ log_error( "release_dotlock: lockfile error\n");
return -1;
}
if( pid != getpid() ) {
- log_error( "release_dotlock: not our lock (pid=%d)", pid);
+ log_error( "release_dotlock: not our lock (pid=%d)\n", pid);
return -1;
}
- if( remove( lockfile ) ) {
+ if( unlink( h->lockname ) ) {
log_error( "release_dotlock: error removing lockfile `%s'",
- lockfile);
+ h->lockname);
return -1;
}
- m_free( (char*)lockfile );
+ /* fixme: check that the link count is now 1 */
+ h->locked = 0;
return 0;
+#endif /* !HAVE_DOSISH_SYSTEM */
}
@@ -218,6 +286,9 @@ release_dotlock( const char *lockfile )
static int
read_lockfile( const char *name )
{
+ #ifdef HAVE_DOSISH_SYSTEM
+ return 0;
+ #else
int fd, pid;
char pidstr[16];
@@ -241,5 +312,29 @@ read_lockfile( const char *name )
return -1;
}
return pid;
+ #endif
+}
+
+
+static void
+remove_lockfiles()
+{
+ #ifndef HAVE_DOSISH_SYSTEM
+ DOTLOCK h, h2;
+
+ h = all_lockfiles;
+ all_lockfiles = NULL;
+
+ while( h ) {
+ h2 = h->next;
+ if( h->locked )
+ unlink( h->lockname );
+ unlink(h->tname);
+ m_free(h->tname);
+ m_free(h->lockname);
+ m_free(h);
+ h = h2;
+ }
+ #endif
}
diff --git a/util/fileutil.c b/util/fileutil.c
index adf5c7a5d..7910631c2 100644
--- a/util/fileutil.c
+++ b/util/fileutil.c
@@ -38,16 +38,16 @@ char *
make_basename(const char *filepath)
{
char *p;
-
+
if ( !(p=strrchr(filepath, '/')) )
- #ifdef __MINGW32__
- if ( !(p=strrchr(filepath, '\\')) )
- if ( !(p=strrchr(filepath, ':')) )
+ #ifdef HAVE_DRIVE_LETTERS
+ if ( !(p=strrchr(filepath, '\\')) )
+ if ( !(p=strrchr(filepath, ':')) )
#endif
- {
- return m_strdup(filepath);
- }
-
+ {
+ return m_strdup(filepath);
+ }
+
return m_strdup(p+1);
}
@@ -65,21 +65,21 @@ make_dirname(const char *filepath)
char *dirname;
int dirname_length;
char *p;
-
+
if ( !(p=strrchr(filepath, '/')) )
- #ifdef __MINGW32__
- if ( !(p=strrchr(filepath, '\\')) )
- if ( !(p=strrchr(filepath, ':')) )
+ #ifdef HAVE_DRIVE_LETTERS
+ if ( !(p=strrchr(filepath, '\\')) )
+ if ( !(p=strrchr(filepath, ':')) )
#endif
- {
- return m_strdup(".");
- }
-
+ {
+ return m_strdup(".");
+ }
+
dirname_length = p-filepath;
dirname = m_alloc(dirname_length+1);
strncpy(dirname, filepath, dirname_length);
dirname[dirname_length] = 0;
-
+
return dirname;
}
@@ -126,7 +126,7 @@ compare_filenames( const char *a, const char *b )
/* ? check whether this is an absolute filename and
* resolve symlinks?
*/
- #ifdef __MINGW32__
+ #ifdef HAVE_DRIVE_LETTERS
return stricmp(a,b);
#else
return strcmp(a,b);
diff --git a/util/iobuf.c b/util/iobuf.c
index 9fba1fc0b..037d2cdc3 100644
--- a/util/iobuf.c
+++ b/util/iobuf.c
@@ -126,8 +126,11 @@ file_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len)
*(char**)buf = "file_filter";
}
else if( control == IOBUFCTRL_FREE ) {
- if( fp != stdin && fp != stdout )
+ 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 */
}
@@ -545,7 +548,8 @@ iobuf_open( const char *fname )
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'\n", a->no, a->subno, fname );
+ log_debug("iobuf-%d.%d: open `%s' fd=%d\n",
+ a->no, a->subno, fname, fileno(fcx->fp) );
return a;
}
diff --git a/util/secmem.c b/util/secmem.c
index e9bc05abd..0aa4e9f61 100644
--- a/util/secmem.c
+++ b/util/secmem.c
@@ -217,7 +217,7 @@ void
secmem_init( size_t n )
{
if( !n ) {
- #ifndef __MINGW32__
+ #ifndef HAVE_DOSISH_SYSTEM
uid_t uid;
disable_secmem=1;
@@ -245,8 +245,12 @@ secmem_malloc( size_t size )
MEMBLOCK *mb, *mb2;
int compressed=0;
- if( !pool_okay )
- log_bug("secmem not initialized\n");
+ if( !pool_okay ) {
+ log_info(
+ _("operation is not possible without initialized secure memory\n"));
+ log_info(_("(you may have used the wrong program for this task)\n"));
+ exit(2);
+ }
if( show_warning && !suspend_warning ) {
show_warning = 0;
print_warn();
diff --git a/util/ttyio.c b/util/ttyio.c
index cfc8f4dac..e457949a0 100644
--- a/util/ttyio.c
+++ b/util/ttyio.c
@@ -105,6 +105,8 @@ init_ttyfp()
SetConsoleMode(con.in, DEF_INPMODE );
SetConsoleMode(con.out, DEF_OUTMODE );
+ #elif defined(__EMX__)
+ ttyfp = stdout; /* Fixme: replace by the real functions: see wklib */
#else
ttyfp = fopen("/dev/tty", "r+");
if( !ttyfp )