Page MenuHome GnuPG

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/ABOUT-NLS b/ABOUT-NLS
deleted file mode 100644
index 5fde45a0b..000000000
--- a/ABOUT-NLS
+++ /dev/null
@@ -1,324 +0,0 @@
-Notes on the Free Translation Project
-*************************************
-
- Free software is going international! The Free Translation Project
-is a way to get maintainers of free software, translators, and users all
-together, so that will gradually become able to speak many languages.
-A few packages already provide translations for their messages.
-
- If you found this `ABOUT-NLS' file inside a distribution, you may
-assume that the distributed package does use GNU `gettext' internally,
-itself available at your nearest GNU archive site. But you do _not_
-need to install GNU `gettext' prior to configuring, installing or using
-this package with messages translated.
-
- Installers will find here some useful hints. These notes also
-explain how users should proceed for getting the programs to use the
-available translations. They tell how people wanting to contribute and
-work at translations should contact the appropriate team.
-
- When reporting bugs in the `intl/' directory or bugs which may be
-related to internationalization, you should tell about the version of
-`gettext' which is used. The information can be found in the
-`intl/VERSION' file, in internationalized packages.
-
-Quick configuration advice
-==========================
-
- If you want to exploit the full power of internationalization, you
-should configure it using
-
- ./configure --with-included-gettext
-
-to force usage of internationalizing routines provided within this
-package, despite the existence of internationalizing capabilities in the
-operating system where this package is being installed. So far, only
-the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias, message inheritance, automatic
-charset conversion or plural form handling) as the implementation here.
-It is also not possible to offer this additional functionality on top
-of a `catgets' implementation. Future versions of GNU `gettext' will
-very likely convey even more functionality. So it might be a good idea
-to change to GNU `gettext' as soon as possible.
-
- So you need _not_ provide this option if you are using GNU libc 2 or
-you have installed a recent copy of the GNU gettext package with the
-included `libintl'.
-
-INSTALL Matters
-===============
-
- Some packages are "localizable" when properly installed; the
-programs they contain can be made to speak your own native language.
-Most such packages use GNU `gettext'. Other packages have their own
-ways to internationalization, predating GNU `gettext'.
-
- By default, this package will be installed to allow translation of
-messages. It will automatically detect whether the system already
-provides the GNU `gettext' functions. If not, the GNU `gettext' own
-library will be used. This library is wholly contained within this
-package, usually in the `intl/' subdirectory, so prior installation of
-the GNU `gettext' package is _not_ required. Installers may use
-special options at configuration time for changing the default
-behaviour. The commands:
-
- ./configure --with-included-gettext
- ./configure --disable-nls
-
-will respectively bypass any pre-existing `gettext' to use the
-internationalizing routines provided within this package, or else,
-_totally_ disable translation of messages.
-
- When you already have GNU `gettext' installed on your system and run
-configure without an option for your new package, `configure' will
-probably detect the previously built and installed `libintl.a' file and
-will decide to use this. This might be not what is desirable. You
-should use the more recent version of the GNU `gettext' library. I.e.
-if the file `intl/VERSION' shows that the library which comes with this
-package is more recent, you should use
-
- ./configure --with-included-gettext
-
-to prevent auto-detection.
-
- The configuration process will not test for the `catgets' function
-and therefore it will not be used. The reason is that even an
-emulation of `gettext' on top of `catgets' could not provide all the
-extensions of the GNU `gettext' library.
-
- Internationalized packages have usually many `po/LL.po' files, where
-LL gives an ISO 639 two-letter code identifying the language. Unless
-translations have been forbidden at `configure' time by using the
-`--disable-nls' switch, all available translations are installed
-together with the package. However, the environment variable `LINGUAS'
-may be set, prior to configuration, to limit the installed set.
-`LINGUAS' should then contain a space separated list of two-letter
-codes, stating which languages are allowed.
-
-Using This Package
-==================
-
- As a user, if your language has been installed for this package, you
-only have to set the `LANG' environment variable to the appropriate
-`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
-and `CC' is an ISO 3166 two-letter country code. For example, let's
-suppose that you speak German and live in Germany. At the shell
-prompt, merely execute `setenv LANG de_DE' (in `csh'),
-`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
-This can be done from your `.login' or `.profile' file, once and for
-all.
-
- You might think that the country code specification is redundant.
-But in fact, some languages have dialects in different countries. For
-example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
-country code serves to distinguish the dialects.
-
- Not all programs have translations for all languages. By default, an
-English message is shown in place of a nonexistent translation. If you
-understand other languages, you can set up a priority list of languages.
-This is done through a different environment variable, called
-`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
-for the purpose of message handling, but you still need to have `LANG'
-set to the primary language; this is required by other parts of the
-system libraries. For example, some Swedish users who would rather
-read translations in German than English for when Swedish is not
-available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
-
- In the `LANGUAGE' environment variable, but not in the `LANG'
-environment variable, `LL_CC' combinations can be abbreviated as `LL'
-to denote the language's main dialect. For example, `de' is equivalent
-to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
-(Portuguese as spoken in Portugal) in this context.
-
-Translating Teams
-=================
-
- For the Free Translation Project to be a success, we need interested
-people who like their own language and write it well, and who are also
-able to synergize with other translators speaking the same language.
-Each translation team has its own mailing list. The up-to-date list of
-teams can be found at the Free Translation Project's homepage,
-`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
-area.
-
- If you'd like to volunteer to _work_ at translating messages, you
-should become a member of the translating team for your own language.
-The subscribing address is _not_ the same as the list itself, it has
-`-request' appended. For example, speakers of Swedish can send a
-message to `sv-request@li.org', having this message body:
-
- subscribe
-
- Keep in mind that team members are expected to participate
-_actively_ in translations, or at solving translational difficulties,
-rather than merely lurking around. If your team does not exist yet and
-you want to start one, or if you are unsure about what to do or how to
-get started, please write to `translation@iro.umontreal.ca' to reach the
-coordinator for all translator teams.
-
- The English team is special. It works at improving and uniformizing
-the terminology in use. Proven linguistic skill are praised more than
-programming skill, here.
-
-Available Packages
-==================
-
- Languages are not equally supported in all packages. The following
-matrix shows the current state of internationalization, as of September
-2001. The matrix shows, in regard of each package, for which languages
-PO files have been submitted to translation coordination, with a
-translation percentage of at least 50%.
-
- Ready PO files bg cs da de el en eo es et fi fr gl he hr id it ja
- +----------------------------------------------------+
- a2ps | [] [] [] |
- bash | [] [] [] [] |
- bfd | |
- binutils | [] |
- bison | [] [] [] [] [] |
- clisp | [] [] [] [] |
- cpio | [] [] [] [] [] |
- diffutils | [] [] [] [] [] [] [] |
- enscript | [] [] |
- error | [] [] |
- fetchmail | |
- fileutils | [] [] [] [] [] [] [] [] |
- findutils | [] [] [] [] [] [] [] [] |
- flex | [] [] [] |
- freetype | |
- gas | |
- gawk | [] [] |
- gcal | |
- gcc | |
- gettext | [] [] [] [] [] [] [] [] [] [] |
- gnupg | [] [] [] [] [] [] [] |
- gprof | |
- grep | [] [] [] [] [] [] [] [] |
- hello | [] [] [] [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] |
- indent | [] [] [] [] [] |
- jpilot | [] |
- kbd | |
- ld | [] |
- libc | [] [] [] [] [] [] [] [] |
- lilypond | [] |
- lynx | [] [] [] [] |
- m4 | [] [] [] [] [] [] [] [] |
- make | [] [] [] [] [] [] |
- mysecretdiary | [] |
- nano | [] [] [] |
- opcodes | |
- parted | [] [] [] |
- ptx | [] [] [] [] [] [] [] |
- python | |
- recode | [] [] [] [] [] [] [] [] [] |
- sed | [] [] [] [] [] [] [] [] [] [] [] [] |
- sh-utils | [] [] [] [] [] [] [] [] [] [] |
- sharutils | [] [] [] [] [] [] [] [] |
- sketch | |
- soundtracker | [] [] [] |
- sp | |
- tar | [] [] [] [] [] [] [] [] |
- texinfo | [] [] [] [] [] [] |
- textutils | [] [] [] [] [] [] [] [] |
- util-linux | [] [] |
- wdiff | [] [] [] |
- wget | [] [] [] [] [] [] [] [] [] [] |
- +----------------------------------------------------+
- bg cs da de el en eo es et fi fr gl he hr id it ja
- 0 14 24 32 11 1 8 23 13 1 33 22 4 0 7 9 18
-
- ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
- +----------------------------------------------------+
- a2ps | [] [] [] | 6
- bash | | 4
- bfd | | 0
- binutils | | 1
- bison | [] | 6
- clisp | [] | 5
- cpio | [] [] [] [] [] | 10
- diffutils | [] [] [] [] | 11
- enscript | [] [] [] | 5
- error | [] [] | 4
- fetchmail | | 0
- fileutils | [] [] [] [] [] [] [] [] [] | 17
- findutils | [] [] [] [] [] [] [] [] | 16
- flex | [] [] [] | 6
- freetype | | 0
- gas | | 0
- gawk | [] | 3
- gcal | | 0
- gcc | | 0
- gettext | [] [] [] [] [] [] [] [] | 18
- gnupg | [] [] [] | 10
- gprof | | 0
- grep | [] [] [] [] | 12
- hello | [] [] [] [] [] [] [] [] [] [] [] | 22
- id-utils | [] [] [] | 6
- indent | [] [] [] [] [] [] [] | 12
- jpilot | | 1
- kbd | [] | 1
- ld | | 1
- libc | [] [] [] [] [] [] [] [] | 16
- lilypond | [] [] | 3
- lynx | [] [] [] [] | 8
- m4 | [] [] [] [] | 12
- make | [] [] [] [] [] [] | 12
- mysecretdiary | | 1
- nano | [] | 4
- opcodes | [] | 1
- parted | [] [] | 5
- ptx | [] [] [] [] [] [] [] [] | 15
- python | | 0
- recode | [] [] [] [] | 13
- sed | [] [] [] [] [] [] [] | 19
- sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 21
- sharutils | [] [] [] | 11
- sketch | | 0
- soundtracker | | 3
- sp | | 0
- tar | [] [] [] [] [] [] [] | 15
- texinfo | [] | 7
- textutils | [] [] [] [] [] [] [] [] | 16
- util-linux | [] [] | 4
- wdiff | [] [] [] [] | 7
- wget | [] [] [] [] [] [] [] | 17
- +----------------------------------------------------+
- 33 teams ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
- 53 domains 9 1 6 20 0 6 17 1 13 25 10 11 23 21 2 2 387
-
- Some counters in the preceding matrix are higher than the number of
-visible blocks let us expect. This is because a few extra PO files are
-used for implementing regional variants of languages, or language
-dialects.
-
- For a PO file in the matrix above to be effective, the package to
-which it applies should also have been internationalized and
-distributed as such by its maintainer. There might be an observable
-lag between the mere existence a PO file and its wide availability in a
-distribution.
-
- If September 2001 seems to be old, you may fetch a more recent copy
-of this `ABOUT-NLS' file on most GNU archive sites. The most
-up-to-date matrix with full percentage details can be found at
-`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
-
-Using `gettext' in new packages
-===============================
-
- If you are writing a freely available program and want to
-internationalize it you are welcome to use GNU `gettext' in your
-package. Of course you have to respect the GNU Library General Public
-License which covers the use of the GNU `gettext' library. This means
-in particular that even non-free programs can use `libintl' as a shared
-library, whereas only free software can use `libintl' as a static
-library or use modified versions of `libintl'.
-
- Once the sources are changed appropriately and the setup can handle
-to use of `gettext' the only thing missing are the translations. The
-Free Translation Project is also available for packages which are not
-developed inside the GNU project. Therefore the information given above
-applies also for every other Free Software Project. Contact
-`translation@iro.umontreal.ca' to make the `.pot' files available to
-the translation teams.
-
diff --git a/BUGS b/BUGS
deleted file mode 100644
index 9cfdcd98e..000000000
--- a/BUGS
+++ /dev/null
@@ -1,12 +0,0 @@
-Please see
-
- http://www.gnupg.org/buglist.html
-
-for a list of know bugs in GnuPG. We don't distribute this list anymore
-with the package because a more current one with notes in which version
-the bug is fixed can be found online.
-
-For security related bugs, please contact <security@gnupg.org> which
-directs mails only to the core developers. If you need to encrypt the
-report you should use the public keys of the maintainer and of 2 or 3
-other active developers (consult the ChangeLog and AUTHORS).
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 62ea076c1..000000000
--- a/INSTALL
+++ /dev/null
@@ -1,231 +0,0 @@
-Copyright 1994, 1995, 1996, 1999, 2000, 2001 Free Software Foundation,
-Inc.
-
- This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
- These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. Run `./configure --help'
-for details on some of the pertinent environment variables.
-
- You can give `configure' initial values for variables by setting
-them in the environment. You can do that on the command line like this:
-
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you 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 `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it cannot guess the host type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the `--target=TYPE' option to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the host
-platform (i.e., that on which the generated programs will eventually be
-run) with `--host=TYPE'. In this case, you should also specify the
-build platform with `--build=TYPE', because, in this case, it may not
-be possible to guess the build platform (it sometimes involves
-compiling and running simple test programs, and this can't be done if
-the compiler is a cross compiler).
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
- Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-`configure' Invocation
-======================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/NOTES b/NOTES
deleted file mode 100644
index 346dfa9fb..000000000
--- a/NOTES
+++ /dev/null
@@ -1,46 +0,0 @@
-Checking ElGamal signatures is really slow and the reason for the long
-running time on parts o my keyring. Because somekeys are also checked at startup, this is even worser. I should invalidate my self signature with algo 16 or 20.
-
-
-SCO UnixWare/7.1.0 reported by Allan Clark <allanc@sco.com> for 0.9.8
-
-
-Some other reported cpu-vendor-os strings:
-
- hppa1.1-hp-hpux10.20
- mips-sgi-irix6.2
- sparc-sun-solaris5.4
- sparc-sun-sunos4.1.2
- i386-pc-sysv4.2 (USL Unixware v1.1.2)
- powerpc-ibm-aix4.3.2.0 John Payne <jcapayne@att.com>
-
-gpg 1.0.1 okay with MP-RAS 3.02.01 Edition 5 using gcc 2.95.2 and EGD
- By <CSpeicher@eisi.com>
-
-gpg 1.0.1 okay with 4.0.1 BSDI BSD/OS 4.0 i386
-
-
-rndw32 tested on:
-
- Windows 98 4.10.1998 mit einem AMD-K6-2-450
- Michael Engels <angel@dalrin.de>)
-
- Windows 95 4.00.950a
-
- Windows NT 4.00.1381
-
-
-
-
-tried to compile GnuPG on AIX 4.3 on a power CPU based machine. It
-doesn't work out of the box but i found a way to do so:
-
- PowerPC based machines:
- CFLAGS="-g -O2 -mcpu=powerpc" ./configure --disable-asm --disable-dynload
-+--enable-static-rnd=egd
-
- Power1 and Power2 machines:
- CFLAGS="-g -O2 -mcpu=power" ./configure --disable-asm --disable-dynload
-+--enable-static-rnd=egd
-
-
diff --git a/OBUGS b/OBUGS
deleted file mode 100644
index 226514e00..000000000
--- a/OBUGS
+++ /dev/null
@@ -1,102 +0,0 @@
- List of fixed bugs
- --------------------
-
-(format: severity: [ *] to [***], no, first reported, by, version)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-[ *] #1
- pgp263in works fine even with a source file with CR,LF but GnuPG
- and pgp263in has problems if the clearsign has been created by
- pgp263ia. The reason for this problem is that pgp2 sometimes
- converts CR,LF to CR,CR,LF and to fix for this it hashes both
- versions. I was able to reproduce such a problem, that PGP263in
- was not able to verify it's own signature.
- FIX: 1999-05-19 (Most cases are now handled)
-
-[***] #2 1999-02-21
- Problem while importing or deleting public keys in 0.9.3 - 0.9.2
- worked fine. Error message:
- gpg:[stdin]: key A6A59DB9: secret key not found: public key not found
- FIX: 1999-02-22 wk
-
-[ *] #5
- /home/jam/.gnupg/pubring.gpg: can't open gdbm file: Can't be writer
- keyblock resource `/home/jam/.gnupg/pubring.gpg': file open error
- OOPS in close enum_keyblocks - ignored
- [gdbm is experimental and will be replaced by the new keybox code]
- FIX: 1999-07-22 (Fixed the second error, there will be no fix for
- the first one, because GDBM is to be replaced)
-
-[ *] #7 1999-02-22 <dwpalmer@dwpalm.jf.intel.com> 0.9.3
- Conventional encryption incompatibility:
- $ gpg -c --cipher-algo cast5 --compress-algo 1 --no-comment secrets.txt
- Creates a file that gpg can decrypt, but PGP 5.5 has problems with it.
- PGP decrypts 6416k out of 6424k, then complains with "PGP Warning",
- "The keyring contains a bad (corrupted) PGP packet". The resulting
- file is missing information from the front.
- FIX: 1999-02-26 temporary fix in encrypt_simple()
-
-
-[ *] #8 1999-02-25 <kazu@iijlab.net> 0.9.3
- %gpg --encrypt -r kazu@iijlab.net --batch foo
- gpg: Warning: using insecure memory!
- gpg: 11C23F61: no info to calculate a trust probability
- This creates a symmetrically encrypted message WITHOUT a session key
- encrypted with public cryptographic(i.e. foo.gpg). This is probably
- FIX: 199-02-26 wk
-
-[ **] #9 1999-02-25
- Misalignment in md5.c#md5_write.
- FIX: 1999-02-26 wk
-
-[ **] #10 1999-03-01
- Armor detection code is broken. Direct import of keyrings is not possible.
- FIX: 1999-03-02 wk
-
-[***] #11 1999-02-25
- "cipher algo 10 not found".
- FIX: 1999-02-25 wk
-
-[ **] #12 1999-03-10
- gpg --list-secret-keys --with-colon SEGVs
- FIX: 1999-03-10
-
-[ *] #13 1999-04-05
- Trying to generate very large keys fails with a BUG in read_pool()
- FIX: 1999-04-06
-
-
-[ *] #14 1999-04-05 <anonymous>
- If you use --s2k-cipher-algo twofish, the the program crashes with
- a BUG at line 226 of passphrase.c.
- FIX: 1999-04-06
-
-
-[ **] #15 1999-04-05
- Hash calculation for subkey bindings is not according to rfc2440 if
- a 4 byte length header is used for the subkey.
- FIX: 1999-04-06
-
-[***] #16 1999-03-23 <jafo@tummy.com>
- Verifying detached signatures with an empty file yields a rc of 0.
- FIX: 1999-05-06
-
-[ **] #17 1999-05-18 <Bodo_Moeller@public.uni-hamburg.de> 0.9.6
- Import does not detect identical user IDs.
- FIX: 1999-05-22
-
-[ **] #19 1999-06-11
- "trustdb transaction too large" with about 500 signatures on a key
- FAEBD5FC.
- FIX: 1999-07-12 (less memory requirement and increased the limit)
-
-[ **] #20 1999-06-16 <jashley@yorktown.designlab.ukans.edu> 0.9.7
- Using "addkey" in the edit menu with more than 1 subkey leads to
- "out of secure memory" in some cases.
- FIX: 1999-06-17 (Twofish uses too much memory and the memory
- becomes fragmented - workaround is using CAST5 to protect passphrases)
-
-[ *] #21 1999-06-17
- Ctrl-D does not work correct for messages entered at the tty.
- FIX: 1999-06-18 (Better EOF detection on terminals)
-
diff --git a/PROJECTS b/PROJECTS
deleted file mode 100644
index d6725f7a9..000000000
--- a/PROJECTS
+++ /dev/null
@@ -1,46 +0,0 @@
-
- * Change the internal representation of keyid into a struct which
- can also hold the localid and extend the localid to hold information
- of the subkey number because two subkeys may have the same keyid.
-
- * Add a way to override the current cipher/md implementations
- by others (using extensions)
-
- * Not GnuPG related: What about option completion in bash?
- Can "--dump-options" be used for this or should we place the
- options in an ELF note section?
-
- * Split key support (n-out-of-m). Use our own protocol or figure out
- how PGP does it.
-
- * add an option to re-create a public key from a secret key; we
- can do this in trustdb.c:verify_own_keys. (special tool?)
- Hmmm, we better drop the duplication of the public part and just keep
- the secrets in the "secring" - this has the additional that we can
- put those secrets on a hardware token.
-
- * write a tool to extract selected keys from a file.
-
- * Change the buffering to a mbuf like scheme? See Michael's proposal.
-
- * Keep a list of duplicate, faked or unwanted keyids.
-
- * The current code has knowledge about the structure of a keyblock.
- We should add an abstraction layer so that adding support for
- different certificate structures will become easier.
-
- * "Michael T. Babcock" <mbabcock@fibrespeed.net> suggested to write
- an event log so that other software can display a key history or
- alike with GnuPG results. This should be connected to the keyrings.
-
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/THOUGHTS b/THOUGHTS
deleted file mode 100644
index 25707c447..000000000
--- a/THOUGHTS
+++ /dev/null
@@ -1,275 +0,0 @@
-How often have we to do a key lookup by mailaddress?.
-can this be accomplished by an external program?
-
-
-
-What about using S-Exp to describe the interface to the ciphers instead
-of simply iterating over them. This way we can easy register a name which
-can be used as the "hintstr" for --load-extension.
-
-EGD
-====
-Oh, and on embedding egd into the gpg package: I think if you just unpack it
-into, say, util/egd/* then you can put something like this into configure.in:
-
-AC_CHECK_PROG(perl_present, perl, true, false)
-if $perl_present; then
- AC_PATH_PROG(PERL, perl)
- (cd util/egd; $PERL Makefile.PL FULLPERL=$PERL INSTALLBIN=$sbindir)
-fi
-AM_CONDITIONAL(WITH_EGD, $perl_present)
-
-and add util/egd to the top-level Makefile directory list inside a WITH_EGD
-conditional.
-
- * What shall we do if we have a valid subkey revocation certificate
- but no subkey binding? Is this a valid but revoked key?
-
- * use a mmaped file for secure memory if mlock does not work and
- make sure that this file is always wiped out. Is this really
- more secure than swapping out to the swap disk? I don't
- believe so because if an attacker has access to the physical
- box (and he needs this to look at the swap area) he can also
- leave a Trojan horse which is far more easier than to analyze
- memory dumps. Question: Is it possible that a Unix pages
- an old (left over by some other process) swap page in for
- another process - this should be considered a serious design
- flow/bug.
-
-Date: Mon, 4 Jan 1999 19:34:29 -0800 (PST)
-From: Matthew Skala <mskala@ansuz.sooke.bc.ca>
-
-- Signing with an expired key doesn't work by default, does work with a
- special option.
-- Verifying a signature that appears to have been made by an expired key
- after its expiry date but is otherwise good reports the signature as BAD,
- preferably with a message indicating that it's a key-expiry problem rather
- than a cryptographically bad signature.
-- Verifying a signature from a key that is now expired, where the
- signature was made before the expiry date, reports the signature as
- GOOD, possibly with a warning that the key has since expired.
-- Encrypting to an expired key doesn't work by default, does work with a
- special option.
-- Decrypting always works, if you have the appropriate secret key and
- passphrase.
-
-
-
-==============================
-[ "-->" indicates a comment by me (wk) ]
-
-Hi Werner..
-
-I was looking at some of the PROJECTS items in the recent gpg CVS and wanted
-to comment on one of them:
-
- * Add a way to override the current cipher/md implementations
- by others (using extensions)
-
-As you know I've been thinking about how to use a PalmPilot or an iButton in
-some useful way in GPG. The two things that seem reasonable are:
- 1) keep the secret key in the device, only transferring it to the host
- computer for the duration of the secret-key operation (sign or decrypt).
- The key is never kept on disk, only in RAM. This removes the chance that
- casual snooping on your office workstation will reveal your key (it
- doesn't help against an active attack, but the attacker must leave a
- tampered version of GPG around or otherwise get their code to run while
- the key-storage device is attached to attack the key)
- 2) perform the secret-key operation on the device, so the secret key never
- leaves the confines of that device. There are still attacks possible,
- based upon talking to the device while it is connected and trying to
- convince the device (and possibly the user) that it is the real GPG,
- but in general this protects the key pretty strongly. Any individual
- message is still vulnerable, but that's a tradeoff of the convenience of
- composing that message on a full-sized screen+keyboard (plus the added
- speed of encryption) vs. the security of writing the message on a
- secure device.
-
-I think there are a variety of ways of implementing these things, but a few
-extension mechanisms in GPG should be enough to try various ways later on.
-
-1) pass an argument string to loadable extension modules (maybe
- gpg --load-extension foofish=arg1,arg2,arg3 ?)
- --> could also be achived by S-Exps
-
-2) allow multiple instances of the same extension module (presumably with
- different arguments)
- --> set an alias name when loading them
-3) allow extension modules to use stdin/stdout/stderr as normal (probably
- already in there), for giving feedback to the user, or possibly asking them
- for a password of some sort
- --> there should really be some kind of callback mechanism.
-
-4) have an extension to provide secret keys:
-
- It looks like most of the hooks for this are already in place, it just
- needs an extension module which can register itself as a keyblock resource.
-
- I'm thinking of a module for this that is given an external program name as
- an argument. When the keyblock resource is asked to enumerate its keys, it
- runs the external program (first with a "0" argument, then a "1", and so on
- until the program reports that no more keys are available). The external
---> better use a cookie: This way we are also stateless but have a more
- general interface.
-
- program returns one (possibly armored) secret key block each time. The
- program might have some kind of special protocol to talk to the storage
- device. One thing that comes to mind is to simply include a random number
- in the message sent over the serial port: the program would display this
- number, the Pilot at the other end would display the number it receives, if
- the user sees that both are the same they instruct the Pilot to release the
- key, as basic protection against someone else asking for the key while it
- is attached. More sophisticated schemes are possible depending upon how
- much processing power and IO is available on the device. But the same
- extension module should be able to handle as complex a scheme as one could
- wish.
- --> authenticate the session on startup, using DH and the mentioned
- cookie/screen/keyboard authentication.
-
- The current keyblock-resource interface would work fine, although it
- might be more convenient if a resource could be asked for a key by id
- instead of enumerating all of them and then searching through the resulting
- list for a match. A module that provided public keys would have to work this
- way (imagine a module that could automatically do an http fetch for a
- particular key.. easily-added automatic key fetching). Without that ability
- to fetch by id (which would require it to fall back to the other keyblock
- resources if it failed), the user's device might be asked to release the
- key even though some other secret key was the one needed.
- --> Right.
-
-
-5) have an extension to perform a secret-key operation without the actual
- secret key material
- --> Define a clear interface to do this and in the first step write
- a daemon which does exactly this.
-
- basically something to indicate that any decrypt or sign operations that
- occur for a specific keyid should call the extension module instead. The
- secret key would not be extracted (it wouldn't be available anyway). The
- module is given the keyid and the MPI of the block it is supposed to sign
- or decrypt.
-
- The module could then run an external program to do the operation. I'm
- imagining a Pilot program which receives the data, asks the user if it can go
- along with the operation (after displaying a hash of the request, which is
- also displayed by the extension module's program to make sure the Pilot is
- being asked to do the right operation), performs the signature or decryption,
- then returns the data. This protocol could be made arbitrarily complex, with
- a D-H key to encrypt the link, and both sides signing requests to
- authenticate one to the other (although this transforms the the problem of
- getting your secret key off your office workstation into the problem of
- your workstation holding a key tells your Pilot that it is allowed to perform
- the secret key operation, and if someone gets a hold of that key they may
- be able to trick your pilot [plugged in somewhere else] to do the same thing
- for them).
-
- This is basically red/black separation, with the Pilot or iButton having the
- perimeter beyond which the red data doesn't pass. Better than the secret-key
- storage device but requires a lot more power on the device (the new iButtons
- with the exponentiator could do it, but it would take way too much code space
- on the old ones, although they would be fine for just carrying the keys).
-
-The signature code might need to be extended to verify the signature you just
-made, since an active intruder pretending to the the Pilot wouldn't be able to
-make a valid signature (but they might sign your message with a different key
-just to be annoying).
-
-Anyway, just wanted to share my thoughts on some possibilities. I've been
-carrying this little Java iButton on my keyring for months now, looking for
-something cool to do with it, and I think that secure storage for my GPG key
-would be just the right application.
-
-cheers,
- -Brian
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v0.4.5 (GNU/Linux)
-Comment: For info finger gcrypt@ftp.guug.de
-
-iD8DBQE2c5oZkDmgv9E5zEwRArAwAKDWV5fpTtbGPiMPgl2Bpp0gvhbfQgCgzJuY
-AmIQTk4s62/y2zMAHDdOzK0=
-=jr7m
------END PGP SIGNATURE-----
-
-
-
-About a new Keyserver (discussion with Allan Clark <allanc@sco.com>):
-=====================
-
-Some ideas:
-
-o the KS should verify signatures and only accept those
- which are good.
-
-o Keep a blacklist of known bad signatures to minimize
- the time needed to check them
-
-o Should be fast - I'm currently designing a new storage
- system called keybox which takes advantage of the fact
- that the keyID is highly random and can directly be
- used as a hash value and this keyID is (for v4 keys)
- part of the fingerprint: So it is possible to use the
- fingerprint as key but do an lookup by the keyID.
-
-o To be used as the "public keyring" in a LAN so that there
- is no need to keep one on every machine.
-
-o Allow more that one file for key storage.
-
-o Use the HKS protocol and enhance it in a way that binary
- keyrings can be transmitted. (I already wrote some
- http server and client code which can be used for this)
- And extend it to allow reuse of a connection.
-
-o Keep a checksum (hash) of the entire keyblock so that a
- client can easy check whether this keyblock has changed.
- (keyblock = the entire key with all certificates etc.)
- Transmitted in the HEAD info.
-
-o Allow efficient propagation of new keys and revocation
- certificates.
-
-
-Probably more things but this keyserver is not a goal for the
-1.0 release. Someone should be able to fix some of the limitations
-of the existing key servers (I think they bail out on some rfc2440
-packet formats).
-
-
-DJGPP
-=====
-Don't use symlinks but try to do the preprocessing in the config-links script.
-DJPGG has problems to distinguish betwen .s and .S becaus the FAT filesystem
-is not case sensitive (Mark Elbrecht).
-Well, it runs only on one architecture and therefor it might be possible
-to add a special case for it, completely bypassing the symlink autselection
-trick.
-
-Special procmail addresses
-==========================
- * foo+bar@example.net: Try to match the address without the "+bar".
- Should be done by the MUA, but maybe we can do this.
- --> Yep. Another reason to utilize a directory service or something
- else for keylookup.
-
-
-
-Suggested things which I will not do:
-=====================================
- * Let take --help an option to select some topics.
- Using grep is much easier
- * Check if an object (a message, detached sign, public key, or whatever)
- is signed by definite user, i.e. define user
- (userid, or any other unique identification) on command line.
- --> Use a script and --status-fd
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/agent/ChangeLog b/agent/ChangeLog
deleted file mode 100644
index c19193b23..000000000
--- a/agent/ChangeLog
+++ /dev/null
@@ -1,419 +0,0 @@
-2002-09-25 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (handle_signal): Flush cache on SIGHUP.
- * cache.c (agent_flush_cache): New.
-
- * gpg-agent.c, agent.h: Add --keep-display and --keep-tty.
- * query.c (start_pinentry): Implement them. The option passing
- needs more thoughts.
-
-2002-09-09 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (create_private_keys_directory)
- (create_directories): New.
- (main): Try to create a home directory.
-
-2002-09-04 Neal H. Walfield <neal@g10code.de>
-
- * gpg-agent.c (main): Use sigaction, not signal.
-
-2002-09-03 Neal H. Walfield <neal@g10code.de>
-
- * findkey.c: Include <fcntl.h>.
- (agent_write_private_key): Prefer POSIX compatibity, open and
- fdopen, over the simplicity of GNU extensions, fopen(file, "x").
-
-2002-08-22 Werner Koch <wk@gnupg.org>
-
- * query.c (agent_askpin): Provide the default desc text depending
- on the pininfo. Do the basic PIN verification only when
- min_digits is set.
-
-2002-08-21 Werner Koch <wk@gnupg.org>
-
- * query.c (agent_askpin): Hack to show the right default prompt.
- (agent_get_passphrase): Ditto.
-
- * trans.c: Removed and replaced all usages with standard _()
-
- * divert-scd.c (getpin_cb): Pass a more descritive text to the
- pinentry.
-
- * Makefile.am: Renamed the binary protect-tool to gpg-protect-tool.
- * protect-tool.c: Removed the note about internal use only.
-
- * gpg-agent.c (main): New option --daemon so that the program is
- not accidently started in the background.
-
-2002-08-16 Werner Koch <wk@gnupg.org>
-
- * call-scd.c (learn_status_cb): Handle CERTINFO status.
- (agent_card_learn): Add args for certinfo cb.
- * learncard.c (release_certinfo,certinfo_cb): New.
- (send_cert_back): New. With factored out code from ..
- (agent_handle_learn): here. Return certinfo stuff.
-
-2002-07-26 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (main): New option --ignore-cache-for-signing.
- * command.c (option_handler): New server option
- use-cache-for-signing defaulting to true.
- (cmd_pksign): handle global and per session option.
- * findkey.c (agent_key_from_file, unprotect): New arg
- ignore_cache. Changed all callers.
- * pksign.c (agent_pksign): Likewise.
-
-2002-06-29 Werner Koch <wk@gnupg.org>
-
- * query.c (start_pinentry): Use GNUPG_DERAULT_PINENTRY.
- * call-scd.c (start_scd): Use GNUPG_DEFAULT_SCDAEMON.
-
-2002-06-28 Werner Koch <wk@gnupg.org>
-
- * protect-tool.c (export_p12_file): New.
- (main): New command --p12-export.
- * minip12.c (create_final,p12_build,compute_tag_length): New.
- (store_tag_length): New.
-
-2002-06-27 Werner Koch <wk@gnupg.org>
-
- * minip12.c (crypt_block): Renamed from decrypt_block, add arg to
- allow encryption.
-
- * Makefile.am (pkglib_PROGRAMS): Put protect-tool there.
-
- * findkey.c (agent_write_private_key,agent_key_from_file)
- (agent_key_available): Use GNUPG_PRIVATE_KEYS_DIR constant.
- * gpg-agent.c (main): Use GNUPG_DEFAULT_HOMEDIR constant.
-
- * protect-tool.c (store_private_key): New.
- (import_p12_file): Store the new file if requested.
- (main): New options --force and --store.
-
- * gpg-agent.c (main): Set a global flag when running detached.
- * query.c (start_pinentry): Pass the list of FD to keep in the
- child when not running detached.
- * call-scd.c (start_scd): Ditto.
-
-2002-06-26 Werner Koch <wk@gnupg.org>
-
- * command.c (cmd_istrusted, cmd_listtrusted, cmd_marktrusted)
- (cmd_pksign, cmd_pkdecrypt, cmd_genkey, cmd_get_passphrase)
- (cmd_learn): Print an error message for a failed operation.
-
- * simple-pwquery.c, simple-pwquery.h: New.
- * protect-tool. (get_passphrase): New, used to get a passphrase
- from the agent if none was given on the command line.
-
-2002-06-25 Werner Koch <wk@gnupg.org>
-
- * protect-tool.c (rsa_key_check): New.
- (import_p12_file): New.
- (main): New command --p12-import.
- * minip12.c, minip12.h: New.
-
-2002-06-24 Werner Koch <wk@gnupg.org>
-
- * protect-tool.c (read_file): New.
- (read_key): Factored most code out to read_file.
-
-2002-06-17 Werner Koch <wk@gnupg.org>
-
- * agent.h: Add a callback function to the pin_entry_info structure.
- * query.c (agent_askpin): Use the callback to check for a correct
- PIN. Removed the start_err_text argument because it is not
- anymore needed; changed callers.
- * findkey.c (unprotect): Replace our own check loop by a callback.
- (try_unprotect_cb): New.
- * genkey.c (reenter_compare_cb): New.
- (agent_genkey): Use this callback here. Fixed setting of the pi2
- variable and a segv in case of an empty PIN.
-
- * divert-scd.c (getpin_cb): Removed some unused stuff and
- explained what we still have to change.
-
-2002-06-12 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (main): New option --disable-pth.
-
-2002-06-11 Werner Koch <wk@gnupg.org>
-
- * protect-tool.c: Add command --show-keygrip
- (show_keygrip): New.
-
-2002-05-23 Werner Koch <wk@gnupg.org>
-
- * call-scd.c: Seirialized all scdaeom access when using Pth.
-
- * cache.c: Made the cache Pth-thread-safe.
- (agent_unlock_cache_entry): New.
- * findkey.c (unprotect): Unlock the returned cache value.
- * command.c (cmd_get_passphrase): Ditto.
-
- * gpg-agent.c (main): Register pth_read/write with Assuan.
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * query.c: Serialized all pinentry access when using Pth.
-
- * gpg-agent.c (handle_signal,start_connection_thread)
- (handle_connections): New
- (main): Use the new Pth stuff to allow concurrent connections.
- * command.c (start_command_handler): Add new arg FD so that the
- fucntion can also be used for an already connected socket.
- * Makefile.am: Link with Pth.
-
-2002-05-14 Werner Koch <wk@gnupg.org>
-
- * cache.c (housekeeping, agent_put_cache): Use our time() wrapper.
-
-2002-04-26 Werner Koch <wk@gnupg.org>
-
- * cache.c (agent_put_cache): Reinitialize the creation time and
- the ttl when reusing a slot.
-
- * call-scd.c (start_scd): Print debug messages only with debug
- flags set.
- * query.c (start_pinentry): Ditto.
-
-2002-04-25 Marcus Brinkmann <marcus@g10code.de>
-
- * agent.h (agent_get_confirmation): Replace paramter prompt with
- two parameters ok and cancel.
- * query.c (agent_get_confirmation): Likewise. Implement this.
- * trustlist.c (agent_marktrusted): Fix invocation of
- agent_get_confirmation.
- * divert-scd.c (ask_for_card): Likewise.
-
-2002-04-24 Marcus Brinkmann <marcus@g10code.de>
-
- * agent.h (struct opt): Add members display, ttyname, ttytype,
- lc_ctype, and lc_messages.
- * gpg-agent.c (enum cmd_and_opt_values): Add oDisplay, oTTYname,
- oTTYtype, oLCctype, and LCmessages.
- (main): Handle these options.
- * command.c (option_handler): New function.
- (register_commands): Register option handler.
- * query.c (start_pinentry): Pass the various display and tty
- options to the pinentry.
-
-2002-04-05 Werner Koch <wk@gnupg.org>
-
- * protect-tool.c (show_file): New. Used as default action.
-
-2002-03-28 Werner Koch <wk@gnupg.org>
-
- * divert-scd.c (encode_md_for_card): Don't do the pkcs-1 padding,
- the scdaemon should take care of it.
- (ask_for_card): Hack to not display the trailing zero.
-
-2002-03-11 Werner Koch <wk@gnupg.org>
-
- * learncard.c (kpinfo_cb): Remove the content restrictions from
- the keyID.
-
-2002-03-06 Werner Koch <wk@gnupg.org>
-
- * learncard.c: New.
- * divert-scd.c (ask_for_card): The serial number is binary so
- convert it to hex here.
- * findkey.c (agent_write_private_key): New.
- * genkey.c (store_key): And use it here.
-
- * pkdecrypt.c (agent_pkdecrypt): Changed the way the diversion is done.
- * divert-scd.c (divert_pkdecrypt): Changed interface and
- implemented it.
-
-2002-03-05 Werner Koch <wk@gnupg.org>
-
- * call-scd.c (inq_needpin): New.
- (agent_card_pksign): Add getpin_cb args.
- (agent_card_pkdecrypt): New.
-
-2002-03-04 Werner Koch <wk@gnupg.org>
-
- * pksign.c (agent_pksign): Changed how the diversion is done.
- * divert-scd.c (divert_pksign): Changed interface and implemented it.
- (encode_md_for_card): New.
- * call-scd.c (agent_card_pksign): New.
-
-2002-02-28 Werner Koch <wk@gnupg.org>
-
- * pksign.c (agent_pksign): Detect whether a Smartcard is to be
- used and divert the operation in this case.
- * pkdecrypt.c (agent_pkdecrypt): Likewise
- * findkey.c (agent_key_from_file): Add optional arg shadow_info
- and have it return information about a shadowed key.
- * protect.c (agent_get_shadow_info): New.
-
- * protect.c (snext,sskip,smatch): Moved to
- * sexp-parse.h: new file.
- * divert-scd.c: New.
-
-2002-02-27 Werner Koch <wk@gnupg.org>
-
- * protect.c (agent_shadow_key): New.
-
- * command.c (cmd_learn): New command LEARN.
- * gpg-agent.c: New option --scdaemon-program.
- * call-scd.c (start_scd): New. Based on query.c
- * query.c: Add 2 more arguments to all uses of assuan_transact.
-
-2002-02-18 Werner Koch <wk@gnupg.org>
-
- * findkey.c (unprotect): Show an error message for a bad passphrase.
-
- * command.c (cmd_marktrusted): Implemented.
- * trustlist.c (agent_marktrusted): New.
- (open_list): Add APPEND arg.
-
- * query.c (agent_get_confirmation): New.
-
-2002-02-06 Werner Koch <wk@gnupg.org>
-
- * cache.c (housekeeping): Fixed linking in the remove case.
-
-2002-02-01 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c: New option --default-cache-ttl.
- * cache.c (agent_put_cache): Use it.
-
- * cache.c: Add a few debug outputs.
-
- * protect.c (agent_private_key_type): New.
- * agent.h: Add PRIVATE_KEY_ enums.
- * findkey.c (agent_key_from_file): Use it to decide whether we
- have to unprotect a key.
- (unprotect): Cache the passphrase.
-
- * findkey.c (agent_key_from_file,agent_key_available): The key
- files do now require a ".key" suffix to make a script's life
- easier.
- * genkey.c (store_key): Ditto.
-
-2002-01-31 Werner Koch <wk@gnupg.org>
-
- * genkey.c (store_key): Protect the key.
- (agent_genkey): Ask for the passphrase.
- * findkey.c (unprotect): Actually unprotect the key.
- * query.c (agent_askpin): Add an optional start_err_text.
-
-2002-01-30 Werner Koch <wk@gnupg.org>
-
- * protect.c: New.
- (hash_passphrase): Based on the GnuPG 1.0.6 version.
- * protect-tool.c: New
-
-2002-01-29 Werner Koch <wk@gnupg.org>
-
- * findkey.c (agent_key_available): New.
- * command.c (cmd_havekey): New.
- (register_commands): And register new command.
-
-2002-01-20 Werner Koch <wk@gnupg.org>
-
- * command.c (cmd_get_passphrase): Remove the plus signs.
-
- * query.c (start_pinentry): Send no-grab option to pinentry
- * gpg-agent.c (main): Move variable grab as no_grab to agent.h.
-
-2002-01-19 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (main): Disable core dumps.
-
- * cache.c: New.
- * command.c (cmd_get_passphrase): Use the cache.
- (cmd_clear_passphrase): Ditto.
-
- * gpg-agent.c: Removed unused cruft and implement the socket
- based server.
- (my_strusage): Take bug report address from configure.ac.
- * command.c (start_command_handler): Add an argument to start as
- regular server.
- (start_command_handler): Enable Assuan logging.
-
-2002-01-15 Werner Koch <wk@gnupg.org>
-
- * trustlist.c: New.
- * command.c (cmd_istrusted, cmd_listtrusted, cmd_marktrusted): New.
-
-2002-01-07 Werner Koch <wk@gnupg.org>
-
- * genkey.c: Store the secret part and return the public part.
-
-2002-01-03 Werner Koch <wk@gnupg.org>
-
- * command.c (cmd_get_passphrase): New.
- (cmd_clear_passphrase): New.
- * query.c (agent_get_passphrase): New.
-
-2002-01-02 Werner Koch <wk@gnupg.org>
-
- * genkey.c: New.
- * command.c (cmd_genkey): New.
-
- * command.c (rc_to_assuan_status): Removed and changed all callers
- to use map_to_assuan_status.
-
-2001-12-19 Werner Koch <wk@gnupg.org>
-
- * keyformat.txt: New.
-
-2001-12-19 Marcus Brinkmann <marcus@g10code.de>
-
- * query.c (start_pinentry): Add new argument to assuan_pipe_connect.
-
-2001-12-18 Werner Koch <wk@gnupg.org>
-
- * Makefile.am: Use LIBGCRYPT macros
-
-2001-12-14 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (main): New option --batch. New option --debug-wait
- n, so that it is possible to attach gdb when used in server mode.
- * query.c (agent_askpin): Don't ask in batch mode.
-
- * command.c: Removed the conversion macros as they are now in
- ../common/util.h.
-
-2001-12-14 Marcus Brinkmann <marcus@g10code.de>
-
- * query.c (LINELENGTH): Removed.
- (agent_askpin): Use ASSUAN_LINELENGTH, not LINELENGTH.
-
-2001-11-19 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c: Removed all GUI code, removed code for old
- protocol. New code to use the Assuan protocol as a server and
- also to communicate with a new ask-passphrase utility.
-
-2000-11-22 Werner Koch <wk@gnupg.org>
-
- * gpg-agent.c (main): csh support by Dan Winship, new options --sh
- and --csh and set default by consulting $SHELL.
-
-Mon Aug 21 17:59:17 CEST 2000 Werner Koch <wk@openit.de>
-
- * gpg-agent.c (passphrase_dialog): Cleanup the window and added the
- user supplied text to the window.
- (main): Fixed segv in gtk_init when used without a command to start.
-
- * gpg-agent.c: --flush option.
- (req_flush): New.
- (req_clear_passphrase): Implemented.
-
-Fri Aug 18 14:27:14 CEST 2000 Werner Koch <wk@openit.de>
-
- * gpg-agent.c: New.
- * Makefile.am: New.
-
-
- Copyright 2001, 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/agent/Makefile.am b/agent/Makefile.am
deleted file mode 100644
index 89000cf35..000000000
--- a/agent/Makefile.am
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (C) 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-localedir = $(datadir)/locale
-INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
-
-bin_PROGRAMS = gpg-agent
-pkglib_PROGRAMS = gpg-protect-tool
-
-AM_CPPFLAGS = -I$(top_srcdir)/common $(LIBGCRYPT_CFLAGS) $(PTH_CFLAGS)
-LDFLAGS = @LDFLAGS@
-
-gpg_agent_SOURCES = \
- gpg-agent.c agent.h \
- command.c \
- query.c \
- cache.c \
- trans.c \
- findkey.c \
- pksign.c \
- pkdecrypt.c \
- genkey.c \
- protect.c \
- trustlist.c \
- divert-scd.c \
- call-scd.c \
- learncard.c \
- sexp-parse.h
-
-
-gpg_agent_LDADD = ../jnlib/libjnlib.a ../assuan/libassuan.a \
- ../common/libcommon.a $(LIBGCRYPT_LIBS) $(PTH_LIBS)
-
-gpg_protect_tool_SOURCES = \
- protect-tool.c \
- protect.c \
- minip12.c minip12.h \
- simple-pwquery.c simple-pwquery.h
-
-gpg_protect_tool_LDADD = ../jnlib/libjnlib.a \
- ../common/libcommon.a $(LIBGCRYPT_LIBS)
-
-
-
-
diff --git a/agent/agent.h b/agent/agent.h
deleted file mode 100644
index 24267b06a..000000000
--- a/agent/agent.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* agent.h - Global definitions for the agent
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 AGENT_H
-#define AGENT_H
-
-#include <gcrypt.h>
-#include "../common/util.h"
-#include "../common/errors.h"
-
-#define MAX_DIGEST_LEN 24
-
-/* A large struct name "opt" to keep global flags */
-struct {
- unsigned int debug; /* debug flags (DBG_foo_VALUE) */
- int verbose; /* verbosity level */
- int quiet; /* be as quiet as possible */
- int dry_run; /* don't change any persistent data */
- int batch; /* batch mode */
- const char *homedir; /* configuration directory name */
- const char *pinentry_program;
- char *display;
- char *ttyname;
- char *ttytype;
- char *lc_ctype;
- char *lc_messages;
- const char *scdaemon_program;
- int no_grab; /* don't let the pinentry grab the keyboard */
- unsigned long def_cache_ttl;
-
- int running_detached; /* we are running detached from the tty. */
-
- int ignore_cache_for_signing;
- int keep_tty; /* don't switch the TTY (for pinentry) on request */
- int keep_display; /* don't switch the DISPLAY (for pinentry) on request */
-} opt;
-
-
-#define DBG_COMMAND_VALUE 1 /* debug commands i/o */
-#define DBG_MPI_VALUE 2 /* debug mpi details */
-#define DBG_CRYPTO_VALUE 4 /* debug low level crypto */
-#define DBG_MEMORY_VALUE 32 /* debug memory allocation stuff */
-#define DBG_CACHE_VALUE 64 /* debug the caching */
-#define DBG_MEMSTAT_VALUE 128 /* show memory statistics */
-#define DBG_HASHING_VALUE 512 /* debug hashing operations */
-#define DBG_ASSUAN_VALUE 1024
-
-#define DBG_COMMAND (opt.debug & DBG_COMMAND_VALUE)
-#define DBG_CRYPTO (opt.debug & DBG_CRYPTO_VALUE)
-#define DBG_MEMORY (opt.debug & DBG_MEMORY_VALUE)
-#define DBG_CACHE (opt.debug & DBG_CACHE_VALUE)
-#define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
-#define DBG_ASSUAN (opt.debug & DBG_ASSUAN_VALUE)
-
-struct server_local_s;
-
-struct server_control_s {
- struct server_local_s *server_local;
- struct {
- int algo;
- unsigned char value[MAX_DIGEST_LEN];
- int valuelen;
- } digest;
- char keygrip[20];
- int have_keygrip;
-
-};
-typedef struct server_control_s *CTRL;
-
-
-struct pin_entry_info_s {
- int min_digits; /* min. number of digits required or 0 for freeform entry */
- int max_digits; /* max. number of allowed digits allowed*/
- int max_tries;
- int failed_tries;
- int (*check_cb)(struct pin_entry_info_s *); /* CB used to check the PIN */
- void *check_cb_arg; /* optional argument which might be of use in the CB */
- const char *cb_errtext; /* used by the cb to displaye a specific error */
- size_t max_length; /* allocated length of the buffer */
- char pin[1];
-};
-
-
-enum {
- PRIVATE_KEY_UNKNOWN = 0,
- PRIVATE_KEY_CLEAR = 1,
- PRIVATE_KEY_PROTECTED = 2,
- PRIVATE_KEY_SHADOWED = 3
-};
-
-/*-- gpg-agent.c --*/
-void agent_exit (int rc); /* also implemented in other tools */
-
-/*-- command.c --*/
-void start_command_handler (int, int);
-
-/*-- findkey.c --*/
-int agent_write_private_key (const unsigned char *grip,
- const void *buffer, size_t length, int force);
-GCRY_SEXP agent_key_from_file (const unsigned char *grip,
- unsigned char **shadow_info, int ignore_cache);
-int agent_key_available (const unsigned char *grip);
-
-/*-- query.c --*/
-int agent_askpin (const char *desc_text, struct pin_entry_info_s *pininfo);
-int agent_get_passphrase (char **retpass,
- const char *desc, const char *prompt,
- const char *errtext);
-int agent_get_confirmation (const char *desc, const char *ok,
- const char *cancel);
-
-/*-- cache.c --*/
-void agent_flush_cache (void);
-int agent_put_cache (const char *key, const char *data, int ttl);
-const char *agent_get_cache (const char *key, void **cache_id);
-void agent_unlock_cache_entry (void **cache_id);
-
-
-/*-- pksign.c --*/
-int agent_pksign (CTRL ctrl, FILE *outfp, int ignore_cache);
-
-/*-- pkdecrypt.c --*/
-int agent_pkdecrypt (CTRL ctrl, const char *ciphertext, size_t ciphertextlen,
- FILE *outfp);
-
-/*-- genkey.c --*/
-int agent_genkey (CTRL ctrl,
- const char *keyparam, size_t keyparmlen, FILE *outfp);
-
-/*-- protect.c --*/
-int agent_protect (const unsigned char *plainkey, const char *passphrase,
- unsigned char **result, size_t *resultlen);
-int agent_unprotect (const unsigned char *protectedkey, const char *passphrase,
- unsigned char **result, size_t *resultlen);
-int agent_private_key_type (const unsigned char *privatekey);
-int agent_shadow_key (const unsigned char *pubkey,
- const unsigned char *shadow_info,
- unsigned char **result);
-int agent_get_shadow_info (const unsigned char *shadowkey,
- unsigned char const **shadow_info);
-
-
-/*-- trustlist.c --*/
-int agent_istrusted (const char *fpr);
-int agent_listtrusted (void *assuan_context);
-int agent_marktrusted (const char *name, const char *fpr, int flag);
-
-
-/*-- divert-scd.c --*/
-int divert_pksign (const unsigned char *digest, size_t digestlen, int algo,
- const unsigned char *shadow_info, unsigned char **r_sig);
-int divert_pkdecrypt (const unsigned char *cipher,
- const unsigned char *shadow_info,
- char **r_buf, size_t *r_len);
-
-/*-- call-scd.c --*/
-int agent_card_learn (void (*kpinfo_cb)(void*, const char *),
- void *kpinfo_cb_arg,
- void (*certinfo_cb)(void*, const char *),
- void *certinfo_cb_arg);
-int agent_card_serialno (char **r_serialno);
-int agent_card_pksign (const char *keyid,
- int (*getpin_cb)(void *, const char *, char*, size_t),
- void *getpin_cb_arg,
- const unsigned char *indata, size_t indatalen,
- char **r_buf, size_t *r_buflen);
-int agent_card_pkdecrypt (const char *keyid,
- int (*getpin_cb)(void *, const char *, char*,size_t),
- void *getpin_cb_arg,
- const unsigned char *indata, size_t indatalen,
- char **r_buf, size_t *r_buflen);
-int agent_card_readcert (const char *id, char **r_buf, size_t *r_buflen);
-int agent_card_readkey (const char *id, unsigned char **r_buf);
-
-
-/*-- learncard.c --*/
-int agent_handle_learn (void *assuan_context);
-
-
-#endif /*AGENT_H*/
diff --git a/agent/cache.c b/agent/cache.c
deleted file mode 100644
index 8f5bf9d3d..000000000
--- a/agent/cache.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* cache.c - keep a cache of passphrases
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <assert.h>
-
-#include "agent.h"
-
-struct secret_data_s {
- int totallen; /* this includes the padding */
- int datalen; /* actual data length */
- char data[1];
-};
-
-typedef struct cache_item_s *ITEM;
-struct cache_item_s {
- ITEM next;
- time_t created;
- time_t accessed;
- int ttl; /* max. lifetime given in seonds */
- int lockcount;
- struct secret_data_s *pw;
- char key[1];
-};
-
-
-static ITEM thecache;
-
-
-static void
-release_data (struct secret_data_s *data)
-{
- xfree (data);
-}
-
-static struct secret_data_s *
-new_data (const void *data, size_t length)
-{
- struct secret_data_s *d;
- int total;
-
- /* we pad the data to 32 bytes so that it get more complicated
- finding something out by watching allocation patterns. This is
- usally not possible but we better assume nothing about our
- secure storage provider*/
- total = length + 32 - (length % 32);
-
- d = gcry_malloc_secure (sizeof d + total - 1);
- if (d)
- {
- d->totallen = total;
- d->datalen = length;
- memcpy (d->data, data, length);
- }
- return d;
-}
-
-
-/* check whether there are items to expire */
-static void
-housekeeping (void)
-{
- ITEM r, rprev;
- time_t current = gnupg_get_time ();
-
- /* first expire the actual data */
- for (r=thecache; r; r = r->next)
- {
- if (!r->lockcount && r->pw && r->accessed + r->ttl < current)
- {
- if (DBG_CACHE)
- log_debug (" expired `%s' (%ds after last access)\n",
- r->key, r->ttl);
- release_data (r->pw);
- r->pw = NULL;
- r->accessed = current;
- }
- }
-
- /* second, make sure that we also remove them based on the created stamp so
- that the user has to enter it from time to time. We do this every hour */
- for (r=thecache; r; r = r->next)
- {
- if (!r->lockcount && r->pw && r->created + 60*60 < current)
- {
- if (DBG_CACHE)
- log_debug (" expired `%s' (1h after creation)\n", r->key);
- release_data (r->pw);
- r->pw = NULL;
- r->accessed = current;
- }
- }
-
- /* third, make sure that we don't have too many items in the list.
- Expire old and unused entries after 30 minutes */
- for (rprev=NULL, r=thecache; r; )
- {
- if (!r->pw && r->accessed + 60*30 < current)
- {
- if (r->lockcount)
- {
- log_error ("can't remove unused cache entry `%s' due to"
- " lockcount=%d\n",
- r->key, r->lockcount);
- r->accessed += 60*10; /* next error message in 10 minutes */
- rprev = r;
- r = r->next;
- }
- else
- {
- ITEM r2 = r->next;
- if (DBG_CACHE)
- log_debug (" removed `%s' (slot not used for 30m)\n", r->key);
- xfree (r);
- if (!rprev)
- thecache = r2;
- else
- rprev->next = r2;
- r = r2;
- }
- }
- else
- {
- rprev = r;
- r = r->next;
- }
- }
-}
-
-
-void
-agent_flush_cache (void)
-{
- ITEM r;
-
- if (DBG_CACHE)
- log_debug ("agent_flush_cache\n");
-
- for (r=thecache; r; r = r->next)
- {
- if (!r->lockcount && r->pw)
- {
- if (DBG_CACHE)
- log_debug (" flushing `%s'\n", r->key);
- release_data (r->pw);
- r->pw = NULL;
- r->accessed = 0;
- }
- else if (r->lockcount && r->pw)
- {
- if (DBG_CACHE)
- log_debug (" marked `%s' for flushing\n", r->key);
- r->accessed = 0;
- r->ttl = 0;
- }
- }
-}
-
-
-
-/* Store DATA of length DATALEN in the cache under KEY and mark it
- with a maximum lifetime of TTL seconds. If there is already data
- under this key, it will be replaced. Using a DATA of NULL deletes
- the entry */
-int
-agent_put_cache (const char *key, const char *data, int ttl)
-{
- ITEM r;
-
- if (DBG_CACHE)
- log_debug ("agent_put_cache `%s'\n", key);
- housekeeping ();
-
- if (ttl < 1)
- ttl = opt.def_cache_ttl;
- if (!ttl)
- return 0;
-
- for (r=thecache; r; r = r->next)
- {
- if (!r->lockcount && !strcmp (r->key, key))
- break;
- }
- if (r)
- { /* replace */
- if (r->pw)
- {
- release_data (r->pw);
- r->pw = NULL;
- }
- if (data)
- {
- r->created = r->accessed = gnupg_get_time ();
- r->ttl = ttl;
- r->pw = new_data (data, strlen (data)+1);
- if (!r->pw)
- log_error ("out of core while allocating new cache item\n");
- }
- }
- else if (data)
- { /* simply insert */
- r = xtrycalloc (1, sizeof *r + strlen (key));
- if (!r)
- log_error ("out of core while allocating new cache control\n");
- else
- {
- strcpy (r->key, key);
- r->created = r->accessed = gnupg_get_time ();
- r->ttl = ttl;
- r->pw = new_data (data, strlen (data)+1);
- if (!r->pw)
- {
- log_error ("out of core while allocating new cache item\n");
- xfree (r);
- }
- else
- {
- r->next = thecache;
- thecache = r;
- }
- }
- }
- return 0;
-}
-
-
-/* Try to find an item in the cache */
-const char *
-agent_get_cache (const char *key, void **cache_id)
-{
- ITEM r;
-
- if (DBG_CACHE)
- log_debug ("agent_get_cache `%s'...\n", key);
- housekeeping ();
-
- /* first try to find one with no locks - this is an updated cache
- entry: We might have entries with a lockcount and without a
- lockcount. */
- for (r=thecache; r; r = r->next)
- {
- if (!r->lockcount && r->pw && !strcmp (r->key, key))
- {
- /* put_cache does only put strings into the cache, so we
- don't need the lengths */
- r->accessed = gnupg_get_time ();
- if (DBG_CACHE)
- log_debug ("... hit\n");
- r->lockcount++;
- *cache_id = r;
- return r->pw->data;
- }
- }
- /* again, but this time get even one with a lockcount set */
- for (r=thecache; r; r = r->next)
- {
- if (r->pw && !strcmp (r->key, key))
- {
- r->accessed = gnupg_get_time ();
- if (DBG_CACHE)
- log_debug ("... hit (locked)\n");
- r->lockcount++;
- *cache_id = r;
- return r->pw->data;
- }
- }
- if (DBG_CACHE)
- log_debug ("... miss\n");
-
- *cache_id = NULL;
- return NULL;
-}
-
-
-void
-agent_unlock_cache_entry (void **cache_id)
-{
- ITEM r;
-
- for (r=thecache; r; r = r->next)
- {
- if (r == *cache_id)
- {
- if (!r->lockcount)
- log_error ("trying to unlock non-locked cache entry `%s'\n",
- r->key);
- else
- r->lockcount--;
- return;
- }
- }
-}
diff --git a/agent/call-scd.c b/agent/call-scd.c
deleted file mode 100644
index a9123daca..000000000
--- a/agent/call-scd.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/* call-scd.c - fork of the scdaemon to do SC operations
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/* Fixme: For now we have serialized all access to the scdaemon which
- make sense becuase the scdaemon can't handle concurrent connections
- right now. We should however keep a list of connections and lock
- just that connection - it migth make sense to implemtn parts of
- this in Assuan.*/
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#ifdef USE_GNU_PTH
-# include <pth.h>
-#endif
-
-#include "agent.h"
-#include "../assuan/assuan.h"
-
-#ifdef _POSIX_OPEN_MAX
-#define MAX_OPEN_FDS _POSIX_OPEN_MAX
-#else
-#define MAX_OPEN_FDS 20
-#endif
-
-static ASSUAN_CONTEXT scd_ctx = NULL;
-#ifdef USE_GNU_PTH
-static pth_mutex_t scd_lock = PTH_MUTEX_INIT;
-#endif
-
-/* callback parameter for learn card */
-struct learn_parm_s {
- void (*kpinfo_cb)(void*, const char *);
- void *kpinfo_cb_arg;
- void (*certinfo_cb)(void*, const char *);
- void *certinfo_cb_arg;
-};
-
-struct inq_needpin_s {
- ASSUAN_CONTEXT ctx;
- int (*getpin_cb)(void *, const char *, char*, size_t);
- void *getpin_cb_arg;
-};
-
-struct membuf {
- size_t len;
- size_t size;
- char *buf;
- int out_of_core;
-};
-
-
-
-/* A simple implementation of a dynamic buffer. Use init_membuf() to
- create a buffer, put_membuf to append bytes and get_membuf to
- release and return the buffer. Allocation errors are detected but
- only returned at the final get_membuf(), this helps not to clutter
- the code with out of core checks. */
-
-static void
-init_membuf (struct membuf *mb, int initiallen)
-{
- mb->len = 0;
- mb->size = initiallen;
- mb->out_of_core = 0;
- mb->buf = xtrymalloc (initiallen);
- if (!mb->buf)
- mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
- if (mb->out_of_core)
- return;
-
- if (mb->len + len >= mb->size)
- {
- char *p;
-
- mb->size += len + 1024;
- p = xtryrealloc (mb->buf, mb->size);
- if (!p)
- {
- mb->out_of_core = 1;
- return;
- }
- mb->buf = p;
- }
- memcpy (mb->buf + mb->len, buf, len);
- mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
- char *p;
-
- if (mb->out_of_core)
- {
- xfree (mb->buf);
- mb->buf = NULL;
- return NULL;
- }
-
- p = mb->buf;
- *len = mb->len;
- mb->buf = NULL;
- mb->out_of_core = 1; /* don't allow a reuse */
- return p;
-}
-
-
-
-
-static int
-unlock_scd (int rc)
-{
-#ifdef USE_GNU_PTH
- if (!pth_mutex_release (&scd_lock))
- {
- log_error ("failed to release the SCD lock\n");
- if (!rc)
- rc = GNUPG_Internal_Error;
- }
-#endif
- return rc;
-}
-
-/* Fork off the SCdaemon if this has not already been done */
-static int
-start_scd (void)
-{
- int rc;
- const char *pgmname;
- ASSUAN_CONTEXT ctx;
- const char *argv[3];
- int no_close_list[3];
- int i;
-
-#ifdef USE_GNU_PTH
- if (!pth_mutex_acquire (&scd_lock, 0, NULL))
- {
- log_error ("failed to acquire the SCD lock\n");
- return GNUPG_Internal_Error;
- }
-#endif
-
- if (scd_ctx)
- return 0; /* No need to serialize things because the agent is
- expected to tun as a single-thread (or may be in
- future using libpth) */
-
- if (opt.verbose)
- log_info ("no running SCdaemon - starting it\n");
-
- if (fflush (NULL))
- {
- log_error ("error flushing pending output: %s\n", strerror (errno));
- return unlock_scd (seterr (Write_Error));
- }
-
- if (!opt.scdaemon_program || !*opt.scdaemon_program)
- opt.scdaemon_program = GNUPG_DEFAULT_SCDAEMON;
- if ( !(pgmname = strrchr (opt.scdaemon_program, '/')))
- pgmname = opt.scdaemon_program;
- else
- pgmname++;
-
- argv[0] = pgmname;
- argv[1] = "--server";
- argv[2] = NULL;
-
- i=0;
- if (!opt.running_detached)
- {
- if (log_get_fd () != -1)
- no_close_list[i++] = log_get_fd ();
- no_close_list[i++] = fileno (stderr);
- }
- no_close_list[i] = -1;
-
- /* connect to the pinentry and perform initial handshaking */
- rc = assuan_pipe_connect (&ctx, opt.scdaemon_program, (char**)argv,
- no_close_list);
- if (rc)
- {
- log_error ("can't connect to the SCdaemon: %s\n",
- assuan_strerror (rc));
- return unlock_scd (seterr (No_Scdaemon));
- }
- scd_ctx = ctx;
-
- if (DBG_ASSUAN)
- log_debug ("connection to SCdaemon established\n");
- return 0;
-}
-
-
-
-static AssuanError
-learn_status_cb (void *opaque, const char *line)
-{
- struct learn_parm_s *parm = opaque;
- const char *keyword = line;
- int keywordlen;
-
- for (keywordlen=0; *line && !spacep (line); line++, keywordlen++)
- ;
- while (spacep (line))
- line++;
- if (keywordlen == 8 && !memcmp (keyword, "CERTINFO", keywordlen))
- {
- parm->certinfo_cb (parm->certinfo_cb_arg, line);
- }
- else if (keywordlen == 11 && !memcmp (keyword, "KEYPAIRINFO", keywordlen))
- {
- parm->kpinfo_cb (parm->kpinfo_cb_arg, line);
- }
- else if (keywordlen == 8 && !memcmp (keyword, "SERIALNO", keywordlen))
- {
- log_debug ("learn_status_cb: serialno `%s'\n", line);
- }
- else
- log_debug ("learn_status_cb: ignoring `%.*s'\n", keywordlen, keyword);
-
- return 0;
-}
-
-/* Perform the learn command and return a list of all private keys
- stored on the card. */
-int
-agent_card_learn (void (*kpinfo_cb)(void*, const char *),
- void *kpinfo_cb_arg,
- void (*certinfo_cb)(void*, const char *),
- void *certinfo_cb_arg)
-{
- int rc;
- struct learn_parm_s parm;
-
- rc = start_scd ();
- if (rc)
- return rc;
-
- memset (&parm, 0, sizeof parm);
- parm.kpinfo_cb = kpinfo_cb;
- parm.kpinfo_cb_arg = kpinfo_cb_arg;
- parm.certinfo_cb = certinfo_cb;
- parm.certinfo_cb_arg = certinfo_cb_arg;
- rc = assuan_transact (scd_ctx, "LEARN --force",
- NULL, NULL, NULL, NULL,
- learn_status_cb, &parm);
- if (rc)
- return unlock_scd (map_assuan_err (rc));
-
- return unlock_scd (0);
-}
-
-
-
-static AssuanError
-get_serialno_cb (void *opaque, const char *line)
-{
- char **serialno = opaque;
- const char *keyword = line;
- const char *s;
- int keywordlen, n;
-
- for (keywordlen=0; *line && !spacep (line); line++, keywordlen++)
- ;
- while (spacep (line))
- line++;
-
- if (keywordlen == 8 && !memcmp (keyword, "SERIALNO", keywordlen))
- {
- if (*serialno)
- return ASSUAN_Unexpected_Status;
- for (n=0,s=line; hexdigitp (s); s++, n++)
- ;
- if (!n || (n&1)|| !(spacep (s) || !*s) )
- return ASSUAN_Invalid_Status;
- *serialno = xtrymalloc (n+1);
- if (!*serialno)
- return ASSUAN_Out_Of_Core;
- memcpy (*serialno, line, n);
- (*serialno)[n] = 0;
- }
-
- return 0;
-}
-
-/* Return the serial number of the card or an appropriate error. The
- serial number is returned as a hexstring. */
-int
-agent_card_serialno (char **r_serialno)
-{
- int rc;
- char *serialno = NULL;
-
- rc = start_scd ();
- if (rc)
- return rc;
-
- /* Hmm, do we really need this reset - scddaemon should do this or
- we can do this if we for some reason figure out that the
- operation might have failed due to a missing RESET. Hmmm, I feel
- this is really SCdaemon's duty */
- rc = assuan_transact (scd_ctx, "RESET", NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_scd (map_assuan_err (rc));
-
- rc = assuan_transact (scd_ctx, "SERIALNO",
- NULL, NULL, NULL, NULL,
- get_serialno_cb, &serialno);
- if (rc)
- {
- xfree (serialno);
- return unlock_scd (map_assuan_err (rc));
- }
- *r_serialno = serialno;
- return unlock_scd (0);
-}
-
-
-static AssuanError
-membuf_data_cb (void *opaque, const void *buffer, size_t length)
-{
- struct membuf *data = opaque;
-
- if (buffer)
- put_membuf (data, buffer, length);
- return 0;
-}
-
-/* Handle the NEEDPIN inquiry. */
-static AssuanError
-inq_needpin (void *opaque, const char *line)
-{
- struct inq_needpin_s *parm = opaque;
- char *pin;
- size_t pinlen;
- int rc;
-
- if (!(!strncmp (line, "NEEDPIN", 7) && (line[7] == ' ' || !line[7])))
- {
- log_error ("unsupported inquiry `%s'\n", line);
- return ASSUAN_Inquire_Unknown;
- }
- line += 7;
-
- pinlen = 90;
- pin = gcry_malloc_secure (pinlen);
- if (!pin)
- return ASSUAN_Out_Of_Core;
-
- rc = parm->getpin_cb (parm->getpin_cb_arg, line, pin, pinlen);
- if (rc)
- rc = ASSUAN_Canceled;
- if (!rc)
- rc = assuan_send_data (parm->ctx, pin, pinlen);
- xfree (pin);
-
- return rc;
-}
-
-
-
-/* Create a signature using the current card */
-int
-agent_card_pksign (const char *keyid,
- int (*getpin_cb)(void *, const char *, char*, size_t),
- void *getpin_cb_arg,
- const unsigned char *indata, size_t indatalen,
- char **r_buf, size_t *r_buflen)
-{
- int rc, i;
- char *p, line[ASSUAN_LINELENGTH];
- struct membuf data;
- struct inq_needpin_s inqparm;
- size_t len;
- unsigned char *sigbuf;
- size_t sigbuflen;
-
- *r_buf = NULL;
- rc = start_scd ();
- if (rc)
- return rc;
-
- if (indatalen*2 + 50 > DIM(line))
- return unlock_scd (seterr (General_Error));
-
- sprintf (line, "SETDATA ");
- p = line + strlen (line);
- for (i=0; i < indatalen ; i++, p += 2 )
- sprintf (p, "%02X", indata[i]);
- rc = assuan_transact (scd_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_scd (map_assuan_err (rc));
-
- init_membuf (&data, 1024);
- inqparm.ctx = scd_ctx;
- inqparm.getpin_cb = getpin_cb;
- inqparm.getpin_cb_arg = getpin_cb_arg;
- snprintf (line, DIM(line)-1, "PKSIGN %s", keyid);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (scd_ctx, line,
- membuf_data_cb, &data,
- inq_needpin, &inqparm,
- NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return unlock_scd (map_assuan_err (rc));
- }
- sigbuf = get_membuf (&data, &sigbuflen);
-
- /* create an S-expression from it which is formatted like this:
- "(7:sig-val(3:rsa(1:sSIGBUFLEN:SIGBUF)))" */
- *r_buflen = 21 + 11 + sigbuflen + 4;
- *r_buf = xtrymalloc (*r_buflen);
- if (!*r_buf)
- {
- xfree (*r_buf);
- return unlock_scd (GNUPG_Out_Of_Core);
- }
- p = stpcpy (*r_buf, "(7:sig-val(3:rsa(1:s" );
- sprintf (p, "%u:", (unsigned int)sigbuflen);
- p += strlen (p);
- memcpy (p, sigbuf, sigbuflen);
- p += sigbuflen;
- strcpy (p, ")))");
- xfree (sigbuf);
-
- assert (gcry_sexp_canon_len (*r_buf, *r_buflen, NULL, NULL));
- return unlock_scd (0);
-}
-
-/* Decipher INDATA using the current card. Note that the returned value is */
-int
-agent_card_pkdecrypt (const char *keyid,
- int (*getpin_cb)(void *, const char *, char*, size_t),
- void *getpin_cb_arg,
- const unsigned char *indata, size_t indatalen,
- char **r_buf, size_t *r_buflen)
-{
- int rc, i;
- char *p, line[ASSUAN_LINELENGTH];
- struct membuf data;
- struct inq_needpin_s inqparm;
- size_t len;
-
- *r_buf = NULL;
- rc = start_scd ();
- if (rc)
- return rc;
-
- /* FIXME: use secure memory where appropriate */
- if (indatalen*2 + 50 > DIM(line))
- return unlock_scd (seterr (General_Error));
-
- sprintf (line, "SETDATA ");
- p = line + strlen (line);
- for (i=0; i < indatalen ; i++, p += 2 )
- sprintf (p, "%02X", indata[i]);
- rc = assuan_transact (scd_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_scd (map_assuan_err (rc));
-
- init_membuf (&data, 1024);
- inqparm.ctx = scd_ctx;
- inqparm.getpin_cb = getpin_cb;
- inqparm.getpin_cb_arg = getpin_cb_arg;
- snprintf (line, DIM(line)-1, "PKDECRYPT %s", keyid);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (scd_ctx, line,
- membuf_data_cb, &data,
- inq_needpin, &inqparm,
- NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return unlock_scd (map_assuan_err (rc));
- }
- *r_buf = get_membuf (&data, r_buflen);
- if (!*r_buf)
- return unlock_scd (GNUPG_Out_Of_Core);
-
- return unlock_scd (0);
-}
-
-
-
-/* Read a certificate with ID into R_BUF and R_BUFLEN. */
-int
-agent_card_readcert (const char *id, char **r_buf, size_t *r_buflen)
-{
- int rc;
- char line[ASSUAN_LINELENGTH];
- struct membuf data;
- size_t len;
-
- *r_buf = NULL;
- rc = start_scd ();
- if (rc)
- return rc;
-
- init_membuf (&data, 1024);
- snprintf (line, DIM(line)-1, "READCERT %s", id);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (scd_ctx, line,
- membuf_data_cb, &data,
- NULL, NULL,
- NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return unlock_scd (map_assuan_err (rc));
- }
- *r_buf = get_membuf (&data, r_buflen);
- if (!*r_buf)
- return unlock_scd (GNUPG_Out_Of_Core);
-
- return unlock_scd (0);
-}
-
-
-
-/* Read a key with ID and return it in an allocate buffer pointed to
- by r_BUF as a valid S-expression. */
-int
-agent_card_readkey (const char *id, unsigned char **r_buf)
-{
- int rc;
- char line[ASSUAN_LINELENGTH];
- struct membuf data;
- size_t len, buflen;
-
- *r_buf = NULL;
- rc = start_scd ();
- if (rc)
- return rc;
-
- init_membuf (&data, 1024);
- snprintf (line, DIM(line)-1, "READKEY %s", id);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (scd_ctx, line,
- membuf_data_cb, &data,
- NULL, NULL,
- NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return unlock_scd (map_assuan_err (rc));
- }
- *r_buf = get_membuf (&data, &buflen);
- if (!*r_buf)
- return unlock_scd (GNUPG_Out_Of_Core);
-
- if (!gcry_sexp_canon_len (*r_buf, buflen, NULL, NULL))
- {
- xfree (*r_buf); *r_buf = NULL;
- return unlock_scd (GNUPG_Invalid_Value);
- }
-
- return unlock_scd (0);
-}
-
-
-
diff --git a/agent/command.c b/agent/command.c
deleted file mode 100644
index 55ee8b84a..000000000
--- a/agent/command.c
+++ /dev/null
@@ -1,697 +0,0 @@
-/* command.c - gpg-agent command handler
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/* FIXME: we should not use the default assuan buffering but setup
- some buffering in secure mempory to protect session keys etc. */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include "agent.h"
-#include "../assuan/assuan.h"
-
-/* maximum allowed size of the inquired ciphertext */
-#define MAXLEN_CIPHERTEXT 4096
-/* maximum allowed size of the key parameters */
-#define MAXLEN_KEYPARAM 1024
-
-#define set_error(e,t) assuan_set_error (ctx, ASSUAN_ ## e, (t))
-
-
-#if MAX_DIGEST_LEN < 20
-#error MAX_DIGEST_LEN shorter than keygrip
-#endif
-
-/* Data used to associate an Assuan context with local server data */
-struct server_local_s {
- ASSUAN_CONTEXT assuan_ctx;
- int message_fd;
- int use_cache_for_signing;
-};
-
-
-
-
-
-static void
-reset_notify (ASSUAN_CONTEXT ctx)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- memset (ctrl->keygrip, 0, 20);
- ctrl->have_keygrip = 0;
- ctrl->digest.valuelen = 0;
-}
-
-
-/* Check whether the option NAME appears in LINE */
-static int
-has_option (const char *line, const char *name)
-{
- const char *s;
- int n = strlen (name);
-
- s = strstr (line, name);
- return (s && (s == line || spacep (s-1)) && (!s[n] || spacep (s+n)));
-}
-
-
-
-
-/* ISTRUSTED <hexstring_with_fingerprint>
-
- Return OK when we have an entry with this fingerprint in our
- trustlist */
-static int
-cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc, n, i;
- char *p;
- char fpr[41];
-
- /* parse the fingerprint value */
- for (p=line,n=0; hexdigitp (p); p++, n++)
- ;
- if (*p || !(n == 40 || n == 32))
- return set_error (Parameter_Error, "invalid fingerprint");
- i = 0;
- if (n==32)
- {
- strcpy (fpr, "00000000");
- i += 8;
- }
- for (p=line; i < 40; p++, i++)
- fpr[i] = *p >= 'a'? (*p & 0xdf): *p;
- fpr[i] = 0;
- rc = agent_istrusted (fpr);
- if (!rc)
- return 0;
- else if (rc == -1)
- return ASSUAN_Not_Trusted;
- else
- {
- log_error ("command is_trusted failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
- }
-}
-
-/* LISTTRUSTED
-
- List all entries from the trustlist */
-static int
-cmd_listtrusted (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc = agent_listtrusted (ctx);
- if (rc)
- log_error ("command listtrusted failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-
-/* MARKTRUSTED <hexstring_with_fingerprint> <flag> <display_name>
-
- Store a new key in into the trustlist*/
-static int
-cmd_marktrusted (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc, n, i;
- char *p;
- char fpr[41];
- int flag;
-
- /* parse the fingerprint value */
- for (p=line,n=0; hexdigitp (p); p++, n++)
- ;
- if (!spacep (p) || !(n == 40 || n == 32))
- return set_error (Parameter_Error, "invalid fingerprint");
- i = 0;
- if (n==32)
- {
- strcpy (fpr, "00000000");
- i += 8;
- }
- for (p=line; i < 40; p++, i++)
- fpr[i] = *p >= 'a'? (*p & 0xdf): *p;
- fpr[i] = 0;
-
- while (spacep (p))
- p++;
- flag = *p++;
- if ( (flag != 'S' && flag != 'P') || !spacep (p) )
- return set_error (Parameter_Error, "invalid flag - must be P or S");
- while (spacep (p))
- p++;
-
- rc = agent_marktrusted (p, fpr, flag);
- if (rc)
- log_error ("command marktrusted failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-
-
-
-/* HAVEKEY <hexstring_with_keygrip>
-
- Return success when the secret key is available */
-static int
-cmd_havekey (ASSUAN_CONTEXT ctx, char *line)
-{
- int n;
- char *p;
- unsigned char buf[20];
-
- /* parse the hash value */
- for (p=line,n=0; hexdigitp (p); p++, n++)
- ;
- if (*p)
- return set_error (Parameter_Error, "invalid hexstring");
- if ((n&1))
- return set_error (Parameter_Error, "odd number of digits");
- n /= 2;
- if (n != 20)
- return set_error (Parameter_Error, "invalid length of keygrip");
-
- for (p=line, n=0; n < 20; p += 2, n++)
- buf[n] = xtoi_2 (p);
-
- if (agent_key_available (buf))
- return ASSUAN_No_Secret_Key;
-
- return 0;
-}
-
-
-/* SIGKEY <hexstring_with_keygrip>
- SETKEY <hexstring_with_keygrip>
-
- Set the key used for a sign or decrypt operation */
-static int
-cmd_sigkey (ASSUAN_CONTEXT ctx, char *line)
-{
- int n;
- char *p;
- CTRL ctrl = assuan_get_pointer (ctx);
- unsigned char *buf;
-
- /* parse the hash value */
- for (p=line,n=0; hexdigitp (p); p++, n++)
- ;
- if (*p)
- return set_error (Parameter_Error, "invalid hexstring");
- if ((n&1))
- return set_error (Parameter_Error, "odd number of digits");
- n /= 2;
- if (n != 20)
- return set_error (Parameter_Error, "invalid length of keygrip");
-
- buf = ctrl->keygrip;
- for (p=line, n=0; n < 20; p += 2, n++)
- buf[n] = xtoi_2 (p);
- ctrl->have_keygrip = 1;
- return 0;
-}
-
-/* SETHASH <algonumber> <hexstring>
-
- The client can use this command to tell the server about the data
- (which usually is a hash) to be signed. */
-static int
-cmd_sethash (ASSUAN_CONTEXT ctx, char *line)
-{
- int n;
- char *p;
- CTRL ctrl = assuan_get_pointer (ctx);
- unsigned char *buf;
- char *endp;
- int algo;
-
- /* parse the algo number and check it */
- algo = (int)strtoul (line, &endp, 10);
- for (line = endp; *line == ' ' || *line == '\t'; line++)
- ;
- if (!algo || gcry_md_test_algo (algo))
- return set_error (Unsupported_Algorithm, NULL);
- ctrl->digest.algo = algo;
-
- /* parse the hash value */
- for (p=line,n=0; hexdigitp (p); p++, n++)
- ;
- if (*p)
- return set_error (Parameter_Error, "invalid hexstring");
- if ((n&1))
- return set_error (Parameter_Error, "odd number of digits");
- n /= 2;
- if (n != 16 && n != 20 && n != 24 && n != 32)
- return set_error (Parameter_Error, "unsupported length of hash");
- if (n > MAX_DIGEST_LEN)
- return set_error (Parameter_Error, "hash value to long");
-
- buf = ctrl->digest.value;
- ctrl->digest.valuelen = n;
- for (p=line, n=0; n < ctrl->digest.valuelen; p += 2, n++)
- buf[n] = xtoi_2 (p);
- for (; n < ctrl->digest.valuelen; n++)
- buf[n] = 0;
- return 0;
-}
-
-
-/* PKSIGN <options>
-
- Perform the actual sign operation. Neither input nor output are
- sensitive to eavesdropping */
-static int
-cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc;
- int ignore_cache = 0;
- CTRL ctrl = assuan_get_pointer (ctx);
-
- if (opt.ignore_cache_for_signing)
- ignore_cache = 1;
- else if (!ctrl->server_local->use_cache_for_signing)
- ignore_cache = 1;
-
- rc = agent_pksign (ctrl, assuan_get_data_fp (ctx), ignore_cache);
- if (rc)
- log_error ("command pksign failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-/* PKDECRYPT <options>
-
- Perform the actual decrypt operation. Input is not
- sensitive to eavesdropping */
-static int
-cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc;
- CTRL ctrl = assuan_get_pointer (ctx);
- char *value;
- size_t valuelen;
-
- /* First inquire the data to decrypt */
- rc = assuan_inquire (ctx, "CIPHERTEXT",
- &value, &valuelen, MAXLEN_CIPHERTEXT);
- if (rc)
- return rc;
-
- rc = agent_pkdecrypt (ctrl, value, valuelen, assuan_get_data_fp (ctx));
- xfree (value);
- if (rc)
- log_error ("command pkdecrypt failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-
-/* GENKEY
-
- Generate a new key, store the secret part and return the public
- part. Here is an example transaction:
-
- C: GENKEY
- S: INQUIRE KEYPARM
- C: D (genkey (rsa (nbits 1024)))
- C: END
- S: D (public-key
- S: D (rsa (n 326487324683264) (e 10001)))
- S OK key created
-*/
-
-static int
-cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
- char *value;
- size_t valuelen;
-
- /* First inquire the parameters */
- rc = assuan_inquire (ctx, "KEYPARAM", &value, &valuelen, MAXLEN_KEYPARAM);
- if (rc)
- return rc;
-
- rc = agent_genkey (ctrl, value, valuelen, assuan_get_data_fp (ctx));
- xfree (value);
- if (rc)
- log_error ("command genkey failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-
-static void
-plus_to_blank (char *s)
-{
- for (; *s; s++)
- {
- if (*s == '+')
- *s = ' ';
- }
-}
-
-/* GET_PASSPHRASE <cache_id> [<error_message> <prompt> <description>]
-
- This function is usually used to ask for a passphrase to be used
- for conventional encryption, but may also be used by programs which
- need specal handling of passphrases. This command uses a syntax
- which helps clients to use the agent with minimum effort. The
- agent either returns with an error or with a OK followed by the hex
- encoded passphrase. Note that the length of the strings is
- implicitly limited by the maximum length of a command.
-*/
-
-static int
-cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc;
- const char *pw;
- char *response;
- char *cacheid = NULL, *desc = NULL, *prompt = NULL, *errtext = NULL;
- char *p;
- void *cache_marker;
-
- /* parse the stuff */
- for (p=line; *p == ' '; p++)
- ;
- cacheid = p;
- p = strchr (cacheid, ' ');
- if (p)
- {
- *p++ = 0;
- while (*p == ' ')
- p++;
- errtext = p;
- p = strchr (errtext, ' ');
- if (p)
- {
- *p++ = 0;
- while (*p == ' ')
- p++;
- prompt = p;
- p = strchr (prompt, ' ');
- if (p)
- {
- *p++ = 0;
- while (*p == ' ')
- p++;
- desc = p;
- p = strchr (desc, ' ');
- if (p)
- *p = 0; /* ignore garbage */
- }
- }
- }
- if (!cacheid || !*cacheid || strlen (cacheid) > 50)
- return set_error (Parameter_Error, "invalid length of cacheID");
- if (!desc)
- return set_error (Parameter_Error, "no description given");
-
- if (!strcmp (cacheid, "X"))
- cacheid = NULL;
- if (!strcmp (errtext, "X"))
- errtext = NULL;
- if (!strcmp (prompt, "X"))
- prompt = NULL;
- if (!strcmp (desc, "X"))
- desc = NULL;
-
- /* Note: we store the hexified versions in the cache. */
- pw = cacheid ? agent_get_cache (cacheid, &cache_marker) : NULL;
- if (pw)
- {
- assuan_begin_confidential (ctx);
- rc = assuan_set_okay_line (ctx, pw);
- agent_unlock_cache_entry (&cache_marker);
- }
- else
- {
- /* Note, that we only need to replace the + characters and
- should leave the other escaping in place because the escaped
- string is send verbatim to the pinentry which does the
- unescaping (but not the + replacing) */
- if (errtext)
- plus_to_blank (errtext);
- if (prompt)
- plus_to_blank (prompt);
- if (desc)
- plus_to_blank (desc);
-
- rc = agent_get_passphrase (&response, desc, prompt, errtext);
- if (!rc)
- {
- if (cacheid)
- agent_put_cache (cacheid, response, 0);
- assuan_begin_confidential (ctx);
- rc = assuan_set_okay_line (ctx, response);
- xfree (response);
- }
- }
-
- if (rc)
- log_error ("command get_passphrase failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-
-/* CLEAR_PASSPHRASE <cache_id>
-
- may be used to invalidate the cache entry for a passphrase. The
- function returns with OK even when there is no cached passphrase.
-*/
-
-static int
-cmd_clear_passphrase (ASSUAN_CONTEXT ctx, char *line)
-{
- char *cacheid = NULL;
- char *p;
-
- /* parse the stuff */
- for (p=line; *p == ' '; p++)
- ;
- cacheid = p;
- p = strchr (cacheid, ' ');
- if (p)
- *p = 0; /* ignore garbage */
- if (!cacheid || !*cacheid || strlen (cacheid) > 50)
- return set_error (Parameter_Error, "invalid length of cacheID");
-
- agent_put_cache (cacheid, NULL, 0);
- return 0;
-}
-
-
-/* LEARN [--send]
-
- Learn something about the currently inserted smartcard. With
- --send the new certificates are send back. */
-static int
-cmd_learn (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc;
-
- rc = agent_handle_learn (has_option (line, "--send")? ctx : NULL);
- if (rc)
- log_error ("command learn failed: %s\n", gnupg_strerror (rc));
- return map_to_assuan_status (rc);
-}
-
-
-
-static int
-option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- /* FIXME: We should not change opt. here. It is not a problem right
- now but as soon as we are allowing concurrent connections we mess
- things up */
- if (!strcmp (key, "display"))
- {
- if (opt.display)
- free (opt.display);
- opt.display = strdup (value);
- if (!opt.display)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "ttyname"))
- {
- if (opt.ttyname)
- free (opt.ttyname);
- opt.ttyname = strdup (value);
- if (!opt.ttyname)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "ttytype"))
- {
- if (opt.ttytype)
- free (opt.ttytype);
- opt.ttytype = strdup (value);
- if (!opt.ttytype)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "lc-ctype"))
- {
- if (opt.lc_ctype)
- free (opt.lc_ctype);
- opt.lc_ctype = strdup (value);
- if (!opt.lc_ctype)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "lc-messages"))
- {
- if (opt.lc_messages)
- free (opt.lc_messages);
- opt.lc_messages = strdup (value);
- if (!opt.lc_messages)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "use-cache-for-signing"))
- ctrl->server_local->use_cache_for_signing = *value? atoi (value) : 0;
- else
- return ASSUAN_Invalid_Option;
-
- return 0;
-}
-
-
-/* Tell the assuan library about our commands */
-static int
-register_commands (ASSUAN_CONTEXT ctx)
-{
- static struct {
- const char *name;
- int cmd_id;
- int (*handler)(ASSUAN_CONTEXT, char *line);
- } table[] = {
- { "ISTRUSTED", 0, cmd_istrusted },
- { "HAVEKEY", 0, cmd_havekey },
- { "SIGKEY", 0, cmd_sigkey },
- { "SETKEY", 0, cmd_sigkey },
- { "SETHASH", 0, cmd_sethash },
- { "PKSIGN", 0, cmd_pksign },
- { "PKDECRYPT", 0, cmd_pkdecrypt },
- { "GENKEY", 0, cmd_genkey },
- { "GET_PASSPHRASE",0, cmd_get_passphrase },
- { "CLEAR_PASSPHRASE",0, cmd_clear_passphrase },
- { "LISTTRUSTED", 0, cmd_listtrusted },
- { "MARKTRUSTED", 0, cmd_marktrusted },
- { "LEARN", 0, cmd_learn },
- { "", ASSUAN_CMD_INPUT, NULL },
- { "", ASSUAN_CMD_OUTPUT, NULL },
- { NULL }
- };
- int i, j, rc;
-
- for (i=j=0; table[i].name; i++)
- {
- rc = assuan_register_command (ctx,
- table[i].cmd_id? table[i].cmd_id
- : (ASSUAN_CMD_USER + j++),
- table[i].name, table[i].handler);
- if (rc)
- return rc;
- }
- assuan_register_reset_notify (ctx, reset_notify);
- assuan_register_option_handler (ctx, option_handler);
- return 0;
-}
-
-
-/* Startup the server. If LISTEN_FD and FD is given as -1, this is a simple
- piper server, otherwise it is a regular server */
-void
-start_command_handler (int listen_fd, int fd)
-{
- int rc;
- ASSUAN_CONTEXT ctx;
- struct server_control_s ctrl;
-
- memset (&ctrl, 0, sizeof ctrl);
-
- if (listen_fd == -1 && fd == -1)
- {
- int filedes[2];
-
- filedes[0] = 0;
- filedes[1] = 1;
- rc = assuan_init_pipe_server (&ctx, filedes);
- }
- else if (listen_fd != -1)
- {
- rc = assuan_init_socket_server (&ctx, listen_fd);
- }
- else
- {
- rc = assuan_init_connected_socket_server (&ctx, fd);
- }
- if (rc)
- {
- log_error ("failed to initialize the server: %s\n",
- assuan_strerror(rc));
- agent_exit (2);
- }
- rc = register_commands (ctx);
- if (rc)
- {
- log_error ("failed to register commands with Assuan: %s\n",
- assuan_strerror(rc));
- agent_exit (2);
- }
-
- assuan_set_pointer (ctx, &ctrl);
- ctrl.server_local = xcalloc (1, sizeof *ctrl.server_local);
- ctrl.server_local->assuan_ctx = ctx;
- ctrl.server_local->message_fd = -1;
- ctrl.server_local->use_cache_for_signing = 1;
-
- if (DBG_ASSUAN)
- assuan_set_log_stream (ctx, log_get_stream ());
-
- for (;;)
- {
- rc = assuan_accept (ctx);
- if (rc == -1)
- {
- break;
- }
- else if (rc)
- {
- log_info ("Assuan accept problem: %s\n", assuan_strerror (rc));
- break;
- }
-
- rc = assuan_process (ctx);
- if (rc)
- {
- log_info ("Assuan processing failed: %s\n", assuan_strerror (rc));
- continue;
- }
- }
-
-
- assuan_deinit_server (ctx);
-}
-
diff --git a/agent/divert-scd.c b/agent/divert-scd.c
deleted file mode 100644
index 40b6bcfa3..000000000
--- a/agent/divert-scd.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/* divert-scd.c - divert operations to the scdaemon
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "agent.h"
-#include "sexp-parse.h"
-#include "i18n.h"
-
-
-static int
-ask_for_card (const unsigned char *shadow_info, char **r_kid)
-{
- int rc, i;
- const unsigned char *s;
- size_t n;
- char *serialno;
- int no_card = 0;
- char *desc;
- char *want_sn, *want_kid;
- int want_sn_displen;
-
- *r_kid = NULL;
- s = shadow_info;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- want_sn = xtrymalloc (n*2+1);
- if (!want_sn)
- return GNUPG_Out_Of_Core;
- for (i=0; i < n; i++)
- sprintf (want_sn+2*i, "%02X", s[i]);
- s += n;
- /* We assume that a 20 byte serial number is a standard one which
- seems to have the property to have a zero in the last nibble. We
- don't display this '0' because it may confuse the user */
- want_sn_displen = strlen (want_sn);
- if (want_sn_displen == 20 && want_sn[19] == '0')
- want_sn_displen--;
-
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- want_kid = xtrymalloc (n+1);
- if (!want_kid)
- {
- xfree (want_sn);
- return GNUPG_Out_Of_Core;
- }
- memcpy (want_kid, s, n);
- want_kid[n] = 0;
-
- for (;;)
- {
- rc = agent_card_serialno (&serialno);
- if (!rc)
- {
- log_debug ("detected card with S/N %s\n", serialno);
- i = strcmp (serialno, want_sn);
- xfree (serialno);
- serialno = NULL;
- if (!i)
- {
- xfree (want_sn);
- *r_kid = want_kid;
- return 0; /* yes, we have the correct card */
- }
- }
- else if (rc == GNUPG_Card_Not_Present)
- {
- log_debug ("no card present\n");
- rc = 0;
- no_card = 1;
- }
- else
- {
- log_error ("error accesing card: %s\n", gnupg_strerror (rc));
- }
-
- if (!rc)
- {
- if (asprintf (&desc,
- "%s:%%0A%%0A"
- " \"%.*s\"",
- no_card? "Please insert the card with serial number"
- : "Please remove the current card and "
- "insert the one with serial number",
- want_sn_displen, want_sn) < 0)
- {
- rc = GNUPG_Out_Of_Core;
- }
- else
- {
- rc = agent_get_confirmation (desc, NULL, NULL);
- free (desc);
- }
- }
- if (rc)
- {
- xfree (want_sn);
- xfree (want_kid);
- return rc;
- }
- }
-}
-
-
-/* Put the DIGEST into an DER encoded comtainer and return it in R_VAL. */
-static int
-encode_md_for_card (const unsigned char *digest, size_t digestlen, int algo,
- unsigned char **r_val, size_t *r_len)
-{
- byte *frame;
- byte asn[100];
- size_t asnlen;
-
- asnlen = DIM(asn);
- if (gcry_md_algo_info (algo, GCRYCTL_GET_ASNOID, asn, &asnlen))
- {
- log_error ("no object identifier for algo %d\n", algo);
- return GNUPG_Internal_Error;
- }
-
- frame = xtrymalloc (asnlen + digestlen);
- if (!frame)
- return GNUPG_Out_Of_Core;
- memcpy (frame, asn, asnlen);
- memcpy (frame+asnlen, digest, digestlen);
- if (DBG_CRYPTO)
- log_printhex ("encoded hash:", frame, asnlen+digestlen);
-
- *r_val = frame;
- *r_len = asnlen+digestlen;
- return 0;
-}
-
-
-/* Callback used to ask for the PIN which should be set into BUF. The
- buf has been allocated by the caller and is of size MAXBUF which
- includes the terminating null. The function should return an UTF-8
- string with the passphrase, the buffer may optionally be padded
- with arbitrary characters */
-static int
-getpin_cb (void *opaque, const char *info, char *buf, size_t maxbuf)
-{
- struct pin_entry_info_s *pi;
- int rc;
- char *desc;
-
- assert (!opaque);
-
- if (maxbuf < 2)
- return GNUPG_Invalid_Value;
-
-
- /* FIXME: keep PI and TRIES in OPAQUE. Frankly this is a whole
- mess because we should call the card's verify function from the
- pinentry check pin CB. */
- pi = gcry_calloc_secure (1, sizeof (*pi) + 100);
- pi->max_length = maxbuf-1;
- pi->min_digits = 0; /* we want a real passphrase */
- pi->max_digits = 8;
- pi->max_tries = 3;
-
- if ( asprintf (&desc, _("Please enter the PIN%s%s%s to unlock the card"),
- info? " (`":"",
- info? info:"",
- info? "')":"") < 0)
- desc = NULL;
- rc = agent_askpin (desc?desc:info, pi);
- free (desc);
- if (!rc)
- {
- strncpy (buf, pi->pin, maxbuf-1);
- buf[maxbuf-1] = 0;
- }
- xfree (pi);
- return rc;
-}
-
-
-
-
-int
-divert_pksign (const unsigned char *digest, size_t digestlen, int algo,
- const unsigned char *shadow_info, unsigned char **r_sig)
-{
- int rc;
- char *kid;
- size_t siglen;
- char *sigval;
- unsigned char *data;
- size_t ndata;
-
- rc = ask_for_card (shadow_info, &kid);
- if (rc)
- return rc;
-
- rc = encode_md_for_card (digest, digestlen, algo,
- &data, &ndata);
- if (rc)
- return rc;
-
- rc = agent_card_pksign (kid, getpin_cb, NULL,
- data, ndata, &sigval, &siglen);
- if (!rc)
- *r_sig = sigval;
- xfree (data);
- xfree (kid);
-
- return rc;
-}
-
-
-/* Decrypt the the value given asn an S-expression in CIPHER using the
- key identified by SHADOW_INFO and return the plaintext in an
- allocated buffer in R_BUF. */
-int
-divert_pkdecrypt (const unsigned char *cipher,
- const unsigned char *shadow_info,
- char **r_buf, size_t *r_len)
-{
- int rc;
- char *kid;
- const unsigned char *s;
- size_t n;
- const unsigned char *ciphertext;
- size_t ciphertextlen;
- char *plaintext;
- size_t plaintextlen;
-
- s = cipher;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "enc-val"))
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "rsa"))
- return GNUPG_Unsupported_Algorithm;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "a"))
- return GNUPG_Unknown_Sexp;
- n = snext (&s);
- if (!n)
- return GNUPG_Unknown_Sexp;
- ciphertext = s;
- ciphertextlen = n;
-
- rc = ask_for_card (shadow_info, &kid);
- if (rc)
- return rc;
-
- rc = agent_card_pkdecrypt (kid, getpin_cb, NULL,
- ciphertext, ciphertextlen,
- &plaintext, &plaintextlen);
- if (!rc)
- {
- *r_buf = plaintext;
- *r_len = plaintextlen;
- }
- xfree (kid);
- return rc;
-}
diff --git a/agent/findkey.c b/agent/findkey.c
deleted file mode 100644
index 8ec230fa0..000000000
--- a/agent/findkey.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/* findkey.c - locate the secret key
- * Copyright (C) 2001,02 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <assert.h>
-
-#include "agent.h"
-
-/* Helper to pass data to the check callback of the unprotect function. */
-struct try_unprotect_arg_s {
- const unsigned char *protected_key;
- unsigned char *unprotected_key;
-};
-
-
-
-int
-agent_write_private_key (const unsigned char *grip,
- const void *buffer, size_t length, int force)
-{
- int i;
- char *fname;
- FILE *fp;
- char hexgrip[40+4+1];
-
- for (i=0; i < 20; i++)
- sprintf (hexgrip+2*i, "%02X", grip[i]);
- strcpy (hexgrip+40, ".key");
-
- fname = make_filename (opt.homedir, GNUPG_PRIVATE_KEYS_DIR, hexgrip, NULL);
- if (force)
- fp = fopen (fname, "wb");
- else
- {
- int fd;
-
- if (!access (fname, F_OK))
- {
- log_error ("secret key file `%s' already exists\n", fname);
- xfree (fname);
- return seterr (General_Error);
- }
-
- /* We would like to create FNAME but only if it does not already
- exist. We cannot make this guarantee just using POSIX (GNU
- provides the "x" opentype for fopen, however, this is not
- portable). Thus, we use the more flexible open function and
- then use fdopen to obtain a stream.
-
- The mode parameter to open is what fopen uses. It will be
- combined with the process' umask automatically. */
- fd = open (fname, O_CREAT | O_EXCL | O_RDWR,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
- if (fd < 0)
- fp = 0;
- else
- {
- fp = fdopen (fd, "wb");
- if (! fp)
- close (fd);
- }
- }
-
- if (!fp)
- {
- log_error ("can't create `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- return seterr (File_Create_Error);
- }
-
- if (fwrite (buffer, length, 1, fp) != 1)
- {
- log_error ("error writing `%s': %s\n", fname, strerror (errno));
- fclose (fp);
- remove (fname);
- xfree (fname);
- return seterr (File_Create_Error);
- }
- if ( fclose (fp) )
- {
- log_error ("error closing `%s': %s\n", fname, strerror (errno));
- remove (fname);
- xfree (fname);
- return seterr (File_Create_Error);
- }
-
- xfree (fname);
- return 0;
-}
-
-
-/* Callback function to try the unprotection from the passpharse query
- code. */
-static int
-try_unprotect_cb (struct pin_entry_info_s *pi)
-{
- struct try_unprotect_arg_s *arg = pi->check_cb_arg;
- size_t dummy;
-
- assert (!arg->unprotected_key);
- return agent_unprotect (arg->protected_key, pi->pin,
- &arg->unprotected_key, &dummy);
-}
-
-
-/* Unprotect the canconical encoded S-expression key in KEYBUF. GRIP
- should be the hex encoded keygrip of that key to be used with the
- cahing mechanism. */
-static int
-unprotect (unsigned char **keybuf, const unsigned char *grip, int ignore_cache)
-{
- struct pin_entry_info_s *pi;
- struct try_unprotect_arg_s arg;
- int rc, i;
- unsigned char *result;
- size_t resultlen;
- char hexgrip[40+1];
-
- for (i=0; i < 20; i++)
- sprintf (hexgrip+2*i, "%02X", grip[i]);
- hexgrip[40] = 0;
-
- /* first try to get it from the cache - if there is none or we can't
- unprotect it, we fall back to ask the user */
- if (!ignore_cache)
- {
- void *cache_marker;
- const char *pw = agent_get_cache (hexgrip, &cache_marker);
- if (pw)
- {
- rc = agent_unprotect (*keybuf, pw, &result, &resultlen);
- agent_unlock_cache_entry (&cache_marker);
- if (!rc)
- {
- xfree (*keybuf);
- *keybuf = result;
- return 0;
- }
- rc = 0;
- }
- }
-
- pi = gcry_calloc_secure (1, sizeof (*pi) + 100);
- pi->max_length = 100;
- pi->min_digits = 0; /* we want a real passphrase */
- pi->max_digits = 8;
- pi->max_tries = 3;
- pi->check_cb = try_unprotect_cb;
- arg.protected_key = *keybuf;
- arg.unprotected_key = NULL;
- pi->check_cb_arg = &arg;
-
- rc = agent_askpin (NULL, pi);
- if (!rc)
- {
- assert (arg.unprotected_key);
- agent_put_cache (hexgrip, pi->pin, 0);
- xfree (*keybuf);
- *keybuf = arg.unprotected_key;
- }
- xfree (pi);
- return rc;
-}
-
-
-
-/* Return the secret key as an S-Exp after locating it using the grip.
- Returns NULL if key is not available or the operation should be
- diverted to a token. In the latter case shadow_info will point to
- an allocated S-Expression with the shadow_info part from the file.
- With IGNORE_CACHE passed as true the passphrase is not taken from
- the cache.*/
-GCRY_SEXP
-agent_key_from_file (const unsigned char *grip, unsigned char **shadow_info,
- int ignore_cache)
-{
- int i, rc;
- char *fname;
- FILE *fp;
- struct stat st;
- unsigned char *buf;
- size_t len, buflen, erroff;
- GCRY_SEXP s_skey;
- char hexgrip[40+4+1];
-
- if (shadow_info)
- *shadow_info = NULL;
-
- for (i=0; i < 20; i++)
- sprintf (hexgrip+2*i, "%02X", grip[i]);
- strcpy (hexgrip+40, ".key");
-
- fname = make_filename (opt.homedir, GNUPG_PRIVATE_KEYS_DIR, hexgrip, NULL);
- fp = fopen (fname, "rb");
- if (!fp)
- {
- log_error ("can't open `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- return NULL;
- }
-
- if (fstat (fileno(fp), &st))
- {
- log_error ("can't stat `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- fclose (fp);
- return NULL;
- }
-
- buflen = st.st_size;
- buf = xmalloc (buflen+1);
- if (fread (buf, buflen, 1, fp) != 1)
- {
- log_error ("error reading `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- fclose (fp);
- xfree (buf);
- return NULL;
- }
-
- rc = gcry_sexp_sscan (&s_skey, &erroff, buf, buflen);
- xfree (fname);
- fclose (fp);
- xfree (buf);
- if (rc)
- {
- log_error ("failed to build S-Exp (off=%u): %s\n",
- (unsigned int)erroff, gcry_strerror (rc));
- return NULL;
- }
- len = gcry_sexp_sprint (s_skey, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- buf = xtrymalloc (len);
- if (!buf)
- {
- gcry_sexp_release (s_skey);
- return NULL;
- }
- len = gcry_sexp_sprint (s_skey, GCRYSEXP_FMT_CANON, buf, len);
- assert (len);
- gcry_sexp_release (s_skey);
-
- switch (agent_private_key_type (buf))
- {
- case PRIVATE_KEY_CLEAR:
- break; /* no unprotection needed */
- case PRIVATE_KEY_PROTECTED:
- rc = unprotect (&buf, grip, ignore_cache);
- if (rc)
- log_error ("failed to unprotect the secret key: %s\n",
- gnupg_strerror (rc));
- break;
- case PRIVATE_KEY_SHADOWED:
- if (shadow_info)
- {
- const unsigned char *s;
- size_t n;
-
- rc = agent_get_shadow_info (buf, &s);
- if (!rc)
- {
- n = gcry_sexp_canon_len (s, 0, NULL,NULL);
- assert (n);
- *shadow_info = xtrymalloc (n);
- if (!*shadow_info)
- rc = GNUPG_Out_Of_Core;
- else
- {
- memcpy (*shadow_info, s, n);
- rc = 0;
- }
- }
- if (rc)
- log_error ("get_shadow_info failed: %s\n", gnupg_strerror (rc));
- }
- rc = -1; /* ugly interface: we return an error but keep a value
- in shadow_info. */
- break;
- default:
- log_error ("invalid private key format\n");
- rc = GNUPG_Bad_Secret_Key;
- break;
- }
- if (rc)
- {
- xfree (buf);
- return NULL;
- }
-
- /* arggg FIXME: does scan support secure memory? */
- rc = gcry_sexp_sscan (&s_skey, &erroff,
- buf, gcry_sexp_canon_len (buf, 0, NULL, NULL));
- xfree (buf);
- if (rc)
- {
- log_error ("failed to build S-Exp (off=%u): %s\n",
- (unsigned int)erroff, gcry_strerror (rc));
- return NULL;
- }
-
- return s_skey;
-}
-
-/* Return the secret key as an S-Exp after locating it using the grip.
- Returns NULL if key is not available. 0 = key is available */
-int
-agent_key_available (const unsigned char *grip)
-{
- int i;
- char *fname;
- char hexgrip[40+4+1];
-
- for (i=0; i < 20; i++)
- sprintf (hexgrip+2*i, "%02X", grip[i]);
- strcpy (hexgrip+40, ".key");
-
- fname = make_filename (opt.homedir, GNUPG_PRIVATE_KEYS_DIR, hexgrip, NULL);
- i = !access (fname, R_OK)? 0 : -1;
- xfree (fname);
- return i;
-}
-
-
-
diff --git a/agent/genkey.c b/agent/genkey.c
deleted file mode 100644
index dccac94da..000000000
--- a/agent/genkey.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* pksign.c - Generate a keypair
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-
-#include "agent.h"
-#include "i18n.h"
-
-static int
-store_key (GCRY_SEXP private, const char *passphrase)
-{
- int rc;
- char *buf;
- size_t len;
- unsigned char grip[20];
-
- if ( !gcry_pk_get_keygrip (private, grip) )
- {
- log_error ("can't calculate keygrip\n");
- return seterr (General_Error);
- }
-
- len = gcry_sexp_sprint (private, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- buf = gcry_malloc_secure (len);
- if (!buf)
- return seterr (Out_Of_Core);
- len = gcry_sexp_sprint (private, GCRYSEXP_FMT_CANON, buf, len);
- assert (len);
-
- if (passphrase)
- {
- unsigned char *p;
-
- rc = agent_protect (buf, passphrase, &p, &len);
- if (rc)
- {
- xfree (buf);
- return rc;
- }
- xfree (buf);
- buf = p;
- }
-
- rc = agent_write_private_key (grip, buf, len, 0);
- xfree (buf);
- return rc;
-}
-
-/* Callback function to compare the first entered PIN with the one
- currently beeing entered. */
-static int
-reenter_compare_cb (struct pin_entry_info_s *pi)
-{
- const char *pin1 = pi->check_cb_arg;
-
- if (!strcmp (pin1, pi->pin))
- return 0; /* okay */
- pi->cb_errtext = _("does not match - try again");
- return -1;
-}
-
-
-
-/* Generate a new keypair according to the parameters given in
- KEYPARAM */
-int
-agent_genkey (CTRL ctrl, const char *keyparam, size_t keyparamlen,
- FILE *outfp)
-{
- GCRY_SEXP s_keyparam, s_key, s_private, s_public;
- struct pin_entry_info_s *pi, *pi2;
- int rc;
- size_t len;
- char *buf;
-
- rc = gcry_sexp_sscan (&s_keyparam, NULL, keyparam, keyparamlen);
- if (rc)
- {
- log_error ("failed to convert keyparam: %s\n", gcry_strerror (rc));
- return seterr (Invalid_Data);
- }
-
- /* Get the passphrase now, cause key generation may take a while. */
- {
- const char *text1 = _("Please enter the passphrase to%0A"
- "to protect your new key");
- const char *text2 = _("Please re-enter this passphrase");
-
- pi = gcry_calloc_secure (2, sizeof (*pi) + 100);
- pi2 = pi + (sizeof *pi + 100);
- pi->max_length = 100;
- pi->max_tries = 3;
- pi2->max_length = 100;
- pi2->max_tries = 3;
- pi2->check_cb = reenter_compare_cb;
- pi2->check_cb_arg = pi->pin;
-
- rc = agent_askpin (text1, pi);
- if (!rc)
- rc = agent_askpin (text2, pi2);
- if (rc)
- return rc;
- if (!*pi->pin)
- {
- xfree (pi);
- pi = NULL; /* User does not want a passphrase. */
- }
- }
-
- rc = gcry_pk_genkey (&s_key, s_keyparam );
- gcry_sexp_release (s_keyparam);
- if (rc)
- {
- log_error ("key generation failed: %s\n", gcry_strerror (rc));
- xfree (pi);
- return map_gcry_err (rc);
- }
-
- /* break out the parts */
- s_private = gcry_sexp_find_token (s_key, "private-key", 0);
- if (!s_private)
- {
- log_error ("key generation failed: invalid return value\n");
- gcry_sexp_release (s_key);
- xfree (pi);
- return seterr (Invalid_Data);
- }
- s_public = gcry_sexp_find_token (s_key, "public-key", 0);
- if (!s_public)
- {
- log_error ("key generation failed: invalid return value\n");
- gcry_sexp_release (s_private);
- gcry_sexp_release (s_key);
- xfree (pi);
- return seterr (Invalid_Data);
- }
- gcry_sexp_release (s_key); s_key = NULL;
-
- /* store the secret key */
- log_debug ("storing private key\n");
- rc = store_key (s_private, pi? pi->pin:NULL);
- xfree (pi); pi = NULL;
- gcry_sexp_release (s_private);
- if (rc)
- {
- gcry_sexp_release (s_public);
- return rc;
- }
-
- /* return the public key */
- log_debug ("returning public key\n");
- len = gcry_sexp_sprint (s_public, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- buf = xmalloc (len);
- if (!buf)
- {
- gcry_sexp_release (s_private);
- gcry_sexp_release (s_public);
- return seterr (Out_Of_Core);
- }
- len = gcry_sexp_sprint (s_public, GCRYSEXP_FMT_CANON, buf, len);
- assert (len);
- if (fwrite (buf, len, 1, outfp) != 1)
- {
- log_error ("error writing public key: %s\n", strerror (errno));
- gcry_sexp_release (s_private);
- gcry_sexp_release (s_public);
- xfree (buf);
- return seterr (File_Create_Error);
- }
- gcry_sexp_release (s_public);
- xfree (buf);
-
- return 0;
-}
-
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
deleted file mode 100644
index 3c823e5f6..000000000
--- a/agent/gpg-agent.c
+++ /dev/null
@@ -1,916 +0,0 @@
-/* gpg-agent.c - The GnuPG Agent
- * Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <signal.h>
-#ifdef USE_GNU_PTH
-# include <pth.h>
-#endif
-
-#include <gcrypt.h>
-
-#define JNLIB_NEED_LOG_LOGV
-#include "agent.h"
-#include "../assuan/assuan.h" /* malloc hooks */
-
-#include "i18n.h"
-#include "sysutils.h"
-
-
-enum cmd_and_opt_values
-{ aNull = 0,
- oCsh = 'c',
- oQuiet = 'q',
- oSh = 's',
- oVerbose = 'v',
-
- oNoVerbose = 500,
- oOptions,
- oDebug,
- oDebugAll,
- oDebugWait,
- oNoGreeting,
- oNoOptions,
- oHomedir,
- oNoDetach,
- oNoGrab,
- oLogFile,
- oServer,
- oDaemon,
- oBatch,
-
- oPinentryProgram,
- oDisplay,
- oTTYname,
- oTTYtype,
- oLCctype,
- oLCmessages,
- oScdaemonProgram,
- oDefCacheTTL,
- oDisablePth,
-
- oIgnoreCacheForSigning,
- oKeepTTY,
- oKeepDISPLAY,
-
-aTest };
-
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 301, NULL, 0, N_("@Options:\n ") },
-
- { oServer, "server", 0, N_("run in server mode (foreground)") },
- { oDaemon, "daemon", 0, N_("run in daemon mode (background)") },
- { oVerbose, "verbose", 0, N_("verbose") },
- { oQuiet, "quiet", 0, N_("be somewhat more quiet") },
- { oSh, "sh", 0, N_("sh-style command output") },
- { oCsh, "csh", 0, N_("csh-style command output") },
- { oOptions, "options" , 2, N_("read options from file")},
- { oDebug, "debug" ,4|16, N_("set debugging flags")},
- { oDebugAll, "debug-all" ,0, N_("enable full debugging")},
- { oDebugWait,"debug-wait",1, "@"},
- { oNoDetach, "no-detach" ,0, N_("do not detach from the console")},
- { oNoGrab, "no-grab" ,0, N_("do not grab keyboard and mouse")},
- { oLogFile, "log-file" ,2, N_("use a log file for the server")},
- { oDisablePth, "disable-pth", 0, N_("do not allow multiple connections")},
-
- { oPinentryProgram, "pinentry-program", 2 , "path to PIN Entry program" },
- { oDisplay, "display", 2, "set the display" },
- { oTTYname, "ttyname", 2, "set the tty terminal node name" },
- { oTTYtype, "ttytype", 2, "set the tty terminal type" },
- { oLCctype, "lc-ctype", 2, "set the tty LC_CTYPE value" },
- { oLCmessages, "lc-messages", 2, "set the tty LC_MESSAGES value" },
-
- { oScdaemonProgram, "scdaemon-program", 2 , "path to SCdaemon program" },
- { oDefCacheTTL, "default-cache-ttl", 4,
- "|N|expire cached PINs after N seconds"},
- { oIgnoreCacheForSigning, "ignore-cache-for-signing", 0,
- "do not use the PIN cache when signing"},
- { oKeepTTY, "keep-tty", 0, N_("ignore requests to change the TTY")},
- { oKeepDISPLAY, "keep-display",
- 0, N_("ignore requests to change the X display")},
- {0}
-};
-
-
-static volatile int caught_fatal_sig = 0;
-
-/* flag to indicate that a shutdown was requested */
-static int shutdown_pending;
-
-
-/* It is possible that we are currently running under setuid permissions */
-static int maybe_setuid = 1;
-
-/* Name of the communication socket */
-static char socket_name[128];
-
-static void create_directories (void);
-#ifdef USE_GNU_PTH
-static void handle_connections (int listen_fd);
-#endif
-
-
-
-static const char *
-my_strusage (int level)
-{
- const char *p;
- switch (level)
- {
- case 11: p = "gpg-agent (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p = _("Please report bugs to <" PACKAGE_BUGREPORT ">.\n");
- break;
- case 1:
- case 40: p = _("Usage: gpg-agent [options] (-h for help)");
- break;
- case 41: p = _("Syntax: gpg-agent [options] [command [args]]\n"
- "Secret key management for GnuPG\n");
- break;
-
- default: p = NULL;
- }
- return p;
-}
-
-
-
-static void
-i18n_init (void)
-{
-#ifdef USE_SIMPLE_GETTEXT
- set_gettext_file( PACKAGE );
-#else
-#ifdef ENABLE_NLS
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-#endif
-#endif
-}
-
-
-
-/* Used by gcry for logging */
-static void
-my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
-{
- /* translate the log levels */
- switch (level)
- {
- case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
- case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
- case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
- case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
- case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
- case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
- case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
- default: level = JNLIB_LOG_ERROR; break;
- }
- log_logv (level, fmt, arg_ptr);
-}
-
-
-static void
-cleanup (void)
-{
- if (*socket_name)
- {
- char *p;
-
- remove (socket_name);
- p = strrchr (socket_name, '/');
- if (p)
- {
- *p = 0;
- rmdir (socket_name);
- *p = '/';
- }
- *socket_name = 0;
- }
-}
-
-
-static RETSIGTYPE
-cleanup_sh (int sig)
-{
- if (caught_fatal_sig)
- raise (sig);
- caught_fatal_sig = 1;
-
- /* gcry_control( GCRYCTL_TERM_SECMEM );*/
- cleanup ();
-
-#ifndef HAVE_DOSISH_SYSTEM
- { /* reset action to default action and raise signal again */
- struct sigaction nact;
- nact.sa_handler = SIG_DFL;
- sigemptyset( &nact.sa_mask );
- nact.sa_flags = 0;
- sigaction( sig, &nact, NULL);
- }
-#endif
- raise( sig );
-}
-
-int
-main (int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
- int orig_argc;
- int may_coredump;
- char **orig_argv;
- FILE *configfp = NULL;
- char *configname = NULL;
- const char *shell;
- unsigned configlineno;
- int parse_debug = 0;
- int default_config =1;
- int greeting = 0;
- int nogreeting = 0;
- int pipe_server = 0;
- int is_daemon = 0;
- int nodetach = 0;
- int csh_style = 0;
- char *logfile = NULL;
- int debug_wait = 0;
- int disable_pth = 0;
-
- set_strusage (my_strusage);
- gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
- /* Please note that we may running SUID(ROOT), so be very CAREFUL
- when adding any stuff between here and the call to INIT_SECMEM()
- somewhere after the option parsing */
- log_set_prefix ("gpg-agent", 1|4);
- i18n_init ();
-
- /* check that the libraries are suitable. Do it here because
- the option parsing may need services of the library */
- if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
- {
- log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
- NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
- }
-
- assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
-#ifdef USE_GNU_PTH
- assuan_set_io_func (pth_read, pth_write);
-#endif
-
- gcry_set_log_handler (my_gcry_logger, NULL);
- gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
-
- may_coredump = disable_core_dumps ();
-
- shell = getenv ("SHELL");
- if (shell && strlen (shell) >= 3 && !strcmp (shell+strlen (shell)-3, "csh") )
- csh_style = 1;
-
- opt.homedir = getenv("GNUPGHOME");
- if (!opt.homedir || !*opt.homedir)
- opt.homedir = GNUPG_DEFAULT_HOMEDIR;
- opt.def_cache_ttl = 10*60; /* default to 10 minutes */
-
-
- /* check whether we have a config file on the commandline */
- orig_argc = argc;
- orig_argv = argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1|(1<<6); /* do not remove the args, ignore version */
- while (arg_parse( &pargs, opts))
- {
- if (pargs.r_opt == oDebug || pargs.r_opt == oDebugAll)
- parse_debug++;
- else if (pargs.r_opt == oOptions)
- { /* yes there is one, so we do not try the default one, but
- read the option file when it is encountered at the
- commandline */
- default_config = 0;
- }
- else if (pargs.r_opt == oNoOptions)
- default_config = 0; /* --no-options */
- else if (pargs.r_opt == oHomedir)
- opt.homedir = pargs.r.ret_str;
- }
-
- /* initialize the secure memory. */
- gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
- maybe_setuid = 0;
-
- /*
- Now we are now working under our real uid
- */
-
-
- if (default_config)
- configname = make_filename (opt.homedir, "gpg-agent.conf", NULL );
-
- argc = orig_argc;
- argv = orig_argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
- next_pass:
- if (configname)
- {
- configlineno = 0;
- configfp = fopen (configname, "r");
- if (!configfp)
- {
- if (default_config)
- {
- if( parse_debug )
- log_info (_("NOTE: no default option file `%s'\n"),
- configname );
- }
- else
- {
- log_error (_("option file `%s': %s\n"),
- configname, strerror(errno) );
- exit(2);
- }
- xfree (configname);
- configname = NULL;
- }
- if (parse_debug && configname )
- log_info (_("reading options from `%s'\n"), configname );
- default_config = 0;
- }
-
- while (optfile_parse( configfp, configname, &configlineno, &pargs, opts) )
- {
- switch (pargs.r_opt)
- {
- case oQuiet: opt.quiet = 1; break;
- case oVerbose: opt.verbose++; break;
- case oBatch: opt.batch=1; break;
-
- case oDebug: opt.debug |= pargs.r.ret_ulong; break;
- case oDebugAll: opt.debug = ~0; break;
- case oDebugWait: debug_wait = pargs.r.ret_int; break;
-
- case oOptions:
- /* config files may not be nested (silently ignore them) */
- if (!configfp)
- {
- xfree(configname);
- configname = xstrdup(pargs.r.ret_str);
- goto next_pass;
- }
- break;
- case oNoGreeting: nogreeting = 1; break;
- case oNoVerbose: opt.verbose = 0; break;
- case oNoOptions: break; /* no-options */
- case oHomedir: opt.homedir = pargs.r.ret_str; break;
- case oNoDetach: nodetach = 1; break;
- case oNoGrab: opt.no_grab = 1; break;
- case oLogFile: logfile = pargs.r.ret_str; break;
- case oCsh: csh_style = 1; break;
- case oSh: csh_style = 0; break;
- case oServer: pipe_server = 1; break;
- case oDaemon: is_daemon = 1; break;
- case oDisablePth: disable_pth = 1; break;
-
- case oPinentryProgram: opt.pinentry_program = pargs.r.ret_str; break;
- case oDisplay: opt.display = xstrdup (pargs.r.ret_str); break;
- case oTTYname: opt.ttyname = xstrdup (pargs.r.ret_str); break;
- case oTTYtype: opt.ttytype = xstrdup (pargs.r.ret_str); break;
- case oLCctype: opt.lc_ctype = xstrdup (pargs.r.ret_str); break;
- case oLCmessages: opt.lc_messages = xstrdup (pargs.r.ret_str); break;
- case oScdaemonProgram: opt.scdaemon_program = pargs.r.ret_str; break;
- case oDefCacheTTL: opt.def_cache_ttl = pargs.r.ret_ulong; break;
-
- case oIgnoreCacheForSigning: opt.ignore_cache_for_signing = 1; break;
- case oKeepTTY: opt.keep_tty = 1; break;
- case oKeepDISPLAY: opt.keep_display = 1; break;
-
- default : pargs.err = configfp? 1:2; break;
- }
- }
- if (configfp)
- {
- fclose( configfp );
- configfp = NULL;
- xfree(configname);
- configname = NULL;
- goto next_pass;
- }
- xfree (configname);
- configname = NULL;
- if (log_get_errorcount(0))
- exit(2);
- if (nogreeting )
- greeting = 0;
-
- if (greeting)
- {
- fprintf (stderr, "%s %s; %s\n",
- strusage(11), strusage(13), strusage(14) );
- fprintf (stderr, "%s\n", strusage(15) );
- }
-#ifdef IS_DEVELOPMENT_VERSION
- log_info ("NOTE: this is a development version!\n");
-#endif
-
-
- if (atexit (cleanup))
- {
- log_error ("atexit failed\n");
- cleanup ();
- exit (1);
- }
-
- create_directories ();
-
- if (debug_wait && pipe_server)
- {
- log_debug ("waiting for debugger - my pid is %u .....\n",
- (unsigned int)getpid());
- sleep (debug_wait);
- log_debug ("... okay\n");
- }
-
- /* now start with logging to a file if this is desired */
- if (logfile)
- {
- log_set_file (logfile);
- log_set_prefix (NULL, 1|2|4);
- }
-
-
- if (pipe_server)
- { /* this is the simple pipe based server */
- start_command_handler (-1, -1);
- }
- else if (!is_daemon)
- {
- log_info (_("please use the option `--daemon'"
- " to run the program in the background\n"));
- }
- else
- { /* regular server mode */
- int fd;
- pid_t pid;
- int len;
- struct sockaddr_un serv_addr;
- char *p;
-
- *socket_name = 0;
- snprintf (socket_name, DIM(socket_name)-1,
- "/tmp/gpg-XXXXXX/S.gpg-agent");
- socket_name[DIM(socket_name)-1] = 0;
- p = strrchr (socket_name, '/');
- if (!p)
- BUG ();
- *p = 0;;
- if (!mkdtemp(socket_name))
- {
- log_error ("can't create directory `%s': %s\n",
- socket_name, strerror(errno) );
- exit (1);
- }
- *p = '/';
-
- if (strchr (socket_name, ':') )
- {
- log_error ("colons are not allowed in the socket name\n");
- exit (1);
- }
- if (strlen (socket_name)+1 >= sizeof serv_addr.sun_path )
- {
- log_error ("name of socket too long\n");
- exit (1);
- }
-
-
- fd = socket (AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- {
- log_error ("can't create socket: %s\n", strerror(errno) );
- exit (1);
- }
-
- memset (&serv_addr, 0, sizeof serv_addr);
- serv_addr.sun_family = AF_UNIX;
- strcpy (serv_addr.sun_path, socket_name);
- len = (offsetof (struct sockaddr_un, sun_path)
- + strlen(serv_addr.sun_path) + 1);
-
- if (bind (fd, (struct sockaddr*)&serv_addr, len) == -1)
- {
- log_error ("error binding socket to `%s': %s\n",
- serv_addr.sun_path, strerror (errno) );
- close (fd);
- exit (1);
- }
-
- if (listen (fd, 5 ) == -1)
- {
- log_error ("listen() failed: %s\n", strerror (errno));
- close (fd);
- exit (1);
- }
-
- if (opt.verbose)
- log_info ("listening on socket `%s'\n", socket_name );
-
-
- fflush (NULL);
- pid = fork ();
- if (pid == (pid_t)-1)
- {
- log_fatal ("fork failed: %s\n", strerror (errno) );
- exit (1);
- }
- else if (pid)
- { /* we are the parent */
- char *infostr;
-
- close (fd);
-
- /* create the info string: <name>:<pid>:<protocol_version> */
- if (asprintf (&infostr, "GPG_AGENT_INFO=%s:%lu:1",
- socket_name, (ulong)pid ) < 0)
- {
- log_error ("out of core\n");
- kill (pid, SIGTERM);
- exit (1);
- }
- *socket_name = 0; /* don't let cleanup() remove the socket -
- the child should do this from now on */
- if (argc)
- { /* run the program given on the commandline */
- if (putenv (infostr))
- {
- log_error ("failed to set environment: %s\n",
- strerror (errno) );
- kill (pid, SIGTERM );
- exit (1);
- }
- execvp (argv[0], argv);
- log_error ("failed to run the command: %s\n", strerror (errno));
- kill (pid, SIGTERM);
- exit (1);
- }
- else
- {
- /* print the environment string, so that the caller can use
- shell's eval to set it */
- if (csh_style)
- {
- *strchr (infostr, '=') = ' ';
- printf ( "setenv %s\n", infostr);
- }
- else
- {
- printf ( "%s; export GPG_AGENT_INFO;\n", infostr);
- }
- free (infostr);
- exit (0);
- }
- /*NEVER REACHED*/
- } /* end parent */
-
-
- /* this is the child */
-
- /* detach from tty and put process into a new session */
- if (!nodetach )
- {
- int i;
-
- /* close stdin, stdout and stderr unless it is the log stream */
- for (i=0; i <= 2; i++)
- {
- if ( log_get_fd () != i)
- close (i);
- }
- if (setsid() == -1)
- {
- log_error ("setsid() failed: %s\n", strerror(errno) );
- cleanup ();
- exit (1);
- }
- opt.running_detached = 1;
- }
-
- if (chdir("/"))
- {
- log_error ("chdir to / failed: %s\n", strerror (errno));
- exit (1);
- }
-
-
-#ifdef USE_GNU_PTH
- if (!disable_pth)
- {
- struct sigaction sa;
-
- if (!pth_init ())
- {
- log_error ("failed to initialize the Pth library\n");
- exit (1);
- }
-
- sa.sa_handler = SIG_IGN;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- sigaction (SIGPIPE, &sa, NULL);
- handle_connections (fd);
- }
- else
-#endif /*!USE_GNU_PTH*/
- /* setup signals */
- {
- struct sigaction oact, nact;
-
- nact.sa_handler = cleanup_sh;
- sigemptyset (&nact.sa_mask);
- nact.sa_flags = 0;
-
- sigaction (SIGHUP, NULL, &oact);
- if (oact.sa_handler != SIG_IGN)
- sigaction (SIGHUP, &nact, NULL);
- sigaction( SIGTERM, NULL, &oact );
- if (oact.sa_handler != SIG_IGN)
- sigaction (SIGTERM, &nact, NULL);
- nact.sa_handler = SIG_IGN;
- sigaction (SIGPIPE, &nact, NULL);
- sigaction (SIGINT, &nact, NULL);
-
- start_command_handler (fd, -1);
- }
- close (fd);
- }
-
- return 0;
-}
-
-void
-agent_exit (int rc)
-{
- /*FIXME: update_random_seed_file();*/
-#if 1
- /* at this time a bit annoying */
- if (opt.debug & DBG_MEMSTAT_VALUE)
- {
- gcry_control( GCRYCTL_DUMP_MEMORY_STATS );
- gcry_control( GCRYCTL_DUMP_RANDOM_STATS );
- }
- if (opt.debug)
- gcry_control (GCRYCTL_DUMP_SECMEM_STATS );
-#endif
- gcry_control (GCRYCTL_TERM_SECMEM );
- rc = rc? rc : log_get_errorcount(0)? 2 : 0;
- exit (rc);
-}
-
-
-static void
-reread_configuration (void)
-{
- /* FIXME: Move parts of the option parsing to here. */
-}
-
-
-static void
-create_private_keys_directory (const char *home)
-{
- char *fname;
- struct stat statbuf;
-
- fname = make_filename (home, GNUPG_PRIVATE_KEYS_DIR, NULL);
- if (stat (fname, &statbuf) && errno == ENOENT)
- {
- if (mkdir (fname, S_IRUSR|S_IWUSR|S_IXUSR ))
- log_error (_("can't create directory `%s': %s\n"),
- fname, strerror(errno) );
- else if (!opt.quiet)
- log_info (_("directory `%s' created\n"), fname);
- }
- xfree (fname);
-}
-
-/* Create the directory only if the supplied directory name is the
- same as the default one. This way we avoid to create arbitrary
- directories when a non-default home directory is used. To cope
- with HOME, we compare only the suffix if we see that the default
- homedir does start with a tilde. We don't stop here in case of
- problems because other functions will throw an error anyway.*/
-static void
-create_directories (void)
-{
- struct stat statbuf;
- const char *defhome = GNUPG_DEFAULT_HOMEDIR;
- char *home;
-
- home = make_filename (opt.homedir, NULL);
- if ( stat (home, &statbuf) )
- {
- if (errno == ENOENT)
- {
- if ( (*defhome == '~'
- && (strlen (home) >= strlen (defhome+1)
- && !strcmp (home + strlen(home)
- - strlen (defhome+1), defhome+1)))
- || (*defhome != '~' && !strcmp (home, defhome) )
- )
- {
- if (mkdir (home, S_IRUSR|S_IWUSR|S_IXUSR ))
- log_error (_("can't create directory `%s': %s\n"),
- home, strerror(errno) );
- else
- {
- if (!opt.quiet)
- log_info (_("directory `%s' created\n"), home);
- create_private_keys_directory (home);
- }
- }
- }
- else
- log_error ("error stat-ing `%s': %s\n", home, strerror (errno));
- }
- else if ( !S_ISDIR(statbuf.st_mode))
- {
- log_error ("can't use `%s' as home directory\n", home);
- }
- else /* exists and is a directory. */
- {
- create_private_keys_directory (home);
- }
- xfree (home);
-}
-
-
-
-#ifdef USE_GNU_PTH
-static void
-handle_signal (int signo)
-{
- switch (signo)
- {
- case SIGHUP:
- log_info ("SIGHUP received - "
- "re-reading configuration and flushing cache\n");
- agent_flush_cache ();
- reread_configuration ();
- break;
-
- case SIGUSR1:
- if (opt.verbose < 5)
- opt.verbose++;
- log_info ("SIGUSR1 received - verbosity set to %d\n", opt.verbose);
- break;
-
- case SIGUSR2:
- if (opt.verbose)
- opt.verbose--;
- log_info ("SIGUSR2 received - verbosity set to %d\n", opt.verbose );
- break;
-
- case SIGTERM:
- if (!shutdown_pending)
- log_info ("SIGTERM received - shutting down ...\n");
- else
- log_info ("SIGTERM received - still %ld running threads\n",
- pth_ctrl( PTH_CTRL_GETTHREADS ));
- shutdown_pending++;
- if (shutdown_pending > 2)
- {
- log_info ("shutdown forced\n");
- log_info ("%s %s stopped\n", strusage(11), strusage(13) );
- cleanup ();
- agent_exit (0);
- }
- break;
-
- case SIGINT:
- log_info ("SIGINT received - immediate shutdown\n");
- log_info( "%s %s stopped\n", strusage(11), strusage(13));
- cleanup ();
- agent_exit (0);
- break;
-
- default:
- log_info ("signal %d received - no action defined\n", signo);
- }
-}
-
-
-static void *
-start_connection_thread (void *arg)
-{
- int fd = (int)arg;
-
- if (opt.verbose)
- log_info ("handler for fd %d started\n", fd);
- start_command_handler (-1, fd);
- if (opt.verbose)
- log_info ("handler for fd %d terminated\n", fd);
-
- return NULL;
-}
-
-
-static void
-handle_connections (int listen_fd)
-{
- pth_attr_t tattr;
- pth_event_t ev;
- sigset_t sigs;
- int signo;
- struct sockaddr_un paddr;
- socklen_t plen = sizeof( paddr );
- int fd;
-
- tattr = pth_attr_new();
- pth_attr_set (tattr, PTH_ATTR_JOINABLE, 0);
- pth_attr_set (tattr, PTH_ATTR_STACK_SIZE, 32*1024);
- pth_attr_set (tattr, PTH_ATTR_NAME, "gpg-agent");
-
- sigemptyset (&sigs );
- sigaddset (&sigs, SIGHUP);
- sigaddset (&sigs, SIGUSR1);
- sigaddset (&sigs, SIGUSR2);
- sigaddset (&sigs, SIGINT);
- sigaddset (&sigs, SIGTERM);
- ev = pth_event (PTH_EVENT_SIGS, &sigs, &signo);
-
- for (;;)
- {
- if (shutdown_pending)
- {
- if (pth_ctrl (PTH_CTRL_GETTHREADS) == 1)
- break; /* ready */
-
- /* Do not accept anymore connections and wait for existing
- connections to terminate */
- signo = 0;
- pth_wait (ev);
- if (pth_event_occurred (ev) && signo)
- handle_signal (signo);
- continue;
- }
-
- fd = pth_accept_ev (listen_fd, (struct sockaddr *)&paddr, &plen, ev);
- if (fd == -1)
- {
- if (pth_event_occurred (ev))
- {
- handle_signal (signo);
- continue;
- }
- log_error ("accept failed: %s - waiting 1s\n", strerror (errno));
- pth_sleep(1);
- continue;
- }
-
- if (!pth_spawn (tattr, start_connection_thread, (void*)fd))
- {
- log_error ("error spawning connection handler: %s\n",
- strerror (errno) );
- close (fd);
- }
- }
-
- pth_event_free (ev, PTH_FREE_ALL);
- cleanup ();
- log_info ("%s %s stopped\n", strusage(11), strusage(13));
-}
-#endif /*USE_GNU_PTH*/
diff --git a/agent/learncard.c b/agent/learncard.c
deleted file mode 100644
index 93229f4cf..000000000
--- a/agent/learncard.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/* learncard.c - Handle the LEARN command
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "agent.h"
-#include "../assuan/assuan.h"
-
-struct keypair_info_s {
- struct keypair_info_s *next;
- int no_cert;
- char *id; /* points into grip */
- char hexgrip[1];
-};
-typedef struct keypair_info_s *KEYPAIR_INFO;
-
-struct kpinfo_cb_parm_s {
- int error;
- KEYPAIR_INFO info;
-};
-
-
-struct certinfo_s {
- struct certinfo_s *next;
- int type;
- int done;
- char id[1];
-};
-typedef struct certinfo_s *CERTINFO;
-
-struct certinfo_cb_parm_s {
- int error;
- CERTINFO info;
-};
-
-
-static void
-release_keypair_info (KEYPAIR_INFO info)
-{
- while (info)
- {
- KEYPAIR_INFO tmp = info->next;
- xfree (info);
- info = tmp;
- }
-}
-
-static void
-release_certinfo (CERTINFO info)
-{
- while (info)
- {
- CERTINFO tmp = info->next;
- xfree (info);
- info = tmp;
- }
-}
-
-
-
-/* This callback is used by agent_card_leanr and passed the content of
- all KEYPAIRINFO lines. It merely stores this data away */
-static void
-kpinfo_cb (void *opaque, const char *line)
-{
- struct kpinfo_cb_parm_s *parm = opaque;
- KEYPAIR_INFO item;
- char *p;
-
- if (parm->error)
- return; /* no need to gather data after an error coccured */
- item = xtrycalloc (1, sizeof *item + strlen (line));
- if (!item)
- {
- parm->error = GNUPG_Out_Of_Core;
- return;
- }
- strcpy (item->hexgrip, line);
- for (p = item->hexgrip; hexdigitp (p); p++)
- ;
- if (p == item->hexgrip && *p == 'X' && spacep (p+1))
- {
- item->no_cert = 1;
- p++;
- }
- else if ((p - item->hexgrip) != 40 || !spacep (p))
- { /* not a 20 byte hex keygrip or not followed by a space */
- parm->error = GNUPG_Invalid_Response;
- xfree (item);
- return;
- }
- *p++ = 0;
- while (spacep (p))
- p++;
- item->id = p;
- while (*p && !spacep (p))
- p++;
- if (p == item->id)
- { /* invalid ID string */
- parm->error = GNUPG_Invalid_Response;
- xfree (item);
- return;
- }
- *p = 0; /* ignore trailing stuff */
-
- /* store it */
- item->next = parm->info;
- parm->info = item;
-}
-
-
-/* This callback is used by agent_card_leanr and passed the content of
- all CERTINFO lines. It merely stores this data away */
-static void
-certinfo_cb (void *opaque, const char *line)
-{
- struct certinfo_cb_parm_s *parm = opaque;
- CERTINFO item;
- int type;
- char *p, *pend;
-
- if (parm->error)
- return; /* no need to gather data after an error coccured */
-
- type = strtol (line, &p, 10);
- while (spacep (p))
- p++;
- for (pend = p; *pend && !spacep (pend); pend++)
- ;
- if (p == pend || !*p)
- {
- parm->error = GNUPG_Invalid_Response;
- return;
- }
- *pend = 0; /* ignore trailing stuff */
-
- item = xtrycalloc (1, sizeof *item + strlen (p));
- if (!item)
- {
- parm->error = GNUPG_Out_Of_Core;
- return;
- }
- item->type = type;
- strcpy (item->id, p);
- /* store it */
- item->next = parm->info;
- parm->info = item;
-}
-
-
-/* Create an S-expression with the shadow info. */
-static unsigned char *
-make_shadow_info (const char *serialno, const char *idstring)
-{
- const char *s;
- unsigned char *info, *p;
- char numbuf[21];
- int n;
-
- for (s=serialno, n=0; *s && s[1]; s += 2)
- n++;
-
- info = p = xtrymalloc (1 + 21 + n
- + 21 + strlen (idstring) + 1 + 1);
- *p++ = '(';
- sprintf (numbuf, "%d:", n);
- p = stpcpy (p, numbuf);
- for (s=serialno; *s && s[1]; s += 2)
- *p++ = xtoi_2 (s);
- sprintf (numbuf, "%d:", strlen (idstring));
- p = stpcpy (p, numbuf);
- p = stpcpy (p, idstring);
- *p++ = ')';
- *p = 0;
- return info;
-}
-
-static int
-send_cert_back (const char *id, void *assuan_context)
-{
- int rc;
- char *derbuf;
- size_t derbuflen;
-
- rc = agent_card_readcert (id, &derbuf, &derbuflen);
- if (rc)
- {
- log_error ("error reading certificate: %s\n",
- gnupg_strerror (rc));
- return rc;
- }
-
- rc = assuan_send_data (assuan_context, derbuf, derbuflen);
- xfree (derbuf);
- if (!rc)
- rc = assuan_send_data (assuan_context, NULL, 0);
- if (!rc)
- rc = assuan_write_line (assuan_context, "END");
- if (rc)
- {
- log_error ("sending certificate failed: %s\n",
- assuan_strerror (rc));
- return map_assuan_err (rc);
- }
- return 0;
-}
-
-/* Perform the learn operation. If ASSUAN_CONTEXT is not NULL all new
- certificates are send via Assuan */
-int
-agent_handle_learn (void *assuan_context)
-{
- int rc;
- struct kpinfo_cb_parm_s parm;
- struct certinfo_cb_parm_s cparm;
- char *serialno = NULL;
- KEYPAIR_INFO item;
- unsigned char grip[20];
- char *p;
- int i;
- static int certtype_list[] = {
- 101, /* trusted */
- 102, /* useful */
- 100, /* regular */
- -1 /* end of list */
- };
-
-
- memset (&parm, 0, sizeof parm);
- memset (&cparm, 0, sizeof cparm);
-
- /* Check whether a card is present and get the serial number */
- rc = agent_card_serialno (&serialno);
- if (rc)
- goto leave;
-
- /* now gather all the availabe info */
- rc = agent_card_learn (kpinfo_cb, &parm, certinfo_cb, &cparm);
- if (!rc && (parm.error || cparm.error))
- rc = parm.error? parm.error : cparm.error;
- if (rc)
- {
- log_debug ("agent_card_learn failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- log_info ("card has S/N: %s\n", serialno);
-
- /* Write out the certificates in a standard order. */
- for (i=0; certtype_list[i] != -1; i++)
- {
- CERTINFO citem;
- for (citem = cparm.info; citem; citem = citem->next)
- {
- if (certtype_list[i] != citem->type)
- continue;
-
- if (opt.verbose)
- log_info (" id: %s (type=%d)\n",
- citem->id, citem->type);
-
- if (assuan_context)
- {
- rc = send_cert_back (citem->id, assuan_context);
- if (rc)
- goto leave;
- citem->done = 1;
- }
- }
- }
-
- for (item = parm.info; item; item = item->next)
- {
- unsigned char *pubkey, *shdkey;
- size_t n;
-
- if (opt.verbose)
- log_info (" id: %s (grip=%s)\n", item->id, item->hexgrip);
-
- if (item->no_cert)
- continue; /* no public key yet available */
-
- for (p=item->hexgrip, i=0; i < 20; p += 2, i++)
- grip[i] = xtoi_2 (p);
-
- if (!agent_key_available (grip))
- continue;
-
- /* unknown - store it */
- rc = agent_card_readkey (item->id, &pubkey);
- if (rc)
- {
- log_debug ("agent_card_readkey failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- {
- unsigned char *shadow_info = make_shadow_info (serialno, item->id);
- if (!shadow_info)
- {
- rc = GNUPG_Out_Of_Core;
- xfree (pubkey);
- goto leave;
- }
- rc = agent_shadow_key (pubkey, shadow_info, &shdkey);
- xfree (shadow_info);
- }
- xfree (pubkey);
- if (rc)
- {
- log_error ("shadowing the key failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- n = gcry_sexp_canon_len (shdkey, 0, NULL, NULL);
- assert (n);
-
- rc = agent_write_private_key (grip, shdkey, n, 0);
- xfree (shdkey);
- if (rc)
- {
- log_error ("error writing key: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- if (opt.verbose)
- log_info ("stored\n");
-
- if (assuan_context)
- {
- CERTINFO citem;
-
- /* only send the certificate if we have not done so before */
- for (citem = cparm.info; citem; citem = citem->next)
- {
- if (!strcmp (citem->id, item->id))
- break;
- }
- if (!citem)
- {
- rc = send_cert_back (item->id, assuan_context);
- if (rc)
- goto leave;
- }
- }
- }
-
-
- leave:
- xfree (serialno);
- release_keypair_info (parm.info);
- release_certinfo (cparm.info);
- return rc;
-}
-
-
diff --git a/agent/minip12.c b/agent/minip12.c
deleted file mode 100644
index d8d47336c..000000000
--- a/agent/minip12.c
+++ /dev/null
@@ -1,1146 +0,0 @@
-/* minip12.c - A minilam pkcs-12 implementation.
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <gcrypt.h>
-
-#undef TEST
-
-#ifdef TEST
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-#endif
-
-#include "../jnlib/logging.h"
-#include "minip12.h"
-
-#ifndef DIM
-#define DIM(v) (sizeof(v)/sizeof((v)[0]))
-#endif
-
-enum
-{
- UNIVERSAL = 0,
- APPLICATION = 1,
- CONTEXT = 2,
- PRIVATE = 3
-};
-
-
-enum
-{
- TAG_NONE = 0,
- TAG_BOOLEAN = 1,
- TAG_INTEGER = 2,
- TAG_BIT_STRING = 3,
- TAG_OCTET_STRING = 4,
- TAG_NULL = 5,
- TAG_OBJECT_ID = 6,
- TAG_OBJECT_DESCRIPTOR = 7,
- TAG_EXTERNAL = 8,
- TAG_REAL = 9,
- TAG_ENUMERATED = 10,
- TAG_EMBEDDED_PDV = 11,
- TAG_UTF8_STRING = 12,
- TAG_REALTIVE_OID = 13,
- TAG_SEQUENCE = 16,
- TAG_SET = 17,
- TAG_NUMERIC_STRING = 18,
- TAG_PRINTABLE_STRING = 19,
- TAG_TELETEX_STRING = 20,
- TAG_VIDEOTEX_STRING = 21,
- TAG_IA5_STRING = 22,
- TAG_UTC_TIME = 23,
- TAG_GENERALIZED_TIME = 24,
- TAG_GRAPHIC_STRING = 25,
- TAG_VISIBLE_STRING = 26,
- TAG_GENERAL_STRING = 27,
- TAG_UNIVERSAL_STRING = 28,
- TAG_CHARACTER_STRING = 29,
- TAG_BMP_STRING = 30
-};
-
-
-static unsigned char const oid_data[9] = {
- 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01 };
-static unsigned char const oid_encryptedData[9] = {
- 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x06 };
-static unsigned char const oid_pkcs_12_pkcs_8ShroudedKeyBag[11] = {
- 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01, 0x02 };
-static unsigned char const oid_pbeWithSHAAnd3_KeyTripleDES_CBC[10] = {
- 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03 };
-
-static unsigned char const oid_rsaEncryption[9] = {
- 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01 };
-
-
-static unsigned char const data_3desiter1024[30] = {
- 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48, 0x86,
- 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03, 0x30, 0x0E,
- 0x04, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x02, 0x02, 0x04, 0x00 };
-#define DATA_3DESITER1024_SALT_OFF 18
-
-
-struct buffer_s
-{
- unsigned char *buffer;
- size_t length;
-};
-
-
-struct tag_info
-{
- int class;
- int is_constructed;
- unsigned long tag;
- unsigned long length; /* length part of the TLV */
- int nhdr;
- int ndef; /* It is an indefinite length */
-};
-
-
-/* Parse the buffer at the address BUFFER which is of SIZE and return
- the tag and the length part from the TLV triplet. Update BUFFER
- and SIZE on success. */
-static int
-parse_tag (unsigned char const **buffer, size_t *size, struct tag_info *ti)
-{
- int c;
- unsigned long tag;
- const unsigned char *buf = *buffer;
- size_t length = *size;
-
- ti->length = 0;
- ti->ndef = 0;
- ti->nhdr = 0;
-
- /* Get the tag */
- if (!length)
- return -1; /* premature eof */
- c = *buf++; length--;
- ti->nhdr++;
-
- ti->class = (c & 0xc0) >> 6;
- ti->is_constructed = !!(c & 0x20);
- tag = c & 0x1f;
-
- if (tag == 0x1f)
- {
- tag = 0;
- do
- {
- tag <<= 7;
- if (!length)
- return -1; /* premature eof */
- c = *buf++; length--;
- ti->nhdr++;
- tag |= c & 0x7f;
- }
- while (c & 0x80);
- }
- ti->tag = tag;
-
- /* Get the length */
- if (!length)
- return -1; /* prematureeof */
- c = *buf++; length--;
- ti->nhdr++;
-
- if ( !(c & 0x80) )
- ti->length = c;
- else if (c == 0x80)
- ti->ndef = 1;
- else if (c == 0xff)
- return -1; /* forbidden length value */
- else
- {
- unsigned long len = 0;
- int count = c & 0x7f;
-
- for (; count; count--)
- {
- len <<= 8;
- if (!length)
- return -1; /* premature_eof */
- c = *buf++; length--;
- ti->nhdr++;
- len |= c & 0xff;
- }
- ti->length = len;
- }
-
- if (ti->class == UNIVERSAL && !ti->tag)
- ti->length = 0;
-
- if (ti->length > length)
- return -1; /* data larger than buffer. */
-
- *buffer = buf;
- *size = length;
- return 0;
-}
-
-
-static int
-string_to_key (int id, char *salt, int iter, const char *pw,
- int req_keylen, unsigned char *keybuf)
-{
- int rc, i, j;
- GcryMDHd md;
- GcryMPI num_b1 = NULL;
- int pwlen;
- unsigned char hash[20], buf_b[64], buf_i[128], *p;
- size_t cur_keylen;
- size_t n;
-
- cur_keylen = 0;
- pwlen = strlen (pw);
- if (pwlen > 63/2)
- {
- log_error ("password too long\n");
- return -1;
- }
-
- /* Store salt and password in BUF_I */
- p = buf_i;
- for(i=0; i < 64; i++)
- *p++ = salt [i%8];
- for(i=j=0; i < 64; i += 2)
- {
- *p++ = 0;
- *p++ = pw[j];
- if (++j > pwlen) /* Note, that we include the trailing zero */
- j = 0;
- }
-
- for (;;)
- {
- md = gcry_md_open (GCRY_MD_SHA1, 0);
- if (!md)
- {
- log_error ( "gcry_md_open failed: %s\n", gcry_strerror (-1));
- return -1;
- }
- for(i=0; i < 64; i++)
- gcry_md_putc (md, id);
- gcry_md_write (md, buf_i, 128);
- memcpy (hash, gcry_md_read (md, 0), 20);
- gcry_md_close (md);
- for (i=1; i < iter; i++)
- gcry_md_hash_buffer (GCRY_MD_SHA1, hash, hash, 20);
-
- for (i=0; i < 20 && cur_keylen < req_keylen; i++)
- keybuf[cur_keylen++] = hash[i];
- if (cur_keylen == req_keylen)
- {
- gcry_mpi_release (num_b1);
- return 0; /* ready */
- }
-
- /* need more bytes. */
- for(i=0; i < 64; i++)
- buf_b[i] = hash[i % 20];
- n = 64;
- rc = gcry_mpi_scan (&num_b1, GCRYMPI_FMT_USG, buf_b, &n);
- if (rc)
- {
- log_error ( "gcry_mpi_scan failed: %s\n", gcry_strerror (rc));
- return -1;
- }
- gcry_mpi_add_ui (num_b1, num_b1, 1);
- for (i=0; i < 128; i += 64)
- {
- GcryMPI num_ij;
-
- n = 64;
- rc = gcry_mpi_scan (&num_ij, GCRYMPI_FMT_USG, buf_i + i, &n);
- if (rc)
- {
- log_error ( "gcry_mpi_scan failed: %s\n",
- gcry_strerror (rc));
- return -1;
- }
- gcry_mpi_add (num_ij, num_ij, num_b1);
- gcry_mpi_clear_highbit (num_ij, 64*8);
- n = 64;
- rc = gcry_mpi_print (GCRYMPI_FMT_USG, buf_i + i, &n, num_ij);
- if (rc)
- {
- log_error ( "gcry_mpi_print failed: %s\n",
- gcry_strerror (rc));
- return -1;
- }
- gcry_mpi_release (num_ij);
- }
- }
-}
-
-
-static int
-set_key_iv (GcryCipherHd chd, char *salt, int iter, const char *pw)
-{
- unsigned char keybuf[24];
- int rc;
-
- if (string_to_key (1, salt, iter, pw, 24, keybuf))
- return -1;
- rc = gcry_cipher_setkey (chd, keybuf, 24);
- if (rc)
- {
- log_error ( "gcry_cipher_setkey failed: %s\n", gcry_strerror (rc));
- return -1;
- }
-
- if (string_to_key (2, salt, iter, pw, 8, keybuf))
- return -1;
- rc = gcry_cipher_setiv (chd, keybuf, 8);
- if (rc)
- {
- log_error ("gcry_cipher_setiv failed: %s\n", gcry_strerror (rc));
- return -1;
- }
- return 0;
-}
-
-
-static void
-crypt_block (unsigned char *buffer, size_t length, char *salt, int iter,
- const char *pw, int encrypt)
-{
- GcryCipherHd chd;
- int rc;
-
- chd = gcry_cipher_open (GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_CBC, 0);
- if (!chd)
- {
- log_error ( "gcry_cipher_open failed: %s\n", gcry_strerror(-1));
- return;
- }
- if (set_key_iv (chd, salt, iter, pw))
- goto leave;
-
- rc = encrypt? gcry_cipher_encrypt (chd, buffer, length, NULL, 0)
- : gcry_cipher_decrypt (chd, buffer, length, NULL, 0);
-
- if (rc)
- {
- log_error ( "en/de-crytion failed: %s\n", gcry_strerror (rc));
- goto leave;
- }
-
-/* { */
-/* FILE *fp = fopen("inner.der", "wb"); */
-/* fwrite (buffer, 1, length, fp); */
-/* fclose (fp); */
-/* } */
-
- leave:
- gcry_cipher_close (chd);
-}
-
-
-
-
-static int
-parse_bag_encrypted_data (const unsigned char *buffer, size_t length,
- int startoffset)
-{
- struct tag_info ti;
- const unsigned char *p = buffer;
- size_t n = length;
- const char *where;
-
- where = "start";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != CONTEXT || ti.tag)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_SEQUENCE)
- goto bailout;
-
- where = "bag.encryptedData.version";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_INTEGER || ti.length != 1 || *p != 0)
- goto bailout;
- p++; n--;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_SEQUENCE)
- goto bailout;
-
- where = "bag.encryptedData.data";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_OBJECT_ID || ti.length != DIM(oid_data)
- || memcmp (p, oid_data, DIM(oid_data)))
- goto bailout;
- p += DIM(oid_data);
- n -= DIM(oid_data);
-
- /* fixme: continue parsing */
-
- return 0;
- bailout:
- log_error ("encrptedData error at \"%s\", offset %u\n",
- where, (p - buffer)+startoffset);
- return -1;
-}
-
-static GcryMPI *
-parse_bag_data (const unsigned char *buffer, size_t length, int startoffset,
- const char *pw)
-{
- int rc;
- struct tag_info ti;
- const unsigned char *p = buffer;
- size_t n = length;
- const char *where;
- char salt[8];
- unsigned int iter;
- int len;
- unsigned char *plain = NULL;
- GcryMPI *result = NULL;
- int result_count, i;
-
- where = "start";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != CONTEXT || ti.tag)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_OCTET_STRING)
- goto bailout;
-
- where = "data.outerseqs";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
-
- where = "data.objectidentifier";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_OBJECT_ID
- || ti.length != DIM(oid_pkcs_12_pkcs_8ShroudedKeyBag)
- || memcmp (p, oid_pkcs_12_pkcs_8ShroudedKeyBag,
- DIM(oid_pkcs_12_pkcs_8ShroudedKeyBag)))
- goto bailout;
- p += DIM(oid_pkcs_12_pkcs_8ShroudedKeyBag);
- n -= DIM(oid_pkcs_12_pkcs_8ShroudedKeyBag);
-
- where = "shrouded,outerseqs";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != CONTEXT || ti.tag)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_OBJECT_ID
- || ti.length != DIM(oid_pbeWithSHAAnd3_KeyTripleDES_CBC)
- || memcmp (p, oid_pbeWithSHAAnd3_KeyTripleDES_CBC,
- DIM(oid_pbeWithSHAAnd3_KeyTripleDES_CBC)))
- goto bailout;
- p += DIM(oid_pbeWithSHAAnd3_KeyTripleDES_CBC);
- n -= DIM(oid_pbeWithSHAAnd3_KeyTripleDES_CBC);
-
- where = "3des-params";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_OCTET_STRING || ti.length != 8 )
- goto bailout;
- memcpy (salt, p, 8);
- p += 8;
- n -= 8;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_INTEGER || !ti.length )
- goto bailout;
- for (iter=0; ti.length; ti.length--)
- {
- iter <<= 8;
- iter |= (*p++) & 0xff;
- n--;
- }
-
- where = "3des-ciphertext";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class || ti.tag != TAG_OCTET_STRING || !ti.length )
- goto bailout;
-
- log_info ("%lu bytes of 3DES encrypted text\n", ti.length);
-
- plain = gcry_malloc_secure (ti.length);
- if (!plain)
- {
- log_error ("error allocating decryption buffer\n");
- goto bailout;
- }
- memcpy (plain, p, ti.length);
- crypt_block (plain, ti.length, salt, iter, pw, 0);
- n = ti.length;
- startoffset = 0;
- buffer = p = plain;
-
- where = "decrypted-text";
- if (parse_tag (&p, &n, &ti) || ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- if (parse_tag (&p, &n, &ti) || ti.class || ti.tag != TAG_INTEGER
- || ti.length != 1 || *p)
- goto bailout;
- p++; n--;
- if (parse_tag (&p, &n, &ti) || ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- len = ti.length;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (len < ti.nhdr)
- goto bailout;
- len -= ti.nhdr;
- if (ti.class || ti.tag != TAG_OBJECT_ID
- || ti.length != DIM(oid_rsaEncryption)
- || memcmp (p, oid_rsaEncryption,
- DIM(oid_rsaEncryption)))
- goto bailout;
- p += DIM (oid_rsaEncryption);
- n -= DIM (oid_rsaEncryption);
- if (len < ti.length)
- goto bailout;
- len -= ti.length;
- if (n < len)
- goto bailout;
- p += len;
- n -= len;
- if (parse_tag (&p, &n, &ti) || ti.class || ti.tag != TAG_OCTET_STRING)
- goto bailout;
- if (parse_tag (&p, &n, &ti) || ti.class || ti.tag != TAG_SEQUENCE)
- goto bailout;
- len = ti.length;
-
- result = gcry_calloc (10, sizeof *result);
- if (!result)
- {
- log_error ( "error allocating result array\n");
- goto bailout;
- }
- result_count = 0;
-
- where = "reading.key-parameters";
- for (result_count=0; len && result_count < 9;)
- {
- int dummy_n;
-
- if (parse_tag (&p, &n, &ti) || ti.class || ti.tag != TAG_INTEGER)
- goto bailout;
- if (len < ti.nhdr)
- goto bailout;
- len -= ti.nhdr;
- if (len < ti.length)
- goto bailout;
- len -= ti.length;
- dummy_n = ti.length;
- if (!result_count && ti.length == 1 && !*p)
- ; /* ignore the very first one if it is a 0 */
- else
- {
- rc = gcry_mpi_scan (result+result_count, GCRYMPI_FMT_USG, p,
- &dummy_n);
- if (rc)
- {
- log_error ("error parsing key parameter: %s\n",
- gcry_strerror (rc));
- goto bailout;
- }
- result_count++;
- }
- p += ti.length;
- n -= ti.length;
- }
- if (len)
- goto bailout;
-
- return result;
-
- bailout:
- gcry_free (plain);
- if (result)
- {
- for (i=0; result[i]; i++)
- gcry_mpi_release (result[i]);
- gcry_free (result);
- }
- log_error ( "data error at \"%s\", offset %u\n",
- where, (p - buffer) + startoffset);
- return NULL;
-}
-
-
-/* Parse a PKCS12 object and return an array of MPI representing the
- secret key parameters. This is a very limited inplementation in
- that it is only able to look for 3DES encoded enctyptedData and
- tries to extract the first private key object it finds. In case of
- an error NULL is returned. */
-GcryMPI *
-p12_parse (const unsigned char *buffer, size_t length, const char *pw)
-{
- struct tag_info ti;
- const unsigned char *p = buffer;
- size_t n = length;
- const char *where;
- int bagseqlength, len;
-
- where = "pfx";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_SEQUENCE)
- goto bailout;
-
- where = "pfxVersion";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_INTEGER || ti.length != 1 || *p != 3)
- goto bailout;
- p++; n--;
-
- where = "authSave";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_SEQUENCE)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.tag != TAG_OBJECT_ID || ti.length != DIM(oid_data)
- || memcmp (p, oid_data, DIM(oid_data)))
- goto bailout;
- p += DIM(oid_data);
- n -= DIM(oid_data);
-
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != CONTEXT || ti.tag)
- goto bailout;
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != UNIVERSAL || ti.tag != TAG_OCTET_STRING)
- goto bailout;
-
- where = "bags";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != UNIVERSAL || ti.tag != TAG_SEQUENCE)
- goto bailout;
- bagseqlength = ti.length;
- while (bagseqlength)
- {
- /*log_debug ( "at offset %u\n", (p - buffer));*/
- where = "bag-sequence";
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- if (ti.class != UNIVERSAL || ti.tag != TAG_SEQUENCE)
- goto bailout;
-
- if (bagseqlength < ti.nhdr)
- goto bailout;
- bagseqlength -= ti.nhdr;
- if (bagseqlength < ti.length)
- goto bailout;
- bagseqlength -= ti.length;
- len = ti.length;
-
- if (parse_tag (&p, &n, &ti))
- goto bailout;
- len -= ti.nhdr;
- if (ti.tag == TAG_OBJECT_ID && ti.length == DIM(oid_encryptedData)
- && !memcmp (p, oid_encryptedData, DIM(oid_encryptedData)))
- {
- p += DIM(oid_encryptedData);
- n -= DIM(oid_encryptedData);
- len -= DIM(oid_encryptedData);
- where = "bag.encryptedData";
- if (parse_bag_encrypted_data (p, n, (p - buffer)))
- goto bailout;
- }
- else if (ti.tag == TAG_OBJECT_ID && ti.length == DIM(oid_data)
- && !memcmp (p, oid_data, DIM(oid_data)))
- {
- p += DIM(oid_data);
- n -= DIM(oid_data);
- len -= DIM(oid_data);
- return parse_bag_data (p, n, (p-buffer), pw);
- }
- else
- log_info ( "unknown bag type - skipped\n");
-
- if (len < 0 || len > n)
- goto bailout;
- p += len;
- n -= len;
- }
-
- return NULL;
- bailout:
- log_error ("error at \"%s\", offset %u\n", where, (p - buffer));
- return NULL;
-}
-
-
-
-static size_t
-compute_tag_length (size_t n)
-{
- int needed = 0;
-
- if (n < 128)
- needed += 2; /* tag and one length byte */
- else if (n < 256)
- needed += 3; /* tag, number of length bytes, 1 length byte */
- else if (n < 65536)
- needed += 4; /* tag, number of length bytes, 2 length bytes */
- else
- {
- log_error ("object too larger to encode\n");
- return 0;
- }
- return needed;
-}
-
-static unsigned char *
-store_tag_length (unsigned char *p, int tag, size_t n)
-{
- if (tag == TAG_SEQUENCE)
- tag |= 0x20; /* constructed */
-
- *p++ = tag;
- if (n < 128)
- *p++ = n;
- else if (n < 256)
- {
- *p++ = 0x81;
- *p++ = n;
- }
- else if (n < 65536)
- {
- *p++ = 0x82;
- *p++ = n >> 8;
- *p++ = n;
- }
-
- return p;
-}
-
-
-/* Create the final PKCS-12 object from the sequences contained in
- SEQLIST. That array is terminated with an NULL object */
-static unsigned char *
-create_final (struct buffer_s *sequences, size_t *r_length)
-{
- int i;
- size_t needed = 0;
- size_t n, outseqlen, notsooutseqlen, out0taglen, octstrlen, inseqlen;
- unsigned char *result, *p;
- size_t resultlen;
-
- for (i=0; sequences[i].buffer; i++)
- needed += sequences[i].length;
- /* This goes into a sequences. */
- inseqlen = needed;
- n = compute_tag_length (needed);
- needed += n;
- /* And encapsulate all in an octet string. */
- octstrlen = needed;
- n = compute_tag_length (needed);
- needed += n;
- /* And tag it with [0]. */
- out0taglen = needed;
- n = compute_tag_length (needed);
- needed += n;
- /* Prepend an data OID. */
- needed += 2 + DIM (oid_data);
- /* This all into a sequences. */
- notsooutseqlen = needed;
- n = compute_tag_length (needed);
- needed += n;
- /* Prepend the version integer 3. */
- needed += 3;
- /* And the final sequence. */
- outseqlen = needed;
- n = compute_tag_length (needed);
- needed += n;
-
- result = gcry_malloc (needed);
- if (!result)
- {
- log_error ("error allocating buffer\n");
- return NULL;
- }
- p = result;
-
- /* Store the very outer sequence. */
- p = store_tag_length (p, TAG_SEQUENCE, outseqlen);
- /* Store the version integer 3. */
- *p++ = TAG_INTEGER;
- *p++ = 1;
- *p++ = 3;
- /* Store another sequence. */
- p = store_tag_length (p, TAG_SEQUENCE, notsooutseqlen);
- /* Store the data OID. */
- p = store_tag_length (p, TAG_OBJECT_ID, DIM (oid_data));
- memcpy (p, oid_data, DIM (oid_data));
- p += DIM (oid_data);
- /* Next comes a context tag. */
- p = store_tag_length (p, 0xa0, out0taglen);
- /* And an octet string. */
- p = store_tag_length (p, TAG_OCTET_STRING, octstrlen);
- /* And the inner sequence. */
- p = store_tag_length (p, TAG_SEQUENCE, inseqlen);
- /* And append all the buffers. */
- for (i=0; sequences[i].buffer; i++)
- {
- memcpy (p, sequences[i].buffer, sequences[i].length);
- p += sequences[i].length;
- }
-
- /* Ready. */
- resultlen = p - result;
- if (needed != resultlen)
- log_debug ("length mismatch: %u, %u\n", needed, resultlen);
-
- *r_length = resultlen;
- return result;
-}
-
-
-/* Expect the RSA key parameters in KPARMS and a password in
- PW. Create a PKCS structure from it and return it as well as the
- length in R_LENGTH; return NULL in case of an error. */
-unsigned char *
-p12_build (GcryMPI *kparms, const char *pw, size_t *r_length)
-{
- int rc, i;
- size_t needed, n;
- unsigned char *plain, *p, *cipher;
- size_t plainlen, cipherlen;
- size_t outseqlen, oidseqlen, octstrlen, inseqlen;
- size_t out0taglen, in0taglen, outoctstrlen;
- size_t aseq1len, aseq2len, aseq3len;
- char salt[8];
-
- needed = 3; /* The version(?) integer of value 0. */
- for (i=0; kparms[i]; i++)
- {
- n = 0;
- rc = gcry_mpi_print (GCRYMPI_FMT_STD, NULL, &n, kparms[i]);
- if (rc)
- {
- log_error ("error formatting parameter: %s\n", gcry_strerror (rc));
- return NULL;
- }
- needed += n;
- n = compute_tag_length (n);
- if (!n)
- return NULL;
- needed += n;
- }
- if (i != 8)
- {
- log_error ("invalid paramters for p12_build\n");
- return NULL;
- }
- /* Now this all goes into a sequence. */
- inseqlen = needed;
- n = compute_tag_length (needed);
- if (!n)
- return NULL;
- needed += n;
- /* Encapsulate all into an octet string. */
- octstrlen = needed;
- n = compute_tag_length (needed);
- if (!n)
- return NULL;
- needed += n;
- /* Prepend the object identifier sequence. */
- oidseqlen = 2 + DIM (oid_rsaEncryption) + 2;
- needed += 2 + oidseqlen;
- /* The version number. */
- needed += 3;
- /* And finally put the whole thing into a sequence. */
- outseqlen = needed;
- n = compute_tag_length (needed);
- if (!n)
- return NULL;
- needed += n;
-
- /* allocate 8 extra bytes for padding */
- plain = gcry_malloc_secure (needed+8);
- if (!plain)
- {
- log_error ("error allocating encryption buffer\n");
- return NULL;
- }
-
- /* And now fill the plaintext buffer. */
- p = plain;
- p = store_tag_length (p, TAG_SEQUENCE, outseqlen);
- /* Store version. */
- *p++ = TAG_INTEGER;
- *p++ = 1;
- *p++ = 0;
- /* Store object identifier sequence. */
- p = store_tag_length (p, TAG_SEQUENCE, oidseqlen);
- p = store_tag_length (p, TAG_OBJECT_ID, DIM (oid_rsaEncryption));
- memcpy (p, oid_rsaEncryption, DIM (oid_rsaEncryption));
- p += DIM (oid_rsaEncryption);
- *p++ = TAG_NULL;
- *p++ = 0;
- /* Start with the octet string. */
- p = store_tag_length (p, TAG_OCTET_STRING, octstrlen);
- p = store_tag_length (p, TAG_SEQUENCE, inseqlen);
- /* Store the key parameters. */
- *p++ = TAG_INTEGER;
- *p++ = 1;
- *p++ = 0;
- for (i=0; kparms[i]; i++)
- {
- n = 0;
- rc = gcry_mpi_print (GCRYMPI_FMT_STD, NULL, &n, kparms[i]);
- if (rc)
- {
- log_error ("oops: error formatting parameter: %s\n",
- gcry_strerror (rc));
- gcry_free (plain);
- return NULL;
- }
- p = store_tag_length (p, TAG_INTEGER, n);
-
- n = plain + needed - p;
- rc = gcry_mpi_print (GCRYMPI_FMT_STD, p, &n, kparms[i]);
- if (rc)
- {
- log_error ("oops: error storing parameter: %s\n",
- gcry_strerror (rc));
- gcry_free (plain);
- return NULL;
- }
- p += n;
- }
-
- plainlen = p - plain;
- assert (needed == plainlen);
- /* Append some pad characters; we already allocated extra space. */
- n = 8 - plainlen % 8;
- for (;(plainlen % 8); plainlen++)
- *p++ = n;
-
- {
- FILE *fp = fopen("inner-out.der", "wb");
- fwrite (plain, 1, plainlen, fp);
- fclose (fp);
- }
-
-
- /* Encrypt it and prepend a lot of stupid things. */
- gcry_randomize (salt, 8, GCRY_STRONG_RANDOM);
- crypt_block (plain, plainlen, salt, 1024, pw, 1);
- /* the data goes into an octet string. */
- needed = compute_tag_length (plainlen);
- needed += plainlen;
- /* we prepend the the algorithm identifier (we use a pre-encoded one)*/
- needed += DIM (data_3desiter1024);
- /* we put a sequence around. */
- aseq3len = needed;
- needed += compute_tag_length (needed);
- /* Prepend it with a [0] tag. */
- in0taglen = needed;
- needed += compute_tag_length (needed);
- /* Prepend that shroudedKeyBag OID. */
- needed += 2 + DIM (oid_pkcs_12_pkcs_8ShroudedKeyBag);
- /* Put it all into two sequence. */
- aseq2len = needed;
- needed += compute_tag_length ( needed);
- aseq1len = needed;
- needed += compute_tag_length (needed);
- /* This all goes into an octet string. */
- outoctstrlen = needed;
- needed += compute_tag_length (needed);
- /* Prepend it with a [0] tag. */
- out0taglen = needed;
- needed += compute_tag_length (needed);
- /* Prepend the data OID. */
- needed += 2 + DIM (oid_data);
- /* And a sequence. */
- outseqlen = needed;
- needed += compute_tag_length (needed);
-
- cipher = gcry_malloc (needed);
- if (!cipher)
- {
- log_error ("error allocating buffer\n");
- gcry_free (plain);
- return NULL;
- }
- p = cipher;
- /* Store the first sequence. */
- p = store_tag_length (p, TAG_SEQUENCE, outseqlen);
- /* Store the data OID. */
- p = store_tag_length (p, TAG_OBJECT_ID, DIM (oid_data));
- memcpy (p, oid_data, DIM (oid_data));
- p += DIM (oid_data);
- /* Next comes a context tag. */
- p = store_tag_length (p, 0xa0, out0taglen);
- /* And an octet string. */
- p = store_tag_length (p, TAG_OCTET_STRING, outoctstrlen);
- /* Two sequences. */
- p = store_tag_length (p, TAG_SEQUENCE, aseq1len);
- p = store_tag_length (p, TAG_SEQUENCE, aseq2len);
- /* Store the shroudedKeyBag OID. */
- p = store_tag_length (p, TAG_OBJECT_ID,
- DIM (oid_pkcs_12_pkcs_8ShroudedKeyBag));
- memcpy (p, oid_pkcs_12_pkcs_8ShroudedKeyBag,
- DIM (oid_pkcs_12_pkcs_8ShroudedKeyBag));
- p += DIM (oid_pkcs_12_pkcs_8ShroudedKeyBag);
- /* Next comes a context tag. */
- p = store_tag_length (p, 0xa0, in0taglen);
- /* And a sequence. */
- p = store_tag_length (p, TAG_SEQUENCE, aseq3len);
- /* Now for the pre-encoded algorithm indentifier and the salt. */
- memcpy (p, data_3desiter1024, DIM (data_3desiter1024));
- memcpy (p + DATA_3DESITER1024_SALT_OFF, salt, 8);
- p += DIM (data_3desiter1024);
- /* And finally the octet string with the encrypted data. */
- p = store_tag_length (p, TAG_OCTET_STRING, plainlen);
- memcpy (p, plain, plainlen);
- p += plainlen;
- cipherlen = p - cipher;
-
- if (needed != cipherlen)
- log_debug ("length mismatch: %u, %u\n", needed, cipherlen);
- gcry_free (plain);
-
- {
- struct buffer_s seqlist[2];
-
- seqlist[0].buffer = cipher;
- seqlist[0].length = cipherlen;
- seqlist[1].buffer = NULL;
- seqlist[1].length = 0;
-
- cipher = create_final (seqlist, &cipherlen);
- gcry_free (seqlist[0].buffer);
- }
-
- *r_length = cipherlen;
- return cipher;
-}
-
-
-#ifdef TEST
-int
-main (int argc, char **argv)
-{
- FILE *fp;
- struct stat st;
- char *buf;
- size_t buflen;
- GcryMPI *result;
-
- if (argc != 3)
- {
- fprintf (stderr, "usage: testp12 file passphrase\n");
- return 1;
- }
-
- gcry_control (GCRYCTL_DISABLE_SECMEM, NULL);
- gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL);
-
- fp = fopen (argv[1], "rb");
- if (!fp)
- {
- fprintf (stderr, "can't open `%s': %s\n", argv[1], strerror (errno));
- return 1;
- }
-
- if (fstat (fileno(fp), &st))
- {
- fprintf (stderr, "can't stat `%s': %s\n", argv[1], strerror (errno));
- return 1;
- }
-
- buflen = st.st_size;
- buf = gcry_malloc (buflen+1);
- if (!buf || fread (buf, buflen, 1, fp) != 1)
- {
- fprintf (stderr, "error reading `%s': %s\n", argv[1], strerror (errno));
- return 1;
- }
- fclose (fp);
-
- result = p12_parse (buf, buflen, argv[2]);
- if (result)
- {
- int i, rc;
- char *buf;
-
- for (i=0; result[i]; i++)
- {
- rc = gcry_mpi_aprint (GCRYMPI_FMT_HEX, (void**)&buf,
- NULL, result[i]);
- if (rc)
- printf ("%d: [error printing number: %s]\n",
- i, gcry_strerror (rc));
- else
- {
- printf ("%d: %s\n", i, buf);
- gcry_free (buf);
- }
- }
- }
-
- return 0;
-
-}
-#endif /* TEST */
diff --git a/agent/minip12.h b/agent/minip12.h
deleted file mode 100644
index 8573a2db0..000000000
--- a/agent/minip12.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* minip12.h - Global definitions for the minimal pkcs-12 implementation.
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef MINIP12_H
-#define MINIP12_H
-
-#include <gcrypt.h>
-
-GcryMPI *p12_parse (const unsigned char *buffer, size_t length,
- const char *pw);
-
-unsigned char *p12_build (GcryMPI *kparms, const char *pw, size_t *r_length);
-
-
-#endif /*MINIP12_H*/
diff --git a/agent/pkdecrypt.c b/agent/pkdecrypt.c
deleted file mode 100644
index 6add3d467..000000000
--- a/agent/pkdecrypt.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* pkdecrypt.c - public key decryption (well, acually using a secret key)
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "agent.h"
-
-
-/* DECRYPT the stuff in ciphertext which is expected to be a S-Exp.
- Try to get the key from CTRL and write the decoded stuff back to
- OUTFP. */
-int
-agent_pkdecrypt (CTRL ctrl, const char *ciphertext, size_t ciphertextlen,
- FILE *outfp)
-{
- GCRY_SEXP s_skey = NULL, s_cipher = NULL, s_plain = NULL;
- unsigned char *shadow_info = NULL;
- int rc;
- char *buf = NULL;
- size_t len;
-
- if (!ctrl->have_keygrip)
- {
- log_error ("speculative decryption not yet supported\n");
- rc = seterr (No_Secret_Key);
- goto leave;
- }
-
- rc = gcry_sexp_sscan (&s_cipher, NULL, ciphertext, ciphertextlen);
- if (rc)
- {
- log_error ("failed to convert ciphertext: %s\n", gcry_strerror (rc));
- rc = seterr (Invalid_Data);
- goto leave;
- }
-
- if (DBG_CRYPTO)
- {
- log_printhex ("keygrip:", ctrl->keygrip, 20);
- log_printhex ("cipher: ", ciphertext, ciphertextlen);
- }
- s_skey = agent_key_from_file (ctrl->keygrip, &shadow_info, 0);
- if (!s_skey && !shadow_info)
- {
- log_error ("failed to read the secret key\n");
- rc = seterr (No_Secret_Key);
- goto leave;
- }
-
- if (!s_skey)
- { /* divert operation to the smartcard */
-
- if (!gcry_sexp_canon_len (ciphertext, ciphertextlen, NULL, NULL))
- {
- rc = GNUPG_Invalid_Sexp;
- goto leave;
- }
-
- rc = divert_pkdecrypt (ciphertext, shadow_info, &buf, &len );
- if (rc)
- {
- log_error ("smartcard decryption failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- /* FIXME: don't use buffering and change the protocol to return
- a complete S-expression and not just a part. */
- fprintf (outfp, "%u:", (unsigned int)len);
- fwrite (buf, 1, len, outfp);
- putc (0, outfp);
- }
- else
- { /* no smartcard, but a private key */
- if (DBG_CRYPTO)
- {
- log_debug ("skey: ");
- gcry_sexp_dump (s_skey);
- }
-
- rc = gcry_pk_decrypt (&s_plain, s_cipher, s_skey);
- if (rc)
- {
- log_error ("decryption failed: %s\n", gcry_strerror (rc));
- rc = map_gcry_err (rc);
- goto leave;
- }
-
- if (DBG_CRYPTO)
- {
- log_debug ("plain: ");
- gcry_sexp_dump (s_plain);
- }
- len = gcry_sexp_sprint (s_plain, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- buf = xmalloc (len);
- len = gcry_sexp_sprint (s_plain, GCRYSEXP_FMT_CANON, buf, len);
- assert (len);
- /* FIXME: we must make sure that no buffering takes place or we are
- in full control of the buffer memory (easy to do) - should go
- into assuan. */
- fwrite (buf, 1, len, outfp);
- }
-
-
- leave:
- gcry_sexp_release (s_skey);
- gcry_sexp_release (s_plain);
- gcry_sexp_release (s_cipher);
- xfree (buf);
- xfree (shadow_info);
- return rc;
-}
-
-
diff --git a/agent/pksign.c b/agent/pksign.c
deleted file mode 100644
index 2acc63dd9..000000000
--- a/agent/pksign.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* pksign.c - public key signing (well, acually using a secret key)
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "agent.h"
-
-
-static int
-do_encode_md (const unsigned char *digest, size_t digestlen, int algo,
- unsigned int nbits, GCRY_MPI *r_val)
-{
- int nframe = (nbits+7) / 8;
- byte *frame;
- int i, n;
- byte asn[100];
- size_t asnlen;
-
- asnlen = DIM(asn);
- if (gcry_md_algo_info (algo, GCRYCTL_GET_ASNOID, asn, &asnlen))
- {
- log_error ("no object identifier for algo %d\n", algo);
- return GNUPG_Internal_Error;
- }
-
- if (digestlen + asnlen + 4 > nframe )
- {
- log_error ("can't encode a %d bit MD into a %d bits frame\n",
- (int)(digestlen*8), (int)nbits);
- return GNUPG_Internal_Error;
- }
-
- /* We encode the MD in this way:
- *
- * 0 1 PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes)
- *
- * PAD consists of FF bytes.
- */
- frame = xtrymalloc (nframe);
- if (!frame)
- return GNUPG_Out_Of_Core;
- n = 0;
- frame[n++] = 0;
- frame[n++] = 1; /* block type */
- i = nframe - digestlen - asnlen -3 ;
- assert ( i > 1 );
- memset ( frame+n, 0xff, i ); n += i;
- frame[n++] = 0;
- memcpy ( frame+n, asn, asnlen ); n += asnlen;
- memcpy ( frame+n, digest, digestlen ); n += digestlen;
- assert ( n == nframe );
- if (DBG_CRYPTO)
- log_printhex ("encoded hash:", frame, nframe);
-
- gcry_mpi_scan (r_val, GCRYMPI_FMT_USG, frame, &nframe);
- xfree (frame);
- return 0;
-}
-
-
-/* SIGN whatever information we have accumulated in CTRL and write it
- back to OUTFP. */
-int
-agent_pksign (CTRL ctrl, FILE *outfp, int ignore_cache)
-{
- GCRY_SEXP s_skey = NULL, s_hash = NULL, s_sig = NULL;
- GCRY_MPI frame = NULL;
- unsigned char *shadow_info = NULL;
- int rc;
- char *buf = NULL;
- size_t len;
-
- if (!ctrl->have_keygrip)
- return seterr (No_Secret_Key);
-
- s_skey = agent_key_from_file (ctrl->keygrip, &shadow_info, ignore_cache);
- if (!s_skey && !shadow_info)
- {
- log_error ("failed to read the secret key\n");
- rc = seterr (No_Secret_Key);
- goto leave;
- }
-
- if (!s_skey)
- { /* divert operation to the smartcard */
- unsigned char *sigbuf;
-
- rc = divert_pksign (ctrl->digest.value,
- ctrl->digest.valuelen,
- ctrl->digest.algo,
- shadow_info, &sigbuf);
- if (rc)
- {
- log_error ("smartcard signing failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- len = gcry_sexp_canon_len (sigbuf, 0, NULL, NULL);
- assert (len);
- buf = sigbuf;
- }
- else
- { /* no smartcard, but a private key */
-
- /* put the hash into a sexp */
- rc = do_encode_md (ctrl->digest.value,
- ctrl->digest.valuelen,
- ctrl->digest.algo,
- gcry_pk_get_nbits (s_skey),
- &frame);
- if (rc)
- goto leave;
- if ( gcry_sexp_build (&s_hash, NULL, "%m", frame) )
- BUG ();
-
- if (DBG_CRYPTO)
- {
- log_debug ("skey: ");
- gcry_sexp_dump (s_skey);
- }
-
- /* sign */
- rc = gcry_pk_sign (&s_sig, s_hash, s_skey);
- if (rc)
- {
- log_error ("signing failed: %s\n", gcry_strerror (rc));
- rc = map_gcry_err (rc);
- goto leave;
- }
-
- if (DBG_CRYPTO)
- {
- log_debug ("result: ");
- gcry_sexp_dump (s_sig);
- }
-
- len = gcry_sexp_sprint (s_sig, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- buf = xmalloc (len);
- len = gcry_sexp_sprint (s_sig, GCRYSEXP_FMT_CANON, buf, len);
- assert (len);
- }
-
- /* FIXME: we must make sure that no buffering takes place or we are
- in full control of the buffer memory (easy to do) - should go
- into assuan. */
- fwrite (buf, 1, len, outfp);
-
- leave:
- gcry_sexp_release (s_skey);
- gcry_sexp_release (s_hash);
- gcry_sexp_release (s_sig);
- gcry_mpi_release (frame);
- xfree (buf);
- xfree (shadow_info);
- return rc;
-}
-
-
diff --git a/agent/protect-tool.c b/agent/protect-tool.c
deleted file mode 100644
index 1d706ea2b..000000000
--- a/agent/protect-tool.c
+++ /dev/null
@@ -1,977 +0,0 @@
-/* protect-tool.c - A tool to test the secret key protection
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <gcrypt.h>
-
-#define JNLIB_NEED_LOG_LOGV
-#include "agent.h"
-#include "minip12.h"
-#include "simple-pwquery.h"
-#include "i18n.h"
-
-enum cmd_and_opt_values
-{ aNull = 0,
- oVerbose = 'v',
- oArmor = 'a',
- oPassphrase = 'P',
-
- oProtect = 'p',
- oUnprotect = 'u',
-
- oNoVerbose = 500,
- oShadow,
- oShowShadowInfo,
- oShowKeygrip,
-
- oP12Import,
- oP12Export,
- oStore,
- oForce,
-
-aTest };
-
-struct rsa_secret_key_s
- {
- MPI n; /* public modulus */
- MPI e; /* public exponent */
- MPI d; /* exponent */
- MPI p; /* prime p. */
- MPI q; /* prime q. */
- MPI u; /* inverse of p mod q. */
- };
-
-
-static int opt_armor;
-static int opt_store;
-static int opt_force;
-static const char *passphrase;
-
-static const char *get_passphrase (void);
-static int store_private_key (const unsigned char *grip,
- const void *buffer, size_t length, int force);
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 301, NULL, 0, N_("@Options:\n ") },
-
- { oVerbose, "verbose", 0, "verbose" },
- { oArmor, "armor", 0, "write output in advanced format" },
- { oPassphrase, "passphrase", 2, "|STRING|use passphrase STRING" },
- { oProtect, "protect", 256, "protect a private key"},
- { oUnprotect, "unprotect", 256, "unprotect a private key"},
- { oShadow, "shadow", 256, "create a shadow entry for a priblic key"},
- { oShowShadowInfo, "show-shadow-info", 256, "return the shadow info"},
- { oShowKeygrip, "show-keygrip", 256, "show the \"keygrip\""},
-
- { oP12Import, "p12-import", 256, "import a PKCS-12 encoded private key"},
- { oP12Export, "p12-export", 256, "export a private key PKCS-12 encoded"},
- { oStore, "store", 0, "store the created key in the appropriate place"},
- { oForce, "force", 0, "force overwriting"},
- {0}
-};
-
-static const char *
-my_strusage (int level)
-{
- const char *p;
- switch (level)
- {
- case 11: p = "gpg-protect-tool (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p = _("Please report bugs to <" PACKAGE_BUGREPORT ">.\n");
- break;
- case 1:
- case 40: p = _("Usage: gpg-protect-tool [options] (-h for help)\n");
- break;
- case 41: p = _("Syntax: gpg-protect-tool [options] [args]]\n"
- "Secret key maintenance tool\n");
- break;
-
- default: p = NULL;
- }
- return p;
-}
-
-
-
-static void
-i18n_init (void)
-{
-#ifdef USE_SIMPLE_GETTEXT
- set_gettext_file( PACKAGE );
-#else
-#ifdef ENABLE_NLS
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-#endif
-#endif
-}
-
-
-
-/* Used by gcry for logging */
-static void
-my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
-{
- /* translate the log levels */
- switch (level)
- {
- case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
- case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
- case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
- case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
- case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
- case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
- case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
- default: level = JNLIB_LOG_ERROR; break; }
- log_logv (level, fmt, arg_ptr);
-}
-
-
-/* static void */
-/* print_mpi (const char *text, GcryMPI a) */
-/* { */
-/* char *buf; */
-/* void *bufaddr = &buf; */
-/* int rc; */
-
-/* rc = gcry_mpi_aprint (GCRYMPI_FMT_HEX, bufaddr, NULL, a); */
-/* if (rc) */
-/* log_info ("%s: [error printing number: %s]\n", text, gcry_strerror (rc)); */
-/* else */
-/* { */
-/* log_info ("%s: %s\n", text, buf); */
-/* gcry_free (buf); */
-/* } */
-/* } */
-
-
-
-static unsigned char *
-make_canonical (const char *fname, const char *buf, size_t buflen)
-{
- int rc;
- size_t erroff, len;
- GCRY_SEXP sexp;
- unsigned char *result;
-
- rc = gcry_sexp_sscan (&sexp, &erroff, buf, buflen);
- if (rc)
- {
- log_error ("invalid S-Expression in `%s' (off=%u): %s\n",
- fname, (unsigned int)erroff, gcry_strerror (rc));
- return NULL;
- }
- len = gcry_sexp_sprint (sexp, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- result = xmalloc (len);
- len = gcry_sexp_sprint (sexp, GCRYSEXP_FMT_CANON, result, len);
- assert (len);
- gcry_sexp_release (sexp);
- return result;
-}
-
-static char *
-make_advanced (const unsigned char *buf, size_t buflen)
-{
- int rc;
- size_t erroff, len;
- GCRY_SEXP sexp;
- unsigned char *result;
-
- rc = gcry_sexp_sscan (&sexp, &erroff, buf, buflen);
- if (rc)
- {
- log_error ("invalid canonical S-Expression (off=%u): %s\n",
- (unsigned int)erroff, gcry_strerror (rc));
- return NULL;
- }
- len = gcry_sexp_sprint (sexp, GCRYSEXP_FMT_ADVANCED, NULL, 0);
- assert (len);
- result = xmalloc (len);
- len = gcry_sexp_sprint (sexp, GCRYSEXP_FMT_ADVANCED, result, len);
- assert (len);
- gcry_sexp_release (sexp);
- return result;
-}
-
-
-static char *
-read_file (const char *fname, size_t *r_length)
-{
- FILE *fp;
- struct stat st;
- char *buf;
- size_t buflen;
-
- fp = fopen (fname, "rb");
- if (!fp)
- {
- log_error ("can't open `%s': %s\n", fname, strerror (errno));
- return NULL;
- }
-
- if (fstat (fileno(fp), &st))
- {
- log_error ("can't stat `%s': %s\n", fname, strerror (errno));
- fclose (fp);
- return NULL;
- }
-
- buflen = st.st_size;
- buf = xmalloc (buflen+1);
- if (fread (buf, buflen, 1, fp) != 1)
- {
- log_error ("error reading `%s': %s\n", fname, strerror (errno));
- fclose (fp);
- xfree (buf);
- return NULL;
- }
- fclose (fp);
-
- *r_length = buflen;
- return buf;
-}
-
-
-static unsigned char *
-read_key (const char *fname)
-{
- char *buf;
- size_t buflen;
- unsigned char *key;
-
- buf = read_file (fname, &buflen);
- key = make_canonical (fname, buf, buflen);
- xfree (buf);
- return key;
-}
-
-
-
-static void
-read_and_protect (const char *fname)
-{
- int rc;
- unsigned char *key;
- unsigned char *result;
- size_t resultlen;
-
- key = read_key (fname);
- if (!key)
- return;
-
- rc = agent_protect (key, get_passphrase (), &result, &resultlen);
- xfree (key);
- if (rc)
- {
- log_error ("protecting the key failed: %s\n", gnupg_strerror (rc));
- return;
- }
-
- if (opt_armor)
- {
- char *p = make_advanced (result, resultlen);
- xfree (result);
- if (!p)
- return;
- result = p;
- resultlen = strlen (p);
- }
-
- fwrite (result, resultlen, 1, stdout);
- xfree (result);
-}
-
-
-static void
-read_and_unprotect (const char *fname)
-{
- int rc;
- unsigned char *key;
- unsigned char *result;
- size_t resultlen;
-
- key = read_key (fname);
- if (!key)
- return;
-
- rc = agent_unprotect (key, get_passphrase (), &result, &resultlen);
- xfree (key);
- if (rc)
- {
- log_error ("unprotecting the key failed: %s\n", gnupg_strerror (rc));
- return;
- }
-
- if (opt_armor)
- {
- char *p = make_advanced (result, resultlen);
- xfree (result);
- if (!p)
- return;
- result = p;
- resultlen = strlen (p);
- }
-
- fwrite (result, resultlen, 1, stdout);
- xfree (result);
-}
-
-
-
-static void
-read_and_shadow (const char *fname)
-{
- int rc;
- unsigned char *key;
- unsigned char *result;
- size_t resultlen;
-
- key = read_key (fname);
- if (!key)
- return;
-
- rc = agent_shadow_key (key, "(8:313233342:43)", &result);
- xfree (key);
- if (rc)
- {
- log_error ("shadowing the key failed: %s\n", gnupg_strerror (rc));
- return;
- }
- resultlen = gcry_sexp_canon_len (result, 0, NULL,NULL);
- assert (resultlen);
-
- if (opt_armor)
- {
- char *p = make_advanced (result, resultlen);
- xfree (result);
- if (!p)
- return;
- result = p;
- resultlen = strlen (p);
- }
-
- fwrite (result, resultlen, 1, stdout);
- xfree (result);
-}
-
-static void
-show_shadow_info (const char *fname)
-{
- int rc;
- unsigned char *key;
- const unsigned char *info;
- size_t infolen;
-
- key = read_key (fname);
- if (!key)
- return;
-
- rc = agent_get_shadow_info (key, &info);
- xfree (key);
- if (rc)
- {
- log_error ("get_shadow_info failed: %s\n", gnupg_strerror (rc));
- return;
- }
- infolen = gcry_sexp_canon_len (info, 0, NULL,NULL);
- assert (infolen);
-
- if (opt_armor)
- {
- char *p = make_advanced (info, infolen);
- if (!p)
- return;
- fwrite (p, strlen (p), 1, stdout);
- xfree (p);
- }
- else
- fwrite (info, infolen, 1, stdout);
-}
-
-
-static void
-show_file (const char *fname)
-{
- unsigned char *key;
- size_t keylen;
- char *p;
-
- key = read_key (fname);
- if (!key)
- return;
-
- keylen = gcry_sexp_canon_len (key, 0, NULL,NULL);
- assert (keylen);
-
- p = make_advanced (key, keylen);
- xfree (key);
- if (p)
- {
- fwrite (p, strlen (p), 1, stdout);
- xfree (p);
- }
-}
-
-static void
-show_keygrip (const char *fname)
-{
- unsigned char *key;
- GcrySexp private;
- unsigned char grip[20];
- int i;
-
- key = read_key (fname);
- if (!key)
- return;
-
- if (gcry_sexp_new (&private, key, 0, 0))
- {
- log_error ("gcry_sexp_new failed\n");
- return;
- }
- xfree (key);
-
- if (!gcry_pk_get_keygrip (private, grip))
- {
- log_error ("can't calculate keygrip\n");
- return;
- }
- gcry_sexp_release (private);
-
- for (i=0; i < 20; i++)
- printf ("%02X", grip[i]);
- putchar ('\n');
-}
-
-
-static int
-rsa_key_check (struct rsa_secret_key_s *skey)
-{
- int err = 0;
- MPI t = gcry_mpi_snew (0);
- MPI t1 = gcry_mpi_snew (0);
- MPI t2 = gcry_mpi_snew (0);
- MPI phi = gcry_mpi_snew (0);
-
- /* check that n == p * q */
- gcry_mpi_mul (t, skey->p, skey->q);
- if (gcry_mpi_cmp( t, skey->n) )
- {
- log_error ("RSA oops: n != p * q\n");
- err++;
- }
-
- /* check that p is less than q */
- if (gcry_mpi_cmp (skey->p, skey->q) > 0)
- {
- GcryMPI tmp;
-
- log_info ("swapping secret primes\n");
- tmp = gcry_mpi_copy (skey->p);
- gcry_mpi_set (skey->p, skey->q);
- gcry_mpi_set (skey->q, tmp);
- gcry_mpi_release (tmp);
- /* and must recompute u of course */
- gcry_mpi_invm (skey->u, skey->p, skey->q);
- }
-
- /* check that e divides neither p-1 nor q-1 */
- gcry_mpi_sub_ui (t, skey->p, 1 );
- gcry_mpi_div (NULL, t, t, skey->e, 0);
- if (!gcry_mpi_cmp_ui( t, 0) )
- {
- log_error ("RSA oops: e divides p-1\n");
- err++;
- }
- gcry_mpi_sub_ui (t, skey->q, 1);
- gcry_mpi_div (NULL, t, t, skey->e, 0);
- if (!gcry_mpi_cmp_ui( t, 0))
- {
- log_info ( "RSA oops: e divides q-1\n" );
- err++;
- }
-
- /* check that d is correct. */
- gcry_mpi_sub_ui (t1, skey->p, 1);
- gcry_mpi_sub_ui (t2, skey->q, 1);
- gcry_mpi_mul (phi, t1, t2);
- gcry_mpi_invm (t, skey->e, phi);
- if (gcry_mpi_cmp (t, skey->d))
- { /* no: try universal exponent. */
- gcry_mpi_gcd (t, t1, t2);
- gcry_mpi_div (t, NULL, phi, t, 0);
- gcry_mpi_invm (t, skey->e, t);
- if (gcry_mpi_cmp (t, skey->d))
- {
- log_error ("RSA oops: bad secret exponent\n");
- err++;
- }
- }
-
- /* check for correctness of u */
- gcry_mpi_invm (t, skey->p, skey->q);
- if (gcry_mpi_cmp (t, skey->u))
- {
- log_info ( "RSA oops: bad u parameter\n");
- err++;
- }
-
- if (err)
- log_info ("RSA secret key check failed\n");
-
- gcry_mpi_release (t);
- gcry_mpi_release (t1);
- gcry_mpi_release (t2);
- gcry_mpi_release (phi);
-
- return err? -1:0;
-}
-
-
-static void
-import_p12_file (const char *fname)
-{
- char *buf;
- unsigned char *result;
- size_t buflen, resultlen;
- int i;
- int rc;
- GcryMPI *kparms;
- struct rsa_secret_key_s sk;
- GcrySexp s_key;
- unsigned char *key;
- unsigned char grip[20];
-
- /* fixme: we should release some stuff on error */
-
- buf = read_file (fname, &buflen);
- if (!buf)
- return;
-
- kparms = p12_parse (buf, buflen, get_passphrase ());
- xfree (buf);
- if (!kparms)
- {
- log_error ("error parsing or decrypting the PKCS-1 file\n");
- return;
- }
- for (i=0; kparms[i]; i++)
- ;
- if (i != 8)
- {
- log_error ("invalid structure of private key\n");
- return;
- }
-
-
-/* print_mpi (" n", kparms[0]); */
-/* print_mpi (" e", kparms[1]); */
-/* print_mpi (" d", kparms[2]); */
-/* print_mpi (" p", kparms[3]); */
-/* print_mpi (" q", kparms[4]); */
-/* print_mpi ("dmp1", kparms[5]); */
-/* print_mpi ("dmq1", kparms[6]); */
-/* print_mpi (" u", kparms[7]); */
-
- sk.n = kparms[0];
- sk.e = kparms[1];
- sk.d = kparms[2];
- sk.q = kparms[3];
- sk.p = kparms[4];
- sk.u = kparms[7];
- if (rsa_key_check (&sk))
- return;
-/* print_mpi (" n", sk.n); */
-/* print_mpi (" e", sk.e); */
-/* print_mpi (" d", sk.d); */
-/* print_mpi (" p", sk.p); */
-/* print_mpi (" q", sk.q); */
-/* print_mpi (" u", sk.u); */
-
- /* Create an S-expresion from the parameters. */
- rc = gcry_sexp_build (&s_key, NULL,
- "(private-key(rsa(n%m)(e%m)(d%m)(p%m)(q%m)(u%m)))",
- sk.n, sk.e, sk.d, sk.p, sk.q, sk.u, NULL);
- for (i=0; i < 8; i++)
- gcry_mpi_release (kparms[i]);
- gcry_free (kparms);
- if (rc)
- {
- log_error ("failed to created S-expression from key: %s\n",
- gcry_strerror (rc));
- return;
- }
-
- /* Compute the keygrip. */
- if (!gcry_pk_get_keygrip (s_key, grip))
- {
- log_error ("can't calculate keygrip\n");
- return;
- }
- log_info ("keygrip: ");
- for (i=0; i < 20; i++)
- log_printf ("%02X", grip[i]);
- log_printf ("\n");
-
- /* convert to canonical encoding */
- buflen = gcry_sexp_sprint (s_key, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (buflen);
- key = gcry_xmalloc_secure (buflen);
- buflen = gcry_sexp_sprint (s_key, GCRYSEXP_FMT_CANON, key, buflen);
- assert (buflen);
- gcry_sexp_release (s_key);
-
-
- rc = agent_protect (key, get_passphrase (), &result, &resultlen);
- xfree (key);
- if (rc)
- {
- log_error ("protecting the key failed: %s\n", gnupg_strerror (rc));
- return;
- }
-
- if (opt_armor)
- {
- char *p = make_advanced (result, resultlen);
- xfree (result);
- if (!p)
- return;
- result = p;
- resultlen = strlen (p);
- }
-
- if (opt_store)
- store_private_key (grip, result, resultlen, opt_force);
- else
- fwrite (result, resultlen, 1, stdout);
-
- xfree (result);
-}
-
-
-
-static GcryMPI *
-sexp_to_kparms (GCRY_SEXP sexp)
-{
- GcrySexp list, l2;
- const char *name;
- const char *s;
- size_t n;
- int i, idx;
- const char *elems;
- GcryMPI *array;
-
- list = gcry_sexp_find_token (sexp, "private-key", 0 );
- if(!list)
- return NULL;
- l2 = gcry_sexp_cadr (list);
- gcry_sexp_release (list);
- list = l2;
- name = gcry_sexp_nth_data (list, 0, &n);
- if(!name || n != 3 || memcmp (name, "rsa", 3))
- {
- gcry_sexp_release (list);
- return NULL;
- }
-
- /* Paramter names used with RSA. */
- elems = "nedpqu";
- array = xcalloc (strlen(elems) + 1, sizeof *array);
- for (idx=0, s=elems; *s; s++, idx++ )
- {
- l2 = gcry_sexp_find_token (list, s, 1);
- if (!l2)
- {
- for (i=0; i<idx; i++)
- gcry_mpi_release (array[i]);
- xfree (array);
- gcry_sexp_release (list);
- return NULL; /* required parameter not found */
- }
- array[idx] = gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_USG);
- gcry_sexp_release (l2);
- if (!array[idx])
- {
- for (i=0; i<idx; i++)
- gcry_mpi_release (array[i]);
- xfree (array);
- gcry_sexp_release (list);
- return NULL; /* required parameter is invalid */
- }
- }
-
- gcry_sexp_release (list);
- return array;
-}
-
-
-
-
-static void
-export_p12_file (const char *fname)
-{
- GcryMPI kparms[9], *kp;
- unsigned char *key;
- size_t keylen;
- GcrySexp private;
- struct rsa_secret_key_s sk;
- int i;
-
- key = read_key (fname);
- if (!key)
- return;
-
- if (gcry_sexp_new (&private, key, 0, 0))
- {
- log_error ("gcry_sexp_new failed\n");
- return;
- }
- xfree (key);
-
- kp = sexp_to_kparms (private);
- gcry_sexp_release (private);
- if (!kp)
- {
- log_error ("error converting key parameters\n");
- return;
- }
- sk.n = kp[0];
- sk.e = kp[1];
- sk.d = kp[2];
- sk.p = kp[3];
- sk.q = kp[4];
- sk.u = kp[5];
- xfree (kp);
-
-
- kparms[0] = sk.n;
- kparms[1] = sk.e;
- kparms[2] = sk.d;
- kparms[3] = sk.q;
- kparms[4] = sk.p;
- kparms[5] = gcry_mpi_snew (0); /* compute d mod (p-1) */
- gcry_mpi_sub_ui (kparms[5], kparms[3], 1);
- gcry_mpi_mod (kparms[5], sk.d, kparms[5]);
- kparms[6] = gcry_mpi_snew (0); /* compute d mod (q-1) */
- gcry_mpi_sub_ui (kparms[6], kparms[4], 1);
- gcry_mpi_mod (kparms[6], sk.d, kparms[6]);
- kparms[7] = sk.u;
- kparms[8] = NULL;
-
- key = p12_build (kparms, get_passphrase (), &keylen);
- for (i=0; i < 8; i++)
- gcry_mpi_release (kparms[i]);
- if (!key)
- return;
-
- fwrite (key, keylen, 1, stdout);
- xfree (key);
-}
-
-
-int
-main (int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
- int cmd = 0;
-
- set_strusage (my_strusage);
- gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
- log_set_prefix ("gpg-protect-tool", 1);
- i18n_init ();
-
- if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
- {
- log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
- NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
- }
-
- gcry_set_log_handler (my_gcry_logger, NULL);
-
- gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
-
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
- while (arg_parse (&pargs, opts) )
- {
- switch (pargs.r_opt)
- {
- case oVerbose: opt.verbose++; break;
- case oArmor: opt_armor=1; break;
-
- case oProtect: cmd = oProtect; break;
- case oUnprotect: cmd = oUnprotect; break;
- case oShadow: cmd = oShadow; break;
- case oShowShadowInfo: cmd = oShowShadowInfo; break;
- case oShowKeygrip: cmd = oShowKeygrip; break;
- case oP12Import: cmd = oP12Import; break;
- case oP12Export: cmd = oP12Export; break;
-
- case oPassphrase: passphrase = pargs.r.ret_str; break;
- case oStore: opt_store = 1; break;
- case oForce: opt_force = 1; break;
-
- default : pargs.err = 2; break;
- }
- }
- if (log_get_errorcount(0))
- exit(2);
-
- if (argc != 1)
- usage (1);
-
- if (cmd == oProtect)
- read_and_protect (*argv);
- else if (cmd == oUnprotect)
- read_and_unprotect (*argv);
- else if (cmd == oShadow)
- read_and_shadow (*argv);
- else if (cmd == oShowShadowInfo)
- show_shadow_info (*argv);
- else if (cmd == oShowKeygrip)
- show_keygrip (*argv);
- else if (cmd == oP12Import)
- import_p12_file (*argv);
- else if (cmd == oP12Export)
- export_p12_file (*argv);
- else
- show_file (*argv);
-
- agent_exit (0);
- return 8; /*NOTREACHED*/
-}
-
-void
-agent_exit (int rc)
-{
- rc = rc? rc : log_get_errorcount(0)? 2 : 0;
- exit (rc);
-}
-
-
-/* Return the passphrase string and ask the agent if it has not been
- set from the command line. */
-static const char *
-get_passphrase (void)
-{
- char *pw;
- int err;
-
- if (passphrase)
- return passphrase;
-
- pw = simple_pwquery (NULL,NULL,
- _("Enter passphrase:"),
- _("Please enter the passphrase or the PIN\n"
- "needed to complete this operation."),
- &err);
- if (!pw)
- {
- if (err)
- log_error ("error while asking for the passphrase\n");
- else
- log_info ("cancelled\n");
- agent_exit (0);
- }
- passphrase = pw;
- return passphrase;
-}
-
-
-static int
-store_private_key (const unsigned char *grip,
- const void *buffer, size_t length, int force)
-{
- int i;
- const char *homedir;
- char *fname;
- FILE *fp;
- char hexgrip[40+4+1];
-
- for (i=0; i < 20; i++)
- sprintf (hexgrip+2*i, "%02X", grip[i]);
- strcpy (hexgrip+40, ".key");
-
- homedir = getenv("GNUPGHOME");
- if (!homedir || !*homedir)
- homedir = GNUPG_DEFAULT_HOMEDIR;
-
- fname = make_filename (homedir, GNUPG_PRIVATE_KEYS_DIR, hexgrip, NULL);
- if (force)
- fp = fopen (fname, "wb");
- else
- {
- if (!access (fname, F_OK))
- {
- log_error ("secret key file `%s' already exists\n", fname);
- xfree (fname);
- return -1;
- }
- fp = fopen (fname, "wbx"); /* FIXME: the x is a GNU extension - let
- configure check whether this actually
- works */
- }
-
- if (!fp)
- {
- log_error ("can't create `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- return -1;
- }
-
- if (fwrite (buffer, length, 1, fp) != 1)
- {
- log_error ("error writing `%s': %s\n", fname, strerror (errno));
- fclose (fp);
- remove (fname);
- xfree (fname);
- return -1;
- }
- if ( fclose (fp) )
- {
- log_error ("error closing `%s': %s\n", fname, strerror (errno));
- remove (fname);
- xfree (fname);
- return -1;
- }
- log_info ("secret key stored as `%s'\n", fname);
-
- xfree (fname);
- return 0;
-}
diff --git a/agent/protect.c b/agent/protect.c
deleted file mode 100644
index 08f322bac..000000000
--- a/agent/protect.c
+++ /dev/null
@@ -1,967 +0,0 @@
-/* protect.c - Un/Protect a secret key
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "agent.h"
-
-#include "sexp-parse.h"
-
-#define PROT_CIPHER GCRY_CIPHER_AES
-#define PROT_CIPHER_STRING "aes"
-#define PROT_CIPHER_KEYLEN (128/8)
-
-
-/* A table containing the information needed to create a protected
- private key */
-static struct {
- const char *algo;
- const char *parmlist;
- int prot_from, prot_to;
-} protect_info[] = {
- { "rsa", "nedpqu", 2, 5 },
- { NULL }
-};
-
-
-static int
-hash_passphrase (const char *passphrase, int hashalgo,
- int s2kmode,
- const unsigned char *s2ksalt, unsigned long s2kcount,
- unsigned char *key, size_t keylen);
-
-
-
-/* Calculate the MIC for a private key S-Exp. SHA1HASH should pint to
- a 20 byte buffer. This function is suitable for any algorithms. */
-static int
-calculate_mic (const unsigned char *plainkey, unsigned char *sha1hash)
-{
- const unsigned char *hash_begin, *hash_end;
- const unsigned char *s;
- size_t n;
-
- s = plainkey;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "private-key"))
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- hash_begin = s;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n; /* skip over the algorithm name */
-
- while (*s == '(')
- {
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n;
- if ( *s != ')' )
- return GNUPG_Invalid_Sexp;
- s++;
- }
- if (*s != ')')
- return GNUPG_Invalid_Sexp;
- s++;
- hash_end = s;
-
- gcry_md_hash_buffer (GCRY_MD_SHA1, sha1hash,
- hash_begin, hash_end - hash_begin);
-
- return 0;
-}
-
-
-
-/* Encrypt the parameter block starting at PROTBEGIN with length
- PROTLEN using the utf8 encoded key PASSPHRASE and return the entire
- encrypted block in RESULT or ereturn with an error code. SHA1HASH
- is the 20 byte SHA-1 hash required for the integrity code.
-
- The parameter block is expected to be an incomplete S-Expression of
- the form (example in advanced format):
-
- (d #046129F..[some bytes not shown]..81#)
- (p #00e861b..[some bytes not shown]..f1#)
- (q #00f7a7c..[some bytes not shown]..61#)
- (u #304559a..[some bytes not shown]..9b#)
-
- the returned block is the S-Expression:
-
- (protected mode (parms) encrypted_octet_string)
-
-*/
-static int
-do_encryption (const char *protbegin, size_t protlen,
- const char *passphrase, const unsigned char *sha1hash,
- unsigned char **result, size_t *resultlen)
-{
- GCRY_CIPHER_HD hd;
- const char *modestr = "openpgp-s2k3-sha1-" PROT_CIPHER_STRING "-cbc";
- int blklen, enclen, outlen;
- char *iv = NULL;
- int rc = 0;
- char *outbuf = NULL;
- char *p;
- int saltpos, ivpos, encpos;
-
- hd = gcry_cipher_open (PROT_CIPHER, GCRY_CIPHER_MODE_CBC,
- GCRY_CIPHER_SECURE);
- if (!hd)
- return map_gcry_err (gcry_errno());
-
-
- /* We need to work on a copy of the data because this makes it
- easier to add the trailer and the padding and more important we
- have to prefix the text with 2 parenthesis, so we have to
- allocate enough space for:
-
- ((<parameter_list>)(4:hash4:sha120:<hashvalue>)) + padding
-
- We always append a full block of random bytes as padding but
- encrypt only what is needed for a full blocksize */
- blklen = gcry_cipher_get_algo_blklen (PROT_CIPHER);
- outlen = 2 + protlen + 2 + 6 + 6 + 23 + 2 + blklen;
- enclen = outlen/blklen * blklen;
- outbuf = gcry_malloc_secure (outlen);
- if (!outbuf)
- rc = GNUPG_Out_Of_Core;
- if (!rc)
- {
- /* allocate random bytes to be used as IV, padding and s2k salt*/
- iv = gcry_random_bytes (blklen*2+8, GCRY_WEAK_RANDOM);
- if (!iv)
- rc = GNUPG_Out_Of_Core;
- else
- rc = gcry_cipher_setiv (hd, iv, blklen);
- }
- if (!rc)
- {
- unsigned char *key;
- size_t keylen = PROT_CIPHER_KEYLEN;
-
- key = gcry_malloc_secure (keylen);
- if (!key)
- rc = GNUPG_Out_Of_Core;
- else
- {
- rc = hash_passphrase (passphrase, GCRY_MD_SHA1,
- 3, iv+2*blklen, 96, key, keylen);
- if (!rc)
- rc = gcry_cipher_setkey (hd, key, keylen);
- xfree (key);
- }
- }
- if (!rc)
- {
- p = outbuf;
- *p++ = '(';
- *p++ = '(';
- memcpy (p, protbegin, protlen);
- p += protlen;
- memcpy (p, ")(4:hash4:sha120:", 17);
- p += 17;
- memcpy (p, sha1hash, 20);
- p += 20;
- *p++ = ')';
- *p++ = ')';
- memcpy (p, iv+blklen, blklen);
- p += blklen;
- assert ( p - outbuf == outlen);
- rc = gcry_cipher_encrypt (hd, outbuf, enclen, NULL, 0);
- }
- gcry_cipher_close (hd);
- if (rc)
- {
- xfree (iv);
- xfree (outbuf);
- return rc;
- }
-
- /* Now allocate the buffer we want to return. This is
-
- (protected openpgp-s2k3-sha1-aes-cbc
- ((sha1 salt no_of_iterations) 16byte_iv)
- encrypted_octet_string)
-
- in canoncical format of course. We use asprintf and %n modifier
- and spaces as palceholders. */
- asprintf (&p,
- "(9:protected%d:%s((4:sha18:%n_8bytes_2:96)%d:%n%*s)%d:%n%*s)",
- (int)strlen (modestr), modestr,
- &saltpos,
- blklen, &ivpos, blklen, "",
- enclen, &encpos, enclen, "");
- if (p)
- { /* asprintf does not use out malloc system */
- char *psave = p;
- p = xtrymalloc (strlen (psave)+1);
- if (p)
- strcpy (p, psave);
- free (psave);
- }
- if (!p)
- {
- xfree (iv);
- xfree (outbuf);
- return GNUPG_Out_Of_Core;
- }
- *resultlen = strlen (p);
- *result = p;
- memcpy (p+saltpos, iv+2*blklen, 8);
- memcpy (p+ivpos, iv, blklen);
- memcpy (p+encpos, outbuf, enclen);
- xfree (iv);
- xfree (outbuf);
- return 0;
-}
-
-
-
-/* Protect the key encoded in canonical format in plainkey. We assume
- a valid S-Exp here. */
-int
-agent_protect (const unsigned char *plainkey, const char *passphrase,
- unsigned char **result, size_t *resultlen)
-{
- int rc;
- const unsigned char *s;
- const unsigned char *hash_begin, *hash_end;
- const unsigned char *prot_begin, *prot_end, *real_end;
- size_t n;
- int c, infidx, i;
- unsigned char hashvalue[20];
- unsigned char *protected;
- size_t protectedlen;
- int depth = 0;
- unsigned char *p;
-
- s = plainkey;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "private-key"))
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- depth++;
- hash_begin = s;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
-
- for (infidx=0; protect_info[infidx].algo
- && !smatch (&s, n, protect_info[infidx].algo); infidx++)
- ;
- if (!protect_info[infidx].algo)
- return GNUPG_Unsupported_Algorithm;
-
- prot_begin = prot_end = NULL;
- for (i=0; (c=protect_info[infidx].parmlist[i]); i++)
- {
- if (i == protect_info[infidx].prot_from)
- prot_begin = s;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (n != 1 || c != *s)
- return GNUPG_Invalid_Sexp;
- s += n;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s +=n; /* skip value */
- if (*s != ')')
- return GNUPG_Invalid_Sexp;
- depth--;
- if (i == protect_info[infidx].prot_to)
- prot_end = s;
- s++;
- }
- if (*s != ')' || !prot_begin || !prot_end )
- return GNUPG_Invalid_Sexp;
- depth--;
- hash_end = s;
- s++;
- /* skip to the end of the S-exp */
- assert (depth == 1);
- rc = sskip (&s, &depth);
- if (rc)
- return rc;
- assert (!depth);
- real_end = s-1;
-
- gcry_md_hash_buffer (GCRY_MD_SHA1, hashvalue,
- hash_begin, hash_end - hash_begin + 1);
-
- rc = do_encryption (prot_begin, prot_end - prot_begin + 1,
- passphrase, hashvalue,
- &protected, &protectedlen);
- if (rc)
- return rc;
-
- /* Now create the protected version of the key. Note that the 10
- extra bytes are for for the inserted "protected-" string (the
- beginning of the plaintext reads: "((11:private-key(" ). */
- *resultlen = (10
- + (prot_begin-plainkey)
- + protectedlen
- + (real_end-prot_end));
- *result = p = xtrymalloc (*resultlen);
- if (!p)
- {
- xfree (protected);
- return GNUPG_Out_Of_Core;
- }
- memcpy (p, "(21:protected-", 14);
- p += 14;
- memcpy (p, plainkey+4, prot_begin - plainkey - 4);
- p += prot_begin - plainkey - 4;
- memcpy (p, protected, protectedlen);
- p += protectedlen;
- memcpy (p, prot_end+1, real_end - prot_end);
- p += real_end - prot_end;
- assert ( p - *result == *resultlen);
- xfree (protected);
- return 0;
-}
-
-
-/* Do the actual decryption and check the return list for consistency. */
-static int
-do_decryption (const unsigned char *protected, size_t protectedlen,
- const char *passphrase,
- const unsigned char *s2ksalt, unsigned long s2kcount,
- const unsigned char *iv, size_t ivlen,
- unsigned char **result)
-{
- int rc = 0;
- int blklen;
- GCRY_CIPHER_HD hd;
- unsigned char *outbuf;
- size_t reallen;
-
- blklen = gcry_cipher_get_algo_blklen (PROT_CIPHER);
- if (protectedlen < 4 || (protectedlen%blklen))
- return GNUPG_Corrupted_Protection;
-
- hd = gcry_cipher_open (PROT_CIPHER, GCRY_CIPHER_MODE_CBC,
- GCRY_CIPHER_SECURE);
- if (!hd)
- return map_gcry_err (gcry_errno());
-
- outbuf = gcry_malloc_secure (protectedlen);
- if (!outbuf)
- rc = GNUPG_Out_Of_Core;
- if (!rc)
- rc = gcry_cipher_setiv (hd, iv, ivlen);
- if (!rc)
- {
- unsigned char *key;
- size_t keylen = PROT_CIPHER_KEYLEN;
-
- key = gcry_malloc_secure (keylen);
- if (!key)
- rc = GNUPG_Out_Of_Core;
- else
- {
- rc = hash_passphrase (passphrase, GCRY_MD_SHA1,
- 3, s2ksalt, s2kcount, key, keylen);
- if (!rc)
- rc = gcry_cipher_setkey (hd, key, keylen);
- xfree (key);
- }
- }
- if (!rc)
- rc = gcry_cipher_decrypt (hd, outbuf, protectedlen,
- protected, protectedlen);
- gcry_cipher_close (hd);
- if (rc)
- {
- xfree (outbuf);
- return rc;
- }
- /* do a quick check first */
- if (*outbuf != '(' && outbuf[1] != '(')
- {
- xfree (outbuf);
- return GNUPG_Bad_Passphrase;
- }
- /* check that we have a consistent S-Exp */
- reallen = gcry_sexp_canon_len (outbuf, protectedlen, NULL, NULL);
- if (!reallen || (reallen + blklen < protectedlen) )
- {
- xfree (outbuf);
- return GNUPG_Bad_Passphrase;
- }
- *result = outbuf;
- return 0;
-}
-
-
-/* Merge the parameter list contained in CLEARTEXT with the original
- protect lists PROTECTEDKEY by replacing the list at REPLACEPOS.
- Return the new list in RESULT and the MIC value in the 20 byte
- buffer SHA1HASH. */
-static int
-merge_lists (const unsigned char *protectedkey,
- size_t replacepos,
- const unsigned char *cleartext,
- unsigned char *sha1hash, unsigned char **result)
-{
- size_t n, newlistlen;
- unsigned char *newlist, *p;
- const unsigned char *s;
- const unsigned char *startpos, *endpos;
- int i, rc;
-
- if (replacepos < 26)
- return GNUPG_Bug;
-
- /* Estimate the required size of the resulting list. We have a large
- safety margin of >20 bytes (MIC hash from CLEARTEXT and the
- removed "protected-" */
- newlistlen = gcry_sexp_canon_len (protectedkey, 0, NULL, NULL);
- if (!newlistlen)
- return GNUPG_Bug;
- n = gcry_sexp_canon_len (cleartext, 0, NULL, NULL);
- if (!n)
- return GNUPG_Bug;
- newlistlen += n;
- newlist = gcry_malloc_secure (newlistlen);
- if (!newlist)
- return GNUPG_Out_Of_Core;
-
- /* Copy the initial segment */
- strcpy (newlist, "(11:private-key");
- p = newlist + 15;
- memcpy (p, protectedkey+15+10, replacepos-15-10);
- p += replacepos-15-10;
-
- /* copy the cleartext */
- s = cleartext;
- if (*s != '(' && s[1] != '(')
- return GNUPG_Bug; /*we already checked this */
- s += 2;
- startpos = s;
- while ( *s == '(' )
- {
- s++;
- n = snext (&s);
- if (!n)
- goto invalid_sexp;
- s += n;
- n = snext (&s);
- if (!n)
- goto invalid_sexp;
- s += n;
- if ( *s != ')' )
- goto invalid_sexp;
- s++;
- }
- if ( *s != ')' )
- goto invalid_sexp;
- endpos = s;
- s++;
- /* short intermezzo: Get the MIC */
- if (*s != '(')
- goto invalid_sexp;
- s++;
- n = snext (&s);
- if (!smatch (&s, n, "hash"))
- goto invalid_sexp;
- n = snext (&s);
- if (!smatch (&s, n, "sha1"))
- goto invalid_sexp;
- n = snext (&s);
- if (n != 20)
- goto invalid_sexp;
- memcpy (sha1hash, s, 20);
- s += n;
- if (*s != ')')
- goto invalid_sexp;
- /* end intermezzo */
-
- /* append the parameter list */
- memcpy (p, startpos, endpos - startpos);
- p += endpos - startpos;
-
- /* skip overt the protected list element in the original list */
- s = protectedkey + replacepos;
- assert (*s == '(');
- s++;
- i = 1;
- rc = sskip (&s, &i);
- if (rc)
- goto failure;
- startpos = s;
- i = 2; /* we are inside this level */
- rc = sskip (&s, &i);
- if (rc)
- goto failure;
- assert (s[-1] == ')');
- endpos = s; /* one behind the end of the list */
-
- /* append the rest */
- memcpy (p, startpos, endpos - startpos);
- p += endpos - startpos;
-
- /* ready */
- *result = newlist;
- return 0;
-
- failure:
- xfree (newlist);
- return rc;
-
- invalid_sexp:
- xfree (newlist);
- return GNUPG_Invalid_Sexp;
-}
-
-
-
-/* Unprotect the key encoded in canonical format. We assume a valid
- S-Exp here. */
-int
-agent_unprotect (const unsigned char *protectedkey, const char *passphrase,
- unsigned char **result, size_t *resultlen)
-{
- int rc;
- const unsigned char *s;
- size_t n;
- int infidx, i;
- unsigned char sha1hash[20], sha1hash2[20];
- const unsigned char *s2ksalt;
- unsigned long s2kcount;
- const unsigned char *iv;
- const unsigned char *prot_begin;
- unsigned char *cleartext;
- unsigned char *final;
-
- s = protectedkey;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "protected-private-key"))
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
-
- for (infidx=0; protect_info[infidx].algo
- && !smatch (&s, n, protect_info[infidx].algo); infidx++)
- ;
- if (!protect_info[infidx].algo)
- return GNUPG_Unsupported_Algorithm;
-
- /* now find the list with the protected information. Here is an
- example for such a list:
- (protected openpgp-s2k3-sha1-aes-cbc
- ((sha1 <salt> <count>) <Initialization_Vector>)
- <encrypted_data>)
- */
- for (;;)
- {
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- prot_begin = s;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (smatch (&s, n, "protected"))
- break;
- s += n;
- i = 1;
- rc = sskip (&s, &i);
- if (rc)
- return rc;
- }
- /* found */
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "openpgp-s2k3-sha1-" PROT_CIPHER_STRING "-cbc"))
- return GNUPG_Unsupported_Protection;
- if (*s != '(' || s[1] != '(')
- return GNUPG_Invalid_Sexp;
- s += 2;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "sha1"))
- return GNUPG_Unsupported_Protection;
- n = snext (&s);
- if (n != 8)
- return GNUPG_Corrupted_Protection;
- s2ksalt = s;
- s += n;
- n = snext (&s);
- if (!n)
- return GNUPG_Corrupted_Protection;
- /* We expect a list close as next, so we can simply use strtoul()
- here. We might want to check that we only have digits - but this
- is nothing we should worry about */
- if (s[n] != ')' )
- return GNUPG_Invalid_Sexp;
- s2kcount = strtoul (s, NULL, 10);
- if (!s2kcount)
- return GNUPG_Corrupted_Protection;
- s += n;
- s++; /* skip list end */
-
- n = snext (&s);
- if (n != 16) /* Wrong blocksize for IV (we support ony aes-128) */
- return GNUPG_Corrupted_Protection;
- iv = s;
- s += n;
- if (*s != ')' )
- return GNUPG_Invalid_Sexp;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
-
- rc = do_decryption (s, n,
- passphrase, s2ksalt, s2kcount,
- iv, 16,
- &cleartext);
- if (rc)
- return rc;
-
- rc = merge_lists (protectedkey, prot_begin-protectedkey, cleartext,
- sha1hash, &final);
- xfree (cleartext);
- if (rc)
- return rc;
-
- rc = calculate_mic (final, sha1hash2);
- if (!rc && memcmp (sha1hash, sha1hash2, 20))
- rc = GNUPG_Corrupted_Protection;
- if (rc)
- {
- xfree (final);
- return rc;
- }
-
- *result = final;
- *resultlen = gcry_sexp_canon_len (final, 0, NULL, NULL);
- return 0;
-}
-
-/* Check the type of the private key, this is one of the constants:
- PRIVATE_KEY_UNKNOWN if we can't figure out the type (this is the
- value 0), PRIVATE_KEY_CLEAR for an unprotected private key.
- PRIVATE_KEY_PROTECTED for an protected private key or
- PRIVATE_KEY_SHADOWED for a sub key where the secret parts are stored
- elsewhere. */
-int
-agent_private_key_type (const unsigned char *privatekey)
-{
- const unsigned char *s;
- size_t n;
-
- s = privatekey;
- if (*s != '(')
- return PRIVATE_KEY_UNKNOWN;
- s++;
- n = snext (&s);
- if (!n)
- return PRIVATE_KEY_UNKNOWN;
- if (smatch (&s, n, "protected-private-key"))
- return PRIVATE_KEY_PROTECTED;
- if (smatch (&s, n, "shadowed-private-key"))
- return PRIVATE_KEY_SHADOWED;
- if (smatch (&s, n, "private-key"))
- return PRIVATE_KEY_CLEAR;
- return PRIVATE_KEY_UNKNOWN;
-}
-
-
-
-/* Transform a passphrase into a suitable key of length KEYLEN and
- store this key in the caller provided buffer KEY. The caller must
- provide an HASHALGO, a valid S2KMODE (see rfc-2440) and depending on
- that mode an S2KSALT of 8 random bytes and an S2KCOUNT (a suitable
- value is 96).
-
- Returns an error code on failure. */
-static int
-hash_passphrase (const char *passphrase, int hashalgo,
- int s2kmode,
- const unsigned char *s2ksalt,
- unsigned long s2kcount,
- unsigned char *key, size_t keylen)
-{
- GCRY_MD_HD md;
- int pass, i;
- int used = 0;
- int pwlen = strlen (passphrase);
-
- if ( (s2kmode != 0 && s2kmode != 1 && s2kmode != 3)
- || !hashalgo || !keylen || !key || !passphrase)
- return GNUPG_Invalid_Value;
- if ((s2kmode == 1 ||s2kmode == 3) && !s2ksalt)
- return GNUPG_Invalid_Value;
-
- md = gcry_md_open (hashalgo, GCRY_MD_FLAG_SECURE);
- if (!md)
- return map_gcry_err (gcry_errno());
-
- for (pass=0; used < keylen; pass++)
- {
- if (pass)
- {
- gcry_md_reset (md);
- for (i=0; i < pass; i++) /* preset the hash context */
- gcry_md_putc (md, 0);
- }
-
- if (s2kmode == 1 || s2kmode == 3)
- {
- int len2 = pwlen + 8;
- unsigned long count = len2;
-
- if (s2kmode == 3)
- {
- count = (16ul + (s2kcount & 15)) << ((s2kcount >> 4) + 6);
- if (count < len2)
- count = len2;
- }
-
- while (count > len2)
- {
- gcry_md_write (md, s2ksalt, 8);
- gcry_md_write (md, passphrase, pwlen);
- count -= len2;
- }
- if (count < 8)
- gcry_md_write (md, s2ksalt, count);
- else
- {
- gcry_md_write (md, s2ksalt, 8);
- count -= 8;
- gcry_md_write (md, passphrase, count);
- }
- }
- else
- gcry_md_write (md, passphrase, pwlen);
-
- gcry_md_final (md);
- i = gcry_md_get_algo_dlen (hashalgo);
- if (i > keylen - used)
- i = keylen - used;
- memcpy (key+used, gcry_md_read (md, hashalgo), i);
- used += i;
- }
- gcry_md_close(md);
- return 0;
-}
-
-
-
-/* Create a shadow key from a public key. We use the shadow protocol
- "ti-v1" and insert the S-expressionn SHADOW_INFO. The resulting
- S-expression is returned in an allocated buffer RESULT will point
- to. The input parameters are expected to be valid canonilized
- S-expressions */
-int
-agent_shadow_key (const unsigned char *pubkey,
- const unsigned char *shadow_info,
- unsigned char **result)
-{
- const unsigned char *s;
- const unsigned char *point;
- size_t n;
- int depth = 0;
- unsigned char *p;
- size_t pubkey_len = gcry_sexp_canon_len (pubkey, 0, NULL,NULL);
- size_t shadow_info_len = gcry_sexp_canon_len (shadow_info, 0, NULL,NULL);
-
- if (!pubkey_len || !shadow_info_len)
- return GNUPG_Invalid_Value;
- s = pubkey;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "public-key"))
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n; /* skip over the algorithm name */
-
- while (*s != ')')
- {
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s +=n; /* skip value */
- if (*s != ')')
- return GNUPG_Invalid_Sexp;
- depth--;
- s++;
- }
- point = s; /* insert right before the point */
- depth--;
- s++;
- assert (depth == 1);
-
- /* calculate required length by taking in account: the "shadowed-"
- prefix, the "shadowed", "t1-v1" as well as some parenthesis */
- n = 12 + pubkey_len + 1 + 3+8 + 2+5 + shadow_info_len + 1;
- *result = p = xtrymalloc (n);
- if (!p)
- return GNUPG_Out_Of_Core;
- p = stpcpy (p, "(20:shadowed-private-key");
- /* (10:public-key ...)*/
- memcpy (p, pubkey+14, point - (pubkey+14));
- p += point - (pubkey+14);
- p = stpcpy (p, "(8:shadowed5:t1-v1");
- memcpy (p, shadow_info, shadow_info_len);
- p += shadow_info_len;
- *p++ = ')';
- memcpy (p, point, pubkey_len - (point - pubkey));
- p += pubkey_len - (point - pubkey);
-
- return 0;
-}
-
-/* Parse a canonical encoded shadowed key and return a pointer to the
- inner list with the shadow_info */
-int
-agent_get_shadow_info (const unsigned char *shadowkey,
- unsigned char const **shadow_info)
-{
- const unsigned char *s;
- size_t n;
- int depth = 0;
-
- s = shadowkey;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (!smatch (&s, n, "shadowed-private-key"))
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Unknown_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n; /* skip over the algorithm name */
-
- for (;;)
- {
- if (*s == ')')
- return GNUPG_Unknown_Sexp;
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- depth++;
- s++;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (smatch (&s, n, "shadowed"))
- break;
- s += n;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s +=n; /* skip value */
- if (*s != ')')
- return GNUPG_Invalid_Sexp;
- depth--;
- s++;
- }
- /* found the shadowed list, s points to the protocol */
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- if (smatch (&s, n, "t1-v1"))
- {
- if (*s != '(')
- return GNUPG_Invalid_Sexp;
- *shadow_info = s;
- }
- else
- return GNUPG_Unsupported_Protocol;
- return 0;
-}
-
diff --git a/agent/query.c b/agent/query.c
deleted file mode 100644
index ee18a1483..000000000
--- a/agent/query.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/* query.c - fork of the pinentry to query stuff from the user
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#ifdef USE_GNU_PTH
-# include <pth.h>
-#endif
-
-#include "agent.h"
-#include "i18n.h"
-#include "../assuan/assuan.h"
-
-#ifdef _POSIX_OPEN_MAX
-#define MAX_OPEN_FDS _POSIX_OPEN_MAX
-#else
-#define MAX_OPEN_FDS 20
-#endif
-
-static ASSUAN_CONTEXT entry_ctx = NULL;
-#ifdef USE_GNU_PTH
-static pth_mutex_t entry_lock = PTH_MUTEX_INIT;
-#endif
-
-/* data to be passed to our callbacks */
-struct entry_parm_s {
- int lines;
- size_t size;
- char *buffer;
-};
-
-
-
-
-static int
-unlock_pinentry (int rc)
-{
-#ifdef USE_GNU_PTH
- if (!pth_mutex_release (&entry_lock))
- {
- log_error ("failed to release the entry lock\n");
- if (!rc)
- rc = GNUPG_Internal_Error;
- }
-#endif
- return rc;
-}
-
-/* Fork off the pin entry if this has not already been done. Note,
- that this function must always be used to aquire the lock for the
- pinentry - we will serialize _all_ pinentry calls.
- */
-static int
-start_pinentry (void)
-{
- int rc;
- const char *pgmname;
- ASSUAN_CONTEXT ctx;
- const char *argv[5];
- int no_close_list[3];
- int i;
-
-#ifdef USE_GNU_PTH
- if (!pth_mutex_acquire (&entry_lock, 0, NULL))
- {
- log_error ("failed to acquire the entry lock\n");
- return GNUPG_Internal_Error;
- }
-#endif
-
- if (entry_ctx)
- return 0;
-
- if (opt.verbose)
- log_info ("no running PIN Entry - starting it\n");
-
- if (fflush (NULL))
- {
- log_error ("error flushing pending output: %s\n", strerror (errno));
- return unlock_pinentry (seterr (Write_Error));
- }
-
- if (!opt.pinentry_program || !*opt.pinentry_program)
- opt.pinentry_program = GNUPG_DEFAULT_PINENTRY;
- if ( !(pgmname = strrchr (opt.pinentry_program, '/')))
- pgmname = opt.pinentry_program;
- else
- pgmname++;
-
- /* FIXME: We must do this thread specific */
- argv[0] = pgmname;
- if (opt.display && !opt.keep_display)
- {
- argv[1] = "--display";
- argv[2] = opt.display;
- argv[3] = NULL;
- }
- else
- argv[1] = NULL;
-
- i=0;
- if (!opt.running_detached)
- {
- if (log_get_fd () != -1)
- no_close_list[i++] = log_get_fd ();
- no_close_list[i++] = fileno (stderr);
- }
- no_close_list[i] = -1;
-
- /* connect to the pinentry and perform initial handshaking */
- rc = assuan_pipe_connect (&ctx, opt.pinentry_program, (char**)argv,
- no_close_list);
- if (rc)
- {
- log_error ("can't connect to the PIN entry module: %s\n",
- assuan_strerror (rc));
- return unlock_pinentry (seterr (No_PIN_Entry));
- }
- entry_ctx = ctx;
-
- if (DBG_ASSUAN)
- log_debug ("connection to PIN entry established\n");
-
- rc = assuan_transact (entry_ctx,
- opt.no_grab? "OPTION no-grab":"OPTION grab",
- NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- if (opt.ttyname && !opt.keep_tty)
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION ttyname=%s", opt.ttyname) < 0 )
- return unlock_pinentry (GNUPG_Out_Of_Core);
- rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free (optstr);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
- if (opt.ttytype && !opt.keep_tty)
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION ttytype=%s", opt.ttytype) < 0 )
- return unlock_pinentry (GNUPG_Out_Of_Core);
- rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
- if (opt.lc_ctype)
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION lc-ctype=%s", opt.lc_ctype) < 0 )
- return unlock_pinentry (GNUPG_Out_Of_Core);
- rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
- if (opt.lc_messages)
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION lc-messages=%s", opt.lc_messages) < 0 )
- return unlock_pinentry (GNUPG_Out_Of_Core);
- rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
- return 0;
-}
-
-
-static AssuanError
-getpin_cb (void *opaque, const void *buffer, size_t length)
-{
- struct entry_parm_s *parm = opaque;
-
- if (!buffer)
- return 0;
-
- /* we expect the pin to fit on one line */
- if (parm->lines || length >= parm->size)
- return ASSUAN_Too_Much_Data;
-
- /* fixme: we should make sure that the assuan buffer is allocated in
- secure memory or read the response byte by byte */
- memcpy (parm->buffer, buffer, length);
- parm->buffer[length] = 0;
- parm->lines++;
- return 0;
-}
-
-
-static int
-all_digitsp( const char *s)
-{
- for (; *s && *s >= '0' && *s <= '9'; s++)
- ;
- return !*s;
-}
-
-
-
-/* Call the Entry and ask for the PIN. We do check for a valid PIN
- number here and repeat it as long as we have invalid formed
- numbers. */
-int
-agent_askpin (const char *desc_text, struct pin_entry_info_s *pininfo)
-{
- int rc;
- char line[ASSUAN_LINELENGTH];
- struct entry_parm_s parm;
- const char *errtext = NULL;
- int is_pin = 0;
-
- if (opt.batch)
- return 0; /* fixme: we should return BAD PIN */
-
- if (!pininfo || pininfo->max_length < 1)
- return seterr (Invalid_Value);
- if (!desc_text && pininfo->min_digits)
- desc_text = _("Please enter your PIN, so that the secret key "
- "can be unlocked for this session");
- else if (!desc_text)
- desc_text = _("Please enter your passphrase, so that the secret key "
- "can be unlocked for this session");
-
- is_pin = desc_text && strstr (desc_text, "PIN");
-
- rc = start_pinentry ();
- if (rc)
- return rc;
-
- snprintf (line, DIM(line)-1, "SETDESC %s", desc_text);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
-
- rc = assuan_transact (entry_ctx,
- is_pin? "SETPROMPT PIN:"
- : "SETPROMPT Passphrase:",
- NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
-
- for (;pininfo->failed_tries < pininfo->max_tries; pininfo->failed_tries++)
- {
- memset (&parm, 0, sizeof parm);
- parm.size = pininfo->max_length;
- parm.buffer = pininfo->pin;
-
- if (errtext)
- {
- /* fixme: should we show the try count? It must be translated */
- snprintf (line, DIM(line)-1, "SETERROR %s (try %d of %d)",
- errtext, pininfo->failed_tries+1, pininfo->max_tries);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- errtext = NULL;
- }
-
- rc = assuan_transact (entry_ctx, "GETPIN", getpin_cb, &parm,
- NULL, NULL, NULL, NULL);
- if (rc == ASSUAN_Too_Much_Data)
- errtext = is_pin? _("PIN too long")
- : _("Passphrase too long");
- else if (rc)
- return unlock_pinentry (map_assuan_err (rc));
-
- if (!errtext && pininfo->min_digits)
- {
- /* do some basic checks on the entered PIN. */
- if (!all_digitsp (pininfo->pin))
- errtext = _("Invalid characters in PIN");
- else if (pininfo->max_digits
- && strlen (pininfo->pin) > pininfo->max_digits)
- errtext = _("PIN too long");
- else if (strlen (pininfo->pin) < pininfo->min_digits)
- errtext = _("PIN too short");
- }
-
- if (!errtext && pininfo->check_cb)
- {
- /* More checks by utilizing the optional callback. */
- pininfo->cb_errtext = NULL;
- rc = pininfo->check_cb (pininfo);
- if (rc == -1 && pininfo->cb_errtext)
- errtext = pininfo->cb_errtext;
- else if (rc == GNUPG_Bad_Passphrase || rc == GNUPG_Bad_PIN)
- errtext = (is_pin? _("Bad PIN")
- : _("Bad Passphrase"));
- else if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
-
- if (!errtext)
- return unlock_pinentry (0); /* okay, got a PIN or passphrase */
- }
-
- return unlock_pinentry (pininfo->min_digits? GNUPG_Bad_PIN
- : GNUPG_Bad_Passphrase);
-}
-
-
-
-/* Ask for the passphrase using the supplied arguments. The
- passphrase is returned in RETPASS as an hex encoded string to be
- freed by the caller */
-int
-agent_get_passphrase (char **retpass, const char *desc, const char *prompt,
- const char *errtext)
-{
-
- int rc;
- char line[ASSUAN_LINELENGTH];
- struct entry_parm_s parm;
- unsigned char *p, *hexstring;
- int i;
-
- *retpass = NULL;
- if (opt.batch)
- return GNUPG_Bad_Passphrase;
-
- rc = start_pinentry ();
- if (rc)
- return rc;
-
- if (!prompt)
- prompt = desc && strstr (desc, "PIN")? "PIN": _("Passphrase");
-
-
- if (desc)
- snprintf (line, DIM(line)-1, "SETDESC %s", desc);
- else
- snprintf (line, DIM(line)-1, "RESET");
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
-
- snprintf (line, DIM(line)-1, "SETPROMPT %s", prompt);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
-
- if (errtext)
- {
- snprintf (line, DIM(line)-1, "SETERROR %s", errtext);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
-
- memset (&parm, 0, sizeof parm);
- parm.size = ASSUAN_LINELENGTH/2 - 5;
- parm.buffer = gcry_malloc_secure (parm.size+10);
- if (!parm.buffer)
- return unlock_pinentry (seterr (Out_Of_Core));
-
- assuan_begin_confidential (entry_ctx);
- rc = assuan_transact (entry_ctx, "GETPIN", getpin_cb, &parm, NULL, NULL, NULL, NULL);
- if (rc)
- {
- xfree (parm.buffer);
- return unlock_pinentry (map_assuan_err (rc));
- }
-
- hexstring = gcry_malloc_secure (strlen (parm.buffer)*2+1);
- if (!hexstring)
- {
- xfree (parm.buffer);
- return unlock_pinentry (seterr (Out_Of_Core));
- }
-
- for (i=0, p=parm.buffer; *p; p++, i += 2)
- sprintf (hexstring+i, "%02X", *p);
-
- xfree (parm.buffer);
- *retpass = hexstring;
- return unlock_pinentry (0);
-}
-
-
-
-/* Pop up the PIN-entry, display the text and the prompt and ask the
- user to confirm this. We return 0 for success, ie. the used
- confirmed it, GNUPG_Not_Confirmed for what the text says or an
- other error. */
-int
-agent_get_confirmation (const char *desc, const char *ok, const char *cancel)
-{
- int rc;
- char line[ASSUAN_LINELENGTH];
-
- rc = start_pinentry ();
- if (rc)
- return rc;
-
- if (desc)
- snprintf (line, DIM(line)-1, "SETDESC %s", desc);
- else
- snprintf (line, DIM(line)-1, "RESET");
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
-
- if (ok)
- {
- snprintf (line, DIM(line)-1, "SETOK %s", ok);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
- if (cancel)
- {
- snprintf (line, DIM(line)-1, "SETCANCEL %s", cancel);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return unlock_pinentry (map_assuan_err (rc));
- }
-
- rc = assuan_transact (entry_ctx, "CONFIRM", NULL, NULL, NULL, NULL, NULL, NULL);
- return unlock_pinentry (map_assuan_err (rc));
-}
-
-
-
diff --git a/agent/sexp-parse.h b/agent/sexp-parse.h
deleted file mode 100644
index 6baca08cf..000000000
--- a/agent/sexp-parse.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* sexp-parse.h - S-Exp helper functions
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef SEXP_PARSE_H
-#define SEXP_PARSE_H
-
-#include "../common/util.h"
-
-/* Return the length of the next S-Exp part and update the pointer to
- the first data byte. 0 is return on error */
-static inline size_t
-snext (unsigned char const **buf)
-{
- const unsigned char *s;
- int n;
-
- s = *buf;
- for (n=0; *s && *s != ':' && digitp (s); s++)
- n = n*10 + atoi_1 (s);
- if (!n || *s != ':')
- return 0; /* we don't allow empty lengths */
- *buf = s+1;
- return n;
-}
-
-/* Skip over the S-Expression BUF points to and update BUF to point to
- the chacter right behind. DEPTH gives the initial number of open
- lists and may be passed as a positive number to skip over the
- remainder of an S-Expression if the current position is somewhere
- in an S-Expression. The function may return an error code if it
- encounters an impossible conditions */
-static inline int
-sskip (unsigned char const **buf, int *depth)
-{
- const unsigned char *s = *buf;
- size_t n;
- int d = *depth;
-
- while (d > 0)
- {
- if (*s == '(')
- {
- d++;
- s++;
- }
- else if (*s == ')')
- {
- d--;
- s++;
- }
- else
- {
- if (!d)
- return GNUPG_Invalid_Sexp;
- n = snext (&s);
- if (!n)
- return GNUPG_Invalid_Sexp;
- s += n;
- }
- }
- *buf = s;
- *depth = d;
- return 0;
-}
-
-
-/* Check whether the the string at the address BUF points to matches
- the token. Return true on match and update BUF to point behind the
- token. */
-static inline int
-smatch (unsigned char const **buf, size_t buflen, const char *token)
-{
- size_t toklen = strlen (token);
-
- if (buflen != toklen || memcmp (*buf, token, toklen))
- return 0;
- *buf += toklen;
- return 1;
-}
-
-#endif /*SEXP_PARSE_H*/
diff --git a/agent/simple-pwquery.c b/agent/simple-pwquery.c
deleted file mode 100644
index 5bb08afec..000000000
--- a/agent/simple-pwquery.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/* simple-pwquery.c - A simple password query cleint for gpg-agent
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/* This module is intended as a standalone client implementation to
- gpg-agent's GET_PASSPHRASE command. In particular it does not use
- the Assuan library and can only cope with an already running
- gpg-agent. Some stuff is configurable in the header file. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#define SIMPLE_PWQUERY_IMPLEMENTATION 1
-#include "simple-pwquery.h"
-
-#if defined(SPWQ_USE_LOGGING) && !defined(HAVE_JNLIB_LOGGING)
-# undef SPWQ_USE_LOGGING
-#endif
-
-#ifndef _
-#define _(a) (a)
-#endif
-
-#if !defined (hexdigitp) && !defined (xtoi_2)
-#define digitp(p) (*(p) >= '0' && *(p) <= '9')
-#define hexdigitp(a) (digitp (a) \
- || (*(a) >= 'A' && *(a) <= 'F') \
- || (*(a) >= 'a' && *(a) <= 'f'))
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-#endif
-
-
-/* Write NBYTES of BUF to file descriptor FD. */
-static int
-writen (int fd, const void *buf, size_t nbytes)
-{
- size_t nleft = nbytes;
- int nwritten;
-
- while (nleft > 0)
- {
- nwritten = write( fd, buf, nleft );
- if (nwritten < 0)
- {
- if (errno == EINTR)
- nwritten = 0;
- else {
-#ifdef SPWQ_USE_LOGGING
- log_error ("write failed: %s\n", strerror (errno));
-#endif
- return SPWQ_IO_ERROR;
- }
- }
- nleft -= nwritten;
- buf = (const char*)buf + nwritten;
- }
-
- return 0;
-}
-
-
-/* Read an entire line and return number of bytes read. */
-static int
-readline (int fd, char *buf, size_t buflen)
-{
- size_t nleft = buflen;
- char *p;
- int nread = 0;
-
- while (nleft > 0)
- {
- int n = read (fd, buf, nleft);
- if (n < 0)
- {
- if (errno == EINTR)
- continue;
- return -(SPWQ_IO_ERROR);
- }
- else if (!n)
- {
- return -(SPWQ_PROTOCOL_ERROR); /* incomplete line */
- }
- p = buf;
- nleft -= n;
- buf += n;
- nread += n;
-
- for (; n && *p != '\n'; n--, p++)
- ;
- if (n)
- {
- break; /* at least one full line available - that's enough.
- This function is just a simple implementation, so
- it is okay to forget about pending bytes */
- }
- }
-
- return nread;
-}
-
-
-/* Send an option to the agent */
-static int
-agent_send_option (int fd, const char *name, const char *value)
-{
- char buf[200];
- int nread;
- char *line;
- int i;
-
- line = spwq_malloc (7 + strlen (name) + 1 + strlen (value) + 2);
- if (!line)
- return SPWQ_OUT_OF_CORE;
- strcpy (stpcpy (stpcpy (stpcpy (
- stpcpy (line, "OPTION "), name), "="), value), "\n");
- i = writen (fd, line, strlen (line));
- spwq_free (line);
- if (i)
- return i;
-
- /* get response */
- nread = readline (fd, buf, DIM(buf)-1);
- if (nread < 0)
- return -nread;
- if (nread < 3)
- return SPWQ_PROTOCOL_ERROR;
-
- if (buf[0] == 'O' && buf[1] == 'K' && (buf[2] == ' ' || buf[2] == '\n'))
- return 0; /* okay */
-
- return SPWQ_ERR_RESPONSE;
-}
-
-
-/* Send all available options to the agent. */
-static int
-agent_send_all_options (int fd)
-{
- char *dft_display = NULL;
- char *dft_ttyname = NULL;
- char *dft_ttytype = NULL;
- int rc = 0;
-
- dft_display = getenv ("DISPLAY");
- if (dft_display)
- {
- if ((rc = agent_send_option (fd, "display", dft_display)))
- return rc;
- }
-
- if (ttyname (1))
- dft_ttyname = ttyname (1);
- if (dft_ttyname)
- {
- if ((rc=agent_send_option (fd, "ttyname", dft_ttyname)))
- return rc;
- }
-
- dft_ttytype = getenv ("TERM");
- if (dft_ttyname && dft_ttytype)
- {
- if ((rc = agent_send_option (fd, "ttytype", dft_ttytype)))
- return rc;
- }
-
-#if defined(HAVE_SETLOCALE)
- {
- char *old_lc = NULL;
- char *dft_lc = NULL;
-
-#if defined(LC_CTYPE)
- old_lc = setlocale (LC_CTYPE, NULL);
- if (old_lc)
- {
- char *p = spwq_malloc (strlen (old_lc)+1);
- if (!p)
- return SPWQ_OUT_OF_CORE;
- strcpy (p, old_lc);
- old_lc = p;
- }
- dft_lc = setlocale (LC_CTYPE, "");
- if (dft_ttyname && dft_lc)
- rc = agent_send_option (fd, "lc-ctype", dft_lc);
- if (old_lc)
- {
- setlocale (LC_CTYPE, old_lc);
- spwq_free (old_lc);
- }
- if (rc)
- return rc;
-#endif
-
-#if defined(LC_MESSAGES)
- old_lc = setlocale (LC_MESSAGES, NULL);
- if (old_lc)
- {
- char *p = spwq_malloc (strlen (old_lc)+1);
- if (!p)
- return SPWQ_OUT_OF_CORE;
- strcpy (p, old_lc);
- old_lc = p;
- }
- dft_lc = setlocale (LC_MESSAGES, "");
- if (dft_ttyname && dft_lc)
- rc = agent_send_option (fd, "lc-messages", dft_lc);
- if (old_lc)
- {
- setlocale (LC_MESSAGES, old_lc);
- spwq_free (old_lc);
- }
- if (rc)
- return rc;
-#endif
- }
-#endif /*HAVE_SETLOCALE*/
-
- return 0;
-}
-
-
-
-/* Try to open a connection to the agent, send all options and return
- the file descriptor for the connection. Return -1 in case of
- error. */
-static int
-agent_open (int *rfd)
-{
- int rc;
- int fd;
- char *infostr, *p;
- struct sockaddr_un client_addr;
- size_t len;
- int prot;
- char line[200];
- int nread;
-
- *rfd = -1;
- infostr = getenv ( "GPG_AGENT_INFO" );
- if ( !infostr )
- {
-#ifdef SPWQ_USE_LOGGING
- log_error (_("gpg-agent is not available in this session\n"));
-#endif
- return SPWQ_NO_AGENT;
- }
-
- if ( !(p = strchr ( infostr, ':')) || p == infostr
- || (p-infostr)+1 >= sizeof client_addr.sun_path )
- {
-#ifdef SPWQ_USE_LOGGING
- log_error ( _("malformed GPG_AGENT_INFO environment variable\n"));
-#endif
- return SPWQ_NO_AGENT;
- }
- *p++ = 0;
-
- while (*p && *p != ':')
- p++;
- prot = *p? atoi (p+1) : 0;
- if ( prot != 1)
- {
-#ifdef SPWQ_USE_LOGGING
- log_error (_("gpg-agent protocol version %d is not supported\n"),prot);
-#endif
- return SPWQ_PROTOCOL_ERROR;
- }
-
- if( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1 )
- {
-#ifdef SPWQ_USE_LOGGING
- log_error ("can't create socket: %s\n", strerror(errno) );
-#endif
- return SPWQ_SYS_ERROR;
- }
-
- memset (&client_addr, 0, sizeof client_addr);
- client_addr.sun_family = AF_UNIX;
- strcpy (client_addr.sun_path, infostr);
- len = (offsetof (struct sockaddr_un, sun_path)
- + strlen(client_addr.sun_path) + 1);
-
- if (connect (fd, (struct sockaddr*)&client_addr, len ) == -1)
- {
-#ifdef SPWQ_USE_LOGGING
- log_error ( _("can't connect to `%s': %s\n"), infostr, strerror (errno));
-#endif
- close (fd );
- return SPWQ_IO_ERROR;
- }
-
- nread = readline (fd, line, DIM(line));
- if (nread < 3 || !(line[0] == 'O' && line[1] == 'K'
- && (line[2] == '\n' || line[2] == ' ')) )
- {
-#ifdef SPWQ_USE_LOGGING
- log_error ( _("communication problem with gpg-agent\n"));
-#endif
- close (fd );
- return SPWQ_PROTOCOL_ERROR;
- }
-
- rc = agent_send_all_options (fd);
- if (rc)
- {
-#ifdef SPWQ_USE_LOGGING
- log_error (_("problem setting the gpg-agent options\n"));
-#endif
- close (fd);
- return rc;
- }
-
- *rfd = fd;
- return 0;
-}
-
-
-/* Copy text to BUFFER and escape as required. Return a poiinter to
- the end of the new buffer. NOte that BUFFER must be large enough
- to keep the entire text; allocataing it 3 times the size of TEXT
- is sufficient. */
-static char *
-copy_and_escape (char *buffer, const char *text)
-{
- int i;
- char *p = buffer;
-
- for (i=0; text[i]; i++)
- {
- if (text[i] < ' ' || text[i] == '+')
- {
- sprintf (p, "%%%02X", text[i]);
- p += 3;
- }
- else if (text[i] == ' ')
- *p++ = '+';
- else
- *p++ = text[i];
- }
- return p;
-}
-
-
-/* Ask the gpg-agent for a passphrase and present the user with a
- DESCRIPTION, a PROMPT and optiaonlly with a TRYAGAIN extra text.
- If a CACHEID is not NULL it is used to locate the passphrase in in
- the cache and store it under this ID. If ERRORCODE is not NULL it
- should point a variable receiving an errorcode; thsi errocode might
- be 0 if the user canceled the operation. The function returns NULL
- to indicate an error. */
-char *
-simple_pwquery (const char *cacheid,
- const char *tryagain,
- const char *prompt,
- const char *description,
- int *errorcode)
-{
- int fd = -1;
- int nread;
- char *result = NULL;
- char *pw = NULL;
- char *p;
- int rc, i;
-
- rc = agent_open (&fd);
- if (rc)
- goto leave;
-
- if (!cacheid)
- cacheid = "X";
- if (!tryagain)
- tryagain = "X";
- if (!prompt)
- prompt = "X";
- if (!description)
- description = "X";
-
- {
- char *line;
- /* We allocate 3 times the needed space so that there is enough
- space for escaping. */
- line = spwq_malloc (15
- + 3*strlen (cacheid) + 1
- + 3*strlen (tryagain) + 1
- + 3*strlen (prompt) + 1
- + 3*strlen (description) + 1
- + 2);
- if (!line)
- {
- rc = SPWQ_OUT_OF_CORE;
- goto leave;
- }
- strcpy (line, "GET_PASSPHRASE ");
- p = line+15;
- p = copy_and_escape (p, cacheid);
- *p++ = ' ';
- p = copy_and_escape (p, tryagain);
- *p++ = ' ';
- p = copy_and_escape (p, prompt);
- *p++ = ' ';
- p = copy_and_escape (p, description);
- *p++ = '\n';
- rc = writen (fd, line, p - line);
- spwq_free (line);
- if (rc)
- goto leave;
- }
-
- /* get response */
- pw = spwq_secure_malloc (500);
- nread = readline (fd, pw, 499);
- if (nread < 0)
- {
- rc = -nread;
- goto leave;
- }
- if (nread < 3)
- {
- rc = SPWQ_PROTOCOL_ERROR;
- goto leave;
- }
-
- if (pw[0] == 'O' && pw[1] == 'K' && pw[2] == ' ')
- { /* we got a passphrase - convert it back from hex */
- size_t pwlen = 0;
-
- for (i=3; i < nread && hexdigitp (pw+i); i+=2)
- pw[pwlen++] = xtoi_2 (pw+i);
- pw[pwlen] = 0; /* make a C String */
- result = pw;
- pw = NULL;
- }
- else if (nread > 7 && !memcmp (pw, "ERR 111", 7)
- && (pw[7] == ' ' || pw[7] == '\n') )
- {
-#ifdef SPWQ_USE_LOGGING
- log_info (_("canceled by user\n") );
-#endif
- *errorcode = 0; /* canceled */
- }
- else
- {
-#ifdef SPWQ_USE_LOGGING
- log_error (_("problem with the agent\n"));
-#endif
- rc = SPWQ_ERR_RESPONSE;
- }
-
- leave:
- if (errorcode)
- *errorcode = rc;
- if (fd != -1)
- close (fd);
- if (pw)
- spwq_free (pw);
- return result;
-}
diff --git a/agent/trustlist.c b/agent/trustlist.c
deleted file mode 100644
index b6545f7de..000000000
--- a/agent/trustlist.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/* trustlist.c - Maintain the list of trusted keys
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "agent.h"
-#include "../assuan/assuan.h" /* fixme: need a way to avoid assuan
- calls here */
-
-static const char headerblurb[] =
-"# This is the list of trusted keys. Comments like this one and empty\n"
-"# lines are allowed but keep in mind that the entire file is integrity\n"
-"# protected by the use of a MAC, so changing the file does not make\n"
-"# much sense without the knowledge of the MAC key. Lines do have a\n"
-"# length limit but this is not serious limitation as the format of the\n"
-"# entries is fixed and checked by gpg-agent: A non-comment line starts\n"
-"# with optional white spaces, followed by exactly 40 hex character,\n"
-"# optioanlly followed by a flag character which my either be 'P', 'S'\n"
-"# or '*'. Additional data delimited with by a white space is ignored.\n"
-"\n";
-
-
-static FILE *trustfp;
-
-
-static int
-open_list (int append)
-{
- char *fname;
-
- fname = make_filename (opt.homedir, "trustlist.txt", NULL);
- trustfp = fopen (fname, append? "a+":"r");
- if (!trustfp && errno == ENOENT)
- {
- trustfp = fopen (fname, "wx");
- if (!trustfp)
- {
- log_error ("can't create `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- return seterr (File_Create_Error);
- }
- fputs (headerblurb, trustfp);
- fclose (trustfp);
- trustfp = fopen (fname, append? "a+":"r");
- }
-
- if (!trustfp)
- {
- log_error ("can't open `%s': %s\n", fname, strerror (errno));
- xfree (fname);
- return seterr (File_Open_Error);
- }
-
- /*FIXME: check the MAC */
-
- return 0;
-}
-
-
-
-/* Read the trustlist and return entry by entry. KEY must point to a
- buffer of at least 41 characters. KEYFLAG does return either 'P',
- 'S' or '*'.
-
- Reading a valid entry return 0, EOF returns -1 any other error
- returns the appropriate error code. */
-static int
-read_list (char *key, int *keyflag)
-{
- int rc;
- int c, i;
- char *p, line[256];
-
- if (!trustfp)
- {
- rc = open_list (0);
- if (rc)
- return rc;
- }
-
- do
- {
- if (!fgets (line, DIM(line)-1, trustfp) )
- {
- if (feof (trustfp))
- return -1;
- return GNUPG_Read_Error;
- }
-
- if (!*line || line[strlen(line)-1] != '\n')
- {
- /* eat until end of line */
- while ( (c=getc (trustfp)) != EOF && c != '\n')
- ;
- return *line? GNUPG_Line_Too_Long: GNUPG_Incomplete_Line;
- }
-
- /* Allow for emty lines and spaces */
- for (p=line; spacep (p); p++)
- ;
- }
- while (!*p || *p == '\n' || *p == '#');
-
- for (i=0; hexdigitp (p+i) && i < 40; i++)
- key[i] = p[i] >= 'a'? (p[i] & 0xdf): p[i];
- key[i] = 0;
- if (i!=40 || !(spacep (p+i) || p[i] == '\n'))
- {
- log_error ("invalid formatted fingerprint in trustlist\n");
- return GNUPG_Bad_Data;
- }
- assert (p[i]);
- if (p[i] == '\n')
- *keyflag = '*';
- else
- {
- i++;
- if ( p[i] == 'P' || p[i] == 'p')
- *keyflag = 'P';
- else if ( p[i] == 'S' || p[i] == 's')
- *keyflag = 'S';
- else if ( p[i] == '*')
- *keyflag = '*';
- else
- {
- log_error ("invalid keyflag in trustlist\n");
- return GNUPG_Bad_Data;
- }
- i++;
- if ( !(spacep (p+i) || p[i] == '\n'))
- {
- log_error ("invalid keyflag in trustlist\n");
- return GNUPG_Bad_Data;
- }
- }
-
- return 0;
-}
-
-/* check whether the given fpr is in our trustdb. We expect FPR to be
- an all uppercase hexstring of 40 characters. */
-int
-agent_istrusted (const char *fpr)
-{
- int rc;
- static char key[41];
- int keyflag;
-
- if (trustfp)
- rewind (trustfp);
- while (!(rc=read_list (key, &keyflag)))
- {
- if (!strcmp (key, fpr))
- return 0;
- }
- if (rc != -1)
- {
- /* error in the trustdb - close it to give the user a chance for
- correction */
- fclose (trustfp);
- trustfp = NULL;
- }
- return rc;
-}
-
-
-/* write all trust entries to FP */
-int
-agent_listtrusted (void *assuan_context)
-{
- int rc;
- static char key[51];
- int keyflag;
-
- if (trustfp)
- rewind (trustfp);
- while (!(rc=read_list (key, &keyflag)))
- {
- key[40] = ' ';
- key[41] = keyflag;
- key[42] = '\n';
- assuan_send_data (assuan_context, key, 43);
- assuan_send_data (assuan_context, NULL, 0); /* flush */
- }
- if (rc == -1)
- rc = 0;
- if (rc)
- {
- /* error in the trustdb - close it to give the user a chance for
- correction */
- fclose (trustfp);
- trustfp = NULL;
- }
- return rc;
-}
-
-
-/* Insert the given fpr into our trustdb. We expect FPR to be an all
- uppercase hexstring of 40 characters. FLAG is either 'P' or 'C'.
- This function does first check whether that key has alreay ben put
- into the trustdb and returns success in this case. Before a FPR
- actually gets inserted, the user is asked by means of the pin-entry
- whether this is actual wants he want to do.
-*/
-int
-agent_marktrusted (const char *name, const char *fpr, int flag)
-{
- int rc;
- static char key[41];
- int keyflag;
- char *desc;
-
- if (trustfp)
- rewind (trustfp);
- while (!(rc=read_list (key, &keyflag)))
- {
- if (!strcmp (key, fpr))
- return 0;
- }
- fclose (trustfp);
- trustfp = NULL;
- if (rc != -1)
- return rc; /* error in the trustdb */
-
- /* insert a new one */
- if (asprintf (&desc,
- "Please verify that the certificate identified as:%%0A"
- " \"%s\"%%0A"
- "has the fingerprint:%%0A"
- " %s", name, fpr) < 0 )
- return GNUPG_Out_Of_Core;
- rc = agent_get_confirmation (desc, "Correct", "No");
- free (desc);
- if (rc)
- return rc;
-
- if (asprintf (&desc,
- "Do you ultimately trust%%0A"
- " \"%s\"%%0A"
- "to correctly certify user certificates?",
- name) < 0 )
- return GNUPG_Out_Of_Core;
- rc = agent_get_confirmation (desc, "Yes", "No");
- free (desc);
- if (rc)
- return rc;
-
- /* now check again to avoid duplicates. Also open in append mode now */
- rc = open_list (1);
- if (rc)
- return rc;
- rewind (trustfp);
- while (!(rc=read_list (key, &keyflag)))
- {
- if (!strcmp (key, fpr))
- return 0;
- }
- if (rc != -1)
- {
- fclose (trustfp);
- trustfp = NULL;
- return rc; /* error in the trustdb */
- }
- rc = 0;
-
- /* append the key */
- fflush (trustfp);
- fputs ("\n# ", trustfp);
- print_sanitized_string (trustfp, name, 0);
- fprintf (trustfp, "\n%s %c\n", fpr, flag);
- if (ferror (trustfp))
- rc = GNUPG_Write_Error;
-
- /* close because we are in append mode */
- if (fclose (trustfp))
- rc = GNUPG_File_Error;
- trustfp = NULL;
- return rc;
-}
diff --git a/assuan/ChangeLog b/assuan/ChangeLog
deleted file mode 100644
index 670f7ef75..000000000
--- a/assuan/ChangeLog
+++ /dev/null
@@ -1,250 +0,0 @@
-2002-08-16 Werner Koch <wk@gnupg.org>
-
- * assuan.h: Renamed Bad_Certificate_Path to Bad_Certificate_Chain.
-
-2002-07-30 Werner Koch <wk@gnupg.org>
-
- Changed the license from GPL to LGPL.
-
-2002-07-23 Werner Koch <wk@gnupg.org>
-
- * assuan-handler.c (_IO_cookie_io_functions_t): Define it here if
- it does not exists.
-
-2002-06-27 Werner Koch <wk@gnupg.org>
-
- * assuan-pipe-connect.c (assuan_pipe_connect): No special handling
- for the log_fd and stderr. Connect stderr to /dev/null if it
- should not be retained.
-
-2002-06-26 Werner Koch <wk@gnupg.org>
-
- * assuan-buffer.c (assuan_write_line): Make sure we never
- accidently print an extra LF.
-
-2002-05-23 Werner Koch <wk@gnupg.org>
-
- * assuan-util.c (assuan_set_io_func): New.
- * assuan-buffer.c (writen, readline): Use the new functions
- instead of pth.
- * assuan-socket-server.c (accept_connection): Don't use the
- pth_accept - using the assuan included accept code would be a bad
- idea within Pth so we don't need a replacement function.
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * assuan-socket-server.c (assuan_init_connected_socket_server): New.
- (accept_connection): Factored most code out to..
- (accept_connection_bottom): .. new function.
-
-2002-04-04 Werner Koch <wk@gnupg.org>
-
- * assuan-buffer.c (my_log_prefix): New. Use it for all i/o debug
- output.
-
-2002-03-06 Werner Koch <wk@gnupg.org>
-
- * assuan-client.c (_assuan_read_from_server): Detect END.
- (assuan_transact): Pass it to the data callback.
-
-2002-02-27 Werner Koch <wk@gnupg.org>
-
- * assuan-client.c (assuan_transact): Add 2 more arguments to
- support status lines. Passing NULL yields the old behaviour.
-
- * assuan-handler.c (process_request): Flush data lines send
- without using the data fp.
-
-2002-02-14 Werner Koch <wk@gnupg.org>
-
- * assuan-inquire.c (assuan_inquire): Check for a cancel command
- and return ASSUAN_Canceled. Allow for non-data inquiry.
-
- * assuan.h: Add a few token specific error codes.
-
-2002-02-13 Werner Koch <wk@gnupg.org>
-
- * assuan-defs.h (assuan_context_s): New var CLIENT_PID.
- * assuan-pipe-server.c (_assuan_new_context): set default value.
- * assuan-socket-server.c (accept_connection): get the actual pid.
-
-2002-02-12 Werner Koch <wk@gnupg.org>
-
- * assuan-buffer.c (writen,readline) [USE_GNU_PT]: Use pth_read/write.
- * assuan-socket-server.c (accept_connection) [USE_GNU_PTH]: Ditto.
-
-2002-02-01 Marcus Brinkmann <marcus@g10code.de>
-
- * Makefile.am (MOSTLYCLEANFILES): New variable.
-
-2002-01-23 Werner Koch <wk@gnupg.org>
-
- * assuan-socket-connect.c (LOGERRORX): and removed typo.
-
-2002-01-22 Marcus Brinkmann <marcus@g10code.de>
-
- * assuan-socket-connect.c (LOGERRORX): Reverse arguments to fputs.
-
-2002-01-21 Werner Koch <wk@gnupg.org>
-
- * assuan-connect.c: Move all except assuan_get_pid to...
- * assuan-pipe-connect.c: this.
- (assuan_pipe_disconnect): Removed.
- (do_finish, do_deinit): New
- (assuan_pipe_connect): and set them into the context.
- * assuan-socket-connect.c: New.
-
- * assuan-util.c (_assuan_log_sanitized_string): New.
-
- * assuan-pipe-server.c (assuan_init_pipe_server): Factored most
- code out to ...
- (_assuan_new_context): new func.
- (_assuan_release_context): New
- * assuan-connect.c (assuan_pipe_connect): Use the new functions.
-
-2002-01-20 Werner Koch <wk@gnupg.org>
-
- * assuan.h: Added Invalid Option error code.
-
- * assuan-handler.c (std_handler_option): New.
- (std_cmd_tbl): Add OPTION as standard command.
- (assuan_register_option_handler): New.
- (dispatch_command): Use case insensitive matching as a fallback.
- (my_strcasecmp): New.
-
-2002-01-19 Werner Koch <wk@gnupg.org>
-
- * assuan-buffer.c (_assuan_read_line): Add output logging.
- (assuan_write_line): Ditto.
- (_assuan_cookie_write_data): Ditto.
- (_assuan_cookie_write_flush): Ditto.
- * assuan-util.c (_assuan_log_print_buffer): New.
- (assuan_set_log_stream): New.
- (assuan_begin_confidential): New.
- (assuan_end_confidential): New.
-
- * assuan-defs.h: Add a few handler variables.
- * assuan-pipe-server.c (assuan_deinit_pipe_server): Removed.
- (deinit_pipe_server): New.
- (assuan_deinit_server): New. Changed all callers to use this.
- * assuan-listen.c (assuan_accept): Use the accept handler.
- * assuan-handler.c (process_request): Use the close Handler.
- * assuan-socket-server.c: New.
-
-2002-01-14 Werner Koch <wk@gnupg.org>
-
- * assuan-client.c (_assuan_read_from_server): Skip spaces after
- the keyword.
-
-2002-01-03 Werner Koch <wk@gnupg.org>
-
- * assuan-handler.c (assuan_set_okay_line): New.
- (process_request): And use it here.
-
-2002-01-02 Werner Koch <wk@gnupg.org>
-
- * assuan-inquire.c (init_membuf,put_membuf,get_membuf): Apply a
- hidden 0 behind the buffer so that the buffer can be used as a
- string in certain contexts.
-
-2001-12-14 Marcus Brinkmann <marcus@g10code.de>
-
- * assuan-connect.c (assuan_pipe_connect): New argument
- FD_CHILD_LIST. Don't close those fds.
- * assuan.h: Likewise for prototype.
-
-2001-12-14 Werner Koch <wk@gnupg.org>
-
- * assuan-listen.c (assuan_close_input_fd): New.
- (assuan_close_output_fd): New.
- * assuan-handler.c (std_handler_reset): Always close them after a
- reset command.
- (std_handler_bye): Likewise.
-
-2001-12-14 Marcus Brinkmann <marcus@g10code.de>
-
- * assuan-buffer.c (_assuan_read_line): New variable ATTICLEN, use
- it to save the length of the attic line.
- Rediddle the code a bit to make it more clear what happens.
-
-2001-12-14 Marcus Brinkmann <marcus@g10code.de>
-
- * assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH.
- assuan.h: Define ASSUAN_LINELENGTH.
-
-2001-12-13 Marcus Brinkmann <marcus@g10code.de>
-
- * assuan-buffer.c (assuan_read_line): Fix order of execution to
- get correct return values.
-
-2001-12-13 Werner Koch <wk@gnupg.org>
-
- * assuan-handler.c (assuan_get_active_fds): Fixed silly bug,
- pretty obvious that nobody ever tested this function.
-
-2001-12-12 Werner Koch <wk@gnupg.org>
-
- * assuan-connect.c (assuan_pipe_connect): Implemented the inital
- handshake.
- * assuan-client.c (read_from_server): Renamed to
- (_assuan_read_from_server): this and made external.
-
- * assuan-listen.c (assuan_set_hello_line): New.
- (assuan_accept): Use a custom hello line is available.
-
- * assuan-buffer.c (assuan_read_line): New.
- (assuan_pending_line): New.
- (_assuan_write_line): Renamed to ..
- (assuan_write_line): this, made public and changed all callers.
-
-2001-12-04 Werner Koch <wk@gnupg.org>
-
- * assuan-connect.c (assuan_pipe_connect): Add more error reporting.
- * assuan-client.c: New.
-
- * assuan-inquire.c: New.
- * assuan-handler.c (process_request): Check for nested invocations.
-
-2001-11-27 Werner Koch <wk@gnupg.org>
-
- * assuan-handler.c (assuan_register_input_notify): New.
- (assuan_register_output_notify): New.
-
-2001-11-26 Werner Koch <wk@gnupg.org>
-
- * assuan.h: Added more status codes.
-
-2001-11-25 Werner Koch <wk@gnupg.org>
-
- * assuan-handler.c (assuan_register_bye_notify)
- (assuan_register_reset_notify)
- (assuan_register_cancel_notify): New and call them from the
- standard handlers.
- (assuan_process): Moved bulk of function to ..
- (process_request): .. new.
- (assuan_process_next): One shot version of above.
- (assuan_get_active_fds): New.
-
-2001-11-24 Werner Koch <wk@gnupg.org>
-
- * assuan-connect.c (assuan_get_pid): New.
-
- * assuan-buffer.c (_assuan_read_line): Deal with reads of more
- than a line.
- * assuan-defs.h: Add space in the context for this.
-
-
- ***********************************************************
- * Please note that Assuan is maintained as part of GnuPG. *
- * You may find it source-copied in other packages. *
- ***********************************************************
-
- Copyright 2001, 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/assuan/Makefile.am b/assuan/Makefile.am
deleted file mode 100644
index 71560c9e3..000000000
--- a/assuan/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-# Assuan Makefile
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of Assuan.
-#
-# Assuan is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# Assuan is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = mkerrors
-INCLUDES = -I.. -I$(top_srcdir)/include
-BUILT_SOURCES = assuan-errors.c
-MOSTLYCLEANFILES = assuan-errors.c
-
-noinst_LIBRARIES = libassuan.a
-
-
-#libassuan_a_LDFLAGS =
-libassuan_a_SOURCES = \
- assuan.h \
- assuan-defs.h \
- assuan-util.c \
- assuan-errors.c \
- assuan-buffer.c \
- assuan-handler.c \
- assuan-inquire.c \
- assuan-listen.c \
- assuan-connect.c \
- assuan-client.c \
- assuan-pipe-server.c \
- assuan-socket-server.c \
- assuan-pipe-connect.c \
- assuan-socket-connect.c
-
-
-assuan-errors.c : assuan.h
- $(srcdir)/mkerrors < $(srcdir)/assuan.h > assuan-errors.c
diff --git a/assuan/assuan-buffer.c b/assuan/assuan-buffer.c
deleted file mode 100644
index df5057543..000000000
--- a/assuan/assuan-buffer.c
+++ /dev/null
@@ -1,443 +0,0 @@
-/* assuan-buffer.c - read and send data
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <assert.h>
-#include "assuan-defs.h"
-
-#ifdef HAVE_JNLIB_LOGGING
-#include "../jnlib/logging.h"
-#endif
-
-
-static const char *
-my_log_prefix (void)
-{
-#ifdef HAVE_JNLIB_LOGGING
- return log_get_prefix (NULL);
-#else
- return "";
-#endif
-}
-
-
-static int
-writen ( int fd, const char *buffer, size_t length )
-{
- while (length)
- {
- int nwritten = _assuan_write_wrapper?
- _assuan_write_wrapper (fd, buffer, length):
- write (fd, buffer, length);
-
- if (nwritten < 0)
- {
- if (errno == EINTR)
- continue;
- return -1; /* write error */
- }
- length -= nwritten;
- buffer += nwritten;
- }
- return 0; /* okay */
-}
-
-/* read an entire line */
-static int
-readline (int fd, char *buf, size_t buflen, int *r_nread, int *eof)
-{
- size_t nleft = buflen;
- char *p;
-
- *eof = 0;
- *r_nread = 0;
- while (nleft > 0)
- {
- int n = _assuan_read_wrapper?
- _assuan_read_wrapper (fd, buf, nleft):
- read (fd, buf, nleft);
-
- if (n < 0)
- {
- if (errno == EINTR)
- continue;
- return -1; /* read error */
- }
- else if (!n)
- {
- *eof = 1;
- break; /* allow incomplete lines */
- }
- p = buf;
- nleft -= n;
- buf += n;
- *r_nread += n;
-
- for (; n && *p != '\n'; n--, p++)
- ;
- if (n)
- break; /* at least one full line available - that's enough for now */
- }
-
- return 0;
-}
-
-
-int
-_assuan_read_line (ASSUAN_CONTEXT ctx)
-{
- char *line = ctx->inbound.line;
- int n, nread, atticlen;
- int rc;
-
- if (ctx->inbound.eof)
- return -1;
-
- atticlen = ctx->inbound.attic.linelen;
- if (atticlen)
- {
- memcpy (line, ctx->inbound.attic.line, atticlen);
- ctx->inbound.attic.linelen = 0;
- for (n=0; n < atticlen && line[n] != '\n'; n++)
- ;
- if (n < atticlen)
- {
- rc = 0; /* found another line in the attic */
- nread = atticlen;
- atticlen = 0;
- }
- else
- { /* read the rest */
- assert (atticlen < LINELENGTH);
- rc = readline (ctx->inbound.fd, line + atticlen,
- LINELENGTH - atticlen, &nread, &ctx->inbound.eof);
- }
- }
- else
- rc = readline (ctx->inbound.fd, line, LINELENGTH,
- &nread, &ctx->inbound.eof);
- if (rc)
- {
- if (ctx->log_fp)
- fprintf (ctx->log_fp, "%s[%p] <- [Error: %s]\n",
- my_log_prefix (), ctx, strerror (errno));
- return ASSUAN_Read_Error;
- }
- if (!nread)
- {
- assert (ctx->inbound.eof);
- if (ctx->log_fp)
- fprintf (ctx->log_fp, "%s[%p] <- [EOF]\n", my_log_prefix (),ctx);
- return -1;
- }
-
- ctx->inbound.attic.pending = 0;
- nread += atticlen;
- for (n=0; n < nread; n++)
- {
- if (line[n] == '\n')
- {
- if (n+1 < nread)
- {
- char *s, *d;
- int i;
-
- n++;
- /* we have to copy the rest because the handlers are
- allowed to modify the passed buffer */
- for (d=ctx->inbound.attic.line, s=line+n, i=nread-n; i; i--)
- {
- if (*s=='\n')
- ctx->inbound.attic.pending = 1;
- *d++ = *s++;
- }
- ctx->inbound.attic.linelen = nread-n;
- n--;
- }
- if (n && line[n-1] == '\r')
- n--;
- line[n] = 0;
- ctx->inbound.linelen = n;
- if (ctx->log_fp)
- {
- fprintf (ctx->log_fp, "%s[%p] <- ", my_log_prefix (), ctx);
- if (ctx->confidential)
- fputs ("[Confidential data not shown]", ctx->log_fp);
- else
- _assuan_log_print_buffer (ctx->log_fp,
- ctx->inbound.line,
- ctx->inbound.linelen);
- putc ('\n', ctx->log_fp);
- }
- return 0;
- }
- }
-
- if (ctx->log_fp)
- fprintf (ctx->log_fp, "%s[%p] <- [Invalid line]\n", my_log_prefix (), ctx);
- *line = 0;
- ctx->inbound.linelen = 0;
- return ctx->inbound.eof? ASSUAN_Line_Not_Terminated : ASSUAN_Line_Too_Long;
-}
-
-
-/* Read the next line from the client or server and return a pointer
- to a buffer with holding that line. linelen returns the length of
- the line. This buffer is valid until another read operation is
- done on this buffer. The caller is allowed to modify this buffer.
- He should only use the buffer if the function returns without an
- error.
-
- Returns: 0 on success or an assuan error code
- See also: assuan_pending_line().
-*/
-AssuanError
-assuan_read_line (ASSUAN_CONTEXT ctx, char **line, size_t *linelen)
-{
- AssuanError err;
-
- if (!ctx)
- return ASSUAN_Invalid_Value;
-
- err = _assuan_read_line (ctx);
- *line = ctx->inbound.line;
- *linelen = ctx->inbound.linelen;
- return err;
-}
-
-
-/* Return true when a full line is pending for a read, without the need
- for actual IO */
-int
-assuan_pending_line (ASSUAN_CONTEXT ctx)
-{
- return ctx && ctx->inbound.attic.pending;
-}
-
-
-AssuanError
-assuan_write_line (ASSUAN_CONTEXT ctx, const char *line )
-{
- int rc;
- size_t len;
- const char *s;
-
- if (!ctx)
- return ASSUAN_Invalid_Value;
-
- /* Make sure that we never take a LF from the user - this might
- violate the protocol. */
- s = strchr (line, '\n');
- len = s? (s-line) : strlen (line);
-
- /* fixme: we should do some kind of line buffering. */
- if (ctx->log_fp)
- {
- fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx);
- if (s)
- fputs ("[supplied line contained a LF]", ctx->log_fp);
- if (ctx->confidential)
- fputs ("[Confidential data not shown]", ctx->log_fp);
- else
- _assuan_log_print_buffer (ctx->log_fp, line, len);
- putc ('\n', ctx->log_fp);
- }
-
- rc = writen (ctx->outbound.fd, line, len);
- if (rc)
- rc = ASSUAN_Write_Error;
- if (!rc)
- {
- rc = writen (ctx->outbound.fd, "\n", 1);
- if (rc)
- rc = ASSUAN_Write_Error;
- }
-
- return rc;
-}
-
-
-
-/* Write out the data in buffer as datalines with line wrapping and
- percent escaping. This fucntion is used for GNU's custom streams */
-int
-_assuan_cookie_write_data (void *cookie, const char *buffer, size_t size)
-{
- ASSUAN_CONTEXT ctx = cookie;
- char *line;
- size_t linelen;
-
- if (ctx->outbound.data.error)
- return 0;
-
- line = ctx->outbound.data.line;
- linelen = ctx->outbound.data.linelen;
- line += linelen;
- while (size)
- {
- /* insert data line header */
- if (!linelen)
- {
- *line++ = 'D';
- *line++ = ' ';
- linelen += 2;
- }
-
- /* copy data, keep some space for the CRLF and to escape one character */
- while (size && linelen < LINELENGTH-2-2)
- {
- if (*buffer == '%' || *buffer == '\r' || *buffer == '\n')
- {
- sprintf (line, "%%%02X", *(unsigned char*)buffer);
- line += 3;
- linelen += 3;
- buffer++;
- }
- else
- {
- *line++ = *buffer++;
- linelen++;
- }
- size--;
- }
-
- if (linelen >= LINELENGTH-2-2)
- {
- if (ctx->log_fp)
- {
- fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx);
- if (ctx->confidential)
- fputs ("[Confidential data not shown]", ctx->log_fp);
- else
- _assuan_log_print_buffer (ctx->log_fp,
- ctx->outbound.data.line,
- linelen);
- putc ('\n', ctx->log_fp);
- }
- *line++ = '\n';
- linelen++;
- if (writen (ctx->outbound.fd, ctx->outbound.data.line, linelen))
- {
- ctx->outbound.data.error = ASSUAN_Write_Error;
- return 0;
- }
- line = ctx->outbound.data.line;
- linelen = 0;
- }
- }
-
- ctx->outbound.data.linelen = linelen;
- return 0;
-}
-
-
-/* Write out any buffered data
- This fucntion is used for GNU's custom streams */
-int
-_assuan_cookie_write_flush (void *cookie)
-{
- ASSUAN_CONTEXT ctx = cookie;
- char *line;
- size_t linelen;
-
- if (ctx->outbound.data.error)
- return 0;
-
- line = ctx->outbound.data.line;
- linelen = ctx->outbound.data.linelen;
- line += linelen;
- if (linelen)
- {
- if (ctx->log_fp)
- {
- fprintf (ctx->log_fp, "%s[%p] -> ", my_log_prefix (), ctx);
- if (ctx->confidential)
- fputs ("[Confidential data not shown]", ctx->log_fp);
- else
- _assuan_log_print_buffer (ctx->log_fp,
- ctx->outbound.data.line,
- linelen);
- putc ('\n', ctx->log_fp);
- }
- *line++ = '\n';
- linelen++;
- if (writen (ctx->outbound.fd, ctx->outbound.data.line, linelen))
- {
- ctx->outbound.data.error = ASSUAN_Write_Error;
- return 0;
- }
- ctx->outbound.data.linelen = 0;
- }
- return 0;
-}
-
-
-/**
- * assuan_send_data:
- * @ctx: An assuan context
- * @buffer: Data to send or NULL to flush
- * @length: length of the data to send/
- *
- * This function may be used by the server or the client to send data
- * lines. The data will be escaped as required by the Assuan protocol
- * and may get buffered until a line is full. To force sending the
- * data out @buffer may be passed as NULL (in which case @length must
- * also be 0); however when used by a client this flush operation does
- * also send the terminating "END" command to terminate the reponse on
- * a INQUIRE response. However, when assuan_transact() is used, this
- * function takes care of sending END itself.
- *
- * Return value: 0 on success or an error code
- **/
-
-AssuanError
-assuan_send_data (ASSUAN_CONTEXT ctx, const void *buffer, size_t length)
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- if (!buffer && length)
- return ASSUAN_Invalid_Value;
-
- if (!buffer)
- { /* flush what we have */
- _assuan_cookie_write_flush (ctx);
- if (ctx->outbound.data.error)
- return ctx->outbound.data.error;
- if (!ctx->is_server)
- return assuan_write_line (ctx, "END");
- }
- else
- {
- _assuan_cookie_write_data (ctx, buffer, length);
- if (ctx->outbound.data.error)
- return ctx->outbound.data.error;
- }
-
- return 0;
-}
-
-
-
-
diff --git a/assuan/assuan-client.c b/assuan/assuan-client.c
deleted file mode 100644
index d5c0ec819..000000000
--- a/assuan/assuan-client.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/* assuan-client.c - client functions
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include "assuan-defs.h"
-
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-AssuanError
-_assuan_read_from_server (ASSUAN_CONTEXT ctx, int *okay, int *off)
-{
- char *line;
- int linelen;
- AssuanError rc;
-
- *okay = 0;
- *off = 0;
- do
- {
- rc = _assuan_read_line (ctx);
- if (rc)
- return rc;
- line = ctx->inbound.line;
- linelen = ctx->inbound.linelen;
- }
- while (*line == '#' || !linelen);
-
- if (linelen >= 1
- && line[0] == 'D' && line[1] == ' ')
- {
- *okay = 2; /* data line */
- *off = 2;
- }
- else if (linelen >= 1
- && line[0] == 'S'
- && (line[1] == '\0' || line[1] == ' '))
- {
- *okay = 4;
- *off = 1;
- while (line[*off] == ' ')
- ++*off;
- }
- else if (linelen >= 2
- && line[0] == 'O' && line[1] == 'K'
- && (line[2] == '\0' || line[2] == ' '))
- {
- *okay = 1;
- *off = 2;
- while (line[*off] == ' ')
- ++*off;
- }
- else if (linelen >= 3
- && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'
- && (line[3] == '\0' || line[3] == ' '))
- {
- *okay = 0;
- *off = 3;
- while (line[*off] == ' ')
- ++*off;
- }
- else if (linelen >= 7
- && line[0] == 'I' && line[1] == 'N' && line[2] == 'Q'
- && line[3] == 'U' && line[4] == 'I' && line[5] == 'R'
- && line[6] == 'E'
- && (line[7] == '\0' || line[7] == ' '))
- {
- *okay = 3;
- *off = 7;
- while (line[*off] == ' ')
- ++*off;
- }
- else if (linelen >= 3
- && line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
- && (line[3] == '\0' || line[3] == ' '))
- {
- *okay = 5; /* end line */
- *off = 3;
- }
- else
- rc = ASSUAN_Invalid_Response;
- return rc;
-}
-
-
-
-/**
- * assuan_transact:
- * @ctx: The Assuan context
- * @command: Coimmand line to be send to server
- * @data_cb: Callback function for data lines
- * @data_cb_arg: first argument passed to @data_cb
- * @inquire_cb: Callback function for a inquire response
- * @inquire_cb_arg: first argument passed to @inquire_cb
- * @status_cb: Callback function for a status response
- * @status_cb_arg: first argument passed to @status_cb
- *
- * FIXME: Write documentation
- *
- * Return value: 0 on success or error code. The error code may be
- * the one one returned by the server in error lines or from the
- * callback functions.
- **/
-AssuanError
-assuan_transact (ASSUAN_CONTEXT ctx,
- const char *command,
- AssuanError (*data_cb)(void *, const void *, size_t),
- void *data_cb_arg,
- AssuanError (*inquire_cb)(void*, const char *),
- void *inquire_cb_arg,
- AssuanError (*status_cb)(void*, const char *),
- void *status_cb_arg)
-{
- int rc, okay, off;
- unsigned char *line;
- int linelen;
-
- rc = assuan_write_line (ctx, command);
- if (rc)
- return rc;
-
- again:
- rc = _assuan_read_from_server (ctx, &okay, &off);
- if (rc)
- return rc; /* error reading from server */
-
- line = ctx->inbound.line + off;
- linelen = ctx->inbound.linelen - off;
-
- if (!okay)
- {
- rc = atoi (line);
- if (rc < 100)
- rc = ASSUAN_Server_Fault;
- }
- else if (okay == 2)
- {
- if (!data_cb)
- rc = ASSUAN_No_Data_Callback;
- else
- {
- unsigned char *s, *d;
-
- for (s=d=line; linelen; linelen--)
- {
- if (*s == '%' && linelen > 2)
- { /* handle escaping */
- s++;
- *d++ = xtoi_2 (s);
- s += 2;
- linelen -= 2;
- }
- else
- *d++ = *s++;
- }
- *d = 0; /* add a hidden string terminator */
- rc = data_cb (data_cb_arg, line, d - line);
- if (!rc)
- goto again;
- }
- }
- else if (okay == 3)
- {
- if (!inquire_cb)
- {
- assuan_write_line (ctx, "END"); /* get out of inquire mode */
- _assuan_read_from_server (ctx, &okay, &off); /* dummy read */
- rc = ASSUAN_No_Inquire_Callback;
- }
- else
- {
- rc = inquire_cb (inquire_cb_arg, line);
- if (!rc)
- rc = assuan_send_data (ctx, NULL, 0); /* flush and send END */
- if (!rc)
- goto again;
- }
- }
- else if (okay == 4)
- {
- if (status_cb)
- rc = status_cb (status_cb_arg, line);
- if (!rc)
- goto again;
- }
- else if (okay == 5)
- {
- if (!data_cb)
- rc = ASSUAN_No_Data_Callback;
- else
- {
- rc = data_cb (data_cb_arg, NULL, 0);
- if (!rc)
- goto again;
- }
- }
-
- return rc;
-}
-
diff --git a/assuan/assuan-connect.c b/assuan/assuan-connect.c
deleted file mode 100644
index 009aaab43..000000000
--- a/assuan/assuan-connect.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* assuan-connect.c - Establish a connection (client)
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "assuan-defs.h"
-
-/* Disconnect and release the context CTX. */
-void
-assuan_disconnect (ASSUAN_CONTEXT ctx)
-{
- if (ctx)
- {
- assuan_write_line (ctx, "BYE");
- ctx->finish_handler (ctx);
- ctx->deinit_handler (ctx);
- ctx->deinit_handler = NULL;
- _assuan_release_context (ctx);
- }
-}
-
-pid_t
-assuan_get_pid (ASSUAN_CONTEXT ctx)
-{
- return ctx ? ctx->pid : -1;
-}
diff --git a/assuan/assuan-defs.h b/assuan/assuan-defs.h
deleted file mode 100644
index 3e408b179..000000000
--- a/assuan/assuan-defs.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* assuan-defs.c - Internal definitions to Assuan
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef ASSUAN_DEFS_H
-#define ASSUAN_DEFS_H
-
-#include <sys/types.h>
-#include "assuan.h"
-
-#define LINELENGTH ASSUAN_LINELENGTH
-
-struct cmdtbl_s {
- const char *name;
- int cmd_id;
- int (*handler)(ASSUAN_CONTEXT, char *line);
-};
-
-struct assuan_context_s {
- AssuanError err_no;
- const char *err_str;
- int os_errno; /* last system error number used with certain error codes*/
-
- int confidential;
- int is_server; /* set if this is context belongs to a server */
- int in_inquire;
- char *hello_line;
- char *okay_line; /* see assan_set_okay_line() */
-
- void *user_pointer; /* for assuan_[gs]et_pointer () */
-
- FILE *log_fp;
-
- struct {
- int fd;
- int eof;
- char line[LINELENGTH];
- int linelen; /* w/o CR, LF - might not be the same as
- strlen(line) due to embedded nuls. However a nul
- is always written at this pos */
- struct {
- char line[LINELENGTH];
- int linelen ;
- int pending; /* i.e. at least one line is available in the attic */
- } attic;
- } inbound;
-
- struct {
- int fd;
- struct {
- FILE *fp;
- char line[LINELENGTH];
- int linelen;
- int error;
- } data;
- } outbound;
-
- int pipe_mode; /* We are in pipe mode, i.e. we can handle just one
- connection and must terminate then */
- pid_t pid; /* In pipe mode, the pid of the child server process.
- In socket mode, the pid of the server */
- int listen_fd; /* The fd we are listening on (used by socket servers) */
- int connected_fd; /* helper */
-
- pid_t client_pid; /* for a socket server the PID of the client or -1
- if not available */
-
- void (*deinit_handler)(ASSUAN_CONTEXT);
- int (*accept_handler)(ASSUAN_CONTEXT);
- int (*finish_handler)(ASSUAN_CONTEXT);
-
- struct cmdtbl_s *cmdtbl;
- size_t cmdtbl_used; /* used entries */
- size_t cmdtbl_size; /* allocated size of table */
-
- void (*bye_notify_fnc)(ASSUAN_CONTEXT);
- void (*reset_notify_fnc)(ASSUAN_CONTEXT);
- void (*cancel_notify_fnc)(ASSUAN_CONTEXT);
- int (*option_handler_fnc)(ASSUAN_CONTEXT,const char*, const char*);
- void (*input_notify_fnc)(ASSUAN_CONTEXT, const char *);
- void (*output_notify_fnc)(ASSUAN_CONTEXT, const char *);
-
- int input_fd; /* set by INPUT command */
- int output_fd; /* set by OUTPUT command */
-
-};
-
-
-
-/*-- assuan-pipe-server.c --*/
-int _assuan_new_context (ASSUAN_CONTEXT *r_ctx);
-void _assuan_release_context (ASSUAN_CONTEXT ctx);
-
-
-/*-- assuan-handler.c --*/
-int _assuan_register_std_commands (ASSUAN_CONTEXT ctx);
-
-/*-- assuan-buffer.c --*/
-int _assuan_read_line (ASSUAN_CONTEXT ctx);
-int _assuan_cookie_write_data (void *cookie, const char *buffer, size_t size);
-int _assuan_cookie_write_flush (void *cookie);
-
-/*-- assuan-client.c --*/
-AssuanError _assuan_read_from_server (ASSUAN_CONTEXT ctx, int *okay, int *off);
-
-
-/*-- assuan-util.c --*/
-extern ssize_t (*_assuan_read_wrapper)(int,void*,size_t);
-extern ssize_t (*_assuan_write_wrapper)(int,const void*,size_t);
-
-void *_assuan_malloc (size_t n);
-void *_assuan_calloc (size_t n, size_t m);
-void *_assuan_realloc (void *p, size_t n);
-void _assuan_free (void *p);
-
-#define xtrymalloc(a) _assuan_malloc ((a))
-#define xtrycalloc(a,b) _assuan_calloc ((a),(b))
-#define xtryrealloc(a,b) _assuan_realloc((a),(b))
-#define xfree(a) _assuan_free ((a))
-
-#define set_error(c,e,t) assuan_set_error ((c), ASSUAN_ ## e, (t))
-
-void _assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length);
-void _assuan_log_sanitized_string (const char *string);
-
-
-#endif /*ASSUAN_DEFS_H*/
-
diff --git a/assuan/assuan-handler.c b/assuan/assuan-handler.c
deleted file mode 100644
index 6ddfe8899..000000000
--- a/assuan/assuan-handler.c
+++ /dev/null
@@ -1,708 +0,0 @@
-/* assuan-handler.c - dispatch commands
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "assuan-defs.h"
-
-#define spacep(p) (*(p) == ' ' || *(p) == '\t')
-#define digitp(a) ((a) >= '0' && (a) <= '9')
-
-
-#if !HAVE_FOPENCOOKIE
-/* Provide structure for our dummy replacement function. Usually this
- is defined in ../common/util.h but assuan should be self
- contained. */
-/* Fixme: Remove fopencoookie :-(( */
-typedef struct
-{
- ssize_t (*read)(void*,char*,size_t);
- ssize_t (*write)(void*,const char*,size_t);
- int (*seek)(void*,off_t*,int);
- int (*close)(void*);
-} _IO_cookie_io_functions_t;
-typedef _IO_cookie_io_functions_t cookie_io_functions_t;
-FILE *fopencookie (void *cookie, const char *opentype,
- cookie_io_functions_t funclist);
-#endif /*!HAVE_FOPENCOOKIE*/
-
-
-
-
-static int
-dummy_handler (ASSUAN_CONTEXT ctx, char *line)
-{
- return set_error (ctx, Server_Fault, "no handler registered");
-}
-
-
-static int
-std_handler_nop (ASSUAN_CONTEXT ctx, char *line)
-{
- return 0; /* okay */
-}
-
-static int
-std_handler_cancel (ASSUAN_CONTEXT ctx, char *line)
-{
- if (ctx->cancel_notify_fnc)
- ctx->cancel_notify_fnc (ctx);
- return set_error (ctx, Not_Implemented, NULL);
-}
-
-static int
-std_handler_option (ASSUAN_CONTEXT ctx, char *line)
-{
- char *key, *value, *p;
-
- for (key=line; spacep (key); key++)
- ;
- if (!*key)
- return set_error (ctx, Syntax_Error, "argument required");
- if (*key == '=')
- return set_error (ctx, Syntax_Error, "no option name given");
- for (value=key; *value && !spacep (value) && *value != '='; value++)
- ;
- if (*value)
- {
- if (spacep (value))
- *value++ = 0; /* terminate key */
- for (; spacep (value); value++)
- ;
- if (*value == '=')
- {
- *value++ = 0; /* terminate key */
- for (; spacep (value); value++)
- ;
- if (!*value)
- return set_error (ctx, Syntax_Error, "option argument expected");
- }
- if (*value)
- {
- for (p = value + strlen(value) - 1; p > value && spacep (p); p--)
- ;
- if (p > value)
- *++p = 0; /* strip trailing spaces */
- }
- }
-
- if (*key == '-' && key[1] == '-' && key[2])
- key += 2; /* the double dashes are optional */
- if (*key == '-')
- return set_error (ctx, Syntax_Error,
- "option should not begin with one dash");
-
- if (ctx->option_handler_fnc)
- return ctx->option_handler_fnc (ctx, key, value);
- return 0;
-}
-
-static int
-std_handler_bye (ASSUAN_CONTEXT ctx, char *line)
-{
- if (ctx->bye_notify_fnc)
- ctx->bye_notify_fnc (ctx);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- return -1; /* pretty simple :-) */
-}
-
-static int
-std_handler_auth (ASSUAN_CONTEXT ctx, char *line)
-{
- return set_error (ctx, Not_Implemented, NULL);
-}
-
-static int
-std_handler_reset (ASSUAN_CONTEXT ctx, char *line)
-{
- if (ctx->reset_notify_fnc)
- ctx->reset_notify_fnc (ctx);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- return 0;
-}
-
-static int
-std_handler_end (ASSUAN_CONTEXT ctx, char *line)
-{
- return set_error (ctx, Not_Implemented, NULL);
-}
-
-static int
-parse_cmd_input_output (ASSUAN_CONTEXT ctx, char *line, int *rfd)
-{
- char *endp;
-
- if (strncmp (line, "FD=", 3))
- return set_error (ctx, Syntax_Error, "FD=<n> expected");
- line += 3;
- if (!digitp (*line))
- return set_error (ctx, Syntax_Error, "number required");
- *rfd = strtoul (line, &endp, 10);
- /* remove that argument so that a notify handler won't see it */
- memset (line, ' ', endp? (endp-line):strlen(line));
-
- if (*rfd == ctx->inbound.fd)
- return set_error (ctx, Parameter_Conflict, "fd same as inbound fd");
- if (*rfd == ctx->outbound.fd)
- return set_error (ctx, Parameter_Conflict, "fd same as outbound fd");
- return 0;
-}
-
-/* Format is INPUT FD=<n> */
-static int
-std_handler_input (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc, fd;
-
- rc = parse_cmd_input_output (ctx, line, &fd);
- if (rc)
- return rc;
- ctx->input_fd = fd;
- if (ctx->input_notify_fnc)
- ctx->input_notify_fnc (ctx, line);
- return 0;
-}
-
-/* Format is OUTPUT FD=<n> */
-static int
-std_handler_output (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc, fd;
-
- rc = parse_cmd_input_output (ctx, line, &fd);
- if (rc)
- return rc;
- ctx->output_fd = fd;
- if (ctx->output_notify_fnc)
- ctx->output_notify_fnc (ctx, line);
- return 0;
-}
-
-
-
-
-
-/* This is a table with the standard commands and handler for them.
- The table is used to initialize a new context and assuciate strings
- and handlers with cmd_ids */
-static struct {
- const char *name;
- int cmd_id;
- int (*handler)(ASSUAN_CONTEXT, char *line);
- int always; /* always initialize this command */
-} std_cmd_table[] = {
- { "NOP", ASSUAN_CMD_NOP, std_handler_nop, 1 },
- { "CANCEL", ASSUAN_CMD_CANCEL, std_handler_cancel, 1 },
- { "OPTION", ASSUAN_CMD_OPTION, std_handler_option, 1 },
- { "BYE", ASSUAN_CMD_BYE, std_handler_bye, 1 },
- { "AUTH", ASSUAN_CMD_AUTH, std_handler_auth, 1 },
- { "RESET", ASSUAN_CMD_RESET, std_handler_reset, 1 },
- { "END", ASSUAN_CMD_END, std_handler_end, 1 },
-
- { "INPUT", ASSUAN_CMD_INPUT, std_handler_input },
- { "OUTPUT", ASSUAN_CMD_OUTPUT, std_handler_output },
- { "OPTION", ASSUAN_CMD_OPTION, std_handler_option, 1 },
- { NULL }
-};
-
-
-/**
- * assuan_register_command:
- * @ctx: the server context
- * @cmd_id: An ID value for the command
- * @cmd_name: A string with the command name
- * @handler: The handler function to be called
- *
- * Register a handler to be used for a given command.
- *
- * The @cmd_name must be %NULL or an empty string for all @cmd_ids
- * below %ASSUAN_CMD_USER because predefined values are used.
- *
- * Return value:
- **/
-int
-assuan_register_command (ASSUAN_CONTEXT ctx,
- int cmd_id, const char *cmd_name,
- int (*handler)(ASSUAN_CONTEXT, char *))
-{
- int i;
-
- if (cmd_name && !*cmd_name)
- cmd_name = NULL;
-
- if (cmd_id < ASSUAN_CMD_USER)
- {
- if (cmd_name)
- return ASSUAN_Invalid_Value; /* must be NULL for these values*/
-
- for (i=0; std_cmd_table[i].name; i++)
- {
- if (std_cmd_table[i].cmd_id == cmd_id)
- {
- cmd_name = std_cmd_table[i].name;
- if (!handler)
- handler = std_cmd_table[i].handler;
- break;
- }
- }
- if (!std_cmd_table[i].name)
- return ASSUAN_Invalid_Value; /* not a pre-registered one */
- }
-
- if (!handler)
- handler = dummy_handler;
-
- if (!cmd_name)
- return ASSUAN_Invalid_Value;
-
-/* fprintf (stderr, "DBG-assuan: registering %d as `%s'\n", cmd_id, cmd_name); */
-
- if (!ctx->cmdtbl)
- {
- ctx->cmdtbl_size = 50;
- ctx->cmdtbl = xtrycalloc ( ctx->cmdtbl_size, sizeof *ctx->cmdtbl);
- if (!ctx->cmdtbl)
- return ASSUAN_Out_Of_Core;
- ctx->cmdtbl_used = 0;
- }
- else if (ctx->cmdtbl_used >= ctx->cmdtbl_size)
- {
- struct cmdtbl_s *x;
-
- x = xtryrealloc ( ctx->cmdtbl, (ctx->cmdtbl_size+10) * sizeof *x);
- if (!x)
- return ASSUAN_Out_Of_Core;
- ctx->cmdtbl = x;
- ctx->cmdtbl_size += 50;
- }
-
- ctx->cmdtbl[ctx->cmdtbl_used].name = cmd_name;
- ctx->cmdtbl[ctx->cmdtbl_used].cmd_id = cmd_id;
- ctx->cmdtbl[ctx->cmdtbl_used].handler = handler;
- ctx->cmdtbl_used++;
- return 0;
-}
-
-int
-assuan_register_bye_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT))
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- ctx->bye_notify_fnc = fnc;
- return 0;
-}
-
-int
-assuan_register_reset_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT))
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- ctx->reset_notify_fnc = fnc;
- return 0;
-}
-
-int
-assuan_register_cancel_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT))
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- ctx->cancel_notify_fnc = fnc;
- return 0;
-}
-
-int
-assuan_register_option_handler (ASSUAN_CONTEXT ctx,
- int (*fnc)(ASSUAN_CONTEXT,
- const char*, const char*))
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- ctx->option_handler_fnc = fnc;
- return 0;
-}
-
-int
-assuan_register_input_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT, const char *))
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- ctx->input_notify_fnc = fnc;
- return 0;
-}
-
-int
-assuan_register_output_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT, const char *))
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- ctx->output_notify_fnc = fnc;
- return 0;
-}
-
-
-/* Helper to register the standards commands */
-int
-_assuan_register_std_commands (ASSUAN_CONTEXT ctx)
-{
- int i, rc;
-
- for (i=0; std_cmd_table[i].name; i++)
- {
- if (std_cmd_table[i].always)
- {
- rc = assuan_register_command (ctx, std_cmd_table[i].cmd_id,
- NULL, NULL);
- if (rc)
- return rc;
- }
- }
- return 0;
-}
-
-
-
-/* Process the special data lines. The "D " has already been removed
- from the line. As all handlers this function may modify the line. */
-static int
-handle_data_line (ASSUAN_CONTEXT ctx, char *line, int linelen)
-{
- return set_error (ctx, Not_Implemented, NULL);
-}
-
-/* like ascii_strcasecmp but assume that B is already uppercase */
-static int
-my_strcasecmp (const char *a, const char *b)
-{
- if (a == b)
- return 0;
-
- for (; *a && *b; a++, b++)
- {
- if (((*a >= 'a' && *a <= 'z')? (*a&~0x20):*a) != *b)
- break;
- }
- return *a == *b? 0 : (((*a >= 'a' && *a <= 'z')? (*a&~0x20):*a) - *b);
-}
-
-/* Parse the line, break out the command, find it in the command
- table, remove leading and white spaces from the arguments, all the
- handler with the argument line and return the error */
-static int
-dispatch_command (ASSUAN_CONTEXT ctx, char *line, int linelen)
-{
- char *p;
- const char *s;
- int shift, i;
-
- if (*line == 'D' && line[1] == ' ') /* divert to special handler */
- return handle_data_line (ctx, line+2, linelen-2);
-
- for (p=line; *p && *p != ' ' && *p != '\t'; p++)
- ;
- if (p==line)
- return set_error (ctx, Invalid_Command, "leading white-space");
- if (*p)
- { /* Skip over leading WS after the keyword */
- *p++ = 0;
- while ( *p == ' ' || *p == '\t')
- p++;
- }
- shift = p - line;
-
- for (i=0; (s=ctx->cmdtbl[i].name); i++)
- {
- if (!strcmp (line, s))
- break;
- }
- if (!s)
- { /* and try case insensitive */
- for (i=0; (s=ctx->cmdtbl[i].name); i++)
- {
- if (!my_strcasecmp (line, s))
- break;
- }
- }
- if (!s)
- return set_error (ctx, Unknown_Command, NULL);
- line += shift;
- linelen -= shift;
-
-/* fprintf (stderr, "DBG-assuan: processing %s `%s'\n", s, line); */
- return ctx->cmdtbl[i].handler (ctx, line);
-}
-
-
-
-
-static int
-process_request (ASSUAN_CONTEXT ctx)
-{
- int rc;
-
- if (ctx->in_inquire)
- return ASSUAN_Nested_Commands;
-
- rc = _assuan_read_line (ctx);
- if (rc)
- return rc;
- if (*ctx->inbound.line == '#' || !ctx->inbound.linelen)
- return 0; /* comment line - ignore */
-
- ctx->outbound.data.error = 0;
- ctx->outbound.data.linelen = 0;
- /* dispatch command and return reply */
- rc = dispatch_command (ctx, ctx->inbound.line, ctx->inbound.linelen);
- /* check from data write errors */
- if (ctx->outbound.data.fp)
- { /* Flush the data lines */
- fclose (ctx->outbound.data.fp);
- ctx->outbound.data.fp = NULL;
- if (!rc && ctx->outbound.data.error)
- rc = ctx->outbound.data.error;
- }
- else /* flush any data send w/o using the data fp */
- {
- assuan_send_data (ctx, NULL, 0);
- if (!rc && ctx->outbound.data.error)
- rc = ctx->outbound.data.error;
- }
- /* Error handling */
- if (!rc)
- {
- rc = assuan_write_line (ctx, ctx->okay_line? ctx->okay_line : "OK");
- }
- else if (rc == -1)
- { /* No error checking because the peer may have already disconnect */
- assuan_write_line (ctx, "OK closing connection");
- ctx->finish_handler (ctx);
- }
- else
- {
- char errline[256];
-
- if (rc < 100)
- sprintf (errline, "ERR %d server fault (%.50s)",
- ASSUAN_Server_Fault, assuan_strerror (rc));
- else
- {
- const char *text = ctx->err_no == rc? ctx->err_str:NULL;
-
- sprintf (errline, "ERR %d %.50s%s%.100s",
- rc, assuan_strerror (rc), text? " - ":"", text?text:"");
- }
- rc = assuan_write_line (ctx, errline);
- }
-
- ctx->confidential = 0;
- if (ctx->okay_line)
- {
- xfree (ctx->okay_line);
- ctx->okay_line = NULL;
- }
- return rc;
-}
-
-/**
- * assuan_process:
- * @ctx: assuan context
- *
- * This fucntion is used to handle the assuan protocol after a
- * connection has been established using assuan_accept(). This is the
- * main protocol handler.
- *
- * Return value: 0 on success or an error code if the assuan operation
- * failed. Note, that no error is returned for operational errors.
- **/
-int
-assuan_process (ASSUAN_CONTEXT ctx)
-{
- int rc;
-
- do {
- rc = process_request (ctx);
- } while (!rc);
-
- if (rc == -1)
- rc = 0;
-
- return rc;
-}
-
-
-/**
- * assuan_process_next:
- * @ctx: Assuan context
- *
- * Same as assuan_process() but the user has to provide the outer
- * loop. He should loop as long as the return code is zero and stop
- * otherwise; -1 is regular end.
- *
- * See also: assuan_get_active_fds()
- * Return value: -1 for end of server, 0 on success or an error code
- **/
-int
-assuan_process_next (ASSUAN_CONTEXT ctx)
-{
- return process_request (ctx);
-}
-
-
-/**
- * assuan_get_active_fds:
- * @ctx: Assuan context
- * @what: 0 for read fds, 1 for write fds
- * @fdarray: Caller supplied array to store the FDs
- * @fdarraysize: size of that array
- *
- * Return all active filedescriptors for the given context. This
- * function can be used to select on the fds and call
- * assuan_process_next() if there is an active one. The first fd in
- * the array is the one used for the command connection.
- *
- * Note, that write FDs are not yet supported.
- *
- * Return value: number of FDs active and put into @fdarray or -1 on
- * error which is most likely a too small fdarray.
- **/
-int
-assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
- int *fdarray, int fdarraysize)
-{
- int n = 0;
-
- if (!ctx || fdarraysize < 2 || what < 0 || what > 1)
- return -1;
-
- if (!what)
- {
- if (ctx->inbound.fd != -1)
- fdarray[n++] = ctx->inbound.fd;
- }
- else
- {
- if (ctx->outbound.fd != -1)
- fdarray[n++] = ctx->outbound.fd;
- if (ctx->outbound.data.fp)
- fdarray[n++] = fileno (ctx->outbound.data.fp);
- }
-
- return n;
-}
-
-/* Return a FP to be used for data output. The FILE pointer is valid
- until the end of a handler. So a close is not needed. Assuan does
- all the buffering needed to insert the status line as well as the
- required line wappping and quoting for data lines.
-
- We use GNU's custom streams here. There should be an alternative
- implementaion for systems w/o a glibc, a simple implementation
- could use a child process */
-FILE *
-assuan_get_data_fp (ASSUAN_CONTEXT ctx)
-{
- cookie_io_functions_t cookie_fnc;
-
- if (ctx->outbound.data.fp)
- return ctx->outbound.data.fp;
-
- cookie_fnc.read = NULL;
- cookie_fnc.write = _assuan_cookie_write_data;
- cookie_fnc.seek = NULL;
- cookie_fnc.close = _assuan_cookie_write_flush;
-
- ctx->outbound.data.fp = fopencookie (ctx, "wb", cookie_fnc);
- ctx->outbound.data.error = 0;
- return ctx->outbound.data.fp;
-}
-
-
-/* Set the text used for the next OK reponse. This string is
- automatically reset to NULL after the next command. */
-AssuanError
-assuan_set_okay_line (ASSUAN_CONTEXT ctx, const char *line)
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- if (!line)
- {
- xfree (ctx->okay_line);
- ctx->okay_line = NULL;
- }
- else
- {
- /* FIXME: we need to use gcry_is_secure() to test whether
- we should allocate the entire line in secure memory */
- char *buf = xtrymalloc (3+strlen(line)+1);
- if (!buf)
- return ASSUAN_Out_Of_Core;
- strcpy (buf, "OK ");
- strcpy (buf+3, line);
- xfree (ctx->okay_line);
- ctx->okay_line = buf;
- }
- return 0;
-}
-
-
-
-void
-assuan_write_status (ASSUAN_CONTEXT ctx, const char *keyword, const char *text)
-{
- char buffer[256];
- char *helpbuf;
- size_t n;
-
- if ( !ctx || !keyword)
- return;
- if (!text)
- text = "";
-
- n = 2 + strlen (keyword) + 1 + strlen (text) + 1;
- if (n < sizeof (buffer))
- {
- strcpy (buffer, "S ");
- strcat (buffer, keyword);
- if (*text)
- {
- strcat (buffer, " ");
- strcat (buffer, text);
- }
- assuan_write_line (ctx, buffer);
- }
- else if ( (helpbuf = xtrymalloc (n)) )
- {
- strcpy (helpbuf, "S ");
- strcat (helpbuf, keyword);
- if (*text)
- {
- strcat (helpbuf, " ");
- strcat (helpbuf, text);
- }
- assuan_write_line (ctx, helpbuf);
- xfree (helpbuf);
- }
-}
diff --git a/assuan/assuan-inquire.c b/assuan/assuan-inquire.c
deleted file mode 100644
index 197e21019..000000000
--- a/assuan/assuan-inquire.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* assuan-inquire.c - handle inquire stuff
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "assuan-defs.h"
-
-#define digitp(a) ((a) >= '0' && (a) <= '9')
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-struct membuf {
- size_t len;
- size_t size;
- char *buf;
- int out_of_core;
- int too_large;
- size_t maxlen;
-};
-
-
-
-/* A simple implemnation of a dynamic buffer. Use init_membuf() to
- create a buffer, put_membuf to append bytes and get_membuf to
- release and return the buffer. Allocation errors are detected but
- only returned at the final get_membuf(), this helps not to clutter
- the code with out of core checks. */
-
-static void
-init_membuf (struct membuf *mb, int initiallen, size_t maxlen)
-{
- mb->len = 0;
- mb->size = initiallen;
- mb->out_of_core = 0;
- mb->too_large = 0;
- mb->maxlen = maxlen;
- /* we need to allocate one byte more for get_membuf */
- mb->buf = xtrymalloc (initiallen+1);
- if (!mb->buf)
- mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
- if (mb->out_of_core || mb->too_large)
- return;
-
- if (mb->maxlen && mb->len + len > mb->maxlen)
- {
- mb->too_large = 1;
- return;
- }
-
- if (mb->len + len >= mb->size)
- {
- char *p;
-
- mb->size += len + 1024;
- /* we need to allocate one byte more for get_membuf */
- p = xtryrealloc (mb->buf, mb->size+1);
- if (!p)
- {
- mb->out_of_core = 1;
- return;
- }
- mb->buf = p;
- }
- memcpy (mb->buf + mb->len, buf, len);
- mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
- char *p;
-
- if (mb->out_of_core || mb->too_large)
- {
- xfree (mb->buf);
- mb->buf = NULL;
- return NULL;
- }
-
- mb->buf[mb->len] = 0; /* there is enough space for the hidden eos */
- p = mb->buf;
- *len = mb->len;
- mb->buf = NULL;
- mb->out_of_core = 1; /* don't allow a reuse */
- return p;
-}
-
-static void
-free_membuf (struct membuf *mb)
-{
- xfree (mb->buf);
- mb->buf = NULL;
-}
-
-
-/**
- * assuan_inquire:
- * @ctx: An assuan context
- * @keyword: The keyword used for the inquire
- * @r_buffer: Returns an allocated buffer
- * @r_length: Returns the length of this buffer
- * @maxlen: If not 0, the size limit of the inquired data.
- *
- * A Server may use this to Send an inquire. r_buffer, r_length and
- * maxlen may all be NULL/0 to indicate that no real data is expected.
- *
- * Return value: 0 on success or an ASSUAN error code
- **/
-AssuanError
-assuan_inquire (ASSUAN_CONTEXT ctx, const char *keyword,
- char **r_buffer, size_t *r_length, size_t maxlen)
-{
- AssuanError rc;
- struct membuf mb;
- char cmdbuf[100];
- unsigned char *line, *p;
- int linelen;
- int nodataexpected;
-
- if (!ctx || !keyword || (10 + strlen (keyword) >= sizeof (cmdbuf)))
- return ASSUAN_Invalid_Value;
- nodataexpected = !r_buffer && !r_length && !maxlen;
- if (!nodataexpected && (!r_buffer || !r_length))
- return ASSUAN_Invalid_Value;
- if (!ctx->is_server)
- return ASSUAN_Not_A_Server;
- if (ctx->in_inquire)
- return ASSUAN_Nested_Commands;
-
- ctx->in_inquire = 1;
- if (nodataexpected)
- memset (&mb, 0, sizeof mb); /* avoid compiler warnings */
- else
- init_membuf (&mb, maxlen? maxlen:1024, maxlen);
-
- strcpy (stpcpy (cmdbuf, "INQUIRE "), keyword);
- rc = assuan_write_line (ctx, cmdbuf);
- if (rc)
- goto leave;
-
- for (;;)
- {
- do
- {
- rc = _assuan_read_line (ctx);
- if (rc)
- goto leave;
- line = ctx->inbound.line;
- linelen = ctx->inbound.linelen;
- }
- while (*line == '#' || !linelen);
- if (line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
- && (!line[3] || line[3] == ' '))
- break; /* END command received*/
- if (line[0] == 'C' && line[1] == 'A' && line[2] == 'N')
- {
- rc = ASSUAN_Canceled;
- goto leave;
- }
- if (line[0] != 'D' || line[1] != ' ' || nodataexpected)
- {
- rc = ASSUAN_Unexpected_Command;
- goto leave;
- }
- if (linelen < 3)
- continue;
- line += 2;
- linelen -= 2;
-
- p = line;
- while (linelen)
- {
- for (;linelen && *p != '%'; linelen--, p++)
- ;
- put_membuf (&mb, line, p-line);
- if (linelen > 2)
- { /* handle escaping */
- unsigned char tmp[1];
- p++;
- *tmp = xtoi_2 (p);
- p += 2;
- linelen -= 3;
- put_membuf (&mb, tmp, 1);
- }
- line = p;
- }
- if (mb.too_large)
- {
- rc = ASSUAN_Too_Much_Data;
- goto leave;
- }
- }
-
- if (!nodataexpected)
- {
- *r_buffer = get_membuf (&mb, r_length);
- if (!*r_buffer)
- rc = ASSUAN_Out_Of_Core;
- }
-
- leave:
- if (!nodataexpected)
- free_membuf (&mb);
- ctx->in_inquire = 0;
- return rc;
-}
-
-
-
-
-
-
diff --git a/assuan/assuan-listen.c b/assuan/assuan-listen.c
deleted file mode 100644
index 3d4ee5f60..000000000
--- a/assuan/assuan-listen.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* assuan-listen.c - Wait for a connection (server)
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "assuan-defs.h"
-
-AssuanError
-assuan_set_hello_line (ASSUAN_CONTEXT ctx, const char *line)
-{
- if (!ctx)
- return ASSUAN_Invalid_Value;
- if (!line)
- {
- xfree (ctx->hello_line);
- ctx->hello_line = NULL;
- }
- else
- {
- char *buf = xtrymalloc (3+strlen(line)+1);
- if (!buf)
- return ASSUAN_Out_Of_Core;
- strcpy (buf, "OK ");
- strcpy (buf+3, line);
- xfree (ctx->hello_line);
- ctx->hello_line = buf;
- }
- return 0;
-}
-
-
-/**
- * assuan_accept:
- * @ctx: context
- *
- * Cancel any existing connectiion and wait for a connection from a
- * client. The initial handshake is performed which may include an
- * initial authentication or encryption negotiation.
- *
- * Return value: 0 on success or an error if the connection could for
- * some reason not be established.
- **/
-AssuanError
-assuan_accept (ASSUAN_CONTEXT ctx)
-{
- int rc;
-
- if (!ctx)
- return ASSUAN_Invalid_Value;
-
- if (ctx->pipe_mode > 1)
- return -1; /* second invocation for pipemode -> terminate */
- ctx->finish_handler (ctx);
-
- rc = ctx->accept_handler (ctx);
- if (rc)
- return rc;
-
- /* send the hello */
- rc = assuan_write_line (ctx, ctx->hello_line? ctx->hello_line
- : "OK Your orders please");
- if (rc)
- return rc;
-
- if (ctx->pipe_mode)
- ctx->pipe_mode = 2;
-
- return 0;
-}
-
-
-
-int
-assuan_get_input_fd (ASSUAN_CONTEXT ctx)
-{
- return ctx? ctx->input_fd : -1;
-}
-
-
-int
-assuan_get_output_fd (ASSUAN_CONTEXT ctx)
-{
- return ctx? ctx->output_fd : -1;
-}
-
-
-/* Close the fd descriptor set by the command INPUT FD=n. We handle
- this fd inside assuan so that we can do some initial checks */
-AssuanError
-assuan_close_input_fd (ASSUAN_CONTEXT ctx)
-{
- if (!ctx || ctx->input_fd == -1)
- return ASSUAN_Invalid_Value;
- close (ctx->input_fd);
- ctx->input_fd = -1;
- return 0;
-}
-
-/* Close the fd descriptor set by the command OUTPUT FD=n. We handle
- this fd inside assuan so that we can do some initial checks */
-AssuanError
-assuan_close_output_fd (ASSUAN_CONTEXT ctx)
-{
- if (!ctx || ctx->output_fd == -1)
- return ASSUAN_Invalid_Value;
-
- close (ctx->output_fd);
- ctx->output_fd = -1;
- return 0;
-}
-
diff --git a/assuan/assuan-pipe-connect.c b/assuan/assuan-pipe-connect.c
deleted file mode 100644
index 0cb48ca1a..000000000
--- a/assuan/assuan-pipe-connect.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* assuan-pipe-connect.c - Establish a pipe connection (client)
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "assuan-defs.h"
-
-#ifdef _POSIX_OPEN_MAX
-#define MAX_OPEN_FDS _POSIX_OPEN_MAX
-#else
-#define MAX_OPEN_FDS 20
-#endif
-
-#ifdef HAVE_JNLIB_LOGGING
-#include "../jnlib/logging.h"
-#define LOGERROR1(a,b) log_error ((a), (b))
-#else
-#define LOGERROR1(a,b) fprintf (stderr, (a), (b))
-#endif
-
-
-
-static int
-writen ( int fd, const char *buffer, size_t length )
-{
- while (length)
- {
- int nwritten = write (fd, buffer, length);
-
- if (nwritten < 0)
- {
- if (errno == EINTR)
- continue;
- return -1; /* write error */
- }
- length -= nwritten;
- buffer += nwritten;
- }
- return 0; /* okay */
-}
-
-
-static int
-do_finish (ASSUAN_CONTEXT ctx)
-{
- if (ctx->inbound.fd != -1)
- {
- close (ctx->inbound.fd);
- ctx->inbound.fd = -1;
- }
- if (ctx->outbound.fd != -1)
- {
- close (ctx->outbound.fd);
- ctx->outbound.fd = -1;
- }
- if (ctx->pid != -1)
- {
- waitpid (ctx->pid, NULL, 0); /* FIXME Check return value. */
- ctx->pid = -1;
- }
- return 0;
-}
-
-static void
-do_deinit (ASSUAN_CONTEXT ctx)
-{
- do_finish (ctx);
-}
-
-
-
-/* Connect to a server over a pipe, creating the assuan context and
- returning it in CTX. The server filename is NAME, the argument
- vector in ARGV. FD_CHILD_LIST is a -1 terminated list of file
- descriptors not to close in the child. */
-AssuanError
-assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[],
- int *fd_child_list)
-{
- static int fixed_signals = 0;
- AssuanError err;
- int rp[2];
- int wp[2];
-
- if (!ctx || !name || !argv || !argv[0])
- return ASSUAN_Invalid_Value;
-
- if (!fixed_signals)
- {
- struct sigaction act;
-
- sigaction (SIGPIPE, NULL, &act);
- if (act.sa_handler == SIG_DFL)
- {
- act.sa_handler = SIG_IGN;
- sigemptyset (&act.sa_mask);
- act.sa_flags = 0;
- sigaction (SIGPIPE, &act, NULL);
- }
- fixed_signals = 1;
- /* FIXME: This is not MT safe */
- }
-
- if (pipe (rp) < 0)
- return ASSUAN_General_Error;
-
- if (pipe (wp) < 0)
- {
- close (rp[0]);
- close (rp[1]);
- return ASSUAN_General_Error;
- }
-
- err = _assuan_new_context (ctx);
- if (err)
- {
- close (rp[0]);
- close (rp[1]);
- close (wp[0]);
- close (wp[1]);
- return err;
- }
- (*ctx)->pipe_mode = 1;
- (*ctx)->inbound.fd = rp[0]; /* Our inbound is read end of read pipe. */
- (*ctx)->outbound.fd = wp[1]; /* Our outbound is write end of write pipe. */
- (*ctx)->deinit_handler = do_deinit;
- (*ctx)->finish_handler = do_finish;
-
- (*ctx)->pid = fork ();
- if ((*ctx)->pid < 0)
- {
- close (rp[0]);
- close (rp[1]);
- close (wp[0]);
- close (wp[1]);
- _assuan_release_context (*ctx);
- return ASSUAN_General_Error;
- }
-
- if ((*ctx)->pid == 0)
- {
- int i, n;
- char errbuf[512];
- int *fdp;
-
- /* Close all files which will not be duped and are not in the
- fd_child_list. */
- n = sysconf (_SC_OPEN_MAX);
- if (n < 0)
- n = MAX_OPEN_FDS;
- for (i=0; i < n; i++)
- {
- fdp = fd_child_list;
- if (fdp)
- {
- while (*fdp != -1 && *fdp != i)
- fdp++;
- }
-
- if (!(fdp && *fdp != -1)
- && i != rp[1] && i != wp[0])
- close(i);
- }
- errno = 0;
-
- /* Dup stderr to /dev/null unless it is in the list of FDs to be
- passed to the child. */
- fdp = fd_child_list;
- if (fdp)
- {
- for (; *fdp != -1 && *fdp != STDERR_FILENO; fdp++)
- ;
- }
- if (!fdp || *fdp == -1)
- {
- int fd = open ("/dev/null", O_WRONLY);
- if (fd == -1)
- {
- LOGERROR1 ("can't open `/dev/null': %s\n", strerror (errno));
- _exit (4);
- }
- if (dup2 (fd, STDERR_FILENO) == -1)
- {
- LOGERROR1 ("dup2(dev/null, 2) failed: %s\n", strerror (errno));
- _exit (4);
- }
- close (fd);
- }
-
- /* Dup handles and to stdin/stdout and exec. */
- if (rp[1] != STDOUT_FILENO)
- {
- if (dup2 (rp[1], STDOUT_FILENO) == -1)
- {
- LOGERROR1 ("dup2 failed in child: %s\n", strerror (errno));
- _exit (4);
- }
- close (rp[1]);
- }
- if (wp[0] != STDIN_FILENO)
- {
- if (dup2 (wp[0], STDIN_FILENO) == -1)
- {
- LOGERROR1 ("dup2 failed in child: %s\n", strerror (errno));
- _exit (4);
- }
- close (wp[0]);
- }
-
- execv (name, argv);
- /* oops - use the pipe to tell the parent about it */
- snprintf (errbuf, sizeof(errbuf)-1, "ERR %d can't exec `%s': %.50s\n",
- ASSUAN_Problem_Starting_Server, name, strerror (errno));
- errbuf[sizeof(errbuf)-1] = 0;
- writen (1, errbuf, strlen (errbuf));
- _exit (4);
- }
-
- close (rp[1]);
- close (wp[0]);
-
- /* initial handshake */
- {
- int okay, off;
-
- err = _assuan_read_from_server (*ctx, &okay, &off);
- if (err)
- {
- LOGERROR1 ("can't connect server: %s\n", assuan_strerror (err));
- }
- else if (okay != 1)
- {
- LOGERROR1 ("can't connect server: `%s'\n", (*ctx)->inbound.line);
- err = ASSUAN_Connect_Failed;
- }
- }
-
- if (err)
- {
- assuan_disconnect (*ctx);
- *ctx = NULL;
- }
-
- return err;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assuan/assuan-pipe-server.c b/assuan/assuan-pipe-server.c
deleted file mode 100644
index 82bb3228a..000000000
--- a/assuan/assuan-pipe-server.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* assuan-pipe-server.c - Assuan server working over a pipe
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "assuan-defs.h"
-
-static void
-deinit_pipe_server (ASSUAN_CONTEXT ctx)
-{
- /* nothing to do for this simple server */
-}
-
-static int
-accept_connection (ASSUAN_CONTEXT ctx)
-{
- /* This is a NOP for a pipe server */
- return 0;
-}
-
-static int
-finish_connection (ASSUAN_CONTEXT ctx)
-{
- /* This is a NOP for a pipe server */
- return 0;
-}
-
-
-/* Create a new context. Note that the handlers are set up for a pipe
- server/client - this way we don't need extra dummy functions */
-int
-_assuan_new_context (ASSUAN_CONTEXT *r_ctx)
-{
- ASSUAN_CONTEXT ctx;
- int rc;
-
- *r_ctx = NULL;
- ctx = xtrycalloc (1, sizeof *ctx);
- if (!ctx)
- return ASSUAN_Out_Of_Core;
- ctx->input_fd = -1;
- ctx->output_fd = -1;
-
- ctx->inbound.fd = -1;
- ctx->outbound.fd = -1;
-
- ctx->listen_fd = -1;
- ctx->client_pid = (pid_t)-1;
- /* use the pipe server handler as a default */
- ctx->deinit_handler = deinit_pipe_server;
- ctx->accept_handler = accept_connection;
- ctx->finish_handler = finish_connection;
-
- rc = _assuan_register_std_commands (ctx);
- if (rc)
- xfree (ctx);
- else
- *r_ctx = ctx;
- return rc;
-}
-
-
-
-int
-assuan_init_pipe_server (ASSUAN_CONTEXT *r_ctx, int filedes[2])
-{
- int rc;
-
- rc = _assuan_new_context (r_ctx);
- if (!rc)
- {
- ASSUAN_CONTEXT ctx = *r_ctx;
-
- ctx->is_server = 1;
- ctx->inbound.fd = filedes[0];
- ctx->outbound.fd = filedes[1];
- ctx->pipe_mode = 1;
- }
- return rc;
-}
-
-
-void
-_assuan_release_context (ASSUAN_CONTEXT ctx)
-{
- if (ctx)
- {
- xfree (ctx->hello_line);
- xfree (ctx->okay_line);
- xfree (ctx);
- }
-}
-
-void
-assuan_deinit_server (ASSUAN_CONTEXT ctx)
-{
- if (ctx)
- {
- /* We use this function pointer to avoid linking other server
- when not needed but still allow for a generic deinit function */
- ctx->deinit_handler (ctx);
- ctx->deinit_handler = NULL;
- _assuan_release_context (ctx);
- }
-}
diff --git a/assuan/assuan-socket-connect.c b/assuan/assuan-socket-connect.c
deleted file mode 100644
index 53f4a02d0..000000000
--- a/assuan/assuan-socket-connect.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* assuan-socket-connect.c - Assuan socket based client
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-#include "assuan-defs.h"
-
-#ifdef HAVE_JNLIB_LOGGING
-#include "../jnlib/logging.h"
-#define LOGERROR(a) log_error ((a))
-#define LOGERROR1(a,b) log_error ((a), (b))
-#define LOGERROR2(a,b,c) log_error ((a), (b), (c))
-#define LOGERRORX(a) log_printf ((a))
-#else
-#define LOGERROR(a) fprintf (stderr, (a))
-#define LOGERROR1(a,b) fprintf (stderr, (a), (b))
-#define LOGERROR2(a,b,c) fprintf (stderr, (a), (b), (c))
-#define LOGERRORX(a) fputs ((a), stderr)
-#endif
-
-
-
-static int
-do_finish (ASSUAN_CONTEXT ctx)
-{
- if (ctx->inbound.fd != -1)
- {
- close (ctx->inbound.fd);
- }
- ctx->inbound.fd = -1;
- ctx->outbound.fd = -1;
- return 0;
-}
-
-static void
-do_deinit (ASSUAN_CONTEXT ctx)
-{
- do_finish (ctx);
-}
-
-
-
-/* Make a connection to the Unix domain socket NAME and return a new
- Assuan context in CTX. SERVER_PID is currently not used but may
- becode handy in future. */
-AssuanError
-assuan_socket_connect (ASSUAN_CONTEXT *r_ctx,
- const char *name, pid_t server_pid)
-{
- AssuanError err;
- ASSUAN_CONTEXT ctx;
- int fd;
- struct sockaddr_un srvr_addr;
- size_t len;
-
- if (!r_ctx || !name)
- return ASSUAN_Invalid_Value;
- *r_ctx = NULL;
-
- /* we require that the name starts with a slash, so that we can
- alter reuse this function for other socket types */
- if (*name != '/')
- return ASSUAN_Invalid_Value;
- if (strlen (name)+1 >= sizeof srvr_addr.sun_path)
- return ASSUAN_Invalid_Value;
-
- err = _assuan_new_context (&ctx);
- if (err)
- return err;
- ctx->pid = server_pid; /* save it in case we need it later */
- ctx->deinit_handler = do_deinit;
- ctx->finish_handler = do_finish;
-
- fd = socket (AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- {
- LOGERROR1 ("can't create socket: %s\n", strerror (errno));
- _assuan_release_context (ctx);
- return ASSUAN_General_Error;
- }
-
- memset (&srvr_addr, 0, sizeof srvr_addr );
- srvr_addr.sun_family = AF_UNIX;
- strcpy (srvr_addr.sun_path, name);
- len = (offsetof (struct sockaddr_un, sun_path)
- + strlen (srvr_addr.sun_path) + 1);
-
- if (connect (fd, (struct sockaddr*)&srvr_addr, len) == -1)
- {
- LOGERROR2 ("can't connect to `%s': %s\n", name, strerror (errno));
- _assuan_release_context (ctx);
- close (fd );
- return ASSUAN_Connect_Failed;
- }
-
- ctx->inbound.fd = fd;
- ctx->outbound.fd = fd;
-
- /* initial handshake */
- {
- int okay, off;
-
- err = _assuan_read_from_server (ctx, &okay, &off);
- if (err)
- {
- LOGERROR1 ("can't connect server: %s\n", assuan_strerror (err));
- }
- else if (okay != 1)
- {
- LOGERROR ("can't connect server: `");
- _assuan_log_sanitized_string (ctx->inbound.line);
- LOGERRORX ("'\n");
- err = ASSUAN_Connect_Failed;
- }
- }
-
- if (err)
- {
- assuan_disconnect (ctx);
- }
- else
- *r_ctx = ctx;
- return 0;
-}
-
-
diff --git a/assuan/assuan-socket-server.c b/assuan/assuan-socket-server.c
deleted file mode 100644
index bfa9cfa79..000000000
--- a/assuan/assuan-socket-server.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* assuan-socket-server.c - Assuan socket based server
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-#include "assuan-defs.h"
-
-static int
-accept_connection_bottom (ASSUAN_CONTEXT ctx)
-{
- int fd = ctx->connected_fd;
-
- ctx->client_pid = (pid_t)-1;
-#ifdef HAVE_SO_PEERCRED
- {
- struct ucred cr;
- int cl = sizeof cr;
-
- if ( !getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl) )
- ctx->client_pid = cr.pid;
- }
-#endif
-
- ctx->inbound.fd = fd;
- ctx->inbound.eof = 0;
- ctx->inbound.linelen = 0;
- ctx->inbound.attic.linelen = 0;
- ctx->inbound.attic.pending = 0;
-
- ctx->outbound.fd = fd;
- ctx->outbound.data.linelen = 0;
- ctx->outbound.data.error = 0;
-
- ctx->confidential = 0;
-
- return 0;
-}
-
-
-static int
-accept_connection (ASSUAN_CONTEXT ctx)
-{
- int fd;
- struct sockaddr_un clnt_addr;
- size_t len = sizeof clnt_addr;
-
- ctx->client_pid = (pid_t)-1;
- fd = accept (ctx->listen_fd, (struct sockaddr*)&clnt_addr, &len );
- if (fd == -1)
- {
- ctx->os_errno = errno;
- return ASSUAN_Accept_Failed;
- }
-
- ctx->connected_fd = fd;
- return accept_connection_bottom (ctx);
-}
-
-static int
-finish_connection (ASSUAN_CONTEXT ctx)
-{
- if (ctx->inbound.fd != -1)
- {
- close (ctx->inbound.fd);
- }
- ctx->inbound.fd = -1;
- ctx->outbound.fd = -1;
- return 0;
-}
-
-
-static void
-deinit_socket_server (ASSUAN_CONTEXT ctx)
-{
- finish_connection (ctx);
-}
-
-
-
-/* Initialize a server for the socket LISTEN_FD which has already be
- put into listen mode */
-int
-assuan_init_socket_server (ASSUAN_CONTEXT *r_ctx, int listen_fd)
-{
- ASSUAN_CONTEXT ctx;
- int rc;
-
- *r_ctx = NULL;
- ctx = xtrycalloc (1, sizeof *ctx);
- if (!ctx)
- return ASSUAN_Out_Of_Core;
- ctx->is_server = 1;
- ctx->input_fd = -1;
- ctx->output_fd = -1;
-
- ctx->inbound.fd = -1;
- ctx->outbound.fd = -1;
-
- ctx->listen_fd = listen_fd;
- ctx->connected_fd = -1;
- ctx->deinit_handler = deinit_socket_server;
- ctx->accept_handler = accept_connection;
- ctx->finish_handler = finish_connection;
-
- rc = _assuan_register_std_commands (ctx);
- if (rc)
- xfree (ctx);
- else
- *r_ctx = ctx;
- return rc;
-}
-
-/* Initialize a server using the already accepted socket FD. */
-int
-assuan_init_connected_socket_server (ASSUAN_CONTEXT *r_ctx, int fd)
-{
- ASSUAN_CONTEXT ctx;
- int rc;
-
- *r_ctx = NULL;
- ctx = xtrycalloc (1, sizeof *ctx);
- if (!ctx)
- return ASSUAN_Out_Of_Core;
- ctx->is_server = 1;
- ctx->pipe_mode = 1; /* we wan't a second accept to indicate EOF */
- ctx->input_fd = -1;
- ctx->output_fd = -1;
-
- ctx->inbound.fd = -1;
- ctx->outbound.fd = -1;
-
- ctx->listen_fd = -1;
- ctx->connected_fd = fd;
- ctx->deinit_handler = deinit_socket_server;
- ctx->accept_handler = accept_connection_bottom;
- ctx->finish_handler = finish_connection;
-
- rc = _assuan_register_std_commands (ctx);
- if (rc)
- xfree (ctx);
- else
- *r_ctx = ctx;
- return rc;
-}
-
-
diff --git a/assuan/assuan-util.c b/assuan/assuan-util.c
deleted file mode 100644
index a335b09f7..000000000
--- a/assuan/assuan-util.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* assuan-util.c - Utility functions for Assuan
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "assuan-defs.h"
-
-#ifdef HAVE_JNLIB_LOGGING
-#include "../jnlib/logging.h"
-#endif
-
-ssize_t (*_assuan_read_wrapper)(int,void*,size_t) = NULL;
-ssize_t (*_assuan_write_wrapper)(int,const void*,size_t) = NULL;
-
-
-static void *(*alloc_func)(size_t n) = malloc;
-static void *(*realloc_func)(void *p, size_t n) = realloc;
-static void (*free_func)(void*) = free;
-
-
-
-void
-assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
- void *(*new_realloc_func)(void *p, size_t n),
- void (*new_free_func)(void*) )
-{
- alloc_func = new_alloc_func;
- realloc_func = new_realloc_func;
- free_func = new_free_func;
-}
-
-void *
-_assuan_malloc (size_t n)
-{
- return alloc_func (n);
-}
-
-void *
-_assuan_realloc (void *a, size_t n)
-{
- return realloc_func (a, n);
-}
-
-void *
-_assuan_calloc (size_t n, size_t m)
-{
- void *p = _assuan_malloc (n*m);
- if (p)
- memset (p, 0, n* m);
- return p;
-}
-
-void
-_assuan_free (void *p)
-{
- if (p)
- free_func (p);
-}
-
-/* For use with Pth it is required to have special read and write
- functions. We can't assume an ELF based system so we have to
- explicitly set them if we are going to use Pth. */
-void
-assuan_set_io_func (ssize_t (*r)(int,void*,size_t),
- ssize_t (*w)(int,const void*,size_t))
-{
- _assuan_read_wrapper = r;
- _assuan_write_wrapper = w;
-}
-
-
-
-/* Store the error in the context so that the error sending function
- can take out a descriptive text. Inside the assuan code, use the
- macro set_error instead of this function. */
-int
-assuan_set_error (ASSUAN_CONTEXT ctx, int err, const char *text)
-{
- ctx->err_no = err;
- ctx->err_str = text;
- return err;
-}
-
-void
-assuan_set_pointer (ASSUAN_CONTEXT ctx, void *pointer)
-{
- if (ctx)
- ctx->user_pointer = pointer;
-}
-
-void *
-assuan_get_pointer (ASSUAN_CONTEXT ctx)
-{
- return ctx? ctx->user_pointer : NULL;
-}
-
-
-void
-assuan_set_log_stream (ASSUAN_CONTEXT ctx, FILE *fp)
-{
- if (ctx)
- {
- if (ctx->log_fp)
- fflush (ctx->log_fp);
- ctx->log_fp = fp;
- }
-}
-
-
-void
-assuan_begin_confidential (ASSUAN_CONTEXT ctx)
-{
- if (ctx)
- {
- ctx->confidential = 1;
- }
-}
-
-void
-assuan_end_confidential (ASSUAN_CONTEXT ctx)
-{
- if (ctx)
- {
- ctx->confidential = 0;
- }
-}
-
-void
-_assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length)
-{
- const unsigned char *s;
- int n;
-
- for (n=length,s=buffer; n; n--, s++)
- {
- if (*s < ' ' || (*s >= 0x7f && *s <= 0xa0))
- break;
- }
- s = buffer;
- if (!n && *s != '[')
- fwrite (buffer, length, 1, fp);
- else
- {
- putc ('[', fp);
- for (n=0; n < length; n++, s++)
- fprintf (fp, " %02x", *s);
- putc (' ', fp);
- putc (']', fp);
- }
-}
-
-
-/* print a user supplied string after filtering out potential bad
- characters*/
-void
-_assuan_log_sanitized_string (const char *string)
-{
- const unsigned char *s = string;
-#ifdef HAVE_JNLIB_LOGGING
- FILE *fp = log_get_stream ();
-#else
- FILE *fp = stderr;
-#endif
-
- for (; *s; s++)
- {
- if (*s < 0x20 || (*s >= 0x7f && *s <= 0xa0))
- {
- putc ('\\', fp);
- if (*s == '\n')
- putc ('n', fp);
- else if (*s == '\r')
- putc ('r', fp);
- else if (*s == '\f')
- putc ('f', fp);
- else if (*s == '\v')
- putc ('v', fp);
- else if (*s == '\b')
- putc ('b', fp);
- else if (!*s)
- putc ('0', fp);
- else
- fprintf (fp, "x%02x", *s );
- }
- else
- putc (*s, fp);
- }
-}
-
-
diff --git a/assuan/assuan.h b/assuan/assuan.h
deleted file mode 100644
index 51f648a3a..000000000
--- a/assuan/assuan.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/* assuan.c - Definitions for the Assuan protocol
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef ASSUAN_H
-#define ASSUAN_H
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <unistd.h> /* for ssize_t */
-
-#ifdef __cplusplus
-extern "C" {
-#if 0
- }
-#endif
-#endif
-
-typedef enum {
- ASSUAN_No_Error = 0,
- ASSUAN_General_Error = 1,
- ASSUAN_Out_Of_Core = 2,
- ASSUAN_Invalid_Value = 3,
- ASSUAN_Timeout = 4,
- ASSUAN_Read_Error = 5,
- ASSUAN_Write_Error = 6,
- ASSUAN_Problem_Starting_Server = 7,
- ASSUAN_Not_A_Server = 8,
- ASSUAN_Not_A_Client = 9,
- ASSUAN_Nested_Commands = 10,
- ASSUAN_Invalid_Response = 11,
- ASSUAN_No_Data_Callback = 12,
- ASSUAN_No_Inquire_Callback = 13,
- ASSUAN_Connect_Failed = 14,
- ASSUAN_Accept_Failed = 15,
-
- /* error codes above 99 are meant as status codes */
- ASSUAN_Not_Implemented = 100,
- ASSUAN_Server_Fault = 101,
- ASSUAN_Invalid_Command = 102,
- ASSUAN_Unknown_Command = 103,
- ASSUAN_Syntax_Error = 104,
- ASSUAN_Parameter_Error = 105,
- ASSUAN_Parameter_Conflict = 106,
- ASSUAN_Line_Too_Long = 107,
- ASSUAN_Line_Not_Terminated = 108,
- ASSUAN_No_Input = 109,
- ASSUAN_No_Output = 110,
- ASSUAN_Canceled = 111,
- ASSUAN_Unsupported_Algorithm = 112,
- ASSUAN_Server_Resource_Problem = 113,
- ASSUAN_Server_IO_Error = 114,
- ASSUAN_Server_Bug = 115,
- ASSUAN_No_Data_Available = 116,
- ASSUAN_Invalid_Data = 117,
- ASSUAN_Unexpected_Command = 118,
- ASSUAN_Too_Much_Data = 119,
- ASSUAN_Inquire_Unknown = 120,
- ASSUAN_Inquire_Error = 121,
- ASSUAN_Invalid_Option = 122,
- ASSUAN_Invalid_Index = 123,
- ASSUAN_Unexpected_Status = 124,
- ASSUAN_Unexpected_Data = 125,
- ASSUAN_Invalid_Status = 126,
-
- ASSUAN_Not_Confirmed = 128,
-
- ASSUAN_Bad_Certificate = 201,
- ASSUAN_Bad_Certificate_Chain = 202,
- ASSUAN_Missing_Certificate = 203,
- ASSUAN_Bad_Signature = 204,
- ASSUAN_No_Agent = 205,
- ASSUAN_Agent_Error = 206,
- ASSUAN_No_Public_Key = 207,
- ASSUAN_No_Secret_Key = 208,
- ASSUAN_Invalid_Name = 209,
-
- ASSUAN_Cert_Revoked = 301,
- ASSUAN_No_CRL_For_Cert = 302,
- ASSUAN_CRL_Too_Old = 303,
- ASSUAN_Not_Trusted = 304,
-
- ASSUAN_Card_Error = 401,
- ASSUAN_Invalid_Card = 402,
- ASSUAN_No_PKCS15_App = 403,
- ASSUAN_Card_Not_Present = 404,
- ASSUAN_Invalid_Id = 405
-
-} AssuanError;
-
-/* This is a list of pre-registered ASSUAN commands */
-typedef enum {
- ASSUAN_CMD_NOP = 0,
- ASSUAN_CMD_CANCEL, /* cancel the current request */
- ASSUAN_CMD_BYE,
- ASSUAN_CMD_AUTH,
- ASSUAN_CMD_RESET,
- ASSUAN_CMD_OPTION,
- ASSUAN_CMD_DATA,
- ASSUAN_CMD_END,
- ASSUAN_CMD_INPUT,
- ASSUAN_CMD_OUTPUT,
-
- ASSUAN_CMD_USER = 256 /* Other commands should be used with this offset*/
-} AssuanCommand;
-
-#define ASSUAN_LINELENGTH 1002 /* 1000 + [CR,]LF */
-
-struct assuan_context_s;
-typedef struct assuan_context_s *ASSUAN_CONTEXT;
-
-/*-- assuan-handler.c --*/
-int assuan_register_command (ASSUAN_CONTEXT ctx,
- int cmd_id, const char *cmd_string,
- int (*handler)(ASSUAN_CONTEXT, char *));
-int assuan_register_bye_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT));
-int assuan_register_reset_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT));
-int assuan_register_cancel_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT));
-int assuan_register_input_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT, const char *));
-int assuan_register_output_notify (ASSUAN_CONTEXT ctx,
- void (*fnc)(ASSUAN_CONTEXT, const char *));
-
-int assuan_register_option_handler (ASSUAN_CONTEXT ctx,
- int (*fnc)(ASSUAN_CONTEXT,
- const char*, const char*));
-
-int assuan_process (ASSUAN_CONTEXT ctx);
-int assuan_process_next (ASSUAN_CONTEXT ctx);
-int assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
- int *fdarray, int fdarraysize);
-
-
-FILE *assuan_get_data_fp (ASSUAN_CONTEXT ctx);
-AssuanError assuan_set_okay_line (ASSUAN_CONTEXT ctx, const char *line);
-void assuan_write_status (ASSUAN_CONTEXT ctx,
- const char *keyword, const char *text);
-
-
-/*-- assuan-listen.c --*/
-AssuanError assuan_set_hello_line (ASSUAN_CONTEXT ctx, const char *line);
-AssuanError assuan_accept (ASSUAN_CONTEXT ctx);
-int assuan_get_input_fd (ASSUAN_CONTEXT ctx);
-int assuan_get_output_fd (ASSUAN_CONTEXT ctx);
-AssuanError assuan_close_input_fd (ASSUAN_CONTEXT ctx);
-AssuanError assuan_close_output_fd (ASSUAN_CONTEXT ctx);
-
-
-/*-- assuan-pipe-server.c --*/
-int assuan_init_pipe_server (ASSUAN_CONTEXT *r_ctx, int filedes[2]);
-void assuan_deinit_server (ASSUAN_CONTEXT ctx);
-
-/*-- assuan-socket-server.c --*/
-int assuan_init_socket_server (ASSUAN_CONTEXT *r_ctx, int listen_fd);
-int assuan_init_connected_socket_server (ASSUAN_CONTEXT *r_ctx, int fd);
-
-
-/*-- assuan-pipe-connect.c --*/
-AssuanError assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name,
- char *const argv[], int *fd_child_list);
-/*-- assuan-socket-connect.c --*/
-AssuanError assuan_socket_connect (ASSUAN_CONTEXT *ctx, const char *name,
- pid_t server_pid);
-
-/*-- assuan-connect.c --*/
-void assuan_disconnect (ASSUAN_CONTEXT ctx);
-pid_t assuan_get_pid (ASSUAN_CONTEXT ctx);
-
-/*-- assuan-client.c --*/
-AssuanError
-assuan_transact (ASSUAN_CONTEXT ctx,
- const char *command,
- AssuanError (*data_cb)(void *, const void *, size_t),
- void *data_cb_arg,
- AssuanError (*inquire_cb)(void*, const char *),
- void *inquire_cb_arg,
- AssuanError (*status_cb)(void*, const char *),
- void *status_cb_arg);
-
-
-/*-- assuan-inquire.c --*/
-AssuanError assuan_inquire (ASSUAN_CONTEXT ctx, const char *keyword,
- char **r_buffer, size_t *r_length, size_t maxlen);
-
-/*-- assuan-buffer.c --*/
-AssuanError assuan_read_line (ASSUAN_CONTEXT ctx,
- char **line, size_t *linelen);
-int assuan_pending_line (ASSUAN_CONTEXT ctx);
-AssuanError assuan_write_line (ASSUAN_CONTEXT ctx, const char *line );
-AssuanError assuan_send_data (ASSUAN_CONTEXT ctx,
- const void *buffer, size_t length);
-
-
-/*-- assuan-util.c --*/
-void assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
- void *(*new_realloc_func)(void *p, size_t n),
- void (*new_free_func)(void*) );
-void assuan_set_io_func (ssize_t (*r)(int,void*,size_t),
- ssize_t (*w)(int,const void*,size_t));
-void assuan_set_log_stream (ASSUAN_CONTEXT ctx, FILE *fp);
-int assuan_set_error (ASSUAN_CONTEXT ctx, int err, const char *text);
-void assuan_set_pointer (ASSUAN_CONTEXT ctx, void *pointer);
-void *assuan_get_pointer (ASSUAN_CONTEXT ctx);
-
-void assuan_begin_confidential (ASSUAN_CONTEXT ctx);
-void assuan_end_confidential (ASSUAN_CONTEXT ctx);
-
-/*-- assuan-errors.c (built) --*/
-const char *assuan_strerror (AssuanError err);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*ASSUAN_H*/
diff --git a/assuan/mkerrors b/assuan/mkerrors
deleted file mode 100755
index d0c59ff38..000000000
--- a/assuan/mkerrors
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/sh
-# mkerrors - Extract error strings from assuan.h
-# and create C source for assuan_strerror
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of Assuan.
-#
-# Assuan is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# Assuan is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-cat <<EOF
-/* Generated automatically by mkerrors */
-/* Do not edit! */
-
-#include <stdio.h>
-#include "assuan.h"
-
-/**
- * assuan_strerror:
- * @err: Error code
- *
- * This function returns a textual representaion of the given
- * errorcode. If this is an unknown value, a string with the value
- * is returned (Beware: it is hold in a static buffer).
- *
- * Return value: String with the error description.
- **/
-const char *
-assuan_strerror (AssuanError err)
-{
- const char *s;
- static char buf[25];
-
- switch (err)
- {
-EOF
-
-awk '
-/ASSUAN_No_Error/ { okay=1 }
-!okay {next}
-/}/ { exit 0 }
-/ASSUAN_[A-Za-z_]*/ { print_code($1) }
-
-
-function print_code( s )
-{
-printf " case %s: s=\"", s ;
-gsub(/_/, " ", s );
-printf "%s\"; break;\n", tolower(substr(s,8));
-}
-'
-
-cat <<EOF
- default: sprintf (buf, "ec=%d", err ); s=buf; break;
- }
-
- return s;
-}
-
-EOF
\ No newline at end of file
diff --git a/checks/ChangeLog b/checks/ChangeLog
deleted file mode 100644
index 3bb786325..000000000
--- a/checks/ChangeLog
+++ /dev/null
@@ -1,171 +0,0 @@
-2002-05-10 Werner Koch <wk@gnupg.org>
-
- * Makefile.am: Add gpg_dearmor to all targets where it is used.
- Noted by Andreas Haumer.
-
-2002-04-19 Werner Koch <wk@gnupg.org>
-
- * signencrypt-dsa.test, sigs-dsa.test: Don't check with MD5 as
- this is not valid with DSA signatures.
-
-2001-12-22 Werner Koch <wk@gnupg.org>
-
- * options.in: Add no-permission-warning.
-
-2001-12-21 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (distclean-local): prefix mkdemodirs with srcdir
- (DISTCLEANFILES): Add random_seed.
-
-2001-12-19 Werner Koch <wk@gnupg.org>
-
- * options.in: Remove load-extension tiger
- * Makefile.am (./options): append it if there is such a module.
-
-2001-10-23 Werner Koch <wk@gnupg.org>
-
- * defs.inc, Makefile.am: Do not use $srcdir when invoking gpg.
- Write the logfile to the current directory.
-
-2001-09-28 Werner Koch <wk@gnupg.org>
-
- * defs.inc: Write a log file for each test.
- * run-gpg, run-gpgm, run-gpg.patterns: Removed. Replaced in all
- tests by a simple macro from defs.inc.
- * Makefile.am (CLEANFILES): Remove log files.
- (./gpg_dearmor): create it and use it instead of the macro.
- This is needed in multisig.test due to IFS tricks.
-
- * armsignencrypt.test, signencrypt-dsa.test, signencrypt.test,
- armencryptp.test, armencrypt.test, encryptp.test, seat.test,
- encrypt-dsa.test, encrypt.test: Use --always-trust because the
- test are not designed to check the validity.
-
-2001-09-06 Werner Koch <wk@gnupg.org>
-
- * genkey1024.test: Simplified by using a parameter file.
-
-2001-05-30 Werner Koch <wk@gnupg.org>
-
- * multisig.test (IFS): Reset IFS just before the test.
-
-2001-04-30 Werner Koch <wk@gnupg.org>
-
- * multisig.test: Add an set +x to avoid ksh problems
-
-2001-04-28 Werner Koch <wk@gnupg.org>
-
- * run-gpg.patterns: a v3 test key expired yesterday, suppress the
- messages.
-
-2001-03-27 Werner Koch <wk@gnupg.org>
-
- * defs.inc: Removed creation of options file.
- * options.in: New.
- * Makefile.am: Create options file and fixed import of pubdemo.asc.
-
- * run-gpg.patterns (gpg): Add some more patterns.
-
-2001-03-20 Werner Koch <wk@gnupg.org>
-
- * Makefile.am: Import the pubdemo.asc file
-
- * sigs.test (hash_algo_list): s/tiger/tiger192/
-
-2001-03-19 Werner Koch <wk@gnupg.org>
-
- * mkdemodirs (GPGDEMO): Add --allow-secret-key-import to all gpg
- invocations. Use echon -n instead of an argument with \c.
-
-2001-02-12 Werner Koch <wk@gnupg.org>
-
- * multisig.test: new
- * Makefile.am (TESTS): Added.
-
-2000-10-18 Werner Koch <wk@gnupg.org>
-
- * conventional-mdc.test: Add Rijndael and fix for empty plain texts.
-
-Thu Feb 10 17:39:44 CET 2000 Werner Koch <wk@gnupg.de>
-
- * mkdemodirs: Fixed the --clean loop.
-
-Thu Jan 13 19:31:58 CET 2000 Werner Koch <wk@gnupg.de>
-
- * defs.inc (chdir): Removed becuase it is unsused an plain old sh
- does not like this name. Reported by Alec Habig.
-
-Tue Oct 26 20:02:23 1999 Werner Koch (wk@gnupg.org)
-
- * Makefile.am (GPG_DEARMOR): New and use --no-options.
-
-Tue Aug 31 17:20:44 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * defs.inc: set LC_ALL empty
-
-Wed Aug 4 10:34:18 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * defs.inc (echo_n): New and used instead of /bin/echo "\c"
-
-Sun Apr 18 10:11:28 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mkdemodirs: New
- * signdemokey: New.
- * Makefile.am (distclean-local): New.
-
-Wed Mar 17 13:09:03 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mds.test: replaced the "echo -n"
-
-Mon Mar 8 20:47:17 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pubdemo.asc, secdemo.asc: New.
-
-Fri Feb 19 15:49:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * genkey1024.test: Be really quiet.
-
-1999-01-01 Geoff Keating <geoffk@ozemail.com.au>
-
- * Makefile.am (CLEANFILES): Also delete trustdb and any leftover
- lockfiles.
-
-Fri Nov 27 15:30:24 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * clearsig.test: Some more test cases.
-
-Sun Oct 25 18:19:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mds.test: Check whether TIGER is available.
- * sigs.tesr: Ditto.
-
-Wed Sep 23 12:25:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * run-gpg.patterns: New (because Solaris fgrep does not like -f -).
-
-Mon Aug 10 21:33:38 1998 Werner Koch (wk@(none))
-
- * genkey1024.test: Ariel fixed this.
-
-Wed Jul 8 10:43:47 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seat.test: New.
-
-Mon May 18 15:40:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am: Now uses mk-tdata to produce random test data.
-
- * ChangeLog: New.
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/checks/Makefile.am b/checks/Makefile.am
deleted file mode 100644
index ed779a432..000000000
--- a/checks/Makefile.am
+++ /dev/null
@@ -1,107 +0,0 @@
-# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-# Process this file with automake to create Makefile.in
-
-GPG_IMPORT = ../g10/gpg --homedir . --quiet --yes --import
-
-TESTS = version.test mds.test \
- decrypt.test decrypt-dsa.test \
- sigs.test sigs-dsa.test \
- encrypt.test encrypt-dsa.test \
- seat.test clearsig.test encryptp.test detach.test \
- armsigs.test armencrypt.test armencryptp.test \
- signencrypt.test signencrypt-dsa.test \
- armsignencrypt.test armdetach.test \
- armdetachm.test detachm.test genkey1024.test \
- conventional.test conventional-mdc.test \
- multisig.test
-
-
-TEST_FILES = pubring.asc secring.asc plain-1o.asc plain-2o.asc plain-3o.asc \
- plain-1.asc plain-2.asc plain-3.asc plain-1-pgp.asc \
- pubring.pkr.asc secring.skr.asc secdemo.asc pubdemo.asc options.in
-
-DATA_FILES = data-500 data-9000 data-32000 data-80000 plain-large
-
-EXTRA_DIST = defs.inc $(TESTS) $(TEST_FILES) \
- mkdemodirs signdemokey
-CLEANFILES = prepared.stamp x y yy z out err $(DATA_FILES) \
- plain-1 plain-2 plain-3 trustdb.gpg *.lock .\#lk* \
- *.test.log options gpg_dearmor \
- pubring.gpg secring.gpg pubring.pkr secring.skr
-DISTCLEANFILES = pubring.gpg~ random_seed
-
-
-all-local: prepared.stamp
-
-distclean-local:
- $(srcdir)/mkdemodirs --clean
-
-prepared.stamp: ./pubring.gpg ./secring.gpg ./plain-1 ./plain-2 ./plain-3 \
- ./pubring.pkr ./secring.skr ./options ./gpg_dearmor \
- $(DATA_FILES)
- $(GPG_IMPORT) $(srcdir)/pubdemo.asc
- echo timestamp >./prepared.stamp
-
-./options: $(srcdir)/options.in
- cat $(srcdir)/options.in >./options
- @set -e; if echo "@DYNAMIC_CIPHER_MODS@" |grep tiger >/dev/null ;then \
- echo load-extension ../cipher/tiger >>./options; fi
-
-./gpg_dearmor:
- echo '#!/bin/sh' >./gpg_dearmor
- echo "../g10/gpg --no-options --no-greeting \
- --no-secmem-warning --batch --dearmor" >>./gpg_dearmor
- chmod 755 ./gpg_dearmor
-
-./pubring.gpg: $(srcdir)/pubring.asc $(srcdir)/pubdemo.asc ./gpg_dearmor
- ./gpg_dearmor > ./pubring.gpg < $(srcdir)/pubring.asc
-
-./secring.gpg: $(srcdir)/secring.asc ./gpg_dearmor
- ./gpg_dearmor > ./secring.gpg < $(srcdir)/secring.asc
-
-./pubring.pkr: $(srcdir)/pubring.pkr.asc ./gpg_dearmor
- ./gpg_dearmor > ./pubring.pkr < $(srcdir)/pubring.pkr.asc
-
-./secring.skr: $(srcdir)/secring.skr.asc ./gpg_dearmor
- ./gpg_dearmor > ./secring.skr < $(srcdir)/secring.skr.asc
-
-./plain-1: $(srcdir)/plain-1o.asc ./gpg_dearmor
- ./gpg_dearmor > ./plain-1 < $(srcdir)/plain-1o.asc
-
-./plain-2: $(srcdir)/plain-2o.asc ./gpg_dearmor
- ./gpg_dearmor > ./plain-2 < $(srcdir)/plain-2o.asc
-
-./plain-3: $(srcdir)/plain-3o.asc ./gpg_dearmor
- ./gpg_dearmor > ./plain-3 < $(srcdir)/plain-3o.asc
-
-
-data-500:
- ../tools/mk-tdata 500 >data-500
-data-9000:
- ../tools/mk-tdata 9000 >data-9000
-data-32000:
- ../tools/mk-tdata 32000 >data-32000
-data-80000:
- ../tools/mk-tdata 80000 >data-80000
-plain-large:
- cat $(srcdir)/../doc/HACKING \
- $(srcdir)/../doc/DETAILS \
- $(srcdir)/../doc/FAQ >plain-large
-
diff --git a/checks/armdetach.test b/checks/armdetach.test
deleted file mode 100755
index c445d6ce6..000000000
--- a/checks/armdetach.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-
-#info Checking armored detached signatures
-for i in $plain_files $data_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 -sab -o x --yes $i
- $GPG -o /dev/null --yes x <$i || error "$i: bad signature"
-done
-
diff --git a/checks/armdetachm.test b/checks/armdetachm.test
deleted file mode 100755
index f1958424c..000000000
--- a/checks/armdetachm.test
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking armored detached signatures of multiple files
-i="$plain_files $data_files"
-echo "$usrpass1" | $GPG --passphrase-fd 0 -sab -o x --yes $i
-cat $i | $GPG -o /dev/null --yes x || error "$i: bad signature"
-
diff --git a/checks/armencrypt.test b/checks/armencrypt.test
deleted file mode 100755
index 356d1bda7..000000000
--- a/checks/armencrypt.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking armored encryption
-for i in $plain_files $data_files ; do
- $GPG --always-trust -ea -o x --yes -r "$usrname2" $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/armencryptp.test b/checks/armencryptp.test
deleted file mode 100755
index d18c56b7e..000000000
--- a/checks/armencryptp.test
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking armored encryption with a pipe
-for i in $plain_files $data_files ; do
- $GPG --always-trust -ea --yes -r "$usrname2" < $i | tee x | $GPG -o y --yes
- cmp $i y || error "$i: mismatch"
- $GPG --yes < x > y
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/armsignencrypt.test b/checks/armsignencrypt.test
deleted file mode 100755
index 24b9575ad..000000000
--- a/checks/armsignencrypt.test
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-
-#info Checking armored signing and encryption
-for i in $plain_files $data_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 --always-trust \
- -sae -o x --yes -r "$usrname2" $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/armsigs.test b/checks/armsigs.test
deleted file mode 100755
index aecc06429..000000000
--- a/checks/armsigs.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking armored signatures
-for i in $plain_files $data_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 -sa -o x --yes $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/challenge-1 b/checks/challenge-1
deleted file mode 100644
index 6f97880d6..000000000
--- a/checks/challenge-1
+++ /dev/null
@@ -1,42 +0,0 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: RIPEMD160
-
-I promise to delivery 8 bottles of "Füchschen" to the first one who tells me
-the plaintext of the following message or is able to forge the signature
-on this file. Don't try to get my secret key, it does not exist any longer.
-For those who don't know: Füchschen is a beer brewed here in Düsseldorf.
-This promise is valid for 2 years from now (29.5.1998).
-
-
-Good luck,
-
- Werner
-
-
-- -----BEGIN PGP MESSAGE-----
-Version: GNUPG v0.2.19 (GNU/Linux)
-Comment: This is an alpha version!
-
-hQEOA+Pk8EXQYMj+FAP/V8XiybbbGVReNAKbknj9nqaHHVOjPdwBXyOBLRBEC5TiMhe/APmq
-XN3esJ/MU97eN9lZMVBLIwG4/jqzT/g2ULd3rZtWwgcyV1cDehGVun8cp0CbsM6QH8lhItLo
-fEqQ8u44q4ZO9drcswcA24Bn0j9dkX7sbyJTEtipj1LGjoUD/i5+e1sIQEWb5esA1WXIPWVS
-b8e8d/JnH4acQbTFH+1mrE2PtGD18IbM2PdTilcC/l4KNKcyWfsuoJmwoG5x/ciQUhpqn/fW
-WBjH99tbK8kIHSbgQ4FrMhS+I6Z3pH0EbViDC20f7TgZgGShVHUM/0BGcavVdd1vjUK4MZag
-kwJwpwBNGRPSazs8NKyjiAQupIC+xbZG+Qcz67xmOWU92qmfr3h6wrk8JJGsPOynGExJFNKv
-PwKckh3z7surZLhPeDMuZykGcEtFmJJbVBK+cIcAAA==
-=o6Ev
-- -----END PGP MESSAGE-----
-
-
------BEGIN PGP SIGNATURE-----
-Version: GNUPG v0.2.19 (GNU/Linux)
-Comment: This is an alpha version!
-
-iQEXAwUBNW6hBuPk8EXQYMj+FAN5GQP+NhSpe3WmGfWYYQSOM4CxlgNv+EmpDvvDBCmxyKT6
-oVw+YD1b6q0XCkSx5u1b/ykwPbPS8VUxPqEKFBOtVWNQbCfmMRujUtPYWm8eomIHO3k7l0DF
-H8nah5gdwvOheB5YMUfhtuKQRk8/d8QRrsoc44OmB7znkLvQEMMaHxrgb5AD/31/TocHnNj6
-iC61cQrwTDSj2nLFWHn2yQ7uX5j9fBxCJgbQq6Aku17Z6LHDu6FfaMigS9l6s5VT2n4XuzFl
-qV2GMe20HU5JgrprU1cTULtr1yc3KUctnI3tcGt4UoF0Rt/IcPDdPTIcWScmUd01v4x1zVV9
-n6Qxh+yxRMwl+Oo+
-=gI9G
------END PGP SIGNATURE-----
diff --git a/checks/clearsig.test b/checks/clearsig.test
deleted file mode 100755
index 89d323317..000000000
--- a/checks/clearsig.test
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/sh
-
-
-# Fixme: we should not only do a --verify but also the output.
-
-
-
-. $srcdir/defs.inc || exit 3
-
-
-# ======================================
-# I can't compare the out because plain-3 has no LF as last charcater
-# but the output has always one. I do not thinkl this is a bug, because
-# it is clear text and not binary text.
-# ======================================
-for i in $plain_files plain-large ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 -sat -o x --yes $i
- $GPG --verify x
-done
-
-# ======================================
-# and once more to check rfc1991
-# ======================================
-for i in $plain_files plain-large ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 \
- --rfc1991 --digest-algo md5 -sat -o x --yes $i
- $GPG --verify x
-done
-
-# ======================================
-# and one with long lines
-# ======================================
-cat >y <<EOF
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyx
-
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-EOF
-echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y
-$GPG --verify x
-
-# ======================================
-# and one with only one long lines
-# ======================================
-cat >y <<EOF
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyx
-EOF
-echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y
-$GPG --verify x
-# ======================================
-# and one with an empty body
-# ======================================
-cat >y <<EOF
-EOF
-echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y
-$GPG --verify x
-
-# ======================================
-# and one with one empty line at the end
-# ======================================
-cat >y <<EOF
-line 1
-line 2
-line 3
-there is a blank line after this
-
-EOF
-echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y
-$GPG --verify x
-
-
-# ======================================
-# I think this file will be constructed wrong (gpg 0.9.3)
-# but it should verify okay anyway.
-# ======================================
-echo "this is a sig test" >y
-echo_n " " >>y
-echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y
-$GPG --verify x
-
-
-# ======================================
-# check our special diff mode
-# ======================================
-cat >y <<EOF
---- mainproc.c Tue Jun 27 09:28:11 2000
-+++ mainproc.c~ Thu Jun 8 22:50:25 2000
-@@ -1190,16 +1190,13 @@
- md_enable( c->mfx.md, n1->pkt->pkt.signature->digest_algo);
- }
- /* ask for file and hash it */
-- if( c->sigs_only ) {
-+ if( c->sigs_only )
- rc = hash_datafiles( c->mfx.md, NULL,
- c->signed_data, c->sigfilename,
- n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 );
-EOF
-echo "$usrpass1" | $GPG --passphrase-fd 0 \
- --not-dash-escaped --clearsign -o x --yes y
-$GPG --verify x
-
-
-
-
diff --git a/checks/conventional-mdc.test b/checks/conventional-mdc.test
deleted file mode 100755
index 463e0c49f..000000000
--- a/checks/conventional-mdc.test
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking conventional encryption
-for i in 0 1 2 3 9 10 11 19 20 21 22 23 39 40 41 8192 32000 ; do
- for ciph in 3des cast5 blowfish twofish rijndael; do
- # *BSD's dd can't cope with a count of 0
- if test "$i" = "0"; then
- : >z
- else
- dd if=data-80000 of=z bs=1 count=$i 2>/dev/null
- fi
- echo "Hier spricht HAL" | $GPG --passphrase-fd 0 \
- --force-mdc --cipher $ciph -c -o x --yes z
- echo "Hier spricht HAL" | $GPG --passphrase-fd 0 \
- -o y --yes x
- cmp z y || error "$ciph/$i: mismatch"
- done
-done
-
diff --git a/checks/conventional.test b/checks/conventional.test
deleted file mode 100755
index 87aeb9c56..000000000
--- a/checks/conventional.test
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-# temp. hack cause the format for 128 bit blocksize messages may change
-GNUPG_ENABLE_TWOFISH=1
-export GNUPG_ENABLE_TWOFISH
-
-#info Checking conventional encryption
-for i in plain-2 data-32000 ; do
- echo "Hier spricht HAL" | $GPG --passphrase-fd 0 -c -o x --yes $i
- echo "Hier spricht HAL" | $GPG --passphrase-fd 0 -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
-for a in cast5 3des twofish; do
- for i in plain-1 data-80000 ; do
- echo "Hier spricht HAL" | $GPG --passphrase-fd 0 \
- --cipher-algo $a -c -o x --yes $i
- echo "Hier spricht HAL" | $GPG --passphrase-fd 0 -o y --yes x
- cmp $i y || error "$i: ($a) mismatch"
- done
-done
-
diff --git a/checks/decrypt-dsa.test b/checks/decrypt-dsa.test
deleted file mode 100755
index 6dc7dc459..000000000
--- a/checks/decrypt-dsa.test
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking decryption of supplied DSA encrypted file
-for i in "plain-1" ; do
- $GPG $dsa_keyrings -o y --yes $srcdir/$i-pgp.asc
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/decrypt.test b/checks/decrypt.test
deleted file mode 100755
index aab416750..000000000
--- a/checks/decrypt.test
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking decryption of supplied files
-for i in $plain_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 -o y --yes $srcdir/$i.asc
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/defs.inc b/checks/defs.inc
deleted file mode 100755
index 2eb25c7f1..000000000
--- a/checks/defs.inc
+++ /dev/null
@@ -1,106 +0,0 @@
-# definitions for the check scripts
-
-#--------------------------------
-#------ constants ---------------
-#--------------------------------
-
-# Note that usrpass1 is also used in Makefile.am
-usrname1="one"
-usrpass1="def"
-usrname2="two"
-usrpass2=""
-usrname3="three"
-usrpass3="abc"
-
-
-dsa_usrname1="pgp5"
-# we use the sub key because we do not yet have the logic to
-# to derive the first encryption key from a keyblock (I guess)
-dsa_usrname2="0xCB879DE9"
-
-dsa_keyrings="--keyring ./pubring.pkr --secret-keyring ./secring.skr"
-
-
-plain_files="plain-1 plain-2 plain-3"
-data_files="data-500 data-9000 data-32000 data-80000"
-exp_files=""
-
-# The testscripts expect the original language
-LANG=
-LANGUAGE=
-LC_ALL=
-LC_MESSAGES=
-
-#--------------------------------
-#------ utility functions -------
-#--------------------------------
-
-fatal () {
- echo "$pgmname: fatal:" $* >&2
- exit 1;
-}
-
-error () {
- echo "$pgmname:" $* >&2
- exit 1
-}
-
-info () {
- echo "$pgmname:" $* >&2
-}
-
-
-echo_n_init=no
-echo_n () {
- if test "$echo_n_init" = "no"; then
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- echo_n_n=
- echo_n_c='
-'
- else
- echo_n_n='-n'
- echo_n_c=
- fi
- else
- echo_n_n=
- echo_n_c='\c'
- fi
- echo_n_init=yes
- fi
- echo $echo_n_n "${1}$echo_n_c"
-}
-
-
-#cleanup () {
-# rm $cleanup_files 2>/dev/null || true
-# echo "#empty" >./options
-#}
-
-
-#add_cleanup () {
-# cleanup_files="$cleanup_files $*"
-#}
-
-
-have_hash_algo () {
- if ../g10/gpg --homedir . --version | grep "Hash:.*$1" >/dev/null
- then
- true
- else
- false
- fi
-}
-
-set -e
-pgmname=`basename $0`
-#trap cleanup SIGHUP SIGINT SIGQUIT
-
-[ -z "$srcdir" ] && fatal "not called from make"
-
-GPG="../g10/gpg --homedir . "
-
-exec 2> ${pgmname}.log
-
-:
-# end
\ No newline at end of file
diff --git a/checks/detach.test b/checks/detach.test
deleted file mode 100755
index 6a3ae05c5..000000000
--- a/checks/detach.test
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking detached signatures
-for i in $plain_files $data_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 -sb -o x --yes $i
- $GPG -o /dev/null --yes x <$i || error "$i: bad signature"
-done
-
diff --git a/checks/detachm.test b/checks/detachm.test
deleted file mode 100755
index dc60bb239..000000000
--- a/checks/detachm.test
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking detached signatures of multiple files
-i="$plain_files $data_files"
-echo "$usrpass1" | $GPG --passphrase-fd 0 -sb -o x --yes $i
-cat $i | $GPG -o /dev/null --yes x || error "$i: bad signature"
-
diff --git a/checks/encrypt-dsa.test b/checks/encrypt-dsa.test
deleted file mode 100755
index 27891bf01..000000000
--- a/checks/encrypt-dsa.test
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking encryption
-for i in $plain_files $data_files ; do
- $GPG $dsa_keyrings --always-trust -e -o x --yes -r "$dsa_usrname2" $i
- $GPG $dsa_keyrings -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
-# and with cast
-for i in $plain_files $data_files ; do
- $GPG $dsa_keyrings --always-trust --cipher-algo cast5 -e \
- -o x --yes -r "$dsa_usrname2" $i
- $GPG $dsa_keyrings -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/encrypt.test b/checks/encrypt.test
deleted file mode 100755
index 4e5c5c042..000000000
--- a/checks/encrypt.test
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking encryption
-for i in $plain_files $data_files ; do
- $GPG --always-trust -e -o x --yes -r "$usrname2" $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-for i in $plain_files $data_files ; do
- $GPG --always-trust -e -o x --yes -r "$usrname2" --cipher-algo cast5 $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/encryptp.test b/checks/encryptp.test
deleted file mode 100755
index 7df24efec..000000000
--- a/checks/encryptp.test
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking encryption with a pipe
-for i in $plain_files $data_files ; do
- $GPG --always-trust -e --yes -r "$usrname2" <$i | $GPG --yes > y
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/genkey1024.test b/checks/genkey1024.test
deleted file mode 100755
index e9852d7b6..000000000
--- a/checks/genkey1024.test
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-../g10/gpg --quiet --batch --quick-random --homedir . --gen-key <<EOF
-Key-Type: DSA
-Key-Length: 1024
-Subkey-Type: ELG-E
-Subkey-Length: 1024
-Name-Real: Harry H.
-Name-Comment: test key
-Name-Email: hh@@ddorf.de
-Expire-Date: 1
-Passphrase: abc
-%commit
-Key-Type: RSA
-Key-Length: 1024
-Key-Usage: sign,encrypt
-Name-Real: Harry A.
-Name-Comment: RSA test key
-Name-Email: hh@@ddorf.de
-Expire-Date: 2
-Passphrase: abc
-%commit
-EOF
-
diff --git a/checks/mds.test b/checks/mds.test
deleted file mode 100755
index 60a79471c..000000000
--- a/checks/mds.test
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-
-
-. $srcdir/defs.inc || exit 3
-
-
-test_one () {
- if [ "`grep $1 y | sed -e 's/.*=[ ]\(.*\)/\1/' -e 's/ //g'`" != "$2" ]; then
- failed="$failed $1"
- fi
-}
-
-failed=""
-
-#info Checking message digests
-cat /dev/null | $GPG -v --print-mds >y
-test_one "MD5" "D41D8CD98F00B204E9800998ECF8427E"
-test_one "SHA1" "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"
-test_one "RMD160" "9C1185A5C5E9FC54612808977EE8F548B2258D31"
-if have_hash_algo "TIGER"; then
- test_one "TIGER" "24F0130C63AC933216166E76B1BB925FF373DE2D49584E7A"
-else
- echo "Hash algorithm TIGER/192 is not installed"
-fi
-
-[ "$failed" != "" ] && error "$failed failed for empty string"
-
-echo_n "abcdefghijklmnopqrstuvwxyz" | $GPG --print-mds >y
-test_one "MD5" "C3FCD3D76192E4007DFB496CCA67E13B"
-test_one "SHA1" "32D10C7B8CF96570CA04CE37F2A19D84240D3A89"
-test_one "RMD160" "F71C27109C692C1B56BBDCEB5B9D2865B3708DBC"
-if have_hash_algo "TIGER"; then
- test_one "TIGER" "307DE5EE72A414172A0355CCBF120404E9EE7BF32F60110B"
-fi
-
-
-[ "$failed" != "" ] && error "$failed failed for a..z"
-
-exit 0
-
diff --git a/checks/mkdemodirs b/checks/mkdemodirs
deleted file mode 100755
index d6b7d7c4c..000000000
--- a/checks/mkdemodirs
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-
-set -e
-
-GPG="../g10/gpg --batch --quiet --no-secmem-warning --allow-secret-key-import"
-NAMES='Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India
- Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo
- Sierra Tango Uniform Victor Whisky XRay Yankee Zulu'
-
-if [ "$1" = "--clean" ]; then
- (for i in $NAMES; do
- [ -d $i ] && rm -r $i
- done) || true
- exit 0
-fi
-
-$GPG --dearmor -o secdemo.gpg --yes ../checks/secdemo.asc
-$GPG --dearmor -o pubdemo.gpg --yes ../checks/pubdemo.asc
-[ -f ./tdb.tmp ] && rm ./tdb.tmp
-GPGDEMO="$GPG --homedir . --trustdb-name ./tdb.tmp --no-default-keyring
- --keyring pubdemo.gpg --secret-keyring secdemo.gpg"
-echo -n "Creating:"
-for name in $NAMES; do
- echo -n " $name"
- [ -d $name ] && rm -r $name
- mkdir $name
- $GPGDEMO --export-secret-key -o - $name > $name/Secret.gpg
- $GPG --homedir $name --import $name/Secret.gpg
- $GPGDEMO --export -o - $name > $name/Public.gpg
- $GPG --homedir $name --import $name/Public.gpg
- [ -f $name/pubring.gpg~ ] && rm $name/pubring.gpg~
-done
-echo "."
-[ -f ./tdb.tmp ] && rm ./tdb.tmp
-rm pubdemo.gpg secdemo.gpg
-
-
diff --git a/checks/multisig.test b/checks/multisig.test
deleted file mode 100755
index c391f6fdc..000000000
--- a/checks/multisig.test
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/bin/sh
-# Check that gpg verifies only signatures where there is no ambiguity
-# in the order of packets. Needs the Demo Keys Lima and Mike.
-
-. $srcdir/defs.inc || exit 3
-
-# (variable intialization was created using:
-# for i in files; do echo "`echo $i | sed 's,[.-],_,g'`='"; \
-# gpg --no-version --enarmor <$i | grep -v ^Comment:; echo "'" ; done
-# )
-
-sig_1ls1ls_valid='
------BEGIN PGP ARMORED FILE-----
-
-kA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogq9EkgYW0gc29ycnksIEkgY2FuJ3Qg
-ZG8gdGhhdAqIPwMFADqIKvQ3yrUft5ED+BEC2joAoJaSaXOZEtSZqQ780HIXG77e
-8PB7AJ4wCprmaFTO0fBaTcXDuEOBdAWnOZANAwACETfKtR+3kQP4AawnYgV0ZXh0
-MTqIKvRJIGFtIHNvcnJ5LCBJIGNhbid0IGRvIHRoYXQKiD8DBQA6iCr0N8q1H7eR
-A/gRAto6AKCWkmlzmRLUmakO/NByFxu+3vDwewCeMAqa5mhUztHwWk3Fw7hDgXQF
-pzk=
-=8jSC
------END PGP ARMORED FILE-----
-'
-sig_ls_valid='
------BEGIN PGP ARMORED FILE-----
-
-rCdiBXRleHQxOogrS0kgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqI
-K0s3yrUft5ED+BECLQMAn2jZUNOpB4OuurSQkc2TRfg6ek02AJ9+oJS0frQ+yUsT
-QDUFTH2PvZRxjw==
-=J+lb
------END PGP ARMORED FILE-----
-'
-sig_sl_valid='
------BEGIN PGP ARMORED FILE-----
-
-iD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCffqCU
-tH60PslLE0A1BUx9j72UcY+sJ2IFdGV4dDE6iCtLSSBhbSBzb3JyeSwgSSBjYW4n
-dCBkbyB0aGF0Cg==
-=N9MP
------END PGP ARMORED FILE-----
-'
-sig_11lss_valid_but_is_not='
------BEGIN PGP ARMORED FILE-----
-
-kA0DAAIRN8q1H7eRA/gAkA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogyXUkgYW0g
-c29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqIMl03yrUft5ED+BECwQAAnRXT
-mXjVd385oD38W80XuheWKTGcAJ9pZ6/flaKDfw+SLido7xaUHuhp5Yg/AwUAOogy
-XTfKtR+3kQP4EQLBAACgnN0IP+NztE0aAc/DZ17yHWR9diwAniN0P01WmbgZJoZB
-Q341WRXKS/at
-=Ekrs
------END PGP ARMORED FILE-----
-'
-sig_11lss11lss_valid_but_is_not='
------BEGIN PGP ARMORED FILE-----
-
-kA0DAAIRN8q1H7eRA/gAkA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogyXUkgYW0g
-c29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqIMl03yrUft5ED+BECwQAAnRXT
-mXjVd385oD38W80XuheWKTGcAJ9pZ6/flaKDfw+SLido7xaUHuhp5Yg/AwUAOogy
-XTfKtR+3kQP4EQLBAACgnN0IP+NztE0aAc/DZ17yHWR9diwAniN0P01WmbgZJoZB
-Q341WRXKS/atkA0DAAIRN8q1H7eRA/gAkA0DAAIRN8q1H7eRA/gBrCdiBXRleHQx
-OogyXUkgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqIMl03yrUft5ED
-+BECwQAAnRXTmXjVd385oD38W80XuheWKTGcAJ9pZ6/flaKDfw+SLido7xaUHuhp
-5Yg/AwUAOogyXTfKtR+3kQP4EQLBAACgnN0IP+NztE0aAc/DZ17yHWR9diwAniN0
-P01WmbgZJoZBQ341WRXKS/at
-=P1Mu
------END PGP ARMORED FILE-----
-'
-sig_ssl_valid_but_is_not='
------BEGIN PGP ARMORED FILE-----
-
-iD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCffqCU
-tH60PslLE0A1BUx9j72UcY+IPwMFADqIK0s3yrUft5ED+BECLQMAn2jZUNOpB4Ou
-urSQkc2TRfg6ek02AJ9+oJS0frQ+yUsTQDUFTH2PvZRxj6wnYgV0ZXh0MTqIK0tJ
-IGFtIHNvcnJ5LCBJIGNhbid0IGRvIHRoYXQK
-=Zven
------END PGP ARMORED FILE-----
-'
-sig_1lsls_invalid='
------BEGIN PGP ARMORED FILE-----
-
-kA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogq9EkgYW0gc29ycnksIEkgY2FuJ3Qg
-ZG8gdGhhdAqIPwMFADqIKvQ3yrUft5ED+BEC2joAoJaSaXOZEtSZqQ780HIXG77e
-8PB7AJ4wCprmaFTO0fBaTcXDuEOBdAWnOawnYgV0ZXh0MTqIK0tJIGFtIHNvcnJ5
-LCBJIGNhbid0IGRvIHRoYXQKiD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeD
-rrq0kJHNk0X4OnpNNgCffqCUtH60PslLE0A1BUx9j72UcY8=
-=nkeu
------END PGP ARMORED FILE-----
-'
-sig_lsls_invalid='
------BEGIN PGP ARMORED FILE-----
-
-rCdiBXRleHQxOogrS0kgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqI
-K0s3yrUft5ED+BECLQMAn2jZUNOpB4OuurSQkc2TRfg6ek02AJ9+oJS0frQ+yUsT
-QDUFTH2PvZRxj6wnYgV0ZXh0MTqIK0tJIGFtIHNvcnJ5LCBJIGNhbid0IGRvIHRo
-YXQKiD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCf
-fqCUtH60PslLE0A1BUx9j72UcY8=
-=BlZH
------END PGP ARMORED FILE-----
-'
-sig_lss_invalid='
------BEGIN PGP ARMORED FILE-----
-
-rCdiBXRleHQxOogrS0kgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqI
-K0s3yrUft5ED+BECLQMAn2jZUNOpB4OuurSQkc2TRfg6ek02AJ9+oJS0frQ+yUsT
-QDUFTH2PvZRxj4g/AwUAOogrSzfKtR+3kQP4EQItAwCfaNlQ06kHg666tJCRzZNF
-+Dp6TTYAn36glLR+tD7JSxNANQVMfY+9lHGP
-=jmt6
------END PGP ARMORED FILE-----
-'
-sig_slsl_invalid='
------BEGIN PGP ARMORED FILE-----
-
-iD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCffqCU
-tH60PslLE0A1BUx9j72UcY+sJ2IFdGV4dDE6iCtLSSBhbSBzb3JyeSwgSSBjYW4n
-dCBkbyB0aGF0Cog/AwUAOogrSzfKtR+3kQP4EQItAwCfaNlQ06kHg666tJCRzZNF
-+Dp6TTYAn36glLR+tD7JSxNANQVMfY+9lHGPrCdiBXRleHQxOogrS0kgYW0gc29y
-cnksIEkgY2FuJ3QgZG8gdGhhdAo=
-=phBF
------END PGP ARMORED FILE-----
-'
-
-save_IFS="${IFS}"
-IFS=""
-for i in "$sig_1ls1ls_valid" "$sig_ls_valid" "$sig_sl_valid"; do
- echo "$i" | ./gpg_dearmor >x
- IFS="${save_IFS}"
- $GPG --verify x 2>/dev/null || error "valid is invalid"
- IFS=""
-done
-#for i in "$sig_11lss_valid_but_is_not" "$sig_11lss11lss_valid_but_is_not" \
-# "$sig_ssl_valid_but_is_not"; do
-# echo "$i" | $GPG --dearmor >x
-# $GPG --verify <x 2>/dev/null || error "valid is invalid"
-#done
-
-# without the +e ksh seems to terminate the for loop
-set +e
-for i in "$sig_1lsls_invalid" "$sig_lsls_invalid" \
- "$sig_lss_invalid" "$sig_slsl_invalid" ; do
- echo "$i" | ./gpg_dearmor >x
- IFS="${save_IFS}"
- $GPG --verify <x 2>/dev/null && error "invalid is valid"
- IFS=""
-done
-IFS="${save_IFS}"
diff --git a/checks/options.in b/checks/options.in
deleted file mode 100644
index c789164aa..000000000
--- a/checks/options.in
+++ /dev/null
@@ -1,6 +0,0 @@
-no-greeting
-no-secmem-warning
-no-permission-warning
-batch
-emulate-md-encode-bug
-no-auto-check-trustdb
diff --git a/checks/pgp263-test.pub.asc b/checks/pgp263-test.pub.asc
deleted file mode 100644
index 53310d778..000000000
--- a/checks/pgp263-test.pub.asc
+++ /dev/null
@@ -1,14 +0,0 @@
-Type Bits/KeyID Date User ID
-pub 888/A50283F1 2001/11/08 pgp2.6.3-test-key
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3a
-
-mQB8AzvqRosAAAEDeNMKLJMJQeGC2RG5Nec6R2mzC12N1wGLiYYJCsmSQd1Y8mht
-A2Sc+4k/q5+l6GHtfqUR/RTCIIudAZUzrQVIMhHDKF+5de9lsE5QxQS1u43QGVCb
-/9IYrOLOizYQ2pkBtD9LCrf7W2DccMEkpQKD8QAFE7QRcGdwMi42LjMtdGVzdC1r
-ZXmJAIQDBRA76kaL3HDBJKUCg/EBAZMoA3Yqqdix6B2RAzywi9bKSLqwAFVL+MMw
-W+BnYeBXF9u+bPpQvtyxgi0vx8F9r84B3HAhZNEjBWODF6vctIQhXhAhXIniDTSj
-HNzQ/+nbWnebQn18XUV2SdM1PzMOblD+nISte7+WUfWzlD7YUJPkFPw=
-=b498
------END PGP PUBLIC KEY BLOCK-----
diff --git a/checks/pgp263-test.sec.asc b/checks/pgp263-test.sec.asc
deleted file mode 100644
index 78992e3b7..000000000
--- a/checks/pgp263-test.sec.asc
+++ /dev/null
@@ -1,18 +0,0 @@
-Type Bits/KeyID Date User ID
-sec 888/A50283F1 2001/11/08 pgp2.6.3-test-key
-
------BEGIN PGP SECRET KEY BLOCK-----
-Version: 2.6.3a
-
-lQGdAzvqRosAAAEDeNMKLJMJQeGC2RG5Nec6R2mzC12N1wGLiYYJCsmSQd1Y8mht
-A2Sc+4k/q5+l6GHtfqUR/RTCIIudAZUzrQVIMhHDKF+5de9lsE5QxQS1u43QGVCb
-/9IYrOLOizYQ2pkBtD9LCrf7W2DccMEkpQKD8QAFEwADd0Kk5aeyFM3zbPgfikkE
-7iFg9h2LG3nARmA4wAnCZaQ3CS5zRHCdXOf5KLkm6xFza1yMat4iWx6ULvuuNpIc
-RmkHccyXYkRi3Hvacd5A9VCNw1UKtCdaCKgacsfplU0s1xYWGZd4J8Jg8boSfW5W
-gwG8Dc9R20HHno8uD2vfr5rg8ElWvbFyJI/j4eCVAd+NYAGNvB8I3VP38IIYcavh
-YYcGjrpxbGVRybsBvA9IJltpGaVulxwpeCp5NecCGgoAUsN4Ktf42Pg7HXDlQL6r
-Xs/YggMztj4NzEgBHXAOLShdKKhDAbEByVSKXZD9A8J+RejXBl6VbuJmD/5qOvph
-GAPKS3ahPDj8438HyD7yIDLYYVRKfxjWHLubc46Pgui0EXBncDIuNi4zLXRlc3Qt
-a2V5
-=l/aV
------END PGP SECRET KEY BLOCK-----
diff --git a/checks/plain-1-pgp.asc b/checks/plain-1-pgp.asc
deleted file mode 100644
index 10e50884d..000000000
--- a/checks/plain-1-pgp.asc
+++ /dev/null
@@ -1,29 +0,0 @@
-This is an encrypted version of plain-1 for
-the PGP test key 0xCB879DE9 using CAST.
-
-
------BEGIN PGP MESSAGE-----
-Version: PGPfreeware 5.0i for non-commercial use
-MessageID: D0P6k4cfvaTDkyRQM+/MpOoQW6xT5Swm
-
-qANQR1DBwA4DW3oC8MuHnekQAwDj3tkgY6XU+e1k9XOlSSzIPGenxgOZ8VSvuEUd
-L+/1E9T2KJmH5CGyH4Hz6wIOLtFSd1A13yYRyHNhxD/nGgcjg6etZNVQnjPuRp5k
-O4jYz2BCstkjz793ZjPzgXgdpt0C/0zmlQz8clT+/cswAj0t1famcz/Ai4gexfkI
-pojmFHewdYs6FT0XbwxjaYUyw955KBEUwJ4uJ6VTR5ab4GxUmpHn/S7HfoWVPjXl
-j7R8Xw/5bsrOCjA5hd2XcpE95lTHzcnB9Fr57OMFlFC/FSwUaDsArZ/V8sUJnD+l
-aWyrDhzuiwVy2XSYiX55qCL3zuZsiElo6AS7ITkI8onL2FIFtC3L5LecPprNlE68
-XJLxNZUSAel7OcnwqUNtM1lEK6bfYfiXr0BBEkg1Jfx/KucHMIara0CVEh+V0aGj
-I8rKt3MS+T7KMYgJzf47ipTtf0Q3qZph28fRirn8gKBlEIRz62WU9Jjz/GrNqbuD
-meixSq3JprnK2kDZ00oqSZVCjFEc6pQoZqZc0cGT6IDpYEsNghfeyCxzUB17QzJC
-gisd5k0uSCIWO8lwbWInnDzmV8XTfG5o4u88S89ioGydxMlCcNNX2cNp/MH/chgk
-iSI+BAZ6mVcKdH2x6NpFJDGcogIM9phsnUC8NkOUH2FtjnCxDJyKSfML4lrEIi3x
-QCAFEx+dYq4xcT8AnEQcTJ4ppoUJwfbtqXxYh2TKSWSkXnNz6sp2AGlx/uc99CyB
-BjurpFQzseceTbxfJySm3LMJ470jSmwXSl3byryfiwTVV7BYoKkYfpVaXK4VHVMS
-bw15DEH8PqjkxRabokwhIpWsJ4ta+FCgaDYhdOvrBAztwm9edsYYiNdrwjn8zFzw
-QpOqh7h0uCksU5/ULmadIAYgejPyGJM6lv2m7o0xay4TOqyRMzkdcu0WyR3PVFAE
-iwk/uYIonNCJc3pFS8k4b3CYnSiso0z1ugJR5YcPoOuxrbdly1om4ZC0is+euQZN
-kzSGwfbabKY3mvRWGTGpZil43BRMK7nzL6oN0f7Y+/DTRp4Vzc0NTyfV2QkU25Il
-ARs4Cxa138Nw4fmfvenCvv2QL2Ks/HCM7lybhq2IvbRVRiOEgcPxvRtZ5VKrqbkM
-rrzzqi2PxlVrinR2GAkNu75ef+FP/KWP4NFYvEMpDxqXNS7Ju1sfcyFaTnm9
-=TpZW
------END PGP MESSAGE-----
diff --git a/checks/plain-1.asc b/checks/plain-1.asc
deleted file mode 100644
index 638a15bf9..000000000
--- a/checks/plain-1.asc
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GNUPG v0.2.15a (Linux)
-Comment: This is an alpha version!
-
-0CIjY3JlYXRlZCBieSBHTlVQRyB2MC4yLjE1YSAoTGludXgpowJ4nAFBBb76hM4DPGu75p0m
-bg8QAwCx58y5eWLvOyIPG+OzRE9RCA9ZAC+9/A7Zy0u6KfUx4FaGZEMaxECYVK7l4qOmsNG+
-FQB25V+OX9P3nfJ9IFs+AlvhEzv6mBGuoyIErMsXe9XHVGCTV2mceKqmE959zH8DAL8a0GEo
-fgtyvu8KC8GdJi4SgTvKXKC9cBdU14RSsk5G3KFYl+qCRP8fcoZ2AkZUf2+LOGk1c1h1eGF5
-8C5EdFbCQNM+EUVTsYc4nOpMwGl4B2TQ6Jmn4LB+qVGgFzbZsKUEbhM0CbsTTbGimyGAWMEh
-LAp7hFrR7hWaY3nmbMd3xUc3OIvOgF8TqbcnbyHKGUIgH9UiRshTFIVNGaWJbbemVk9zQi50
-v6+unuYtQmaghBSZ/OPcFvThdfkLFQbSVsVJ21N/6mblUrHpv4TsEmeHSeBMdfhhdf2a0f03
-7uHxITOSr53iSi3A5K9/7mvLznMrAJ/W7fMx37imdsvxNc3TZFbPoau5auqG4PJMGMqucFH1
-6bOkq/jbAbNhaOhU1pLazYVjAL+iqW1wVDc4NTfqJjaf/gI4E+4WTjddAbUYtmuqEhx8UGwU
-tW0B7gVNhKvMUE2EtTCtC5kCW6qridVOFx2W42xrrAEGyG84oHuMmsE0K9QB0OJBRLwFUzPS
-4JVW+sdv26XkReiNKQeD5I5Vwu5oYY36MdQFdnGDmKhTwt6/+NLzyJ7bSPFhAKHwYkPoDCuI
-nMVWUrrt6HsXY2cszTP403bbdp4vI0OIHCT7yBS2kRVygD2/N9E66O0vvOWEPKaHuZUIhJi5
-pNFVrhBDUoYxRGbdcLq4RNYrexYBNdnD4IuhJfmnqJfv4HxSoyHy4llXY2AieNtOscBzA7nU
-jHrvqykyFVmyLUGcG1w9a72xl2XG8cKvL2BNpMbt+Xv+8mxst85TrFTjmoPdGDAHcMzgr/ds
-yKcw0yOgX2PumuAxQ8ND1BXxctS5R8ZQlsOQgY7StvnfSwKPLXXJ1Xdmo/pn8mncPrzbEl/X
-d07bZZ1vzE6/NkGkLpHo3WKuiNTu9FtwuO6DsqzsM1yZ4AOiDMG4uIxQplPa/mv31eEkYY3/
-9F5K3mzFh9phK3lKk0bdp29d8pO44A7tXt+yS5/QeDojykarAwAz2EvEA+F8dLvprJ4ku9Qv
-T/2ubr8I+9pRwtA69BevNd80qKQr2q1Exi/Y5d2Lvcp6x6kSwXKO65rLYQ/2RlCOHzlkFNvn
-r9RJ/H/c8COYhjFbTeVymgviRyGABdxeLEMOSFFRa4EQL0L7Kbu6obX2NLbuQA+UlQ3bFKMn
-r2P5+6qxIIS6bgDxmb3xRnOCsVl8X4/Y14oOY0HbcBY3VmiXUqVG4zMaPChSFn5vGXaCH3uC
-J9lETUeh+2q5L+nvoRW6wGax4smtNBIVKkCTDGnuaiYQ5L+24MJQzn5OXnkeoe09cNp4FR+s
-SxaVfLyJW+TkMppd1v6rswSrCeh1zh+baamOmKOyS/RcwkRH+hoRECvVxQ7mm5QLm6Wyl22B
-CFns6pzKQFeh9KgK4w+PgaNuiSI8UKqD/MJ4y3aylAfgX8izODd4grqYt/KrLgfFJ7mESDdP
-3uL8PcX7iIhq47YRGPk0mDyCRNni6xC27xeaYy2pGeEr3NJ+nZceUsYZxBCvdoiejFxQ+Hog
-dA9saADuqORjQuQEybej8Eq2LXeg62TvcSzBF4nbVATG2N9/U5PVtTx/hv26Ime8hmrsTA7M
-2Wm+9xHoWHsZIyj5tkWdgChIZQ+4ZBi3w6f4M9yGmb4kf73bVkimI4d8r48=
-=a0yS
------END PGP MESSAGE-----
diff --git a/checks/plain-1o.asc b/checks/plain-1o.asc
deleted file mode 100644
index 973b29395..000000000
--- a/checks/plain-1o.asc
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN PGP ARMORED FILE-----
-Version: GNUPG v0.3.4 (GNU/Linux)
-Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/
-Comment: Use "gpgm --dearmor" for unpacking
-
-PCEtLSBEaWVzIGlzdCBTZWl0ZSAzLCBkb3J0IGlzdCBrZWluZSBTZWl0ZW56YWhsIGFuZ2Vn
-ZWJlbiwKICAgICBvYmVuIHJlY2h0cyBpc3Qgd2llZGVyIGRlciBTdGVtcGVsIHZvbiBtZWlu
-ZW0gT3BhIHp1IGZpbmRlbiAtLT4KCjxzZWN0MT5OYW1lIDxxPkdyb98tQmFydGxvZmY8Lz4K
-CjxwPgpEZXIgTmFtZSA8cS9CYXJ0bG9mZi8gaXN0IHNjaHdlciB6dSBkZXV0ZW4uIE1hbiBo
-YXQgdmllbGUgTXV0bWHfdW5nZW4KYW5nZXN0ZWxsdCwgdm9uIGRlbmVuIG1hbiBhYmVyIGJp
-c2xhbmcga2VpbmUgZWluemlnZSBhbHMgdW5iZWRpbmd0CnJpY2h0aWcgZXJrbORyZW4ga2Fu
-bi4KPGZvbnRpbmZvIHJlbT0ibWl0IExlZXJ6ZWljaGVuIGdlc2NocmllYmVuIj5Vcmt1bmRs
-aWNoPC8+IHdpcmQgZGFzCkRvcmYgYmlzIHp1ciBSZWZvcm1hdGlvbiBzdGV0cyA8cS9CYXJ0
-b3JmLyAoYW5ubyAxMjUzKSB1bmQKPHEvQmFyZG9yZi8gKDEzMDYsIDEzMTgsIDEzMjksIDE0
-MjkpIGdlbmFubnQgdW5kIGRhc18gc293b2hsIEtsZWluLQp3aWUgR3Jv32JhcnRsb2ZmLiBF
-cnN0IDE1ODYgaW0gQmlzY2hvZnNzdGVpbmVyIEp1cmlzZGlrdGlvbmFsYnVjaApoZWnfdCB1
-bnNlciBEb3JmIDxxL0JhcnR0ZWxvZmYvIHVuZCBzbyBhdWNoIGluIGRlciDkbHRlc3RlbiBu
-b2NoCnZvcmhhbmRlbmVuIEtpcmNoZW5yZWNobnVuZyB2b20gSmFocmUgMTY1MS4gTkFjaCBk
-ZW0gSmFocmUgMTcwMCB3aXJkCmluIGRlbiBVcmt1bmRlbiBiZWdvbm5lbiwgZGVuIHZvbGxl
-biBOYW1lbiA8cS9Hcm/fLUJhcnRsb2ZmLyB1bmQKPHEvS2xlaW4tQmFydGxvZmYvIHp1IHNj
-aHJlaWJlbi4KLS0tLS0tLS0tLS0tLS0tLSBbd2VnZW4gZGFzaGVkIGVzY2FwZWQgdGV4dF0K
-PHA+Ck5pbW10IG1hbiBhbiwgZGHfIGRpZSB1cmt1bmRsaWNoZSwg5Gx0ZXN0ZSBCZXplaWNo
-bnVuZyBCYXJ0b3JmIGRpZQp1cnNwcvxuZ2xpY2hlIGlzdCB1bmQgbmljaHQgZGllIG11bmRh
-cnRsaWNoZSBCYXJ0bG9mZiwgc28ga/ZubnRlIGRlcgpOYW1lIGd1dCBnZWRldXRldCB3ZXJk
-ZW4gYWxzIERvcmYgYW4gZGVyIDxxL0JvcmRlLyBvZGVyIGFtIFJhbmRlCm9kZXIgYW4gZGVy
-IEdyZW56ZSBlbnR3ZWRlciBkZXMgV2FsZGVzCg==
-=m1k/
------END PGP ARMORED FILE-----
diff --git a/checks/plain-2.asc b/checks/plain-2.asc
deleted file mode 100644
index 207607d74..000000000
--- a/checks/plain-2.asc
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GNUPG v0.2.15a (Linux)
-Comment: This is an alpha version!
-
-0CIjY3JlYXRlZCBieSBHTlVQRyB2MC4yLjE1YSAoTGludXgpowJ4nAECB/34hM4DPGu75p0m
-bg8QAv9ZdGiPPhSW1kYoNUFU5RQxPQ3F/uRyhWV6ZZFh5A970v4CRjZilbiqBORpSodscyxb
-hu0zaC65x+VTeSdcJMA09cgIrAP0ffRTzh5NINdxRwFr0F4G03RLlMQoJifd+zQC/0XYC5bL
-nWnSA3so1fOQikBTG+aopEQ1ap/Hy1rfIVWhtVnkteZG0y0BH/LvOnzV4F5Vm/mUOi3VPRKO
-qb3THQzraRj5h9tm8CXyWg+gGgauE7npa7jT/pwW/zPz9dkB1KUGL0vaUus283IXmCR+u7U3
-2N5yQw3EehF5Yvlo+MpXWuaEBkQRwwZzhKn/JYxecxrCHlXAcTU7nV4vS/Gy7j9X6TPxVdgq
-E8Ub6k5VID/nfx5H3qY09uOOP0vGhkdI63F02Cfic5n6g2KC3+v7KpQSbxPxgc22q9puzAGi
-o4T9XII1uGn+WL5bIdfP+wfrqKwsRvlEBSYfiVzPAuJ7nzx2SHuJ1YEL9LCpNwFaswmilNXm
-0sa1Cjo9uNd6Li+HNVUidl1rIsl6ZZBfilA9YK3KMPrJnmzK7KQ7UY8//XB7Cdfv7tGrUgzo
-lJA+JBUKC6mL95qbxB96DYAaoOzXYL0KLTdXVrusVWHP/+fJvAicmFD+B0hepdg2Aq0qdJoI
-9Zl6IB58YbRX4MX6bMaz0aFkibeLgsyHBOCvQeKe64H/E3Rc/CosJ+/OsdV+xl6nBrJ9loU4
-94vwidvq0Rm20Zm4YEjsgClX/ZXTDfdnKkSLUANe76RJzS/tJciKludV1pFpT23am8mwRl5M
-kP5DJotIBT3EUUyCjqCgpWUi0yt/dM2Oc3i/BQAOPd0dOZhAcmCAZVyVbYA7WjMfqZLH9sz7
-COU1quvuSotTwwJPRksuHQDan8azLIPU1gbVqPo7eHXmfUW9DWg3DLk7x5A8BTTyqfgEZgXn
-DWTS+FqJDdvc0UgMFH1JZ3WW/+Fg9U6MvT7+gw2nrnBpw/Yqqj/9qCeeORyrg/BgUEf7Jsk7
-isns8ji1xrpUVLCSgxx5Kk8ComuX+jAN3aTwkA/CSSg0D6aHyZINiezFSIY71CovYDIjGsf2
-wG8xNzN0vvyVkfXbUpgpL+cbjezZSyWde2C2Rsu8rvdLfWDrW4BJp33nS6F3XlX9d6kd2y19
-Nv/erweqvZWHTi2LcIl4gYstnhJdcNNtcRKxwwThE+T2skJg0tJYnybAasH14Ej3eroD8kb3
-Lo6U1bIkEwO6gi/rNdWziioWa3+dwdh/WzplwEJy+81mnR4mkkhJltPI7B6QR2SUq2iPaZN0
-8Q9ys5BpS88HbuZKOab2BO6CrthbTe7l89yrIIcK5+SWNMCb8vnIyw3+1TGkP3h35Y07uEeI
-eoipSxI+Cmio7gnE8pIulTLnACW0clMFR9r6k08t/UmuM5skBsvFbn2h7VpXRtjI0UbP/OTO
-EtQYl/CcNa1fhPbDCb9lhqJrZWPDh7cv0bwXIDYzVAm5NQnF9zy5cQRlQgTdPgOOAT8N7OgL
-zsySBBZk4aDucZnrRSC4hpseZ6iv1IBUwT6kkaUpXVqJ4ujlthzjNSixiwYXeNir9mMYB3qj
-LvYq7oZOvgO9gca5RUmNKc+aj/dOT/3cO3+gkGrPJhlwwMaZNLg63jFJD7kon1oh+uFJEquN
-gDEQ6a3fKhszdukxD43oGmi8GX9I3/dr53KcQ08GYLELyoC7Py9nc74KGgjWGY+HNkCMQUyA
-JMe7xJVBg/0tvtH+HoGRU764MDM2BvbmrUXAfZHGfXCLyXdEPQDj5KnmQlV+L6v6ecrkUS0Z
-ktxlZAgogC5OeSC0HMADhZxmkrXMKbMl5TpfB03jrHgyqU5kmVA4mBe0PnE4HTSJQjSLouy1
-l2Cs48ljGRVQbcAilXiV8alFGFeIoG3u6MrXeDEDbryJ2V0gVb3RQ9Agyt7ZZlmAhFRutk+z
-UdALvDThOnvhI4q+ABV3OHkwjQann3bUNEFvCqGE+b5Osg/nQZLGTk0E60LidpZNMor0sYDc
-SJcRn/1OZ/gufh/Npa4h3EL0Nyc3RvoUHHjQMqGXnwUvEzg7EdbuaBfmv67t2hAq808GXnP1
-ButTODVwgxqD1G/Xupg5rwxSHr9cYIgGuhCysbyFytrxuZvICD8cDi8FtKb3KiftCEuxHK7o
-d3Dl+0/Y/+wDOgQrdkrIl4VVZXtssD/4Lo8NZKo5mxQj5JcuE+RQo8ufXqp+7it8QuVKYYH6
-hR9LwLzW5nu4Uk1bnsP84XvWoLmTUAU5O/ke/4cOJ8FN3jo1gPZqVrvWH4rGxsRZMZ5LNeSL
-w4qCZ7ZV9phJbUGPJzAtD7d4+j8rpl4BGBRUNc1E98Ilp+NRq8ltlu9TIEP8N31FS8YXn25S
-suFI5P95Yw==
-=08za
------END PGP MESSAGE-----
diff --git a/checks/plain-2o.asc b/checks/plain-2o.asc
deleted file mode 100644
index 562e5f06e..000000000
--- a/checks/plain-2o.asc
+++ /dev/null
@@ -1,36 +0,0 @@
------BEGIN PGP ARMORED FILE-----
-Version: GNUPG v0.3.4 (GNU/Linux)
-Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/
-Comment: Use "gpgm --dearmor" for unpacking
-
-Cgo8c2VjdD5Wb3J3b3J0CjxwPgpEZXIgV2VydCBlaW5lciBPcnRzY2hyb25payBpc3Qgb2Zm
-ZW5iYXIgdW5kIGJlZGFyZiBrZWluZXIgRXL2cnRlcnVuZy4KTWl0IEF1c2JydWNoIGRlcyBX
-ZWx0a3JpZWdlc18sIGlubWl0dGVuIGRlciBnZXdhbHRpZ2VuIEdlc2NoZWhuaXNzZSwgZvxo
-bHRlCmRlciBLbGVydXNfIHVuc2VyZXNfIEVpY2hzX2ZlbGRlc18gZGFzXyBtZWhyIHdpZSBm
-cvxoZXIgdW5kIHNvCmVyc3Rhcmt0ZSBkYXNfIFN0cmViZW4sIGVpbmUgc29sY2hlIE9ydHNf
-Z2VzY2hpY2h0ZSB6dSBzY2FoZmZlbiwgdW0KdW5zZXJlbiBOYWNoa29tbWVuIHp1IGJlcmlj
-aHRlbiwgd2FzXyBhdWNoIGRpZSBrbGVpbnN0ZW4gRPZyZmVyIGluCmRlciBncm/fZW4gWmVp
-dCBnZWxlaXN0ZXQsIGVybGVidCB1bmQgZXJsaXR0ZW4gaGFiZW4uCjxwPgpVbmQgc28gYmVn
-YW5uIGF1Y2ggaWNoIGltIERlemVtYmVyIDE5MTQsIGRlbiA/Pz8/Pz8/Pz8KU3RvZmYsIHdv
-IGltbWVyIGljaCBpaG4gYXVjaCBudXIgc28gc3DkcmxpY2ggZmluZGVuIGtvbm50ZSwgenUK
-c2FtbWVsbiwgaWNoIGJlZnJhZ3RlIHp1buRjaHN0IGVtc2lnIGRpZSDkbHRlc3RlbiBMZXV0
-ZSwKZHVyY2hmb3JzY2h0ZSBzb2Rhbm4gZGFzIGdhbnplIFBmYXJyYXJjaGl2LCBkYXMgU2No
-dWx6ZW5hcmNoaXYKYmVpZGVyIFBmYXJyZPZyZmVyLCBkYXMgS29tbWlzc2FyaWF0c19hcmNo
-aXYgenUgSGVpbGlnZW5zdGFkdCwKZW5kbGljaCBhdWNoIDE5MTYgZGFzIFN0YWF0c19hcmNo
-aXYgenUgTWFnZGVidXJnLiBTZWxic3R2ZXJzdORuZGxpY2gKYXJiZWl0ZXRlIGljaCBhdWNo
-IGRpZSBlaW5zY2hs5GdpZ2UgTGl0ZXJhdHVyIGR1cmNoLiBHYXIgdmllbGUgWmVpdAp1bmQg
-TfxoZSBoYXQgZXNfIGdla29zdGV0IHVtIG5hY2ggbWVociBhbHMgOCBKYWhyZW4gZGllIE9y
-dHNjaHJvbmlrIHZvbgpHcm/fYmFydGxvZmYgdW5kIHZvbSBGaWxpYWxkb3JmIFdpbGJpY2gg
-Z2Vzb25kZXJ0IHp1IHNjaGFmZmVuLgo8cCB2c3BhY2U9IjJleCI+CjxiZj5Hcm/fYmFydGxv
-ZmYsPC8+IGRlbiAyMy4gTeRyeiAxOTIzLgo8cCB2c3BhY2U9IjNleCIgYWxpZ249cmlnaHQ+
-CjxiZi9OaWtvbGF1cyBH9nJpbmcsLyBQZmFycmVyLgo8L3A+Cgo8IS0tIEhpZXIgZm9sZ3Qg
-ZWluIFN0ZW1wZWwgdm9uIG1laW5lbSBPcGE6CgkgIFJ1ZC4gS29jaAogICAgIEdyb99iYXJ0
-bG9mZi9FaWNoc2ZlbGQKCUFuZ2VyIDE2MQotLT4KPCEtLSBGSVhNRTogaGllciBrb21tdCBl
-aW5lbiBaaWVybGluaWUgLS0+Cgo8cCB2c3BhY2U9ZmlsbD4gPCEtLSBEZXIgUmVzdCBrYW0g
-YW0gRW5kZSBkZXIgU2VpdGUgLS0+CjxwIGFsaWduPWNlbnRlcj4gTGl0ZXJhdHVyOiA8L3A+
-CjEpIEpvaC4gV29sZjogUG9saXRpc2NoZSBHZXNjaGljaHRlIGRlcyBFaWNoc2YuIEf2dHQu
-IDE3OTIgdW5kCkz2ZmZsZXIgMTkyMS4gMikgSy4gR2VzY2hpY2h0ZSwgV29sZiAxODE2IEf2
-dHQuICAzKSBLbmllYjogR2VzY2guCmRlciBSZWYuIHUuIEdlZ2VucmVmPz8/Cgo8IS0tIEZJ
-WE1FOiBEZXIgUmVzdCBmZWhsdCBub2NoIC0tPgoKCgoKCgoKCjwvc2VjdD4K
-=9nnj
------END PGP ARMORED FILE-----
diff --git a/checks/plain-3.asc b/checks/plain-3.asc
deleted file mode 100644
index 3b7382760..000000000
--- a/checks/plain-3.asc
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GNUPG v0.2.15a (Linux)
-Comment: This is an alpha version!
-
-0CIjY3JlYXRlZCBieSBHTlVQRyB2MC4yLjE1YSAoTGludXgpowJ4nAEYAef+hM4DPGu75p0m
-bg8QAwDAGvCZWrqo7Rt8DNg7tDI8ckhL1XfN0OZuy/tJjD8o1K1JuXPfCpAX2WI69PvlVhPC
-RO9F2WaBTqyo/fY5XVSzNlfin9TMe56gFjhT3vhK0IgZ1gjBuowY4TktVq4cG/YC/0hX3u6L
-7M9D0H0ye0YgRof82sRHKQBSeuFn5iHc6hSB7fFXsyDLqmEvclDV0exY1a3giTGwUX81fknR
-EwzB2weemUnf1DQ8rGhw/dBiarOMjjWz0ypyfhWqV/U3RNZRIaRGjBtl0Qbr51KIvg3UnaGD
-YX8DXWpV61kkRX+DsQ27tuQvW6V8lKcsElipIFXPhCpfdSnGGVjx69gGDSFEhMLcSy3s4i4X
-MMVwiy8=
-=MnS6
------END PGP MESSAGE-----
diff --git a/checks/plain-3o.asc b/checks/plain-3o.asc
deleted file mode 100644
index 409b9c2e4..000000000
--- a/checks/plain-3o.asc
+++ /dev/null
@@ -1,10 +0,0 @@
-Stored by G10, because diff/patch have problems with
-files not having a trailing LF - and this one has none.
-
------BEGIN PGP ARMORED FILE-----
-Version: G10 v0.2.6a (Linux)
-Comment: This is an alpha version!
-
-RGllcyBpc3QgZWluZSBlaW5mYWNoZSBaZWlsZSBvaG5lIExGIGFtIEVuZGUu
-=ZQ6m
------END PGP ARMORED FILE-----
diff --git a/checks/pubdemo.asc b/checks/pubdemo.asc
deleted file mode 100644
index d550f1af7..000000000
--- a/checks/pubdemo.asc
+++ /dev/null
@@ -1,566 +0,0 @@
-26 demo keys:
-
-pub 1024D/68697734 1999-03-08 Alpha Test (demo key) <alpha@example.net>
-uid Alice (demo key)
-uid Alfa Test (demo key) <alfa@example.net>
-sub 1024g/46A871F8 1999-03-08
-pub 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) <charlie@example.net>
-sub 1024g/BC43DA60 1999-03-08
-pub 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) <echo@example.net>
-uid Eve (demo key)
-uid Echelon (demo key)
-sub 1024g/7272144D 1999-03-08
-pub 1024D/8FC282E6 1999-03-08 Golf Test (demo key) <golf@example.net>
-sub 1024g/9DCAD354 1999-03-08
-pub 1024D/04259677 1999-03-08 India Test (demo key) <india@example.net>
-sub 1024g/61F76C73 1999-03-08
-pub 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) <kilo@example.net>
-sub 1024g/9AF64D02 1999-03-08
-pub 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) <bravo@example.net>
-uid Bob (demo key)
-sub 1024g/E29BA37F 1999-03-08
-pub 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) <delta@example.net>
-sub 1024g/B0C45424 1999-03-08
-pub 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) <foxtrot@example.net>
-sub 1024g/EE45198E 1999-03-08
-pub 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) <hotel@example.net>
-sub 1024g/D622AD0A 1999-03-08
-pub 1024D/D2699313 1999-03-08 Juliet Test (demo key) <juliet@example.net>
-sub 1024g/35F8F136 1999-03-08
-pub 1024D/B79103F8 1999-03-08 Lima Test (demo key) <lima@example.net>
-sub 1024g/FE56350C 1999-03-08
-pub 1024D/BE5CF886 1999-03-08 Mike Test (demo key) <mike@example.net>
-uid Mallory (demo key)
-sub 1024g/4F31EAE8 1999-03-08
-pub 1024D/30CEC684 1999-03-08 November Test (demo key) <november@example.net>
-sub 1024g/8B70E472 1999-03-08
-pub 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) <oscar@example.net>
-sub 1024g/2681619F 1999-03-08
-pub 1024D/3FF13206 1999-03-08 Papa test (demo key) <papa@example.net>
-sub 1024g/63330D9C 1999-03-08
-pub 1024D/3C661C84 1999-03-08 Quebec Test (demo key) <quebec@example.net>
-sub 1024g/A029ACF4 1999-03-08
-pub 1024D/777FBED3 1999-03-08 Romeo Test (demo key) <romeo@example.net>
-sub 1024g/11D102EA 1999-03-08
-pub 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) <sierra@example.net>
-sub 1024g/0F1B50B4 1999-03-08
-pub 1024D/85A81F38 1999-03-08 Tango Test (demo key) <tango@example.net>
-sub 1024g/101C0402 1999-03-08
-pub 1024D/653244D6 1999-03-08 Uniform Test (demo key) <uniform@example.net>
-sub 1024g/5522BDB9 1999-03-08
-pub 1024D/61F04784 1999-03-08 Victor Test (demo key) <victor@example.org>
-sub 1024g/07287134 1999-03-08
-pub 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) <whisky@example.net>
-sub 1024g/FD6E27F6 1999-03-08
-pub 1024D/567FB34A 1999-03-08 XRay Test (demo key) <xray@example.net>
-sub 1024g/41E408BE 1999-03-08
-pub 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) <yankee@example.net>
-sub 1024g/F7B080AD 1999-03-08
-pub 1024D/54ACD246 1999-03-08 Zulu Test (demo key) <zulu@example.net>
-sub 1024g/A172C881 1999-03-08
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v0.9.3 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-mQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp
-ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy
-hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj
-VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU
-/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p
-+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5
-cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS
-09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+
-lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5arQpQWxwaGEgVGVz
-dCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOOngML
-CgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AKCBLmRplv/8ZfSqep5IjqEAuaXv
-WwCgl6NEzT+/WewPTGcwZY+pLkycLv20EEFsaWNlIChkZW1vIGtleSmIVQQTEQIA
-FQUCNuO2qwMLCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NCeMAJ9MeUVrago5Jc6P
-dwdeN5OMwby37QCghW65cZTQlD1bBlIq/QM8bz9AN4G0J0FsZmEgVGVzdCAoZGVt
-byBrZXkpIDxhbGZhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247hYAwsKAwMVAwID
-FgIBAheAAAoJEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nvuo8JZri4PJ/DAJ9dqbma
-JdB8FdJnHfGh1rXK3y/JcrkBDQQ2448PEAQAnI3XH1f0uyN9fZnw72zsHMw706g7
-EW29nD4UDQG4OzRZViSrUa5n39eI7QrfTO+1meVvs0y8F/PvFst5jH68rPLnGSrX
-z4sTl1T4cop1FBkquvCAKwPLy0lE7jjtCyItOSwIOo8xoTfY4JEEXmcqsbm+KHv9
-yYSF/YK4Cf7bIzcAAwcD/Rnl5jKxoucDA96pD2829TKsLFQSau+Xiy8bvOSSDdly
-ABsOkNBSaeKO3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxOWYEQYlaMrnRBC4DZ2Iad
-zEhLlIOz5BVp/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siUUvlei9boD9L2ZgSOHakP
-iEYEGBECAAYFAjbjjw8ACgkQLXJ8x2hpdzQgqQCfcDXmD8uNVdKg/C9vqI3JSndq
-knsAnRxzVeHi/iJ73OCKtvFrHbV9GogqmQGiBDbjkGcRBAC/DCQungO2iJ7j9+9q
-d2crjBU8K+AmQhs27JBkJqtAbC/xFqkHBsA1Pi8Zb6TLa/OCm2PbXFiM5x00wiEn
-VKNzuGOzU8uHB6kwWtLj8+V7VOWOkSDEtnlTF6u0y9JOvs7GwDvqOM5C3QH7La+z
-nNeAu1527Hj6l0XGSAzyvp+NkwCgnktU11VFpKSIdoplZBayN9OzT8sD/Awc/890
-fiSMWYNGo4+n6IHxhjBBM9lL+DAe1RtCEtwUSWNrGsIxFnDRkMxvMpaT4GusG+DP
-haTddrDBSyFiCLxKDBYgMbSO6wQ9g6zWEEh1ZMTMVU/akr81DOEColXn/f3Q4sRj
-xI3hu2z8tjVewAPNTuWETQ6iHHoVqdpkK4aABACfbMrnfK6TujxSs91MfKBWfYxy
-w9hjM6+VV8cJJdDXiheMKzWcrVecwgYYzukmNinO//BRmQcs1wdfi5UdfHLNFDig
-w96SdyZpHx+79ghD3NqDmzYakoRIoDKcZAIrAjgfl5if6vIiA4c1LjhSdcVTBsSy
-ic/mkk01EgztWKY0abQtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA
-ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K
-8xr9q2w+RACfX3AwFwPu5+mr/f1Sa/Wv0m9T57gAn1TBIoUErMqJehQZu73N0u93
-fqSKuQENBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8
-FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E
-GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD
-BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw
-V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8
-1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2GaIRgQYEQIABgUCNuOQ
-ggAKCRBBP0rzGv2rbLWtAJwNtSGPYjbesLSTeRwKGA5ffZiFDgCfTPC6I+XyGavj
-HJraHTgS/bSCN0OZAaIENuORzREEAIrOxkw6rRDOpbqKenlrMRYvfqoVFafTekvs
-ZW8M0GVQOBYwqn9VUfSV/H8Iy3nJsU+cU4UFXEaoHhVWgspMtjYHvxXBTD2UHmj+
-Y7+RkVnOT7x/UsPKbxjkweeleGXkeHECwwZuQhebSrtQQllqtjCx33Le013ukAs2
-SnI83cPLAKDfVb6yjfhG0Avkx83VmlFqXXH1pwQAhVhMi1T06SNYzbKAmdNBfBWr
-v9m2l5PJnUTpSWUum6ueJLHzkEM0XgVnHt+YdFuzXgUafsnqEn+2N4tI0zuJqzoi
-/9DQnEvKijZxihtYq3S3rN6UIQ2aXFHthvVtxZxocZeluYaWHPeedJlI9h9yObZn
-0mLFXFY6TUiHQYs8RNgD/0iNbequyxzEKdIdzD0Ns+3WjIVBlYl51Zdvqyo2+U+2
-70hXVdIssrsqKr1DwRlsCRSwMY+nrB0ZUOlvLaIB7qCQke3C9myu/fJoGDhMZOYA
-XsatVR0EGTdXnSuCxqNhEiqwlbZGMAcwFO+oWBSgGyjFPHTMSOw0XS42d73UNxTa
-tCdFY2hvIFRlc3QgKGRlbW8ga2V5KSA8ZWNob0BleGFtcGxlLm5ldD6IVQQTEQIA
-FQUCNuOkfwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u+u9tG2cDAKCzaFoiAm79QSmY
-ISeiM7XMKhoHDACaA8CU1j8+20C7rNipOHYz3KfUMhe0DkV2ZSAoZGVtbyBrZXkp
-iFUEExECABUFAjbjuAADCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRsg3QCeOMf0
-g3znbc8IBiTrIPUgUz9p3WoAoJ6eRZTZk7z+hTyx4JDceReQbYlGtBJFY2hlbG9u
-IChkZW1vIGtleSmIVQQTEQIAFQUCNuO4HwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u
-+u9tG16mAJ46lQbmtWRZUldQtp4ZnOptP7ZJtQCfceYMZfMAnqUKJiHk2tMhvwDv
-Ah25AQ0ENuOR/xAEALSl7SaNEf8mYovea5tJNEwoZx3vv6XymyXga1wDqKo2PeDr
-nRDbHGBb5BvWIv1J6Igk/wq4R+Pq989UpkcqREB+yOeluE3zPPtZBrbLySSaqiMe
-gYiHnAAPc0TqjH7UPZa+fJKZTUk64BCUQN9ELkL2FKtAGQ7RNQJYvbCq4O/XAAMF
-BACXdO4a3ZIK5hJejhHZ01mkHa6Sqoc6PuedNC7tlWiLU62BljGiv/DvzcbMsnvk
-991AxJ3pP4ZvKr5CClqIG+WZa1zmtwXdmCfGJb2fbNSVD4zp16e5slPr8Cp+fvIv
-2/SyvwruROs+oAzSVvoMAzAGSk3yj5nT5oikbn+M62fC5IhGBBgRAgAGBQI245H/
-AAoJEDGMH676720bj5AAnRH+1me1/iHDnS5ltXysOdl24/BMAKCPThApQ7lJe8LY
-r61+lXUUwr1TKZkBogQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE
-/XfaeJiB55oMmVEPmK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwF
-r3D8TRnarZy3kfiBF1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2M
-bAlGlj8AoKQPFsEPjByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP
-1yC9GJjtec3ugzYSC7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7
-Fz6+upxIgh5WGnnCs2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRr
-cILA568dwNnOrBio5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdf
-sk83dE3iBzvmT8ByIZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5i
-hH2ACSXLWiRXpyMmK2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cC0
-J0dvbGYgVGVzdCAoZGVtbyBrZXkpIDxnb2xmQGV4YW1wbGUubmV0PohVBBMRAgAV
-BQI245LRAwsKAwMVAwIDFgIBAheAAAoJEBaEEKSPwoLmIuMAn222gK7ibwOXzIKd
-/gZP09JC/3+eAKCOelaqqYqNNbku0gA84+O7d1kMqrkBDQQ245L8EAQAtsGp/UnA
-1y4AqjewlkkTOQevLwtzwm3pmLLjl2Y3TfGn8Ni0h8Wd27kV32MUZyTaNaZuDxpD
-EO2aUIpGWVQmWvlqCFV2F0Z2AI8R4bx1tC2kD758hUvR+S2hn9lK7E1lQPuvec2L
-Eml+uvVxW/Vm4iDBgeMlIlz70MFC9LUnfpMAAwUD/At7Clo7D4dNk43BMvhQ8VgJ
-+INy37Dj8PHX2sCZZ/tIfSwNIU3m2ygSVreTlDKo406v6Qmefs/m9dH9lsBE/8QL
-40Ek3SY6xV/QzTVN44QgnpRKWpfaMbGzWJVXeczlNkTeIZZo/nhDm+aMucMu/e7E
-KbG64BnrQk7Lz6LSKb2xiEYEGBECAAYFAjbjkvwACgkQFoQQpI/Cgub37ACgicCk
-6XvTqEv34RXVSkhf+EcDHOMAn3krqPc5ZeSJGa7RfRcVhm5QtcvymQGiBDbjlLER
-BADIbiZFRBlqCMOCXTECdpJssJDnAmpir+yfAKX4hsOVdygepdA071Ams8rApABS
-/c2+Tuaplad8w+iyQs4BKuzqeQK/YWj0DDqyY2LM7qJbvFd6nC/GOGjiEucTTSgY
-8IOFScBTTks7alMGjHAdWzSjq+1ppWJeTSzp04UKhV1/0wCguOIaUr/cMVahSuoi
-K4Tdot+CR10EAKunWycnUG2IaGYqO3sCfpChzktWdTjUn9ESJAjKK1QUC89f5+Kr
-MPITdUPypf++9MumBkJi+8R0GVJ8zwhwKfX9CHhrD0kfO68pCDxZyW+dDzOr/tFX
-0nuH9pL8oiEMkikaGLph+N+N1Ip8thh+vdLhNUr3EPRlrcAfv+WtOpbyA/9+kpa7
-x8nIn2SofJisj+PjKS3lAoGPe0eOoK/sVBvgVjy3Gc3d8vMG29r+2WRIpGwuhuLG
-NlQYX65BHV1MK/TjYvFnpoRSqtTK3GpRzTmkJIC8RlXxtfYf/n66VLB3EoTOzWHY
-29JMCJnnjPMoaMc2YSK10Bo8P/27nF0CKo8XEbQpSW5kaWEgVGVzdCAoZGVtbyBr
-ZXkpIDxpbmRpYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYC
-AQIXgAAKCRAf6PxvBCWWd1pYAKCVZ7DfK+i/YZGyEu18DnWq0ixligCghGwDoMGg
-LnenSjyShMZ+1Ecekia5AQ0ENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Fa
-on800I3GUzETuQA2AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/g
-NFwn5d0O/pq3bpgFRJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+
-Uowt0+92LuA7AAMFA/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84
-xCTEpv0dqEtVTJUoIo8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCN
-OcPRvXxgCwSGbuuLMkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+ohG
-BBgRAgAGBQI245USAAoJEB/o/G8EJZZ3CXgAoI5oimsZs8ZKmLb5sPB4AZzngCyz
-AJ9og9spt3EYXAB95XmfzqgJBRv04ZkBogQ245UlEQQAnKdAaILozJ04V6Z+FIwQ
-EY/aF4EFrJJIc+uewF7ukZl/7uUZqSxqmzZjbqigyMFGybJSMa6TpwN0BKG5CJe0
-4R/mVCIRsz1Jx5YXezN3UFsNVNE36R8l8dxWG+wgj2m60gu4VlodcpVMc/kRiSUg
-KUfg/xmPnRe3SJZSlG2lBm8AoNc/r5DW86om3MHWK8AoyhvVXhWvA/wOcjx6gfTT
-KftzpQBhOF0U0fC3npQC6bvjLjTBhQjC3WX5rfwJqMmrudRbEO1sFqzTOQPtb9xa
-tMeVqTcOi6+x2zfXes4nTfi9Lgq1z8HhE/LnktwxZxyPeOXqXu9N023IyQTv7mC5
-9C1xMZk4POOv9WZUGz4C85s2/9iTJCfkMwP+MRW0S9mHmisruCY6TDVFc12KIFMI
-PSmWav6gW6bCAA+wIHfmcSyR6MHiLV2gtJ0vQuqgyWfeTiaxPof07dg9pZsV7Hk1
-ZUhEmloeOcfZmwtHkRhWGEbEsd89IWMDJlwNJ7Y9JZ3QvK7vB42bQVvyhdFQdEXH
-0slvlvsgKtCcaOa0J0tpbG8gVGVzdCAoZGVtbyBrZXkpIDxraWxvQGV4YW1wbGUu
-bmV0PohVBBMRAgAVBQI245UlAwsKAwMVAwIDFgIBAheAAAoJEK0bD61DwtDH1RIA
-n1kxWuxGwCS1+i7Fp1cFzzZCHycLAJwJq+RG7ux9sQEmop2V2mKdjBZmkrkBDQQ2
-45VIEAQAuZli0/vYbs6h1HhF9HbvRHFMePjQ99Sk8h/dTx7PI7eSqMHXYh0PZghc
-hlbrMSPnemxfwMbJrmdK9WN0Wh9BJUe2ycH8ftUcGRo5CdESgiceziF6Vg4PQz9F
-lxtEhvrl7q8R6y7O+j03QAJKUGwBdt540oZ8YYKiDvgZUZxnoecAAwcD/1b2fYzA
-nuWrQZXhXQQ4cNVxMBVFKHScH24oFVbuEWLgM/tdgF+CPw2Vtzba8ySR1K80VSgs
-Qfs6n2wyCVd+II8lKHTZT/pfICFcPJlHKs4ge+JNn1IcxBAiq0QRNW5hGTO9KdJ8
-MFWrWn2Bbp5k32roAzuCagoielFo4MVFZTsNiEYEGBECAAYFAjbjlUgACgkQrRsP
-rUPC0MeO/QCfaGt8NeCm0zbssmOrXZ6v9zFk8xEAnj3SpjLTyqemniHSJ9KEzIKJ
-CdiDmQGiBDbjouIRBACKncc4Ueec7dWaVARy2SmNVufeSenYs4AsIPP0v59jEl7J
-I0rb+4JbIJoAzW/hcm26GS/UbbpQwig8/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4
-An7q2aNr1beW+twxfUGWWV5I0o1b/iKVk/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg
-+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eRxLqCt1hT98gdDLykRTlI3kMq6EK3I+z/
-8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpDltPYHgWnUC733ujAKANdyybm3HrA3TSB
-jEAhNfcu8nkrVorvASQUDCLJatWRWJTUVrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCC
-m8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMIfSFSvpZWNgQgYZntiXSUGYOVs28T/87R
-oRx02tsVDw2PA8z68q/XRuM9NdetxbUXQHB9eszFLi3W1idsXhd/C4SyiTgEFXG8
-Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVLmBp7qfj5Y9XSM5SE0Th+fLQpQnJhdm8g
-VGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOi
-4gMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwsvruAJ4iU4M5s1xsZiXa0wLnX4FB
-Bl9abgCfflNpwyEp6KEhKCPWwPRG9WJc0qi0DkJvYiAoZGVtbyBrZXkpiFUEExEC
-ABUFAjbjtzsDCwoDAxUDAgMWAgECF4AACgkQ/hgLHanjsLIa4QCgityK8zajBOqA
-N0ZZTq8fOzgiEYIAn1ZEfjX+jefZUuY+4zFzrpO/fX0OuQENBDbjowcQBACVSdXx
-UWlz81FjqHgR4b1EtmhmW89CmpsHfKlSwlYvBtbB/y7TFIfvAr4ZFbpuqew6Jvtj
-IEZoXvolTWwHVPEFkuG0LAa03olaYpzC6ZBDuLkb09RukCD4zdY6xwbAMRsOzZgv
-597LZXtOLLLnmOyTpsjRDLztWsuNglm5rffOTwADBwP/SyVZvFEdEVn5/dQTp7eA
-tXdrbZEM379ctCJ2663RbTZd55lIBev1fTnKQkvDTY2e58yIQ4E+Nzr99qg9Cyf6
-e3OhErTUqEBOhusBge4/7E5LrIVMvo6AFU9qgn0Sgsnu/ww2txVw3XEjqL8Hgl+4
-Q/57YRvJOe+q29Ye9LL8eaiIRgQYEQIABgUCNuOjBwAKCRD+GAsdqeOwsjK5AJ9p
-ek7H6yt3ZHAJ+7nn7sGmxYxb5ACg1INFN4AMzqEUjbZ51KTVdAvyKlSZAaIENuOj
-hxEEAN5nO1c81jCmgh/oF+p6kiZmqFV3ape5kEmcS/BoWgCXt6vjaldctmFYi7v+
-BY4N9zI3GxQqAxt5D6dY7aN1xlC236CZEAaXUXktvGw/ppHDjdbs8CRuZiA9jm1j
-92GAUY/mm6hX2aGKOkVwr9yN6DrA2CaO4SwK/wEXkVfj+nazAKDCaBzHzwSkkXf8
-QOtOTj/xevpnzwQAv30laCeXTDZM2I/1Pdzma1V1xizfae0kfzZOJBDQtHQDvNFj
-mu6iM1kL0uxOG3krr0AlqSsMD8W7mavbFigUlxbhvuul4pTL/BiJ946FhjlPY0Ni
-9pmdAldno7yUYsWADEKadkQ3ghEVqEqz+ACYbzp3p8K+5KuiFJm9D4uyvToEAIVP
-i2N+4voxnRWGwKXF4E+fLYAzXT5sMMzl46Xk4Ms303F/5JG7kB0iiPPY6oP0l3nl
-ahulRcbNMj7SDbfrfoi4m4ftUYIX3acXCSN0gNuVGipg8CwlGQyILgWRFp6oXQOm
-AlpxhIGcd1jdh3sj5y+CQrugGPNOJT9mzmFkB4rxtClEZWx0YSBUZXN0IChkZW1v
-IGtleSkgPGRlbHRhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246OHAwsKAwMVAwID
-FgIBAheAAAoJEOup8kDrncnmriYAoJdBwMXGVRTFlfw1u4XimCRPVFRNAJ9WFXys
-x0ugWaIaLJ3tyNZQHWoARrkBDQQ246OqEAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ
-9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8IQBPiuFocJNir5st/nm8Xl+gcOZOvtr45
-c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWIebK4qCZnAOlDLYNGVUguGLnEQBSfnhhk
-gh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYeLnGEG4wPxtyVIchwGOv0YRW5apbz2fdO
-7otj1AFUN5WzFw0A5+WHza1OIUhg50Zco6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfk
-aWYagCof3jBF0CbTWUXV/D5/dFmIeuGTuUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp
-iEYEGBECAAYFAjbjo6oACgkQ66nyQOudyeZzTQCgmr4mT/wPN2ppg5x75E3cXn6q
-B28An2hO/hgIPkf/rSSydA72ZZc/MWM6mQGiBDbjpSYRBADdWzld1lyDWDqGPSzG
-OsehXyTSa0pOfVTLckpJpDpErcn8jS8cKrXkVUowI7SlZhPRmYI+5pqGaG5FZ5VJ
-d1TfKWihc7O+JDHoK3yamOnh6OFQFPZUF1+WlAGiFXLc+WODzbgOSMy/8yXA6n0z
-e+v3et5n9Kzib3sDGjw5DMmiYwCgmUwnofqskHVv1S6tDg08mXALKKMEAIVGyf9i
-j3BzNb0fVYGUOLU07nqQ3RpNQPaKtPQpBobRknQ/ZSdzuiALcCB+Q664f1cKGA+O
-gtm0L/f1xUmKRW3rT9lzMtcCy6kcudCI2OHm/gOcPzKqjj5onpD84fgR4BdbsehT
-8+urmxFiK/bFFI6eC1L5edBQcRLs7TF2jY3SBACdXy9yHg6iDTJhysvR7UuLWE/1
-s9ysirhZgPb0vyIFwHfRzM96AYIPpLZr/jvkrDawTxYGfGIZrj7UyGePu7RCeFRV
-VX55B6evNv3fAqbmwQ1GHTX7WHCNdAkP07yTxZ/wnZudPAzQwRkEfZ39TdccbOhH
-fHvbv3RNQ0VxbWtQUrQtRm94dHJvdCBUZXN0IChkZW1vIGtleSkgPGZveHRyb3RA
-ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpSYDCwoDAxUDAgMWAgECF4AACgkQ1L9X
-83Ny4kN3LQCfZhlov9Ux6LofeSt5g2hVijDdX0gAnRc7adixQ2hpprv4vNoKvmum
-F/D4uQENBDbjpVAQBADfVCPYwZ59MKgXTH4P71QzFnpG4E/MjqDNfW3NxQ9ZjLfw
-0ir6U1gGDuEsWRR+fS5OwCbfeHZDzPj8MZPuOZBamgiDvI1OvrrzUv+BijkWGEL6
-oRFnWI8zJ8zDAPuuvP1u2FQZOoKFXaHo2I9Q8zuJz8P2vEkgJfLx2yiPR1Dp2wAD
-BQP/SCCKZBNQIaY0cfKmiv8ZjRcAAvhXLyMCwLQUfVRqoNVOtMMfWpYtGdL27ESw
-4kgZIsxJ3ELQVkRiriMKbsJiNM4dMe+9gNuGz1CG9b2vhUPZ59sREVIRgyIfr0BJ
-AsYOn87mQ5lOBA6+XmjHO+ys4xpEVJZyfrq5QAw5GYcrPWCIRgQYEQIABgUCNuOl
-UAAKCRDUv1fzc3LiQ475AKCVZupUbMXq9yw03M34RS9YT9MzKQCfUgFd+Fn89xqU
-4Owg/MQzYlLreUmZAaIENuOl2hEEAKeOL2pIdZ+zQtehxdL9l/uDBFSTuN9rLb8D
-gLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT83lq+Ad0lgaZTR4z
-6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmKnxKAyJyVjh7eZcjT
-S/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlxsXpcrCQIoKeDXgKN
-Vv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx5MIw4mipvY4EpCaH
-3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RDtfbIlbwotfbiOT9T
-r3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfNt99116+qdwvWrTof
-cbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJFLE0dx7DSkUTtWbQG
-ByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq/A0jgztaZVWa37IY
-tClIb3RlbCBUZXN0IChkZW1vIGtleSkgPGhvdGVsQGV4YW1wbGUubmV0PohVBBMR
-AgAVBQI246XaAwsKAwMVAwIDFgIBAheAAAoJEBPbllU0xuPx7NQAoMhUK7d8mW1F
-45Qpwtpbn/EdSuqNAJ94+GVY6GrtMbA8yrZHeD8zSAedrrkBDQQ246YdEAQAzpO6
-UuCWWpP9up5GVhLPoSCBfSIA9JWm5Ap6/hjQ5hia7CcS8E41PjaGl6Pkh5lj2qkS
-UBa892SXyQMYqMqEq/h7+BW7+n62SCRMtYOHRYZPA4hvs0d7jznGQlMsltx7qamo
-VNP0XF+ws1wHLjyQl3qMnkrAQ8lAJP+jg7P5Hq8AAwcD/A61qQLRXsSFr7LMBnaU
-SR0o6+4/HCdh8t+mnAeQBDAkne5DTPiwqzqsjoYekX6JK7wk+mbsJTd/Zw55Jkq9
-xVm6nEUo/JIbN7cPlMqfCLaoS+ttbxZ9fNCO3WTNdWxAr/mGZZiBfy9yTcxUfo5q
-Tg0ffWy40CNHaVKk+iIcktGziEYEGBECAAYFAjbjph0ACgkQE9uWVTTG4/EmaACf
-U+XRhr/UgvgCfMlOthY327vlI30AoJypWeGLup2DqouZIGkY8bmpDrz9mQGiBDbj
-p/8RBACXrm5v2sQpLtexfA2S8a2PUruCeqXYfVsnkYX1sYJaFaYHxYW2wDL1dR4L
-dZuty5YWBOxu1N9dnkjuPsdIbq6R/phy6xv5sDUihP4YBAZakV5ahd7XrBdkWXSk
-RzaJSfH1OG2hAXR87liVu8ck8RDeS+ipx1vnZY45864IAnFzqwCg2qjnDRjGAn2O
-SPsnhyZH44VQQpcD/A7SOu9gTt6Jl4VSMY2JGi3HOFPOHnevG3Pb8NYbcP4gEU63
-iqrHGndYJI07lKcFlZRbnSEOSFPFLuNKax88GYKKeZDoQXkVoU/ItAGrS4rCExpZ
-+Jx2tBL2zJcWU+7NDmM5LeRUDE6a0N3sIxMLzz3Z2PTarMATjpA01Qj3WRlcA/48
-g1+gnyFXbO+UZn21WWj4uCyXUE6/G8SCZhXXiDJOYxaBrmw2rtN0x1aLwXPRXLuw
-jhL5Ewn3qszCzaJPNYuLaMY7jiK2ha20LCqYYmaVJa6tGy9iFIGC80ItcUYZpCfm
-dw7W2oqdZIN/rblScCKmyBbw/gCB3molmLBd8nrseLQrSnVsaWV0IFRlc3QgKGRl
-bW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246f/AwsKAwMV
-AwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAoKRB8Ey3Ny6TaKaGoL2GNFQEwM1MAJ0W
-blK0ScSKbm1BN+2hfDmmKRkgvbkBDQQ246gqEAQAkdlSJYfTiZH/CkfV8tnhI6ID
-z+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7MdHAz4RKFnAAXPDB
-ZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyPTIU5vq6FLmsWmMB5
-5iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJgag14bTaBw0niZK0
-KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CNQBBO47VUi0y1UVjE
-xtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+aonKzj5QEo1XiiMNT
-FFmPiEYEGBECAAYFAjbjqCoACgkQDIIMcdJpkxOPrgCgvrCZO/Txjq3F6U9vxdQq
-lrLDgXIAnid5WPrZkh91f3gM+QXTQfmq9V4RmQGiBDbjqN0RBADBWmbmmByw+u1J
-TAixxj5NXRXQJ9zLtkxRQ1GHxLQPyQzojWWnD4kEme8yvsFXuulbPX8zZMnl6qcC
-8wt+b5E8dCtZuvQL3vS51yGe9M76VRC/1HgriE0YqHMTYJT4J+HciftldHFid+jR
-nGZpLwVtLxiLaWAm6SBi82FTn4lVGwCgtjc3u/SMsPgylPRyN/QeH8/OZ5MD/R2y
-G/c+ZF4kWcgmlzjJxQUN2wGYeDoOWUMXS8mf6yF+DLtwxo6oOlLaLHVTR6+qH2Vh
-z1zaqk1Ir6FJjkuUGvHbVFt2BmvL26StTjJ4zC4UFSWYP3qLvfbPThT+RoD4ea+V
-cPxGEGeqs0umImJ6s0reS3KJS9vgHtGo11Is4nP1A/9EzV7QkX5EuEnlUpGV2q29
-aGYx3RpcOhDYixogNHuW+K9KwcluBEEBmT74NwxVzI6qdJVVZn5lxT4IC5G0z/ki
-df1Rkgv8Eqj5DIikgnp0asB8FiHSsb+39d4cnk2V0ez/LmknXUl2mpKpk/fb+qXW
-TqPDbFUE8dz8zyqRFXIjwbQnTGltYSBUZXN0IChkZW1vIGtleSkgPGxpbWFAZXhh
-bXBsZS5uZXQ+iFUEExECABUFAjbjqN0DCwoDAxUDAgMWAgECF4AACgkQN8q1H7eR
-A/iKXACgkZY9/w96yK2Oiq/MUs/A74SzJ2MAniQ2eSHT5CQ4G8PPvYfPZueNI9PT
-uQENBDbjqPUQBACn8JyfkTPFcgaWMpUpnk+nTEkDe4GhAG9fO7alTgdT6+aDCdfX
-fXfH7gGwdURvDv6V/KEqcMPRNLAgAeP/F4T6OtoJNTxfWLB7j14DJNpYXjBPJPN1
-kpD2at8GcWB1aVGMsAtxMwlo4TZlqyfzCAAQeCLhBbIE9LWKX5oUTqiLOwADBgP9
-Gm8md+/xWp9sLE5i3uZ4t9Muu9w+UY3Ke/WcSA2CNthEYhHNtcMPP6PBwtz0x425
-mC1pe9RuxDyzRfV0/q+rjdWZBNA+VTVNDHXSj5hifvem3KFvA6TIgMabJ/q4WE7T
-4Hn8xjQpEsLGjSXAzG9WRg13qTzTilIk+rC6xYGbZHSIRgQYEQIABgUCNuOo9QAK
-CRA3yrUft5ED+P5vAJ9dQMc2nMpcKuH28xwKl8r7MP3pygCfWHGKFHWIDkUt8RfH
-AB9geauEQSKZAaIENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t
-k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+
-Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV
-n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU
-p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg
-SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT
-Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn
-4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL
-b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQtCdN
-aWtlIFRlc3QgKGRlbW8ga2V5KSA8bWlrZUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuOqZAMLCgMDFQMCAxYCAQIXgAAKCRC+eUhSvlz4hvEjAJsEfDLAxH49s9lf0nql
-F4tcflpr/wCeJKCP6iVwvhGIdCu+Dbvf6z8/sI60Ek1hbGxvcnkgKGRlbW8ga2V5
-KYhVBBMRAgAVBQI247e3AwsKAwMVAwIDFgIBAheAAAoJEL55SFK+XPiGmdUAoKhr
-c+z524neflMpRwJ+NG8KVxOxAJsFZqm7bBtYllrdcTqNqMk49LfBObkBDQQ246p+
-EAQApnvWjY5rMvw9Ly8xFL49pGjAYFb9zFijvgG4tMirI3T9EBLflKLJ8m4KWoRo
-T2eNmy/JGLHyZjveaVh8TerDV+uxZkEGvv702nz8NOElQTjHWHoy0n6poci6Fxhf
-Jd1bnOjDK2mZEufEQNSn2PhA46gjCLRTAPuwLpitSSL5ubsAAwYD/ij9KRO69/Jx
-3+W9DZQxWIQBiKnYHVr1us2WpdpTV4jpCqJOCOgB/hlBmCY1C1/tpsAj1A3ZZamJ
-RWVZoNokkReItZLXfGacprGbmmjcg89gFM5V3nEUNCU/mm2BQWp58h4NOCv60dGr
-5GAqHDxAStPk388zbxEdyFs57CPQ4ZJtiEYEGBECAAYFAjbjqn4ACgkQvnlIUr5c
-+IaRMgCfdcoqwoaTU7rNH0BWaYUfCrQ6TnIAniN+yQaBbwZHMbSaDTBRndjLglsK
-mQGiBDbjquMRBACteKaHZ7pcM7Quj8Ec8Sx0fJ3u0NdLso5xn9Ek4FWMLBu6jw7b
-/5KjB2WtXOZSWKHOzeTfUAx79NMKJrD9jZW/0kEAFVeZpwZF1l8fBsRELR9cxAaj
-E3RvFkgCYAhXsF1Jno+qiU5TNvadGU4SzmP4vOnnjrIWTy83mtZiwoFIcwCggaaa
-ClE8Q41NyIfVtjS3f+Nm8x0D/icH9uwM3vpB2QV29IIBqazgaFr7vBoogFoAllaC
-QbPLiyHX1Mk3kEZg5xewmDS/tU4rGqj7UcL9OlZx1ICD8cp80yNYfoI7K5XM6sYO
-MmfJORGOEsqMtoYbo3lluDgDkg26DZNynUeFHZRrIWz2cKqTuaB3dw09m8sJNus3
-poEtA/9Q1KDsjKPi8+2kUzJoK3V61QglXAVDlfzK6B5KOEZ6GR/gX9M5uyyLjREy
-bFSSNPlvLR11+mV4GR5AcrVQOmE0QpFyo1Mr+uDsbqwkzERvRq1r5pOyqM5WPXhl
-Xa5oo4na1fBEX76IEzK6xIVG07GnNnaY+dlPgsLq4I8+A20ZG7QvTm92ZW1iZXIg
-VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ49ENMfPwK1U1ESEYQS
-5Yts3SRcAgCdG65G3ZW0dnhnjQAhf/vk+EteMfK5AQ0ENuOrHBAEAOGceVg3PC6F
-tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap
-r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7
-JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe
-52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE
-VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW
-vrlUyIYOTm2RcTxkf4hGBBgRAgAGBQI246scAAoJECWwD9QwzsaEIOcAnjt0vZDn
-9+3cTNpCuV1ZKIu2t410AJ0Y3CnFBUFBOKk6zkOJnaArwVN3ZZkBogQ246tbEQQA
-lWieyQhDso2ZnD2wb+gq6aqk1rRUhcwdBwCTbiE1aLAsnuMl8nLH4fvhaTz2V/Ae
-joL00e28duA5or9JiBfmVblrpTAIGWsu0AU6uEQsWgZwRdso3NH/KfH8Z5lxwJtk
-Z/hlAiEHohmGoD38mJNsgnm63RXadUH76irO6McvWlcAoONeH7i25AcrMol4O7BZ
-wqGq25ibA/9IRhK7AFhfgaRrDTz84PaIssxp1dWKalRruMJYGQK2LDuEl53Q+d1r
-nYBPliPbjWr/9Gkjx3K4B0CfWWQC0sUl77bNRFqr8FXkjRZcvkCoxxHG7PIFG77r
-Ld2SiQ+eS+dp5QijuuMC8skkvQuuxS6eIk0g+jjGlNhjuu97Ya6xeQP/Zxek37p8
-P1u9TTmN7nPtlzGXGrfKVi9DtJ31E805ruXFqTuoFfcOBRrtfY+DOebX8RxIwQV/
-TEmyxwoXdmkv03EYwD6AJSmx3WuVi5/revcH9nfSEHDy7sFC8CBp4aavAFRQNrho
-mSB9lSm5clGLZiD4nljF1EFABwQFch7HhlO0KU9zY2FyIFRlc3QgKGRlbW8ga2V5
-KSA8b3NjYXJAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjq1sDCwoDAxUDAgMWAgEC
-F4AACgkQX2NWum2XMqywLwCbBT6UT+lNWMh/jxFu/m5Dy2qMwpMAmwePBu7USi6T
-WKaXYRSL2yywJR0HuQENBDbjq44QBACdC1XRPM9CMFrgVUvioU7SShffLnjgWBZ3
-hqbOYrsgtXfuQdv6lAixnNPdnk/k4mjL8w1pqbjUmfmbppVDxzsiiUQlJatzGDfU
-1gDc7ksnXpF/vzghbucy8HNO0SHi3uM/GXC574iZ1oxa/A14fKnCVYT1ThqUa1us
-C5YQXHm4IwADBQP/f4LZgN3dbL4jLqXHDNpAIEjiTbKXxDKHOnAof//4SE0mpaNV
-HLu3nxI57CtXfSI2kMQSm/3pqpTKzaBlM/CbMAJUanhmlLPARDcJ/hQcDtBsF5nF
-G7zfLfe0SBwgsM1HxL968Vva7WsbYpSa98+3HSDuy9VwphFp7i4HbnCbSK6IRgQY
-EQIABgUCNuOrjgAKCRBfY1a6bZcyrA3hAJ0erCoxKtpc184iLkp5kpXQakDGHgCe
-K2WXA5gTOULftladXZn8tNoXM6CZAaIENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9
-aFWt81G93W8WhV51qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC
-10mAsLfJ+1rbnGJPuNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+
-JBw53ytRwjwe7m/D1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzG
-qLaHXSEBsh84OQTxPI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A
-6juudf7A2Ucy03G8HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFx
-RQ8BYJDGIwPrUW5JdlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hv
-F9kUc+1hbmir8SOZ/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJ
-AARnkiVG6yckMLsxHi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHS
-yxr2SYb+8lbutCdQYXBhIHRlc3QgKGRlbW8ga2V5KSA8cGFwYUBleGFtcGxlLm5l
-dD6IVQQTEQIAFQUCNuOsQwMLCgMDFQMCAxYCAQIXgAAKCRBdFeAdP/EyBgb6AJsE
-NGQmK4nUrwcbtZ7+av5GDQ2T4wCfYJaV2rBtTR9aWTRQfZOQoIkNF8+5AQ0ENuOs
-cRAEAN5hO+fEhqW2pX71oSUqW/TRHWSbybNc5brQ1tzgTbheHiG/LQJ1lHjtZoZQ
-syW3H/efEuNARwryo4IjvK0nmiQsqZUR1795XTIbo/waPN08QujC26uWbL1pYL5y
-QarwbKOoyAst4jgE1NpZVc/r1+WUp7NuEapicVjvFNzkiVCLAAMGBACWQJYr+h0o
-zr7JQ/BqI8vTKuVXb+DIBQjuSzN7LvaiIqMqb9ZdfNNmZ1Atvklo2Ce2VMyliQzV
-STZuHJQbfrDTBXBf+Q+AINiHdZEAodzBvDv6p7vsTnoP+A2bS8l6xrWObKt3Ky9+
-GUDkqW3WuagcUKogQgEb/FKec+GegwSgUYhGBBgRAgAGBQI246xxAAoJEF0V4B0/
-8TIGk4cAn1I/jmu7FSgglh9aPmVYAw7HWQMAAJ9PAPPXfqtwza6I8ttGPLYNvEAm
-AZkBogQ246zREQQAgcIj/Eo8PrIhEaxKcjc9dNb9/0BZ3BxBk7x9a7HKm6o0/vcf
-LH2XFjFxB4Ddfe+O1PC9KNUqIi6GTafGbyqS47XsnOJs5nvsrgmVpUUzAd7p0dxc
-c2tJodwhkH4GtOP4i4P9XBrxngQrWQ0ju333EPF6wLWi7qkVyGENCfsvktMAoKYg
-M+XYh9UQe7/HX0GiCnk3ExVnA/4ryBxdyBihj02i6s8vAe5mlTrwv85ugouSB95X
-EX8GPfvaWIW/TpUWQ6a7o8YzU/kIPa7YzETYX8e/FVr2Zd33HAfeLUNp3OS0NvEb
-YJlGDfW7/X7qLVv1o5WCjCHUhK8DCf9Ax9b4z7CbRHptxSE4U79NCCOsXQsObV28
-qlGsFQP+IIaCh7dTqADw/nBmfuXxepPKXS6Xdi0to79LfQtr+TUtJOEVGIbqqQBs
-gESFiT5qR0W7qhOnl47TIQyPQnt/V994QwyAGtIgtM5qYFRW70g1FkyDRX57PzTM
-uU2BjVI6mHkaUkLaLujbRXiQFm8IXJ4rf297GppKuSgvNcr7Rmq0K1F1ZWJlYyBU
-ZXN0IChkZW1vIGtleSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs
-0QMLCgMDFQMCAxYCAQIXgAAKCRAcZ+wTPGYchNG4AJ98zSyvQ3Rt+Y+AVfawyEoo
-sFG5KwCgmMyj4RYhRlXKWCPORBxAfCOYMtW5AQ0ENuOs5BAEAJGi4T/jrY5BtRTM
-0psAneQytzzFgH4+LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrz
-ra0SQ75/SkI5+/S5ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvK
-V5b45htqCPnV2Pgq+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN
-7stgGZsbHCc0y6ln1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4P
-gSuXq6VDG5WNw6B9bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyf
-xwGr2JKkVF0S+YhGBBgRAgAGBQI246zkAAoJEBxn7BM8ZhyEiJcAoJTy/pFHvd9y
-xAYZBYp7qLG2lUIOAJ9Rlpbjou3wb81vE+Qev1+GQGpaVZkBogQ24644EQQAlNDo
-1aAt9iof3VI1z3TehyLrBIR4XmKRSM2Bx02CZhQRIwY/QsK6WBoxlJqfgUtsBUuf
-cztjJaUBixq5qPmBgXYqN9/B8HZvG2nknHdiqKrvqFpAqATJtlccW0tzPJKtKaTb
-tkORBDv6hssFa1aXwTN7IjN5nLI1Wh8lsvk9SKsAoP5Z4IDSK/mM9h6FPRsAsAYv
-d99ZA/40UwQLl06u7wBtmxqSdF/86kjC0kWX8J2Y9vIceiNEiE9MmVNcYIKwIM0m
-wduF50EksVjEdgWUJrqT3RztJfMT5+Sgm2KOAvvfmbKa8RF4NPSrVXDDrFeqk6uN
-DT0jnUUTQFYTjk4Pxg9Kl+a/c7Qee6qXn5qeDX8ubZqN0noX0QP/Y5HSgi62UbBP
-5B+e5BqE+ZLeJ7yVtl909NwTCr7KVZt1o3Za0dCYtMosPT9ObAjCanhSnuEWa3hu
-outOgorWaUSEW6Y3zBKvN/M4FA7+1Rhe86gnnWLt+rHqX5M8Y/7JTcrugNtR04DF
-sYga5A16CLsTDxSmM2Rgvpwh14FtrqG0KVJvbWVvIFRlc3QgKGRlbW8ga2V5KSA8
-cm9tZW9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjrjgDCwoDAxUDAgMWAgECF4AA
-CgkQO9vtsXd/vtOr4ACgllMIBb4leDKz61LQiA4TGWQp9+QAn0gF7rrvXtHdEc9k
-FQxgfASZH4RZuQENBDbjrmYQBACJ5res4tXRZj36s7P4KZWUf0YC8mtLxxeNEXe5
-ckAtn8gMfcSQJ4Mei4O1EBvrKZ9Dz28Emv0FmDd66DUd4ybRIk1PN8kWry9UuGLA
-f/VBAkMIyXhYCEnB7wRsNj4kF5DhYiytep2wekPocZO2GAUoIyY2yMNb2m2g2K8U
-nK2QBwADBQP+Ixih3o+++i02Xwi4wOe7aro2xSeBmH9b8nEaJ8v8RVLRO0AgoR4G
-LzKeTOfv57FU48tlY7sxth6FOxeJaQkS1nD1LRpb3GUDZr7qM/yOGYp0WhdRgGW+
-c0eYa32g5ajq2zn3+H1L4yrmRSZM4nmZ5ZXe9ijkGs0UNYqmi0gBYxqIRgQYEQIA
-BgUCNuOuZgAKCRA72+2xd3++00nRAKCX6f3/mVnEreWCgorUdZh8hg1LEgCg7FUW
-Ctn3HWOwgOwxxKzOs/rQm+CZAaIENuOvBBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ
-67rKzBkicjelpwWk6LndsCrbLsIWsDf8fNtih0r9As+2arfApkNlwuCGq1ZlPGGG
-Ef18OqPxFvnghVEbDdcosP4bIm3k6G2sgFbMl68xAGnTtkS5Gfz43uTuznPzdZnG
-bIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud9lx1bWM9KqUtAwQAiRYHm605RZVBkdzl
-fYx1Iwgn/l8Chq3MsPrfBMslapBnq1an2/nEQPmuIde9C6ALN1t03DHpKonx2Xgj
-YVz8pgty2FU7txSSm2EE+975dXp3ov4TfD1KxksOl770PAzixLfNhPW1q4A2cEru
-GgO74qEX3/fAa1J0nRKDgmA/mgYD/2TSZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB
-8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePcti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZC
-B6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmA
-Ymo4xn7YtCtTaWVycmEgVGVzdCAoZGVtbyBrZXkpIDxzaWVycmFAZXhhbXBsZS5u
-ZXQ+iFUEExECABUFAjbjrwQDCwoDAxUDAgMWAgECF4AACgkQpeZ/f6OuPqGvfwCg
-oevUn2afCdW1bLwbcRs5kYrM1GwAn04Y4r15A7ytYdO2PaxSkSJ4gn5NuQENBDbj
-r4AQBAC4cckdPiWgQNkGvAm3q8FxzRLog68/jffvj8Mvt++XQ4NikO0VJ8ezYkVd
-+vG3v5RoHTISynmMWZZjT56aFDSDZPOkQs2G0qZgAEgTpzCUBdlnUC8ZrHSTSQjC
-n7HtR2cpYCCUBliPtatDvS3Me1XdRfBhXib04TB0ci6DrzFQkwADBQQAje0R1INm
-9GkZKAzTECi+lVei7wbXkn4JF6n9r1KL5oULVF8aGHNEJ1Twj7kuq2kacYjc/Di4
-KdESRTZN9szlZnNruvAd9JKHIgbeysene3yRhy+YFaqXm1MtWCdwwaDiDoHDASpl
-55RtuCKxz6uW77qhrZ8E6GRDrhI92R88DbmIRgQYEQIABgUCNuOvgAAKCRCl5n9/
-o64+oWsJAJ0XijmoDUP1Iu6lhsSlmGOiNO/l4QCff5G6w6Vkq8d86Ev2IwS9Wf4u
-NmaZAaIENuOwChEEAJDhTfBph5G51alEDUaIfFvD0K+oXDXqDB7hDg3stVIpZR99
-d2bo/dPOuVWorwXFBDJeK0c7iJEQrMWKlxdqbRGkH8paFSnL5XWo4xMjknqnJzYu
-3gb734ioFHTC4WDM2/voTGuFpLw+eirW+wl12wusHpnNkWxMEIWt2HoGTerfAKD3
-JUBraePb8gHKnXFzyEu8RLp3swP/XaAKje+NAYeqhcAqxv2SEPUj8EMgtX7SDkky
-Dv8wuRfcNwMAt4XwHYnnM3bpUwWj2JcDGE9rsNna/HuFAjz/2lrhUKncH0Cywvjh
-Ytt1t92j0cPZaeR3pY8R/bm8Ns20tiP7uxVlj+szI2Pf5KiUHhiWHJ2RTXGE2pUm
-T6UFhc0D/juyZvINKwkbUSSwpKvsoi15d6e4Wx5PZ2mArT5y+ULitBx4WKIsXV6U
-VVaEBNaBe63k9cFGdPEba/HflSd76kLmcSdy+Fr73d3TMIrmwAKMVdKjRAEc3l87
-YaPd2/LdT+TWzCQw33EotexJ7yZzZA2SJx27/jyIgXkWtwvn5UCMtClUYW5nbyBU
-ZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247AK
-AwsKAwMVAwIDFgIBAheAAAoJEFjLmkyFqB84JOIAni+c3CDhA3k2Pp2CWgBSFcsT
-A59CAJ4gy1+t/Pwk/095y1T6g3rwRbE0zbkBDQQ247CeEAQAnr0w2OcvlUX7E8u2
-C8dJGIj7wRU5qDazxh0tw55/ybJ3/KyhCFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/
-IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0bBhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8
-IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYEAJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRi
-uw0OXQ9B656zp02G5qtDN+IXhgLdfQqgqyWckP4BLDJ4NtQoEM/Mr2/7oj3h01Xp
-bU86R1QFQOXmoWw3q7yqEWIwfOBqClSF0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH
-4PrVjHoNEz4CiEYEGBECAAYFAjbjsJ4ACgkQWMuaTIWoHzgImwCfYJ4NGyH/snAB
-xoxryuVciL3Cyu8AoMtIZ222A8al4XK0DrQqJAnIZlF+mQGiBDbjsakRBADettZo
-8gTOTr1nJXbk5sJfuVSQaMmbgLpZpMs3Q7C+gAX0XX+Q/vcuHp+wV2Nq0S4v+w5K
-+sxDF4A8UDf+q+GmNKMA5U27hkcDQvE48EYUghcdWKjWeFwmmJOb0KMoatdeh4iP
-T4j8ocGw+i0z6o/e0y0OVWsUvIqp4iZP3UlnOwCggOq5GfPJMq3K3cND3nU7GOR8
-e1EEAMcgH09o68Hbjbwpw+ejPuKwVFa37COX/65FF8PONeleq7Mr3Y8yKqbLIsIW
-DaxrlflpbyMz/ShuDdNU8gh+msfwh0+RNzdEPmpJCCVJOdZO46cudgbyAQriH7Py
-sSbi7AbmpnMl7kQruhAZWXLtnH1e1kKovB43a3ph8wF4kotyA/45A8bLKEmJvpq/
-amY6VjDnGsxkDjjw2OoVbt8sLdGjpganj3fvy5KRhWeWLKhmtq44tH97m4YDmGCH
-Va/Iic4aDPMMvUPWdaY5DyCeerVOb3JN1qLC7o5x2HBt8RE7cXnPJl5VKxc4qzys
-5bqQEYYt2dP4cJqKk3OjjCbl6TJ+8bQtVW5pZm9ybSBUZXN0IChkZW1vIGtleSkg
-PHVuaWZvcm1AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjsakDCwoDAxUDAgMWAgEC
-F4AACgkQqUwPdWUyRNYzWwCeMxscN9idLHgH2DP2U6tP0tNR0T0An3lfFgidO+z8
-ZeHXzuOM9TAS+jz6uQENBDbjscMQBAC1u+09NP46dPnn6RJtczL3LEroyrcPmHOk
-3FbiNfJ8YMnFBeST+U++chi/kKzm+N4y8TZE8sHwGqnkeIBtJX2YmQJFhKi2RR9A
-tVn2HV1ZTBYT1q/P7MpZTPMI9EODlCEPJTvX+MdtP8xh0Gsj1i1wujQOJAiXdrqs
-Pxen4Sch5wADBQP+NRROzLFq4kBUpgoTyvWzJl96Gdykf+O0AhbTlZ7ix9KtQLfx
-Grqzgo0hwDjb2QzeWHfjVhaaaSc5UWNMuIQyHRcsj9x4n25XGE0HUyOVSD46IOAj
-fZF+beXOa/NbYcR+zzORfXr1qyW2g4oV8LN4s4uV4dPamQ3l98Lkg8lhWCeIRgQY
-EQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ9ZgYjqQ3rScmCwhc3Ihzt2ATANbwCd
-FuVgvD2Yh8lsuiWswLDFrNsDk5WZAaIENuOzmhEEAKMDGobMDqPX3SKI3/W8m9Lm
-NgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7nTz02IJwZRVlrbEPd
-W76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOuxkW1LWavujX1JRvl
-BZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O4QP/apMk2mc+GJwp
-KSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3krMgOCR6dEsGukIsg
-VWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFBT7PI5TkLzlAEP1y2
-Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmbxUpenRhg/mF5rwmH
-l81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/7r6f4kFUrhO5atCl
-nRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab63kZwXCPiSR+iEwRp
-42GbVL7F/b2rtCtWaWN0b3IgVGVzdCAoZGVtbyBrZXkpIDx2aWN0b3JAZXhhbXBs
-ZS5vcmc+iFUEExECABUFAjbjs5oDCwoDAxUDAgMWAgECF4AACgkQR69LaWHwR4TM
-SQCgwD4p9j1sDwR1+9bBrzNQzVIyzmsAoNL7pfcdW4Jou1XHNc6hv4MpsHtvuQEN
-BDbjs74QBACHkUCB29pMkveMEZyNiKImizF5NZ/cv91Rj319k3xHf0NJWhQp/1G3
-8SxLkPLBdWcoB4mJRNjDyVsxFUXvRWFIMekwL0q1sHSWTcJwCpQs+LKKtPmD3LA3
-bhbuTSdpYgmKy21SH4epubqBzk/P0193mWXzHgSGLeUoTo3N7eBQ0wADBQP8C1Q3
-WGrBZNOmFVly0erclpQRv1qCa785yx/bj9ur2LxHwVozAEXh8jmoiKZyoAz7YFnp
-29kR2qtVplH1oePNyFweZqIjtmZbiCaT4scUVZ/3LuYbxgMoUFeRoG4mnEVvUUh8
-mmZovMmZFrvp0uojcDsfYTx0VBr8waxgJrg2YguIRQQYEQIABgUCNuOzvgAKCRBH
-r0tpYfBHhFPdAKCcyVECIa28vmUPgZ2jkXQoQ/nNkQCUDpGL1aZn1eKrDlHcGyD4
-CzywnpkBogQ247Q0EQQAvVX9TJEynPJEsX3X2fGPPDiQK+oB7D1INI9bfID5NKto
-o8qybivOLo85i5m7RUiEyhX3E9lUg9buKmtIhas0sJ8sLURmCndIKtXjIWg3Kd0p
-mjE8q2zyd7ChQ3ffJ20875wNbR4GQhSO1WTuxwRoL53ft+9JTULJxkQRf71Azm8A
-oJZQYphKeLWrLtFjb2WKbYxst54tBACS7C/Vu40euIevp2TZHTtY0U+ObFvJr8jD
-rdQZMkUFSuhti7rfO/bf7qTwmCvv6IVmn905ACh9bnKwZvcR5T1yR2b6CAN267fz
-riZhu6/FG+9Ddr62ZnV2rP8Oa7uxAXCnoovaafKYupopvHV0z0tUf2+wasrQdHZT
-vc0pfY+56AP/WOVJ0KGzP6k9bYjYSRJ1MJb70wdVFiHdlIlEd5P3jQsXOyHVMrWp
-6qH10sQLto8gweWJr9aHem0QjTNSTVpzp6laBHf7tnLEwCJGeX5f5BOh87akRjwf
-h9J9zW+DBrtpqS6vjlDYU5y6RGbGRl6ndtXhV5FpE4cbLax/pGFWEq20K1doaXNr
-eSBUZXN0IChkZW1vIGtleSkgPHdoaXNreUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuO0NAMLCgMDFQMCAxYCAQIXgAAKCRDe8Pe47Gfb3qJqAJ9MbluIqs8qjd1lOkj5
-8xC5K482bACgjeYJadH5StXmbJMGw2ZD29yevzO5AQ0ENuO0VhAEAM9X7EMxDw3O
-SqgnI76WuIBSsI0gF/UptzpT8g8AY6gQPVhU9fgQHbu7cr8SZFV3dyUVLTzkNq7m
-sUivd3/Fecuf77CpKBCrQlzst+UykiPQ/bT3+gq3owGi9MBCfeU2l5yZZ3yjGIqg
-8/XnxmCbuItw69FNyz7+nQoDM28ci9B3AAMFA/wJBLjxXXqWFY5JdXq7ck66Qx5Y
-HDpPH7szUKrIGKGZHxk2UXoU8G9WRfQ0VVQfaomfnKvo+bFDFJGcLfIITI8FrjzG
-oh2K3PKcxsQiQ1SsVlMT3XmuvST0yvDM8a4t9o+2v8yLLgEjR2dn/lTiGjE/ANun
-Ro9TBGpvz5P085NmzohGBBgRAgAGBQI247RWAAoJEN7w97jsZ9ve/yAAn18Lg2NX
-AdY6HW0LEurh0Xcv8zlWAJ9ePiLMYxpoW5nv4g4nuOAWoL/KLJkBogQ247TcEQQA
-rUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+uRFb9AGsZTmw/FTPETO7iU/3frlyY
-yTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7KnKpw8M2tkPiT+D8ANrHU5d178ev
-zm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91kG04WesAoLPa5zISvsX+Ew95M1o4
-Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWmEDzw4KHXQ7V+OJ7JD5n44S5KLPKw
-IogohDlPmrxDTAJ/YAukApUItd30kr0Uq34QgFktAsqgCP7C5KEM1TTxU25Tcs4o
-jUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKXVVWTySkQ0g9SDaITSgP/a0FyXMQU
-YJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVWMhqlhsfOLaj1WZ+oe0DxKw0O3YKT
-H/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7QvbN2s72Kn2PZjtYqO3Uzqw14bqAJ
-Rl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gy0J1hSYXkgVGVzdCAoZGVtbyBrZXkp
-IDx4cmF5QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247TcAwsKAwMVAwIDFgIBAheA
-AAoJEIl5psVWf7NKt08An0PRqhiMzF+L37DyvcaVl+0zSrmbAJ0fL+8D5Frcp1m3
-YtBMpo+j5dsieLkBDQQ247UFEAQAxuGlBvqoDkxhIDgFZzdHJO+gJym94zgSGHkB
-mBIBf5Q2G2O3zkN7SIENI16yg9cxy7zkTbBu9PMgzUe/UuQov9Z6YXKzTj1jLozr
-GdljKOcW5YRvlibo7eKXDUkSvT+X6J1BOIVexl05Y4Ncmf7otNDre29QfK8gGBO/
-bdQd7L8ABAsD/R4Nq/JQav4/7d5ETuMZddPAxV4kCnY+7F7oJgHDKJheJxt49rNt
-fXSxBZUsJ9P6Xhr46fCRT33DD1P8RyUmmS3/dJl7H/qR3A1rox4FQPWAuk4WGhsf
-SXvlZnFWKJhC8TZzFisjiXjw1OFYiF4TArxj9D7d/cHEKIi43rtefpf+iEYEGBEC
-AAYFAjbjtQUACgkQiXmmxVZ/s0rskACeKGRhY+fGFtaL1JQxoHdDPRJ+wu8AmwQa
-u+u5pPZc9UrBr0UV+pGPpY+emQGiBDbjtVERBADdUAZzhP6+69VdyRrgRNotouUv
-XE6I8h0kxZFZZDrQJmpZcNWkUHDqgbYDJ9RmIeEuWZNmyzPxSFcvD9RGw9KmIZu2
-kZYqIuzg4KqOyU3SUfNycarEZYJkmLEyBlrkNxZkmPCp1cRsMKGCbhQs//v6Iq8h
-6dNA2EWgJev0y12gcwCguk0KZIqVO7UfkaVaZhMr0Cd1at8D/juKnRViDMi9SEjS
-JZwb3mw1+yECnM8vrM+AoGoAKiCz/n8N9Gf2DTsFy4yKEskPQ8s09Wc5epBFo3gN
-ruMu4kDnde0uCmiDEbTwzpdSKZO5x9yi+7b39uCNkgoDlzwonaXNdIn2NnFKjL47
-TnV/vKFdtSZgLW902vwYGTr1ArL/BACIcx9TdxsJ9NMyaKD7MEcKQeOrOqv/Mq1H
-xFPkDBI4hTZpQiId1XTxqkJ6UHDw9sR/TvtO5YKrZjINkmaBZFiHlx1oyB0B3u6X
-UVLXIc9liyFyh9aOBdQkdHgjyI8Kzk6Z0ejYcre5TY4zfplAZKkUDlY3U0Sb0a0x
-IGhgo3YRELQrWWFua2VlIFRlc3QgKGRlbW8ga2V5KSA8eWFua2VlQGV4YW1wbGUu
-bmV0PohVBBMRAgAVBQI247VRAwsKAwMVAwIDFgIBAheAAAoJEJ7vNM1LEbJfSQQA
-oJRRe9UHKHiX2iFczXq6nrvr0NhLAJ99W/I5b2/2QQ01we8i1mcSYPWj47kBDQQ2
-47VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJDflL0+iBe//3SADv01qUmw3jWMAux
-G+CcCApksl122V9npEHiLC4Q2A69roLRsbxKBPebustfadLJoVYqPsvjnrBlafe5
-GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z/mN7KhHANzoRAbsAAwYEAJO5fkCS
-dNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j94Hpz5wGWEXF7z+FbDq+4V0UqGkKx
-aERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZpKmehXtldpWGCNDZrE0RasrFCKENV
-hFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZiEYEGBECAAYFAjbjtWcACgkQnu80
-zUsRsl/0XACfffuI4IS7cgh0PNghr/0v3L/NhncAoJNwutmN7kkv9n/oPqkByzLx
-vZt4mQGiBDbjtcsRBACBDJOGX9C/xxCVZNP6OHz6cL5vM3PimUAhV+9HAVVPQViT
-nFKrkYPSQyRfWzjOU8RO1Tp5CHz747oOb6j9P74yH1uy78yFg4UuhXBWinhuCKKq
-4IIWwJkCKBFr1U8fu8a6Y6NcjqiDA0KmGRJrMPmXenXkJpFGHG78rUvNi9IMfwCg
-ugzNILh/3XZCZU+BUPYeXL+nUAEEAIDXZhj1vFXHgi9lmijKDjJocEBoamN/taQy
-6Ox1RRD6HtfAPY5TER1n7xm9hMzE+Ov1IKpH/E872Rha1qu1v7eOa6eTuNWF0Nvm
-SR955freRsNuR8JNIb6StI2ER9pzBUfjykC9pg2wPeC7wpQJIF9TF+Ja1BvG2I+h
-a2xJ786AA/sHEUvAOsc58YbPlbIPyp2JdEHvXTRT2NISVRuTMQsg8vV99nMYR2CU
-h270uPyy2xZaD/kYcJ9/1ngY7C9pbbNWoV70PkEMO/qj67OIViWVPzUhIdURorbp
-Ghuc3oBzUxOgial7IbISPRItDgg2oZoY4hqyQNx8Cj2ZZAzDpM2vCrQnWnVsdSBU
-ZXN0IChkZW1vIGtleSkgPHp1bHVAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtcsD
-CwoDAxUDAgMWAgECF4AACgkQa8R3gFSs0kZA6wCeJUyRzuFbsZ0uQulvpgOIRTLT
-KscAoLd3InVEj20peTUQ5b2NOimSXnKxuQENBDbjtfIQBADMfPDBQoMzv52Mmjb8
-SdaYKKNzqDd9K1oY2hcMSi+LcHag+KJFOyKBf3SoHmcU/vCEN+LyTgljYSKDmEf4
-wZ2+eLfqFgSdBJp2xm55ih+9CHXg3dXx9SbHiGJCIxfJaIsnNz3VmJGPDDjBlaf/
-hjl/7SZvR+MJpVLFPGjj7uOhTwADBQP/Sgv0abeCXVdVXwGEmhdV0VDo833IQRdR
-u1yt+QLnWRMGTY1oQapsH6QLwYSZfDJlxbsBA3tfqKStpRSbdGNNTsK+RIehsGdd
-i3sWGplRGm5Xt5KpkY/mc/tLFaYJNMqAgfWQcKlZHBp7EoWMgiRiDJUWq0TH1wRD
-oPaRc+H5GdqIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAKC5Gp5sHM9sWdZe
-M6qfu54F2OwMQACfTjYXfpMApAROPkjhhFNqH0d8x5E=
-=1N8S
------END PGP PUBLIC KEY BLOCK-----
diff --git a/checks/pubring.asc b/checks/pubring.asc
deleted file mode 100644
index b58aa5c11..000000000
--- a/checks/pubring.asc
+++ /dev/null
@@ -1,734 +0,0 @@
------BEGIN PGP ARMORED FILE-----
-Version: GnuPG v1.0.7 (GNU/Linux)
-Comment: Use "gpg --dearmor" for unpacking
-
-mM8DNUWBuARHEAMA8bSQw1VFSXbgZ+nNXhM9xeDD+OpKQU4hUaCKfuTtRHoY5QxT
-Pz3DFWRlFewsA50Ou28jlPWxIKZaaGxMqbDtqyUsm6AEz/vRi5VKiVHf28XUkMry
-QSTHvjwJFVb7+6WbAAMFAwDXZiawNtgYsjwVedv/xXdhTsrf0Tn/8HCj3S9N/MAT
-0zCnXL0flYeqhqL/okuBcrwMA4amAIWGVW7ws7k7QgrfJoWG2SELxIT9MovMLvq5
-Kh55J7H6Yn6uoFzIOX0A43HQIiNjcmVhdGVkIGJ5IEdOVVBHIHYwLjIuMTVhIChM
-aW51eCm0KFRlc3Qgb25lIChwcD1kZWYpIDxvbmVAdGVzdC5ub3doZXJlLm5pbD6I
-1wMFEzVFgbg8a7vmnSZuDxADD/4DAK0FELG1gICh/fxO5dXulV+S1CY9YPQwRxQN
-7zYlixA7vedTCN9jutMC6fOlmMXqfivF2CMux3uz0oTJgjF/myh+jkcOsE+iUgcO
-+fdMIn4oY53Pval5zuCcmqqbszP6mQMAqIYYNtE2BI6acRU8sqwIxx/GiVqELwzX
-4QGp5N/4oURoZJ4Ybb8+6eEePI1vzIpLq9TO0ttQzDv9hO8WNyYEPVAoe9gOIoMY
-Oh9E0W9Ru0wf4sh67KCrRvc7yrFTMwHtiN8DBRA1RYLMDvng6C5fpPQQAzlHAx4q
-EZmAhoAtCfgQmlmqHIwcOa2xI/eOsqexT6eYMty8f/vsNznGhTh5gJ3PDDy8U/Lj
-1KRJWPeDSZJ/6tZ/3DUd/x+KjPzVVnm1zlJSflR5AWLS7IQiyJzz7uo2dUiCs2nO
-4rZcAyDaLbj/2aWwI92UQzKjWvcS49lWr2wp0QURUomqvNexKkHHDyIRhwspXwT9
-glETyn+focZKRBJTv0QtxOMVQeGaUnIuAcsDgpZuZkXBcdXgPbmj39rN+nNUW1UI
-0fKsnBl5cnSgiNcDBRA1RYLaZE80um0R1tMQAwq4Av9rzmMgXgDtJy+mauJJ5FUE
-E5GY3bIul1MuIbaMv6T99uWgwD9q2HsV0z9/T552cOTJ/DIkSjdusZ6+PlY8jYDK
-4xTYwcglPuMH5/EsKW8zZwcwYiqnGMbmY4F70SxZW2EC/1p760rM7MrNCDAWnEle
-gTvEMvutfK+K3DOu+Ba+KxU3zfgWr4z6B74QV2TvHrF0Zgu9UpXOp0FghufA6Jev
-CvYhzNDM4VJV24QaF3bt16JoHQyiS9jtYcMl4IzexeeO0JjXAzVFggEAABADINyO
-1leIKxvoee6oi0zkI9SCJ6dSTEH7/kETqetNArjqClenO1K0AVd+MqMajl97bg5i
-UYGam55PECkkozOlscDzDF9exWY6sey44dBREQhgXLVWE4GZ1G3sy85aD+sVHgxw
-lz8AAwUDILAV8w6FL7PpgiedAOHslMtqf7sh1IeNSkCjRdqvMCKgKroSLQto9Wpr
-XMUv3KHmTL7TpZNad+8xJUK7R5GHUTR1OIFQMJvTodG8RU6JOaGoeTqWgs61v00f
-FgwY6sYO11ckmsfQIiNjcmVhdGVkIGJ5IEdOVVBHIHYwLjIuMTVhIChMaW51eCm0
-J3Rlc3QgdHdvIChubyBwcCkgPHR3b0B0ZXN0Lm5vd2hlcmUubmlsPojfAwUTNUWC
-AQ754OguX6T0EAOQsQMfXrBhe1g+hBCwQH94+08VqNGS/+Fs8s4FRmEP1Y0TuT6U
-qf9QLHtfbPgKbJL1NwGgy6dn4TfWo2PRj0U8ai+YIIPZopl4hnrj+v1f94V/IbMd
-3N77K0F0rJrHzL4egHi95BUVdgMgr00QAYcbbZItd/wIb2TNSu/DRlzEXezA3xRu
-CIBnTdsrHMPc2B4lmCQsyx9/fmBlwrVLlaftBTvrOUa/yXf8hHwPv48avRwgClao
-ChExhFMdEA9Df5ju4192VldJyJgPVz0Ze4jXAwUQNUWCsTxru+adJm4PEAOeIwMA
-hzYyjVb5vlae3V3VO+5+Zsx4SVRB2NeCY74FIN5vXMoWJyt/UjmXC9CmI82PvVD3
-F8RXKUZqZC9gXcGyDYyZ87oooYc9HbQ7lhyOWsv/0dWztX9UQQrHdScQ0TbZcC2a
-AvwJF7WESAGhOGssVKWaUkXZJV1sCpyyEtkUP/UJtcGha/OpPlmG6vC9XW5ymtRk
-0XhFkvG4dLopbRIZgAI0CmHSloKIL5Y4JzOfc5bccNCB/tiI+3Y1JIr3AYMqaSTj
-oGOI1gMFEDVFgwJkTzS6bRHW0xAD83sC93MCuEN8MCJGTZX//I7QVsg5DJ9xJRdy
-5Te6MNA1Ie1o7+EJZ1MqDVF/6+HkITqGWFOPD/GYPmgdP5QALfHW6z9YddHOHH6S
-kt2fC2NWTip4e+/t8iAOR/ynwocPpyHkAwCHsxTXtRlaCbIt40/3d0LFPoN4JYBV
-DM+pWfNgNAWUzgMEMua2P24g4P4NZnW3fsJuYQ6Ro7jqu6oolfFkxVOYd2/KrnH5
-Mggu3D8q+gg68kzXTj62QW9vTBax5Ve0Kk+YzwM1RYJlAAAQAwCWZQsoNJJI8u1n
-V+5VZaXZqZBn+uk3fp/my7l9YLQeV5S9U76Ogdw0la/YiWX2m8Aw+hO47pYswsyR
-i2lu/FE/dr0o0CB53LB4EnFJPiBHrB8rm3wI142BQeJ9Dj5YU/MAAwYC/1gB0NoF
-l2QhbYY83tuLg/UlIkM8CZtxtXR9vfQq0UgrVuDoeLx0/mlnWm8pmJsHR+0r8sL2
-yjl7P0RQ+FJtiaMTVHihJyhXukCO1bPM3PX8L/QsmXFzWcfmavk11xpPNdAiI2Ny
-ZWF0ZWQgYnkgR05VUEcgdjAuMi4xNWEgKExpbnV4KbQsdGVzdCB0aHJlZSAocHA9
-YWJjKSA8dGhyZWVAdGVzdC5ub3doZXJlLm5pbD6I1wMFEzVFgmVkTzS6bRHW0xAD
-VtEDAIWyFsZZgyT9wLmEsVbLcv2WNK/z7XweyDOV203Z3Po5lo75+c8bFkRPNcD/
-0R/nD5wbyNPACFHxe7VUm+wLHZFq5Hw8TuAegqNq0ZlgeR/vLgs54m1eOi3jbDfy
-ZMJASAL/XKRGnGu3oi6SjknKsKhFOprdn7DeMW0q7YP5WtRTnnrJjIhDl0c+mi82
-Yj2OVEOLg3SaILBDZJd9muLPHQLAp95XsKZ0nHfBzlFFsr0V5BvWF4UV+U9JHxyD
-uXLWyEDbiNcDBRA1RYK7PGu75p0mbg8QA3mwAvsHXEo6HotEGw0stskTnV/Dp32b
-SJ8yRq2kOWfQAgaY1ZZWVRSPtHBDAJZJ/LpfWXPke90M3B72v0a9gAxOx5Vfevaa
-XJAdp/ZjrVh1TE90LujbPVNeHt4a1dD0bQa9EbwC/1NTZMfb8LDHxYdsJdDdZxsx
-fCDy2U7BWC1e3LLQCJOeNfSx76ICJBLq+HOpCgP2AodGgV9Rx01O3Fz8Gx3iVRgZ
-bKnyS8perkS3AFayedGat/6reUI6KJtddro0SIeBxIjfAwUQNUWDEw754OguX6T0
-EAPKMgMeL8YKAj4KvkJBWNxt1W+WTjF2YBj4pYmrWisXxgmRZWEwwyDHYecH1zE2
-L12o82QGprbU8BW+GUXQVxbRt0rvlDqfGPN5HAgdjES7sK3qVZLsVeMcnhpjDDQk
-pYkCIsWueCKKRwMfSiqZ1S3oBHIz3CVzbQkdMp6FbpSYXRR55CyzVdUZDb9ynXKx
-QCk3Pmn0bTFsRWRFOlRe3oVpS2lM2EQFu5cWheypAt2y86ZuoevHPkcpsR0UXD12
-9IzwOV3cstGm3jCAhdGMmJkBogQ2446eEQQAtmWxQ19MJiSPMiw2EHSImXgLhy5n
-8h7Kl2ixlDGbVogL5/4TaXLcGoZsypuaF4px1L1JCzkNLPKzpbteZ4cOGs3N9K0z
-9S7CJJ+czkTZxXYGAukSsoTnopv+t/v8hrXZ05uPZVX2gqsLBJgQhJF2nlgxqvon
-tW/PSfPU+p/yarsAoKEJI1XlRhvgf0syevson3R1kFZHA/0Vw8i11+Plhxj9mnre
-dV5SqI1hsLGZnPSzz2IcFP0XFDu3HtUEG9FxZVFRQYWNCUKTP7cv5DYvmhlhc4oG
-0PhwFmZFLwPPlSAFZ3jfqfkh4RiMi01yqQGE6uOgML5ZWeQqb39Ngqf/ltWlcgNK
-pwVjMniMV5kfRzoupccZ+XI2owP/VWbnzl1qgl5Ab8+Dst0ORW40ENP/rcvKw5/D
-k2oj4uNRclJxIuizvqsgUtPRY52Y/vj5HEXF1vfUjcZhCUWOzLjR7ecCLxB9ozRD
-ifZbM82RQQ27sLI1xyt+fpT2xhMuvcQj9uohGn8rCim0VyYRNQvrZPEpyvhputrI
-r5iv+Wq0KUFscGhhIFRlc3QgKGRlbW8ga2V5KSA8YWxwaGFAZXhhbXBsZS5uZXQ+
-iF0EExECABUFAjbjjp4DCwoDAxUDAgMWAgECF4AAEgkQLXJ8x2hpdzQHZUdQRwAB
-ATl4AKCBLmRplv/8ZfSqep5IjqEAuaXvWwCgl6NEzT+/WewPTGcwZY+pLkycLv20
-EEFsaWNlIChkZW1vIGtleSmIXQQTEQIAFQUCNuO2qwMLCgMDFQMCAxYCAQIXgAAS
-CRAtcnzHaGl3NAdlR1BHAAEBJ4wAn0x5RWtqCjklzo93B143k4zBvLftAKCFbrlx
-lNCUPVsGUir9AzxvP0A3gbQnQWxmYSBUZXN0IChkZW1vIGtleSkgPGFsZmFAZXhh
-bXBsZS5uZXQ+iF0EExECABUFAjbjuFgDCwoDAxUDAgMWAgECF4AAEgkQLXJ8x2hp
-dzQHZUdQRwABAbfCAKCT8Guo/lZuVYtzb7qPCWa4uDyfwwCfXam5miXQfBXSZx3x
-oda1yt8vyXK5AQ0ENuOPDxAEAJyN1x9X9LsjfX2Z8O9s7BzMO9OoOxFtvZw+FA0B
-uDs0WVYkq1GuZ9/XiO0K30zvtZnlb7NMvBfz7xbLeYx+vKzy5xkq18+LE5dU+HKK
-dRQZKrrwgCsDy8tJRO447QsiLTksCDqPMaE32OCRBF5nKrG5vih7/cmEhf2CuAn+
-2yM3AAMHA/0Z5eYysaLnAwPeqQ9vNvUyrCxUEmrvl4svG7zkkg3ZcgAbDpDQUmni
-jt3gEBCoAzO3c41TU5wJaUNBEPGPWfKcTlmBEGJWjK50QQuA2diGncxIS5SDs+QV
-af434a6/KFVQcCmV7K8/T2S8/nuGJ/rIlFL5XovW6A/S9mYEjh2pD4hOBBgRAgAG
-BQI2448PABIJEC1yfMdoaXc0B2VHUEcAAQEgqQCfcDXmD8uNVdKg/C9vqI3JSndq
-knsAnRxzVeHi/iJ73OCKtvFrHbV9GogqmQGiBDbjkGcRBAC/DCQungO2iJ7j9+9q
-d2crjBU8K+AmQhs27JBkJqtAbC/xFqkHBsA1Pi8Zb6TLa/OCm2PbXFiM5x00wiEn
-VKNzuGOzU8uHB6kwWtLj8+V7VOWOkSDEtnlTF6u0y9JOvs7GwDvqOM5C3QH7La+z
-nNeAu1527Hj6l0XGSAzyvp+NkwCgnktU11VFpKSIdoplZBayN9OzT8sD/Awc/890
-fiSMWYNGo4+n6IHxhjBBM9lL+DAe1RtCEtwUSWNrGsIxFnDRkMxvMpaT4GusG+DP
-haTddrDBSyFiCLxKDBYgMbSO6wQ9g6zWEEh1ZMTMVU/akr81DOEColXn/f3Q4sRj
-xI3hu2z8tjVewAPNTuWETQ6iHHoVqdpkK4aABACfbMrnfK6TujxSs91MfKBWfYxy
-w9hjM6+VV8cJJdDXiheMKzWcrVecwgYYzukmNinO//BRmQcs1wdfi5UdfHLNFDig
-w96SdyZpHx+79ghD3NqDmzYakoRIoDKcZAIrAjgfl5if6vIiA4c1LjhSdcVTBsSy
-ic/mkk01EgztWKY0abQtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA
-ZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AAEgkQQT9K
-8xr9q2wHZUdQRwABAT5EAJ9fcDAXA+7n6av9/VJr9a/Sb1PnuACfVMEihQSsyol6
-FBm7vc3S73d+pIq5AQ0ENuOQghAEAKFjw1K+7qwrSngPQBUGxHPyJVdiptGVFNkA
-dLgsJfDH+LwWZ90hedo0s6jKLjhiu5IKeVl2Hhhaq4LHaaDLAbnz0DNwWFqGaoSU
-1spvubgX/8QYhkrTNOBbXe1DAb2FNc6Fh6pyGc45oMPA8QrUav7aj/kA2qGquKfR
-MUUFYuB3AAMHA/9HTT2zrVf8WRRQCHzDhO5rqqd03/YaypezI9iN0XkTeASsryMN
-wMueI4eqSzBXXtskbzVzMJETklxUUstZAmD1yl6hOk/5hwX6b3CG2zBo4n8s+vHz
-zyL86aW5IPzVU/7rMGGFNRulrN8sR23ddzOlbsI101vKIRyBP7oKv5bYZohOBBgR
-AgAGBQI245CCABIJEEE/SvMa/atsB2VHUEcAAQG1rQCcDbUhj2I23rC0k3kcChgO
-X32YhQ4An0zwuiPl8hmr4xya2h04Ev20gjdDmQGiBDbjkc0RBACKzsZMOq0QzqW6
-inp5azEWL36qFRWn03pL7GVvDNBlUDgWMKp/VVH0lfx/CMt5ybFPnFOFBVxGqB4V
-VoLKTLY2B78VwUw9lB5o/mO/kZFZzk+8f1LDym8Y5MHnpXhl5HhxAsMGbkIXm0q7
-UEJZarYwsd9y3tNd7pALNkpyPN3DywCg31W+so34RtAL5MfN1ZpRal1x9acEAIVY
-TItU9OkjWM2ygJnTQXwVq7/ZtpeTyZ1E6UllLpurniSx85BDNF4FZx7fmHRbs14F
-Gn7J6hJ/tjeLSNM7ias6Iv/Q0JxLyoo2cYobWKt0t6zelCENmlxR7Yb1bcWcaHGX
-pbmGlhz3nnSZSPYfcjm2Z9JixVxWOk1Ih0GLPETYA/9IjW3qrsscxCnSHcw9DbPt
-1oyFQZWJedWXb6sqNvlPtu9IV1XSLLK7Kiq9Q8EZbAkUsDGPp6wdGVDpby2iAe6g
-kJHtwvZsrv3yaBg4TGTmAF7GrVUdBBk3V50rgsajYRIqsJW2RjAHMBTvqFgUoBso
-xTx0zEjsNF0uNne91DcU2rQnRWNobyBUZXN0IChkZW1vIGtleSkgPGVjaG9AZXhh
-bXBsZS5uZXQ+iF0EExECABUFAjbjpH8DCwoDAxUDAgMWAgECF4AAEgkQMYwfrvrv
-bRsHZUdQRwABAWcDAKCzaFoiAm79QSmYISeiM7XMKhoHDACaA8CU1j8+20C7rNip
-OHYz3KfUMhe0DkV2ZSAoZGVtbyBrZXkpiF0EExECABUFAjbjuAADCwoDAxUDAgMW
-AgECF4AAEgkQMYwfrvrvbRsHZUdQRwABASDdAJ44x/SDfOdtzwgGJOsg9SBTP2nd
-agCgnp5FlNmTvP6FPLHgkNx5F5BtiUa0EkVjaGVsb24gKGRlbW8ga2V5KYhdBBMR
-AgAVBQI247gfAwsKAwMVAwIDFgIBAheAABIJEDGMH676720bB2VHUEcAAQFepgCe
-OpUG5rVkWVJXULaeGZzqbT+2SbUAn3HmDGXzAJ6lCiYh5NrTIb8A7wIduQENBDbj
-kf8QBAC0pe0mjRH/JmKL3mubSTRMKGcd77+l8psl4GtcA6iqNj3g650Q2xxgW+Qb
-1iL9SeiIJP8KuEfj6vfPVKZHKkRAfsjnpbhN8zz7WQa2y8kkmqojHoGIh5wAD3NE
-6ox+1D2WvnySmU1JOuAQlEDfRC5C9hSrQBkO0TUCWL2wquDv1wADBQQAl3TuGt2S
-CuYSXo4R2dNZpB2ukqqHOj7nnTQu7ZVoi1OtgZYxor/w783GzLJ75PfdQMSd6T+G
-byq+QgpaiBvlmWtc5rcF3ZgnxiW9n2zUlQ+M6denubJT6/Aqfn7yL9v0sr8K7kTr
-PqAM0lb6DAMwBkpN8o+Z0+aIpG5/jOtnwuSITgQYEQIABgUCNuOR/wASCRAxjB+u
-+u9tGwdlR1BHAAEBj5AAnRH+1me1/iHDnS5ltXysOdl24/BMAKCPThApQ7lJe8LY
-r61+lXUUwr1TKZkBogQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE
-/XfaeJiB55oMmVEPmK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwF
-r3D8TRnarZy3kfiBF1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2M
-bAlGlj8AoKQPFsEPjByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP
-1yC9GJjtec3ugzYSC7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7
-Fz6+upxIgh5WGnnCs2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRr
-cILA568dwNnOrBio5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdf
-sk83dE3iBzvmT8ByIZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5i
-hH2ACSXLWiRXpyMmK2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cC0
-J0dvbGYgVGVzdCAoZGVtbyBrZXkpIDxnb2xmQGV4YW1wbGUubmV0PohdBBMRAgAV
-BQI245LRAwsKAwMVAwIDFgIBAheAABIJEBaEEKSPwoLmB2VHUEcAAQEi4wCfbbaA
-ruJvA5fMgp3+Bk/T0kL/f54AoI56Vqqpio01uS7SADzj47t3WQyquQENBDbjkvwQ
-BAC2wan9ScDXLgCqN7CWSRM5B68vC3PCbemYsuOXZjdN8afw2LSHxZ3buRXfYxRn
-JNo1pm4PGkMQ7ZpQikZZVCZa+WoIVXYXRnYAjxHhvHW0LaQPvnyFS9H5LaGf2Urs
-TWVA+695zYsSaX669XFb9WbiIMGB4yUiXPvQwUL0tSd+kwADBQP8C3sKWjsPh02T
-jcEy+FDxWAn4g3LfsOPw8dfawJln+0h9LA0hTebbKBJWt5OUMqjjTq/pCZ5+z+b1
-0f2WwET/xAvjQSTdJjrFX9DNNU3jhCCelEpal9oxsbNYlVd5zOU2RN4hlmj+eEOb
-5oy5wy797sQpsbrgGetCTsvPotIpvbGITgQYEQIABgUCNuOS/AASCRAWhBCkj8KC
-5gdlR1BHAAEB9+wAoInApOl706hL9+EV1UpIX/hHAxzjAJ95K6j3OWXkiRmu0X0X
-FYZuULXL8pkBogQ245SxEQQAyG4mRUQZagjDgl0xAnaSbLCQ5wJqYq/snwCl+IbD
-lXcoHqXQNO9QJrPKwKQAUv3Nvk7mqZWnfMPoskLOASrs6nkCv2Fo9Aw6smNizO6i
-W7xXepwvxjho4hLnE00oGPCDhUnAU05LO2pTBoxwHVs0o6vtaaViXk0s6dOFCoVd
-f9MAoLjiGlK/3DFWoUrqIiuE3aLfgkddBACrp1snJ1BtiGhmKjt7An6Qoc5LVnU4
-1J/REiQIyitUFAvPX+fiqzDyE3VD8qX/vvTLpgZCYvvEdBlSfM8IcCn1/Qh4aw9J
-HzuvKQg8WclvnQ8zq/7RV9J7h/aS/KIhDJIpGhi6YfjfjdSKfLYYfr3S4TVK9xD0
-Za3AH7/lrTqW8gP/fpKWu8fJyJ9kqHyYrI/j4ykt5QKBj3tHjqCv7FQb4FY8txnN
-3fLzBtva/tlkSKRsLobixjZUGF+uQR1dTCv042LxZ6aEUqrUytxqUc05pCSAvEZV
-8bX2H/5+ulSwdxKEzs1h2NvSTAiZ54zzKGjHNmEitdAaPD/9u5xdAiqPFxG0KUlu
-ZGlhIFRlc3QgKGRlbW8ga2V5KSA8aW5kaWFAZXhhbXBsZS5uZXQ+iF0EExECABUF
-AjbjlLEDCwoDAxUDAgMWAgECF4AAEgkQH+j8bwQllncHZUdQRwABAVpYAKCVZ7Df
-K+i/YZGyEu18DnWq0ixligCghGwDoMGgLnenSjyShMZ+1Ecekia5AQ0ENuOVEhAE
-AIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Faon800I3GUzETuQA2AT3getR+GuV4pbZW
-E/80b9hnNW50UJGiP1+SXfVtY5vT8p/gNFwn5d0O/pq3bpgFRJmoawTzx8SFDwCV
-PHEcwOHE2j5LvfrvRBOyKU32tr976ri+Uowt0+92LuA7AAMFA/0Yo9dDqhjR2UoN
-cYfEZwWhRHaaJenP3z3QbzjJkASb5H84xCTEpv0dqEtVTJUoIo8Lh5VjbiCwok4Q
-PLVSbQFeHqTKb7N96PjevkZ1Co6OrLCNOcPRvXxgCwSGbuuLMkQJEutnXLu0DOKq
-uY94KXXh79La7lTgjReE/1Wzbgc1+ohOBBgRAgAGBQI245USABIJEB/o/G8EJZZ3
-B2VHUEcAAQEJeACgjmiKaxmzxkqYtvmw8HgBnOeALLMAn2iD2ym3cRhcAH3leZ/O
-qAkFG/ThmQGiBDbjlSURBACcp0BogujMnThXpn4UjBARj9oXgQWskkhz657AXu6R
-mX/u5RmpLGqbNmNuqKDIwUbJslIxrpOnA3QEobkIl7ThH+ZUIhGzPUnHlhd7M3dQ
-Ww1U0TfpHyXx3FYb7CCPabrSC7hWWh1ylUxz+RGJJSApR+D/GY+dF7dIllKUbaUG
-bwCg1z+vkNbzqibcwdYrwCjKG9VeFa8D/A5yPHqB9NMp+3OlAGE4XRTR8LeelALp
-u+MuNMGFCMLdZfmt/Amoyau51FsQ7WwWrNM5A+1v3Fq0x5WpNw6Lr7HbN9d6zidN
-+L0uCrXPweET8ueS3DFnHI945epe703TbcjJBO/uYLn0LXExmTg846/1ZlQbPgLz
-mzb/2JMkJ+QzA/4xFbRL2YeaKyu4JjpMNUVzXYogUwg9KZZq/qBbpsIAD7Agd+Zx
-LJHoweItXaC0nS9C6qDJZ95OJrE+h/Tt2D2lmxXseTVlSESaWh45x9mbC0eRGFYY
-RsSx3z0hYwMmXA0ntj0lndC8ru8HjZtBW/KF0VB0RcfSyW+W+yAq0Jxo5rQnS2ls
-byBUZXN0IChkZW1vIGtleSkgPGtpbG9AZXhhbXBsZS5uZXQ+iF0EExECABUFAjbj
-lSUDCwoDAxUDAgMWAgECF4AAEgkQrRsPrUPC0McHZUdQRwABAdUSAJ9ZMVrsRsAk
-tfouxadXBc82Qh8nCwCcCavkRu7sfbEBJqKdldpinYwWZpK5AQ0ENuOVSBAEALmZ
-YtP72G7OodR4RfR270RxTHj40PfUpPIf3U8ezyO3kqjB12IdD2YIXIZW6zEj53ps
-X8DGya5nSvVjdFofQSVHtsnB/H7VHBkaOQnREoInHs4helYOD0M/RZcbRIb65e6v
-Eesuzvo9N0ACSlBsAXbeeNKGfGGCog74GVGcZ6HnAAMHA/9W9n2MwJ7lq0GV4V0E
-OHDVcTAVRSh0nB9uKBVW7hFi4DP7XYBfgj8Nlbc22vMkkdSvNFUoLEH7Op9sMglX
-fiCPJSh02U/6XyAhXDyZRyrOIHviTZ9SHMQQIqtEETVuYRkzvSnSfDBVq1p9gW6e
-ZN9q6AM7gmoKInpRaODFRWU7DYhOBBgRAgAGBQI245VIABIJEK0bD61DwtDHB2VH
-UEcAAQGO/QCfaGt8NeCm0zbssmOrXZ6v9zFk8xEAnj3SpjLTyqemniHSJ9KEzIKJ
-CdiDmQGiBDbjouIRBACKncc4Ueec7dWaVARy2SmNVufeSenYs4AsIPP0v59jEl7J
-I0rb+4JbIJoAzW/hcm26GS/UbbpQwig8/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4
-An7q2aNr1beW+twxfUGWWV5I0o1b/iKVk/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg
-+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eRxLqCt1hT98gdDLykRTlI3kMq6EK3I+z/
-8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpDltPYHgWnUC733ujAKANdyybm3HrA3TSB
-jEAhNfcu8nkrVorvASQUDCLJatWRWJTUVrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCC
-m8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMIfSFSvpZWNgQgYZntiXSUGYOVs28T/87R
-oRx02tsVDw2PA8z68q/XRuM9NdetxbUXQHB9eszFLi3W1idsXhd/C4SyiTgEFXG8
-Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVLmBp7qfj5Y9XSM5SE0Th+fLQpQnJhdm8g
-VGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOi
-4gMLCgMDFQMCAxYCAQIXgAASCRD+GAsdqeOwsgdlR1BHAAEB+u4AniJTgzmzXGxm
-JdrTAudfgUEGX1puAJ9+U2nDISnooSEoI9bA9Eb1YlzSqLQOQm9iIChkZW1vIGtl
-eSmIXQQTEQIAFQUCNuO3OwMLCgMDFQMCAxYCAQIXgAASCRD+GAsdqeOwsgdlR1BH
-AAEBGuEAoIrcivM2owTqgDdGWU6vHzs4IhGCAJ9WRH41/o3n2VLmPuMxc66Tv319
-DrkBDQQ246MHEAQAlUnV8VFpc/NRY6h4EeG9RLZoZlvPQpqbB3ypUsJWLwbWwf8u
-0xSH7wK+GRW6bqnsOib7YyBGaF76JU1sB1TxBZLhtCwGtN6JWmKcwumQQ7i5G9PU
-bpAg+M3WOscGwDEbDs2YL+fey2V7Tiyy55jsk6bI0Qy87VrLjYJZua33zk8AAwcD
-/0slWbxRHRFZ+f3UE6e3gLV3a22RDN+/XLQiduut0W02XeeZSAXr9X05ykJLw02N
-nufMiEOBPjc6/faoPQsn+ntzoRK01KhATobrAYHuP+xOS6yFTL6OgBVPaoJ9EoLJ
-7v8MNrcVcN1xI6i/B4JfuEP+e2EbyTnvqtvWHvSy/HmoiE4EGBECAAYFAjbjowcA
-EgkQ/hgLHanjsLIHZUdQRwABATK5AJ9pek7H6yt3ZHAJ+7nn7sGmxYxb5ACg1INF
-N4AMzqEUjbZ51KTVdAvyKlSZAaIENuOjhxEEAN5nO1c81jCmgh/oF+p6kiZmqFV3
-ape5kEmcS/BoWgCXt6vjaldctmFYi7v+BY4N9zI3GxQqAxt5D6dY7aN1xlC236CZ
-EAaXUXktvGw/ppHDjdbs8CRuZiA9jm1j92GAUY/mm6hX2aGKOkVwr9yN6DrA2CaO
-4SwK/wEXkVfj+nazAKDCaBzHzwSkkXf8QOtOTj/xevpnzwQAv30laCeXTDZM2I/1
-Pdzma1V1xizfae0kfzZOJBDQtHQDvNFjmu6iM1kL0uxOG3krr0AlqSsMD8W7mavb
-FigUlxbhvuul4pTL/BiJ946FhjlPY0Ni9pmdAldno7yUYsWADEKadkQ3ghEVqEqz
-+ACYbzp3p8K+5KuiFJm9D4uyvToEAIVPi2N+4voxnRWGwKXF4E+fLYAzXT5sMMzl
-46Xk4Ms303F/5JG7kB0iiPPY6oP0l3nlahulRcbNMj7SDbfrfoi4m4ftUYIX3acX
-CSN0gNuVGipg8CwlGQyILgWRFp6oXQOmAlpxhIGcd1jdh3sj5y+CQrugGPNOJT9m
-zmFkB4rxtClEZWx0YSBUZXN0IChkZW1vIGtleSkgPGRlbHRhQGV4YW1wbGUubmV0
-PohdBBMRAgAVBQI246OHAwsKAwMVAwIDFgIBAheAABIJEOup8kDrncnmB2VHUEcA
-AQGuJgCgl0HAxcZVFMWV/DW7heKYJE9UVE0An1YVfKzHS6BZohosne3I1lAdagBG
-uQENBDbjo6oQBACPtZ1o4mPMk2zYbyu+sNm8P+5oAtD0+129gCn8OunvEwflPrb4
-opOUp07ezwhAE+K4Whwk2Kvmy3+ebxeX6Bw5k6+2vjlz9yXnh8Y7WA6MFk5+BuR0
-FUr8szC5BYh5srioJmcA6UMtg0ZVSC4YucRAFJ+eGGSCHRYDSSq3t9i+lwADBQP/
-dw4So+Ux1h4ucYQbjA/G3JUhyHAY6/RhFblqlvPZ907ui2PUAVQ3lbMXDQDn5YfN
-rU4hSGDnRlyjoefArHoX4ttnlo5zfsQC9oWA+4zEF+RpZhqAKh/eMEXQJtNZRdX8
-Pn90WYh64ZO5Qw2wZUf45IxbaEE3/v5okrksscv6HOmITgQYEQIABgUCNuOjqgAS
-CRDrqfJA653J5gdlR1BHAAEBc00AoJq+Jk/8DzdqaYOce+RN3F5+qgdvAJ9oTv4Y
-CD5H/60ksnQO9mWXPzFjOpkBogQ246UmEQQA3Vs5XdZcg1g6hj0sxjrHoV8k0mtK
-Tn1Uy3JKSaQ6RK3J/I0vHCq15FVKMCO0pWYT0ZmCPuaahmhuRWeVSXdU3ylooXOz
-viQx6Ct8mpjp4ejhUBT2VBdflpQBohVy3Pljg824DkjMv/MlwOp9M3vr93reZ/Ss
-4m97Axo8OQzJomMAoJlMJ6H6rJB1b9UurQ4NPJlwCyijBACFRsn/Yo9wczW9H1WB
-lDi1NO56kN0aTUD2irT0KQaG0ZJ0P2Unc7ogC3AgfkOuuH9XChgPjoLZtC/39cVJ
-ikVt60/ZczLXAsupHLnQiNjh5v4DnD8yqo4+aJ6Q/OH4EeAXW7HoU/Prq5sRYiv2
-xRSOngtS+XnQUHES7O0xdo2N0gQAnV8vch4Oog0yYcrL0e1Li1hP9bPcrIq4WYD2
-9L8iBcB30czPegGCD6S2a/475Kw2sE8WBnxiGa4+1Mhnj7u0QnhUVVV+eQenrzb9
-3wKm5sENRh01+1hwjXQJD9O8k8Wf8J2bnTwM0MEZBH2d/U3XHGzoR3x72790TUNF
-cW1rUFK0LUZveHRyb3QgVGVzdCAoZGVtbyBrZXkpIDxmb3h0cm90QGV4YW1wbGUu
-bmV0PohdBBMRAgAVBQI246UmAwsKAwMVAwIDFgIBAheAABIJENS/V/NzcuJDB2VH
-UEcAAQF3LQCfZhlov9Ux6LofeSt5g2hVijDdX0gAnRc7adixQ2hpprv4vNoKvmum
-F/D4uQENBDbjpVAQBADfVCPYwZ59MKgXTH4P71QzFnpG4E/MjqDNfW3NxQ9ZjLfw
-0ir6U1gGDuEsWRR+fS5OwCbfeHZDzPj8MZPuOZBamgiDvI1OvrrzUv+BijkWGEL6
-oRFnWI8zJ8zDAPuuvP1u2FQZOoKFXaHo2I9Q8zuJz8P2vEkgJfLx2yiPR1Dp2wAD
-BQP/SCCKZBNQIaY0cfKmiv8ZjRcAAvhXLyMCwLQUfVRqoNVOtMMfWpYtGdL27ESw
-4kgZIsxJ3ELQVkRiriMKbsJiNM4dMe+9gNuGz1CG9b2vhUPZ59sREVIRgyIfr0BJ
-AsYOn87mQ5lOBA6+XmjHO+ys4xpEVJZyfrq5QAw5GYcrPWCITgQYEQIABgUCNuOl
-UAASCRDUv1fzc3LiQwdlR1BHAAEBjvkAoJVm6lRsxer3LDTczfhFL1hP0zMpAJ9S
-AV34Wfz3GpTg7CD8xDNiUut5SZkBogQ246XaEQQAp44vakh1n7NC16HF0v2X+4ME
-VJO432stvwOAuLDxn2PxTkIQf8zfxbMfWccoqVkqMZVliLKFF8AbzfC8edPzeWr4
-B3SWBplNHjPqet3lWI6Uc+V+qjhE9k/M9764XsR8OXv3awl6tcYBqwuiyYqfEoDI
-nJWOHt5lyNNL+FSE73MAoNXIscn+BCUxiTy8Tldgvs/Dh3bzA/9WwpWSOXGxelys
-JAigp4NeAo1W/0v7Q95uynOvZY5qHyIE3VA6Ru17EgoJtv2aa+ISclTQUXHkwjDi
-aKm9jgSkJofcxwbAmkLNaZ3MgPxnqghJTIqy4/s9eOYBJuiBXoirLab/ZEO19siV
-vCi19uI5P1Ovcg9sf60cBkHIxHK/EgP9E33RY49Kk4PGv0Af1u2Z4kPQF82333XX
-r6p3C9atOh9xuQGDO8Hfi8ssNowpUjKKfHPaVjILtpKkDe7ONm+g+8+tAkUsTR3H
-sNKRRO1ZtAYHJFpunKtdh0pnOwVctv4tJNbAXexAtrHQLhxhPs4s+XGMNWr8DSOD
-O1plVZrfshi0KUhvdGVsIFRlc3QgKGRlbW8ga2V5KSA8aG90ZWxAZXhhbXBsZS5u
-ZXQ+iF0EExECABUFAjbjpdoDCwoDAxUDAgMWAgECF4AAEgkQE9uWVTTG4/EHZUdQ
-RwABAezUAKDIVCu3fJltReOUKcLaW5/xHUrqjQCfePhlWOhq7TGwPMq2R3g/M0gH
-na65AQ0ENuOmHRAEAM6TulLgllqT/bqeRlYSz6EggX0iAPSVpuQKev4Y0OYYmuwn
-EvBONT42hpej5IeZY9qpElAWvPdkl8kDGKjKhKv4e/gVu/p+tkgkTLWDh0WGTwOI
-b7NHe485xkJTLJbce6mpqFTT9FxfsLNcBy48kJd6jJ5KwEPJQCT/o4Oz+R6vAAMH
-A/wOtakC0V7Eha+yzAZ2lEkdKOvuPxwnYfLfppwHkAQwJJ3uQ0z4sKs6rI6GHpF+
-iSu8JPpm7CU3f2cOeSZKvcVZupxFKPySGze3D5TKnwi2qEvrbW8WfXzQjt1kzXVs
-QK/5hmWYgX8vck3MVH6Oak4NH31suNAjR2lSpPoiHJLRs4hOBBgRAgAGBQI246Yd
-ABIJEBPbllU0xuPxB2VHUEcAAQEmaACfU+XRhr/UgvgCfMlOthY327vlI30AoJyp
-WeGLup2DqouZIGkY8bmpDrz9mQGiBDbjp/8RBACXrm5v2sQpLtexfA2S8a2PUruC
-eqXYfVsnkYX1sYJaFaYHxYW2wDL1dR4LdZuty5YWBOxu1N9dnkjuPsdIbq6R/phy
-6xv5sDUihP4YBAZakV5ahd7XrBdkWXSkRzaJSfH1OG2hAXR87liVu8ck8RDeS+ip
-x1vnZY45864IAnFzqwCg2qjnDRjGAn2OSPsnhyZH44VQQpcD/A7SOu9gTt6Jl4VS
-MY2JGi3HOFPOHnevG3Pb8NYbcP4gEU63iqrHGndYJI07lKcFlZRbnSEOSFPFLuNK
-ax88GYKKeZDoQXkVoU/ItAGrS4rCExpZ+Jx2tBL2zJcWU+7NDmM5LeRUDE6a0N3s
-IxMLzz3Z2PTarMATjpA01Qj3WRlcA/48g1+gnyFXbO+UZn21WWj4uCyXUE6/G8SC
-ZhXXiDJOYxaBrmw2rtN0x1aLwXPRXLuwjhL5Ewn3qszCzaJPNYuLaMY7jiK2ha20
-LCqYYmaVJa6tGy9iFIGC80ItcUYZpCfmdw7W2oqdZIN/rblScCKmyBbw/gCB3mol
-mLBd8nrseLQrSnVsaWV0IFRlc3QgKGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUu
-bmV0PohdBBMRAgAVBQI246f/AwsKAwMVAwIDFgIBAheAABIJEAyCDHHSaZMTB2VH
-UEcAAQFA9gCgpEHwTLc3LpNopoagvYY0VATAzUwAnRZuUrRJxIpubUE37aF8OaYp
-GSC9uQENBDbjqCoQBACR2VIlh9OJkf8KR9Xy2eEjogPP5KCJkpyd4QGc76EAmi20
-BEYCiN1tRGU4h5mpEKAql1NcErsx0cDPhEoWcABc8MFmADmr4KiqfnzS3878AoZv
-yQqf2fnbP2ULwDkqcdpECw4pXI9MhTm+roUuaxaYwHnmLPzboOT2QyFXuaZ1BwAE
-DQQAjwmrcmep/QeqppfsJm40ocmBqDXhtNoHDSeJkrQpIHoUGnOK0SjKy3kkE8KX
-RrJATDQefiOFkCpxnJsj/+kLUI1AEE7jtVSLTLVRWMTG1o2aZbG6DOTNYcfHhabJ
-awJDAY3gH2uJTCziDd2ALTTuX5qicrOPlASjVeKIw1MUWY+ITgQYEQIABgUCNuOo
-KgASCRAMggxx0mmTEwdlR1BHAAEBj64AoL6wmTv08Y6txelPb8XUKpayw4FyAJ4n
-eVj62ZIfdX94DPkF00H5qvVeEZkBogQ246jdEQQAwVpm5pgcsPrtSUwIscY+TV0V
-0Cfcy7ZMUUNRh8S0D8kM6I1lpw+JBJnvMr7BV7rpWz1/M2TJ5eqnAvMLfm+RPHQr
-Wbr0C970udchnvTO+lUQv9R4K4hNGKhzE2CU+Cfh3In7ZXRxYnfo0ZxmaS8FbS8Y
-i2lgJukgYvNhU5+JVRsAoLY3N7v0jLD4MpT0cjf0Hh/PzmeTA/0dshv3PmReJFnI
-Jpc4ycUFDdsBmHg6DllDF0vJn+shfgy7cMaOqDpS2ix1U0evqh9lYc9c2qpNSK+h
-SY5LlBrx21RbdgZry9ukrU4yeMwuFBUlmD96i732z04U/kaA+HmvlXD8RhBnqrNL
-piJierNK3ktyiUvb4B7RqNdSLOJz9QP/RM1e0JF+RLhJ5VKRldqtvWhmMd0aXDoQ
-2IsaIDR7lvivSsHJbgRBAZk++DcMVcyOqnSVVWZ+ZcU+CAuRtM/5InX9UZIL/BKo
-+QyIpIJ6dGrAfBYh0rG/t/XeHJ5NldHs/y5pJ11JdpqSqZP32/ql1k6jw2xVBPHc
-/M8qkRVyI8G0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0
-PohdBBMRAgAVBQI246jdAwsKAwMVAwIDFgIBAheAABIJEDfKtR+3kQP4B2VHUEcA
-AQGKXACgkZY9/w96yK2Oiq/MUs/A74SzJ2MAniQ2eSHT5CQ4G8PPvYfPZueNI9PT
-uQENBDbjqPUQBACn8JyfkTPFcgaWMpUpnk+nTEkDe4GhAG9fO7alTgdT6+aDCdfX
-fXfH7gGwdURvDv6V/KEqcMPRNLAgAeP/F4T6OtoJNTxfWLB7j14DJNpYXjBPJPN1
-kpD2at8GcWB1aVGMsAtxMwlo4TZlqyfzCAAQeCLhBbIE9LWKX5oUTqiLOwADBgP9
-Gm8md+/xWp9sLE5i3uZ4t9Muu9w+UY3Ke/WcSA2CNthEYhHNtcMPP6PBwtz0x425
-mC1pe9RuxDyzRfV0/q+rjdWZBNA+VTVNDHXSj5hifvem3KFvA6TIgMabJ/q4WE7T
-4Hn8xjQpEsLGjSXAzG9WRg13qTzTilIk+rC6xYGbZHSITgQYEQIABgUCNuOo9QAS
-CRA3yrUft5ED+AdlR1BHAAEB/m8An11Axzacylwq4fbzHAqXyvsw/enKAJ9YcYoU
-dYgORS3xF8cAH2B5q4RBIpkBogQ246pkEQQAotQXkaoExYlC0GzW3VKn40g4a4wu
-Ak6Eg1sxTq2TaPN5S3qig135zw/RN7GxtIRPCGtTie2m8ghJvsjxPCFyV53tuLko
-IAEk7PPsXD5h3GjliObUNAfv6AS0/HefgCNlR9EA3SepwWLMOlFg+pVo3VBiIZaf
-3I8Xem5tCFWfzPMAoKnHUtSVCXZ7m3VgmGaibarLfwR5A/4gHjkUF8N/koq3JLrh
-qVDS8dgiyxSnzTo9CivD9k66iKxxRCP9Z5ni+fusJ27rS5HUS4ekanufS3uKASAA
-5zEOOvEmamBJ0Pv1X6gkAUsBOjaayPUiSVW8l4jtmwibI9yEhTWWqf8a+kBqb034
-WIgHUpQwWpMnNzrNSfVCpqDXDQQAiJEc9hFbyiN31SHgR3dfR1oCcKXIxYvza3Zu
-P9slGaG6lCfhpUnkPSkUH2LNOIkRZyIemqIx2yL/MTFhggNLVm73j5YVs0jHIwV8
-esnl9RC0CotvsTkuuXFk41SetHCyGpHhfZOZbabPVainnjZ5RDVRangavdWUfqCK
-zBjQKdC0J01pa2UgVGVzdCAoZGVtbyBrZXkpIDxtaWtlQGV4YW1wbGUubmV0Pohd
-BBMRAgAVBQI246pkAwsKAwMVAwIDFgIBAheAABIJEL55SFK+XPiGB2VHUEcAAQHx
-IwCbBHwywMR+PbPZX9J6pReLXH5aa/8AniSgj+olcL4RiHQrvg273+s/P7COtBJN
-YWxsb3J5IChkZW1vIGtleSmIXQQTEQIAFQUCNuO3twMLCgMDFQMCAxYCAQIXgAAS
-CRC+eUhSvlz4hgdlR1BHAAEBmdUAoKhrc+z524neflMpRwJ+NG8KVxOxAJsFZqm7
-bBtYllrdcTqNqMk49LfBObkBDQQ246p+EAQApnvWjY5rMvw9Ly8xFL49pGjAYFb9
-zFijvgG4tMirI3T9EBLflKLJ8m4KWoRoT2eNmy/JGLHyZjveaVh8TerDV+uxZkEG
-vv702nz8NOElQTjHWHoy0n6poci6FxhfJd1bnOjDK2mZEufEQNSn2PhA46gjCLRT
-APuwLpitSSL5ubsAAwYD/ij9KRO69/Jx3+W9DZQxWIQBiKnYHVr1us2WpdpTV4jp
-CqJOCOgB/hlBmCY1C1/tpsAj1A3ZZamJRWVZoNokkReItZLXfGacprGbmmjcg89g
-FM5V3nEUNCU/mm2BQWp58h4NOCv60dGr5GAqHDxAStPk388zbxEdyFs57CPQ4ZJt
-iE4EGBECAAYFAjbjqn4AEgkQvnlIUr5c+IYHZUdQRwABAZEyAJ91yirChpNTus0f
-QFZphR8KtDpOcgCeI37JBoFvBkcxtJoNMFGd2MuCWwqZAaIENuOq4xEEAK14podn
-ulwztC6PwRzxLHR8ne7Q10uyjnGf0STgVYwsG7qPDtv/kqMHZa1c5lJYoc7N5N9Q
-DHv00womsP2Nlb/SQQAVV5mnBkXWXx8GxEQtH1zEBqMTdG8WSAJgCFewXUmej6qJ
-TlM29p0ZThLOY/i86eeOshZPLzea1mLCgUhzAKCBppoKUTxDjU3Ih9W2NLd/42bz
-HQP+Jwf27Aze+kHZBXb0ggGprOBoWvu8GiiAWgCWVoJBs8uLIdfUyTeQRmDnF7CY
-NL+1TisaqPtRwv06VnHUgIPxynzTI1h+gjsrlczqxg4yZ8k5EY4Syoy2hhujeWW4
-OAOSDboNk3KdR4UdlGshbPZwqpO5oHd3DT2bywk26zemgS0D/1DUoOyMo+Lz7aRT
-MmgrdXrVCCVcBUOV/MroHko4RnoZH+Bf0zm7LIuNETJsVJI0+W8tHXX6ZXgZHkBy
-tVA6YTRCkXKjUyv64OxurCTMRG9GrWvmk7KozlY9eGVdrmijidrV8ERfvogTMrrE
-hUbTsac2dpj52U+Cwurgjz4DbRkbtC9Ob3ZlbWJlciBUZXN0IChkZW1vIGtleSkg
-PG5vdmVtYmVyQGV4YW1wbGUubmV0PohdBBMRAgAVBQI246rjAwsKAwMVAwIDFgIB
-AheAABIJECWwD9QwzsaEB2VHUEcAAQGY2ACePRDTHz8CtVNREhGEEuWLbN0kXAIA
-nRuuRt2VtHZ4Z40AIX/75PhLXjHyuQENBDbjqxwQBADhnHlYNzwuhbYK2a56H6Ic
-1p7ouhVQc3motQ2eTDCpnTev0DL9Xnh6DDm993234cAOdZ/pD7oWqa+kKk88etkR
-gP4CtZu741Njn2MUjuuRjf60lFzf5BPN40ex7seDKHEV2fv/J4Ki+yQI8NS2XScj
-p4iaXkb63JDzQv2ymrmu+wADBQP/eVYwIySAFP4DjMLW6k4FfnJh3udgGtQiRGpV
-fPMihvOp56h7i+McVE02ZY8o22ypXiQ/wIe0dQcQYUhA8vFrk7qJxFR1cU3C/WIo
-OKWfzs2GX+X5JdXizWki2/F2TE9CWz9Nm//zjKQK9vZXGoGtaNUbVr65VMiGDk5t
-kXE8ZH+ITgQYEQIABgUCNuOrHAASCRAlsA/UMM7GhAdlR1BHAAEBIOcAnjt0vZDn
-9+3cTNpCuV1ZKIu2t410AJ0Y3CnFBUFBOKk6zkOJnaArwVN3ZZkBogQ246tbEQQA
-lWieyQhDso2ZnD2wb+gq6aqk1rRUhcwdBwCTbiE1aLAsnuMl8nLH4fvhaTz2V/Ae
-joL00e28duA5or9JiBfmVblrpTAIGWsu0AU6uEQsWgZwRdso3NH/KfH8Z5lxwJtk
-Z/hlAiEHohmGoD38mJNsgnm63RXadUH76irO6McvWlcAoONeH7i25AcrMol4O7BZ
-wqGq25ibA/9IRhK7AFhfgaRrDTz84PaIssxp1dWKalRruMJYGQK2LDuEl53Q+d1r
-nYBPliPbjWr/9Gkjx3K4B0CfWWQC0sUl77bNRFqr8FXkjRZcvkCoxxHG7PIFG77r
-Ld2SiQ+eS+dp5QijuuMC8skkvQuuxS6eIk0g+jjGlNhjuu97Ya6xeQP/Zxek37p8
-P1u9TTmN7nPtlzGXGrfKVi9DtJ31E805ruXFqTuoFfcOBRrtfY+DOebX8RxIwQV/
-TEmyxwoXdmkv03EYwD6AJSmx3WuVi5/revcH9nfSEHDy7sFC8CBp4aavAFRQNrho
-mSB9lSm5clGLZiD4nljF1EFABwQFch7HhlO0KU9zY2FyIFRlc3QgKGRlbW8ga2V5
-KSA8b3NjYXJAZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjq1sDCwoDAxUDAgMWAgEC
-F4AAEgkQX2NWum2XMqwHZUdQRwABAbAvAJsFPpRP6U1YyH+PEW7+bkPLaozCkwCb
-B48G7tRKLpNYppdhFIvbLLAlHQe5AQ0ENuOrjhAEAJ0LVdE8z0IwWuBVS+KhTtJK
-F98ueOBYFneGps5iuyC1d+5B2/qUCLGc092eT+TiaMvzDWmpuNSZ+ZumlUPHOyKJ
-RCUlq3MYN9TWANzuSydekX+/OCFu5zLwc07RIeLe4z8ZcLnviJnWjFr8DXh8qcJV
-hPVOGpRrW6wLlhBcebgjAAMFA/9/gtmA3d1sviMupccM2kAgSOJNspfEMoc6cCh/
-//hITSalo1Ucu7efEjnsK1d9IjaQxBKb/emqlMrNoGUz8JswAlRqeGaUs8BENwn+
-FBwO0GwXmcUbvN8t97RIHCCwzUfEv3rxW9rtaxtilJr3z7cdIO7L1XCmEWnuLgdu
-cJtIrohOBBgRAgAGBQI246uOABIJEF9jVrptlzKsB2VHUEcAAQEN4QCdHqwqMSra
-XNfOIi5KeZKV0GpAxh4AnitllwOYEzlC37ZWnV2Z/LTaFzOgmQGiBDbjrEMRBACE
-EZiYbCZ4jYv20X3/2Bq2fWhVrfNRvd1vFoVedaqvp7VB4FDWOeWMqLOFyzmtrUvi
-vMz+l9eRXrFQT2CEGuQSAtdJgLC3yfta25xiT7jQQNlNjKBGkcaPybV0P/+Y4k0Z
-WMCw0Zwc7mjAj3bIq73rviQcOd8rUcI8Hu5vw9Tz7wCgqdnY9RbQ47m0ze5AhdKN
-isz8BNMD+wYpkMV8j8Esxqi2h10hAbIfODkE8TyPfAV4KtNfefwNQdf6T7N+enri
-paqHn1Ex2IW44jGG42U/gOo7rnX+wNlHMtNxvBw2eJNX9b5s649uPusoBgXMU1a9
-AWsHogtQ8Bty40KCdXLhcUUPAWCQxiMD61FuSXZZ81tmyVn3clzqA/9Eu4hFTfbc
-ZEiopXTnj9WHAwg/DDN4bxfZFHPtYW5oq/EjmfyGCQMkDfo/pmFrC7irWfxfaaog
-TU1x9o1gk6pXTg/2WMR1SQAEZ5IlRusnJDC7MR4tizzwSvMWnJNMvdpinu82v+34
-VYAkUrOzP681G81IciJx0ssa9kmG/vJW7rQnUGFwYSB0ZXN0IChkZW1vIGtleSkg
-PHBhcGFAZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjrEMDCwoDAxUDAgMWAgECF4AA
-EgkQXRXgHT/xMgYHZUdQRwABAQb6AJsENGQmK4nUrwcbtZ7+av5GDQ2T4wCfYJaV
-2rBtTR9aWTRQfZOQoIkNF8+5AQ0ENuOscRAEAN5hO+fEhqW2pX71oSUqW/TRHWSb
-ybNc5brQ1tzgTbheHiG/LQJ1lHjtZoZQsyW3H/efEuNARwryo4IjvK0nmiQsqZUR
-1795XTIbo/waPN08QujC26uWbL1pYL5yQarwbKOoyAst4jgE1NpZVc/r1+WUp7Nu
-EapicVjvFNzkiVCLAAMGBACWQJYr+h0ozr7JQ/BqI8vTKuVXb+DIBQjuSzN7Lvai
-IqMqb9ZdfNNmZ1Atvklo2Ce2VMyliQzVSTZuHJQbfrDTBXBf+Q+AINiHdZEAodzB
-vDv6p7vsTnoP+A2bS8l6xrWObKt3Ky9+GUDkqW3WuagcUKogQgEb/FKec+GegwSg
-UYhOBBgRAgAGBQI246xxABIJEF0V4B0/8TIGB2VHUEcAAQGThwCfUj+Oa7sVKCCW
-H1o+ZVgDDsdZAwAAn08A89d+q3DNrojy20Y8tg28QCYBmQGiBDbjrNERBACBwiP8
-Sjw+siERrEpyNz101v3/QFncHEGTvH1rscqbqjT+9x8sfZcWMXEHgN19747U8L0o
-1SoiLoZNp8ZvKpLjteyc4mzme+yuCZWlRTMB3unR3Fxza0mh3CGQfga04/iLg/1c
-GvGeBCtZDSO7ffcQ8XrAtaLuqRXIYQ0J+y+S0wCgpiAz5diH1RB7v8dfQaIKeTcT
-FWcD/ivIHF3IGKGPTaLqzy8B7maVOvC/zm6Ci5IH3lcRfwY9+9pYhb9OlRZDpruj
-xjNT+Qg9rtjMRNhfx78VWvZl3fccB94tQ2nc5LQ28RtgmUYN9bv9fuotW/WjlYKM
-IdSErwMJ/0DH1vjPsJtEem3FIThTv00II6xdCw5tXbyqUawVA/4ghoKHt1OoAPD+
-cGZ+5fF6k8pdLpd2LS2jv0t9C2v5NS0k4RUYhuqpAGyARIWJPmpHRbuqE6eXjtMh
-DI9Ce39X33hDDIAa0iC0zmpgVFbvSDUWTINFfns/NMy5TYGNUjqYeRpSQtou6NtF
-eJAWbwhcnit/b3samkq5KC81yvtGarQrUXVlYmVjIFRlc3QgKGRlbW8ga2V5KSA8
-cXVlYmVjQGV4YW1wbGUubmV0PohdBBMRAgAVBQI246zRAwsKAwMVAwIDFgIBAheA
-ABIJEBxn7BM8ZhyEB2VHUEcAAQHRuACffM0sr0N0bfmPgFX2sMhKKLBRuSsAoJjM
-o+EWIUZVylgjzkQcQHwjmDLVuQENBDbjrOQQBACRouE/462OQbUUzNKbAJ3kMrc8
-xYB+Pi4oFFwAG9EAwDpMhjX1h63xySEuwNzXPaTFgHTo1oEim2Mq862tEkO+f0pC
-Ofv0uXr9haZIvh2KO3DYFV52wiayGO5OAwDLp6jyfSQlF3PPFsRryleW+OYbagj5
-1dj4KvgBCCg+Whny4wADBQP/fjurbVG3mNm0B0XU4ZeB1MUMOJYGDe7LYBmbGxwn
-NMupZ9Rxfb5ROE5ehyPzUf/DmrkK17fPfPHYdN/UDWbDnQHkVk5OD4Erl6ulQxuV
-jcOgfW70Tyl3ucnlZjTZeihEgczHKvO5ADWVmevLyidiYocTx0QMn8cBq9iSpFRd
-EvmITgQYEQIABgUCNuOs5AASCRAcZ+wTPGYchAdlR1BHAAEBiJcAoJTy/pFHvd9y
-xAYZBYp7qLG2lUIOAJ9Rlpbjou3wb81vE+Qev1+GQGpaVZkBogQ24644EQQAlNDo
-1aAt9iof3VI1z3TehyLrBIR4XmKRSM2Bx02CZhQRIwY/QsK6WBoxlJqfgUtsBUuf
-cztjJaUBixq5qPmBgXYqN9/B8HZvG2nknHdiqKrvqFpAqATJtlccW0tzPJKtKaTb
-tkORBDv6hssFa1aXwTN7IjN5nLI1Wh8lsvk9SKsAoP5Z4IDSK/mM9h6FPRsAsAYv
-d99ZA/40UwQLl06u7wBtmxqSdF/86kjC0kWX8J2Y9vIceiNEiE9MmVNcYIKwIM0m
-wduF50EksVjEdgWUJrqT3RztJfMT5+Sgm2KOAvvfmbKa8RF4NPSrVXDDrFeqk6uN
-DT0jnUUTQFYTjk4Pxg9Kl+a/c7Qee6qXn5qeDX8ubZqN0noX0QP/Y5HSgi62UbBP
-5B+e5BqE+ZLeJ7yVtl909NwTCr7KVZt1o3Za0dCYtMosPT9ObAjCanhSnuEWa3hu
-outOgorWaUSEW6Y3zBKvN/M4FA7+1Rhe86gnnWLt+rHqX5M8Y/7JTcrugNtR04DF
-sYga5A16CLsTDxSmM2Rgvpwh14FtrqG0KVJvbWVvIFRlc3QgKGRlbW8ga2V5KSA8
-cm9tZW9AZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjrjgDCwoDAxUDAgMWAgECF4AA
-EgkQO9vtsXd/vtMHZUdQRwABAavgAKCWUwgFviV4MrPrUtCIDhMZZCn35ACfSAXu
-uu9e0d0Rz2QVDGB8BJkfhFm5AQ0ENuOuZhAEAInmt6zi1dFmPfqzs/gplZR/RgLy
-a0vHF40Rd7lyQC2fyAx9xJAngx6Lg7UQG+spn0PPbwSa/QWYN3roNR3jJtEiTU83
-yRavL1S4YsB/9UECQwjJeFgIScHvBGw2PiQXkOFiLK16nbB6Q+hxk7YYBSgjJjbI
-w1vabaDYrxScrZAHAAMFA/4jGKHej776LTZfCLjA57tqujbFJ4GYf1vycRony/xF
-UtE7QCChHgYvMp5M5+/nsVTjy2VjuzG2HoU7F4lpCRLWcPUtGlvcZQNmvuoz/I4Z
-inRaF1GAZb5zR5hrfaDlqOrbOff4fUvjKuZFJkzieZnlld72KOQazRQ1iqaLSAFj
-GohOBBgRAgAGBQI2465mABIJEDvb7bF3f77TB2VHUEcAAQFJ0QCgl+n9/5lZxK3l
-goKK1HWYfIYNSxIAoOxVFgrZ9x1jsIDsMcSszrP60JvgmQGiBDbjrwQRBADFLZOA
-CYlz942iqSIW4twe90tkmeu6yswZInI3pacFpOi53bAq2y7CFrA3/HzbYodK/QLP
-tmq3wKZDZcLghqtWZTxhhhH9fDqj8Rb54IVRGw3XKLD+GyJt5OhtrIBWzJevMQBp
-07ZEuRn8+N7k7s5z83WZxmyIz9LgZj32ZOhluwCg4YuIbbsa92PrnfZcdW1jPSql
-LQMEAIkWB5utOUWVQZHc5X2MdSMIJ/5fAoatzLD63wTLJWqQZ6tWp9v5xED5riHX
-vQugCzdbdNwx6SqJ8dl4I2Fc/KYLcthVO7cUkpthBPve+XV6d6L+E3w9SsZLDpe+
-9DwM4sS3zYT1tauANnBK7hoDu+KhF9/3wGtSdJ0Sg4JgP5oGA/9k0mSgmhR6HNyB
-0J5MoJhs82TaVWVdvtZCAfGdoTaPVfNT2Kc5WFfEpRudWo1tRt3j3LYuyTiD+jKr
-jVG2EeEzs2ctQ6uPlaqmQgenzniCi+NCCigKDDA2BTS6fc3E/rOvug0zx9u3hNVh
-LfjUIwYK9qHwv+IgFP55gGJqOMZ+2LQrU2llcnJhIFRlc3QgKGRlbW8ga2V5KSA8
-c2llcnJhQGV4YW1wbGUubmV0PohdBBMRAgAVBQI2468EAwsKAwMVAwIDFgIBAheA
-ABIJEKXmf3+jrj6hB2VHUEcAAQGvfwCgoevUn2afCdW1bLwbcRs5kYrM1GwAn04Y
-4r15A7ytYdO2PaxSkSJ4gn5NuQENBDbjr4AQBAC4cckdPiWgQNkGvAm3q8FxzRLo
-g68/jffvj8Mvt++XQ4NikO0VJ8ezYkVd+vG3v5RoHTISynmMWZZjT56aFDSDZPOk
-Qs2G0qZgAEgTpzCUBdlnUC8ZrHSTSQjCn7HtR2cpYCCUBliPtatDvS3Me1XdRfBh
-Xib04TB0ci6DrzFQkwADBQQAje0R1INm9GkZKAzTECi+lVei7wbXkn4JF6n9r1KL
-5oULVF8aGHNEJ1Twj7kuq2kacYjc/Di4KdESRTZN9szlZnNruvAd9JKHIgbeysen
-e3yRhy+YFaqXm1MtWCdwwaDiDoHDASpl55RtuCKxz6uW77qhrZ8E6GRDrhI92R88
-DbmITgQYEQIABgUCNuOvgAASCRCl5n9/o64+oQdlR1BHAAEBawkAnReKOagNQ/Ui
-7qWGxKWYY6I07+XhAJ9/kbrDpWSrx3zoS/YjBL1Z/i42ZpkBogQ247AKEQQAkOFN
-8GmHkbnVqUQNRoh8W8PQr6hcNeoMHuEODey1UillH313Zuj90865VaivBcUEMl4r
-RzuIkRCsxYqXF2ptEaQfyloVKcvldajjEyOSeqcnNi7eBvvfiKgUdMLhYMzb++hM
-a4WkvD56Ktb7CXXbC6wemc2RbEwQha3YegZN6t8AoPclQGtp49vyAcqdcXPIS7xE
-unezA/9doAqN740Bh6qFwCrG/ZIQ9SPwQyC1ftIOSTIO/zC5F9w3AwC3hfAdiecz
-dulTBaPYlwMYT2uw2dr8e4UCPP/aWuFQqdwfQLLC+OFi23W33aPRw9lp5HeljxH9
-ubw2zbS2I/u7FWWP6zMjY9/kqJQeGJYcnZFNcYTalSZPpQWFzQP+O7Jm8g0rCRtR
-JLCkq+yiLXl3p7hbHk9naYCtPnL5QuK0HHhYoixdXpRVVoQE1oF7reT1wUZ08Rtr
-8d+VJ3vqQuZxJ3L4Wvvd3dMwiubAAoxV0qNEARzeXztho93b8t1P5NbMJDDfcSi1
-7EnvJnNkDZInHbv+PIiBeRa3C+flQIy0KVRhbmdvIFRlc3QgKGRlbW8ga2V5KSA8
-dGFuZ29AZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjsAoDCwoDAxUDAgMWAgECF4AA
-EgkQWMuaTIWoHzgHZUdQRwABASTiAJ4vnNwg4QN5Nj6dgloAUhXLEwOfQgCeIMtf
-rfz8JP9PectU+oN68EWxNM25AQ0ENuOwnhAEAJ69MNjnL5VF+xPLtgvHSRiI+8EV
-Oag2s8YdLcOef8myd/ysoQhX7K9nWdhO2cOmL3Nbt1k03/Npx+EvvyCRUiPqgYt0
-63MFbbfF2tz6O3CMzb0tGwYan5jjlyXOIoVJQA0dibpJv0Avn+mzvCGQQ1q/+y50
-+EsBD4T6GTTBW+t7AAMGBACdpIj93tczPsxKNoto5Dp8tSIMp9LEYrsNDl0PQeue
-s6dNhuarQzfiF4YC3X0KoKslnJD+ASwyeDbUKBDPzK9v+6I94dNV6W1POkdUBUDl
-5qFsN6u8qhFiMHzgagpUhdANeLF3Y0MGncmm0xbFuJvGZ+Yy1vtbB+D61Yx6DRM+
-AohOBBgRAgAGBQI247CeABIJEFjLmkyFqB84B2VHUEcAAQEImwCfYJ4NGyH/snAB
-xoxryuVciL3Cyu8AoMtIZ222A8al4XK0DrQqJAnIZlF+mQGiBDbjsakRBADettZo
-8gTOTr1nJXbk5sJfuVSQaMmbgLpZpMs3Q7C+gAX0XX+Q/vcuHp+wV2Nq0S4v+w5K
-+sxDF4A8UDf+q+GmNKMA5U27hkcDQvE48EYUghcdWKjWeFwmmJOb0KMoatdeh4iP
-T4j8ocGw+i0z6o/e0y0OVWsUvIqp4iZP3UlnOwCggOq5GfPJMq3K3cND3nU7GOR8
-e1EEAMcgH09o68Hbjbwpw+ejPuKwVFa37COX/65FF8PONeleq7Mr3Y8yKqbLIsIW
-DaxrlflpbyMz/ShuDdNU8gh+msfwh0+RNzdEPmpJCCVJOdZO46cudgbyAQriH7Py
-sSbi7AbmpnMl7kQruhAZWXLtnH1e1kKovB43a3ph8wF4kotyA/45A8bLKEmJvpq/
-amY6VjDnGsxkDjjw2OoVbt8sLdGjpganj3fvy5KRhWeWLKhmtq44tH97m4YDmGCH
-Va/Iic4aDPMMvUPWdaY5DyCeerVOb3JN1qLC7o5x2HBt8RE7cXnPJl5VKxc4qzys
-5bqQEYYt2dP4cJqKk3OjjCbl6TJ+8bQtVW5pZm9ybSBUZXN0IChkZW1vIGtleSkg
-PHVuaWZvcm1AZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjsakDCwoDAxUDAgMWAgEC
-F4AAEgkQqUwPdWUyRNYHZUdQRwABATNbAJ4zGxw32J0seAfYM/ZTq0/S01HRPQCf
-eV8WCJ077Pxl4dfO44z1MBL6PPq5AQ0ENuOxwxAEALW77T00/jp0+efpEm1zMvcs
-SujKtw+Yc6TcVuI18nxgycUF5JP5T75yGL+QrOb43jLxNkTywfAaqeR4gG0lfZiZ
-AkWEqLZFH0C1WfYdXVlMFhPWr8/syllM8wj0Q4OUIQ8lO9f4x20/zGHQayPWLXC6
-NA4kCJd2uqw/F6fhJyHnAAMFA/41FE7MsWriQFSmChPK9bMmX3oZ3KR/47QCFtOV
-nuLH0q1At/EaurOCjSHAONvZDN5Yd+NWFpppJzlRY0y4hDIdFyyP3HifblcYTQdT
-I5VIPjog4CN9kX5t5c5r81thxH7PM5F9evWrJbaDihXws3izi5Xh09qZDeX3wuSD
-yWFYJ4hOBBgRAgAGBQI247HDABIJEKlMD3VlMkTWB2VHUEcAAQHOmACfWYGI6kN6
-0nJgsIXNyIc7dgEwDW8AnRblYLw9mIfJbLolrMCwxazbA5OVmQGiBDbjs5oRBACj
-AxqGzA6j190iiN/1vJvS5jYLQ1H3xxhzXdZ6ZxjPJkslX1oxFqBINhjzBJnV9/7b
-1FFe5089NiCcGUVZa2xD3Vu+niLTAGNTQeNy6Y0E6wEfvplQLJbpVGOmuVeZyShH
-NCKjrsZFtS1mr7o19SUb5QWS3gZHabFTbmhibcFBXwCg36qGVAnGcZzvnUTGpRy3
-xjp+zuED/2qTJNpnPhicKSksVwb6EJFXH7mQSZlyblAnOAVFMx19GUijW4MWP5FU
-dcTd5KzIDgkenRLBrpCLIFVkQ4/baP/hOiCLOmCoRu3xnFyoRPM/Jn94Qy3Jo2wi
-gwkhQU+zyOU5C85QBD9ctkbYp/0mu9bpxmYTchHwD1v3dXUXEVajA/9lnEz1GiI0
-bwKpm8VKXp0YYP5hea8Jh5fNVb1QW2QqGd+XNHnRGSqX5smGyrs+xoYxD8+jv1Fh
-mGaSv+6+n+JBVK4TuWrQpZ0cgZL5jZnX27TOYXeY4d5YKgE+7ZO57TwCIfF/P6pu
-flGm+t5GcFwj4kkfohMEaeNhm1S+xf29q7QrVmljdG9yIFRlc3QgKGRlbW8ga2V5
-KSA8dmljdG9yQGV4YW1wbGUub3JnPohdBBMRAgAVBQI247OaAwsKAwMVAwIDFgIB
-AheAABIJEEevS2lh8EeEB2VHUEcAAQHMSQCgwD4p9j1sDwR1+9bBrzNQzVIyzmsA
-oNL7pfcdW4Jou1XHNc6hv4MpsHtvuQENBDbjs74QBACHkUCB29pMkveMEZyNiKIm
-izF5NZ/cv91Rj319k3xHf0NJWhQp/1G38SxLkPLBdWcoB4mJRNjDyVsxFUXvRWFI
-MekwL0q1sHSWTcJwCpQs+LKKtPmD3LA3bhbuTSdpYgmKy21SH4epubqBzk/P0193
-mWXzHgSGLeUoTo3N7eBQ0wADBQP8C1Q3WGrBZNOmFVly0erclpQRv1qCa785yx/b
-j9ur2LxHwVozAEXh8jmoiKZyoAz7YFnp29kR2qtVplH1oePNyFweZqIjtmZbiCaT
-4scUVZ/3LuYbxgMoUFeRoG4mnEVvUUh8mmZovMmZFrvp0uojcDsfYTx0VBr8waxg
-Jrg2YguITQQYEQIABgUCNuOzvgASCRBHr0tpYfBHhAdlR1BHAAEBU90AoJzJUQIh
-rby+ZQ+BnaORdChD+c2RAJQOkYvVpmfV4qsOUdwbIPgLPLCemQGiBDbjtDQRBAC9
-Vf1MkTKc8kSxfdfZ8Y88OJAr6gHsPUg0j1t8gPk0q2ijyrJuK84ujzmLmbtFSITK
-FfcT2VSD1u4qa0iFqzSwnywtRGYKd0gq1eMhaDcp3SmaMTyrbPJ3sKFDd98nbTzv
-nA1tHgZCFI7VZO7HBGgvnd+370lNQsnGRBF/vUDObwCgllBimEp4tasu0WNvZYpt
-jGy3ni0EAJLsL9W7jR64h6+nZNkdO1jRT45sW8mvyMOt1BkyRQVK6G2Lut879t/u
-pPCYK+/ohWaf3TkAKH1ucrBm9xHlPXJHZvoIA3brt/OuJmG7r8Ub70N2vrZmdXas
-/w5ru7EBcKeii9pp8pi6mim8dXTPS1R/b7BqytB0dlO9zSl9j7noA/9Y5UnQobM/
-qT1tiNhJEnUwlvvTB1UWId2UiUR3k/eNCxc7IdUytanqofXSxAu2jyDB5Ymv1od6
-bRCNM1JNWnOnqVoEd/u2csTAIkZ5fl/kE6HztqRGPB+H0n3Nb4MGu2mpLq+OUNhT
-nLpEZsZGXqd21eFXkWkThxstrH+kYVYSrbQrV2hpc2t5IFRlc3QgKGRlbW8ga2V5
-KSA8d2hpc2t5QGV4YW1wbGUubmV0PohdBBMRAgAVBQI247Q0AwsKAwMVAwIDFgIB
-AheAABIJEN7w97jsZ9veB2VHUEcAAQGiagCfTG5biKrPKo3dZTpI+fMQuSuPNmwA
-oI3mCWnR+UrV5myTBsNmQ9vcnr8zuQENBDbjtFYQBADPV+xDMQ8NzkqoJyO+lriA
-UrCNIBf1Kbc6U/IPAGOoED1YVPX4EB27u3K/EmRVd3clFS085Dau5rFIr3d/xXnL
-n++wqSgQq0Jc7LflMpIj0P209/oKt6MBovTAQn3lNpecmWd8oxiKoPP158Zgm7iL
-cOvRTcs+/p0KAzNvHIvQdwADBQP8CQS48V16lhWOSXV6u3JOukMeWBw6Tx+7M1Cq
-yBihmR8ZNlF6FPBvVkX0NFVUH2qJn5yr6PmxQxSRnC3yCEyPBa48xqIditzynMbE
-IkNUrFZTE915rr0k9MrwzPGuLfaPtr/Miy4BI0dnZ/5U4hoxPwDbp0aPUwRqb8+T
-9POTZs6ITgQYEQIABgUCNuO0VgASCRDe8Pe47Gfb3gdlR1BHAAEB/yAAn18Lg2NX
-AdY6HW0LEurh0Xcv8zlWAJ9ePiLMYxpoW5nv4g4nuOAWoL/KLJkBogQ247TcEQQA
-rUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+uRFb9AGsZTmw/FTPETO7iU/3frlyY
-yTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7KnKpw8M2tkPiT+D8ANrHU5d178ev
-zm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91kG04WesAoLPa5zISvsX+Ew95M1o4
-Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWmEDzw4KHXQ7V+OJ7JD5n44S5KLPKw
-IogohDlPmrxDTAJ/YAukApUItd30kr0Uq34QgFktAsqgCP7C5KEM1TTxU25Tcs4o
-jUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKXVVWTySkQ0g9SDaITSgP/a0FyXMQU
-YJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVWMhqlhsfOLaj1WZ+oe0DxKw0O3YKT
-H/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7QvbN2s72Kn2PZjtYqO3Uzqw14bqAJ
-Rl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gy0J1hSYXkgVGVzdCAoZGVtbyBrZXkp
-IDx4cmF5QGV4YW1wbGUubmV0PohdBBMRAgAVBQI247TcAwsKAwMVAwIDFgIBAheA
-ABIJEIl5psVWf7NKB2VHUEcAAQG3TwCfQ9GqGIzMX4vfsPK9xpWX7TNKuZsAnR8v
-7wPkWtynWbdi0Eymj6Pl2yJ4uQENBDbjtQUQBADG4aUG+qgOTGEgOAVnN0ck76An
-Kb3jOBIYeQGYEgF/lDYbY7fOQ3tIgQ0jXrKD1zHLvORNsG708yDNR79S5Ci/1nph
-crNOPWMujOsZ2WMo5xblhG+WJujt4pcNSRK9P5fonUE4hV7GXTljg1yZ/ui00Ot7
-b1B8ryAYE79t1B3svwAECwP9Hg2r8lBq/j/t3kRO4xl108DFXiQKdj7sXugmAcMo
-mF4nG3j2s219dLEFlSwn0/peGvjp8JFPfcMPU/xHJSaZLf90mXsf+pHcDWujHgVA
-9YC6ThYaGx9Je+VmcVYomELxNnMWKyOJePDU4ViIXhMCvGP0Pt39wcQoiLjeu15+
-l/6ITgQYEQIABgUCNuO1BQASCRCJeabFVn+zSgdlR1BHAAEB7JAAnihkYWPnxhbW
-i9SUMaB3Qz0SfsLvAJsEGrvruaT2XPVKwa9FFfqRj6WPnpkBogQ247VREQQA3VAG
-c4T+vuvVXcka4ETaLaLlL1xOiPIdJMWRWWQ60CZqWXDVpFBw6oG2AyfUZiHhLlmT
-Zssz8UhXLw/URsPSpiGbtpGWKiLs4OCqjslN0lHzcnGqxGWCZJixMgZa5DcWZJjw
-qdXEbDChgm4ULP/7+iKvIenTQNhFoCXr9MtdoHMAoLpNCmSKlTu1H5GlWmYTK9An
-dWrfA/47ip0VYgzIvUhI0iWcG95sNfshApzPL6zPgKBqACogs/5/DfRn9g07BcuM
-ihLJD0PLNPVnOXqQRaN4Da7jLuJA53XtLgpogxG08M6XUimTucfcovu29/bgjZIK
-A5c8KJ2lzXSJ9jZxSoy+O051f7yhXbUmYC1vdNr8GBk69QKy/wQAiHMfU3cbCfTT
-Mmig+zBHCkHjqzqr/zKtR8RT5AwSOIU2aUIiHdV08apCelBw8PbEf077TuWCq2Yy
-DZJmgWRYh5cdaMgdAd7ul1FS1yHPZYshcofWjgXUJHR4I8iPCs5OmdHo2HK3uU2O
-M36ZQGSpFA5WN1NEm9GtMSBoYKN2ERC0K1lhbmtlZSBUZXN0IChkZW1vIGtleSkg
-PHlhbmtlZUBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuO1UQMLCgMDFQMCAxYCAQIX
-gAASCRCe7zTNSxGyXwdlR1BHAAEBSQQAoJRRe9UHKHiX2iFczXq6nrvr0NhLAJ99
-W/I5b2/2QQ01we8i1mcSYPWj47kBDQQ247VnEAQAmuK5RcS0zTyXp6SjW2+WeQIp
-JnJDflL0+iBe//3SADv01qUmw3jWMAuxG+CcCApksl122V9npEHiLC4Q2A69roLR
-sbxKBPebustfadLJoVYqPsvjnrBlafe5GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz
-5J+z/mN7KhHANzoRAbsAAwYEAJO5fkCSdNwkisFXzeKslWxm9Yoe1TOouiSV11he
-x0j94Hpz5wGWEXF7z+FbDq+4V0UqGkKxaERsl6HMWNkImj57N/9h1C1YDfiKTimg
-5tZpKmehXtldpWGCNDZrE0RasrFCKENVhFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU
-//aZiE4EGBECAAYFAjbjtWcAEgkQnu80zUsRsl8HZUdQRwABAfRcAJ99+4jghLty
-CHQ82CGv/S/cv82GdwCgk3C62Y3uSS/2f+g+qQHLMvG9m3iZAaIENuO1yxEEAIEM
-k4Zf0L/HEJVk0/o4fPpwvm8zc+KZQCFX70cBVU9BWJOcUquRg9JDJF9bOM5TxE7V
-OnkIfPvjug5vqP0/vjIfW7LvzIWDhS6FcFaKeG4IoqrgghbAmQIoEWvVTx+7xrpj
-o1yOqIMDQqYZEmsw+Zd6deQmkUYcbvytS82L0gx/AKC6DM0guH/ddkJlT4FQ9h5c
-v6dQAQQAgNdmGPW8VceCL2WaKMoOMmhwQGhqY3+1pDLo7HVFEPoe18A9jlMRHWfv
-Gb2EzMT46/Ugqkf8TzvZGFrWq7W/t45rp5O41YXQ2+ZJH3nl+t5Gw25Hwk0hvpK0
-jYRH2nMFR+PKQL2mDbA94LvClAkgX1MX4lrUG8bYj6FrbEnvzoAD+wcRS8A6xznx
-hs+Vsg/KnYl0Qe9dNFPY0hJVG5MxCyDy9X32cxhHYJSHbvS4/LLbFloP+Rhwn3/W
-eBjsL2lts1ahXvQ+QQw7+qPrs4hWJZU/NSEh1RGitukaG5zegHNTE6CJqXshshI9
-Ei0OCDahmhjiGrJA3HwKPZlkDMOkza8KtCdadWx1IFRlc3QgKGRlbW8ga2V5KSA8
-enVsdUBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuO1ywMLCgMDFQMCAxYCAQIXgAAS
-CRBrxHeAVKzSRgdlR1BHAAEBQOsAniVMkc7hW7GdLkLpb6YDiEUy0yrHAKC3dyJ1
-RI9tKXk1EOW9jTopkl5ysbkBDQQ247XyEAQAzHzwwUKDM7+djJo2/EnWmCijc6g3
-fStaGNoXDEovi3B2oPiiRTsigX90qB5nFP7whDfi8k4JY2Eig5hH+MGdvni36hYE
-nQSadsZueYofvQh14N3V8fUmx4hiQiMXyWiLJzc91ZiRjww4wZWn/4Y5f+0mb0fj
-CaVSxTxo4+7joU8AAwUD/0oL9Gm3gl1XVV8BhJoXVdFQ6PN9yEEXUbtcrfkC51kT
-Bk2NaEGqbB+kC8GEmXwyZcW7AQN7X6ikraUUm3RjTU7CvkSHobBnXYt7FhqZURpu
-V7eSqZGP5nP7SxWmCTTKgIH1kHCpWRwaexKFjIIkYgyVFqtEx9cEQ6D2kXPh+Rna
-iE4EGBECAAYFAjbjtfIAEgkQa8R3gFSs0kYHZUdQRwABAX1jAKC5Gp5sHM9sWdZe
-M6qfu54F2OwMQACfTjYXfpMApAROPkjhhFNqH0d8x5GZAaIEO6cTzxEEAMnukcmm
-91KqYvahVQdYaI/Gv//n4YDWL7BHNdArU3MA0xjcmimynR67KIXdsKu/kEVcQJvH
-6rlyL2J+BvRopxHRmT+J4FKdQjzb0BdJMoKzxBd/v3ZwinW0fjlvTXabncnbRO3K
-fsD6Bd5FFv+0HOFfUJTQCga5YtNYrQZxIz5jAKDrTFXeC0ABRhQNBB/ym2jiJqzD
-RQP/ZK9t7tKX2GKmrdn8sFec3j9h1QNnDoP/82xrXZQRICNusMBEhPzD7OAEo0Vi
-gpz2Tu++wWci7ghKjCCMqmgYQDGJVmVbJgrqM+4WgPQv7jD2Q/yRUhlkf7/dp0SN
-FXfodHxOOD3d5Fj0zBMfprKle56vHjIDfpNwaz8k2XjZMw4D/i1v0WycSLrbSWcC
-YavqVEeZtkJ4UMHcjsjQz0VrI7T/DMmMeYoaqs8rzHlDJGuT2Nz4Q3kx8pY/lTLp
-k6n6aYq7HTvXHZSX5J0+An/7Vgj3UKH8Ks7/N/dN57ZJY55+6llmQkpg/PV0cdQN
-DSbKeVYkeA4tJrDjViGje86h6ZTUtCJIYXJyeSBILiAodGVzdCBrZXkpIDxoaEBA
-ZGRvcmYuZGU+iGAEExECACAFAjunE88FCQABUYAFCwcKAwQDFQMCAxYCAQIeAQIX
-gAAKCRB/8jC/nVY+ViD9AJsHf9byAEuDOECER69NAm18N2WdpACcDiaOaA3gd01M
-kdEz54toKFIpPEa5AQ0EO6cT2BAEAO3Onn+URLuPNsFVz6rrIWenJbpzGYTdNf7n
-9kAFIXfFAKL8nPtdne4zL6UQcHAABDOAd4gCI9tQSPHTrX1tSlzDF2xJL5sbFFxk
-aN1ivB9oh4+ToMXEGNOHAZ9SRinFqdBotzr84zg/rGVFTzhSuMkPCMUu+1NCKGJ4
-B6wIJ6/LAAMFA/0e7Jom6d9wPQ+LZDRBK7cH/yG+Ylq5ixl86AL3ERZL/JUuUe4B
-2iVPx331sY4G5pDC3sqv8FcmItditfFO8FYJFMWD2DfTdbtGU4XRwgd6BQ3192Aa
-LcwyjzpuEMrplCFQjTV0OfEFogRchP4x5UGx6gdyXRDi5n73CqQlGS4er4hMBBgR
-AgAMBQI7pxPYBQkAAVGAAAoJEH/yML+dVj5WO4MAnRC1ThcLd+ucK3uM0OvaqL4I
-B14GAJwNvBDmPEOrXuES/xFiuDa5aRzbyJiLBDunE9kBA/9nslf97u62S2MfyPtD
-taRtydoB9/s8KQlYakcTWajVSeoKXqSyyBNmWL1Elkx0q0mm9OoEvFRLjVBHPn4x
-CO2M5vZQgnxU8SJcHrVsJnFYu1fSQsa+LRHqToiX3LY7vKaKJ/5o9gTYWpbsX/ZD
-kS6UxuRa1BRoFYZdCS8A2/QSGQAFEbQmSGFycnkgQS4gKFJTQSB0ZXN0IGtleSkg
-PGhoQEBkZG9yZi5kZT6IuQQTAQEAIwUCO6cT2QIbDwUJAAKjAAULBwoDBAMVAwID
-FgIBAh4BAheAAAoJEJ6cEKDO2FT/Ad8D/09Z93LR+W85FFzr+zvPhkp0oJ9MVcnu
-OceEzNhT7uPyaf9ZYtgyHdjMnRMMPqZZnP8fwoyrkSoB/vDy/M9t9H2RHGbdU0El
-FRdqSWwMkGWzpA1cxMw5QuqznHLrHj6VsOkQ2jpGmY3yBQwJBbF19eGq3V5jJLW0
-Lzyn9HM37ToRmQGhBDuoot4RBADa7tyCsjFl/2zvNQr/r+GH/aCf12wlxsmVE1cs
-/GdkO4nvZgzB0m5RKPfsTEf18Op4wZh6y4rQJHCUFxVkG7MbPD2d/aUay1nU7vCo
-t6vG89vkUMtuebZY3tXNQfwVrt8lo87DnB/GA0dKPS0SQzbf08Hhahw4EUQDEWI3
-uvf/4wCgombN0n8cpUVPaoDMZkyJWXOd858D+wYzmkIbHk951dsM1wOLQv7athDw
-D7YHi/s34V1rWoZVmuT2U3EZiLusYJ5c/bgsRu9+A3Y6rDmh3XL5d9gpp2JEsWgJ
-MI4U79/AtyzjiwgO3hw3QuWooh+VB117qM8Sw9XyFhlmSD0ojxgtnrh2YW4Ow/YB
-9yU4iLvwP4iaCuH8A/dIqE8xObbkAi3NbyDewi6LTYSnLQkHvUQhBuMBJUfBLHKN
-vd28/Y5udS44qQvz8oEQ1zAmo0/y+kHWxfxh3eFHQiML4MS35srPBisCXOpJGoJ0
-dJ8c4y9a9srzeg6ZJGbTwoFQQZbaAIxcciRus7NvnCOEpyKJEba0lxhyVTCftCJI
-YXJyeSBILiAodGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+iGAEExECACAFAjuoot4F
-CQABUYAFCwcKAwQDFQMCAxYCAQIeAQIXgAAKCRBCNzY0Y/tTEbmxAJ49YOdvcxh7
-tCPAVPcLWExYS+BesgCfQQhQ1qWjKuLy9yWDfGKS+5Qlsqm5AQ0EO6ii6BAEAKHp
-h48Yh6jezPm1Tb2F9UOfgLAEKHXbwv5F3nznYc3/cjCHLXJNISqlq+ZflRMu8lpU
-Wf2HQLzVFYXtDWoBrujlOldYy1IWKOvvYPBRIVrbe6r4tnklRN/2DY8DVWSSFovt
-NhWtyUGbil+wDAQoDbWQXhjnfr4zOv+gJIjMYbzXAAMFA/93V+ufNG4jqm6OrcMw
-f6E1GH0pBlySOwu1O6QrLXx/YlK+cMQqPyy/oZ6Uj8MqUFIJEBbQwe7byubHlYKb
-JG6bs4ecOUggATX3Bnby7HwB/xjQI6ECphjxmrGqtvbewG8LGSZNhmfrx44L0gLo
-8bp77j8pAaCc1syS8HNue/3K1IhLBBgRAgAMBQI7qKLoBQkAAVGAAAoJEEI3NjRj
-+1MRb1kAnRcw4bpKaM7wyUoOK4rJuas+gOfMAJYsoMCmvozGAeeTJE7k8AWm9pLZ
-mIsEO6ii6QED/2vr03VB1JAzjQhzifY2ueHye0X/BcjtSFWhN6jIQzHHnRH8oSaN
-Mp0d42gvxNp5aypEs72SFO4W580DsxbNdtSJhaC6hnpncAg8yAsZIo3Ix7v738Yk
-h4zOB/4RLwmZJzm2gG+soiQAATTOBvnD0IJumU06pCRUHQDJ0daHswrRAAURtCZI
-YXJyeSBBLiAoUlNBIHRlc3Qga2V5KSA8aGhAQGRkb3JmLmRlPoi5BBMBAQAjBQI7
-qKLpAhsPBQkAAqMABQsHCgMEAxUDAgMWAgECHgECF4AACgkQg6m004p3Kwg6xAP/
-VgizRHS+2Rxh/kVKI1/PRQpVGCEl9uHB58peMdPl3aAXxBcOoO+74cfb3ce+rD0D
-EGhjXKcXDl2dwLl/lSAOdUwHPdLi6Miv4IvoMyMsCyxFIgGnr7qZUFOzEues9H0I
-bVbwSv6pJMCgyc0aOnRyCFfT3m9lXL9hIIUVvawatnqZAaIEO7NiKhEEAMlPZPLF
-VnBUnc9J2lZRdVmnHWgYCRc2kYgfeLMqY7Q9l/Nd1SxuCt8DpudwVs/8w+6oNIH+
-iH1k4qcZYOt7afw5C5Vn8LEN9NfcTTkvwEqb9z8FNeKTAqGK8lpl25NgANwqtxql
-gK9bZUuxzNIizsc/GqgkjwL5TgI6vpicdFoXAKDWyCdU8Q3EK6xoFWxPR5D98VqG
-pwP9FdCrFqC/Nt3rJHAq9PNCWJWtTO/TiK8LS8Pym7YRobKLzGAA41uBaEcUxhJA
-OJKeW8m4jq9mfmQixGIoDWm1oBbM5ooTySUBweJZUh13IJmocOYE++KxI7RXGmru
-aFcCG0pusHLJoanyzh6KeUby9S/PtY9Bo3vc8I239EPhj08D/i9l+cdXCGhGwOWQ
-xsCOUcXLV8zbf+lL0Aw/bcwtr6+CSCsW+DdnRsJzcyKsKz/EezJE89LUsmFqZXnH
-aSdXQ+UdMAegZoY+hqlnIOxhkM2RlGqO2egcJ8TJrzeuHEHsYkiwQozyhInnXmQd
-htDnQ+PrtYgr0BY5niwwB6t8NCGOtCJIYXJyeSBILiAodGVzdCBrZXkpIDxoaEBA
-ZGRvcmYuZGU+iGAEExECACAFAjuzYioFCQABUYAFCwcKAwQDFQMCAxYCAQIeAQIX
-gAAKCRDIQJy3y8q66ZRzAJwM2w8QpKAMfZsOIPKOiJKICCXlYwCfYKaaJ5LOz6mq
-kSbVgDVtpeAZJJWwAgAAuQENBDuzYjUQBACJygT7QnMtfDnFUnixXdXu/vOCqTbX
-vmysKnnI4OeDW9QxTr+ugf+f6ROykJFF75zq/53jgDD2cQkUjU2OWbrrqWF/aYHp
-YM21TDtIRfRe0llF1kSHPnYW2rjnY4/AeWvPjToevxursEn1J3Ijd6NentxE/FWh
-etTEHSWE784/NwAECwP/fpxILkyJUfPdNY5HqN4Aag1g0ZWjVfaWrebZDt0BIHJp
-Qd8RvUtQnOzCOZ29KOQKS9LHOJOB2EjysCKTwBDYK5ZonQUtmhdwNZeoLYlLrH1P
-Q9WuhddjT6dJWMl2yJ+zchmDRFajf+4AvrbYGnMbMdjCllnDcygSlzUt7KGcjuuI
-TAQYEQIADAUCO7NiNQUJAAFRgAAKCRDIQJy3y8q66b5jAJ9ROwHyPzvGq/vgztzs
-4972gMuDIQCfeQq3q4tW3qoWyC/TOkvTSeUuzwSwAgAAmIsEO7NiNwED/2S8L4RT
-6WxoBdOIu6eqS0McmZO7IDt9rDsXtpGG0CuXHajIgiSgEuYxX7uMHsNvbvV2JQyn
-P3ZyKhym5xYcjwt/pu2EpN09ZaTstXryDM2pWl0D2bSfkbjEa0DumA+aZpDXix5N
-juWsaQ1KZPFWerfJKrKCjRLe1ODBkvKlgAVpAAUTtCZIYXJyeSBBLiAoUlNBIHRl
-c3Qga2V5KSA8aGhAQGRkb3JmLmRlPoi5BBMBAQAjBQI7s2I3AhsPBQkAAqMABQsH
-CgMEAxUDAgMWAgECHgECF4AACgkQn5OQvjVwcDdcLwP+KHNNbeyiJbRnQ8lN12MM
-wPUn5mukWYb9zHnTNF8R5xFui9ZSIRzOOilw7DkbpoIlFz1Wwk9TfOQMtYD2U+Ts
-u/2a2jxDJuxS82ugY2LjsZpUY9HZ6x7v7xZpY64xpWD88zcqIrenMWTrG1pU/xr+
-mCQywk9dFARsoeRrZWH7fHKwAgAAmQGiBDu0KcsRBAD9+Zd8zw33dyY80G7qcBZD
-kw56//8J8ivxH2EZEfcVXxs7vnyAUuQdfZF/+5FzKjxkd4vDVwjRR/MLcDtMmvrY
-wCgsFLZ+f3CADN3sqyckVwqakpVCpRfQQ3SL6TiqenWPIwIs0BV1PBVe4xOkEoSB
-gAjnFc0roWeWYrhEBDjYzwCgpEMYeOKONrccun/7g/z+HAdh3xED/0aOuwx/L3HK
-dLaj32jsuQhoTiyQns5h4lV+5n0boXtDslEihN13g6ocx4i8sgyh2JPSmuapFR3A
-RBLpCLwdXACyJR00v2h2V5Y5vfzQW3pC6OfjOGy6/K3tLn9y1Tgk+k4KiSKH/YPS
-MfNIw7lE8EqrvBCORT8LddKbT2+xai7rA/9pJ0HoibbLjuqIb2YehSwIqX0Jolfp
-b6GXk+2j04tbpCRg+h8yzrWGbNcoRkSXoZuqG77WtR3/fnFqG+H6GCO1Gxbdcdx3
-tWsA/CQSu4WA4zTWr76xmD/glc8MtWEAdiLteKe8GwoC85e8waqGAHK/Iz1VLptw
-gXuSCQi9K6h1jLQiSGFycnkgSC4gKHRlc3Qga2V5KSA8aGhAQGRkb3JmLmRlPohg
-BBMRAgAgBQI7tCnLBQkAAVGABQsHCgMEAxUDAgMWAgECHgECF4AACgkQBAwmnIJS
-W2YqwgCgnm7EYwm08AAYQEWJ1PJtDjguT8AAn2mHZZSIkVNR41htlr1gdyDWCTb7
-sAIAALkBDQQ7tCnREAQAvkwf0DiD1zbcqiBajDGZhDvE0cb5BUbMcuJvSH0FBXop
-IIniYcmnfu5q393y8WPc/rVrJVHrAU2RyHTAoX8vI14Hvc4HUFDdnoj6Wk/xSiuY
-P8C4VN0NX3G+S+C4Pa1Er2s/m4X9PRz/YA0bMVynp7f9QM18aN++OpWV2jVBRd8A
-AwUD/3cuV7jHchUeZ7h6Upagzj7quky9o6o5lB///Pk9QZ5HEBQTCJDvmu13xCaa
-O9II4XFwjYntYbPOxOTJ1aEBKQubkUo0SIj8i5rhLTeDkkHB5M/rO40gS/MFNMVW
-qFCvUIQk7yBkum+MFcJFSEz7OMpL3K5X93W9twllqtUZqjvuiEwEGBECAAwFAju0
-KdEFCQABUYAACgkQBAwmnIJSW2YNEwCfbPwQzlrLRCUuJM2inVLcz/3jijIAoJWg
-gcMT69FfppDw3sA2h2PtAdOAsAIAAJiLBDu0KdIBBADLr2l43qiQ89pgGz1gEa8i
-JyrLvkiYjgbMjT3V9liCUwAXEYexXJD9OyKHXgzxRoeBIEvxRJQ2UbDJS+Uln+hY
-/NCVF7sq2yzZr79KlJQzVcNbiaHmLpSMqVNWW7hkqvrA1cmLqzw5F05QX6bTBiCO
-2LrvkOV5Nwl8prw7EDW7JQAFEbQmSGFycnkgQS4gKFJTQSB0ZXN0IGtleSkgPGho
-QEBkZG9yZi5kZT6IuQQTAQEAIwUCO7Qp0gIbDwUJAAKjAAULBwoDBAMVAwIDFgIB
-Ah4BAheAAAoJEJsH4rxTFNch1x0D/2WcB2ranNdpej5/YmsJlJha7vI5zoTCQMwk
-Px/oFJXZjfarEkFdKRY/nz+zZDVxDzr5DuA0vjBP5h3JuycQwuGdDGW7eF5ZIX34
-ntCepMLohLkqEO9JWUMWzBN3/pQXDSUyIbE7qSRLKqn9zGgvsrbx7vwnBPFJE/Qz
-0gREuUJ9sAIAAJkBogQ7tCz5EQQAtqJpy5L5ipND1euXjra9IDoCG+iGbo9Rbx2D
-eQw62EQxWfT5+JCLsy98OuDCznWB4qSU+gc/Acpmz39PuGKbZ1ysfM2y6Ht7yLqR
-UZJfIs8slQKeGSXPEOcEQSOddQbW5lDPfTov/AT2hf9vvpi3TyBuQ9rfeVh56nRv
-C87igEcAoJgCFriL+cHkx1XTdemk5462nlRvBACwLOfshZJfof2hgg2fJgEo6nUG
-meJ2axHzvy3NEd0zToDaUEaoX074m3sfu+WqiBfbgtG4TvLD1pRNYrGLD/pQ/5AQ
-ocBHdEBs+/1ODiurIwPAeHOR5uRzXtUnJVJosgQSjpNKQ6X60KoG9XVPmqr7PmUb
-NxpapFgKRcQm7djfaAQApjae7+WszMEIddG6c24xuFKRwhvw6mVtZzggN+vHDvjS
-IKyDnCHYY3OYS0/PDLdrLqxCGQau5XqlilSKLkyzbh7zO1KfznHua4uLUSF2qkTE
-q3njvBfPxKFdKE/YWy3ptV+xoZsVTlreRf/sEQzPNGtxJ3qDzloIZbFr9N3oXwO0
-IkhhcnJ5IEguICh0ZXN0IGtleSkgPGhoQEBkZG9yZi5kZT6IYAQTEQIAIAUCO7Qs
-+QUJAAFRgAULBwoDBAMVAwIDFgIBAh4BAheAAAoJEAzxRunkmECDz9MAn08okktW
-vgrAJ600zYVZH7Qt26D/AJ9uA9PUHta29AzO1Owmibj2xzWsaLACAAC5AQ0EO7Qt
-ABAEAM1AVhC7V3EnU5XF7M7OPozDnk9fOgGpCh4HeD8Emuqh4TRVWSmCSA+YqWt5
-r1L4TpV4QQX+vUDHet2i/IieIFKOrowuwiONln+YGToxXSB8tOKKr4p0qJ/w4ozi
-jJZ6NVBmsGeXZIpu5LB2Ar4K3z3HZmwNSlDznVNwXJXNpfIXAAMHA/48d7y3W9y7
-jHD6QatVl68EelxV/x7BWHQF0JEltwHCKN65H5yV6IhUn84VNJazS5jVwYUvbmbQ
-u09Ndm7iKX/Gfwo5EyPxGzbLl/W5fA3vn1USXJFX2Tk7wALQ5SAZHHbrluIp/660
-zvXn3E+466KchiRCdOfqFpCd3Rxgrv/hAohMBBgRAgAMBQI7tC0ABQkAAVGAAAoJ
-EAzxRunkmECDFXwAn0NXK//V3U3k1LNXeU0mz6GYmaPRAJ9eRstO6/n170QF3Q7b
-kGNUvtPVdbACAACYiwQ7tC0BAQP/d9zC0s9/3Arm1Wul0feKO5jPA0pk/iZdcCDQ
-WYqoMflu2d9j3vIqFNN/tq9JDlvUXtdc4119Pr5Mgh7pVnSaQtYqbih8fbYgNUbX
-1NrqqtgeI7n28S5W+SMfR/uLCpdGSRoch/gvmKz2u7pnyQL/Tcm5ffMP0gkgjNVG
-a0ok/1MABRG0JkhhcnJ5IEEuIChSU0EgdGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+
-iLkEEwEBACMFAju0LQECGw8FCQACowAFCwcKAwQDFQMCAxYCAQIeAQIXgAAKCRBq
-3kKidAP1iVhsA/9q+o0L8lqSELMitAcEe8q74t+gaoQgOzIdWZp0G4GYaxyHU6xU
-AuWt18WAOJdf1WG+vmlz5kVX4OvlTQFl0oeVEfCEvNTaOJsUlPEajB8o3RrKzhxr
-rJ+nJGZV7SYs7CbF2cfrnuLMZ3vc07YlGMAxZU5QDTT4sKZ0hkEBhGqylrACAACZ
-AaIEO7Qv2REEAPz8+IF8X/cOgaxp1lafMWamZoGa7JaLvAbtQJZV8JZ/2au1iAXn
-j/C5f7BS8fQk4uE94mQy6cj1TBkNCJEARCrGRUQ3cSMBrFD/7WKneU9OLuTbG6cv
-B6LRBZv+LauSi2+I7OD+1k4VhZrYyISGIzHStJAFQezNLe+Md9zlNVrvAKCT0YGS
-v2bgvlU4D4+f9Li+20NGMwP/UKayvNs6H4TxWJipMNQep1rDOUDKNTyIJWaPAzA7
-5l+iFuyrBAw3cN4NTsDKRdNCCOfmlrC21j0eSDcizy3jVeXAdkKszQSLKCsrbGq4
-yL+ZIgHlfQdL8smSMIl6C0X746Ez9VU95acjjjhvh8WTw12jkbIR1RL9HP8LX62+
-r/MD/1ixh16oBvtK0l8QOVrbm/H6FwTZspf5bLb5G0RRBX1VJbKH4GCzlLyQ34fA
-Wl1xen6Pf5beJP5CMnG2eWYCrS6AluUuIJgo1w+vx4MGvq9OMdKyJZcYLbWUnx7C
-DbOo/1m+vZsXikA8z+GFfRsOLwL+HSdSQVxEZbG6hWJ+jRMutCJIYXJyeSBILiAo
-dGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+iGAEExECACAFAju0L9kFCQABUYAFCwcK
-AwQDFQMCAxYCAQIeAQIXgAAKCRBwEnpBKosIQEDhAJ0cAahtG1+/4gMMWltbitSq
-bTNBrACdEUWzmwEVSOrX/nMbvhAejSljTtqwAgAAuQENBDu0L94QBADW/R4I4DMQ
-vkGlvP6jxWLz6TgkPMAAfEyxIJoZYLJggau4XJYyElmUGVFVH36DPE0453yN7j3g
-BxVbOCZamUOINyehuBy8Gxom36Oegzvr/43TcNPTHZnVl9wJVCFmOsAR3L8A617l
-AguvUzlj4e7GwV5yCwwlNtBGO27Lq/dISwADBgP+JB4l+2Bdx9wMs1zVDGQj0BER
-tyHmwSVzLn3BG0pAM9wf6Me5/o633rOOQYl1mwmXXjUWZasmjegqWLUFPEkCyFMH
-R0CWWI9CdBOQROBFb6jK9Oq2jYoGxTJ4kCtMGo3z/pNsAGdNtgj5s0AgUIoQHw+L
-7u6XF8De/Sww56eyuKOITAQYEQIADAUCO7Qv3gUJAAFRgAAKCRBwEnpBKosIQNT/
-AJ9z794Z40YOapyZWN3NyQPI1zM0vwCfZIkY3c9J7WVXDqO+FlXWrb9L722wAgAA
-mIsEO7Qv4AED/1NZpI/iOHgQiAqloxQaiXvOL9X5hbtXPbFMN8J1S+78cRxBKtcb
-z4HXz5V0OrTKXG7aXu521hrlOeeAjBFhf2SvfYmPi5/s6RtQlv26+mLUFgptXy8M
-NViaADZaFIpmbPQfaRbY1RjVg8kSPKt35cOa3DqO2gjNfgbTUITTOUQvAAUTtCZI
-YXJyeSBBLiAoUlNBIHRlc3Qga2V5KSA8aGhAQGRkb3JmLmRlPoi5BBMBAQAjBQI7
-tC/gAhsPBQkAAqMABQsHCgMEAxUDAgMWAgECHgECF4AACgkQR6zxLyoSmJnf1wP+
-Lianh9lizALW8bgEWU7A8K6H9WnVSqVYJ/yihZXv8iHeHKNA5nhUumvx2xz2FbZU
-Nk1lgElbuoHjaG7mt+jJxvbx7NluGJkBk0jvE9zFz+LDqfaIp8Lb3IGVvlxnwl+D
-wGQ6MR1MDf1FcBpIlMEY5UFV99b5D8WQ0dlAaB4wWA6wAgAA
-=Xw/z
------END PGP ARMORED FILE-----
diff --git a/checks/pubring.pkr.asc b/checks/pubring.pkr.asc
deleted file mode 100644
index e8eaabb93..000000000
--- a/checks/pubring.pkr.asc
+++ /dev/null
@@ -1,28 +0,0 @@
-This is a test pubring generated by pgp 5 beta
-
-Type Bits KeyID Created Expires Algorithm Use
-sec+ 768 439F02CA 1998-03-17 ---------- DSS Sign and Encrypt
-sub 768 CB879DE9 1998-03-17 ---------- Diffie-Hellman
-uid pgp5 test <pgp5@dev.null>
-
-
------BEGIN PGP ARMORED FILE-----
-Version: GNUPG v0.2.13a (Linux)
-Comment: This is an alpha version!
-Comment: Use "gpgm --dearmor" for unpacking
-
-mQFCBDUOrE4RAwDbbxWAbWsheUJprK6VryMTpwDiYwMfL+92nrHqSfPqlpMWgDTia8qnpRSXbyEm
-Sppp/6/Ygp+N3n32Kznq7PjHXiuWLlZGvZMtzmvaMA17y0GY6oLBxS7rhASXIKa9hEUAoP+KBFly
-qNMdsK8j+ZO0A8rnImGrAwC1ddDme5iZFkTEWHhrtU97sEu2GDkSQB8HdX8CoRcrOz/B2WliF6qf
-BKhcZPFVBIhKNzjTfY7SEYAZk2zcsCm8elnwSLaGEzxKFNFBqKDNXP+a35spcqsHSGzDVw4VuKMD
-AJNnAP6skpHlhVAmecLZT9eRzVoOq1ivUIntK2Mh47qsL74q6BBwz2sviPU2Y3pDlbb6Ed0qJAXv
-dCT24hlfoGoXzkoDInkPJTJeL0gCnwmQPjvXFFd71Cvg5LaL4lIQLbABh7QZcGdwNSB0ZXN0IDxw
-Z3A1QGRldi5udWxsPrABA4kASwQQEQIACwUCNQ6sTgQLAwECAAoJENY0E25DnwLKxIoAoPSyM/Mw
-BogpyMU5YY+Sj74k3UIfAJ0RopQa8ciickDVzoSVPrGysrnOkLABZ7kAzQQ1DqxWEAMA/wVrlNsP
-qTxWZbUiMrUN8MjTFR2xUhuTw3cdvRgiVPUT/q1l1+I3CpopVBx/XuAkg5sHB80zc6pZg652YFV3
-dLoTceS7ridb5k23sHa2hZGCeTo6AdxIOy53giCPDP9FAAICAv9Oh5/OVxUqI+6hsp9ccOEhRA9N
-8aJzYDPjvCQyhgej2P1kTsBZqWIx0/PiMvIt+qqhT2YfyD68mHIBztScAXZKTnjroUPKl0+bkX09
-NbdyqojAkzhaCRKUzwnaHEfhi2WwAYeJAD8DBRg1DqxW1jQTbkOfAsoRAnaPAJ0Z/k6Y2ypgDhXo
-qBLeW7Lq/AKYEACeLTod6Nt117DkqDz9epmIqwWOE1ewAWc=
-=6BrN
------END PGP ARMORED FILE-----
diff --git a/checks/seat.test b/checks/seat.test
deleted file mode 100755
index 72ab27f41..000000000
--- a/checks/seat.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-for i in $plain_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 --always-trust -seat \
- -r two -o x --yes $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/secdemo.asc b/checks/secdemo.asc
deleted file mode 100644
index 343453c45..000000000
--- a/checks/secdemo.asc
+++ /dev/null
@@ -1,737 +0,0 @@
-26 demo keys (passphrase is "abc"):
-
-sec 1024D/68697734 1999-03-08 Alpha Test (demo key) <alpha@example.net>
-uid Alice (demo key)
-uid Alfa Test (demo key) <alfa@example.net>
-ssb 1024g/46A871F8 1999-03-08
-sec 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) <charlie@example.net>
-ssb 1024g/BC43DA60 1999-03-08
-sec 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) <echo@example.net>
-uid Eve (demo key)
-uid Echelon (demo key)
-ssb 1024g/7272144D 1999-03-08
-sec 1024D/8FC282E6 1999-03-08 Golf Test (demo key) <golf@example.net>
-ssb 1024g/9DCAD354 1999-03-08
-sec 1024D/04259677 1999-03-08 India Test (demo key) <india@example.net>
-ssb 1024g/61F76C73 1999-03-08
-sec 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) <kilo@example.net>
-ssb 1024g/9AF64D02 1999-03-08
-sec 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) <bravo@example.net>
-uid Bob (demo key)
-ssb 1024g/E29BA37F 1999-03-08
-sec 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) <delta@example.net>
-ssb 1024g/B0C45424 1999-03-08
-sec 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) <foxtrot@example.net>
-ssb 1024g/EE45198E 1999-03-08
-sec 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) <hotel@example.net>
-ssb 1024g/D622AD0A 1999-03-08
-sec 1024D/D2699313 1999-03-08 Juliet Test (demo key) <juliet@example.net>
-ssb 1024g/35F8F136 1999-03-08
-sec 1024D/B79103F8 1999-03-08 Lima Test (demo key) <lima@example.net>
-ssb 1024g/FE56350C 1999-03-08
-sec 1024D/BE5CF886 1999-03-08 Mike Test (demo key) <mike@example.net>
-uid Mallory (demo key)
-ssb 1024g/4F31EAE8 1999-03-08
-sec 1024D/30CEC684 1999-03-08 November Test (demo key) <november@example.net>
-ssb 1024g/8B70E472 1999-03-08
-sec 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) <oscar@example.net>
-ssb 1024g/2681619F 1999-03-08
-sec 1024D/3FF13206 1999-03-08 Papa test (demo key) <papa@example.net>
-ssb 1024g/63330D9C 1999-03-08
-sec 1024D/3C661C84 1999-03-08 Quebec Test (demo key) <quebec@example.net>
-ssb 1024g/A029ACF4 1999-03-08
-sec 1024D/777FBED3 1999-03-08 Romeo Test (demo key) <romeo@example.net>
-ssb 1024g/11D102EA 1999-03-08
-sec 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) <sierra@example.net>
-ssb 1024g/0F1B50B4 1999-03-08
-sec 1024D/85A81F38 1999-03-08 Tango Test (demo key) <tango@example.net>
-ssb 1024g/101C0402 1999-03-08
-sec 1024D/653244D6 1999-03-08 Uniform Test (demo key) <uniform@example.net>
-ssb 1024g/5522BDB9 1999-03-08
-sec 1024D/61F04784 1999-03-08 Victor Test (demo key) <victor@example.org>
-ssb 1024g/07287134 1999-03-08
-sec 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) <whisky@example.net>
-ssb 1024g/FD6E27F6 1999-03-08
-sec 1024D/567FB34A 1999-03-08 XRay Test (demo key) <xray@example.net>
-ssb 1024g/41E408BE 1999-03-08
-sec 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) <yankee@example.net>
-ssb 1024g/F7B080AD 1999-03-08
-sec 1024D/54ACD246 1999-03-08 Zulu Test (demo key) <zulu@example.net>
-ssb 1024g/A172C881 1999-03-08
-
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v0.9.3 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-lQHOBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp
-ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy
-hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj
-VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU
-/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p
-+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5
-cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS
-09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+
-lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5av8EAQNuYiCeVh4Q
-pF3i4v6LDa82cNBI92zOHLJAu1nbeJ6bl86f/lrm6DuH/SYjOkRTQV9mYWN0b3I6
-AACvUW2sEdiVCzqYu9QdI92LJQd2HLYgKf0mIzpEU0FfZmFjdG9yOgAAr3LeP6n0
-SUaQqSNKJPx1Wes66+3KH0n9JiM6RFNBX2ZhY3RvcjoAAK9/tmRCQsDGIXRnEJZM
-rvRjIUE4qvtztClBbHBoYSBUZXN0IChkZW1vIGtleSkgPGFscGhhQGV4YW1wbGUu
-bmV0PohVBBMRAgAVBQI2446eAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0OXgA
-niui4cH4ukKQ2LkLn2McRrWRsA3MAKCZ122s1KPXI/JMLBTBGCE9SiYQJLQQQWxp
-Y2UgKGRlbW8ga2V5KYhVBBMRAgAVBQI247arAwsKAwMVAwIDFgIBAheAAAoJEC1y
-fMdoaXc0J4wAn0x5RWtqCjklzo93B143k4zBvLftAKCFbrlxlNCUPVsGUir9Azxv
-P0A3gbQnQWxmYSBUZXN0IChkZW1vIGtleSkgPGFsZmFAZXhhbXBsZS5uZXQ+iFUE
-ExECABUFAjbjuFgDCwoDAxUDAgMWAgECF4AACgkQLXJ8x2hpdzS3wgCgk/BrqP5W
-blWLc2+6jwlmuLg8n8MAn12puZol0HwV0mcd8aHWtcrfL8lynQGlBDbjjw8QBACc
-jdcfV/S7I319mfDvbOwczDvTqDsRbb2cPhQNAbg7NFlWJKtRrmff14jtCt9M77WZ
-5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOXVPhyinUUGSq68IArA8vLSUTuOO0LIi05
-LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9grgJ/tsjNwADBwP9GeXmMrGi5wMD3qkP
-bzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q0FJp4o7d4BAQqAMzt3ONU1OcCWlDQRDx
-j1nynE5ZgRBiVoyudEELgNnYhp3MSEuUg7PkFWn+N+GuvyhVUHApleyvP09kvP57
-hif6yJRS+V6L1ugP0vZmBI4dqQ//BAEDbmIgnlYeEKRd4uL+iw2vNnOO9Y3cRSEx
-yy8unuzNvx5GFG6KNtxoFCDzMMzUa0EDH1x/QJA3CgqMpS282nLdk/5O+AphiEVe
-Gv8+c6pL/t7falIfSgKZ0j2nvCKH12SobwiNflTGJB+jLnnesjqYJD7h0SVLjToP
-/vtKPYlXOU1ZpKzDwP5YcQQuRhF9Tj8SUxScIIhGBBgRAgAGBQI2448PAAoJEC1y
-fMdoaXc0IKkAoJ/NQGlvFv5clcDIf1AXjLlTFG9uAJ9rs8IOzHfNWuUSNxdhRvO+
-O7fYF5UBzgQ245BnEQQAvwwkLp4Dtoie4/fvandnK4wVPCvgJkIbNuyQZCarQGwv
-8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sjc7hjs1PLhwepMFrS4/Ple1Tl
-jpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zXgLtedux4+pdFxkgM8r6fjZMA
-oJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4kjFmDRqOPp+iB8YYwQTPZS/gw
-HtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk3XawwUshYgi8SgwWIDG0jusE
-PYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN4bts/LY1XsADzU7lhE0Oohx6
-FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPYYzOvlVfHCSXQ14oXjCs1nK1X
-nMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPekncmaR8fu/YIQ9zag5s2GpKE
-SKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP5pJNNRIM7VimNGn/BAEDIkls
-jKh5E70pJ77zKAq/uP+EnBQq0tCcyqQgQiG1n28iMQy45N5zv/0mIzpEU0FfZmFj
-dG9yOgAAr2cvUYCyL3NVUcfw3gGkK+A8ZyTfoBH9JiM6RFNBX2ZhY3RvcjoAAK9H
-YClNyCyakk4UDrW4qn8YgsdvZcxN/SYjOkRTQV9mYWN0b3I6AACvZ5Ed3zcwNvmF
-Ptb2h6OhMGgwrNan67QtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA
-ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K
-8xr9q2w+RACghpiwPnn7F3HJsm9VXM8SwBjWThIAnjHZulQw9Tee9XDT5STui+ZG
-+WN3nQGlBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8
-FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E
-GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD
-BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw
-V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8
-1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2Gb/BAEDIklsjKh5E70p
-J77zKAq/uPsbfaq2h50JWrb/wQiufxaUrYRvo5FjMBLnoUE+L/yG/Hp2ZRZuA5Ez
-BpZ3ON5LaFadahL98oQe/W3IXFZwxyYfGCtVrV16zx6cFTJQK/iIqp3TNp/fA6TR
-E3syS1FQZIZMiFLvgSy4Tsu4vAadP290Tc62LP9ivC3PiIxt3aqW2l/NLohGBBgR
-AgAGBQI245CCAAoJEEE/SvMa/atsta0An3ZMmv9EVWVwEvf/Rwf7nbFsgGhuAJ0b
-P+lAOCRSYziWSIDf+BJ9F19H3ZUBzgQ245HNEQQAis7GTDqtEM6luop6eWsxFi9+
-qhUVp9N6S+xlbwzQZVA4FjCqf1VR9JX8fwjLecmxT5xThQVcRqgeFVaCyky2Nge/
-FcFMPZQeaP5jv5GRWc5PvH9Sw8pvGOTB56V4ZeR4cQLDBm5CF5tKu1BCWWq2MLHf
-ct7TXe6QCzZKcjzdw8sAoN9VvrKN+EbQC+THzdWaUWpdcfWnBACFWEyLVPTpI1jN
-soCZ00F8Fau/2baXk8mdROlJZS6bq54ksfOQQzReBWce35h0W7NeBRp+yeoSf7Y3
-i0jTO4mrOiL/0NCcS8qKNnGKG1irdLes3pQhDZpcUe2G9W3FnGhxl6W5hpYc9550
-mUj2H3I5tmfSYsVcVjpNSIdBizxE2AP/SI1t6q7LHMQp0h3MPQ2z7daMhUGViXnV
-l2+rKjb5T7bvSFdV0iyyuyoqvUPBGWwJFLAxj6esHRlQ6W8togHuoJCR7cL2bK79
-8mgYOExk5gBexq1VHQQZN1edK4LGo2ESKrCVtkYwBzAU76hYFKAbKMU8dMxI7DRd
-LjZ3vdQ3FNr/BAED+xylaHWcBOTZBCd4ui6NIsLkQLv5uFW66tWYKvc2APAe8oKx
-h5YMp/0mIzpEU0FfZmFjdG9yOgAAr0tuCtmJhCp9PoSOTFA2ssaMB7jl+5H9JiM6
-RFNBX2ZhY3RvcjoAAK9Ilc3l2agIgR5iIQnvOgyYUe4duz+d/SYjOkRTQV9mYWN0
-b3I6AACvfQ0dS/51Esd9E/rbG/m1C3qIenSthbQnRWNobyBUZXN0IChkZW1vIGtl
-eSkgPGVjaG9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpH8DCwoDAxUDAgMWAgEC
-F4AACgkQMYwfrvrvbRtnAwCgs2haIgJu/UEpmCEnojO1zCoaBwwAmgPAlNY/PttA
-u6zYqTh2M9yn1DIXtA5FdmUgKGRlbW8ga2V5KYhVBBMRAgAVBQI247gAAwsKAwMV
-AwIDFgIBAheAAAoJEDGMH676720bIN0AnjjH9IN8523PCAYk6yD1IFM/ad1qAKCe
-nkWU2ZO8/oU8seCQ3HkXkG2JRrQSRWNoZWxvbiAoZGVtbyBrZXkpiFUEExECABUF
-AjbjuB8DCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRtepgCeOpUG5rVkWVJXULae
-GZzqbT+2SbUAn3HmDGXzAJ6lCiYh5NrTIb8A7wIdnQGlBDbjkf8QBAC0pe0mjRH/
-JmKL3mubSTRMKGcd77+l8psl4GtcA6iqNj3g650Q2xxgW+Qb1iL9SeiIJP8KuEfj
-6vfPVKZHKkRAfsjnpbhN8zz7WQa2y8kkmqojHoGIh5wAD3NE6ox+1D2WvnySmU1J
-OuAQlEDfRC5C9hSrQBkO0TUCWL2wquDv1wADBQQAl3TuGt2SCuYSXo4R2dNZpB2u
-kqqHOj7nnTQu7ZVoi1OtgZYxor/w783GzLJ75PfdQMSd6T+Gbyq+QgpaiBvlmWtc
-5rcF3ZgnxiW9n2zUlQ+M6denubJT6/Aqfn7yL9v0sr8K7kTrPqAM0lb6DAMwBkpN
-8o+Z0+aIpG5/jOtnwuT/BAED+xylaHWcBOTZBCd4ui6NIsGHGb+xn5M8RwQblStX
-KFu07GugiONqnqNgB+sywt1otn4dFUWo/4FzJzvEtBQ6EjchWAVKoVYj5H7ExOP4
-BKNDNb9JfOzu9ItHk8TvQ5X7HoV/r9eM0i6MRzNOlvchB1P3Hjw4a2Pj6TwpEBGZ
-uuYqe14UAGPlUjHSn+LuhtGpE06zuYhGBBgRAgAGBQI245H/AAoJEDGMH676720b
-j5AAn2T9b/n1T2CTa+Q5oGKLAsBIcgeGAJ9kC4ETWfY8itary77dKmyVJetgl5UB
-zgQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE/XfaeJiB55oMmVEP
-mK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwFr3D8TRnarZy3kfiB
-F1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2MbAlGlj8AoKQPFsEP
-jByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP1yC9GJjtec3ugzYS
-C7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7Fz6+upxIgh5WGnnC
-s2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRrcILA568dwNnOrBio
-5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdfsk83dE3iBzvmT8By
-IZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5ihH2ACSXLWiRXpyMm
-K2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cD/BAEDMzjCY4kr/Q3j
-hyianLh3vPRtiNtOM1BAXVlyCFrMAWM4wvd1NvQzOv0mIzpEU0FfZmFjdG9yOgAA
-r2YMtXCKQcwejpJAvOyUDQkN7pMthHn9JiM6RFNBX2ZhY3RvcjoAAK9Jr4qS3ZZl
-PdL7YV1+Phgvnly8701B/SYjOkRTQV9mYWN0b3I6AACvUexSWiUCxWbF+aprVRlc
-r9OTu8iDIbQnR29sZiBUZXN0IChkZW1vIGtleSkgPGdvbGZAZXhhbXBsZS5uZXQ+
-iFUEExECABUFAjbjktEDCwoDAxUDAgMWAgECF4AACgkQFoQQpI/CguYi4wCgmXVE
-CJyjkfpJJBTdGzCjhUq4N/sAn3Cguw1R4rX0391e1pAUuyM4OsFnnQGlBDbjkvwQ
-BAC2wan9ScDXLgCqN7CWSRM5B68vC3PCbemYsuOXZjdN8afw2LSHxZ3buRXfYxRn
-JNo1pm4PGkMQ7ZpQikZZVCZa+WoIVXYXRnYAjxHhvHW0LaQPvnyFS9H5LaGf2Urs
-TWVA+695zYsSaX669XFb9WbiIMGB4yUiXPvQwUL0tSd+kwADBQP8C3sKWjsPh02T
-jcEy+FDxWAn4g3LfsOPw8dfawJln+0h9LA0hTebbKBJWt5OUMqjjTq/pCZ5+z+b1
-0f2WwET/xAvjQSTdJjrFX9DNNU3jhCCelEpal9oxsbNYlVd5zOU2RN4hlmj+eEOb
-5oy5wy797sQpsbrgGetCTsvPotIpvbH/BAEDMzjCY4kr/Q3jhyianLh3vPDNvR6M
-j3Bba3JZVQTKkPeSB3XBJgQ8ssznZMvxlNdGPl6SOlpBYPcmUuo2u69fS+LUzqxM
-0unjLC/WRRPWr5QCyg3kJFXpZ5DcsdXUPikfaRD4XWuVPTStcu7NC3YRt+QN0y4m
-dadZMjSAwMyHg/oqZHF6HoK/TA5ZTVHNlabj+zNpyYhGBBgRAgAGBQI245L9AAoJ
-EBaEEKSPwoLmSuUAnRcjDyrjIbOCDkQfCrpPvbqiHoQMAKCYSE1DVqBk+RlVUp8R
-uPmgvzIKC5UBzgQ245SxEQQAyG4mRUQZagjDgl0xAnaSbLCQ5wJqYq/snwCl+IbD
-lXcoHqXQNO9QJrPKwKQAUv3Nvk7mqZWnfMPoskLOASrs6nkCv2Fo9Aw6smNizO6i
-W7xXepwvxjho4hLnE00oGPCDhUnAU05LO2pTBoxwHVs0o6vtaaViXk0s6dOFCoVd
-f9MAoLjiGlK/3DFWoUrqIiuE3aLfgkddBACrp1snJ1BtiGhmKjt7An6Qoc5LVnU4
-1J/REiQIyitUFAvPX+fiqzDyE3VD8qX/vvTLpgZCYvvEdBlSfM8IcCn1/Qh4aw9J
-HzuvKQg8WclvnQ8zq/7RV9J7h/aS/KIhDJIpGhi6YfjfjdSKfLYYfr3S4TVK9xD0
-Za3AH7/lrTqW8gP/fpKWu8fJyJ9kqHyYrI/j4ykt5QKBj3tHjqCv7FQb4FY8txnN
-3fLzBtva/tlkSKRsLobixjZUGF+uQR1dTCv042LxZ6aEUqrUytxqUc05pCSAvEZV
-8bX2H/5+ulSwdxKEzs1h2NvSTAiZ54zzKGjHNmEitdAaPD/9u5xdAiqPFxH/BAED
-CYhWuhxneJYv2ZhcXqW11qNlLO3tHf4QWPYOZ9bRChm0UzW5CRik8f0mIzpEU0Ff
-ZmFjdG9yOgAAr2JqCOINgV2LqfCiK4s7X0mqwBz/uAX9JiM6RFNBX2ZhY3RvcjoA
-AK9CmjU0rQ5lHrAdn3TtY6fEEyaU9UBx/SYjOkRTQV9mYWN0b3I6AACvdPZBZuBl
-tFtFIRj0/+lL7Cm9daq3wbQpSW5kaWEgVGVzdCAoZGVtbyBrZXkpIDxpbmRpYUBl
-eGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYCAQIXgAAKCRAf6Pxv
-BCWWd1pYAJ4lvyDCV/l9oXkJOzNeGL3Df5u87gCfWm5F7YsIhi+PR7BVafFUBsWT
-w+udAaUENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Faon800I3GUzETuQA2
-AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/gNFwn5d0O/pq3bpgF
-RJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+Uowt0+92LuA7AAMF
-A/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84xCTEpv0dqEtVTJUo
-Io8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCNOcPRvXxgCwSGbuuL
-MkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+v8EAQMJiFa6HGd4li/Z
-mFxepbXWoDrmIq/iTdsieZ9YRYA+rJ4OBtb2sjqV2L6WYNOqc2qDSj9QDIRJ8yiD
-ysA/4Yiur+UNBqRtJQGroegDXG4+NHsudnVzGXaQsgEqAjZ9PZEtsrEf8D89NeZ0
-3yQFkAXQ3n+aCf69jmau/Yf2YAX7D8brkxgQp3PCUcOgGv8EPo9r+AeRiEYEGBEC
-AAYFAjbjlRIACgkQH+j8bwQllncJeACaAqT6TL4N3gG2lLQNzV6gMd/p3dgAn2/2
-mEgFb3CkorWwdW++wf/YThe0lQHOBDbjlSURBACcp0BogujMnThXpn4UjBARj9oX
-gQWskkhz657AXu6RmX/u5RmpLGqbNmNuqKDIwUbJslIxrpOnA3QEobkIl7ThH+ZU
-IhGzPUnHlhd7M3dQWw1U0TfpHyXx3FYb7CCPabrSC7hWWh1ylUxz+RGJJSApR+D/
-GY+dF7dIllKUbaUGbwCg1z+vkNbzqibcwdYrwCjKG9VeFa8D/A5yPHqB9NMp+3Ol
-AGE4XRTR8LeelALpu+MuNMGFCMLdZfmt/Amoyau51FsQ7WwWrNM5A+1v3Fq0x5Wp
-Nw6Lr7HbN9d6zidN+L0uCrXPweET8ueS3DFnHI945epe703TbcjJBO/uYLn0LXEx
-mTg846/1ZlQbPgLzmzb/2JMkJ+QzA/4xFbRL2YeaKyu4JjpMNUVzXYogUwg9KZZq
-/qBbpsIAD7Agd+ZxLJHoweItXaC0nS9C6qDJZ95OJrE+h/Tt2D2lmxXseTVlSESa
-Wh45x9mbC0eRGFYYRsSx3z0hYwMmXA0ntj0lndC8ru8HjZtBW/KF0VB0RcfSyW+W
-+yAq0Jxo5v8EAQNzQpmchsGqHF94WG/VI+1oYlA4rI/KYT/DB+zHXBquIl2KZoUR
-ebyb/SYjOkRTQV9mYWN0b3I6AACvUJB07mtW6/9i6mmuR9JtC7USM0AP//0mIzpE
-U0FfZmFjdG9yOgAAr2EW7SJ8fPMvmLE8+Kb56tIqW9FrYAP9JiM6RFNBX2ZhY3Rv
-cjoAAK9VpNLwU8ljMnpHbTNr6de2pplMjS3ztCdLaWxvIFRlc3QgKGRlbW8ga2V5
-KSA8a2lsb0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOVJQMLCgMDFQMCAxYCAQIX
-gAAKCRCtGw+tQ8LQx9USAJ4sELIj8IZxlvkwqmmEMXtm1kIhQgCfZEpMtTpkRbT+
-rEHMssei72JJi+OdAaUENuOVSBAEALmZYtP72G7OodR4RfR270RxTHj40PfUpPIf
-3U8ezyO3kqjB12IdD2YIXIZW6zEj53psX8DGya5nSvVjdFofQSVHtsnB/H7VHBka
-OQnREoInHs4helYOD0M/RZcbRIb65e6vEesuzvo9N0ACSlBsAXbeeNKGfGGCog74
-GVGcZ6HnAAMHA/9W9n2MwJ7lq0GV4V0EOHDVcTAVRSh0nB9uKBVW7hFi4DP7XYBf
-gj8Nlbc22vMkkdSvNFUoLEH7Op9sMglXfiCPJSh02U/6XyAhXDyZRyrOIHviTZ9S
-HMQQIqtEETVuYRkzvSnSfDBVq1p9gW6eZN9q6AM7gmoKInpRaODFRWU7Df8EAQNz
-QpmchsGqHF94WG/VI+1oYTZm8S4dmnYvEY77B6haPMQN5nCjubqfHGGIMJxRRG/I
-HzXq0tNi4fusoLILtVbUgta+94uzgnsrUJqZbfmwrId96U52nG82ZMhLpX41lZ/d
-LZouCr/jMO0uvF+WYMjO04ffBfcnNkeQv0p7WDH0zZZjuJ0aoUwBM9xxU3lYTgzl
-aZi8iEYEGBECAAYFAjbjlUgACgkQrRsPrUPC0MeO/QCeNYtFDXrr21NZlLu0OfAe
-lPBM51AAoKglouZG0f49sm9tHg1Gc/nwjzzhlQHOBDbjouIRBACKncc4Ueec7dWa
-VARy2SmNVufeSenYs4AsIPP0v59jEl7JI0rb+4JbIJoAzW/hcm26GS/UbbpQwig8
-/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4An7q2aNr1beW+twxfUGWWV5I0o1b/iKV
-k/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eR
-xLqCt1hT98gdDLykRTlI3kMq6EK3I+z/8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpD
-ltPYHgWnUC733ujAKANdyybm3HrA3TSBjEAhNfcu8nkrVorvASQUDCLJatWRWJTU
-VrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCCm8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMI
-fSFSvpZWNgQgYZntiXSUGYOVs28T/87RoRx02tsVDw2PA8z68q/XRuM9NdetxbUX
-QHB9eszFLi3W1idsXhd/C4SyiTgEFXG8Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVL
-mBp7qfj5Y9XSM5SE0Th+fP8EAQNn55Peu081+nAbRC00SOkO5P3aJwu7AIvXN9Ng
-rJdUW7TQmQK+cHyT/SYjOkRTQV9mYWN0b3I6AACvbK2QUpz29Yo72wl9Cy/TCjWc
-O22z5f0mIzpEU0FfZmFjdG9yOgAAr3et3apzZ+S3o9ywcdaosE2TLfNzuX/9JiM6
-RFNBX2ZhY3RvcjoAAK9PHpBSB/T7wKTGFBngy9sOwtS7ZM3ptClCcmF2byBUZXN0
-IChkZW1vIGtleSkgPGJyYXZvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246LjAwsK
-AwMVAwIDFgIBAheAAAoJEP4YCx2p47CybMcAnj/BlcF5gdhj8huiFijkgZZi/YgA
-AKDxpmP4JCksz+UPKsQ8UbtuTPbpPbQOQm9iIChkZW1vIGtleSmIVQQTEQIAFQUC
-NuO3OwMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwshrhAKCK3IrzNqME6oA3RllO
-rx87OCIRggCfVkR+Nf6N59lS5j7jMXOuk799fQ6dAaUENuOjBxAEAJVJ1fFRaXPz
-UWOoeBHhvUS2aGZbz0Kamwd8qVLCVi8G1sH/LtMUh+8CvhkVum6p7Dom+2MgRmhe
-+iVNbAdU8QWS4bQsBrTeiVpinMLpkEO4uRvT1G6QIPjN1jrHBsAxGw7NmC/n3stl
-e04ssueY7JOmyNEMvO1ay42CWbmt985PAAMHA/9LJVm8UR0RWfn91BOnt4C1d2tt
-kQzfv1y0InbrrdFtNl3nmUgF6/V9OcpCS8NNjZ7nzIhDgT43Ov32qD0LJ/p7c6ES
-tNSoQE6G6wGB7j/sTkushUy+joAVT2qCfRKCye7/DDa3FXDdcSOovweCX7hD/nth
-G8k576rb1h70svx5qP8EAQNn55Peu081+nAbRC00SOkO55yVYRTuqV1cyTx/djMo
-oC9B9hYiXA8kcUn/RO3hztHVFGSYQWYNhOGBPe+FrUFfY6yjGeS9rlLKQ3oaGCr6
-pvZYdIBdzktW+TItDPYmRaaBTKrBw8jmccsn7xnEriVcgkSTTMd706I8cCIQh/iK
-iM5pFZGPPghQPn6paS6L+ydP0ZNliEYEGBECAAYFAjbjowcACgkQ/hgLHanjsLIy
-uQCdFkPnvUpYurVoPjhg1pw4UzuaVYwAnROb93OSUP9PZxf4XVJwHKU2PnCUlQHO
-BDbjo4cRBADeZztXPNYwpoIf6BfqepImZqhVd2qXuZBJnEvwaFoAl7er42pXXLZh
-WIu7/gWODfcyNxsUKgMbeQ+nWO2jdcZQtt+gmRAGl1F5LbxsP6aRw43W7PAkbmYg
-PY5tY/dhgFGP5puoV9mhijpFcK/cjeg6wNgmjuEsCv8BF5FX4/p2swCgwmgcx88E
-pJF3/EDrTk4/8Xr6Z88EAL99JWgnl0w2TNiP9T3c5mtVdcYs32ntJH82TiQQ0LR0
-A7zRY5ruojNZC9LsTht5K69AJakrDA/Fu5mr2xYoFJcW4b7rpeKUy/wYifeOhYY5
-T2NDYvaZnQJXZ6O8lGLFgAxCmnZEN4IRFahKs/gAmG86d6fCvuSrohSZvQ+Lsr06
-BACFT4tjfuL6MZ0VhsClxeBPny2AM10+bDDM5eOl5ODLN9Nxf+SRu5AdIojz2OqD
-9Jd55WobpUXGzTI+0g23636IuJuH7VGCF92nFwkjdIDblRoqYPAsJRkMiC4FkRae
-qF0DpgJacYSBnHdY3Yd7I+cvgkK7oBjzTiU/Zs5hZAeK8f8EAQNhroQ8vAawUbBJ
-GAm7E5zNoXK3ly9yV45/SohVZDzODvOlo6LWymLq/SYjOkRTQV9mYWN0b3I6AACv
-VTx87uYeuay/ZhQKJudCoAgGZGdML/0mIzpEU0FfZmFjdG9yOgAAr34g7RZNSO3G
-bdz8PNLxVgFG9ZaKo7X9JiM6RFNBX2ZhY3RvcjoAAK9YCrkTYjGM3LHB50POLDFY
-Z1O3Mu9jtClEZWx0YSBUZXN0IChkZW1vIGtleSkgPGRlbHRhQGV4YW1wbGUubmV0
-PohVBBMRAgAVBQI246OHAwsKAwMVAwIDFgIBAheAAAoJEOup8kDrncnmriYAoLZf
-OyE8KQbqCKZA2lLbxnCXr2G1AKCnWAeL/6RLjuyT7ddG3qd+ggEnB50BpQQ246Oq
-EAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8I
-QBPiuFocJNir5st/nm8Xl+gcOZOvtr45c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWI
-ebK4qCZnAOlDLYNGVUguGLnEQBSfnhhkgh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYe
-LnGEG4wPxtyVIchwGOv0YRW5apbz2fdO7otj1AFUN5WzFw0A5+WHza1OIUhg50Zc
-o6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfkaWYagCof3jBF0CbTWUXV/D5/dFmIeuGT
-uUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp/wQBA2GuhDy8BrBRsEkYCbsTnM2iEIZ+
-jDx69i6vtiK2mS5+ud0+9/XEd1foHMXoByohTsJeUvbwXvAu7FvDdfroq3XGvSjZ
-+czTMIekzBbYRxC+pPYENNuBn/e6LTKQD4oVW+uQYcPax5AvZeR5tm9RPxuQ1EYN
-AmHR2OEtmE4zSbqGtrnsp/a097bTCnmxH6PsQ19HSseIRgQYEQIABgUCNuOjqgAK
-CRDrqfJA653J5nNNAJ9Se4OBQyISgG6RMM2e6+frY01H+wCeJmn1SGKVrWnZeIBE
-j+jR5OSAMDCVAc4ENuOlJhEEAN1bOV3WXINYOoY9LMY6x6FfJNJrSk59VMtySkmk
-OkStyfyNLxwqteRVSjAjtKVmE9GZgj7mmoZobkVnlUl3VN8paKFzs74kMegrfJqY
-6eHo4VAU9lQXX5aUAaIVctz5Y4PNuA5IzL/zJcDqfTN76/d63mf0rOJvewMaPDkM
-yaJjAKCZTCeh+qyQdW/VLq0ODTyZcAsoowQAhUbJ/2KPcHM1vR9VgZQ4tTTuepDd
-Gk1A9oq09CkGhtGSdD9lJ3O6IAtwIH5Drrh/VwoYD46C2bQv9/XFSYpFbetP2XMy
-1wLLqRy50IjY4eb+A5w/MqqOPmiekPzh+BHgF1ux6FPz66ubEWIr9sUUjp4LUvl5
-0FBxEuztMXaNjdIEAJ1fL3IeDqINMmHKy9HtS4tYT/Wz3KyKuFmA9vS/IgXAd9HM
-z3oBgg+ktmv+O+SsNrBPFgZ8YhmuPtTIZ4+7tEJ4VFVVfnkHp682/d8CpubBDUYd
-NftYcI10CQ/TvJPFn/Cdm508DNDBGQR9nf1N1xxs6Ed8e9u/dE1DRXFta1BS/wQB
-A7n3lqEldy5uprCBgI7BwpM0ElWN+2D2a9LgElCF6MeTnG4Ycamo4Gb9JiM6RFNB
-X2ZhY3RvcjoAAK9TlqT8l+FZ3rsTboSXkdYnCZZwh4rd/SYjOkRTQV9mYWN0b3I6
-AACvZXMVrb4dxU2h5sKMOGXEpcHs+DuVW/0mIzpEU0FfZmFjdG9yOgAAr3vtqeEa
-itcXHtaGrkSx+21NoZaKkS+0LUZveHRyb3QgVGVzdCAoZGVtbyBrZXkpIDxmb3h0
-cm90QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246UmAwsKAwMVAwIDFgIBAheAAAoJ
-ENS/V/NzcuJDdy0An1AXntULu0eTFfoqIj2gIoRR6l/kAJ0VIXasNn5cMC6DtduH
-/Cl3BCFW250BpQQ246VQEAQA31Qj2MGefTCoF0x+D+9UMxZ6RuBPzI6gzX1tzcUP
-WYy38NIq+lNYBg7hLFkUfn0uTsAm33h2Q8z4/DGT7jmQWpoIg7yNTr6681L/gYo5
-FhhC+qERZ1iPMyfMwwD7rrz9bthUGTqChV2h6NiPUPM7ic/D9rxJICXy8dsoj0dQ
-6dsAAwUD/0ggimQTUCGmNHHypor/GY0XAAL4Vy8jAsC0FH1UaqDVTrTDH1qWLRnS
-9uxEsOJIGSLMSdxC0FZEYq4jCm7CYjTOHTHvvYDbhs9QhvW9r4VD2efbERFSEYMi
-H69ASQLGDp/O5kOZTgQOvl5oxzvsrOMaRFSWcn66uUAMORmHKz1g/wQBA7n3lqEl
-dy5uprCBgI7BwpMwsmLANtSNhKe+VmFkvN9msymkZ/XyA43Ts3EpgI/RoP2B4GS9
-LyuCC26DEqGnsats++yae/wDoWz1mM9tq4UcML4hSHIbZnG2OEZDIiu1q5aS1I27
-UeWhA8+qPhPosw9cJ3Y3sQIgdIEiKzAdfsjhmE78aSpljhGnFumTVv9p/lCNuAGI
-RgQYEQIABgUCNuOlUAAKCRDUv1fzc3LiQ475AJ9aAil0KqenoLziTexEcc2EnFmR
-uwCdEjwBOoJFx6qltIM/tJcxqRi7qu2VAc4ENuOl2hEEAKeOL2pIdZ+zQtehxdL9
-l/uDBFSTuN9rLb8DgLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT
-83lq+Ad0lgaZTR4z6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmK
-nxKAyJyVjh7eZcjTS/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlx
-sXpcrCQIoKeDXgKNVv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx
-5MIw4mipvY4EpCaH3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RD
-tfbIlbwotfbiOT9Tr3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfN
-t99116+qdwvWrTofcbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJF
-LE0dx7DSkUTtWbQGByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq
-/A0jgztaZVWa37IY/wQBA4atrlwHD2LVQWW8aUn17IvjZxnp2Z5Em6q1rszts7m9
-rXCv+fKUFF/9JiM6RFNBX2ZhY3RvcjoAAK9hYwqxHjc6iHxWUSLF376lmCzbsJxV
-/SYjOkRTQV9mYWN0b3I6AACvYBDzN17V2d/ZXmycyHFyOyxqAighH/0mIzpEU0Ff
-ZmFjdG9yOgAAr1pTL8K2pO6rbaqNJoTiKU0q6XdGAj+0KUhvdGVsIFRlc3QgKGRl
-bW8ga2V5KSA8aG90ZWxAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpdoDCwoDAxUD
-AgMWAgECF4AACgkQE9uWVTTG4/Hs1ACdFOYsQ4pNSdT9grdhmONXKXgVRzkAoImb
-lC/iwRti3/yZ8Ljc0tEc4HTPnQGlBDbjph0QBADOk7pS4JZak/26nkZWEs+hIIF9
-IgD0labkCnr+GNDmGJrsJxLwTjU+NoaXo+SHmWPaqRJQFrz3ZJfJAxioyoSr+Hv4
-Fbv6frZIJEy1g4dFhk8DiG+zR3uPOcZCUyyW3HupqahU0/RcX7CzXAcuPJCXeoye
-SsBDyUAk/6ODs/kerwADBwP8DrWpAtFexIWvsswGdpRJHSjr7j8cJ2Hy36acB5AE
-MCSd7kNM+LCrOqyOhh6RfokrvCT6ZuwlN39nDnkmSr3FWbqcRSj8khs3tw+Uyp8I
-tqhL621vFn180I7dZM11bECv+YZlmIF/L3JNzFR+jmpODR99bLjQI0dpUqT6IhyS
-0bP/BAEDhq2uXAcPYtVBZbxpSfXsi+AHAuizXUm/50gOqDPn9/AvgQnPzxgeV71O
-aUzUKvZEVIC7A8eNbmLXooM3Kc6ppaVOy1l6BVNcHA+iAdEOnGL9e46NALwFz+DH
-rt2umY2banvt6kYyWqChnp6vnk8O4CD8ufKnQ4c3zfSul69uuUA+l4e5ZG8V5yUo
-ikTP7kb7/7PSMohGBBgRAgAGBQI246YdAAoJEBPbllU0xuPxJmgAnjzxkJIErPw9
-iJ/WlLv4gvPY/IhLAJ9WR725AmIjPEe8YqhNfx5b+Va9CpUBzgQ246f/EQQAl65u
-b9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WFtsAy9XUeC3WbrcuWFgTs
-btTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe16wXZFl0pEc2iUnx9Tht
-oQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo5w0YxgJ9jkj7J4cmR+OF
-UEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DWG3D+IBFOt4qqxxp3WCSN
-O5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQBq0uKwhMaWficdrQS9syX
-FlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI91kZXAP+PINfoJ8hV2zv
-lGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdWi8Fz0Vy7sI4S+RMJ96rM
-ws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNCLXFGGaQn5ncO1tqKnWSD
-f625UnAipsgW8P4Agd5qJZiwXfJ67Hj/BAEDu6tMael+rX7E/usFH0MyFQczfHWC
-g6VkC9TYfdLwbBVtdcq/lugvQP0mIzpEU0FfZmFjdG9yOgAAr030xCMZovqQobPR
-re1kY7ZER8BZq7H9JiM6RFNBX2ZhY3RvcjoAAK91zg0swEPwYMWjD9p9kHpjle8c
-eWvt/SYjOkRTQV9mYWN0b3I6AACvbxuq5MH2Yu4E6hH46k0+/KnqrsrS0bQrSnVs
-aWV0IFRlc3QgKGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAV
-BQI246f/AwsKAwMVAwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAnj5F4su5N516+dcX
-YBl7cLVDPp1JAJ9d2mO76rlmINaaTtH5lhApIjQjEZ0BpQQ246gqEAQAkdlSJYfT
-iZH/CkfV8tnhI6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7
-MdHAz4RKFnAAXPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyP
-TIU5vq6FLmsWmMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJ
-gag14bTaBw0niZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CN
-QBBO47VUi0y1UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+a
-onKzj5QEo1XiiMNTFFmP/wQBA7urTGnpfq1+xP7rBR9DMhUEbuQV+5mF3JEYDt0d
-r9Ej9Ccl8GT/tOi0QsPNbtaWED6pY70iZMVJSk0TG7pZ47FNx8UHI2bJKWWjCF1n
-uXV+mW/xLMM1GgFMwK44bX2IsEJVqFjB7alBd/uj0ugnj2feFeTao2xDuSQ71IjG
-y/lFtOkcdJOov7L4tNh2/8ag6bbuZKiIRgQYEQIABgUCNuOoKgAKCRAMggxx0mmT
-E4+uAJ4+JbldpmIpRDEuE8tFCnHacQr0/QCeLU0G5RaI4jZI+QUKtYiXq0ITUnGV
-Ac4ENuOo3REEAMFaZuaYHLD67UlMCLHGPk1dFdAn3Mu2TFFDUYfEtA/JDOiNZacP
-iQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35vkTx0K1m69Ave9LnXIZ70zvpVEL/UeCuI
-TRiocxNglPgn4dyJ+2V0cWJ36NGcZmkvBW0vGItpYCbpIGLzYVOfiVUbAKC2Nze7
-9Iyw+DKU9HI39B4fz85nkwP9HbIb9z5kXiRZyCaXOMnFBQ3bAZh4Og5ZQxdLyZ/r
-IX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqqTUivoUmOS5Qa8dtUW3YGa8vbpK1OMnjM
-LhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQZ6qzS6YiYnqzSt5LcolL2+Ae0ajXUizi
-c/UD/0TNXtCRfkS4SeVSkZXarb1oZjHdGlw6ENiLGiA0e5b4r0rByW4EQQGZPvg3
-DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGSC/wSqPkMiKSCenRqwHwWIdKxv7f13hye
-TZXR7P8uaSddSXaakqmT99v6pdZOo8NsVQTx3PzPKpEVciPB/wQBA3B94sZ4BXVU
-UYZFifR1y3VNINM8s1ZkPHDNwxOmQwK5PkcxqfpPpGv9JiM6RFNBX2ZhY3RvcjoA
-AK95UQT4zAahgt0Z7gBkqnFPjSb7Fn9j/SYjOkRTQV9mYWN0b3I6AACvZij2NXRN
-N8KfYKoU+00zOAYGp8PcUf0mIzpEU0FfZmFjdG9yOgAAr2BTPmLEX46yXGfFOW40
-pPQsV5wHy6+0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0
-PohVBBMRAgAVBQI246jdAwsKAwMVAwIDFgIBAheAAAoJEDfKtR+3kQP4ilwAn2q9
-qdnkpFPi1neWFi0OEOr5le7lAJ40e+wQHgKIE+Fn7sjYQ0Liwn7oip0BpQQ246j1
-EAQAp/Ccn5EzxXIGljKVKZ5Pp0xJA3uBoQBvXzu2pU4HU+vmgwnX1313x+4BsHVE
-bw7+lfyhKnDD0TSwIAHj/xeE+jraCTU8X1iwe49eAyTaWF4wTyTzdZKQ9mrfBnFg
-dWlRjLALcTMJaOE2Zasn8wgAEHgi4QWyBPS1il+aFE6oizsAAwYD/RpvJnfv8Vqf
-bCxOYt7meLfTLrvcPlGNynv1nEgNgjbYRGIRzbXDDz+jwcLc9MeNuZgtaXvUbsQ8
-s0X1dP6vq43VmQTQPlU1TQx10o+YYn73ptyhbwOkyIDGmyf6uFhO0+B5/MY0KRLC
-xo0lwMxvVkYNd6k804pSJPqwusWBm2R0/wQBA3B94sZ4BXVUUYZFifR1y3VOfk4w
-3PRZvIRE/y8bsqADpUHOrpzhg45mVJx0XUD9jUsufCzZg7wHdE3KlnZW2cJ+HHoh
-up28Ie38bbaUVgfofuur31BiAVojpu8KhTncGAMb64oNfdRJapHzzBcuUigQ9ETt
-6OPgUE/thuHws+GpxQe8KhGQcVfJwuRernhyJhW+BEeIRgQYEQIABgUCNuOo9gAK
-CRA3yrUft5ED+PJaAKCkicGM/NGxdTvpyHhtVSSkTRV/6gCgsnKOr6ziNIo/Bbdf
-RfYDd1dL4lOVAc4ENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t
-k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+
-Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV
-n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU
-p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg
-SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT
-Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn
-4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL
-b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQ/wQB
-A5YOFNcg/BY3BMnzmbEa9r4DVqdF0faqHCAPM1GU/o1rZ++VSNJruLP9JiM6RFNB
-X2ZhY3RvcjoAAK9h5T6r3UXJdRJYgiPBeltuXDZLCq03/SYjOkRTQV9mYWN0b3I6
-AACvXXkGa4lux84ceaJy3CpOkPW9NxGnh/0mIzpEU0FfZmFjdG9yOgAAr2H8Yr3s
-FEe3lYbWaVBMe1xHDnsfH0u0J01pa2UgVGVzdCAoZGVtbyBrZXkpIDxtaWtlQGV4
-YW1wbGUubmV0PohVBBMRAgAVBQI246pkAwsKAwMVAwIDFgIBAheAAAoJEL55SFK+
-XPiG8SMAmQEeRej4CyoP+wmpdhNm+c9famN9AJ9nKsCqRWJ/ufezi0YqAcbgbaNQ
-5rQSTWFsbG9yeSAoZGVtbyBrZXkpiFUEExECABUFAjbjt7cDCwoDAxUDAgMWAgEC
-F4AACgkQvnlIUr5c+IaZ1QCgqGtz7Pnbid5+UylHAn40bwpXE7EAmwVmqbtsG1iW
-Wt1xOo2oyTj0t8E5nQGlBDbjqn4QBACme9aNjmsy/D0vLzEUvj2kaMBgVv3MWKO+
-Abi0yKsjdP0QEt+UosnybgpahGhPZ42bL8kYsfJmO95pWHxN6sNX67FmQQa+/vTa
-fPw04SVBOMdYejLSfqmhyLoXGF8l3Vuc6MMraZkS58RA1KfY+EDjqCMItFMA+7Au
-mK1JIvm5uwADBgP+KP0pE7r38nHf5b0NlDFYhAGIqdgdWvW6zZal2lNXiOkKok4I
-6AH+GUGYJjULX+2mwCPUDdllqYlFZVmg2iSRF4i1ktd8ZpymsZuaaNyDz2AUzlXe
-cRQ0JT+abYFBannyHg04K/rR0avkYCocPEBK0+TfzzNvER3IWznsI9Dhkm3/BAED
-lg4U1yD8FjcEyfOZsRr2vgAw2DSsek1WQcJVSrTcrl4DmC6JoYKNZxcZxkz+azXG
-MzU6P/gruBQX4ldaWq8ObvjrdF+g032GXju9Olh9Wx82E+lc4O2K5kwNe0fveQQG
-7vFrmajyXnIB4myEx8jSGNcEUcl/6pMmwjzIOMcU1lPVYNkZU8cFQpZHJ2dY0OO9
-MXpawIhGBBgRAgAGBQI246p+AAoJEL55SFK+XPiGkTIAnj6CpWQaP+vvx+HhzcjT
-cL/VKlZQAJ9Nk+d40+pCqkNEZDcV/xO6vXHbbZUBzgQ246rjEQQArXimh2e6XDO0
-Lo/BHPEsdHyd7tDXS7KOcZ/RJOBVjCwbuo8O2/+SowdlrVzmUlihzs3k31AMe/TT
-Ciaw/Y2Vv9JBABVXmacGRdZfHwbERC0fXMQGoxN0bxZIAmAIV7BdSZ6PqolOUzb2
-nRlOEs5j+Lzp546yFk8vN5rWYsKBSHMAoIGmmgpRPEONTciH1bY0t3/jZvMdA/4n
-B/bsDN76QdkFdvSCAams4Gha+7waKIBaAJZWgkGzy4sh19TJN5BGYOcXsJg0v7VO
-Kxqo+1HC/TpWcdSAg/HKfNMjWH6COyuVzOrGDjJnyTkRjhLKjLaGG6N5Zbg4A5IN
-ug2Tcp1HhR2UayFs9nCqk7mgd3cNPZvLCTbrN6aBLQP/UNSg7Iyj4vPtpFMyaCt1
-etUIJVwFQ5X8yugeSjhGehkf4F/TObssi40RMmxUkjT5by0ddfpleBkeQHK1UDph
-NEKRcqNTK/rg7G6sJMxEb0ata+aTsqjOVj14ZV2uaKOJ2tXwRF++iBMyusSFRtOx
-pzZ2mPnZT4LC6uCPPgNtGRv/BAEDsc7YSdD9O4gyqEDz+24vfhBH5b1jnJJ9MOul
-ZipNjfbpG+Tocn1wYf0mIzpEU0FfZmFjdG9yOgAAr1WRiijedefkEEOQBUrN2HOs
-xDW9NIX9JiM6RFNBX2ZhY3RvcjoAAK9CxfX5lmHbWFcJfFHEQCfpabmW2/on/SYj
-OkRTQV9mYWN0b3I6AACvV5X9PayElGU3atpQ//cE3jl3tHEfhbQvTm92ZW1iZXIg
-VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ96+gRNnRtFX68Wbsix
-2VqHsXeLugCfVbbEonL55bC9BBQ89XY+6AFNSgGdAaUENuOrHBAEAOGceVg3PC6F
-tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap
-r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7
-JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe
-52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE
-VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW
-vrlUyIYOTm2RcTxkf/8EAQOxzthJ0P07iDKoQPP7bi9+FNgB92LCXMeilHSPeArG
-JblD4lyK8pp+jwjSCaWJrWQO/OJJOzhTh6Betn6H6C6bapoEaQ8TuKbHEnOMUfax
-tx/yzDtWu4EWGMyG9sSPjXRr/lChDsi5OMcYnrxK3foQYMEHBMb1fIqqtRZmqWPc
-FixNLKLjBalB2cMRuYaY8o2V3ZyKiEYEGBECAAYFAjbjqxwACgkQJbAP1DDOxoQg
-5wCfbgzOK8WkgR8iruUOQagMIqwMr6gAn1iBQ2TJM5znLHzYgLX+D0k5IG/plQHO
-BDbjq1sRBACVaJ7JCEOyjZmcPbBv6CrpqqTWtFSFzB0HAJNuITVosCye4yXycsfh
-++FpPPZX8B6OgvTR7bx24Dmiv0mIF+ZVuWulMAgZay7QBTq4RCxaBnBF2yjc0f8p
-8fxnmXHAm2Rn+GUCIQeiGYagPfyYk2yCebrdFdp1QfvqKs7oxy9aVwCg414fuLbk
-BysyiXg7sFnCoarbmJsD/0hGErsAWF+BpGsNPPzg9oiyzGnV1YpqVGu4wlgZArYs
-O4SXndD53WudgE+WI9uNav/0aSPHcrgHQJ9ZZALSxSXvts1EWqvwVeSNFly+QKjH
-Ecbs8gUbvust3ZKJD55L52nlCKO64wLyySS9C67FLp4iTSD6OMaU2GO673thrrF5
-A/9nF6Tfunw/W71NOY3uc+2XMZcat8pWL0O0nfUTzTmu5cWpO6gV9w4FGu19j4M5
-5tfxHEjBBX9MSbLHChd2aS/TcRjAPoAlKbHda5WLn+t69wf2d9IQcPLuwULwIGnh
-pq8AVFA2uGiZIH2VKblyUYtmIPieWMXUQUAHBAVyHseGU/8EAQMb786noBSUDw4m
-7xGDnWduktairbapLv/ColtFylU7mo8tzwPJ9N6M/SYjOkRTQV9mYWN0b3I6AACv
-V0SyyziakJ764L9AWGhvZl0VDNCEff0mIzpEU0FfZmFjdG9yOgAAr2aAgfc/R0ZI
-X1er4E/LYM2tthHZ54n9JiM6RFNBX2ZhY3RvcjoAAK9vCoy6yI44r9RAQQdGiriB
-nWdRPg35tClPc2NhciBUZXN0IChkZW1vIGtleSkgPG9zY2FyQGV4YW1wbGUubmV0
-PohVBBMRAgAVBQI246tbAwsKAwMVAwIDFgIBAheAAAoJEF9jVrptlzKssC8An32a
-3EYMFU3dvYtqymOZk1G6qdElAJ9XrILycL0GM22u75KkQfVlZReszp0BpQQ246uO
-EAQAnQtV0TzPQjBa4FVL4qFO0koX3y544FgWd4amzmK7ILV37kHb+pQIsZzT3Z5P
-5OJoy/MNaam41Jn5m6aVQ8c7IolEJSWrcxg31NYA3O5LJ16Rf784IW7nMvBzTtEh
-4t7jPxlwue+ImdaMWvwNeHypwlWE9U4alGtbrAuWEFx5uCMAAwUD/3+C2YDd3Wy+
-Iy6lxwzaQCBI4k2yl8QyhzpwKH//+EhNJqWjVRy7t58SOewrV30iNpDEEpv96aqU
-ys2gZTPwmzACVGp4ZpSzwEQ3Cf4UHA7QbBeZxRu83y33tEgcILDNR8S/evFb2u1r
-G2KUmvfPtx0g7svVcKYRae4uB25wm0iu/wQBAxvvzqegFJQPDibvEYOdZ26Rt9Gj
-Nyo0jdE5rAxUvk0VBw7TW+V6uxtqp+fKrP3W/ewR4mUXo1jq29kicdAtO/nI0uEW
-iMuascrL4lCWWcrEK2n4AX7KbzJ9W3HDupQhHHwYga7LFg+ZAc+6m9k+cn6M8Syc
-sbQt90IMqon/jpYnSialNZilcMpFfYCnqBDTVKpBReiIRgQYEQIABgUCNuOrjgAK
-CRBfY1a6bZcyrA3hAKCPwFgK2ukTx/0R6o/BN6HFJh7Y+ACeIB2LqEi2uOknmyef
-7JveVqldPTyVAc4ENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9aFWt81G93W8WhV51
-qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC10mAsLfJ+1rbnGJP
-uNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+JBw53ytRwjwe7m/D
-1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzGqLaHXSEBsh84OQTx
-PI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A6juudf7A2Ucy03G8
-HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFxRQ8BYJDGIwPrUW5J
-dlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hvF9kUc+1hbmir8SOZ
-/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJAARnkiVG6yckMLsx
-Hi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHSyxr2SYb+8lbu/wQB
-A3vncg3S/0EKhZRFb/E5MzbPjleeF5fQn4SvP7U30kDoHyI3LH6KymD9JiM6RFNB
-X2ZhY3RvcjoAAK9Gv/oavNniW7Yqm+70mldjom2X6ztd/SYjOkRTQV9mYWN0b3I6
-AACvTc6M6Pazxb3BIBjtK8lUhha6Ei7BOf0mIzpEU0FfZmFjdG9yOgAAr3SSQHcy
-6mye2mjpCNKs/FezOQKbDUe0J1BhcGEgdGVzdCAoZGVtbyBrZXkpIDxwYXBhQGV4
-YW1wbGUubmV0PohVBBMRAgAVBQI246xEAwsKAwMVAwIDFgIBAheAAAoJEF0V4B0/
-8TIG4YwAn2L7BGoJE1q7g/ePfsIhAc0nacGKAJ4iBZV69HtWtOryudH1sG7zEoaR
-KZ0BpQQ246xxEAQA3mE758SGpbalfvWhJSpb9NEdZJvJs1zlutDW3OBNuF4eIb8t
-AnWUeO1mhlCzJbcf958S40BHCvKjgiO8rSeaJCyplRHXv3ldMhuj/Bo83TxC6MLb
-q5ZsvWlgvnJBqvBso6jICy3iOATU2llVz+vX5ZSns24RqmJxWO8U3OSJUIsAAwYE
-AJZAliv6HSjOvslD8Gojy9Mq5Vdv4MgFCO5LM3su9qIioypv1l1802ZnUC2+SWjY
-J7ZUzKWJDNVJNm4clBt+sNMFcF/5D4Ag2Id1kQCh3MG8O/qnu+xOeg/4DZtLyXrG
-tY5sq3crL34ZQOSpbda5qBxQqiBCARv8Up5z4Z6DBKBR/wQBA3vncg3S/0EKhZRF
-b/E5MzbLEL6CTR0ywkrjR5f4P+KFRNbVixP74rOGEYga1Uy8PrUOMDBIjbtKVWQy
-6ly4hnMv7ZPtIZSJFpeofg7k/kTNJB0W0BcJhWfg5CbiWncJYH+IZT6+/0aJfmhe
-y7gMlkoXOqH7y1MlLXHLriVzNOpapAK4Q7vwzzfRL8kXP8zC+u1noiuIRgQYEQIA
-BgUCNuOscgAKCRBdFeAdP/EyBhuTAJ4zaeXrBSUA3s0m0MV04WJxDDGwWgCeKwYd
-KMH/CO2Eaetd28XWxnxJHO6VAc4ENuOs0REEAIHCI/xKPD6yIRGsSnI3PXTW/f9A
-WdwcQZO8fWuxypuqNP73Hyx9lxYxcQeA3X3vjtTwvSjVKiIuhk2nxm8qkuO17Jzi
-bOZ77K4JlaVFMwHe6dHcXHNrSaHcIZB+BrTj+IuD/Vwa8Z4EK1kNI7t99xDxesC1
-ou6pFchhDQn7L5LTAKCmIDPl2IfVEHu/x19Bogp5NxMVZwP+K8gcXcgYoY9NourP
-LwHuZpU68L/OboKLkgfeVxF/Bj372liFv06VFkOmu6PGM1P5CD2u2MxE2F/HvxVa
-9mXd9xwH3i1DadzktDbxG2CZRg31u/1+6i1b9aOVgowh1ISvAwn/QMfW+M+wm0R6
-bcUhOFO/TQgjrF0LDm1dvKpRrBUD/iCGgoe3U6gA8P5wZn7l8XqTyl0ul3YtLaO/
-S30La/k1LSThFRiG6qkAbIBEhYk+akdFu6oTp5eO0yEMj0J7f1ffeEMMgBrSILTO
-amBUVu9INRZMg0V+ez80zLlNgY1SOph5GlJC2i7o20V4kBZvCFyeK39vexqaSrko
-LzXK+0Zq/wQBA0GK22cdg+tRJk3gYcN/JjZjdGbyparZK4zFc6L9X+dZtsC9gBVh
-D2j9JiM6RFNBX2ZhY3RvcjoAAK9XLx987T5u+PQj0za48diNtMwF5HRv/SYjOkRT
-QV9mYWN0b3I6AACvZ+sSQxavyXXTvVtvSZ9DrB2hdoyR5f0mIzpEU0FfZmFjdG9y
-OgAAr2TiK/D9hNwmBtF5JxEuKwCv5DBmY920K1F1ZWJlYyBUZXN0IChkZW1vIGtl
-eSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs0QMLCgMDFQMCAxYC
-AQIXgAAKCRAcZ+wTPGYchNG4AKCjSqAGZAKs7NstyNXe0qmxdjqhgACfUIFuQ0RA
-vRxngnEfGZJiTL7vHBmdAaUENuOs5BAEAJGi4T/jrY5BtRTM0psAneQytzzFgH4+
-LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrzra0SQ75/SkI5+/S5
-ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvKV5b45htqCPnV2Pgq
-+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN7stgGZsbHCc0y6ln
-1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4PgSuXq6VDG5WNw6B9
-bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyfxwGr2JKkVF0S+f8E
-AQNBittnHYPrUSZN4GHDfyY2YCjm88CdmfBmhTozr+i8fBZaKPsQQkAz4Ybhdf+d
-CkGOyQjOvI9qUX4wNF1n9/2af6a9A9TJNYGpdQ3AQUyyH1AXIfYLeZhAKR8oHgP3
-r5L4DDGmyAG/I47Ziko9nyyRjEkT5B17n0HedUtHH0+v6vtjNc4OA0XtbY0SCvuF
-MpLRF9guiEYEGBECAAYFAjbjrOQACgkQHGfsEzxmHISIlwCfZ8SYKvVQnWcUbLR4
-pdAC/SDm0XwAnAqTsdVw9qkF0c5EwGnsst/qiAqalQHOBDbjrjgRBACU0OjVoC32
-Kh/dUjXPdN6HIusEhHheYpFIzYHHTYJmFBEjBj9CwrpYGjGUmp+BS2wFS59zO2Ml
-pQGLGrmo+YGBdio338Hwdm8baeScd2Koqu+oWkCoBMm2VxxbS3M8kq0ppNu2Q5EE
-O/qGywVrVpfBM3siM3mcsjVaHyWy+T1IqwCg/lnggNIr+Yz2HoU9GwCwBi9331kD
-/jRTBAuXTq7vAG2bGpJ0X/zqSMLSRZfwnZj28hx6I0SIT0yZU1xggrAgzSbB24Xn
-QSSxWMR2BZQmupPdHO0l8xPn5KCbYo4C+9+ZsprxEXg09KtVcMOsV6qTq40NPSOd
-RRNAVhOOTg/GD0qX5r9ztB57qpefmp4Nfy5tmo3SehfRA/9jkdKCLrZRsE/kH57k
-GoT5kt4nvJW2X3T03BMKvspVm3WjdlrR0Ji0yiw9P05sCMJqeFKe4RZreG6i606C
-itZpRIRbpjfMEq838zgUDv7VGF7zqCedYu36sepfkzxj/slNyu6A21HTgMWxiBrk
-DXoIuxMPFKYzZGC+nCHXgW2uof8EAQOPMKazZfwtUoJ7eB74i789uCp+H+yM1KRO
-CEcmSW/T7ago8wfbaRdC/SYjOkRTQV9mYWN0b3I6AACvTozOxPOPjYlU7v7vhyL4
-rFswiNRORf0mIzpEU0FfZmFjdG9yOgAAr0jn/8fzbG+geTnYS5NG4g227pXLeTn9
-JiM6RFNBX2ZhY3RvcjoAAK9spiY0wOlyucxM1H39jlMftXgj0GA/tClSb21lbyBU
-ZXN0IChkZW1vIGtleSkgPHJvbWVvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI24644
-AwsKAwMVAwIDFgIBAheAAAoJEDvb7bF3f77Tq+AAn10WjJmAMcn1pBFwE28eIqtU
-z5bsAKCoNi7oa/HFVQZRypKR7SChjez90p0BpQQ2465mEAQAiea3rOLV0WY9+rOz
-+CmVlH9GAvJrS8cXjRF3uXJALZ/IDH3EkCeDHouDtRAb6ymfQ89vBJr9BZg3eug1
-HeMm0SJNTzfJFq8vVLhiwH/1QQJDCMl4WAhJwe8EbDY+JBeQ4WIsrXqdsHpD6HGT
-thgFKCMmNsjDW9ptoNivFJytkAcAAwUD/iMYod6PvvotNl8IuMDnu2q6NsUngZh/
-W/JxGifL/EVS0TtAIKEeBi8ynkzn7+exVOPLZWO7MbYehTsXiWkJEtZw9S0aW9xl
-A2a+6jP8jhmKdFoXUYBlvnNHmGt9oOWo6ts59/h9S+Mq5kUmTOJ5meWV3vYo5BrN
-FDWKpotIAWMa/wQBA48wprNl/C1Sgnt4HviLvz27SydCgapMV/zUfdQL64nYYQj/
-00crVG3e1cAN2iOPRNsjnczkYXjFfSxTxoVvQEOvScRoOF1LQ6doAGGSJmSkyIGZ
-wxb4VLD8GhqmCX30XxOcTRG6EiLq9+kDGL5gAnBUTviRF6Tc+y9N79L+nxc4lawj
-36d0ZXeIG2fm8RycxA2E4ICIRgQYEQIABgUCNuOuZgAKCRA72+2xd3++00nRAKCQ
-vRyQt5pNoWbpj8btfqGK00jpOACgjSITGzCNURjHPCPEBAPqgOVDh4CVAc4ENuOv
-BBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ67rKzBkicjelpwWk6LndsCrbLsIWsDf8
-fNtih0r9As+2arfApkNlwuCGq1ZlPGGGEf18OqPxFvnghVEbDdcosP4bIm3k6G2s
-gFbMl68xAGnTtkS5Gfz43uTuznPzdZnGbIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud
-9lx1bWM9KqUtAwQAiRYHm605RZVBkdzlfYx1Iwgn/l8Chq3MsPrfBMslapBnq1an
-2/nEQPmuIde9C6ALN1t03DHpKonx2XgjYVz8pgty2FU7txSSm2EE+975dXp3ov4T
-fD1KxksOl770PAzixLfNhPW1q4A2cEruGgO74qEX3/fAa1J0nRKDgmA/mgYD/2TS
-ZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePc
-ti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZCB6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6
-DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmAYmo4xn7Y/wQBAw1YC6sO6OK1YqygeAug
-0cwEFM97WACPFwv/yo59kPUn2OPV90GqWcP9JiM6RFNBX2ZhY3RvcjoAAK9kgTY3
-bsST11j0XtHaORe84A/oRwpP/SYjOkRTQV9mYWN0b3I6AACvXbfs2GvacmwUsN1h
-JIJ6o5Tv41Oiif0mIzpEU0FfZmFjdG9yOgAAr34DrRWil2lE06jH9gI775+twQFW
-Zp+0K1NpZXJyYSBUZXN0IChkZW1vIGtleSkgPHNpZXJyYUBleGFtcGxlLm5ldD6I
-VQQTEQIAFQUCNuOvBAMLCgMDFQMCAxYCAQIXgAAKCRCl5n9/o64+oa9/AKCaJbj4
-sc17CLwMOuvFVejk4mwUQQCfcrpQGZox97B60MgQRs/wklSEVWedAaUENuOvgBAE
-ALhxyR0+JaBA2Qa8CberwXHNEuiDrz+N9++Pwy+375dDg2KQ7RUnx7NiRV368be/
-lGgdMhLKeYxZlmNPnpoUNINk86RCzYbSpmAASBOnMJQF2WdQLxmsdJNJCMKfse1H
-ZylgIJQGWI+1q0O9Lcx7Vd1F8GFeJvThMHRyLoOvMVCTAAMFBACN7RHUg2b0aRko
-DNMQKL6VV6LvBteSfgkXqf2vUovmhQtUXxoYc0QnVPCPuS6raRpxiNz8OLgp0RJF
-Nk32zOVmc2u68B30kociBt7Kx6d7fJGHL5gVqpebUy1YJ3DBoOIOgcMBKmXnlG24
-IrHPq5bvuqGtnwToZEOuEj3ZHzwNuf8EAQMNWAurDujitWKsoHgLoNHMAI9CpJsg
-3p5r1/2dTbN+h0CJ+lqHoo70wkoAb+gaM+7jq/FWce/7mNExPIYobdgkvZ2rbKJP
-x8o0zJqu77IkMLTb/eh8z+dEaC9X0S/uYgN6AUJl/DsEU+XwOd+JY8Es0wJda+M0
-qvSGaH6+kTYy4pO5QD1BrfdPTOVNxcFna7HAItZPiEYEGBECAAYFAjbjr4EACgkQ
-peZ/f6OuPqEzHwCgo3fuvctqBR1zM+lGiitaCcoRH98AoM2iZsG2q1yiU3MebUWD
-xcPCiuRMlQHOBDbjsAoRBACQ4U3waYeRudWpRA1GiHxbw9CvqFw16gwe4Q4N7LVS
-KWUffXdm6P3TzrlVqK8FxQQyXitHO4iREKzFipcXam0RpB/KWhUpy+V1qOMTI5J6
-pyc2Lt4G+9+IqBR0wuFgzNv76ExrhaS8Pnoq1vsJddsLrB6ZzZFsTBCFrdh6Bk3q
-3wCg9yVAa2nj2/IByp1xc8hLvES6d7MD/12gCo3vjQGHqoXAKsb9khD1I/BDILV+
-0g5JMg7/MLkX3DcDALeF8B2J5zN26VMFo9iXAxhPa7DZ2vx7hQI8/9pa4VCp3B9A
-ssL44WLbdbfdo9HD2Wnkd6WPEf25vDbNtLYj+7sVZY/rMyNj3+SolB4YlhydkU1x
-hNqVJk+lBYXNA/47smbyDSsJG1EksKSr7KIteXenuFseT2dpgK0+cvlC4rQceFii
-LF1elFVWhATWgXut5PXBRnTxG2vx35Une+pC5nEncvha+93d0zCK5sACjFXSo0QB
-HN5fO2Gj3dvy3U/k1swkMN9xKLXsSe8mc2QNkicdu/48iIF5FrcL5+VAjP8EAQOk
-qTnVSVlDNyanmeWCbHT5y1XDf7flXnKwAlPvRhV71WMkqrgQyZSO/SYjOkRTQV9m
-YWN0b3I6AACvYMiOr13riT9DyF8K7MAH9rFUqh5JY/0mIzpEU0FfZmFjdG9yOgAA
-r1ZK4vMwe7MVGkYsBl0OFJFhJWf+nD/9JiM6RFNBX2ZhY3RvcjoAAK9tanjl+Ggi
-icD8mvH2FEnlCyuiB9iHtClUYW5nbyBUZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4
-YW1wbGUubmV0PohVBBMRAgAVBQI247AKAwsKAwMVAwIDFgIBAheAAAoJEFjLmkyF
-qB84JOIAn1w8JVmBDp+6A35ia9SqWpt52ZiiAKCIHwczU5eSjSlPSm5W8C7dlk+B
-CZ0BpQQ247CeEAQAnr0w2OcvlUX7E8u2C8dJGIj7wRU5qDazxh0tw55/ybJ3/Kyh
-CFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0b
-BhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYE
-AJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRiuw0OXQ9B656zp02G5qtDN+IXhgLdfQqg
-qyWckP4BLDJ4NtQoEM/Mr2/7oj3h01XpbU86R1QFQOXmoWw3q7yqEWIwfOBqClSF
-0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH4PrVjHoNEz4C/wQBA6SpOdVJWUM3JqeZ
-5YJsdPnICDfLPDsLTp+mSJOvz8ZkqbdjjI/q3Kptusm2FbDk07+WCtgfeKcaeJZH
-FNDb0PYRG9S22OGNlhDTmZluNPmUG5syMkoyycBX+4RTirp7LNS+VBIOHa6d1wD1
-k8lANIjD/ilD8pW0pAyqN5oJLDgGD9892G7eeE9Vy4XGRmBB6TbFMF2IRgQYEQIA
-BgUCNuOwngAKCRBYy5pMhagfOAibAKCS4dbgdlteoklBNH9XU3+trecmqgCg4u4N
-x5RLyPVJoOlZhb87WTBcW5+VAc4ENuOxqREEAN621mjyBM5OvWclduTmwl+5VJBo
-yZuAulmkyzdDsL6ABfRdf5D+9y4en7BXY2rRLi/7Dkr6zEMXgDxQN/6r4aY0owDl
-TbuGRwNC8TjwRhSCFx1YqNZ4XCaYk5vQoyhq116HiI9PiPyhwbD6LTPqj97TLQ5V
-axS8iqniJk/dSWc7AKCA6rkZ88kyrcrdw0PedTsY5Hx7UQQAxyAfT2jrwduNvCnD
-56M+4rBUVrfsI5f/rkUXw8416V6rsyvdjzIqpssiwhYNrGuV+WlvIzP9KG4N01Ty
-CH6ax/CHT5E3N0Q+akkIJUk51k7jpy52BvIBCuIfs/KxJuLsBuamcyXuRCu6EBlZ
-cu2cfV7WQqi8HjdremHzAXiSi3ID/jkDxssoSYm+mr9qZjpWMOcazGQOOPDY6hVu
-3ywt0aOmBqePd+/LkpGFZ5YsqGa2rji0f3ubhgOYYIdVr8iJzhoM8wy9Q9Z1pjkP
-IJ56tU5vck3WosLujnHYcG3xETtxec8mXlUrFzirPKzlupARhi3Z0/hwmoqTc6OM
-JuXpMn7x/wQBAwH5EiW2ICr1W3T/Rx6Cb3eG3/JG8Sjo3rpEYlaApMS+d4oM/9V8
-3kr9JiM6RFNBX2ZhY3RvcjoAAK9AzQba8DH0bAE2s5RGAEJ5VAWk/+g1/SYjOkRT
-QV9mYWN0b3I6AACveVUvbR4gGYzhP/+FIlqbM8KFSN9EM/0mIzpEU0FfZmFjdG9y
-OgAAr239YwqXBe1eAtTrlPkM+BZQS5iCzKm0LVVuaWZvcm0gVGVzdCAoZGVtbyBr
-ZXkpIDx1bmlmb3JtQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247GpAwsKAwMVAwID
-FgIBAheAAAoJEKlMD3VlMkTWM1sAn0eideyWSJxrd/trrimzJpapYrQPAJ99nNzM
-TsSCQwsfLaq0E7kkkS7KtZ0BpQQ247HDEAQAtbvtPTT+OnT55+kSbXMy9yxK6Mq3
-D5hzpNxW4jXyfGDJxQXkk/lPvnIYv5Cs5vjeMvE2RPLB8Bqp5HiAbSV9mJkCRYSo
-tkUfQLVZ9h1dWUwWE9avz+zKWUzzCPRDg5QhDyU71/jHbT/MYdBrI9YtcLo0DiQI
-l3a6rD8Xp+EnIecAAwUD/jUUTsyxauJAVKYKE8r1syZfehncpH/jtAIW05We4sfS
-rUC38Rq6s4KNIcA429kM3lh341YWmmknOVFjTLiEMh0XLI/ceJ9uVxhNB1MjlUg+
-OiDgI32Rfm3lzmvzW2HEfs8zkX169asltoOKFfCzeLOLleHT2pkN5ffC5IPJYVgn
-/wQBAwH5EiW2ICr1W3T/Rx6Cb3eFuP+IvpNCP9FJtq/cHx/aNtVczSNEk2ParqkE
-bsZoGgIF0fZStEWeTda8b2/P8dt8E/hZL8YE86A6y26jjzhIQBnThCdlxYXCI+f3
-rwXSdBJYBu6jvOA6Cp7VJkBGBUknV3c26VN6mF0tq2xw8EdB0Z94SBwIObsUJxUX
-GSx6F9n/BIaIRgQYEQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ90NN6PZ4hYojIq
-GPHLsoXLX4ZQqwCeNI8dzekcdK9ZkqXRxIfFj4cQH5+VAc4ENuOzmhEEAKMDGobM
-DqPX3SKI3/W8m9LmNgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7n
-Tz02IJwZRVlrbEPdW76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOu
-xkW1LWavujX1JRvlBZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O
-4QP/apMk2mc+GJwpKSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3k
-rMgOCR6dEsGukIsgVWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFB
-T7PI5TkLzlAEP1y2Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmb
-xUpenRhg/mF5rwmHl81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/
-7r6f4kFUrhO5atClnRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab6
-3kZwXCPiSR+iEwRp42GbVL7F/b2r/wQBA+smNbHH+mT2ogDvwebUEYQ5u7AjqZvU
-WkfnZPKAVQwghkIrT1Vq21v9JiM6RFNBX2ZhY3RvcjoAAK90DxORhCauJg3tbEH5
-zO25GERe8T2L/SYjOkRTQV9mYWN0b3I6AACvW0fayFNyPj0o3kQ0YOk+vZDnV7i/
-4/0mIzpEU0FfZmFjdG9yOgAAr1sEI+EYL25Oh+V/MAHMZ3nfeIm133O0K1ZpY3Rv
-ciBUZXN0IChkZW1vIGtleSkgPHZpY3RvckBleGFtcGxlLm9yZz6IVQQTEQIAFQUC
-NuOzmgMLCgMDFQMCAxYCAQIXgAAKCRBHr0tpYfBHhMxJAJ91JH/X2uIsYSrKJmI/
-S1Zgwoz1/wCfdQoDeGHzNwPI5NaxIZH0XYr+O22dAaUENuOzvhAEAIeRQIHb2kyS
-94wRnI2IoiaLMXk1n9y/3VGPfX2TfEd/Q0laFCn/UbfxLEuQ8sF1ZygHiYlE2MPJ
-WzEVRe9FYUgx6TAvSrWwdJZNwnAKlCz4soq0+YPcsDduFu5NJ2liCYrLbVIfh6m5
-uoHOT8/TX3eZZfMeBIYt5ShOjc3t4FDTAAMFA/wLVDdYasFk06YVWXLR6tyWlBG/
-WoJrvznLH9uP26vYvEfBWjMAReHyOaiIpnKgDPtgWenb2RHaq1WmUfWh483IXB5m
-oiO2ZluIJpPixxRVn/cu5hvGAyhQV5GgbiacRW9RSHyaZmi8yZkWu+nS6iNwOx9h
-PHRUGvzBrGAmuDZiC/8EAQPrJjWxx/pk9qIA78Hm1BGEOtrTuBDDiXmHnTN7vG9T
-7F+vQT/JusPW4EJHYO4E2e1J6gyPEGOqrAsLW97WTEN+LW1bdTdY7dhM4jSI+Unv
-ZqZ71xW06WXE2lxGD4ayXuzP6Q0KQT7YcMnrkqBluRJTfGKdjX0RPXt/5+KWd7H3
-VEst836l75/lYfLrbWxaArFjztISiEYEGBECAAYFAjbjs74ACgkQR69LaWHwR4RT
-3QCfcsKGxTTd4f5S/liM5MfnCtlAU9QAnia0uQcnuH/aodTQqspKUGN3Z04+lQHO
-BDbjtDQRBAC9Vf1MkTKc8kSxfdfZ8Y88OJAr6gHsPUg0j1t8gPk0q2ijyrJuK84u
-jzmLmbtFSITKFfcT2VSD1u4qa0iFqzSwnywtRGYKd0gq1eMhaDcp3SmaMTyrbPJ3
-sKFDd98nbTzvnA1tHgZCFI7VZO7HBGgvnd+370lNQsnGRBF/vUDObwCgllBimEp4
-tasu0WNvZYptjGy3ni0EAJLsL9W7jR64h6+nZNkdO1jRT45sW8mvyMOt1BkyRQVK
-6G2Lut879t/upPCYK+/ohWaf3TkAKH1ucrBm9xHlPXJHZvoIA3brt/OuJmG7r8Ub
-70N2vrZmdXas/w5ru7EBcKeii9pp8pi6mim8dXTPS1R/b7BqytB0dlO9zSl9j7no
-A/9Y5UnQobM/qT1tiNhJEnUwlvvTB1UWId2UiUR3k/eNCxc7IdUytanqofXSxAu2
-jyDB5Ymv1od6bRCNM1JNWnOnqVoEd/u2csTAIkZ5fl/kE6HztqRGPB+H0n3Nb4MG
-u2mpLq+OUNhTnLpEZsZGXqd21eFXkWkThxstrH+kYVYSrf8EAQMsrHk/oVe3Xf3i
-4RPIB3bwsBoWGrA4kRK7mm5a6M/pBLavd6wy89rv/SYjOkRTQV9mYWN0b3I6AACv
-ehBH0gU1mDQlnrZJH1j9rE7y0RQQ7f0mIzpEU0FfZmFjdG9yOgAAr0wMh+wQ/T3L
-5WOeVMHnGH1mSba/DcX9JiM6RFNBX2ZhY3RvcjoAAK9nFbd0J8gWcTtZNckFwvKi
-KKj15fB9tCtXaGlza3kgVGVzdCAoZGVtbyBrZXkpIDx3aGlza3lAZXhhbXBsZS5u
-ZXQ+iFUEExECABUFAjbjtDQDCwoDAxUDAgMWAgECF4AACgkQ3vD3uOxn296iagCf
-SizgYr94GzIrMWbc6H1ha7gFOX4An2oeiUql9DoXgvph82AUGtmv9TuRnQGlBDbj
-tFYQBADPV+xDMQ8NzkqoJyO+lriAUrCNIBf1Kbc6U/IPAGOoED1YVPX4EB27u3K/
-EmRVd3clFS085Dau5rFIr3d/xXnLn++wqSgQq0Jc7LflMpIj0P209/oKt6MBovTA
-Qn3lNpecmWd8oxiKoPP158Zgm7iLcOvRTcs+/p0KAzNvHIvQdwADBQP8CQS48V16
-lhWOSXV6u3JOukMeWBw6Tx+7M1CqyBihmR8ZNlF6FPBvVkX0NFVUH2qJn5yr6Pmx
-QxSRnC3yCEyPBa48xqIditzynMbEIkNUrFZTE915rr0k9MrwzPGuLfaPtr/Miy4B
-I0dnZ/5U4hoxPwDbp0aPUwRqb8+T9POTZs7/BAEDLKx5P6FXt1394uETyAd28LN6
-Abjx+ozpGMN36+SHvBm1QBbee0EWJ9LYnatmavOGPgEn7HZFbgk/QaUQiMRMNQIE
-ykHjoKU1C5uWEDR+P/wuEYX0+pQ1UhUUZ8v+/wZjAC+X5WymJmjKW2l4LXfq0RpO
-U3DedzHl5+zcuhfZN03MhxX4mcTHdGNSLqWzikj/1HWl3ohGBBgRAgAGBQI247RW
-AAoJEN7w97jsZ9ve/yAAnROeKraABkL+JUAzQwMcNm+0JCezAJ0Uz6p+tN5wt6yw
-yH09JfENI3F77ZUBzgQ247TcEQQArUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+u
-RFb9AGsZTmw/FTPETO7iU/3frlyYyTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7
-KnKpw8M2tkPiT+D8ANrHU5d178evzm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91
-kG04WesAoLPa5zISvsX+Ew95M1o4Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWm
-EDzw4KHXQ7V+OJ7JD5n44S5KLPKwIogohDlPmrxDTAJ/YAukApUItd30kr0Uq34Q
-gFktAsqgCP7C5KEM1TTxU25Tcs4ojUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKX
-VVWTySkQ0g9SDaITSgP/a0FyXMQUYJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVW
-MhqlhsfOLaj1WZ+oe0DxKw0O3YKTH/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7Q
-vbN2s72Kn2PZjtYqO3Uzqw14bqAJRl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gz/
-BAED36GMDF6APjbzsvUK+yk64h67FO9lD4i0FiXAE3DtfiBKzYh3jEV1uv0mIzpE
-U0FfZmFjdG9yOgAAr3nDQWlricc0AeWTgJNI54Z91WZHkBP9JiM6RFNBX2ZhY3Rv
-cjoAAK9OjHQxUQz8Wnpik8iZguVXD27lXLi9/SYjOkRTQV9mYWN0b3I6AACvX6xO
-WYl810CKCu/QJGFZWsNhMV3iibQnWFJheSBUZXN0IChkZW1vIGtleSkgPHhyYXlA
-ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtNwDCwoDAxUDAgMWAgECF4AACgkQiXmm
-xVZ/s0q3TwCgnrUiygc8NmP/EDsgHOweLy5+oMUAoJCz7S9Q/1f2X7xXU9Xs2xka
-KazvnQGlBDbjtQUQBADG4aUG+qgOTGEgOAVnN0ck76AnKb3jOBIYeQGYEgF/lDYb
-Y7fOQ3tIgQ0jXrKD1zHLvORNsG708yDNR79S5Ci/1nphcrNOPWMujOsZ2WMo5xbl
-hG+WJujt4pcNSRK9P5fonUE4hV7GXTljg1yZ/ui00Ot7b1B8ryAYE79t1B3svwAE
-CwP9Hg2r8lBq/j/t3kRO4xl108DFXiQKdj7sXugmAcMomF4nG3j2s219dLEFlSwn
-0/peGvjp8JFPfcMPU/xHJSaZLf90mXsf+pHcDWujHgVA9YC6ThYaGx9Je+VmcVYo
-mELxNnMWKyOJePDU4ViIXhMCvGP0Pt39wcQoiLjeu15+l/7/BAED36GMDF6APjbz
-svUK+yk64h3k1cEq5Vaa4ZpvzNmxRxEEMST+XLJ7leRFzngFM7CJLENe3+ZTqaS7
-d9/a0p9ocVwP2NHOBTLSUiKi8PacU3qtr5A79M2AtUrlnwJca4opneBLJgNGJLyR
-Gsv6WEWrPZ1PhR7v6SkUfj8jQ/Tzb1lj6DpOApZFH9fHv5btLU+JITTR+ohGBBgR
-AgAGBQI247UFAAoJEIl5psVWf7NK7JAAnRosvXTK0JTDng87kaiXLAT3t2H8AJ95
-wwtp1x0eP4rcO45yUsgGIoWoU5UBzgQ247VREQQA3VAGc4T+vuvVXcka4ETaLaLl
-L1xOiPIdJMWRWWQ60CZqWXDVpFBw6oG2AyfUZiHhLlmTZssz8UhXLw/URsPSpiGb
-tpGWKiLs4OCqjslN0lHzcnGqxGWCZJixMgZa5DcWZJjwqdXEbDChgm4ULP/7+iKv
-IenTQNhFoCXr9MtdoHMAoLpNCmSKlTu1H5GlWmYTK9AndWrfA/47ip0VYgzIvUhI
-0iWcG95sNfshApzPL6zPgKBqACogs/5/DfRn9g07BcuMihLJD0PLNPVnOXqQRaN4
-Da7jLuJA53XtLgpogxG08M6XUimTucfcovu29/bgjZIKA5c8KJ2lzXSJ9jZxSoy+
-O051f7yhXbUmYC1vdNr8GBk69QKy/wQAiHMfU3cbCfTTMmig+zBHCkHjqzqr/zKt
-R8RT5AwSOIU2aUIiHdV08apCelBw8PbEf077TuWCq2YyDZJmgWRYh5cdaMgdAd7u
-l1FS1yHPZYshcofWjgXUJHR4I8iPCs5OmdHo2HK3uU2OM36ZQGSpFA5WN1NEm9Gt
-MSBoYKN2ERD/BAEDE+RZ21hlj9nFUQKkDf2E3ET88XB3l0M1bCxCv2UAfGp+pESW
-bFZsBv0mIzpEU0FfZmFjdG9yOgAAr1wtpFPolwbaQUa/5Qmzo2/e2AAZMSX9JiM6
-RFNBX2ZhY3RvcjoAAK9Sfv2nvtEYMQvNNDd0DvnBNBoxlAS5/SYjOkRTQV9mYWN0
-b3I6AACvZ5hJ+Tl0FtvDC+JX0swooQzPDGNCObQrWWFua2VlIFRlc3QgKGRlbW8g
-a2V5KSA8eWFua2VlQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247VSAwsKAwMVAwID
-FgIBAheAAAoJEJ7vNM1LEbJfV7EAoJAAKzgeRH40g+m1xX5ZfP6QnCcoAKCbTZMS
-o0H79g6Zn2wZbdEVGwmj+p0BpQQ247VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJD
-flL0+iBe//3SADv01qUmw3jWMAuxG+CcCApksl122V9npEHiLC4Q2A69roLRsbxK
-BPebustfadLJoVYqPsvjnrBlafe5GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z
-/mN7KhHANzoRAbsAAwYEAJO5fkCSdNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j9
-4Hpz5wGWEXF7z+FbDq+4V0UqGkKxaERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZp
-KmehXtldpWGCNDZrE0RasrFCKENVhFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZ
-/wQBAxPkWdtYZY/ZxVECpA39hNxHnMEofjVNfhE0JAv3KTJRZHOCbzCkO+DxKgcS
-IsZVSJizzudmVLYbQWMKc0ykAvbJot4k6PgNiWwUyY8HxQs0F+5YYtQkMs8VdIQN
-ez+5E2RCoB+VflUVq4qhWUxXB737maUEsSc220yeEj04n59OlPILb+A/XvwoCE/F
-+kCQdlS7BA2IRgQYEQIABgUCNuO1ZwAKCRCe7zTNSxGyX/RcAJ9X3N2PPlX0KeNx
-UHefqmpPYDF6GgCfZmyC/OlrmmSulJ6NAHxiQNT4D/aVAc4ENuO1yxEEAIEMk4Zf
-0L/HEJVk0/o4fPpwvm8zc+KZQCFX70cBVU9BWJOcUquRg9JDJF9bOM5TxE7VOnkI
-fPvjug5vqP0/vjIfW7LvzIWDhS6FcFaKeG4IoqrgghbAmQIoEWvVTx+7xrpjo1yO
-qIMDQqYZEmsw+Zd6deQmkUYcbvytS82L0gx/AKC6DM0guH/ddkJlT4FQ9h5cv6dQ
-AQQAgNdmGPW8VceCL2WaKMoOMmhwQGhqY3+1pDLo7HVFEPoe18A9jlMRHWfvGb2E
-zMT46/Ugqkf8TzvZGFrWq7W/t45rp5O41YXQ2+ZJH3nl+t5Gw25Hwk0hvpK0jYRH
-2nMFR+PKQL2mDbA94LvClAkgX1MX4lrUG8bYj6FrbEnvzoAD+wcRS8A6xznxhs+V
-sg/KnYl0Qe9dNFPY0hJVG5MxCyDy9X32cxhHYJSHbvS4/LLbFloP+Rhwn3/WeBjs
-L2lts1ahXvQ+QQw7+qPrs4hWJZU/NSEh1RGitukaG5zegHNTE6CJqXshshI9Ei0O
-CDahmhjiGrJA3HwKPZlkDMOkza8K/wQBA3GTFCmP28PloZW7fHe9ipQH0TkH+yp2
-IXXRWNHjhcbOrwkv7+jedHX9JiM6RFNBX2ZhY3RvcjoAAK9nd2gdDGXr+aS4H9RN
-o21VL8OsKJBj/SYjOkRTQV9mYWN0b3I6AACvXT7TUKyg8va6X0RToEWg4+feDJFE
-n/0mIzpEU0FfZmFjdG9yOgAAr0s/BxXRDWjjCqZNI5VKmGD3EQ2CCWO0J1p1bHUg
-VGVzdCAoZGVtbyBrZXkpIDx6dWx1QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247XL
-AwsKAwMVAwIDFgIBAheAAAoJEGvEd4BUrNJGQOsAnjgUjTj9/yeCyzBgwu2Fs1Z2
-HB9aAKCYdUx3OscN3QmqVVre3pwZY5GmSJ0BpQQ247XyEAQAzHzwwUKDM7+djJo2
-/EnWmCijc6g3fStaGNoXDEovi3B2oPiiRTsigX90qB5nFP7whDfi8k4JY2Eig5hH
-+MGdvni36hYEnQSadsZueYofvQh14N3V8fUmx4hiQiMXyWiLJzc91ZiRjww4wZWn
-/4Y5f+0mb0fjCaVSxTxo4+7joU8AAwUD/0oL9Gm3gl1XVV8BhJoXVdFQ6PN9yEEX
-UbtcrfkC51kTBk2NaEGqbB+kC8GEmXwyZcW7AQN7X6ikraUUm3RjTU7CvkSHobBn
-XYt7FhqZURpuV7eSqZGP5nP7SxWmCTTKgIH1kHCpWRwaexKFjIIkYgyVFqtEx9cE
-Q6D2kXPh+Rna/wQBA3GTFCmP28PloZW7fHe9ipQEjson+R8J0cZFxO8B2k6Fas1C
-pLvP8P0NdTIyitaiBUatIGDI8N22I6mqelpWZpTKZZymrDKe0n8h+rTNqb0uIt8F
-R+6/1qFnL1k3E/+QxqS7VGkRz6xnT+la7OVrexXz18ynbpvzJMPe2SAPyqY+RSzW
-wf5Z/bgM+A/ftNFfEencn7KIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAJsF
-3zuwZ09o7T0yZNm4zWcRGZvteACgroLrVdUuNxbdEllH4BbcvFB06zA=
-=P9+G
------END PGP PRIVATE KEY BLOCK-----
diff --git a/checks/secring.asc b/checks/secring.asc
deleted file mode 100644
index 09e059d6f..000000000
--- a/checks/secring.asc
+++ /dev/null
@@ -1,57 +0,0 @@
-This is a test secret keyring simply stored by GNUPG so that
-it is easier to make diff files.
-
-sec 768G/9D266E0F 1998-04-28 Test one (pp=def) <one@test.nowhere.nil>
-sec 800G/2E5FA4F4 1998-04-28 test two (no pp) <two@test.nowhere.nil>
-sec 768G/6D11D6D3 1998-04-28 test three (pp=abc) <three@test.nowhere.nil>
-
------BEGIN PGP ARMORED FILE-----
-Version: GNUPG v0.2.19b (GNU/Linux)
-Comment: This is an alpha version!
-Comment: Use "gpgm --dearmor" for unpacking
-
-lQFHAzVFgbgERxADAPG0kMNVRUl24GfpzV4TPcXgw/jqSkFOIVGgin7k7UR6GOUMUz89wxVk
-ZRXsLAOdDrtvI5T1sSCmWmhsTKmw7aslLJugBM/70YuVSolR39vF1JDK8kEkx748CRVW+/ul
-mwADBQMA12YmsDbYGLI8FXnb/8V3YU7K39E5//Bwo90vTfzAE9Mwp1y9H5WHqoai/6JLgXK8
-DAOGpgCFhlVu8LO5O0IK3yaFhtkhC8SE/TKLzC76uSoeeSex+mJ+rqBcyDl9AONx/wQBA1ax
-FAGSVKH6no4iMVtLeiYDACtVsQ4oTGIR7wAakh4QkO5j81Vg0+v3AGMNvTMlTmwtlGtmKv2M
-01WryUpzA9dKe8RBhe4Uofa7OVOAaN8RujSNXMM2XWCoH+Om8oGSzmMvT2MTOa4rrk6+Noer
-tShKnDDI/SojOkVMR19mYWN0b3I6AADKAiaJiV+4kJIpYCgbjafKyy11LI3mgHQV8Hf9KiM6
-RUxHX2ZhY3RvcjoAAMoDjg2kuv69NwxJNr89un9g6yT/mlXDM36tFf0qIzpFTEdfZmFjdG9y
-OgAAygPBg2CM/6uXiIHWF2kf/4p3sDJXQ3jZm8bH/SIjY3JlYXRlZCBieSBHTlVQRyB2MC4y
-LjE1YSAoTGludXgptChUZXN0IG9uZSAocHA9ZGVmKSA8b25lQHRlc3Qubm93aGVyZS5uaWw+
-iNcDBRM1RYG4PGu75p0mbg8QAw/+AwDfK2nbX4uztjrEzVY0KkyEj/QCeDozbAVjeb9WbVg+
-MfL47ag5OcEt6kjJNv+u0QCANaNQ/3T5rHOaJdZzHUaelVUTRVbLI22FnpEZ8baud+EGglUw
-av9P+DB6MHBKqYsC/2Xih+3YOHjVDcAPaZPWUVuBISe3qP+NMNOSJsxZB31oHyWmSEzTvTwI
-yBLlV1N8NG4GzmIrzs27Hfo9nbW+vd/ktfVfelUVIhpvVJQcO2qhtV2LEhI/tiOpvIJLEccj
-jZUBQAM1RYIBAAAQAyDcjtZXiCsb6HnuqItM5CPUgienUkxB+/5BE6nrTQK46gpXpztStAFX
-fjKjGo5fe24OYlGBmpueTxApJKMzpbHA8wxfXsVmOrHsuOHQUREIYFy1VhOBmdRt7MvOWg/r
-FR4McJc/AAMFAyCwFfMOhS+z6YInnQDh7JTLan+7IdSHjUpAo0XarzAioCq6Ei0LaPVqa1zF
-L9yh5ky+06WTWnfvMSVCu0eRh1E0dTiBUDCb06HRvEVOiTmhqHk6loLOtb9NHxYMGOrGDtdX
-JJrHAAMfaR/MS44PJRtwrFDIBTOJWqjdX1Mu3wzB3443rS+hv9onUUjeLNbXFzXAxxHTLm4Z
-0JQ1Um2Yi4XGTYZkFNRPq5jE+Imoj/trN+T2rri1f+m/Y5ugSH/Zx7hurhc/3yJ//oCGYTNb
-/SsjOkVMR19mYWN0b3I6AADVEOrdw68kJz/XyG9/nJZ40oqzBklaf+BeatFD/SsjOkVMR19m
-YWN0b3I6AADVF7ggxjMhZ+iMjbJxRSS5vmro7mbuP+5W5gLR/SsjOkVMR19mYWN0b3I6AADV
-F5fMXChN1OIqFi7DHiaDKWyRJcNk6EaDu0BF/SIjY3JlYXRlZCBieSBHTlVQRyB2MC4yLjE1
-YSAoTGludXgptCd0ZXN0IHR3byAobm8gcHApIDx0d29AdGVzdC5ub3doZXJlLm5pbD6I3wMF
-EzVFggEO+eDoLl+k9BADkLEDHR+OG+ItBNWQE75V5vFHruJ0blRPEPaJL0GnVW/Lgi8jcUaM
-7RwJyZ2XeMiCeJHU1kgHTa/E5VSUZJM5q/w1c1vcy76Izxqgnx19TEFEcGxzbzHLyT3APQVg
-eRtXsy3Mr5kfdCsDH36a6npXeeHPPkpteGg7IkOoeHKWqQdI7O84akhPyCg79VZYcuhxszM3
-BHjafWliyB7IcgfCdmmcmG39SkmAIvRAW2DAIxmGHzd7jA+NOro9O+s1to31hEyyWvq6x+wr
-tGRBuqSVAUcDNUWCZQAAEAMAlmULKDSSSPLtZ1fuVWWl2amQZ/rpN36f5su5fWC0HleUvVO+
-joHcNJWv2Ill9pvAMPoTuO6WLMLMkYtpbvxRP3a9KNAgedyweBJxST4gR6wfK5t8CNeNgUHi
-fQ4+WFPzAAMGAv9YAdDaBZdkIW2GPN7bi4P1JSJDPAmbcbV0fb30KtFIK1bg6Hi8dP5pZ1pv
-KZibB0ftK/LC9so5ez9EUPhSbYmjE1R4oScoV7pAjtWzzNz1/C/0LJlxc1nH5mr5NdcaTzX/
-BAEDG+unPjMgny2Egnnpj+C75wL9WMnkY/0W6WbEnAa5AQisByWpoBmEox4n3ujQqonm6UXY
-/gjQXe4Xc7ZwNOvDMo7FpSb22HAbXM0RX7WYSYiH3bFTS8ZbodTx9xhDK0rMPE/Ci7wbYMWZ
-YyTuRz49WOO1MMb9KiM6RUxHX2ZhY3RvcjoAAMoCbaGz3MaDbSFTmKdOGCSNFFsowjco3mWH
-U/0qIzpFTEdfZmFjdG9yOgAAygLi9An6HulYgRcvIO1/Rn1ZAcrG447MbdxD/SojOkVMR19m
-YWN0b3I6AADKAo2787sJdMSkDQ6ENCcVlu+yXsVSWa++zWH9IiNjcmVhdGVkIGJ5IEdOVVBH
-IHYwLjIuMTVhIChMaW51eCm0LHRlc3QgdGhyZWUgKHBwPWFiYykgPHRocmVlQHRlc3Qubm93
-aGVyZS5uaWw+iNcDBRM1RYJlZE80um0R1tMQA1bRAv9mehnmJtPFKcQ+S9AzBHDNF77nk58l
-37bQ05uA5H6L5+HzBolCFFR5ehfXYkzwYb6g6PsrP7N+Nrbtw5xDZq38hZK1G0f5/InOIfxQ
-dYdmlrSD+53gOH91KGeqpSrd7l0C/2ZhobXCxF03goKfNENvjej4HAGnzN0q0mpfu7L2wsCG
-4/kXKv8W6Z2JtYpnszyw6xJCh0dyup2RSYKbfZMrb1BfjwlrZE03Ah4QRmat5byprwl9oosJ
-tW5GlGnLFCLsPQ==
-=VGBx
------END PGP ARMORED FILE-----
diff --git a/checks/secring.skr.asc b/checks/secring.skr.asc
deleted file mode 100644
index 0081b59c1..000000000
--- a/checks/secring.skr.asc
+++ /dev/null
@@ -1,27 +0,0 @@
-This is a test secring generated by pgp 5 beta
-
-Type Bits KeyID Created Expires Algorithm Use
-sec+ 768 439F02CA 1998-03-17 ---------- DSS Sign and Encrypt
-sub 768 CB879DE9 1998-03-17 ---------- Diffie-Hellman
-uid pgp5 test <pgp5@dev.null>
-
-There is no password on the key
-
------BEGIN PGP ARMORED FILE-----
-Version: GNUPG v0.2.13a (Linux)
-Comment: This is an alpha version!
-Comment: Use "gpgm --dearmor" for unpacking
-
-lQFbBDUOrE4RAwDbbxWAbWsheUJprK6VryMTpwDiYwMfL+92nrHqSfPqlpMWgDTia8qnpRSXbyEm
-Sppp/6/Ygp+N3n32Kznq7PjHXiuWLlZGvZMtzmvaMA17y0GY6oLBxS7rhASXIKa9hEUAoP+KBFly
-qNMdsK8j+ZO0A8rnImGrAwC1ddDme5iZFkTEWHhrtU97sEu2GDkSQB8HdX8CoRcrOz/B2WliF6qf
-BKhcZPFVBIhKNzjTfY7SEYAZk2zcsCm8elnwSLaGEzxKFNFBqKDNXP+a35spcqsHSGzDVw4VuKMD
-AJNnAP6skpHlhVAmecLZT9eRzVoOq1ivUIntK2Mh47qsL74q6BBwz2sviPU2Y3pDlbb6Ed0qJAXv
-dCT24hlfoGoXzkoDInkPJTJeL0gCnwmQPjvXFFd71Cvg5LaL4lIQLQAAn3GbgsWo+7E/hWakzstp
-TXzI2kDIDIm0GXBncDUgdGVzdCA8cGdwNUBkZXYubnVsbD6dAO8ENQ6sVhADAP8Fa5TbD6k8VmW1
-IjK1DfDI0xUdsVIbk8N3Hb0YIlT1E/6tZdfiNwqaKVQcf17gJIObBwfNM3OqWYOudmBVd3S6E3Hk
-u64nW+ZNt7B2toWRgnk6OgHcSDsud4Igjwz/RQACAgL/ToefzlcVKiPuobKfXHDhIUQPTfGic2Az
-47wkMoYHo9j9ZE7AWaliMdPz4jLyLfqqoU9mH8g+vJhyAc7UnAF2Sk5466FDypdPm5F9PTW3cqqI
-wJM4WgkSlM8J2hxH4YtlAADlG+pxFXNFuDPmcq6jL6dug2ikZ7hcHLAy7DddSS8OAA==
-=1UWo
------END PGP ARMORED FILE-----
diff --git a/checks/signdemokey b/checks/signdemokey
deleted file mode 100755
index e387446c2..000000000
--- a/checks/signdemokey
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-set -e
-
-if [ $# != 3 ]; then
- echo "Usage: signdemokey name user_id user_id_no"
- exit 1
-fi
-name="$1"
-user_id="$2"
-user_id_no="$3"
-
-echo "abc" | ../g10/gpg --options ./options --homedir $name \
- --sign-key --batch --yes --passphrase-fd 0 $user_id \
- $user_id_no sign save
-
diff --git a/checks/signencrypt-dsa.test b/checks/signencrypt-dsa.test
deleted file mode 100755
index 41bf83164..000000000
--- a/checks/signencrypt-dsa.test
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking signing and encryption for DSA
-for i in $plain_files $data_files ; do
- $GPG $dsa_keyrings --always-trust -se -o x --yes \
- -u "$dsa_usrname1" -r "$dsa_usrname2" $i
- $GPG $dsa_keyrings -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
-for da in ripemd160 sha1; do
- for i in $plain_files; do
- $GPG $dsa_keyrings --always-trust -se -o x --yes --digest-algo $da \
- -u "$dsa_usrname1" -r "$dsa_usrname2" $i
- $GPG $dsa_keyrings -o y --yes x
- cmp $i y || error "$i: mismatch"
- # process only the first one
- break
- done
-done
diff --git a/checks/signencrypt.test b/checks/signencrypt.test
deleted file mode 100755
index 1d05990fc..000000000
--- a/checks/signencrypt.test
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-
-#info Checking signing and encryption
-for i in $plain_files $data_files ; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 --always-trust \
- -se -o x --yes -r "$usrname2" $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
diff --git a/checks/sigs-dsa.test b/checks/sigs-dsa.test
deleted file mode 100755
index 2294cf55a..000000000
--- a/checks/sigs-dsa.test
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking DSA signatures (default digest algo)
-for i in $plain_files $data_files; do
- $GPG $dsa_keyrings -s -o x --yes -u $dsa_usrname1 $i
- $GPG $dsa_keyrings -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
-for da in ripemd160 sha1; do
- for i in $plain_files; do
- $GPG $dsa_keyrings --digest-algo $da \
- -s -o x --yes -u $dsa_usrname1 $i
- $GPG $dsa_keyrings -o y --yes x
- cmp $i y || error "$i: mismatch"
- # process only the first one
- break
- done
-done
-
diff --git a/checks/sigs.test b/checks/sigs.test
deleted file mode 100755
index 7a8f998c1..000000000
--- a/checks/sigs.test
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-#info Checking signatures
-for i in $plain_files $data_files; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 -s -o x --yes $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
-done
-
-hash_algo_list="ripemd160 sha1 md5"
-if have_hash_algo "TIGER192"; then
- hash_algo_list="$hash_algo_list tiger192"
-fi
-
-for da in $hash_algo_list ; do
- for i in $plain_files; do
- echo "$usrpass1" | $GPG --passphrase-fd 0 --digest-algo $da \
- -s -o x --yes $i
- $GPG -o y --yes x
- cmp $i y || error "$i: mismatch"
- # process only the first one
- break
- done
-done
diff --git a/checks/version.test b/checks/version.test
deleted file mode 100755
index f1fd7284f..000000000
--- a/checks/version.test
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-. $srcdir/defs.inc || exit 3
-
-# print the GPG version
-$GPG --version
-
-#fixme: check that the output is correct
-
diff --git a/cipher/ChangeLog b/cipher/ChangeLog
deleted file mode 100644
index b47340064..000000000
--- a/cipher/ChangeLog
+++ /dev/null
@@ -1,1027 +0,0 @@
-2002-10-12 Werner Koch <wk@gnupg.org>
-
- * rndunix.c (my_popen): Make sure that stdin and stderr are
- connected to a file. This is to avoid NetBSD to complain about
- set{u,g}id programs invoked with fd 0, 2 closed. Reported by
- Cristian Biere.
- (start_gatherer): Likewise. Reordered code.
-
-2002-10-02 David Shaw <dshaw@jabberwocky.com>
-
- * tiger.c (tiger_get_info): Select the OID to use for TIGER at
- compile time.
-
-2002-09-27 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am, md.c (load_digest_module): TIGER is now always
- enabled.
-
-2002-09-26 Werner Koch <wk@gnupg.org>
-
- * tiger.c (tiger_get_info): Use a regular OID. Note that this
- breaks all TIGER generated signatures; if we want to do something
- about it we have to do it in ../g10/sig-check.c .
-
-2002-09-17 Werner Koch <wk@gnupg.org>
-
- * rndw32.c (SIZEOF_DISK_PERFORMANCE_STRUCT): Increased to 256.
-
-2002-09-12 Stefan Bellon <sbellon@sbellon.de>
-
- * rand-internal.h (rndriscos_gather_random): Added prototype.
-
-2002-08-30 Werner Koch <wk@gnupg.org>
-
- * random.c: Automagically detect the entropy gatherer when
- this feature is configured.
- * rndegd.c (rndegd_connect_socket): New. Factored out from ..
- (rndegd_gather_random): here and call it.
- (do_read): Update the counter variables correctly. This was not a
- problem due to the way EGD works. Bug found by Christian Biere.
-
-2002-08-20 Werner Koch <wk@gnupg.org>
-
- * primegen.c (generate_elg_prime): Return all factors for mode 1.
- Bug reported by Bob Mathews.
-
-2002-08-12 Werner Koch <wk@gnupg.org>
-
- * cipher.c: Include the DUMMY cipher only when the new ALLOW_DUMMY
- is defined. It should only be defined for hard core debugging.
-
-2002-08-08 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am, md.c (load_digest_module): Allow switching TIGER on
- and off via configure.
-
-2002-08-07 David Shaw <dshaw@jabberwocky.com>
-
- * md.c (md_algo_present): New function to check if a given algo is
- in use for a given MD_HANDLE.
-
-2002-08-04 Werner Koch <wk@gnupg.org>
-
- * blowfish.h, cast5.h, des.h: Removed after moving all prototypes to
- * algorithms.h: here. Changed all sources to use this one.
-
-2002-08-03 Stefan Bellon <sbellon@sbellon.de>
-
- * idea-stub.c (idea_get_info): RISC OS' Norcroft C needs a cast.
- * random.c (getfnc_gather_random): Added RISC OS support.
- * rndriscos.c: Removed dynload code and tidied up a bit.
-
-2002-08-03 Werner Koch <wk@gnupg.org>
-
- * rndegd.c (do_read): Handle case when read returns 0 to avoid
- gpg hanging when EGD died. By Christian Biere.
-
-2002-08-02 Werner Koch <wk@gnupg.org>
-
- The big extension removal.
-
- * Makefile.am: Removed all extension stuff.
- * dynload.c: Removed everything except for
- register_cipher_extension.
- (dynload_enum_module_names): New.
- * dynload.h: Removed.
- * random.c (getfnc_gather_random,getfnc_fast_random_poll):
- New. Replaced all dynload functions with these ones.
- * rndunix.c (rndunix_gather_random): Renamed from
- gather_random. Made global. Removed all dynload stuff.
- * rndlinux.c (rndlinux_gather_random): Likewise.
- * rndegd.c (rndegd_gather_random): Likewise.
- * rndw32.c (rndw32_gather_random)
- (rndw32_gather_random_fast): Likewise. Also removed the unsued
- entropy dll code.
- * md.c (new_list_item): Changed return value to indicate whether
- an algorithms was loaded.
- (load_digest_module): Simplified by removing all the dynload code.
- * algorithms.h: New.
- * md5.c (md5_get_info): Made global. Removed all dynload stuff.
- * rmd160.c (rmd160_get_info): Likewise.
- * sha1.c (sha1_get_info): Likewise.
- * tiger.c (tiger_get_info): Likewise. Return NULL if we can't use
- this module.
- * idea-stub.c: New.
- * blowfish.h (idea_get_info): Add prototype.
- * cipher.c (setup_cipher_table): Try to load IDEA.
- (load_cipher_modules): Removed all dynload code.
- * pubkey.c (load_pubkey_modules): Removed the dynloading code.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * random.c: "warning" -> "WARNING"
-
-2002-07-02 Werner Koch <wk@gnupg.org>
-
- * rndw32.c (slow_gatherer_windowsNT): Use a simple array for the
- disk performance structure and increase it to the size required by
- W2000.
-
-2002-06-29 Werner Koch <wk@gnupg.org>
-
- * rndlinux.c: Removed HAVE_LINUX_RANDOM_H conditional because it
- was never used and the configure test did set the wrong macro
- anyway.
-
-2002-05-07 Stefan Bellon <sbellon@sbellon.de>
-
- * md.c (md_start_debug): Use EXTSEP_S instead of ".".
-
-2002-04-24 Werner Koch <wk@gnupg.org>
-
- * tiger.c (tiger_final): Removed superfluous token pasting operators.
- * md5.c (md5_final): Ditto.
-
-2002-04-22 Stefan Bellon <sbellon@sbellon.de>
-
- * rndriscos.c (func_table): Made func a function pointer.
- (init_device): Improved loading of CryptRandom module.
-
-2002-04-18 Werner Koch <wk@gnupg.org>
-
- * rndlinux.c, rndegd.c, rndunix.c (func_table): Made func a
- function pointer. Note that we still need to change the module
- interface to cope with data vs function pointer problems. Hmmm,
- even dlsym has a problem with this.
-
-2002-04-10 David Shaw <dshaw@jabberwocky.com>
-
- * cipher.c (setup_cipher_table, cipher_open, cipher_encrypt,
- cipher_decrypt, dummy_setkey, dummy_encrypt_block,
- dummy_decrypt_block): the dummy cipher should only be built on
- development versions.
-
-2002-04-06 Werner Koch <wk@gnupg.org>
-
- * rijndael.c (rijndael_get_info): We do only support a 128 bit
- blocksize so it makes sense to change the algorithm strings to
- AES.
- * cipher.c (string_to_cipher_algo): Map "RIJNDAEL" to "AES".
-
-2002-02-14 Werner Koch <wk@gnupg.org>
-
- * random.c (mix_pool): Removed the failsafe stuff again. It makes
- the code more complicate and may give the path to more bugs.
-
-2002-02-10 Werner Koch <wk@gnupg.org>
-
- * random.c (mix_pool): Carry an extra failsafe_digest buffer
- around to make the function more robust.
-
-2002-02-08 Werner Koch <wk@gnupg.org>
-
- * random.c (add_randomness): Xor new data into the pool and not
- just copy it. This avoids any choosen input attacks which are not
- serious in our setting because an outsider won't be able to mix
- data in and even then we keep going with a PRNG. Thanks to Stefan
- Keller for pointing this out.
-
-2002-01-02 Stefan Bellon <sbellon@sbellon.de>
-
- * rndriscos.c [__riscos__]: Updated include file name.
-
-2001-12-21 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (DISCLEANFILES): Add construct.c
-
-2001-12-19 Werner Koch <wk@gnupg.org>
-
- * rndw32.c [CYGWIN32]: Include winioctl.h. By Disastry.
-
-2001-11-08 Werner Koch <wk@gnupg.org>
-
- * primegen.c (gen_prime): Set 2 high order bits for secret primes.
- * rsa.c (generate): Loop until we find the exact modulus size.
- Changed the exponent to 41.
-
-2001-10-22 Werner Koch <wk@gnupg.org>
-
- * Makefile.am: Need to use $(EXEEXT) where approriate.
-
-2001-09-09 Werner Koch <wk@gnupg.org>
-
- * rsa.c (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings.
-
-2001-08-24 Werner Koch <wk@gnupg.org>
-
- * md.c (md_write): Made buf arg const.
-
-2001-08-22 Werner Koch <wk@gnupg.org>
-
- * random.c (fast_random_poll): Don't use gethrtime if it is broken.
-
-2001-08-20 Werner Koch <wk@gnupg.org>
-
- Applied patches from Stefan Bellon <sbellon@sbellon.de> to support
- RISC OS. Nearly all of these patches are identified by the
- __riscos__ macro.
- * blowfish.c, twofish.c: Added pragmas for use with a Norcraft
- compiler.
- * dynload.c, md5.c, rmd160.c, sha1.c: Minor patches for RISC OS.
- * rndriscos.c: New.
- * rnd-internal.h: Added prototype.
- * random.c (fast_random_poll): Use '#if defined' instead of just
- 'defined'; needed for RISC OS.
- * primegen.c (gen_prime): count? are now ints for consistence
- with is_prime().
-
-2001-08-08 Werner Koch <wk@gnupg.org>
-
- * rndw32.c (gather_random): Use toolhelp in addition to the NT
- gatherer for Windows2000. Suggested by Sami Tolvanen.
-
- * random.c (read_pool): Fixed length check, this used to be one
- byte to strict. Made an assert out of it because the caller has
- already made sure that only poolsize bytes are requested.
- Reported by Marcus Brinkmann.
-
-2001-07-18 Werner Koch <wk@gnupg.org>
-
- * rndlinux.c (gather_random): casted a size_t arg to int so that
- the format string is correct. Casting is okay here and avoids
- translation changes.
-
-2001-06-12 Werner Koch <wk@gnupg.org>
-
- * cipher.c (string_to_cipher_algo): Use ascii_strcasecmp().
- * md.c (string_to_digest_algo): Ditto.
- * pubkey.c (string_to_pubkey_algo): Ditto.
- * rndw32.c (slow_gatherer_windowsNT): Ditto. Not really needed
- here but anyway.
-
-2001-04-29 Werner Koch <wk@gnupg.org>
-
- * random.c (fast_random_poll): Do not check the return code of
- getrusage.
-
-2001-04-17 Werner Koch <wk@gnupg.org>
-
- * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7
- and 8.
-
-2001-04-16 Werner Koch <wk@gnupg.org>
-
- * dynload.c [__MINGW32__]: Applied patch from Timo Schulz to make
- it work under W32. This patches is based on the one from
- Disastry@saiknes.lv
-
-2001-04-06 Werner Koch <wk@gnupg.org>
-
- * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c (burn_stack):
- New. Add wrappers for most functions to be able to call
- burn_stack after the function invocation. This methods seems to be
- the most portable way to zeroise the stack used. It does only work
- on stack frame based machines but it is highly portable and has no
- side effects. Just setting the automatic variables at the end of
- a function to zero does not work well because the compiler will
- optimize them away - marking them as volatile would be bad for
- performance.
- * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise.
- * random.c (burn_stack): New.
- (mix_pool): Use it here to burn the stack of the mixblock function.
-
-2001-04-02 Werner Koch <wk@gnupg.org>
-
- * primegen.c (generate_elg_prime): I was not initialized for mode
- != 1. Freed q at 3 places. Thanks to Tommi Komulainen.
-
-2001-03-28 Werner Koch <wk@gnupg.org>
-
- * md5.c (md5_final): Fixed calculation of hashed length. Thanks
- to disastry@saiknes.lv for pointing out that it was horrible wrong
- for more than 512MB of input.
- * sha1.c (sha1_final): Ditto.
- * rmd160.c (rmd160_final): Ditto.
- * tiger.c (tiger_final): Ditto.
-
-2001-03-19 Werner Koch <wk@gnupg.org>
-
- * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to
- avoid name clahses with an encrypt function in stdlib.h of
- Dynix/PIX. Thanks to Gene Carter.
- * elgamal.c (encrypt,do_encrypt): Ditto.
-
-2001-03-12 Werner Koch <wk@gnupg.org>
-
- * twofish.c (gnupgext_enum_func): Add some static when comnpiled
- as a module.
-
- * tiger.c (tiger_get_info): Return "TIGER192" and not just
- "TIGER". By Edwin Woudt.
-
-2001-03-08 Werner Koch <wk@gnupg.org>
-
- * random.c: Always include time.h - standard requirement. Thanks
- to James Troup.
-
-2001-01-18 Werner Koch <wk@gnupg.org>
-
- * rndw32.c: Fixed typo and wrong ifdef for VER_PLATFORM* macro
-
-2001-01-12 Werner Koch <wk@gnupg.org>
-
- * cipher.c (cipher_encrypt,cipher_encrypt): Use blocksize and
- not 8 for CBC mode (However: we don't use CBS in OpenPGP).
-
-2000-11-22 Werner Koch <wk@gnupg.org>
-
- * rndegd.c (gather_random): Fixed default socket to be '=entropy'.
- Thanks to Tomasz Kozlowski.
-
-2000-10-12 Werner Koch <wk@gnupg.org>
-
- * rijndael.c: New.
- * cipher.c: Add Rijndael support.
-
-Wed Oct 4 15:50:18 CEST 2000 Werner Koch <wk@openit.de>
-
- * sha1.c (transform): Use rol() macro. Actually this is not needed
- for a newer gcc but there are still aoter compilers.
-
-Thu Sep 14 14:20:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * random.c (fast_random_poll): Check ENOSYS for getrusage.
- * rndunix.c: Add 2 sources for QNX. By Sam Roberts.
-
-Wed Sep 13 18:12:34 CEST 2000 Werner Koch <wk@openit.de>
-
- * rsa.c (secret): Speed up by using the CRT. For a 2k keys this
- is about 3 times faster.
- (stronger_key_check): New but unused code to check the secret key.
-
-Wed Sep 6 17:55:47 CEST 2000 Werner Koch <wk@openit.de>
-
- * rsa.c: Changed the comment about the patent.
- * Makefile.am: Included rsa.[ch].
- * pubkey.c: Enabled RSA support.
- (pubkey_get_npkey): Removed RSA workaround.
-
-Fri Aug 25 16:05:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * rndlinux.c (open_device): Loose random device checking.
- By Nils Ellmenreich.
-
- * rndegd.c (gather_random): Name of socket is nom configurable.
-
-Wed Jun 28 11:54:44 CEST 2000 Werner Koch <wk@>
-
- * rsa.c, rsa.h: New based on the old module version (only in CVS for now).
- * pubkey.c (setup_pubkey_table): Added commented support for RSA.
-
-Fri Jun 9 10:09:52 CEST 2000 Werner Koch <wk@openit.de>
-
- * rndunix.c (waitpid): New. For UTS 2.1. All by Dave Dykstra.
- (my_popen): Do the FD_CLOEXEC only if it is available
- (start_gatherer): Cope with missing _SC_OPEN_MAX
-
-Sun May 28 13:55:17 CEST 2000 Werner Koch <wk@openit.de>
-
- * random.c (read_seed_file): Binary open for DOSish system
- (update_random_seed_file): Ditto.
-
- * rndw32.c: Add some debuging code enabled by an environment variable.
-
-Tue May 23 09:19:00 CEST 2000 Werner Koch <wk@openit.de>
-
- * rndw32.c: Started with alternative code to replace entropy.dll
-
-Thu May 18 11:38:54 CEST 2000 Werner Koch <wk@openit.de>
-
- * primegen.c (register_primegen_progress): New.
- * dsa.c (register_pk_dsa_progress): New.
- * elgamal.c (register_pk_elg_progress): New.
-
-Fri Apr 14 19:37:08 CEST 2000 Werner Koch <wk@openit.de>
-
- * twofish.c (twofish_get_info): Fixed warning about cast.
-
-Tue Mar 28 14:26:58 CEST 2000 Werner Koch <wk@openit.de>
-
- * random.c [MINGW32]: Include process.h for getpid.
-
-Thu Mar 2 15:37:46 CET 2000 Werner Koch <wk@gnupg.de>
-
- * random.c (fast_random_poll): Add clock_gettime() as fallback for
- system which support this POSIX.4 fucntion. By Sam Roberts.
-
- * rndunix.c: Add some more headers for QNX. By Sam Roberts.
-
- * random.c (read_seed_file): Removed the S_ISLNK test becuase it
- is already covered by !S_ISREG and is not defined in Unixware.
- Reported by Dave Dykstra.
-
- * sha1.c (sha1_get_info): Removed those stupid double lines. Dave
- is really a good lint.
-
-Wed Feb 23 10:07:57 CET 2000 Werner Koch <wk@gnupg.de>
-
- * twofish.c (twofish_get_info): Add some const to the casts. By Martin
- Kahlert.
-
-Mon Feb 14 14:30:20 CET 2000 Werner Koch <wk@gnupg.de>
-
- (update_random_seed_file): Silently ignore update request when pool
- is not filled.
-
-Fri Feb 11 17:44:40 CET 2000 Werner Koch <wk@gnupg.de>
-
- * random.c (read_seed_file): New.
- (set_random_seed_file): New.
- (read_pool): Try to read the seeding file.
- (update_random_seed_file): New.
-
- (read_pool): Do an initial extra seeding when level 2 quality random
- is requested the first time. This requestes at least POOLSIZE/2 bytes
- of entropy. Compined with the seeding file this should make normal
- random bytes cheaper and increase the quality of the random bytes
- used for key generation.
-
- * rndegd.c (gather_random): Shortcut level 0.
- * rndunix.c (gather_random): Ditto.
- * rndw32.c (gather_random): Ditto.
-
-Fri Jan 14 18:32:01 CET 2000 Werner Koch <wk@gnupg.de>
-
- * rmd160.c (rmd160_get_info): Moved casting to the left side due to a
- problem with UTS4.3. Suggested by Dave Dykstra.
- * sha1.c (sha1_get_info): Ditto.
- * tiger.c (tiger_get_info): Ditto.
- * md5.c (md5_get_info): Ditto
- * des.c (des_get_info): Ditto.
- * blowfish.c (blowfish_get_info): Ditto.
- * cast5.c (cast5_get_info): Ditto.
- * twofish.c (twofish_get_info): Ditto.
-
-Thu Jan 13 19:31:58 CET 2000 Werner Koch <wk@gnupg.de>
-
- * elgamal.c (wiener_map): New.
- (gen_k): Use a much smaller k.
- (generate): Calculate the qbits using the wiener map and
- choose an x at a size comparable to the one choosen in gen_k
-
- * random.c (read_pool): Print a more friendly error message in
- cases when too much random is requested in one call.
-
- * Makefile.am (tiger): Replaced -O1 by -O. Suggested by Alec Habig.
-
-Sat Dec 4 12:30:28 CET 1999 Werner Koch <wk@gnupg.de>
-
- * primegen.c (generate_elg_prime): All primes are now generated with
- the lowest random quality level. Becuase they are public anyway we
- don't need stronger random and by this we do not drain the systems
- entropy so much.
-
-Thu Oct 28 16:08:20 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined;
- this is not the case for some ESIX and Unixware, although they have
- getrusage().
-
- * elgamal.c (sign): Hugh found strange code here. Replaced by BUG().
-
-Mon Oct 11 09:24:12 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * rndw32.c (gather_random): Handle PCP_SEEDER_TOO_SMALL.
-
-Sat Oct 9 20:34:41 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * Makefile.am: Tweaked module build and removed libtool
-
-Fri Oct 8 20:32:01 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * rndw32.c (load_and_init_winseed): Use the Registry to locate the DLL
-
-Mon Oct 4 21:23:04 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for
- fixing this bug.
-
-Sat Sep 18 12:51:51 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Never compile mingw32 as module
-
-Wed Sep 15 14:39:59 CEST 1999 Michael Roth <mroth@nessie.de>
-
- * des.c: Various speed improvements: One bit pre rotation
- trick after initial permutation (Richard Outerbridge).
- Finished test of SSLeay Tripple-DES patterns.
-
-Wed Sep 15 16:22:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndw32.c: New.
-
-Mon Sep 13 10:51:29 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * bithelp.h: New.
- * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h
-
-Tue Sep 7 16:23:36 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert.
-
-Mon Sep 6 19:59:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * des.c (selftest): Add some testpattern
-
-Mon Aug 30 20:38:33 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using
- in place encryption. Pointed out by Frank Stajano.
-
-Mon Jul 26 09:34:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * md5.c (md5_final): Fix for a SCO cpp bug.
-
-Thu Jul 15 10:15:35 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * elgamal.c (elg_check_secret_key,elg_encrypt
- elg_decrypt,elg_sign,elg_verify): Sanity check on the args.
- * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto.
-
- * pubkey.c (disable_pubkey_algo): New.
- (check_pubkey_algo2): Look at disabled algo table.
- * cipher.c (disable_cipher_algo): New.
- (check_cipher_algo): Look at disabled algo table.
-
-Wed Jul 7 13:08:40 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Support for libtool.
-
-Fri Jul 2 11:45:54 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * dsa.c (gen_k): Changed algorithm to consume less random bytes
- * elgamal.c (gen_k): Ditto.
-
- * random.c (random_dump_stats): New.
-
-Thu Jul 1 12:47:31 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * primegen.c, elgamal.c, dsa.c (progess): New and replaced all
- fputc with a call to this function.
-
-Sat Jun 26 12:15:59 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs.
-
- * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New.
-
- * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra).
- * Makefile.am (install-exec-hook): Removed.
-
-Sun May 23 14:20:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.c (setup_cipher_table): Enable Twofish
-
- * random.c (fast_random_poll): Disable use of times() for mingw32.
-
-Mon May 17 21:54:43 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * dynload.c (register_internal_cipher_extension): Minor init fix.
-
-Tue May 4 15:47:53 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug
- that we didn't correct for step when passing the prime to the
- Rabin-Miller test which led to bad performance (Stefan Keller).
- (check_prime): Add a first Fermat test.
-
-Sun Apr 18 10:11:28 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.c (cipher_setiv): Add ivlen arg, changed all callers.
-
- * random.c (randomize_buffer): alway use secure memory because
- we can't use m_is_secure() on a statically allocated buffer.
-
- * twofish.c: Replaced some macros by a loop to reduce text size.
- * Makefile.am (twofish): No more need for sed editing.
-
-Fri Apr 9 12:26:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.c (cipher_open): Reversed the changes for AUTO_CFB.
-
- * blowfish.c: Dropped the Blowfish 160 mode.
- * cipher.c (cipher_open): Ditto.
- (setup_cipher_table): Ditto. And removed support of twofish128
-
-Wed Apr 7 20:51:39 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c (get_random_bits): Can now handle requests > POOLSIZE
-
- * cipher.c (cipher_open): Now uses standard CFB for automode if
- the blocksize is gt 8 (according to rfc2440).
-
- * twofish.c: Applied Matthew Skala's patches for 256 bit key.
-
-Tue Apr 6 19:58:12 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c (get_random_bits): Can now handle requests > POOLSIZE
-
- * cipher.c (cipher_open): Now uses standard CFB for automode if
- the blocksize is gt 8 (according to rfc2440).
-
-Sat Mar 20 11:44:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndlinux.c (tty_printf) [IS_MODULE]: Removed.
-
- * rndegd.c (gather_random): Some fixes.
-
-Wed Mar 17 13:09:03 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndegd.c (do_read): New.
- (gather_random): Changed the implementation.
-
-Mon Mar 8 20:47:17 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed.
-
-Fri Feb 26 17:55:41 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * md.c: Nearly a total rewrote.
-
-Wed Feb 24 11:07:27 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.c (context): Fixed alignment
- * md.c: Ditto.
-
- * rndegd.c: New
-
-Mon Feb 22 20:04:00 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndegd.c: New.
-
-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.
-
-Sun Jan 17 11:04:33 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * des.c (is_weak_key): Replace system memcmp due to bugs
- in SunOS's memcmp.
- (des_get_info): Return error on failed selftest.
- * twofish.c (twofish_setkey): Return error on failed selftest or
- invalid keylength.
- * cast5.c (cast_setkey): Ditto.
- * blowfish.c (bf_setkey): Return error on failed selftest.
-
-Tue Jan 12 11:17:18 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c (random_is_faked): New.
-
- * tiger.c: Only compile if we have the u64 type
-
-Sat Jan 9 16:02:23 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndunix.c (gather_random): check for setuid.
-
- * Makefile.am: Add a way to staically link random modules
-
-Thu Jan 7 18:00:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * md.c (md_stop_debug): Do a flush first.
- (md_open): size of buffer now depends on the secure parameter
-
-Sun Jan 3 15:28:44 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * rndunix.c (start_gatherer): Fixed stupid ==/= bug
-
-1998-12-31 Geoff Keating <geoffk@ozemail.com.au>
-
- * des.c (is_weak_key): Rewrite loop end condition.
-
-Tue Dec 29 14:41:47 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c: add unistd.h for getpid().
- (RAND_MAX): Fallback value for Sun.
-
-Wed Dec 23 17:12:24 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * md.c (md_copy): Reset debug.
-
-Mon Dec 14 21:18:49 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * random.c (read_random_source): Changed the interface to the
- random gathering function.
- (gather_faked): Use new interface.
- * dynload.c (dynload_getfnc_fast_random_poll): Ditto.
- (dynload_getfnc_gather_random): Ditto.
- * rndlinux.c (gather_random): Ditto.
- * rndunix.c (gather_random): Ditto.
-
-Sat Dec 12 18:40:32 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * dynload.c (SYMBOL_VERSION): New to cope with system which needs
- underscores.
-
- * rndunix.c: Rewrote large parts
-
-Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * dynload.c (load_extension): increased needed verbosity level.
-
- * random.c (fast_random_poll): Fallback to a default fast random
- poll function.
- (read_random_source): Always use the faked entroy gatherer if no
- gather module is available.
- * rndlinux.c (fast_poll): Removed.
- * rndunix.c (fast_poll): Removed.
-
-
-Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-*.c: Removed.
- * rndlinux.c : New.
- * rndunix.c : New.
- * random.c : Restructured the interface to the gather modules.
- (intialize): Call constructor functions
- (read_radnom_source): Moved to here.
- * dynload.c (dynload_getfnc_gather_random): New.
- (dynload_getfnc_fast_random_poll): New.
- (register_internal_cipher_extension): New.
- (register_cipher_extension): Support of internal modules.
-
-Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c (read_random_source): Removed the assert.
-
-Mon Oct 19 18:34:30 1998 me,,, (wk@tobold)
-
- * pubkey.c: Hack to allow us to give some info about RSA keys back.
-
-Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dynload.c: Support for DLD
-
-Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c: Now uses names from configure for /dev/random.
-
-1998-10-10 SL Baur <steve@altair.xemacs.org>
-
- * Makefile.am: fix sed -O substitutions to catch -O6, etc.
-
-Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-)
- * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto.
-
-Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_digest): New.
- (md_reset): New.
-
-Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned.
-
-Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none))
-
- * des.c: Some patches from Michael.
-
-Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none))
-
- * des.c : New file from Michael Roth <mroth@nessie.de>
-
-Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none))
-
- * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys.
-
-Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none))
-
- * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined.
-
-Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none))
-
- * Makefile.am: Fixes to allow a different build directory
-
-Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * random.c (get_random_byte): Removed and changed all callers
- to use get_random_bits()
-
-Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none))
-
- * cipher.c : Support for other blocksizes
- (cipher_get_blocksize): New.
- * twofish.c: New.
- * Makefile.am: Add twofish module.
-
-Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (read_pool): Simple alloc if secure_alloc is not set.
- (get_random_bits): Ditto.
-
-Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dynload.c (load_extension): Function now nbails out if
- the program is run setuid.
-
-Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (rmd160_hash_buffer): New.
-
-Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c (cipher_open): algos >=100 use standard CFB
-
-Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am: Support for extensions
-
-Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (mix_pool): simpler handling for level 0
-
-Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c: Removed from dist, will reappear as dynload module
-
-Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * pubkey.c: Major changes to allow extensions. Changed the inteface
- of all public key ciphers and added the ability to load extensions
- on demand.
-
- * misc.c: Removed.
-
-Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * dynload.c: New.
- * cipher.c: Major changes to allow extensions.
-
-Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c: Major internal chnages to support extensions.
- * blowfish.c (blowfish_get_info): New and made all internal
- functions static, changed heder.
- * cast5.c (cast5_get_info): Likewise.
-
-Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c (transform): Fix for big endian
-
- * cipher.c (do_cfb_decrypt): Big endian fix.
-
-Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_get_oid): Add a new one for TIGER.
-
-Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c: Add support for a dummy cipher
-
-Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (transform): fixed sigbus - I should better
- add Christian von Roques's new implemenation of rmd160_write.
-
-Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New
- * random.c: Moved system specific functions to rand-****.c
-
-Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (fast_random_poll): add call to gethrtime.
-
-Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * elgamal.c (elg_generate): choosing x was not correct, could
- yield 6 bytes which are not from the random pool, tsss, tsss..
-
-Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * primegen.c (generate_elg_prime): Add arg mode, changed all
- callers and implemented mode 1.
-
-Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c (cipher_get_keylen): New.
-
-Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * tiger.c, tiger.h: New.
-
-Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c (check_pubkey_algo2): New.
-
-Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c: New
- * misc.c (check_cipher_algo): Moved to cipher.c
- * cast5.c: Moved many functions to cipher.c
- * blowfish.c: Likewise.
-
-Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cast5.c: Implemented and tested.
-
-Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * elgamal.c (elg_generate): Faster generation of x in some cases.
-
-Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * blowfish.c (blowfish_decode_cfb): changed XOR operation
- (blowfish_encode_cfb): Ditto.
-
-Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sha1.c (transform): Rewrote
-
- * blowfish.c (encrypt): Unrolled for rounds == 16
- (decrypt): Ditto.
-
-Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (transform): Unrolled the loop.
-
-Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (read_pool): Add pool_balance stuff.
- (get_random_bits): New.
-
- * elgamal.c (elg_generate): Now uses get_random_bits to generate x.
-
-
-Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_digest_length): New.
-
-Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dsa.c (dsa_verify): Works.
-
-Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dsa.c, dsa.h: Removed some unused code.
-
-Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_open): Add call to fast_random_poll.
- blowfish.c (blowfish_setkey): Ditto.
-
-Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * rmd160.c (rmd160_mixblock): New.
- * random.c: Restructured to start with a new RNG implementation.
- * random.h: New.
-
-Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * gost.c, gost.h: Removed because they did only conatin trash.
-
-Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * random.c (fill_buffer): removed error message if n == -1.
-
-Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c (md_enable): No init if called twice.
-
-Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * primegen.c (generate_elg_prime): Changed the progress printing.
- (gen_prime): Ditto.
-
-Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md5.c, md.5 : Replaced by a modified version of md5.c from
- GNU textutils 1.22.
-
-Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * md.c, md.h : New debugging support
-
-Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c (cipher_algo_to_string): New
- (pubkey_algo_to_string): New.
- (digest_algo_to_string): New.
-
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/cipher/Makefile.am b/cipher/Makefile.am
deleted file mode 100644
index 4f06a8091..000000000
--- a/cipher/Makefile.am
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl
-
-noinst_LIBRARIES = libcipher.a
-
-libcipher_a_SOURCES = cipher.c \
- pubkey.c \
- md.c \
- dynload.c \
- bithelp.h \
- des.c \
- twofish.c \
- blowfish.c \
- cast5.c \
- rijndael.c \
- elgamal.c \
- elgamal.h \
- rsa.c rsa.h \
- primegen.c \
- random.h \
- random.c \
- rand-internal.h \
- rmd.h \
- dsa.h \
- dsa.c \
- g10c.c \
- smallprime.c \
- algorithms.h \
- rndlinux.c \
- rndunix.c \
- rndegd.c \
- rndw32.c \
- md5.c \
- rmd160.c \
- sha1.c \
- tiger.c
-
-EXTRA_libcipher_a_SOURCES = idea-stub.c
-
-libcipher_a_DEPENDENCIES = @IDEA_O@
-libcipher_a_LIBADD = @IDEA_O@
-
-tiger.o: $(srcdir)/tiger.c
- `echo $(COMPILE) -c $(srcdir)/tiger.c | sed -e 's/-O[2-9s]*/-O1/g' `
diff --git a/cipher/algorithms.h b/cipher/algorithms.h
deleted file mode 100644
index 694a7e35c..000000000
--- a/cipher/algorithms.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* algorithms.h - prototypes for algorithm functions.
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef GNUPG_ALGORITHMS_H
-#define GNUPG_ALGORITHMS_H 1
-
-const char *dynload_enum_module_names (int seq);
-
-
-
-const char *
-md5_get_info (int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-
-const char *
-rmd160_get_info (int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-const char *
-sha1_get_info (int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-const char *
-tiger_get_info (int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-
-const char *
-des_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-const char *
-cast5_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-
-const char *
-blowfish_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-const char *
-twofish_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-/* this is just a kludge for the time we have not yet changed the cipher
- * stuff to the scheme we use for random and digests */
-const char *
-rijndael_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-const char *
-idea_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**setkeyf)( void *c, byte *key, unsigned keylen ),
- void (**encryptf)( void *c, byte *outbuf, byte *inbuf ),
- void (**decryptf)( void *c, byte *outbuf, byte *inbuf )
- );
-
-
-
-#endif /*GNUPG_ALGORITHMS_H*/
diff --git a/cipher/bithelp.h b/cipher/bithelp.h
deleted file mode 100644
index 188db168a..000000000
--- a/cipher/bithelp.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* bithelp.h - Some bit manipulation helpers
- * Copyright (C) 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_BITHELP_H
-#define G10_BITHELP_H
-
-
-/****************
- * Rotate a 32 bit integer by n bytes
- */
-#if defined(__GNUC__) && defined(__i386__)
-static inline u32
-rol( u32 x, int n)
-{
- __asm__("roll %%cl,%0"
- :"=r" (x)
- :"0" (x),"c" (n));
- return x;
-}
-#else
- #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
-#endif
-
-
-#endif /*G10_BITHELP_H*/
diff --git a/cipher/blowfish.c b/cipher/blowfish.c
deleted file mode 100644
index bf00fc462..000000000
--- a/cipher/blowfish.c
+++ /dev/null
@@ -1,632 +0,0 @@
-/* blowfish.c - Blowfish encryption
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- *
- * For a description of the algorithm, see:
- * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
- * ISBN 0-471-11709-9. Pages 336 ff.
- */
-
-/* Test values:
- * key "abcdefghijklmnopqrstuvwxyz";
- * plain "BLOWFISH"
- * cipher 32 4E D0 FE F4 13 A2 03
- *
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "types.h"
-#include "errors.h"
-#include "algorithms.h"
-
-
-
-#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
-
-#define BLOWFISH_BLOCKSIZE 8
-#define BLOWFISH_ROUNDS 16
-
-typedef struct {
- u32 s0[256];
- u32 s1[256];
- u32 s2[256];
- u32 s3[256];
- u32 p[BLOWFISH_ROUNDS+2];
-} BLOWFISH_context;
-
-static int bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen );
-static void encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
-static void decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
-
-
-/* precomputed S boxes */
-static const u32 ks0[256] = {
- 0xD1310BA6,0x98DFB5AC,0x2FFD72DB,0xD01ADFB7,0xB8E1AFED,0x6A267E96,
- 0xBA7C9045,0xF12C7F99,0x24A19947,0xB3916CF7,0x0801F2E2,0x858EFC16,
- 0x636920D8,0x71574E69,0xA458FEA3,0xF4933D7E,0x0D95748F,0x728EB658,
- 0x718BCD58,0x82154AEE,0x7B54A41D,0xC25A59B5,0x9C30D539,0x2AF26013,
- 0xC5D1B023,0x286085F0,0xCA417918,0xB8DB38EF,0x8E79DCB0,0x603A180E,
- 0x6C9E0E8B,0xB01E8A3E,0xD71577C1,0xBD314B27,0x78AF2FDA,0x55605C60,
- 0xE65525F3,0xAA55AB94,0x57489862,0x63E81440,0x55CA396A,0x2AAB10B6,
- 0xB4CC5C34,0x1141E8CE,0xA15486AF,0x7C72E993,0xB3EE1411,0x636FBC2A,
- 0x2BA9C55D,0x741831F6,0xCE5C3E16,0x9B87931E,0xAFD6BA33,0x6C24CF5C,
- 0x7A325381,0x28958677,0x3B8F4898,0x6B4BB9AF,0xC4BFE81B,0x66282193,
- 0x61D809CC,0xFB21A991,0x487CAC60,0x5DEC8032,0xEF845D5D,0xE98575B1,
- 0xDC262302,0xEB651B88,0x23893E81,0xD396ACC5,0x0F6D6FF3,0x83F44239,
- 0x2E0B4482,0xA4842004,0x69C8F04A,0x9E1F9B5E,0x21C66842,0xF6E96C9A,
- 0x670C9C61,0xABD388F0,0x6A51A0D2,0xD8542F68,0x960FA728,0xAB5133A3,
- 0x6EEF0B6C,0x137A3BE4,0xBA3BF050,0x7EFB2A98,0xA1F1651D,0x39AF0176,
- 0x66CA593E,0x82430E88,0x8CEE8619,0x456F9FB4,0x7D84A5C3,0x3B8B5EBE,
- 0xE06F75D8,0x85C12073,0x401A449F,0x56C16AA6,0x4ED3AA62,0x363F7706,
- 0x1BFEDF72,0x429B023D,0x37D0D724,0xD00A1248,0xDB0FEAD3,0x49F1C09B,
- 0x075372C9,0x80991B7B,0x25D479D8,0xF6E8DEF7,0xE3FE501A,0xB6794C3B,
- 0x976CE0BD,0x04C006BA,0xC1A94FB6,0x409F60C4,0x5E5C9EC2,0x196A2463,
- 0x68FB6FAF,0x3E6C53B5,0x1339B2EB,0x3B52EC6F,0x6DFC511F,0x9B30952C,
- 0xCC814544,0xAF5EBD09,0xBEE3D004,0xDE334AFD,0x660F2807,0x192E4BB3,
- 0xC0CBA857,0x45C8740F,0xD20B5F39,0xB9D3FBDB,0x5579C0BD,0x1A60320A,
- 0xD6A100C6,0x402C7279,0x679F25FE,0xFB1FA3CC,0x8EA5E9F8,0xDB3222F8,
- 0x3C7516DF,0xFD616B15,0x2F501EC8,0xAD0552AB,0x323DB5FA,0xFD238760,
- 0x53317B48,0x3E00DF82,0x9E5C57BB,0xCA6F8CA0,0x1A87562E,0xDF1769DB,
- 0xD542A8F6,0x287EFFC3,0xAC6732C6,0x8C4F5573,0x695B27B0,0xBBCA58C8,
- 0xE1FFA35D,0xB8F011A0,0x10FA3D98,0xFD2183B8,0x4AFCB56C,0x2DD1D35B,
- 0x9A53E479,0xB6F84565,0xD28E49BC,0x4BFB9790,0xE1DDF2DA,0xA4CB7E33,
- 0x62FB1341,0xCEE4C6E8,0xEF20CADA,0x36774C01,0xD07E9EFE,0x2BF11FB4,
- 0x95DBDA4D,0xAE909198,0xEAAD8E71,0x6B93D5A0,0xD08ED1D0,0xAFC725E0,
- 0x8E3C5B2F,0x8E7594B7,0x8FF6E2FB,0xF2122B64,0x8888B812,0x900DF01C,
- 0x4FAD5EA0,0x688FC31C,0xD1CFF191,0xB3A8C1AD,0x2F2F2218,0xBE0E1777,
- 0xEA752DFE,0x8B021FA1,0xE5A0CC0F,0xB56F74E8,0x18ACF3D6,0xCE89E299,
- 0xB4A84FE0,0xFD13E0B7,0x7CC43B81,0xD2ADA8D9,0x165FA266,0x80957705,
- 0x93CC7314,0x211A1477,0xE6AD2065,0x77B5FA86,0xC75442F5,0xFB9D35CF,
- 0xEBCDAF0C,0x7B3E89A0,0xD6411BD3,0xAE1E7E49,0x00250E2D,0x2071B35E,
- 0x226800BB,0x57B8E0AF,0x2464369B,0xF009B91E,0x5563911D,0x59DFA6AA,
- 0x78C14389,0xD95A537F,0x207D5BA2,0x02E5B9C5,0x83260376,0x6295CFA9,
- 0x11C81968,0x4E734A41,0xB3472DCA,0x7B14A94A,0x1B510052,0x9A532915,
- 0xD60F573F,0xBC9BC6E4,0x2B60A476,0x81E67400,0x08BA6FB5,0x571BE91F,
- 0xF296EC6B,0x2A0DD915,0xB6636521,0xE7B9F9B6,0xFF34052E,0xC5855664,
- 0x53B02D5D,0xA99F8FA1,0x08BA4799,0x6E85076A };
-
-static const u32 ks1[256] = {
- 0x4B7A70E9,0xB5B32944,0xDB75092E,0xC4192623,0xAD6EA6B0,0x49A7DF7D,
- 0x9CEE60B8,0x8FEDB266,0xECAA8C71,0x699A17FF,0x5664526C,0xC2B19EE1,
- 0x193602A5,0x75094C29,0xA0591340,0xE4183A3E,0x3F54989A,0x5B429D65,
- 0x6B8FE4D6,0x99F73FD6,0xA1D29C07,0xEFE830F5,0x4D2D38E6,0xF0255DC1,
- 0x4CDD2086,0x8470EB26,0x6382E9C6,0x021ECC5E,0x09686B3F,0x3EBAEFC9,
- 0x3C971814,0x6B6A70A1,0x687F3584,0x52A0E286,0xB79C5305,0xAA500737,
- 0x3E07841C,0x7FDEAE5C,0x8E7D44EC,0x5716F2B8,0xB03ADA37,0xF0500C0D,
- 0xF01C1F04,0x0200B3FF,0xAE0CF51A,0x3CB574B2,0x25837A58,0xDC0921BD,
- 0xD19113F9,0x7CA92FF6,0x94324773,0x22F54701,0x3AE5E581,0x37C2DADC,
- 0xC8B57634,0x9AF3DDA7,0xA9446146,0x0FD0030E,0xECC8C73E,0xA4751E41,
- 0xE238CD99,0x3BEA0E2F,0x3280BBA1,0x183EB331,0x4E548B38,0x4F6DB908,
- 0x6F420D03,0xF60A04BF,0x2CB81290,0x24977C79,0x5679B072,0xBCAF89AF,
- 0xDE9A771F,0xD9930810,0xB38BAE12,0xDCCF3F2E,0x5512721F,0x2E6B7124,
- 0x501ADDE6,0x9F84CD87,0x7A584718,0x7408DA17,0xBC9F9ABC,0xE94B7D8C,
- 0xEC7AEC3A,0xDB851DFA,0x63094366,0xC464C3D2,0xEF1C1847,0x3215D908,
- 0xDD433B37,0x24C2BA16,0x12A14D43,0x2A65C451,0x50940002,0x133AE4DD,
- 0x71DFF89E,0x10314E55,0x81AC77D6,0x5F11199B,0x043556F1,0xD7A3C76B,
- 0x3C11183B,0x5924A509,0xF28FE6ED,0x97F1FBFA,0x9EBABF2C,0x1E153C6E,
- 0x86E34570,0xEAE96FB1,0x860E5E0A,0x5A3E2AB3,0x771FE71C,0x4E3D06FA,
- 0x2965DCB9,0x99E71D0F,0x803E89D6,0x5266C825,0x2E4CC978,0x9C10B36A,
- 0xC6150EBA,0x94E2EA78,0xA5FC3C53,0x1E0A2DF4,0xF2F74EA7,0x361D2B3D,
- 0x1939260F,0x19C27960,0x5223A708,0xF71312B6,0xEBADFE6E,0xEAC31F66,
- 0xE3BC4595,0xA67BC883,0xB17F37D1,0x018CFF28,0xC332DDEF,0xBE6C5AA5,
- 0x65582185,0x68AB9802,0xEECEA50F,0xDB2F953B,0x2AEF7DAD,0x5B6E2F84,
- 0x1521B628,0x29076170,0xECDD4775,0x619F1510,0x13CCA830,0xEB61BD96,
- 0x0334FE1E,0xAA0363CF,0xB5735C90,0x4C70A239,0xD59E9E0B,0xCBAADE14,
- 0xEECC86BC,0x60622CA7,0x9CAB5CAB,0xB2F3846E,0x648B1EAF,0x19BDF0CA,
- 0xA02369B9,0x655ABB50,0x40685A32,0x3C2AB4B3,0x319EE9D5,0xC021B8F7,
- 0x9B540B19,0x875FA099,0x95F7997E,0x623D7DA8,0xF837889A,0x97E32D77,
- 0x11ED935F,0x16681281,0x0E358829,0xC7E61FD6,0x96DEDFA1,0x7858BA99,
- 0x57F584A5,0x1B227263,0x9B83C3FF,0x1AC24696,0xCDB30AEB,0x532E3054,
- 0x8FD948E4,0x6DBC3128,0x58EBF2EF,0x34C6FFEA,0xFE28ED61,0xEE7C3C73,
- 0x5D4A14D9,0xE864B7E3,0x42105D14,0x203E13E0,0x45EEE2B6,0xA3AAABEA,
- 0xDB6C4F15,0xFACB4FD0,0xC742F442,0xEF6ABBB5,0x654F3B1D,0x41CD2105,
- 0xD81E799E,0x86854DC7,0xE44B476A,0x3D816250,0xCF62A1F2,0x5B8D2646,
- 0xFC8883A0,0xC1C7B6A3,0x7F1524C3,0x69CB7492,0x47848A0B,0x5692B285,
- 0x095BBF00,0xAD19489D,0x1462B174,0x23820E00,0x58428D2A,0x0C55F5EA,
- 0x1DADF43E,0x233F7061,0x3372F092,0x8D937E41,0xD65FECF1,0x6C223BDB,
- 0x7CDE3759,0xCBEE7460,0x4085F2A7,0xCE77326E,0xA6078084,0x19F8509E,
- 0xE8EFD855,0x61D99735,0xA969A7AA,0xC50C06C2,0x5A04ABFC,0x800BCADC,
- 0x9E447A2E,0xC3453484,0xFDD56705,0x0E1E9EC9,0xDB73DBD3,0x105588CD,
- 0x675FDA79,0xE3674340,0xC5C43465,0x713E38D8,0x3D28F89E,0xF16DFF20,
- 0x153E21E7,0x8FB03D4A,0xE6E39F2B,0xDB83ADF7 };
-
-static const u32 ks2[256] = {
- 0xE93D5A68,0x948140F7,0xF64C261C,0x94692934,0x411520F7,0x7602D4F7,
- 0xBCF46B2E,0xD4A20068,0xD4082471,0x3320F46A,0x43B7D4B7,0x500061AF,
- 0x1E39F62E,0x97244546,0x14214F74,0xBF8B8840,0x4D95FC1D,0x96B591AF,
- 0x70F4DDD3,0x66A02F45,0xBFBC09EC,0x03BD9785,0x7FAC6DD0,0x31CB8504,
- 0x96EB27B3,0x55FD3941,0xDA2547E6,0xABCA0A9A,0x28507825,0x530429F4,
- 0x0A2C86DA,0xE9B66DFB,0x68DC1462,0xD7486900,0x680EC0A4,0x27A18DEE,
- 0x4F3FFEA2,0xE887AD8C,0xB58CE006,0x7AF4D6B6,0xAACE1E7C,0xD3375FEC,
- 0xCE78A399,0x406B2A42,0x20FE9E35,0xD9F385B9,0xEE39D7AB,0x3B124E8B,
- 0x1DC9FAF7,0x4B6D1856,0x26A36631,0xEAE397B2,0x3A6EFA74,0xDD5B4332,
- 0x6841E7F7,0xCA7820FB,0xFB0AF54E,0xD8FEB397,0x454056AC,0xBA489527,
- 0x55533A3A,0x20838D87,0xFE6BA9B7,0xD096954B,0x55A867BC,0xA1159A58,
- 0xCCA92963,0x99E1DB33,0xA62A4A56,0x3F3125F9,0x5EF47E1C,0x9029317C,
- 0xFDF8E802,0x04272F70,0x80BB155C,0x05282CE3,0x95C11548,0xE4C66D22,
- 0x48C1133F,0xC70F86DC,0x07F9C9EE,0x41041F0F,0x404779A4,0x5D886E17,
- 0x325F51EB,0xD59BC0D1,0xF2BCC18F,0x41113564,0x257B7834,0x602A9C60,
- 0xDFF8E8A3,0x1F636C1B,0x0E12B4C2,0x02E1329E,0xAF664FD1,0xCAD18115,
- 0x6B2395E0,0x333E92E1,0x3B240B62,0xEEBEB922,0x85B2A20E,0xE6BA0D99,
- 0xDE720C8C,0x2DA2F728,0xD0127845,0x95B794FD,0x647D0862,0xE7CCF5F0,
- 0x5449A36F,0x877D48FA,0xC39DFD27,0xF33E8D1E,0x0A476341,0x992EFF74,
- 0x3A6F6EAB,0xF4F8FD37,0xA812DC60,0xA1EBDDF8,0x991BE14C,0xDB6E6B0D,
- 0xC67B5510,0x6D672C37,0x2765D43B,0xDCD0E804,0xF1290DC7,0xCC00FFA3,
- 0xB5390F92,0x690FED0B,0x667B9FFB,0xCEDB7D9C,0xA091CF0B,0xD9155EA3,
- 0xBB132F88,0x515BAD24,0x7B9479BF,0x763BD6EB,0x37392EB3,0xCC115979,
- 0x8026E297,0xF42E312D,0x6842ADA7,0xC66A2B3B,0x12754CCC,0x782EF11C,
- 0x6A124237,0xB79251E7,0x06A1BBE6,0x4BFB6350,0x1A6B1018,0x11CAEDFA,
- 0x3D25BDD8,0xE2E1C3C9,0x44421659,0x0A121386,0xD90CEC6E,0xD5ABEA2A,
- 0x64AF674E,0xDA86A85F,0xBEBFE988,0x64E4C3FE,0x9DBC8057,0xF0F7C086,
- 0x60787BF8,0x6003604D,0xD1FD8346,0xF6381FB0,0x7745AE04,0xD736FCCC,
- 0x83426B33,0xF01EAB71,0xB0804187,0x3C005E5F,0x77A057BE,0xBDE8AE24,
- 0x55464299,0xBF582E61,0x4E58F48F,0xF2DDFDA2,0xF474EF38,0x8789BDC2,
- 0x5366F9C3,0xC8B38E74,0xB475F255,0x46FCD9B9,0x7AEB2661,0x8B1DDF84,
- 0x846A0E79,0x915F95E2,0x466E598E,0x20B45770,0x8CD55591,0xC902DE4C,
- 0xB90BACE1,0xBB8205D0,0x11A86248,0x7574A99E,0xB77F19B6,0xE0A9DC09,
- 0x662D09A1,0xC4324633,0xE85A1F02,0x09F0BE8C,0x4A99A025,0x1D6EFE10,
- 0x1AB93D1D,0x0BA5A4DF,0xA186F20F,0x2868F169,0xDCB7DA83,0x573906FE,
- 0xA1E2CE9B,0x4FCD7F52,0x50115E01,0xA70683FA,0xA002B5C4,0x0DE6D027,
- 0x9AF88C27,0x773F8641,0xC3604C06,0x61A806B5,0xF0177A28,0xC0F586E0,
- 0x006058AA,0x30DC7D62,0x11E69ED7,0x2338EA63,0x53C2DD94,0xC2C21634,
- 0xBBCBEE56,0x90BCB6DE,0xEBFC7DA1,0xCE591D76,0x6F05E409,0x4B7C0188,
- 0x39720A3D,0x7C927C24,0x86E3725F,0x724D9DB9,0x1AC15BB4,0xD39EB8FC,
- 0xED545578,0x08FCA5B5,0xD83D7CD3,0x4DAD0FC4,0x1E50EF5E,0xB161E6F8,
- 0xA28514D9,0x6C51133C,0x6FD5C7E7,0x56E14EC4,0x362ABFCE,0xDDC6C837,
- 0xD79A3234,0x92638212,0x670EFA8E,0x406000E0 };
-
-static const u32 ks3[256] = {
- 0x3A39CE37,0xD3FAF5CF,0xABC27737,0x5AC52D1B,0x5CB0679E,0x4FA33742,
- 0xD3822740,0x99BC9BBE,0xD5118E9D,0xBF0F7315,0xD62D1C7E,0xC700C47B,
- 0xB78C1B6B,0x21A19045,0xB26EB1BE,0x6A366EB4,0x5748AB2F,0xBC946E79,
- 0xC6A376D2,0x6549C2C8,0x530FF8EE,0x468DDE7D,0xD5730A1D,0x4CD04DC6,
- 0x2939BBDB,0xA9BA4650,0xAC9526E8,0xBE5EE304,0xA1FAD5F0,0x6A2D519A,
- 0x63EF8CE2,0x9A86EE22,0xC089C2B8,0x43242EF6,0xA51E03AA,0x9CF2D0A4,
- 0x83C061BA,0x9BE96A4D,0x8FE51550,0xBA645BD6,0x2826A2F9,0xA73A3AE1,
- 0x4BA99586,0xEF5562E9,0xC72FEFD3,0xF752F7DA,0x3F046F69,0x77FA0A59,
- 0x80E4A915,0x87B08601,0x9B09E6AD,0x3B3EE593,0xE990FD5A,0x9E34D797,
- 0x2CF0B7D9,0x022B8B51,0x96D5AC3A,0x017DA67D,0xD1CF3ED6,0x7C7D2D28,
- 0x1F9F25CF,0xADF2B89B,0x5AD6B472,0x5A88F54C,0xE029AC71,0xE019A5E6,
- 0x47B0ACFD,0xED93FA9B,0xE8D3C48D,0x283B57CC,0xF8D56629,0x79132E28,
- 0x785F0191,0xED756055,0xF7960E44,0xE3D35E8C,0x15056DD4,0x88F46DBA,
- 0x03A16125,0x0564F0BD,0xC3EB9E15,0x3C9057A2,0x97271AEC,0xA93A072A,
- 0x1B3F6D9B,0x1E6321F5,0xF59C66FB,0x26DCF319,0x7533D928,0xB155FDF5,
- 0x03563482,0x8ABA3CBB,0x28517711,0xC20AD9F8,0xABCC5167,0xCCAD925F,
- 0x4DE81751,0x3830DC8E,0x379D5862,0x9320F991,0xEA7A90C2,0xFB3E7BCE,
- 0x5121CE64,0x774FBE32,0xA8B6E37E,0xC3293D46,0x48DE5369,0x6413E680,
- 0xA2AE0810,0xDD6DB224,0x69852DFD,0x09072166,0xB39A460A,0x6445C0DD,
- 0x586CDECF,0x1C20C8AE,0x5BBEF7DD,0x1B588D40,0xCCD2017F,0x6BB4E3BB,
- 0xDDA26A7E,0x3A59FF45,0x3E350A44,0xBCB4CDD5,0x72EACEA8,0xFA6484BB,
- 0x8D6612AE,0xBF3C6F47,0xD29BE463,0x542F5D9E,0xAEC2771B,0xF64E6370,
- 0x740E0D8D,0xE75B1357,0xF8721671,0xAF537D5D,0x4040CB08,0x4EB4E2CC,
- 0x34D2466A,0x0115AF84,0xE1B00428,0x95983A1D,0x06B89FB4,0xCE6EA048,
- 0x6F3F3B82,0x3520AB82,0x011A1D4B,0x277227F8,0x611560B1,0xE7933FDC,
- 0xBB3A792B,0x344525BD,0xA08839E1,0x51CE794B,0x2F32C9B7,0xA01FBAC9,
- 0xE01CC87E,0xBCC7D1F6,0xCF0111C3,0xA1E8AAC7,0x1A908749,0xD44FBD9A,
- 0xD0DADECB,0xD50ADA38,0x0339C32A,0xC6913667,0x8DF9317C,0xE0B12B4F,
- 0xF79E59B7,0x43F5BB3A,0xF2D519FF,0x27D9459C,0xBF97222C,0x15E6FC2A,
- 0x0F91FC71,0x9B941525,0xFAE59361,0xCEB69CEB,0xC2A86459,0x12BAA8D1,
- 0xB6C1075E,0xE3056A0C,0x10D25065,0xCB03A442,0xE0EC6E0E,0x1698DB3B,
- 0x4C98A0BE,0x3278E964,0x9F1F9532,0xE0D392DF,0xD3A0342B,0x8971F21E,
- 0x1B0A7441,0x4BA3348C,0xC5BE7120,0xC37632D8,0xDF359F8D,0x9B992F2E,
- 0xE60B6F47,0x0FE3F11D,0xE54CDA54,0x1EDAD891,0xCE6279CF,0xCD3E7E6F,
- 0x1618B166,0xFD2C1D05,0x848FD2C5,0xF6FB2299,0xF523F357,0xA6327623,
- 0x93A83531,0x56CCCD02,0xACF08162,0x5A75EBB5,0x6E163697,0x88D273CC,
- 0xDE966292,0x81B949D0,0x4C50901B,0x71C65614,0xE6C6C7BD,0x327A140A,
- 0x45E1D006,0xC3F27B9A,0xC9AA53FD,0x62A80F00,0xBB25BFE2,0x35BDD2F6,
- 0x71126905,0xB2040222,0xB6CBCF7C,0xCD769C2B,0x53113EC0,0x1640E3D3,
- 0x38ABBD60,0x2547ADF0,0xBA38209C,0xF746CE76,0x77AFA1C5,0x20756060,
- 0x85CBFE4E,0x8AE88DD8,0x7AAAF9B0,0x4CF9AA7E,0x1948C25C,0x02FB8A8C,
- 0x01C36AE4,0xD6EBE1F9,0x90D4F869,0xA65CDEA0,0x3F09252D,0xC208E69F,
- 0xB74E6132,0xCE77E25B,0x578FDFE3,0x3AC372E6 };
-
-static const u32 ps[BLOWFISH_ROUNDS+2] = {
- 0x243F6A88,0x85A308D3,0x13198A2E,0x03707344,0xA4093822,0x299F31D0,
- 0x082EFA98,0xEC4E6C89,0x452821E6,0x38D01377,0xBE5466CF,0x34E90C6C,
- 0xC0AC29B7,0xC97C50DD,0x3F84D5B5,0xB5470917,0x9216D5D9,0x8979FB1B };
-
-
-
-#if BLOWFISH_ROUNDS != 16
-static inline u32
-function_F( BLOWFISH_context *bc, u32 x )
-{
- u16 a, b, c, d;
-
- #ifdef BIG_ENDIAN_HOST
- a = ((byte*)&x)[0];
- b = ((byte*)&x)[1];
- c = ((byte*)&x)[2];
- d = ((byte*)&x)[3];
- #else
- a = ((byte*)&x)[3];
- b = ((byte*)&x)[2];
- c = ((byte*)&x)[1];
- d = ((byte*)&x)[0];
- #endif
-
- return ((bc->s0[a] + bc->s1[b]) ^ bc->s2[c] ) + bc->s3[d];
-}
-#endif
-
-#ifdef BIG_ENDIAN_HOST
- #define F(x) ((( s0[((byte*)&x)[0]] + s1[((byte*)&x)[1]]) \
- ^ s2[((byte*)&x)[2]]) + s3[((byte*)&x)[3]] )
-#else
- #define F(x) ((( s0[((byte*)&x)[3]] + s1[((byte*)&x)[2]]) \
- ^ s2[((byte*)&x)[1]]) + s3[((byte*)&x)[0]] )
-#endif
-#define R(l,r,i) do { l ^= p[i]; r ^= F(l); } while(0)
-
-static void
-burn_stack (int bytes)
-{
- char buf[64];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-static void
-do_encrypt( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr )
-{
- #if BLOWFISH_ROUNDS == 16
- u32 xl, xr, *s0, *s1, *s2, *s3, *p;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
- s0 = bc->s0;
- s1 = bc->s1;
- s2 = bc->s2;
- s3 = bc->s3;
-
- R( xl, xr, 0);
- R( xr, xl, 1);
- R( xl, xr, 2);
- R( xr, xl, 3);
- R( xl, xr, 4);
- R( xr, xl, 5);
- R( xl, xr, 6);
- R( xr, xl, 7);
- R( xl, xr, 8);
- R( xr, xl, 9);
- R( xl, xr, 10);
- R( xr, xl, 11);
- R( xl, xr, 12);
- R( xr, xl, 13);
- R( xl, xr, 14);
- R( xr, xl, 15);
-
- xl ^= p[BLOWFISH_ROUNDS];
- xr ^= p[BLOWFISH_ROUNDS+1];
-
- *ret_xl = xr;
- *ret_xr = xl;
-
- #else
- u32 xl, xr, temp, *p;
- int i;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
-
- for(i=0; i < BLOWFISH_ROUNDS; i++ ) {
- xl ^= p[i];
- xr ^= function_F(bc, xl);
- temp = xl;
- xl = xr;
- xr = temp;
- }
- temp = xl;
- xl = xr;
- xr = temp;
-
- xr ^= p[BLOWFISH_ROUNDS];
- xl ^= p[BLOWFISH_ROUNDS+1];
-
- *ret_xl = xl;
- *ret_xr = xr;
- #endif
-}
-
-
-static void
-decrypt( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr )
-{
- #if BLOWFISH_ROUNDS == 16
- u32 xl, xr, *s0, *s1, *s2, *s3, *p;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
- s0 = bc->s0;
- s1 = bc->s1;
- s2 = bc->s2;
- s3 = bc->s3;
-
- R( xl, xr, 17);
- R( xr, xl, 16);
- R( xl, xr, 15);
- R( xr, xl, 14);
- R( xl, xr, 13);
- R( xr, xl, 12);
- R( xl, xr, 11);
- R( xr, xl, 10);
- R( xl, xr, 9);
- R( xr, xl, 8);
- R( xl, xr, 7);
- R( xr, xl, 6);
- R( xl, xr, 5);
- R( xr, xl, 4);
- R( xl, xr, 3);
- R( xr, xl, 2);
-
- xl ^= p[1];
- xr ^= p[0];
-
- *ret_xl = xr;
- *ret_xr = xl;
-
- #else
- u32 xl, xr, temp, *p;
- int i;
-
- xl = *ret_xl;
- xr = *ret_xr;
- p = bc->p;
-
- for(i=BLOWFISH_ROUNDS+1; i > 1; i-- ) {
- xl ^= p[i];
- xr ^= function_F(bc, xl);
- temp = xl;
- xl = xr;
- xr = temp;
- }
-
- temp = xl;
- xl = xr;
- xr = temp;
-
- xr ^= p[1];
- xl ^= p[0];
-
- *ret_xl = xl;
- *ret_xr = xr;
- #endif
-}
-
-#undef F
-#undef R
-
-static void
-do_encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf )
-{
- u32 d1, d2;
-
- d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
- do_encrypt( bc, &d1, &d2 );
- outbuf[0] = (d1 >> 24) & 0xff;
- outbuf[1] = (d1 >> 16) & 0xff;
- outbuf[2] = (d1 >> 8) & 0xff;
- outbuf[3] = d1 & 0xff;
- outbuf[4] = (d2 >> 24) & 0xff;
- outbuf[5] = (d2 >> 16) & 0xff;
- outbuf[6] = (d2 >> 8) & 0xff;
- outbuf[7] = d2 & 0xff;
-}
-
-static void
-encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf )
-{
- do_encrypt_block (bc, outbuf, inbuf);
- burn_stack (64);
-}
-
-static void
-do_decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf )
-{
- u32 d1, d2;
-
- d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
- decrypt( bc, &d1, &d2 );
- outbuf[0] = (d1 >> 24) & 0xff;
- outbuf[1] = (d1 >> 16) & 0xff;
- outbuf[2] = (d1 >> 8) & 0xff;
- outbuf[3] = d1 & 0xff;
- outbuf[4] = (d2 >> 24) & 0xff;
- outbuf[5] = (d2 >> 16) & 0xff;
- outbuf[6] = (d2 >> 8) & 0xff;
- outbuf[7] = d2 & 0xff;
-}
-
-static void
-decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf )
-{
- do_decrypt_block (bc, outbuf, inbuf);
- burn_stack (64);
-}
-
-
-static const char*
-selftest(void)
-{
- BLOWFISH_context c;
- byte plain[] = "BLOWFISH";
- byte buffer[8];
- byte plain3[] = { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
- byte key3[] = { 0x41, 0x79, 0x6E, 0xA0, 0x52, 0x61, 0x6E, 0xE4 };
- byte cipher3[] = { 0xE1, 0x13, 0xF4, 0x10, 0x2C, 0xFC, 0xCE, 0x43 };
-
- bf_setkey( &c, "abcdefghijklmnopqrstuvwxyz", 26 );
- encrypt_block( &c, buffer, plain );
- if( memcmp( buffer, "\x32\x4E\xD0\xFE\xF4\x13\xA2\x03", 8 ) )
- return "Blowfish selftest failed (1).";
- decrypt_block( &c, buffer, buffer );
- if( memcmp( buffer, plain, 8 ) )
- return "Blowfish selftest failed (2).";
-
- bf_setkey( &c, key3, 8 );
- encrypt_block( &c, buffer, plain3 );
- if( memcmp( buffer, cipher3, 8 ) )
- return "Blowfish selftest failed (3).";
- decrypt_block( &c, buffer, buffer );
- if( memcmp( buffer, plain3, 8 ) )
- return "Blowfish selftest failed (4).";
- return NULL;
-}
-
-#ifdef __riscos__
-/* need to switch off CSE optimisation for Norcroft C (Acorn/Pace) */
-#pragma no_optimise_cse
-#endif /* __riscos__ */
-
-static int
-do_bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
-{
- int i, j;
- u32 data, datal, datar;
- static int initialized;
- static const char *selftest_failed;
-
- if( !initialized ) {
- initialized = 1;
- selftest_failed = selftest();
- if( selftest_failed )
- fprintf(stderr,"%s\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- for(i=0; i < BLOWFISH_ROUNDS+2; i++ )
- c->p[i] = ps[i];
- for(i=0; i < 256; i++ ) {
- c->s0[i] = ks0[i];
- c->s1[i] = ks1[i];
- c->s2[i] = ks2[i];
- c->s3[i] = ks3[i];
- }
-
- for(i=j=0; i < BLOWFISH_ROUNDS+2; i++ ) {
- #ifdef BIG_ENDIAN_HOST
- ((byte*)&data)[0] = key[j];
- ((byte*)&data)[1] = key[(j+1)%keylen];
- ((byte*)&data)[2] = key[(j+2)%keylen];
- ((byte*)&data)[3] = key[(j+3)%keylen];
- #else
- ((byte*)&data)[3] = key[j];
- ((byte*)&data)[2] = key[(j+1)%keylen];
- ((byte*)&data)[1] = key[(j+2)%keylen];
- ((byte*)&data)[0] = key[(j+3)%keylen];
- #endif
- c->p[i] ^= data;
- j = (j+4) % keylen;
- }
-
- datal = datar = 0;
- for(i=0; i < BLOWFISH_ROUNDS+2; i += 2 ) {
- do_encrypt( c, &datal, &datar );
- c->p[i] = datal;
- c->p[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- do_encrypt( c, &datal, &datar );
- c->s0[i] = datal;
- c->s0[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- do_encrypt( c, &datal, &datar );
- c->s1[i] = datal;
- c->s1[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- do_encrypt( c, &datal, &datar );
- c->s2[i] = datal;
- c->s2[i+1] = datar;
- }
- for(i=0; i < 256; i += 2 ) {
- do_encrypt( c, &datal, &datar );
- c->s3[i] = datal;
- c->s3[i+1] = datar;
- }
-
-
- /* Check for weak key. A weak key is a key in which a value in */
- /* the P-array (here c) occurs more than once per table. */
- for(i=0; i < 255; i++ ) {
- for( j=i+1; j < 256; j++) {
- if( (c->s0[i] == c->s0[j]) || (c->s1[i] == c->s1[j]) ||
- (c->s2[i] == c->s2[j]) || (c->s3[i] == c->s3[j]) )
- return G10ERR_WEAK_KEY;
- }
- }
-
- return 0;
-}
-
-#ifdef __riscos__
-#pragma optimise_cse
-#endif /* __riscos__ */
-
-static int
-bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
-{
- int rc = do_bf_setkey (c, key, keylen);
- burn_stack (64);
- return rc;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-blowfish_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- *keylen = 128;
- *blocksize = BLOWFISH_BLOCKSIZE;
- *contextsize = sizeof(BLOWFISH_context);
- *(int (**)(BLOWFISH_context*, byte*, unsigned))r_setkey
- = bf_setkey;
- *(void (**)(BLOWFISH_context*, byte*, byte*))r_encrypt
- = encrypt_block;
- *(void (**)(BLOWFISH_context*, byte*, byte*))r_decrypt
- = decrypt_block;
-
- if( algo == CIPHER_ALGO_BLOWFISH )
- return "BLOWFISH";
- return NULL;
-}
-
diff --git a/cipher/cast5.c b/cipher/cast5.c
deleted file mode 100644
index 6373886f5..000000000
--- a/cipher/cast5.c
+++ /dev/null
@@ -1,654 +0,0 @@
-/* cast5.c - CAST5 cipher (RFC2144)
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/* Test vectors:
- *
- * 128-bit key = 01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A
- * plaintext = 01 23 45 67 89 AB CD EF
- * ciphertext = 23 8B 4F E5 84 7E 44 B2
- *
- * 80-bit key = 01 23 45 67 12 34 56 78 23 45
- * = 01 23 45 67 12 34 56 78 23 45 00 00 00 00 00 00
- * plaintext = 01 23 45 67 89 AB CD EF
- * ciphertext = EB 6A 71 1A 2C 02 27 1B
- *
- * 40-bit key = 01 23 45 67 12
- * = 01 23 45 67 12 00 00 00 00 00 00 00 00 00 00 00
- * plaintext = 01 23 45 67 89 AB CD EF
- * ciphertext = 7A C8 16 D1 6E 9B 30 2E
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "types.h"
-#include "errors.h"
-#include "algorithms.h"
-
-
-#define CIPHER_ALGO_CAST5 3
-
-#define CAST5_BLOCKSIZE 8
-
-typedef struct {
- u32 Km[16];
- byte Kr[16];
-} CAST5_context;
-
-static int cast_setkey( CAST5_context *c, byte *key, unsigned keylen );
-static void encrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
-static void decrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
-
-
-
-
-static const u32 s1[256] = {
-0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
-0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
-0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
-0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
-0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
-0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
-0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
-0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
-0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
-0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
-0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
-0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
-0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
-0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
-0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
-0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
-0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
-0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
-0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
-0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
-0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
-0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
-0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
-0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
-0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
-0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
-0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
-0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
-0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
-0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
-0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
-0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
-};
-static const u32 s2[256] = {
-0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
-0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
-0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
-0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
-0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
-0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
-0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
-0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
-0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
-0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
-0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
-0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
-0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
-0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
-0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
-0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
-0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
-0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
-0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
-0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
-0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
-0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
-0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
-0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
-0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
-0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
-0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
-0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
-0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
-0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
-0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
-0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1
-};
-static const u32 s3[256] = {
-0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
-0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
-0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
-0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
-0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
-0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
-0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
-0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
-0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
-0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
-0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
-0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
-0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
-0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
-0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
-0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
-0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
-0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
-0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
-0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
-0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
-0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
-0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
-0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
-0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
-0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
-0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
-0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
-0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
-0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
-0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
-0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783
-};
-static const u32 s4[256] = {
-0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
-0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
-0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
-0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
-0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
-0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
-0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
-0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
-0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
-0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
-0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
-0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
-0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
-0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
-0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
-0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
-0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
-0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
-0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
-0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
-0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
-0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
-0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
-0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
-0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
-0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
-0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
-0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
-0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
-0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
-0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
-0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
-};
-static const u32 s5[256] = {
-0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
-0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
-0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
-0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
-0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
-0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
-0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
-0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
-0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
-0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
-0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
-0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
-0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
-0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
-0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
-0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
-0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
-0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
-0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
-0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
-0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
-0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
-0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
-0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
-0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
-0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
-0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
-0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
-0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
-0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
-0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
-0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4
-};
-static const u32 s6[256] = {
-0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
-0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
-0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
-0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
-0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
-0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
-0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
-0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
-0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
-0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
-0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
-0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
-0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
-0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
-0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
-0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
-0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
-0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
-0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
-0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
-0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
-0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
-0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
-0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
-0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
-0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
-0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
-0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
-0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
-0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
-0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
-0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f
-};
-static const u32 s7[256] = {
-0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
-0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
-0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
-0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
-0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
-0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
-0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
-0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
-0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
-0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
-0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
-0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
-0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
-0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
-0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
-0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
-0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
-0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
-0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
-0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
-0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
-0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
-0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
-0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
-0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
-0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
-0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
-0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
-0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
-0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
-0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
-0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3
-};
-static const u32 s8[256] = {
-0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
-0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
-0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
-0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
-0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
-0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
-0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
-0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
-0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
-0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
-0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
-0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
-0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
-0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
-0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
-0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
-0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
-0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
-0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
-0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
-0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
-0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
-0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
-0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
-0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
-0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
-0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
-0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
-0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
-0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
-0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
-0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e
-};
-
-
-#if defined(__GNUC__) && defined(__i386__)
-static inline u32
-rol(int n, u32 x)
-{
- __asm__("roll %%cl,%0"
- :"=r" (x)
- :"0" (x),"c" (n));
- return x;
-}
-#else
- #define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) )
-#endif
-
-#define F1(D,m,r) ( (I = ((m) + (D))), (I=rol((r),I)), \
- (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]) )
-#define F2(D,m,r) ( (I = ((m) ^ (D))), (I=rol((r),I)), \
- (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]) )
-#define F3(D,m,r) ( (I = ((m) - (D))), (I=rol((r),I)), \
- (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]) )
-
-static void
-burn_stack (int bytes)
-{
- char buf[64];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-static void
-do_encrypt_block( CAST5_context *c, byte *outbuf, byte *inbuf )
-{
- u32 l, r, t;
- u32 I; /* used by the Fx macros */
- u32 *Km;
- byte *Kr;
-
- Km = c->Km;
- Kr = c->Kr;
-
- /* (L0,R0) <-- (m1...m64). (Split the plaintext into left and
- * right 32-bit halves L0 = m1...m32 and R0 = m33...m64.)
- */
- l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
-
- /* (16 rounds) for i from 1 to 16, compute Li and Ri as follows:
- * Li = Ri-1;
- * Ri = Li-1 ^ f(Ri-1,Kmi,Kri), where f is defined in Section 2.2
- * Rounds 1, 4, 7, 10, 13, and 16 use f function Type 1.
- * Rounds 2, 5, 8, 11, and 14 use f function Type 2.
- * Rounds 3, 6, 9, 12, and 15 use f function Type 3.
- */
-
- t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]);
- t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]);
- t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]);
- t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]);
- t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]);
- t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]);
- t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]);
- t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]);
- t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]);
- t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]);
- t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]);
- t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]);
- t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]);
- t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]);
- t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]);
- t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]);
-
- /* c1...c64 <-- (R16,L16). (Exchange final blocks L16, R16 and
- * concatenate to form the ciphertext.) */
- outbuf[0] = (r >> 24) & 0xff;
- outbuf[1] = (r >> 16) & 0xff;
- outbuf[2] = (r >> 8) & 0xff;
- outbuf[3] = r & 0xff;
- outbuf[4] = (l >> 24) & 0xff;
- outbuf[5] = (l >> 16) & 0xff;
- outbuf[6] = (l >> 8) & 0xff;
- outbuf[7] = l & 0xff;
-}
-
-static void
-encrypt_block( CAST5_context *c, byte *outbuf, byte *inbuf )
-{
- do_encrypt_block (c, outbuf, inbuf);
- burn_stack (20+4*sizeof(void*));
-}
-
-static void
-do_decrypt_block (CAST5_context *c, byte *outbuf, byte *inbuf )
-{
- u32 l, r, t;
- u32 I;
- u32 *Km;
- byte *Kr;
-
- Km = c->Km;
- Kr = c->Kr;
-
- l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
- r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
-
- t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]);
- t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]);
- t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]);
- t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]);
- t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]);
- t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]);
- t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]);
- t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]);
- t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]);
- t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]);
- t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]);
- t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]);
- t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]);
- t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]);
- t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]);
- t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]);
-
- outbuf[0] = (r >> 24) & 0xff;
- outbuf[1] = (r >> 16) & 0xff;
- outbuf[2] = (r >> 8) & 0xff;
- outbuf[3] = r & 0xff;
- outbuf[4] = (l >> 24) & 0xff;
- outbuf[5] = (l >> 16) & 0xff;
- outbuf[6] = (l >> 8) & 0xff;
- outbuf[7] = l & 0xff;
-}
-
-static void
-decrypt_block( CAST5_context *c, byte *outbuf, byte *inbuf )
-{
- do_decrypt_block (c, outbuf, inbuf);
- burn_stack (20+4*sizeof(void*));
-}
-
-
-static const char*
-selftest(void)
-{
- CAST5_context c;
- byte key[16] = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
- 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A };
- byte plain[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
- byte cipher[8]= { 0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2 };
- byte buffer[8];
-
- cast_setkey( &c, key, 16 );
- encrypt_block( &c, buffer, plain );
- if( memcmp( buffer, cipher, 8 ) )
- return "1";
- decrypt_block( &c, buffer, buffer );
- if( memcmp( buffer, plain, 8 ) )
- return "2";
-
- #if 0 /* full maintenance test */
- {
- int i;
- byte a0[16] = { 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
- 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A };
- byte b0[16] = { 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
- 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A };
- byte a1[16] = { 0xEE,0xA9,0xD0,0xA2,0x49,0xFD,0x3B,0xA6,
- 0xB3,0x43,0x6F,0xB8,0x9D,0x6D,0xCA,0x92 };
- byte b1[16] = { 0xB2,0xC9,0x5E,0xB0,0x0C,0x31,0xAD,0x71,
- 0x80,0xAC,0x05,0xB8,0xE8,0x3D,0x69,0x6E };
-
- for(i=0; i < 1000000; i++ ) {
- cast_setkey( &c, b0, 16 );
- encrypt_block( &c, a0, a0 );
- encrypt_block( &c, a0+8, a0+8 );
- cast_setkey( &c, a0, 16 );
- encrypt_block( &c, b0, b0 );
- encrypt_block( &c, b0+8, b0+8 );
- }
- if( memcmp( a0, a1, 16 ) || memcmp( b0, b1, 16 ) )
- return "3";
-
- }
- #endif
- return NULL;
-}
-
-
-static void
-key_schedule( u32 *x, u32 *z, u32 *k )
-{
-
- #define xi(i) ((x[(i)/4] >> (8*(3-((i)%4)))) & 0xff)
- #define zi(i) ((z[(i)/4] >> (8*(3-((i)%4)))) & 0xff)
-
- z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)];
- z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)];
- z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)];
- z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)];
- k[0] = s5[zi( 8)]^s6[zi( 9)]^s7[zi( 7)]^s8[zi( 6)]^s5[zi( 2)];
- k[1] = s5[zi(10)]^s6[zi(11)]^s7[zi( 5)]^s8[zi( 4)]^s6[zi( 6)];
- k[2] = s5[zi(12)]^s6[zi(13)]^s7[zi( 3)]^s8[zi( 2)]^s7[zi( 9)];
- k[3] = s5[zi(14)]^s6[zi(15)]^s7[zi( 1)]^s8[zi( 0)]^s8[zi(12)];
-
- x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)];
- x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)];
- x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)];
- x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)];
- k[4] = s5[xi( 3)]^s6[xi( 2)]^s7[xi(12)]^s8[xi(13)]^s5[xi( 8)];
- k[5] = s5[xi( 1)]^s6[xi( 0)]^s7[xi(14)]^s8[xi(15)]^s6[xi(13)];
- k[6] = s5[xi( 7)]^s6[xi( 6)]^s7[xi( 8)]^s8[xi( 9)]^s7[xi( 3)];
- k[7] = s5[xi( 5)]^s6[xi( 4)]^s7[xi(10)]^s8[xi(11)]^s8[xi( 7)];
-
- z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)];
- z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)];
- z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)];
- z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)];
- k[8] = s5[zi( 3)]^s6[zi( 2)]^s7[zi(12)]^s8[zi(13)]^s5[zi( 9)];
- k[9] = s5[zi( 1)]^s6[zi( 0)]^s7[zi(14)]^s8[zi(15)]^s6[zi(12)];
- k[10]= s5[zi( 7)]^s6[zi( 6)]^s7[zi( 8)]^s8[zi( 9)]^s7[zi( 2)];
- k[11]= s5[zi( 5)]^s6[zi( 4)]^s7[zi(10)]^s8[zi(11)]^s8[zi( 6)];
-
- x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)];
- x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)];
- x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)];
- x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)];
- k[12]= s5[xi( 8)]^s6[xi( 9)]^s7[xi( 7)]^s8[xi( 6)]^s5[xi( 3)];
- k[13]= s5[xi(10)]^s6[xi(11)]^s7[xi( 5)]^s8[xi( 4)]^s6[xi( 7)];
- k[14]= s5[xi(12)]^s6[xi(13)]^s7[xi( 3)]^s8[xi( 2)]^s7[xi( 8)];
- k[15]= s5[xi(14)]^s6[xi(15)]^s7[xi( 1)]^s8[xi( 0)]^s8[xi(13)];
-
- #undef xi
- #undef zi
-}
-
-
-static int
-do_cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
-{
- static int initialized;
- static const char* selftest_failed;
- int i;
- u32 x[4];
- u32 z[4];
- u32 k[16];
-
- if( !initialized ) {
- initialized = 1;
- selftest_failed = selftest();
- if( selftest_failed )
- fprintf(stderr,"CAST5 selftest failed (%s).\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- if( keylen != 16 )
- return G10ERR_WRONG_KEYLEN;
-
- x[0] = key[0] << 24 | key[1] << 16 | key[2] << 8 | key[3];
- x[1] = key[4] << 24 | key[5] << 16 | key[6] << 8 | key[7];
- x[2] = key[8] << 24 | key[9] << 16 | key[10] << 8 | key[11];
- x[3] = key[12] << 24 | key[13] << 16 | key[14] << 8 | key[15];
-
- key_schedule( x, z, k );
- for(i=0; i < 16; i++ )
- c->Km[i] = k[i];
- key_schedule( x, z, k );
- for(i=0; i < 16; i++ )
- c->Kr[i] = k[i] & 0x1f;
-
- memset(&x,0, sizeof x);
- memset(&z,0, sizeof z);
- memset(&k,0, sizeof k);
-
- #undef xi
- #undef zi
- return 0;
-}
-
-static int
-cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
-{
- int rc = do_cast_setkey (c, key, keylen);
- burn_stack (96+7*sizeof(void*));
- return rc;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-cast5_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- *keylen = 128;
- *blocksize = CAST5_BLOCKSIZE;
- *contextsize = sizeof(CAST5_context);
- *(int (**)(CAST5_context*, byte*, unsigned))r_setkey
- = cast_setkey;
- *(void (**)(CAST5_context*, byte*, byte*))r_encrypt
- = encrypt_block;
- *(void (**)(CAST5_context*, byte*, byte*))r_decrypt
- = decrypt_block;
-
-
- if( algo == CIPHER_ALGO_CAST5 )
- return "CAST5";
- return NULL;
-}
-
diff --git a/cipher/cipher.c b/cipher/cipher.c
deleted file mode 100644
index 9a774cf85..000000000
--- a/cipher/cipher.c
+++ /dev/null
@@ -1,678 +0,0 @@
-/* cipher.c - cipher dispatcher
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "errors.h"
-#include "cipher.h"
-#include "algorithms.h"
-
-/* We have support for a DUMMY encryption cipher which comes handy to
- debug MDCs and similar things. Because this is a bit dangerous it
- is not enabled. */
-/*#define ALLOW_DUMMY 1 */
-
-#define MAX_BLOCKSIZE 16
-#define TABLE_SIZE 14
-
-struct cipher_table_s {
- const char *name;
- int algo;
- size_t blocksize;
- size_t keylen;
- size_t contextsize; /* allocate this amount of context */
- int (*setkey)( void *c, byte *key, unsigned keylen );
- void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
- void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
-};
-
-static struct cipher_table_s cipher_table[TABLE_SIZE];
-static int disabled_algos[TABLE_SIZE];
-
-
-struct cipher_handle_s {
- int algo;
- int mode;
- size_t blocksize;
- byte iv[MAX_BLOCKSIZE]; /* (this should be ulong aligned) */
- byte lastiv[MAX_BLOCKSIZE];
- int unused; /* in IV */
- int (*setkey)( void *c, byte *key, unsigned keylen );
- void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
- void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
- PROPERLY_ALIGNED_TYPE context;
-};
-
-
-#ifdef ALLOW_DUMMY
-static int
-dummy_setkey( void *c, byte *key, unsigned keylen ) { return 0; }
-static void
-dummy_encrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); }
-static void
-dummy_decrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); }
-#ifdef __GNUC__
-# warning DUMMY cipher module is enabled
-#endif
-#endif
-
-
-/****************
- * Put the static entries into the table.
- */
-static void
-setup_cipher_table(void)
-{
-
- int i;
-
- i = 0;
- cipher_table[i].algo = CIPHER_ALGO_RIJNDAEL;
- cipher_table[i].name = rijndael_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_RIJNDAEL192;
- cipher_table[i].name = rijndael_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_RIJNDAEL256;
- cipher_table[i].name = rijndael_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_TWOFISH;
- cipher_table[i].name = twofish_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_BLOWFISH;
- cipher_table[i].name = blowfish_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_CAST5;
- cipher_table[i].name = cast5_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_3DES;
- cipher_table[i].name = des_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if( !cipher_table[i].name )
- BUG();
- i++;
- cipher_table[i].algo = CIPHER_ALGO_IDEA;
- cipher_table[i].name = idea_get_info( cipher_table[i].algo,
- &cipher_table[i].keylen,
- &cipher_table[i].blocksize,
- &cipher_table[i].contextsize,
- &cipher_table[i].setkey,
- &cipher_table[i].encrypt,
- &cipher_table[i].decrypt );
- if (cipher_table[i].name)
- i++; /* Note that IDEA is usually not available. */
-
-#ifdef ALLOW_DUMMY
- cipher_table[i].algo = CIPHER_ALGO_DUMMY;
- cipher_table[i].name = "DUMMY";
- cipher_table[i].blocksize = 8;
- cipher_table[i].keylen = 128;
- cipher_table[i].contextsize = 0;
- cipher_table[i].setkey = dummy_setkey;
- cipher_table[i].encrypt = dummy_encrypt_block;
- cipher_table[i].decrypt = dummy_decrypt_block;
- i++;
-#endif
-
- for( ; i < TABLE_SIZE; i++ )
- cipher_table[i].name = NULL;
-}
-
-
-/****************
- * Try to load all modules and return true if new modules are available
- */
-static int
-load_cipher_modules(void)
-{
- static int initialized = 0;
-
- if (!initialized )
- {
- setup_cipher_table(); /* load static modules on the first call */
- initialized = 1;
- return 1;
- }
- return 0;
-}
-
-
-
-
-
-
-
-/****************
- * Map a string to the cipher algo
- */
-int
-string_to_cipher_algo( const char *string )
-{
- int i;
- const char *s;
-
- /* kludge to alias RIJNDAEL to AES */
- if ( *string == 'R' || *string == 'r')
- {
- if (!ascii_strcasecmp (string, "RIJNDAEL"))
- string = "AES";
- else if (!ascii_strcasecmp (string, "RIJNDAEL192"))
- string = "AES192";
- else if (!ascii_strcasecmp (string, "RIJNDAEL256"))
- string = "AES256";
- }
-
- do
- {
- for(i=0; (s=cipher_table[i].name); i++ )
- {
- if( !ascii_strcasecmp( s, string ) )
- return cipher_table[i].algo;
- }
- } while( load_cipher_modules() );
- return 0;
-}
-
-/****************
- * Map a cipher algo to a string
- */
-const char *
-cipher_algo_to_string( int algo )
-{
- int i;
-
- do {
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == algo )
- return cipher_table[i].name;
- } while( load_cipher_modules() );
- return NULL;
-}
-
-
-void
-disable_cipher_algo( int algo )
-{
- int i;
-
- for(i=0; i < DIM(disabled_algos); i++ ) {
- if( !disabled_algos[i] || disabled_algos[i] == algo ) {
- disabled_algos[i] = algo;
- return;
- }
- }
- /* fixme: we should use a linked list */
- log_fatal("can't disable cipher algo %d: table full\n", algo );
-}
-
-/****************
- * Return 0 if the cipher algo is available
- */
-int
-check_cipher_algo( int algo )
-{
- int i;
-
- do {
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == algo ) {
- for(i=0; i < DIM(disabled_algos); i++ ) {
- if( disabled_algos[i] == algo )
- return G10ERR_CIPHER_ALGO;
- }
- return 0; /* okay */
- }
- } while( load_cipher_modules() );
- return G10ERR_CIPHER_ALGO;
-}
-
-
-unsigned
-cipher_get_keylen( int algo )
-{
- int i;
- unsigned len = 0;
-
- do {
- for(i=0; cipher_table[i].name; i++ ) {
- if( cipher_table[i].algo == algo ) {
- len = cipher_table[i].keylen;
- if( !len )
- log_bug("cipher %d w/o key length\n", algo );
- return len;
- }
- }
- } while( load_cipher_modules() );
- log_bug("cipher %d not found\n", algo );
- return 0;
-}
-
-unsigned
-cipher_get_blocksize( int algo )
-{
- int i;
- unsigned len = 0;
-
- do {
- for(i=0; cipher_table[i].name; i++ ) {
- if( cipher_table[i].algo == algo ) {
- len = cipher_table[i].blocksize;
- if( !len )
- log_bug("cipher %d w/o blocksize\n", algo );
- return len;
- }
- }
- } while( load_cipher_modules() );
- log_bug("cipher %d not found\n", algo );
- return 0;
-}
-
-
-/****************
- * Open a cipher handle for use with algorithm ALGO, in mode MODE
- * and put it into secure memory if SECURE is true.
- */
-CIPHER_HANDLE
-cipher_open( int algo, int mode, int secure )
-{
- CIPHER_HANDLE hd;
- int i;
-
- fast_random_poll();
- do {
- for(i=0; cipher_table[i].name; i++ )
- if( cipher_table[i].algo == algo )
- break;
- } while( !cipher_table[i].name && load_cipher_modules() );
- if( !cipher_table[i].name ) {
- log_fatal("cipher_open: algorithm %d not available\n", algo );
- return NULL;
- }
-
- /* ? perform selftest here and mark this with a flag in cipher_table ? */
-
- hd = secure ? m_alloc_secure_clear( sizeof *hd
- + cipher_table[i].contextsize
- - sizeof(PROPERLY_ALIGNED_TYPE) )
- : m_alloc_clear( sizeof *hd + cipher_table[i].contextsize
- - sizeof(PROPERLY_ALIGNED_TYPE) );
- hd->algo = algo;
- hd->blocksize = cipher_table[i].blocksize;
- hd->setkey = cipher_table[i].setkey;
- hd->encrypt = cipher_table[i].encrypt;
- hd->decrypt = cipher_table[i].decrypt;
-
- if( mode == CIPHER_MODE_AUTO_CFB ) {
- if( algo >= 100 )
- hd->mode = CIPHER_MODE_CFB;
- else
- hd->mode = CIPHER_MODE_PHILS_CFB;
- }
- else
- hd->mode = mode;
-
-#ifdef ALLOW_DUMMY
- if( algo == CIPHER_ALGO_DUMMY )
- hd->mode = CIPHER_MODE_DUMMY;
-#endif
-
- return hd;
-}
-
-
-void
-cipher_close( CIPHER_HANDLE c )
-{
- m_free(c);
-}
-
-
-int
-cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen )
-{
- return (*c->setkey)( &c->context.c, key, keylen );
-}
-
-
-
-void
-cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen )
-{
- memset( c->iv, 0, c->blocksize );
- if( iv ) {
- if( ivlen != c->blocksize )
- log_info("WARNING: cipher_setiv: ivlen=%u blklen=%u\n",
- ivlen, (unsigned)c->blocksize );
- if( ivlen > c->blocksize )
- ivlen = c->blocksize;
- memcpy( c->iv, iv, ivlen );
- }
- c->unused = 0;
-}
-
-
-
-static void
-do_ecb_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
- unsigned n;
-
- for(n=0; n < nblocks; n++ ) {
- (*c->encrypt)( &c->context.c, outbuf, inbuf );
- inbuf += c->blocksize;
- outbuf += c->blocksize;
- }
-}
-
-static void
-do_ecb_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
- unsigned n;
-
- for(n=0; n < nblocks; n++ ) {
- (*c->decrypt)( &c->context.c, outbuf, inbuf );
- inbuf += c->blocksize;
- outbuf += c->blocksize;
- }
-}
-
-static void
-do_cbc_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
- unsigned int n;
- byte *ivp;
- int i;
- size_t blocksize = c->blocksize;
-
- for(n=0; n < nblocks; n++ ) {
- /* fixme: the xor should works on words and not on
- * bytes. Maybe it is a good idea to enhance the cipher backend
- * API to allow for CBC handling in the backend */
- for(ivp=c->iv,i=0; i < blocksize; i++ )
- outbuf[i] = inbuf[i] ^ *ivp++;
- (*c->encrypt)( &c->context.c, outbuf, outbuf );
- memcpy(c->iv, outbuf, blocksize );
- inbuf += c->blocksize;
- outbuf += c->blocksize;
- }
-}
-
-static void
-do_cbc_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
- unsigned int n;
- byte *ivp;
- int i;
- size_t blocksize = c->blocksize;
-
- for(n=0; n < nblocks; n++ ) {
- /* because outbuf and inbuf might be the same, we have
- * to save the original ciphertext block. We use lastiv
- * for this here because it is not used otherwise */
- memcpy(c->lastiv, inbuf, blocksize );
- (*c->decrypt)( &c->context.c, outbuf, inbuf );
- for(ivp=c->iv,i=0; i < blocksize; i++ )
- outbuf[i] ^= *ivp++;
- memcpy(c->iv, c->lastiv, blocksize );
- inbuf += c->blocksize;
- outbuf += c->blocksize;
- }
-}
-
-
-static void
-do_cfb_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- byte *ivp;
- size_t blocksize = c->blocksize;
-
- if( nbytes <= c->unused ) {
- /* short enough to be encoded by the remaining XOR mask */
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv+c->blocksize - c->unused; nbytes; nbytes--, c->unused-- )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- return;
- }
-
- if( c->unused ) {
- /* XOR the input with the IV and store input into IV */
- nbytes -= c->unused;
- for(ivp=c->iv+blocksize - c->unused; c->unused; c->unused-- )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- }
-
- /* now we can process complete blocks */
- while( nbytes >= blocksize ) {
- int i;
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context.c, c->iv, c->iv );
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv,i=0; i < blocksize; i++ )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- nbytes -= blocksize;
- }
- if( nbytes ) { /* process the remaining bytes */
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context.c, c->iv, c->iv );
- c->unused = blocksize;
- /* and apply the xor */
- c->unused -= nbytes;
- for(ivp=c->iv; nbytes; nbytes-- )
- *outbuf++ = (*ivp++ ^= *inbuf++);
- }
-}
-
-static void
-do_cfb_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- byte *ivp;
- ulong temp;
- size_t blocksize = c->blocksize;
-
- if( nbytes <= c->unused ) {
- /* short enough to be encoded by the remaining XOR mask */
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv+blocksize - c->unused; nbytes; nbytes--,c->unused--){
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- return;
- }
-
- if( c->unused ) {
- /* XOR the input with the IV and store input into IV */
- nbytes -= c->unused;
- for(ivp=c->iv+blocksize - c->unused; c->unused; c->unused-- ) {
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- }
-
- /* now we can process complete blocks */
- while( nbytes >= blocksize ) {
- int i;
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context.c, c->iv, c->iv );
- /* XOR the input with the IV and store input into IV */
- for(ivp=c->iv,i=0; i < blocksize; i++ ) {
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- nbytes -= blocksize;
- }
- if( nbytes ) { /* process the remaining bytes */
- /* encrypt the IV (and save the current one) */
- memcpy( c->lastiv, c->iv, blocksize );
- (*c->encrypt)( &c->context.c, c->iv, c->iv );
- c->unused = blocksize;
- /* and apply the xor */
- c->unused -= nbytes;
- for(ivp=c->iv; nbytes; nbytes-- ) {
- temp = *inbuf++;
- *outbuf++ = *ivp ^ temp;
- *ivp++ = temp;
- }
- }
-}
-
-
-/****************
- * Encrypt INBUF to OUTBUF with the mode selected at open.
- * inbuf and outbuf may overlap or be the same.
- * Depending on the mode some some contraints apply to NBYTES.
- */
-void
-cipher_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- switch( c->mode ) {
- case CIPHER_MODE_ECB:
- assert(!(nbytes%c->blocksize));
- do_ecb_encrypt(c, outbuf, inbuf, nbytes/c->blocksize );
- break;
- case CIPHER_MODE_CBC:
- assert(!(nbytes%c->blocksize));
- do_cbc_encrypt(c, outbuf, inbuf, nbytes/c->blocksize );
- break;
- case CIPHER_MODE_CFB:
- case CIPHER_MODE_PHILS_CFB:
- do_cfb_encrypt(c, outbuf, inbuf, nbytes );
- break;
-#ifdef ALLOW_DUMMY
- case CIPHER_MODE_DUMMY:
- if( inbuf != outbuf )
- memmove( outbuf, inbuf, nbytes );
- break;
-#endif
- default: log_fatal("cipher_encrypt: invalid mode %d\n", c->mode );
- }
-}
-
-
-/****************
- * Decrypt INBUF to OUTBUF with the mode selected at open.
- * inbuf and outbuf may overlap or be the same.
- * Depending on the mode some some contraints apply to NBYTES.
- */
-void
-cipher_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes )
-{
- switch( c->mode ) {
- case CIPHER_MODE_ECB:
- assert(!(nbytes%c->blocksize));
- do_ecb_decrypt(c, outbuf, inbuf, nbytes/c->blocksize );
- break;
- case CIPHER_MODE_CBC:
- assert(!(nbytes%c->blocksize));
- do_cbc_decrypt(c, outbuf, inbuf, nbytes/c->blocksize );
- break;
- case CIPHER_MODE_CFB:
- case CIPHER_MODE_PHILS_CFB:
- do_cfb_decrypt(c, outbuf, inbuf, nbytes );
- break;
-#ifdef ALLOW_DUMMY
- case CIPHER_MODE_DUMMY:
- if( inbuf != outbuf )
- memmove( outbuf, inbuf, nbytes );
- break;
-#endif
- default: log_fatal("cipher_decrypt: invalid mode %d\n", c->mode );
- }
-}
-
-
-
-/****************
- * Used for PGP's somewhat strange CFB mode. Only works if
- * the handle is in PHILS_CFB mode
- */
-void
-cipher_sync( CIPHER_HANDLE c )
-{
- if( c->mode == CIPHER_MODE_PHILS_CFB && c->unused ) {
- memmove(c->iv + c->unused, c->iv, c->blocksize - c->unused );
- memcpy(c->iv, c->lastiv + c->blocksize - c->unused, c->unused);
- c->unused = 0;
- }
-}
-
diff --git a/cipher/des.c b/cipher/des.c
deleted file mode 100644
index 36383d2c0..000000000
--- a/cipher/des.c
+++ /dev/null
@@ -1,1024 +0,0 @@
-/* des.c - DES and Triple-DES encryption/decryption Algorithm
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- *
- *
- * According to the definition of DES in FIPS PUB 46-2 from December 1993.
- * For a description of triple encryption, see:
- * Bruce Schneier: Applied Cryptography. Second Edition.
- * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff.
- */
-
-
-/*
- * Written by Michael Roth <mroth@nessie.de>, September 1998
- */
-
-
-/*
- * U S A G E
- * ===========
- *
- * For DES or Triple-DES encryption/decryption you must initialize a proper
- * encryption context with a key.
- *
- * A DES key is 64bit wide but only 56bits of the key are used. The remaining
- * bits are parity bits and they will _not_ checked in this implementation, but
- * simply ignored.
- *
- * For Tripple-DES you could use either two 64bit keys or three 64bit keys.
- * The parity bits will _not_ checked, too.
- *
- * After initializing a context with a key you could use this context to
- * encrypt or decrypt data in 64bit blocks in Electronic Codebook Mode.
- *
- * (In the examples below the slashes at the beginning and ending of comments
- * are omited.)
- *
- * DES Example
- * -----------
- * unsigned char key[8];
- * unsigned char plaintext[8];
- * unsigned char ciphertext[8];
- * unsigned char recoverd[8];
- * des_ctx context;
- *
- * * Fill 'key' and 'plaintext' with some data *
- * ....
- *
- * * Set up the DES encryption context *
- * des_setkey(context, key);
- *
- * * Encrypt the plaintext *
- * des_ecb_encrypt(context, plaintext, ciphertext);
- *
- * * To recover the orginal plaintext from ciphertext use: *
- * des_ecb_decrypt(context, ciphertext, recoverd);
- *
- *
- * Triple-DES Example
- * ------------------
- * unsigned char key1[8];
- * unsigned char key2[8];
- * unsigned char key3[8];
- * unsigned char plaintext[8];
- * unsigned char ciphertext[8];
- * unsigned char recoverd[8];
- * tripledes_ctx context;
- *
- * * If you would like to use two 64bit keys, fill 'key1' and'key2'
- * then setup the encryption context: *
- * tripledes_set2keys(context, key1, key2);
- *
- * * To use three 64bit keys with Triple-DES use: *
- * tripledes_set3keys(context, key1, key2, key3);
- *
- * * Encrypting plaintext with Triple-DES *
- * tripledes_ecb_encrypt(context, plaintext, ciphertext);
- *
- * * Decrypting ciphertext to recover the plaintext with Triple-DES *
- * tripledes_ecb_decrypt(context, ciphertext, recoverd);
- *
- *
- * Selftest
- * --------
- * char *error_msg;
- *
- * * To perform a selftest of this DES/Triple-DES implementation use the
- * function selftest(). It will return an error string if their are
- * some problems with this library. *
- *
- * if ( (error_msg = selftest()) )
- * {
- * fprintf(stderr, "An error in the DES/Tripple-DES implementation occured: %s\n", error_msg);
- * abort();
- * }
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h> /* memcpy, memcmp */
-#include "types.h" /* for byte and u32 typedefs */
-#include "errors.h"
-#include "algorithms.h"
-
-#if defined(__GNUC__) && defined(__GNU_LIBRARY__)
-#define working_memcmp memcmp
-#else
-/*
- * According to the SunOS man page, memcmp returns indeterminate sign
- * depending on whether characters are signed or not.
- */
-int
-working_memcmp( const char *a, const char *b, size_t n )
-{
- for( ; n; n--, a++, b++ )
- if( *a != *b )
- return (int)(*(byte*)a) - (int)(*(byte*)b);
- return 0;
-}
-#endif
-
-
-
-/* Some defines/checks to support standalone modules */
-
-#ifndef CIPHER_ALGO_3DES
- #define CIPHER_ALGO_3DES 2
-#elif CIPHER_ALGO_3DES != 2
- #error CIPHER_ALGO_3DES is defined to a wrong value.
-#endif
-
-
-
-
-/*
- * Encryption/Decryption context of DES
- */
-typedef struct _des_ctx
- {
- u32 encrypt_subkeys[32];
- u32 decrypt_subkeys[32];
- }
-des_ctx[1];
-
-/*
- * Encryption/Decryption context of Triple-DES
- */
-typedef struct _tripledes_ctx
- {
- u32 encrypt_subkeys[96];
- u32 decrypt_subkeys[96];
- }
-tripledes_ctx[1];
-
-static const char *selftest_failed;
-
-static void des_key_schedule (const byte *, u32 *);
-static int des_setkey (struct _des_ctx *, const byte *);
-static int des_ecb_crypt (struct _des_ctx *, const byte *, byte *, int);
-static int tripledes_set2keys (struct _tripledes_ctx *, const byte *, const byte *);
-static int tripledes_set3keys (struct _tripledes_ctx *, const byte *, const byte *, const byte *);
-static int tripledes_ecb_crypt (struct _tripledes_ctx *, const byte *, byte *, int);
-static int is_weak_key ( const byte *key );
-static const char *selftest (void);
-
-
-
-
-
-
-/*
- * The s-box values are permuted according to the 'primitive function P'
- * and are rotated one bit to the left.
- */
-static u32 sbox1[64] =
-{
- 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000,
- 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004,
- 0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404,
- 0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000,
- 0x00010000, 0x01010404, 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400,
- 0x01010004, 0x00010000, 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404,
- 0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, 0x00010404, 0x01010400,
- 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, 0x00010400, 0x00000000, 0x01010004
-};
-
-static u32 sbox2[64] =
-{
- 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020,
- 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020,
- 0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000,
- 0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020,
- 0x00000000, 0x00108020, 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000,
- 0x80100000, 0x80008000, 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000,
- 0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, 0x80000020, 0x00100020,
- 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, 0x80100020, 0x80108020, 0x00108000
-};
-
-static u32 sbox3[64] =
-{
- 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200,
- 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208,
- 0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208,
- 0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000,
- 0x08020200, 0x08000000, 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000,
- 0x00000200, 0x00020008, 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008,
- 0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, 0x00020200, 0x08000008,
- 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, 0x00000008, 0x08020008, 0x00020200
-};
-
-static u32 sbox4[64] =
-{
- 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001,
- 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001,
- 0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080,
- 0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081,
- 0x00800080, 0x00800001, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000,
- 0x00002080, 0x00800080, 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080,
- 0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, 0x00802080, 0x00800081,
- 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002000, 0x00802080
-};
-
-static u32 sbox5[64] =
-{
- 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000,
- 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000,
- 0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100,
- 0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100,
- 0x00080000, 0x42000100, 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100,
- 0x02000100, 0x40000000, 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000,
- 0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, 0x40080000, 0x42000000,
- 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, 0x40080000, 0x02080100, 0x40000100
-};
-
-static u32 sbox6[64] =
-{
- 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000,
- 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010,
- 0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010,
- 0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000,
- 0x20004000, 0x00000010, 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010,
- 0x00400000, 0x20004000, 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000,
- 0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, 0x20400000, 0x00404010,
- 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, 0x20000000, 0x00400010, 0x20004010
-};
-
-static u32 sbox7[64] =
-{
- 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800,
- 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802,
- 0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002,
- 0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800,
- 0x04000000, 0x00200800, 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002,
- 0x00200002, 0x04000000, 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800,
- 0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, 0x00000002, 0x04200802,
- 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, 0x04000800, 0x00000800, 0x00200002
-};
-
-static u32 sbox8[64] =
-{
- 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000,
- 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040,
- 0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000,
- 0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000,
- 0x00041040, 0x00040000, 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040,
- 0x10001000, 0x00000040, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040,
- 0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0x00000000,
- 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, 0x00040040, 0x10000000, 0x10041000
-};
-
-
-/*
- * These two tables are part of the 'permuted choice 1' function.
- * In this implementation several speed improvements are done.
- */
-u32 leftkey_swap[16] =
-{
- 0x00000000, 0x00000001, 0x00000100, 0x00000101,
- 0x00010000, 0x00010001, 0x00010100, 0x00010101,
- 0x01000000, 0x01000001, 0x01000100, 0x01000101,
- 0x01010000, 0x01010001, 0x01010100, 0x01010101
-};
-
-u32 rightkey_swap[16] =
-{
- 0x00000000, 0x01000000, 0x00010000, 0x01010000,
- 0x00000100, 0x01000100, 0x00010100, 0x01010100,
- 0x00000001, 0x01000001, 0x00010001, 0x01010001,
- 0x00000101, 0x01000101, 0x00010101, 0x01010101,
-};
-
-
-
-/*
- * Numbers of left shifts per round for encryption subkeys.
- * To calculate the decryption subkeys we just reverse the
- * ordering of the calculated encryption subkeys. So their
- * is no need for a decryption rotate tab.
- */
-static byte encrypt_rotate_tab[16] =
-{
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
-};
-
-
-
-/*
- * Table with weak DES keys sorted in ascending order.
- * In DES their are 64 known keys wich are weak. They are weak
- * because they produce only one, two or four different
- * subkeys in the subkey scheduling process.
- * The keys in this table have all their parity bits cleared.
- */
-static byte weak_keys[64][8] =
-{
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e },
- { 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0 }, { 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe },
- { 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e }, { 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00 },
- { 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe }, { 0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0 },
- { 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0 }, { 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe },
- { 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00 }, { 0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e },
- { 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe }, { 0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0 },
- { 0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e }, { 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00 },
- { 0x0e, 0x0e, 0x0e, 0x0e, 0xf0, 0xf0, 0xf0, 0xf0 }, { 0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e },
- { 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00 }, { 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe },
- { 0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0 }, { 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00 },
- { 0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e }, { 0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0 },
- { 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe }, { 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe },
- { 0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0 }, { 0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e },
- { 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00 }, { 0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0 },
- { 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe }, { 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00 },
- { 0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e }, { 0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0 },
- { 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe }, { 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00 },
- { 0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e }, { 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe },
- { 0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0 }, { 0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e },
- { 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00 }, { 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00 },
- { 0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e }, { 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe },
- { 0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e }, { 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00 },
- { 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe }, { 0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0 },
- { 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe }, { 0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0 },
- { 0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e }, { 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00 },
- { 0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0 }, { 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe },
- { 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00 }, { 0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e },
- { 0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e }, { 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00 },
- { 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe }, { 0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0 },
- { 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00 }, { 0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e },
- { 0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0 }, { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe }
-};
-
-
-
-
-
-
-/*
- * Macro to swap bits across two words.
- */
-#define DO_PERMUTATION(a, temp, b, offset, mask) \
- temp = ((a>>offset) ^ b) & mask; \
- b ^= temp; \
- a ^= temp<<offset;
-
-
-/*
- * This performs the 'initial permutation' of the data to be encrypted
- * or decrypted. Additionally the resulting two words are rotated one bit
- * to the left.
- */
-#define INITIAL_PERMUTATION(left, temp, right) \
- DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \
- DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
- DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
- DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
- right = (right << 1) | (right >> 31); \
- temp = (left ^ right) & 0xaaaaaaaa; \
- right ^= temp; \
- left ^= temp; \
- left = (left << 1) | (left >> 31);
-
-/*
- * The 'inverse initial permutation'.
- */
-#define FINAL_PERMUTATION(left, temp, right) \
- left = (left << 31) | (left >> 1); \
- temp = (left ^ right) & 0xaaaaaaaa; \
- left ^= temp; \
- right ^= temp; \
- right = (right << 31) | (right >> 1); \
- DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
- DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
- DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
- DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)
-
-
-/*
- * A full DES round including 'expansion function', 'sbox substitution'
- * and 'primitive function P' but without swapping the left and right word.
- * Please note: The data in 'from' and 'to' is already rotated one bit to
- * the left, done in the initial permutation.
- */
-#define DES_ROUND(from, to, work, subkey) \
- work = from ^ *subkey++; \
- to ^= sbox8[ work & 0x3f ]; \
- to ^= sbox6[ (work>>8) & 0x3f ]; \
- to ^= sbox4[ (work>>16) & 0x3f ]; \
- to ^= sbox2[ (work>>24) & 0x3f ]; \
- work = ((from << 28) | (from >> 4)) ^ *subkey++; \
- to ^= sbox7[ work & 0x3f ]; \
- to ^= sbox5[ (work>>8) & 0x3f ]; \
- to ^= sbox3[ (work>>16) & 0x3f ]; \
- to ^= sbox1[ (work>>24) & 0x3f ];
-
-/*
- * Macros to convert 8 bytes from/to 32bit words.
- */
-#define READ_64BIT_DATA(data, left, right) \
- left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \
- right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
-
-#define WRITE_64BIT_DATA(data, left, right) \
- data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \
- data[2] = (left >> 8) &0xff; data[3] = left &0xff; \
- data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \
- data[6] = (right >> 8) &0xff; data[7] = right &0xff;
-
-/*
- * Handy macros for encryption and decryption of data
- */
-#define des_ecb_encrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 0)
-#define des_ecb_decrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 1)
-#define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx, from, to, 0)
-#define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx, from, to, 1)
-
-
-static void
-burn_stack (int bytes)
-{
- char buf[64];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-/*
- * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for
- * 16 encryption rounds.
- * To calculate subkeys for decryption the caller
- * have to reorder the generated subkeys.
- *
- * rawkey: 8 Bytes of key data
- * subkey: Array of at least 32 u32s. Will be filled
- * with calculated subkeys.
- *
- */
-static void
-des_key_schedule (const byte * rawkey, u32 * subkey)
-{
- u32 left, right, work;
- int round;
-
- READ_64BIT_DATA (rawkey, left, right)
-
- DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f)
- DO_PERMUTATION (right, work, left, 0, 0x10101010)
-
- left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2)
- | (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf])
- | (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6)
- | (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4);
-
- left &= 0x0fffffff;
-
- right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2)
- | (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf])
- | (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6)
- | (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4);
-
- right &= 0x0fffffff;
-
- for (round = 0; round < 16; ++round)
- {
- left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
- right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
-
- *subkey++ = ((left << 4) & 0x24000000)
- | ((left << 28) & 0x10000000)
- | ((left << 14) & 0x08000000)
- | ((left << 18) & 0x02080000)
- | ((left << 6) & 0x01000000)
- | ((left << 9) & 0x00200000)
- | ((left >> 1) & 0x00100000)
- | ((left << 10) & 0x00040000)
- | ((left << 2) & 0x00020000)
- | ((left >> 10) & 0x00010000)
- | ((right >> 13) & 0x00002000)
- | ((right >> 4) & 0x00001000)
- | ((right << 6) & 0x00000800)
- | ((right >> 1) & 0x00000400)
- | ((right >> 14) & 0x00000200)
- | (right & 0x00000100)
- | ((right >> 5) & 0x00000020)
- | ((right >> 10) & 0x00000010)
- | ((right >> 3) & 0x00000008)
- | ((right >> 18) & 0x00000004)
- | ((right >> 26) & 0x00000002)
- | ((right >> 24) & 0x00000001);
-
- *subkey++ = ((left << 15) & 0x20000000)
- | ((left << 17) & 0x10000000)
- | ((left << 10) & 0x08000000)
- | ((left << 22) & 0x04000000)
- | ((left >> 2) & 0x02000000)
- | ((left << 1) & 0x01000000)
- | ((left << 16) & 0x00200000)
- | ((left << 11) & 0x00100000)
- | ((left << 3) & 0x00080000)
- | ((left >> 6) & 0x00040000)
- | ((left << 15) & 0x00020000)
- | ((left >> 4) & 0x00010000)
- | ((right >> 2) & 0x00002000)
- | ((right << 8) & 0x00001000)
- | ((right >> 14) & 0x00000808)
- | ((right >> 9) & 0x00000400)
- | ((right) & 0x00000200)
- | ((right << 7) & 0x00000100)
- | ((right >> 7) & 0x00000020)
- | ((right >> 3) & 0x00000011)
- | ((right << 2) & 0x00000004)
- | ((right >> 21) & 0x00000002);
- }
-}
-
-
-
-/*
- * Fill a DES context with subkeys calculated from a 64bit key.
- * Does not check parity bits, but simply ignore them.
- * Does not check for weak keys.
- */
-static int
-des_setkey (struct _des_ctx *ctx, const byte * key)
-{
- int i;
-
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- des_key_schedule (key, ctx->encrypt_subkeys);
- burn_stack (32);
-
- for(i=0; i<32; i+=2)
- {
- ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i];
- ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
- }
-
- return 0;
-}
-
-
-
-/*
- * Electronic Codebook Mode DES encryption/decryption of data according
- * to 'mode'.
- */
-static int
-des_ecb_crypt (struct _des_ctx *ctx, const byte * from, byte * to, int mode)
-{
- u32 left, right, work;
- u32 *keys;
-
- keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
-
- READ_64BIT_DATA (from, left, right)
- INITIAL_PERMUTATION (left, work, right)
-
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
- FINAL_PERMUTATION (right, work, left)
- WRITE_64BIT_DATA (to, right, left)
-
- return 0;
-}
-
-
-
-/*
- * Fill a Triple-DES context with subkeys calculated from two 64bit keys.
- * Does not check the parity bits of the keys, but simply ignore them.
- * Does not check for weak keys.
- */
-static int
-tripledes_set2keys (struct _tripledes_ctx *ctx,
- const byte * key1,
- const byte * key2)
-{
- int i;
-
- des_key_schedule (key1, ctx->encrypt_subkeys);
- des_key_schedule (key2, &(ctx->decrypt_subkeys[32]));
- burn_stack (32);
-
- for(i=0; i<32; i+=2)
- {
- ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i];
- ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
-
- ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i];
- ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i];
-
- ctx->encrypt_subkeys[i+64] = ctx->encrypt_subkeys[i];
- ctx->encrypt_subkeys[i+65] = ctx->encrypt_subkeys[i+1];
-
- ctx->decrypt_subkeys[i+64] = ctx->decrypt_subkeys[i];
- ctx->decrypt_subkeys[i+65] = ctx->decrypt_subkeys[i+1];
- }
-
- return 0;
-}
-
-
-
-/*
- * Fill a Triple-DES context with subkeys calculated from three 64bit keys.
- * Does not check the parity bits of the keys, but simply ignore them.
- * Does not check for weak keys.
- */
-static int
-tripledes_set3keys (struct _tripledes_ctx *ctx,
- const byte * key1,
- const byte * key2,
- const byte * key3)
-{
- int i;
-
- des_key_schedule (key1, ctx->encrypt_subkeys);
- des_key_schedule (key2, &(ctx->decrypt_subkeys[32]));
- des_key_schedule (key3, &(ctx->encrypt_subkeys[64]));
- burn_stack (32);
-
- for(i=0; i<32; i+=2)
- {
- ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[94-i];
- ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[95-i];
-
- ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i];
- ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i];
-
- ctx->decrypt_subkeys[i+64] = ctx->encrypt_subkeys[30-i];
- ctx->decrypt_subkeys[i+65] = ctx->encrypt_subkeys[31-i];
- }
-
- return 0;
-}
-
-
-
-/*
- * Electronic Codebook Mode Triple-DES encryption/decryption of data according to 'mode'.
- * Sometimes this mode is named 'EDE' mode (Encryption-Decryption-Encryption).
- */
-static int
-tripledes_ecb_crypt (struct _tripledes_ctx *ctx, const byte * from, byte * to, int mode)
-{
- u32 left, right, work;
- u32 *keys;
-
- keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
-
- READ_64BIT_DATA (from, left, right)
- INITIAL_PERMUTATION (left, work, right)
-
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
- DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys)
-
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
- DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
- FINAL_PERMUTATION (right, work, left)
- WRITE_64BIT_DATA (to, right, left)
-
- return 0;
-}
-
-
-
-
-
-/*
- * Check whether the 8 byte key is weak.
- * Dose not check the parity bits of the key but simple ignore them.
- */
-static int
-is_weak_key ( const byte *key )
-{
- byte work[8];
- int i, left, right, middle, cmp_result;
-
- /* clear parity bits */
- for(i=0; i<8; ++i)
- work[i] = key[i] & 0xfe;
-
- /* binary search in the weak key table */
- left = 0;
- right = 63;
- while(left <= right)
- {
- middle = (left + right) / 2;
-
- if ( !(cmp_result=working_memcmp(work, weak_keys[middle], 8)) )
- return -1;
-
- if ( cmp_result > 0 )
- left = middle + 1;
- else
- right = middle - 1;
- }
-
- return 0;
-}
-
-
-
-/*
- * Performs a selftest of this DES/Triple-DES implementation.
- * Returns an string with the error text on failure.
- * Returns NULL if all is ok.
- */
-static const char *
-selftest (void)
-{
- /*
- * Check if 'u32' is really 32 bits wide. This DES / 3DES implementation
- * need this.
- */
- if (sizeof (u32) != 4)
- return "Wrong word size for DES configured.";
-
- /*
- * DES Maintenance Test
- */
- {
- int i;
- byte key[8] =
- {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55};
- byte input[8] =
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- byte result[8] =
- {0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a};
- byte temp1[8], temp2[8], temp3[8];
- des_ctx des;
-
- for (i = 0; i < 64; ++i)
- {
- des_setkey (des, key);
- des_ecb_encrypt (des, input, temp1);
- des_ecb_encrypt (des, temp1, temp2);
- des_setkey (des, temp2);
- des_ecb_decrypt (des, temp1, temp3);
- memcpy (key, temp3, 8);
- memcpy (input, temp1, 8);
- }
- if (memcmp (temp3, result, 8))
- return "DES maintenance test failed.";
- }
-
-
- /*
- * Self made Triple-DES test (Does somebody known an official test?)
- */
- {
- int i;
- byte input[8] =
- {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10};
- byte key1[8] =
- {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0};
- byte key2[8] =
- {0x11, 0x22, 0x33, 0x44, 0xff, 0xaa, 0xcc, 0xdd};
- byte result[8] =
- {0x7b, 0x38, 0x3b, 0x23, 0xa2, 0x7d, 0x26, 0xd3};
-
- tripledes_ctx des3;
-
- for (i = 0; i < 16; ++i)
- {
- tripledes_set2keys (des3, key1, key2);
- tripledes_ecb_encrypt (des3, input, key1);
- tripledes_ecb_decrypt (des3, input, key2);
- tripledes_set3keys (des3, key1, input, key2);
- tripledes_ecb_encrypt (des3, input, input);
- }
- if (memcmp (input, result, 8))
- return "Triple-DES test failed.";
- }
-
- /*
- * More Triple-DES test. These are testvectors as used by SSLeay,
- * thanks to Jeroen C. van Gelderen.
- */
- { struct { byte key[24]; byte plain[8]; byte cipher[8]; } testdata[] = {
- { { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 },
- { 0x95,0xF8,0xA5,0xE5,0xDD,0x31,0xD9,0x00 },
- { 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
- },
-
- { { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 },
- { 0x9D,0x64,0x55,0x5A,0x9A,0x10,0xB8,0x52, },
- { 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00 }
- },
- { { 0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E,
- 0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E,
- 0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E },
- { 0x51,0x45,0x4B,0x58,0x2D,0xDF,0x44,0x0A },
- { 0x71,0x78,0x87,0x6E,0x01,0xF1,0x9B,0x2A }
- },
- { { 0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6,
- 0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6,
- 0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6 },
- { 0x42,0xFD,0x44,0x30,0x59,0x57,0x7F,0xA2 },
- { 0xAF,0x37,0xFB,0x42,0x1F,0x8C,0x40,0x95 }
- },
- { { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
- 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
- 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF },
- { 0x73,0x6F,0x6D,0x65,0x64,0x61,0x74,0x61 },
- { 0x3D,0x12,0x4F,0xE2,0x19,0x8B,0xA3,0x18 }
- },
- { { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
- 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
- 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF },
- { 0x73,0x6F,0x6D,0x65,0x64,0x61,0x74,0x61 },
- { 0xFB,0xAB,0xA1,0xFF,0x9D,0x05,0xE9,0xB1 }
- },
- { { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
- 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
- 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10 },
- { 0x73,0x6F,0x6D,0x65,0x64,0x61,0x74,0x61 },
- { 0x18,0xd7,0x48,0xe5,0x63,0x62,0x05,0x72 }
- },
- { { 0x03,0x52,0x02,0x07,0x67,0x20,0x82,0x17,
- 0x86,0x02,0x87,0x66,0x59,0x08,0x21,0x98,
- 0x64,0x05,0x6A,0xBD,0xFE,0xA9,0x34,0x57 },
- { 0x73,0x71,0x75,0x69,0x67,0x67,0x6C,0x65 },
- { 0xc0,0x7d,0x2a,0x0f,0xa5,0x66,0xfa,0x30 }
- },
- { { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x80,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02 },
- { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
- { 0xe6,0xe6,0xdd,0x5b,0x7e,0x72,0x29,0x74 }
- },
- { { 0x10,0x46,0x10,0x34,0x89,0x98,0x80,0x20,
- 0x91,0x07,0xD0,0x15,0x89,0x19,0x01,0x01,
- 0x19,0x07,0x92,0x10,0x98,0x1A,0x01,0x01 },
- { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
- { 0xe1,0xef,0x62,0xc3,0x32,0xfe,0x82,0x5b }
- }
- };
-
- byte result[8];
- int i;
- static char error[80];
- tripledes_ctx des3;
-
- for (i=0; i<sizeof(testdata)/sizeof(*testdata); ++i) {
- tripledes_set3keys (des3, testdata[i].key, testdata[i].key + 8, testdata[i].key + 16);
-
- tripledes_ecb_encrypt (des3, testdata[i].plain, result);
- if (memcmp (testdata[i].cipher, result, 8)) {
- sprintf (error, "Triple-DES SSLeay test pattern no. %d failend on encryption.", i+1);
- return error;
- }
-
- tripledes_ecb_decrypt (des3, testdata[i].cipher, result);
- if (memcmp (testdata[i].plain, result, 8)) {
- sprintf (error, "Triple-DES SSLeay test pattern no. %d failend on decryption.", i+1);
- return error;
- }
- }
- }
-
- /*
- * Check the weak key detection. We simply assume that the table
- * with weak keys is ok and check every key in the table if it is
- * detected... (This test is a little bit stupid)
- */
- {
- int i;
-
- for (i = 0; i < 64; ++i)
- if (!is_weak_key(weak_keys[i]))
- return "DES weak key detection failed";
- }
-
- return 0;
-}
-
-
-static int
-do_tripledes_setkey ( struct _tripledes_ctx *ctx, byte *key, unsigned keylen )
-{
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
- if( keylen != 24 )
- return G10ERR_WRONG_KEYLEN;
-
- tripledes_set3keys ( ctx, key, key+8, key+16);
-
- if( is_weak_key( key ) || is_weak_key( key+8 ) || is_weak_key( key+16 ) ) {
- burn_stack (64);
- return G10ERR_WEAK_KEY;
- }
- burn_stack (64);
-
- return 0;
-}
-
-
-static void
-do_tripledes_encrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
-{
- tripledes_ecb_encrypt ( ctx, inbuf, outbuf );
- burn_stack (32);
-}
-
-static void
-do_tripledes_decrypt( struct _tripledes_ctx *ctx, byte *outbuf, byte *inbuf )
-{
- tripledes_ecb_decrypt ( ctx, inbuf, outbuf );
- burn_stack (32);
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-des_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- static int did_selftest = 0;
-
- if( !did_selftest ) {
- const char *s = selftest();
- did_selftest = 1;
- if( s ) {
- fprintf(stderr,"%s\n", s );
- selftest_failed = s;
- return NULL;
- }
- }
-
- if( algo == CIPHER_ALGO_3DES ) {
- *keylen = 192;
- *blocksize = 8;
- *contextsize = sizeof(struct _tripledes_ctx);
- *(int (**)(struct _tripledes_ctx*, byte*, unsigned))r_setkey
- = do_tripledes_setkey;
- *(void (**)(struct _tripledes_ctx*, byte*, byte*))r_encrypt
- = do_tripledes_encrypt;
- *(void (**)(struct _tripledes_ctx*, byte*, byte*))r_decrypt
- = do_tripledes_decrypt;
- return "3DES";
- }
- return NULL;
-}
-
diff --git a/cipher/dsa.c b/cipher/dsa.c
deleted file mode 100644
index d728a1b10..000000000
--- a/cipher/dsa.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/* dsa.c - DSA signature algorithm
- * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "dsa.h"
-
-typedef struct {
- MPI p; /* prime */
- MPI q; /* group order */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
-} DSA_public_key;
-
-
-typedef struct {
- MPI p; /* prime */
- MPI q; /* group order */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
- MPI x; /* secret exponent */
-} DSA_secret_key;
-
-
-static MPI gen_k( MPI q );
-static void test_keys( DSA_secret_key *sk, unsigned qbits );
-static int check_secret_key( DSA_secret_key *sk );
-static void generate( DSA_secret_key *sk, unsigned nbits, MPI **ret_factors );
-static void sign(MPI r, MPI s, MPI input, DSA_secret_key *skey);
-static int verify(MPI r, MPI s, MPI input, DSA_public_key *pkey);
-
-
-static void (*progress_cb) ( void *, int );
-static void *progress_cb_data;
-
-void
-register_pk_dsa_progress ( void (*cb)( void *, int), void *cb_data )
-{
- progress_cb = cb;
- progress_cb_data = cb_data;
-}
-
-
-static void
-progress( int c )
-{
- if ( progress_cb )
- progress_cb ( progress_cb_data, c );
- else
- fputc( c, stderr );
-}
-
-
-
-/****************
- * Generate a random secret exponent k less than q
- */
-static MPI
-gen_k( MPI q )
-{
- MPI k = mpi_alloc_secure( mpi_get_nlimbs(q) );
- unsigned int nbits = mpi_get_nbits(q);
- unsigned int nbytes = (nbits+7)/8;
- char *rndbuf = NULL;
-
- if( DBG_CIPHER )
- log_debug("choosing a random k ");
- for(;;) {
- if( DBG_CIPHER )
- progress('.');
-
- if( !rndbuf || nbits < 32 ) {
- m_free(rndbuf);
- rndbuf = get_random_bits( nbits, 1, 1 );
- }
- else { /* change only some of the higher bits */
- /* we could imporove this by directly requesting more memory
- * at the first call to get_random_bits() and use this the here
- * maybe it is easier to do this directly in random.c */
- char *pp = get_random_bits( 32, 1, 1 );
- memcpy( rndbuf,pp, 4 );
- m_free(pp);
- }
- mpi_set_buffer( k, rndbuf, nbytes, 0 );
- if( mpi_test_bit( k, nbits-1 ) )
- mpi_set_highbit( k, nbits-1 );
- else {
- mpi_set_highbit( k, nbits-1 );
- mpi_clear_bit( k, nbits-1 );
- }
-
- if( !(mpi_cmp( k, q ) < 0) ) { /* check: k < q */
- if( DBG_CIPHER )
- progress('+');
- continue; /* no */
- }
- if( !(mpi_cmp_ui( k, 0 ) > 0) ) { /* check: k > 0 */
- if( DBG_CIPHER )
- progress('-');
- continue; /* no */
- }
- break; /* okay */
- }
- m_free(rndbuf);
- if( DBG_CIPHER )
- progress('\n');
-
- return k;
-}
-
-
-static void
-test_keys( DSA_secret_key *sk, unsigned qbits )
-{
- DSA_public_key pk;
- MPI test = mpi_alloc( qbits / BITS_PER_MPI_LIMB );
- MPI out1_a = mpi_alloc( qbits / BITS_PER_MPI_LIMB );
- MPI out1_b = mpi_alloc( qbits / BITS_PER_MPI_LIMB );
-
- pk.p = sk->p;
- pk.q = sk->q;
- pk.g = sk->g;
- pk.y = sk->y;
- /*mpi_set_bytes( test, qbits, get_random_byte, 0 );*/
- { char *p = get_random_bits( qbits, 0, 0 );
- mpi_set_buffer( test, p, (qbits+7)/8, 0 );
- m_free(p);
- }
-
- sign( out1_a, out1_b, test, sk );
- if( !verify( out1_a, out1_b, test, &pk ) )
- log_fatal("DSA:: sign, verify failed\n");
-
- mpi_free( test );
- mpi_free( out1_a );
- mpi_free( out1_b );
-}
-
-
-
-/****************
- * Generate a DSA key pair with a key of size NBITS
- * Returns: 2 structures filled with all needed values
- * and an array with the n-1 factors of (p-1)
- */
-static void
-generate( DSA_secret_key *sk, unsigned nbits, MPI **ret_factors )
-{
- MPI p; /* the prime */
- MPI q; /* the 160 bit prime factor */
- MPI g; /* the generator */
- MPI y; /* g^x mod p */
- MPI x; /* the secret exponent */
- MPI h, e; /* helper */
- unsigned qbits;
- byte *rndbuf;
-
- assert( nbits >= 512 && nbits <= 1024 );
-
- qbits = 160;
- p = generate_elg_prime( 1, nbits, qbits, NULL, ret_factors );
- /* get q out of factors */
- q = mpi_copy((*ret_factors)[0]);
- if( mpi_get_nbits(q) != qbits )
- BUG();
-
- /* find a generator g (h and e are helpers)*/
- /* e = (p-1)/q */
- e = mpi_alloc( mpi_get_nlimbs(p) );
- mpi_sub_ui( e, p, 1 );
- mpi_fdiv_q( e, e, q );
- g = mpi_alloc( mpi_get_nlimbs(p) );
- h = mpi_alloc_set_ui( 1 ); /* we start with 2 */
- do {
- mpi_add_ui( h, h, 1 );
- /* g = h^e mod p */
- mpi_powm( g, h, e, p );
- } while( !mpi_cmp_ui( g, 1 ) ); /* continue until g != 1 */
-
- /* select a random number which has these properties:
- * 0 < x < q-1
- * This must be a very good random number because this
- * is the secret part. */
- if( DBG_CIPHER )
- log_debug("choosing a random x ");
- assert( qbits >= 160 );
- x = mpi_alloc_secure( mpi_get_nlimbs(q) );
- mpi_sub_ui( h, q, 1 ); /* put q-1 into h */
- rndbuf = NULL;
- do {
- if( DBG_CIPHER )
- progress('.');
- if( !rndbuf )
- rndbuf = get_random_bits( qbits, 2, 1 );
- else { /* change only some of the higher bits (= 2 bytes)*/
- char *r = get_random_bits( 16, 2, 1 );
- memcpy(rndbuf, r, 16/8 );
- m_free(r);
- }
- mpi_set_buffer( x, rndbuf, (qbits+7)/8, 0 );
- mpi_clear_highbit( x, qbits+1 );
- } while( !( mpi_cmp_ui( x, 0 )>0 && mpi_cmp( x, h )<0 ) );
- m_free(rndbuf);
- mpi_free( e );
- mpi_free( h );
-
- /* y = g^x mod p */
- y = mpi_alloc( mpi_get_nlimbs(p) );
- mpi_powm( y, g, x, p );
-
- if( DBG_CIPHER ) {
- progress('\n');
- log_mpidump("dsa p= ", p );
- log_mpidump("dsa q= ", q );
- log_mpidump("dsa g= ", g );
- log_mpidump("dsa y= ", y );
- log_mpidump("dsa x= ", x );
- }
-
- /* copy the stuff to the key structures */
- sk->p = p;
- sk->q = q;
- sk->g = g;
- sk->y = y;
- sk->x = x;
-
- /* now we can test our keys (this should never fail!) */
- test_keys( sk, qbits );
-}
-
-
-
-/****************
- * Test whether the secret key is valid.
- * Returns: if this is a valid key.
- */
-static int
-check_secret_key( DSA_secret_key *sk )
-{
- int rc;
- MPI y = mpi_alloc( mpi_get_nlimbs(sk->y) );
-
- mpi_powm( y, sk->g, sk->x, sk->p );
- rc = !mpi_cmp( y, sk->y );
- mpi_free( y );
- return rc;
-}
-
-
-
-/****************
- * Make a DSA signature from HASH and put it into r and s.
- *
- * Without generating the k this function runs in
- * about 26ms on a 300 Mhz Mobile Pentium
- */
-
-static void
-sign(MPI r, MPI s, MPI hash, DSA_secret_key *skey )
-{
- MPI k;
- MPI kinv;
- MPI tmp;
-
- /* select a random k with 0 < k < q */
- k = gen_k( skey->q );
-
- /* r = (a^k mod p) mod q */
- mpi_powm( r, skey->g, k, skey->p );
- mpi_fdiv_r( r, r, skey->q );
-
- /* kinv = k^(-1) mod q */
- kinv = mpi_alloc( mpi_get_nlimbs(k) );
- mpi_invm(kinv, k, skey->q );
-
- /* s = (kinv * ( hash + x * r)) mod q */
- tmp = mpi_alloc( mpi_get_nlimbs(skey->p) );
- mpi_mul( tmp, skey->x, r );
- mpi_add( tmp, tmp, hash );
- mpi_mulm( s , kinv, tmp, skey->q );
-
- mpi_free(k);
- mpi_free(kinv);
- mpi_free(tmp);
-}
-
-
-/****************
- * Returns true if the signature composed from R and S is valid.
- *
- * Without the checks this function runs in
- * about 31ms on a 300 Mhz Mobile Pentium
- */
-static int
-verify(MPI r, MPI s, MPI hash, DSA_public_key *pkey )
-{
- int rc;
- MPI w, u1, u2, v;
- MPI base[3];
- MPI exp[3];
-
-
- if( !(mpi_cmp_ui( r, 0 ) > 0 && mpi_cmp( r, pkey->q ) < 0) )
- return 0; /* assertion 0 < r < q failed */
- if( !(mpi_cmp_ui( s, 0 ) > 0 && mpi_cmp( s, pkey->q ) < 0) )
- return 0; /* assertion 0 < s < q failed */
-
- w = mpi_alloc( mpi_get_nlimbs(pkey->q) );
- u1 = mpi_alloc( mpi_get_nlimbs(pkey->q) );
- u2 = mpi_alloc( mpi_get_nlimbs(pkey->q) );
- v = mpi_alloc( mpi_get_nlimbs(pkey->p) );
-
- /* w = s^(-1) mod q */
- mpi_invm( w, s, pkey->q );
-
- /* u1 = (hash * w) mod q */
- mpi_mulm( u1, hash, w, pkey->q );
-
- /* u2 = r * w mod q */
- mpi_mulm( u2, r, w, pkey->q );
-
- /* v = g^u1 * y^u2 mod p mod q */
- base[0] = pkey->g; exp[0] = u1;
- base[1] = pkey->y; exp[1] = u2;
- base[2] = NULL; exp[2] = NULL;
- mpi_mulpowm( v, base, exp, pkey->p );
- mpi_fdiv_r( v, v, pkey->q );
-
- rc = !mpi_cmp( v, r );
-
- mpi_free(w);
- mpi_free(u1);
- mpi_free(u2);
- mpi_free(v);
- return rc;
-}
-
-
-/*********************************************
- ************** interface ******************
- *********************************************/
-
-int
-dsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- DSA_secret_key sk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
-
- generate( &sk, nbits, retfactors );
- skey[0] = sk.p;
- skey[1] = sk.q;
- skey[2] = sk.g;
- skey[3] = sk.y;
- skey[4] = sk.x;
- return 0;
-}
-
-
-int
-dsa_check_secret_key( int algo, MPI *skey )
-{
- DSA_secret_key sk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
- if( !skey[0] || !skey[1] || !skey[2] || !skey[3] || !skey[4] )
- return G10ERR_BAD_MPI;
-
- sk.p = skey[0];
- sk.q = skey[1];
- sk.g = skey[2];
- sk.y = skey[3];
- sk.x = skey[4];
- if( !check_secret_key( &sk ) )
- return G10ERR_BAD_SECKEY;
-
- return 0;
-}
-
-
-
-int
-dsa_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- DSA_secret_key sk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
- if( !data || !skey[0] || !skey[1] || !skey[2] || !skey[3] || !skey[4] )
- return G10ERR_BAD_MPI;
-
- sk.p = skey[0];
- sk.q = skey[1];
- sk.g = skey[2];
- sk.y = skey[3];
- sk.x = skey[4];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- resarr[1] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- sign( resarr[0], resarr[1], data, &sk );
- return 0;
-}
-
-int
-dsa_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{
- DSA_public_key pk;
-
- if( algo != PUBKEY_ALGO_DSA )
- return G10ERR_PUBKEY_ALGO;
- if( !data[0] || !data[1] || !hash
- || !pkey[0] || !pkey[1] || !pkey[2] || !pkey[3] )
- return G10ERR_BAD_MPI;
-
- pk.p = pkey[0];
- pk.q = pkey[1];
- pk.g = pkey[2];
- pk.y = pkey[3];
- if( !verify( data[0], data[1], hash, &pk ) )
- return G10ERR_BAD_SIGN;
- return 0;
-}
-
-
-
-unsigned
-dsa_get_nbits( int algo, MPI *pkey )
-{
- if( algo != PUBKEY_ALGO_DSA )
- return 0;
- return mpi_get_nbits( pkey[0] );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- * Usage: Bit 0 set : allows signing
- * 1 set : allows encryption
- */
-const char *
-dsa_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig,
- int *use )
-{
- *npkey = 4;
- *nskey = 5;
- *nenc = 0;
- *nsig = 2;
-
- switch( algo ) {
- case PUBKEY_ALGO_DSA: *use = PUBKEY_USAGE_SIG; return "DSA";
- default: *use = 0; return NULL;
- }
-}
-
-
diff --git a/cipher/dsa.h b/cipher/dsa.h
deleted file mode 100644
index 89fd1f5a0..000000000
--- a/cipher/dsa.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* dsa.h - DSA signature algorithm
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_DSA_H
-#define G10_DSA_H
-
-int dsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
-int dsa_check_secret_key( int algo, MPI *skey );
-int dsa_sign( int algo, MPI *resarr, MPI data, MPI *skey );
-int dsa_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
-unsigned dsa_get_nbits( int algo, MPI *pkey );
-const char *dsa_get_info( int algo, int *npkey, int *nskey,
- int *nenc, int *nsig, int *use );
-
-#endif /*G10_DSA_H*/
diff --git a/cipher/dynload.c b/cipher/dynload.c
deleted file mode 100644
index 38c6a0c35..000000000
--- a/cipher/dynload.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* dynload.c - load cipher extensions
- * Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "util.h"
-#include "cipher.h"
-#include "algorithms.h"
-
-
-typedef struct ext_list {
- struct ext_list *next;
- char name[1];
-} *EXTLIST;
-
-static EXTLIST extensions;
-
-/* This is actually not used anymore but we keep a list of already
- * set extensions modules here.
- *
- * Here is the ancient comment:
- * Register an extension module. The last registered module will
- * be loaded first. A name may have a list of classes
- * appended; e.g:
- * mymodule.so(1:17,3:20,3:109)
- * means that this module provides digest algorithm 17 and public key
- * algorithms 20 and 109. This is only a hint but if it is there the
- * loader may decide to only load a module which claims to have a
- * requested algorithm.
- *
- * mainpgm is the path to the program which wants to load a module
- * it is only used in some environments.
- */
-void
-register_cipher_extension( const char *mainpgm, const char *fname )
-{
- EXTLIST r, el, intex;
- char *p, *pe;
-
- if( *fname != DIRSEP_C ) { /* do tilde expansion etc */
- char *tmp;
-
- if( strchr(fname, DIRSEP_C) )
- tmp = make_filename(fname, NULL);
- else
- tmp = make_filename(GNUPG_LIBDIR, fname, NULL);
- el = m_alloc_clear( sizeof *el + strlen(tmp) );
- strcpy(el->name, tmp );
- m_free(tmp);
- }
- else {
- el = m_alloc_clear( sizeof *el + strlen(fname) );
- strcpy(el->name, fname );
- }
- /* check whether we have a class hint */
- if( (p=strchr(el->name,'(')) && (pe=strchr(p+1,')')) && !pe[1] )
- *p = *pe = 0;
-
- /* check that it is not already registered */
- intex = NULL;
- for(r = extensions; r; r = r->next ) {
- if( !compare_filenames(r->name, el->name) ) {
- log_info("extension `%s' already registered\n", el->name );
- m_free(el);
- return;
- }
- }
- /* and register */
- el->next = extensions;
- extensions = el;
-}
-
-/* Return the module name with index SEQ, return NULL as as indication
- for end of list. */
-const char *
-dynload_enum_module_names (int seq)
-{
- EXTLIST el = extensions;
-
- for (; el && el->name && seq; el = el->next, seq--)
- ;
- return el? el->name:NULL;
-}
diff --git a/cipher/elgamal.c b/cipher/elgamal.c
deleted file mode 100644
index b4563cd58..000000000
--- a/cipher/elgamal.c
+++ /dev/null
@@ -1,666 +0,0 @@
-/* elgamal.c - ElGamal Public Key encryption
- * Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
- *
- * For a description of the algorithm, see:
- * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
- * ISBN 0-471-11709-9. Pages 476 ff.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "elgamal.h"
-
-typedef struct {
- MPI p; /* prime */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
-} ELG_public_key;
-
-
-typedef struct {
- MPI p; /* prime */
- MPI g; /* group generator */
- MPI y; /* g^x mod p */
- MPI x; /* secret exponent */
-} ELG_secret_key;
-
-
-static void test_keys( ELG_secret_key *sk, unsigned nbits );
-static MPI gen_k( MPI p );
-static void generate( ELG_secret_key *sk, unsigned nbits, MPI **factors );
-static int check_secret_key( ELG_secret_key *sk );
-static void do_encrypt(MPI a, MPI b, MPI input, ELG_public_key *pkey );
-static void decrypt(MPI output, MPI a, MPI b, ELG_secret_key *skey );
-static void sign(MPI a, MPI b, MPI input, ELG_secret_key *skey);
-static int verify(MPI a, MPI b, MPI input, ELG_public_key *pkey);
-
-
-static void (*progress_cb) ( void *, int );
-static void *progress_cb_data;
-
-void
-register_pk_elg_progress ( void (*cb)( void *, int), void *cb_data )
-{
- progress_cb = cb;
- progress_cb_data = cb_data;
-}
-
-
-static void
-progress( int c )
-{
- if ( progress_cb )
- progress_cb ( progress_cb_data, c );
- else
- fputc( c, stderr );
-}
-
-
-/****************
- * Michael Wiener's table about subgroup sizes to match field sizes
- * (floating around somewhere - Fixme: need a reference)
- */
-static unsigned int
-wiener_map( unsigned int n )
-{
- static struct { unsigned int p_n, q_n; } t[] =
- { /* p q attack cost */
- { 512, 119 }, /* 9 x 10^17 */
- { 768, 145 }, /* 6 x 10^21 */
- { 1024, 165 }, /* 7 x 10^24 */
- { 1280, 183 }, /* 3 x 10^27 */
- { 1536, 198 }, /* 7 x 10^29 */
- { 1792, 212 }, /* 9 x 10^31 */
- { 2048, 225 }, /* 8 x 10^33 */
- { 2304, 237 }, /* 5 x 10^35 */
- { 2560, 249 }, /* 3 x 10^37 */
- { 2816, 259 }, /* 1 x 10^39 */
- { 3072, 269 }, /* 3 x 10^40 */
- { 3328, 279 }, /* 8 x 10^41 */
- { 3584, 288 }, /* 2 x 10^43 */
- { 3840, 296 }, /* 4 x 10^44 */
- { 4096, 305 }, /* 7 x 10^45 */
- { 4352, 313 }, /* 1 x 10^47 */
- { 4608, 320 }, /* 2 x 10^48 */
- { 4864, 328 }, /* 2 x 10^49 */
- { 5120, 335 }, /* 3 x 10^50 */
- { 0, 0 }
- };
- int i;
-
- for(i=0; t[i].p_n; i++ ) {
- if( n <= t[i].p_n )
- return t[i].q_n;
- }
- /* not in table - use some arbitrary high number ;-) */
- return n / 8 + 200;
-}
-
-static void
-test_keys( ELG_secret_key *sk, unsigned nbits )
-{
- ELG_public_key pk;
- MPI test = mpi_alloc( 0 );
- MPI out1_a = mpi_alloc( nbits / BITS_PER_MPI_LIMB );
- MPI out1_b = mpi_alloc( nbits / BITS_PER_MPI_LIMB );
- MPI out2 = mpi_alloc( nbits / BITS_PER_MPI_LIMB );
-
- pk.p = sk->p;
- pk.g = sk->g;
- pk.y = sk->y;
-
- /*mpi_set_bytes( test, nbits, get_random_byte, 0 );*/
- { char *p = get_random_bits( nbits, 0, 0 );
- mpi_set_buffer( test, p, (nbits+7)/8, 0 );
- m_free(p);
- }
-
- do_encrypt( out1_a, out1_b, test, &pk );
- decrypt( out2, out1_a, out1_b, sk );
- if( mpi_cmp( test, out2 ) )
- log_fatal("ElGamal operation: encrypt, decrypt failed\n");
-
- sign( out1_a, out1_b, test, sk );
- if( !verify( out1_a, out1_b, test, &pk ) )
- log_fatal("ElGamal operation: sign, verify failed\n");
-
- mpi_free( test );
- mpi_free( out1_a );
- mpi_free( out1_b );
- mpi_free( out2 );
-}
-
-
-/****************
- * generate a random secret exponent k from prime p, so
- * that k is relatively prime to p-1
- */
-static MPI
-gen_k( MPI p )
-{
- MPI k = mpi_alloc_secure( 0 );
- MPI temp = mpi_alloc( mpi_get_nlimbs(p) );
- MPI p_1 = mpi_copy(p);
- unsigned int orig_nbits = mpi_get_nbits(p);
- unsigned int nbits;
- unsigned int nbytes;
- char *rndbuf = NULL;
-
- /* IMO using a k much lesser than p is sufficient and it greatly
- * improves the encryption performance. We use Wiener's table
- * and add a large safety margin.
- */
- nbits = wiener_map( orig_nbits ) * 3 / 2;
- if( nbits >= orig_nbits )
- BUG();
-
- nbytes = (nbits+7)/8;
- if( DBG_CIPHER )
- log_debug("choosing a random k of %u bits", nbits);
- mpi_sub_ui( p_1, p, 1);
- for(;;) {
- if( !rndbuf || nbits < 32 ) {
- m_free(rndbuf);
- rndbuf = get_random_bits( nbits, 1, 1 );
- }
- else { /* change only some of the higher bits */
- /* we could impprove this by directly requesting more memory
- * at the first call to get_random_bits() and use this the here
- * maybe it is easier to do this directly in random.c
- * Anyway, it is highly inlikely that we will ever reach this code
- */
- char *pp = get_random_bits( 32, 1, 1 );
- memcpy( rndbuf,pp, 4 );
- m_free(pp);
- log_debug("gen_k: tsss, never expected to reach this\n");
- }
- mpi_set_buffer( k, rndbuf, nbytes, 0 );
-
- for(;;) {
- /* Hmm, actually we don't need this step here
- * because we use k much smaller than p - we do it anyway
- * just in case the keep on adding a one to k ;) */
- if( !(mpi_cmp( k, p_1 ) < 0) ) { /* check: k < (p-1) */
- if( DBG_CIPHER )
- progress('+');
- break; /* no */
- }
- if( !(mpi_cmp_ui( k, 0 ) > 0) ) { /* check: k > 0 */
- if( DBG_CIPHER )
- progress('-');
- break; /* no */
- }
- if( mpi_gcd( temp, k, p_1 ) )
- goto found; /* okay, k is relatively prime to (p-1) */
- mpi_add_ui( k, k, 1 );
- if( DBG_CIPHER )
- progress('.');
- }
- }
- found:
- m_free(rndbuf);
- if( DBG_CIPHER )
- progress('\n');
- mpi_free(p_1);
- mpi_free(temp);
-
- return k;
-}
-
-/****************
- * Generate a key pair with a key of size NBITS
- * Returns: 2 structures filles with all needed values
- * and an array with n-1 factors of (p-1)
- */
-static void
-generate( ELG_secret_key *sk, unsigned int nbits, MPI **ret_factors )
-{
- MPI p; /* the prime */
- MPI p_min1;
- MPI g;
- MPI x; /* the secret exponent */
- MPI y;
- MPI temp;
- unsigned int qbits;
- unsigned int xbits;
- byte *rndbuf;
-
- p_min1 = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- temp = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- qbits = wiener_map( nbits );
- if( qbits & 1 ) /* better have a even one */
- qbits++;
- g = mpi_alloc(1);
- p = generate_elg_prime( 0, nbits, qbits, g, ret_factors );
- mpi_sub_ui(p_min1, p, 1);
-
-
- /* select a random number which has these properties:
- * 0 < x < p-1
- * This must be a very good random number because this is the
- * secret part. The prime is public and may be shared anyway,
- * so a random generator level of 1 is used for the prime.
- *
- * I don't see a reason to have a x of about the same size
- * as the p. It should be sufficient to have one about the size
- * of q or the later used k plus a large safety margin. Decryption
- * will be much faster with such an x.
- */
- xbits = qbits * 3 / 2;
- if( xbits >= nbits )
- BUG();
- x = mpi_alloc_secure( xbits/BITS_PER_MPI_LIMB );
- if( DBG_CIPHER )
- log_debug("choosing a random x of size %u", xbits );
- rndbuf = NULL;
- do {
- if( DBG_CIPHER )
- progress('.');
- if( rndbuf ) { /* change only some of the higher bits */
- if( xbits < 16 ) {/* should never happen ... */
- m_free(rndbuf);
- rndbuf = get_random_bits( xbits, 2, 1 );
- }
- else {
- char *r = get_random_bits( 16, 2, 1 );
- memcpy(rndbuf, r, 16/8 );
- m_free(r);
- }
- }
- else
- rndbuf = get_random_bits( xbits, 2, 1 );
- mpi_set_buffer( x, rndbuf, (xbits+7)/8, 0 );
- mpi_clear_highbit( x, xbits+1 );
- } while( !( mpi_cmp_ui( x, 0 )>0 && mpi_cmp( x, p_min1 )<0 ) );
- m_free(rndbuf);
-
- y = mpi_alloc(nbits/BITS_PER_MPI_LIMB);
- mpi_powm( y, g, x, p );
-
- if( DBG_CIPHER ) {
- progress('\n');
- log_mpidump("elg p= ", p );
- log_mpidump("elg g= ", g );
- log_mpidump("elg y= ", y );
- log_mpidump("elg x= ", x );
- }
-
- /* copy the stuff to the key structures */
- sk->p = p;
- sk->g = g;
- sk->y = y;
- sk->x = x;
-
- /* now we can test our keys (this should never fail!) */
- test_keys( sk, nbits - 64 );
-
- mpi_free( p_min1 );
- mpi_free( temp );
-}
-
-
-/****************
- * Test whether the secret key is valid.
- * Returns: if this is a valid key.
- */
-static int
-check_secret_key( ELG_secret_key *sk )
-{
- int rc;
- MPI y = mpi_alloc( mpi_get_nlimbs(sk->y) );
-
- mpi_powm( y, sk->g, sk->x, sk->p );
- rc = !mpi_cmp( y, sk->y );
- mpi_free( y );
- return rc;
-}
-
-
-static void
-do_encrypt(MPI a, MPI b, MPI input, ELG_public_key *pkey )
-{
- MPI k;
-
- /* Note: maybe we should change the interface, so that it
- * is possible to check that input is < p and return an
- * error code.
- */
-
- k = gen_k( pkey->p );
- mpi_powm( a, pkey->g, k, pkey->p );
- /* b = (y^k * input) mod p
- * = ((y^k mod p) * (input mod p)) mod p
- * and because input is < p
- * = ((y^k mod p) * input) mod p
- */
- mpi_powm( b, pkey->y, k, pkey->p );
- mpi_mulm( b, b, input, pkey->p );
- #if 0
- if( DBG_CIPHER ) {
- log_mpidump("elg encrypted y= ", pkey->y);
- log_mpidump("elg encrypted p= ", pkey->p);
- log_mpidump("elg encrypted k= ", k);
- log_mpidump("elg encrypted M= ", input);
- log_mpidump("elg encrypted a= ", a);
- log_mpidump("elg encrypted b= ", b);
- }
- #endif
- mpi_free(k);
-}
-
-
-
-
-static void
-decrypt(MPI output, MPI a, MPI b, ELG_secret_key *skey )
-{
- MPI t1 = mpi_alloc_secure( mpi_get_nlimbs( skey->p ) );
-
- /* output = b/(a^x) mod p */
- mpi_powm( t1, a, skey->x, skey->p );
- mpi_invm( t1, t1, skey->p );
- mpi_mulm( output, b, t1, skey->p );
- #if 0
- if( DBG_CIPHER ) {
- log_mpidump("elg decrypted x= ", skey->x);
- log_mpidump("elg decrypted p= ", skey->p);
- log_mpidump("elg decrypted a= ", a);
- log_mpidump("elg decrypted b= ", b);
- log_mpidump("elg decrypted M= ", output);
- }
- #endif
- mpi_free(t1);
-}
-
-
-/****************
- * Make an Elgamal signature out of INPUT
- */
-
-static void
-sign(MPI a, MPI b, MPI input, ELG_secret_key *skey )
-{
- MPI k;
- MPI t = mpi_alloc( mpi_get_nlimbs(a) );
- MPI inv = mpi_alloc( mpi_get_nlimbs(a) );
- MPI p_1 = mpi_copy(skey->p);
-
- /*
- * b = (t * inv) mod (p-1)
- * b = (t * inv(k,(p-1),(p-1)) mod (p-1)
- * b = (((M-x*a) mod (p-1)) * inv(k,(p-1),(p-1))) mod (p-1)
- *
- */
- mpi_sub_ui(p_1, p_1, 1);
- k = gen_k( skey->p );
- mpi_powm( a, skey->g, k, skey->p );
- mpi_mul(t, skey->x, a );
- mpi_subm(t, input, t, p_1 );
- while( mpi_is_neg(t) ) {
- BUG(); /* That is nonsense code - left over from a very early test?*/
- mpi_add(t, t, p_1);
- }
- mpi_invm(inv, k, p_1 );
- mpi_mulm(b, t, inv, p_1 );
-
- #if 0
- if( DBG_CIPHER ) {
- log_mpidump("elg sign p= ", skey->p);
- log_mpidump("elg sign g= ", skey->g);
- log_mpidump("elg sign y= ", skey->y);
- log_mpidump("elg sign x= ", skey->x);
- log_mpidump("elg sign k= ", k);
- log_mpidump("elg sign M= ", input);
- log_mpidump("elg sign a= ", a);
- log_mpidump("elg sign b= ", b);
- }
- #endif
- mpi_free(k);
- mpi_free(t);
- mpi_free(inv);
- mpi_free(p_1);
-}
-
-
-/****************
- * Returns true if the signature composed of A and B is valid.
- */
-static int
-verify(MPI a, MPI b, MPI input, ELG_public_key *pkey )
-{
- int rc;
- MPI t1;
- MPI t2;
- MPI base[4];
- MPI exp[4];
-
- if( !(mpi_cmp_ui( a, 0 ) > 0 && mpi_cmp( a, pkey->p ) < 0) )
- return 0; /* assertion 0 < a < p failed */
-
- t1 = mpi_alloc( mpi_get_nlimbs(a) );
- t2 = mpi_alloc( mpi_get_nlimbs(a) );
-
- #if 0
- /* t1 = (y^a mod p) * (a^b mod p) mod p */
- mpi_powm( t1, pkey->y, a, pkey->p );
- mpi_powm( t2, a, b, pkey->p );
- mpi_mulm( t1, t1, t2, pkey->p );
-
- /* t2 = g ^ input mod p */
- mpi_powm( t2, pkey->g, input, pkey->p );
-
- rc = !mpi_cmp( t1, t2 );
- #elif 0
- /* t1 = (y^a mod p) * (a^b mod p) mod p */
- base[0] = pkey->y; exp[0] = a;
- base[1] = a; exp[1] = b;
- base[2] = NULL; exp[2] = NULL;
- mpi_mulpowm( t1, base, exp, pkey->p );
-
- /* t2 = g ^ input mod p */
- mpi_powm( t2, pkey->g, input, pkey->p );
-
- rc = !mpi_cmp( t1, t2 );
- #else
- /* t1 = g ^ - input * y ^ a * a ^ b mod p */
- mpi_invm(t2, pkey->g, pkey->p );
- base[0] = t2 ; exp[0] = input;
- base[1] = pkey->y; exp[1] = a;
- base[2] = a; exp[2] = b;
- base[3] = NULL; exp[3] = NULL;
- mpi_mulpowm( t1, base, exp, pkey->p );
- rc = !mpi_cmp_ui( t1, 1 );
-
- #endif
-
- mpi_free(t1);
- mpi_free(t2);
- return rc;
-}
-
-/*********************************************
- ************** interface ******************
- *********************************************/
-
-int
-elg_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- generate( &sk, nbits, retfactors );
- skey[0] = sk.p;
- skey[1] = sk.g;
- skey[2] = sk.y;
- skey[3] = sk.x;
- return 0;
-}
-
-
-int
-elg_check_secret_key( int algo, MPI *skey )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
- if( !skey[0] || !skey[1] || !skey[2] || !skey[3] )
- return G10ERR_BAD_MPI;
-
- sk.p = skey[0];
- sk.g = skey[1];
- sk.y = skey[2];
- sk.x = skey[3];
- if( !check_secret_key( &sk ) )
- return G10ERR_BAD_SECKEY;
-
- return 0;
-}
-
-
-
-int
-elg_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{
- ELG_public_key pk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
- if( !data || !pkey[0] || !pkey[1] || !pkey[2] )
- return G10ERR_BAD_MPI;
-
- pk.p = pkey[0];
- pk.g = pkey[1];
- pk.y = pkey[2];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( pk.p ) );
- resarr[1] = mpi_alloc( mpi_get_nlimbs( pk.p ) );
- do_encrypt( resarr[0], resarr[1], data, &pk );
- return 0;
-}
-
-int
-elg_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
- if( !data[0] || !data[1]
- || !skey[0] || !skey[1] || !skey[2] || !skey[3] )
- return G10ERR_BAD_MPI;
-
- sk.p = skey[0];
- sk.g = skey[1];
- sk.y = skey[2];
- sk.x = skey[3];
- *result = mpi_alloc_secure( mpi_get_nlimbs( sk.p ) );
- decrypt( *result, data[0], data[1], &sk );
- return 0;
-}
-
-int
-elg_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- ELG_secret_key sk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
- if( !data || !skey[0] || !skey[1] || !skey[2] || !skey[3] )
- return G10ERR_BAD_MPI;
-
- sk.p = skey[0];
- sk.g = skey[1];
- sk.y = skey[2];
- sk.x = skey[3];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- resarr[1] = mpi_alloc( mpi_get_nlimbs( sk.p ) );
- sign( resarr[0], resarr[1], data, &sk );
- return 0;
-}
-
-int
-elg_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{
- ELG_public_key pk;
-
- if( !is_ELGAMAL(algo) )
- return G10ERR_PUBKEY_ALGO;
- if( !data[0] || !data[1] || !hash
- || !pkey[0] || !pkey[1] || !pkey[2] )
- return G10ERR_BAD_MPI;
-
- pk.p = pkey[0];
- pk.g = pkey[1];
- pk.y = pkey[2];
- if( !verify( data[0], data[1], hash, &pk ) )
- return G10ERR_BAD_SIGN;
- return 0;
-}
-
-
-
-unsigned int
-elg_get_nbits( int algo, MPI *pkey )
-{
- if( !is_ELGAMAL(algo) )
- return 0;
- return mpi_get_nbits( pkey[0] );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- * Usage: Bit 0 set : allows signing
- * 1 set : allows encryption
- * NOTE: This function allows signing also for ELG-E, which is not
- * okay but a bad hack to allow to work with old gpg keys. The real check
- * is done in the gnupg ocde depending on the packet version.
- */
-const char *
-elg_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig,
- int *use )
-{
- *npkey = 3;
- *nskey = 4;
- *nenc = 2;
- *nsig = 2;
-
- switch( algo ) {
- case PUBKEY_ALGO_ELGAMAL:
- *use = PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC;
- return "ELG";
- case PUBKEY_ALGO_ELGAMAL_E:
- *use = PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC;
- return "ELG-E";
- default: *use = 0; return NULL;
- }
-}
-
-
diff --git a/cipher/elgamal.h b/cipher/elgamal.h
deleted file mode 100644
index f104c2a52..000000000
--- a/cipher/elgamal.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* elgamal.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_ELGAMAL_H
-#define G10_ELGAMAL_H
-
-int elg_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
-int elg_check_secret_key( int algo, MPI *skey );
-int elg_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey );
-int elg_decrypt( int algo, MPI *result, MPI *data, MPI *skey );
-int elg_sign( int algo, MPI *resarr, MPI data, MPI *skey );
-int elg_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
-unsigned elg_get_nbits( int algo, MPI *pkey );
-const char *elg_get_info( int algo, int *npkey, int *nskey,
- int *nenc, int *nsig, int *use );
-
-
-#endif /*G10_ELGAMAL_H*/
diff --git a/cipher/g10c.c b/cipher/g10c.c
deleted file mode 100644
index 7b0f4fa61..000000000
--- a/cipher/g10c.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* g10c.c - Wrapper for cipher functions
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi.h"
-#include "random.h"
-#include "cipher.h"
-
-
-/* FIXME: The modules should use functions from libgcrypt */
-
-
-const char *g10c_revision_string(int dummy) { return "$Revision$"; }
-
-MPI
-g10c_generate_secret_prime( unsigned nbits )
-{
- return generate_secret_prime( nbits );
-}
-
-
-char *
-g10c_get_random_bits( unsigned nbits, int level, int secure )
-{
- return (char*)get_random_bits( nbits, level, secure );
-}
-
diff --git a/cipher/gost.c b/cipher/gost.c
deleted file mode 100644
index 4a527722f..000000000
--- a/cipher/gost.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* gost.c - GOST encryption
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * The description of GOST (and the used S-boxes) are taken from:
- * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
- * ISBN 0-471-11709-9. .
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "util.h"
-#include "types.h"
-#include "gost.h"
-
-#error don't use this
-
-
-void
-gost_setkey( GOST_context *c, byte *key )
-{
-}
-
-void
-gost_setiv( GOST_context *c, byte *iv )
-{
-}
-
-
-void
-gost_encode( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
-}
-
-
-void
-gost_decode( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nblocks )
-{
-}
-
-
-static void
-cfbshift( byte *iv, byte *buf, unsigned count)
-{
-}
-
-
-
-void
-gost_encode_cfb( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nbytes)
-{
-}
-
-
-void
-gost_decode_cfb( GOST_context *c, byte *outbuf, byte *inbuf, unsigned nbytes)
-{
-}
-
diff --git a/cipher/gost.h b/cipher/gost.h
deleted file mode 100644
index d8e7ebfc5..000000000
--- a/cipher/gost.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* gost.h
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_GOST_H
-#define G10_GOST_H
-
-#include "types.h"
-
-#define GOST_KEYSIZE 16
-#define GOST_BLOCKSIZE 8
-#define GOST_ROUNDS 8
-#define GOST_KEYLEN (6*GOST_ROUNDS+4)
-
-typedef struct {
- u16 ek[GOST_KEYLEN];
- u16 dk[GOST_KEYLEN];
- byte iv[GOST_BLOCKSIZE];
-} GOST_context;
-
-void gost_setkey( GOST_context *c, byte *key );
-void gost_setiv( GOST_context *c, byte *iv );
-void gost_encode( GOST_context *c, byte *out, byte *in, unsigned nblocks );
-void gost_decode( GOST_context *c, byte *out, byte *in, unsigned nblocks );
-void gost_encode_cfb( GOST_context *c, byte *outbuf,
- byte *inbuf, unsigned nbytes);
-void gost_decode_cfb( GOST_context *c, byte *outbuf,
- byte *inbuf, unsigned nbytes);
-
-
-#endif /*G10_GOST_H*/
diff --git a/cipher/idea-stub.c b/cipher/idea-stub.c
deleted file mode 100644
index 9dd0ced30..000000000
--- a/cipher/idea-stub.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* idea-stub.c - Dummy module for the deprecated IDEA cipher.
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/* IDEA is a patented algorithm and therefore the use of IDEA in
- countries where this patent is valid can not be allowed due to the
- terms of the GNU General Public License. Those restrictions are
- there to help protecting the freedom of software. For more
- information on the nonsense of software patents and the general
- problem with this, please see http://www.noepatents.org.
-
- However for research purposes and in certain situations it might be
- useful to use this algorithm anyway.
-
- We provide this stub which will dynload a idea module and is only
- used if the configure run did't found statically linked file.
- See http://www.gnupg.org/why-not-dea.html for details.
-*/
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#ifdef HAVE_DL_DLOPEN
- #include <dlfcn.h>
-#endif
-#ifdef __MINGW32__
- #include <windows.h>
-#endif
-#include "util.h"
-#include "algorithms.h"
-
-#ifndef RTLD_NOW
- #define RTLD_NOW 1
-#endif
-
-
-#ifdef __MINGW32__
-#define HAVE_DL_DLOPEN
-#define USE_DYNAMIC_LINKING
-
-static int last_error = 0;
-
-void*
-dlopen (const char *pathname, int mode)
-{
- void *h = LoadLibrary (pathname);
- if (!h)
- {
- log_error ("LoadLibrary failed ec=%d\n", (int)GetLastError());
- last_error = 1;
- return NULL;
- }
- return h;
-}
-
-int
-dlclose ( void *handle )
-{
- last_error = 0;
- return FreeLibrary (handle);
-}
-
-char*
-dlerror (void)
-{
- static char dlerrstr[10];
- if (last_error)
- {
- sprintf(dlerrstr, "%d", (int)GetLastError() );
- return dlerrstr;
- }
- return NULL;
-}
-
-void*
-dlsym ( void *handle, const char *name )
-{
- void *h = GetProcAddress (handle, name);
- if (!h)
- {
- log_error ("GetProcAddress failed ec=%d\n", (int)GetLastError());
- last_error = 1;
- }
- return h;
-}
-#endif /*__MINGW32__*/
-
-/* We do only support dlopen and the Windows emulation of it. */
-#ifndef HAVE_DL_DLOPEN
-#undef USE_DYNAMIC_LINKING
-#endif
-
-
-static void *
-load_module (const char *name)
-{
-#ifdef USE_DYNAMIC_LINKING
- const char *err;
- void *handle;
- void *sym;
-
-#ifndef __MINGW32__
- /* Make sure we are not setuid. */
- if (getuid() != geteuid())
- log_bug("trying to load an extension while still setuid\n");
-#endif
-
- handle = dlopen (name, RTLD_NOW);
- if (!name)
- {
- /*log_error ("error loading module `%s': %s\n", name, dlerror());*/
- goto failure;
- }
-
- sym = dlsym (handle, "idea_get_info");
- if (dlerror ())
- sym = dlsym (handle, "_idea_get_info");
- if ((err=dlerror()))
- {
- log_info ("invalid module `%s': %s\n", name, err);
- goto failure;
- }
-
- return sym;
-
- failure:
- if (handle)
- dlclose (handle);
-#endif /*USE_DYNAMIC_LINKING*/
- return NULL;
-}
-
-#ifdef __riscos__
-typedef
-const char *(*INFO_CAST)(int, size_t*, size_t*, size_t*,
- int (**)( void *, byte *, unsigned),
- void (**)( void *, byte *, byte *),
- void (**)( void *, byte *, byte *));
-#endif /* __riscos__ */
-
-const char *
-idea_get_info( int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey)( void *c, byte *key, unsigned keylen ),
- void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
- void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
- )
-{
- static int initialized;
- static const char * (*info_fnc)(int, size_t*, size_t*, size_t*,
- int (**)( void *, byte *, unsigned),
- void (**)( void *, byte *, byte *),
- void (**)( void *, byte *, byte *));
- const char *rstr;
- int i;
-
- if (!initialized)
- {
- initialized = 1;
- for (i=0; (rstr = dynload_enum_module_names (i)); i++)
- {
-#ifndef __riscos__
- info_fnc = load_module (rstr);
-#else /* __riscos__ */
- info_fnc = (INFO_CAST) load_module (rstr);
-#endif /* __riscos__ */
- if (info_fnc)
- break;
- }
- }
- if (!info_fnc)
- return NULL; /* dynloadable module not found. */
- rstr = info_fnc (algo, keylen, blocksize, contextsize,
- r_setkey, r_encrypt, r_decrypt);
- if (rstr && *keylen == 128 && *blocksize == 8
- && *r_setkey && *r_encrypt && r_decrypt)
- return rstr;
- return NULL;
-}
-
diff --git a/cipher/md.c b/cipher/md.c
deleted file mode 100644
index d0811e254..000000000
--- a/cipher/md.c
+++ /dev/null
@@ -1,505 +0,0 @@
-/* md.c - message digest dispatcher
- * Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "cipher.h"
-#include "errors.h"
-#include "algorithms.h"
-
-/****************
- * This structure is used for the list of available algorithms
- * and for the list of algorithms in MD_HANDLE.
- */
-struct md_digest_list_s {
- struct md_digest_list_s *next;
- const char *name;
- int algo;
- byte *asnoid;
- int asnlen;
- int mdlen;
- void (*init)( void *c );
- void (*write)( void *c, byte *buf, size_t nbytes );
- void (*final)( void *c );
- byte *(*read)( void *c );
- size_t contextsize; /* allocate this amount of context */
- PROPERLY_ALIGNED_TYPE context;
-};
-
-static struct md_digest_list_s *digest_list;
-
-
-static struct md_digest_list_s *
-new_list_item (int algo,
- const char *(*get_info)( int, size_t*,byte**, int*, int*,
- void (**)(void*),
- void (**)(void*,byte*,size_t),
- void (**)(void*),byte *(**)(void*)))
-{
- struct md_digest_list_s *r;
-
- r = m_alloc_clear (sizeof *r );
- r->algo = algo;
- r->name = (*get_info)( algo, &r->contextsize,
- &r->asnoid, &r->asnlen, &r->mdlen,
- &r->init, &r->write, &r->final, &r->read );
- if (!r->name )
- {
- m_free(r);
- r = NULL;
- }
- if (r)
- {
- r->next = digest_list;
- digest_list = r;
- }
- return r;
-}
-
-
-
-/*
- Load all available hash algorithms and return true. Subsequent
- calls will return 0.
- */
-static int
-load_digest_module (void)
-{
- static int initialized = 0;
-
- if (initialized)
- return 0;
- initialized = 1;
-
- /* We load them in reverse order so that the most
- frequently used are the first in the list. */
- if (!new_list_item (DIGEST_ALGO_TIGER, tiger_get_info))
- BUG();
- if (!new_list_item (DIGEST_ALGO_MD5, md5_get_info))
- BUG ();
- if (!new_list_item (DIGEST_ALGO_RMD160, rmd160_get_info))
- BUG ();
- if (!new_list_item (DIGEST_ALGO_SHA1, sha1_get_info))
- BUG ();
-
- return 1;
-}
-
-
-/****************
- * Map a string to the digest algo */
-int
-string_to_digest_algo( const char *string )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next )
- if( !ascii_strcasecmp( r->name, string ) )
- return r->algo;
- } while( !r && load_digest_module () );
- return 0;
-}
-
-
-/****************
- * Map a digest algo to a string
- */
-const char *
-digest_algo_to_string( int algo )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next )
- if( r->algo == algo )
- return r->name;
- } while( !r && load_digest_module () );
- return NULL;
-}
-
-
-int
-check_digest_algo( int algo )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next )
- if( r->algo == algo )
- return 0;
- } while( !r && load_digest_module () );
- return G10ERR_DIGEST_ALGO;
-}
-
-
-
-/****************
- * Open a message digest handle for use with algorithm ALGO.
- * More algorithms may be added by md_enable(). The initial algorithm
- * may be 0.
- */
-MD_HANDLE
-md_open( int algo, int secure )
-{
- MD_HANDLE hd;
- int bufsize;
-
- if( secure ) {
- bufsize = 512 - sizeof( *hd );
- hd = m_alloc_secure_clear( sizeof *hd + bufsize );
- }
- else {
- bufsize = 1024 - sizeof( *hd );
- hd = m_alloc_clear( sizeof *hd + bufsize );
- }
-
- hd->bufsize = bufsize+1; /* hd has already one byte allocated */
- hd->secure = secure;
- if( algo )
- md_enable( hd, algo );
- fast_random_poll();
- return hd;
-}
-
-void
-md_enable( MD_HANDLE h, int algo )
-{
- struct md_digest_list_s *r, *ac;
-
- for( ac=h->list; ac; ac = ac->next )
- if( ac->algo == algo )
- return ; /* already enabled */
- /* find the algorithm */
- do {
- for(r = digest_list; r; r = r->next )
- if( r->algo == algo )
- break;
- } while( !r && load_digest_module () );
- if( !r ) {
- log_error("md_enable: algorithm %d not available\n", algo );
- return;
- }
- /* and allocate a new list entry */
- ac = h->secure? m_alloc_secure( sizeof *ac + r->contextsize
- - sizeof(r->context) )
- : m_alloc( sizeof *ac + r->contextsize
- - sizeof(r->context) );
- *ac = *r;
- ac->next = h->list;
- h->list = ac;
- /* and init this instance */
- (*ac->init)( &ac->context.c );
-}
-
-
-MD_HANDLE
-md_copy( MD_HANDLE a )
-{
- MD_HANDLE b;
- struct md_digest_list_s *ar, *br;
-
- if( a->bufcount )
- md_write( a, NULL, 0 );
- b = a->secure ? m_alloc_secure( sizeof *b + a->bufsize - 1 )
- : m_alloc( sizeof *b + a->bufsize - 1 );
- memcpy( b, a, sizeof *a + a->bufsize - 1 );
- b->list = NULL;
- b->debug = NULL;
- /* and now copy the complete list of algorithms */
- /* I know that the copied list is reversed, but that doesn't matter */
- for( ar=a->list; ar; ar = ar->next ) {
- br = a->secure ? m_alloc_secure( sizeof *br + ar->contextsize
- - sizeof(ar->context) )
- : m_alloc( sizeof *br + ar->contextsize
- - sizeof(ar->context) );
- memcpy( br, ar, sizeof(*br) + ar->contextsize
- - sizeof(ar->context) );
- br->next = b->list;
- b->list = br;
- }
-
- if( a->debug )
- md_start_debug( b, "unknown" );
- return b;
-}
-
-
-/****************
- * Reset all contexts and discard any buffered stuff. This may be used
- * instead of a md_close(); md_open().
- */
-void
-md_reset( MD_HANDLE a )
-{
- struct md_digest_list_s *r;
-
- a->bufcount = a->finalized = 0;
- for( r=a->list; r; r = r->next ) {
- memset( r->context.c, 0, r->contextsize );
- (*r->init)( &r->context.c );
- }
-}
-
-
-void
-md_close(MD_HANDLE a)
-{
- struct md_digest_list_s *r, *r2;
-
- if( !a )
- return;
- if( a->debug )
- md_stop_debug(a);
- for(r=a->list; r; r = r2 ) {
- r2 = r->next;
- m_free(r);
- }
- m_free(a);
-}
-
-
-void
-md_write( MD_HANDLE a, const byte *inbuf, size_t inlen)
-{
- struct md_digest_list_s *r;
-
- if( a->debug ) {
- if( a->bufcount && fwrite(a->buffer, a->bufcount, 1, a->debug ) != 1 )
- BUG();
- if( inlen && fwrite(inbuf, inlen, 1, a->debug ) != 1 )
- BUG();
- }
- for(r=a->list; r; r = r->next ) {
- (*r->write)( &r->context.c, a->buffer, a->bufcount );
- /* Fixme: all ->write fnc should take a const byte* */
- (*r->write)( &r->context.c, (byte*)inbuf, inlen );
- }
- a->bufcount = 0;
-}
-
-
-
-void
-md_final(MD_HANDLE a)
-{
- struct md_digest_list_s *r;
-
- if( a->finalized )
- return;
-
- if( a->bufcount )
- md_write( a, NULL, 0 );
-
- for(r=a->list; r; r = r->next ) {
- (*r->final)( &r->context.c );
- }
- a->finalized = 1;
-}
-
-
-/****************
- * if ALGO is null get the digest for the used algo (which should be only one)
- */
-byte *
-md_read( MD_HANDLE a, int algo )
-{
- struct md_digest_list_s *r;
-
- if( !algo ) { /* return the first algorithm */
- if( (r=a->list) ) {
- if( r->next )
- log_debug("more than algorithm in md_read(0)\n");
- return (*r->read)( &r->context.c );
- }
- }
- else {
- for(r=a->list; r; r = r->next )
- if( r->algo == algo )
- return (*r->read)( &r->context.c );
- }
- BUG();
- return NULL;
-}
-
-
-/****************
- * This function combines md_final and md_read but keeps the context
- * intact. This function can be used to calculate intermediate
- * digests. The digest is copied into buffer and the digestlength is
- * returned. If buffer is NULL only the needed size for buffer is returned.
- * buflen gives the max size of buffer. If the buffer is too shourt to
- * hold the complete digest, the buffer is filled with as many bytes are
- * possible and this value is returned.
- */
-int
-md_digest( MD_HANDLE a, int algo, byte *buffer, int buflen )
-{
- struct md_digest_list_s *r = NULL;
- char *context;
- char *digest;
-
- if( a->bufcount )
- md_write( a, NULL, 0 );
-
- if( !algo ) { /* return digest for the first algorithm */
- if( (r=a->list) && r->next )
- log_debug("more than algorithm in md_digest(0)\n");
- }
- else {
- for(r=a->list; r; r = r->next )
- if( r->algo == algo )
- break;
- }
- if( !r )
- BUG();
-
- if( !buffer )
- return r->mdlen;
-
- /* I don't want to change the interface, so I simply work on a copy
- * the context (extra overhead - should be fixed)*/
- context = a->secure ? m_alloc_secure( r->contextsize )
- : m_alloc( r->contextsize );
- memcpy( context, r->context.c, r->contextsize );
- (*r->final)( context );
- digest = (*r->read)( context );
-
- if( buflen > r->mdlen )
- buflen = r->mdlen;
- memcpy( buffer, digest, buflen );
-
- m_free(context);
- return buflen;
-}
-
-
-int
-md_get_algo( MD_HANDLE a )
-{
- struct md_digest_list_s *r;
-
- if( (r=a->list) ) {
- if( r->next )
- log_error("WARNING: more than algorithm in md_get_algo()\n");
- return r->algo;
- }
- return 0;
-}
-
-/* Returns true if a given algo is in use in a md */
-int
-md_algo_present( MD_HANDLE a, int algo )
-{
- struct md_digest_list_s *r=a->list;
-
- while(r)
- {
- if(r->algo==algo)
- return 1;
-
- r=r->next;
- }
-
- return 0;
-}
-
-/****************
- * Return the length of the digest
- */
-int
-md_digest_length( int algo )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next ) {
- if( r->algo == algo )
- return r->mdlen;
- }
- } while( !r && load_digest_module () );
- log_error("WARNING: no length for md algo %d\n", algo);
- return 0;
-}
-
-
-/* Hmmm: add a mode to enumerate the OIDs
- * to make g10/sig-check.c more portable */
-const byte *
-md_asn_oid( int algo, size_t *asnlen, size_t *mdlen )
-{
- struct md_digest_list_s *r;
-
- do {
- for(r = digest_list; r; r = r->next ) {
- if( r->algo == algo ) {
- if( asnlen )
- *asnlen = r->asnlen;
- if( mdlen )
- *mdlen = r->mdlen;
- return r->asnoid;
- }
- }
- } while( !r && load_digest_module () );
- log_bug("no asn for md algo %d\n", algo);
- return NULL;
-}
-
-
-void
-md_start_debug( MD_HANDLE md, const char *suffix )
-{
- static int idx=0;
- char buf[25];
-
- if( md->debug ) {
- log_debug("Oops: md debug already started\n");
- return;
- }
- idx++;
- sprintf(buf, "dbgmd-%05d" EXTSEP_S "%.10s", idx, suffix );
- md->debug = fopen(buf, "w");
- if( !md->debug )
- log_debug("md debug: can't open %s\n", buf );
-}
-
-void
-md_stop_debug( MD_HANDLE md )
-{
- if( md->debug ) {
- if( md->bufcount )
- md_write( md, NULL, 0 );
- fclose(md->debug);
- md->debug = NULL;
- }
-#ifdef HAVE_U64_TYPEDEF
- { /* a kludge to pull in the __muldi3 for Solaris */
- volatile u32 a = (u32)(ulong)md;
- volatile u64 b = 42;
- volatile u64 c;
- c = a * b;
- }
-#endif
-}
diff --git a/cipher/md5.c b/cipher/md5.c
deleted file mode 100644
index ca605b6fd..000000000
--- a/cipher/md5.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/* md5.c - MD5 Message-Digest Algorithm
- * Copyright (C) 1995, 1996, 1998, 1999,
- * 2000, 2001 Free Software Foundation, Inc.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * According to the definition of MD5 in RFC 1321 from April 1992.
- * NOTE: This is *not* the same file as the one from glibc.
- */
-/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
-/* Heavily modified for GnuPG by <wk@gnupg.org> */
-
-/* Test values:
- * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E
- * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61
- * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72
- * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "algorithms.h"
-
-#include "bithelp.h"
-
-
-typedef struct {
- u32 A,B,C,D; /* chaining variables */
- u32 nblocks;
- byte buf[64];
- int count;
-} MD5_CONTEXT;
-
-
-static void
-md5_init( MD5_CONTEXT *ctx )
-{
- ctx->A = 0x67452301;
- ctx->B = 0xefcdab89;
- ctx->C = 0x98badcfe;
- ctx->D = 0x10325476;
-
- ctx->nblocks = 0;
- ctx->count = 0;
-}
-
-
-
-
-/* These are the four functions used in the four steps of the MD5 algorithm
- and defined in the RFC 1321. The first function is a little bit optimized
- (as found in Colin Plumbs public domain implementation). */
-/* #define FF(b, c, d) ((b & c) | (~b & d)) */
-#define FF(b, c, d) (d ^ (b & (c ^ d)))
-#define FG(b, c, d) FF (d, b, c)
-#define FH(b, c, d) (b ^ c ^ d)
-#define FI(b, c, d) (c ^ (b | ~d))
-
-static void
-burn_stack (int bytes)
-{
- char buf[128];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-
-/****************
- * transform n*64 bytes
- */
-static void
-/*transform( MD5_CONTEXT *ctx, const void *buffer, size_t len )*/
-transform( MD5_CONTEXT *ctx, byte *data )
-{
- u32 correct_words[16];
- u32 A = ctx->A;
- u32 B = ctx->B;
- u32 C = ctx->C;
- u32 D = ctx->D;
- u32 *cwp = correct_words;
-
- #ifdef BIG_ENDIAN_HOST
- { int i;
- byte *p2, *p1;
- for(i=0, p1=data, p2=(byte*)correct_words; i < 16; i++, p2 += 4 ) {
- p2[3] = *p1++;
- p2[2] = *p1++;
- p2[1] = *p1++;
- p2[0] = *p1++;
- }
- }
- #else
- memcpy( correct_words, data, 64 );
- #endif
-
-
-#define OP(a, b, c, d, s, T) \
- do \
- { \
- a += FF (b, c, d) + (*cwp++) + T; \
- a = rol(a, s); \
- a += b; \
- } \
- while (0)
-
- /* Before we start, one word about the strange constants.
- They are defined in RFC 1321 as
-
- T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
- */
-
- /* Round 1. */
- OP (A, B, C, D, 7, 0xd76aa478);
- OP (D, A, B, C, 12, 0xe8c7b756);
- OP (C, D, A, B, 17, 0x242070db);
- OP (B, C, D, A, 22, 0xc1bdceee);
- OP (A, B, C, D, 7, 0xf57c0faf);
- OP (D, A, B, C, 12, 0x4787c62a);
- OP (C, D, A, B, 17, 0xa8304613);
- OP (B, C, D, A, 22, 0xfd469501);
- OP (A, B, C, D, 7, 0x698098d8);
- OP (D, A, B, C, 12, 0x8b44f7af);
- OP (C, D, A, B, 17, 0xffff5bb1);
- OP (B, C, D, A, 22, 0x895cd7be);
- OP (A, B, C, D, 7, 0x6b901122);
- OP (D, A, B, C, 12, 0xfd987193);
- OP (C, D, A, B, 17, 0xa679438e);
- OP (B, C, D, A, 22, 0x49b40821);
-
-#undef OP
-#define OP(f, a, b, c, d, k, s, T) \
- do \
- { \
- a += f (b, c, d) + correct_words[k] + T; \
- a = rol(a, s); \
- a += b; \
- } \
- while (0)
-
- /* Round 2. */
- OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
- OP (FG, D, A, B, C, 6, 9, 0xc040b340);
- OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
- OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
- OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
- OP (FG, D, A, B, C, 10, 9, 0x02441453);
- OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
- OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
- OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
- OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
- OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
- OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
- OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
- OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
- OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
- OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
-
- /* Round 3. */
- OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
- OP (FH, D, A, B, C, 8, 11, 0x8771f681);
- OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
- OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
- OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
- OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
- OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
- OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
- OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
- OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
- OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
- OP (FH, B, C, D, A, 6, 23, 0x04881d05);
- OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
- OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
- OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
- OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
-
- /* Round 4. */
- OP (FI, A, B, C, D, 0, 6, 0xf4292244);
- OP (FI, D, A, B, C, 7, 10, 0x432aff97);
- OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
- OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
- OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
- OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
- OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
- OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
- OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
- OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
- OP (FI, C, D, A, B, 6, 15, 0xa3014314);
- OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
- OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
- OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
- OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
- OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
-
- /* Put checksum in context given as argument. */
- ctx->A += A;
- ctx->B += B;
- ctx->C += C;
- ctx->D += D;
-}
-
-
-
-/* The routine updates the message-digest context to
- * account for the presence of each of the characters inBuf[0..inLen-1]
- * in the message whose digest is being computed.
- */
-static void
-md5_write( MD5_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- burn_stack (80+6*sizeof(void*));
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- md5_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- burn_stack (80+6*sizeof(void*));
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-
-
-/* The routine final terminates the message-digest computation and
- * ends with the desired message digest in mdContext->digest[0...15].
- * The handle is prepared for a new MD5 cycle.
- * Returns 16 bytes representing the digest.
- */
-
-static void
-md5_final( MD5_CONTEXT *hd )
-{
- u32 t, msb, lsb;
- byte *p;
-
- md5_write(hd, NULL, 0); /* flush */;
-
- t = hd->nblocks;
- /* multiply by 64 to make a byte count */
- lsb = t << 6;
- msb = t >> 26;
- /* add the count */
- t = lsb;
- if( (lsb += hd->count) < t )
- msb++;
- /* multiply by 8 to make a bit count */
- t = lsb;
- lsb <<= 3;
- msb <<= 3;
- msb |= t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x80; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x80; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- md5_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = lsb ;
- hd->buf[57] = lsb >> 8;
- hd->buf[58] = lsb >> 16;
- hd->buf[59] = lsb >> 24;
- hd->buf[60] = msb ;
- hd->buf[61] = msb >> 8;
- hd->buf[62] = msb >> 16;
- hd->buf[63] = msb >> 24;
- transform( hd, hd->buf );
- burn_stack (80+6*sizeof(void*));
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *p++ = hd-> a ; *p++ = hd-> a >> 8; \
- *p++ = hd-> a >> 16; *p++ = hd-> a >> 24; } while(0)
- #else /* little endian */
- #define X(a) do { *(u32*)p = hd-> a ; p += 4; } while(0)
- #endif
- X(A);
- X(B);
- X(C);
- X(D);
- #undef X
-
-}
-
-static byte *
-md5_read( MD5_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-md5_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- static byte asn[18] = /* Object ID is 1.2.840.113549.2.5 */
- { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86,0x48,
- 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10 };
-
- if( algo != 1 )
- return NULL;
-
- *contextsize = sizeof(MD5_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 16;
- *(void (**)(MD5_CONTEXT *))r_init = md5_init;
- *(void (**)(MD5_CONTEXT *, byte*, size_t))r_write = md5_write;
- *(void (**)(MD5_CONTEXT *))r_final = md5_final;
- *(byte *(**)(MD5_CONTEXT *))r_read = md5_read;
-
- return "MD5";
-}
-
diff --git a/cipher/primegen.c b/cipher/primegen.c
deleted file mode 100644
index 1f3095751..000000000
--- a/cipher/primegen.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/* primegen.c - prime number generator
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- *
- * ***********************************************************************
- * The algorithm used to generate practically save primes is due to
- * Lim and Lee as described in the CRYPTO '97 proceedings (ISBN3540633847)
- * page 260.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-
-static int no_of_small_prime_numbers;
-static MPI gen_prime( unsigned nbits, int mode, int randomlevel );
-static int check_prime( MPI prime, MPI val_2 );
-static int is_prime( MPI n, int steps, int *count );
-static void m_out_of_n( char *array, int m, int n );
-
-static void (*progress_cb) ( void *, int );
-static void *progress_cb_data;
-
-void
-register_primegen_progress ( void (*cb)( void *, int), void *cb_data )
-{
- progress_cb = cb;
- progress_cb_data = cb_data;
-}
-
-
-static void
-progress( int c )
-{
- if ( progress_cb )
- progress_cb ( progress_cb_data, c );
- else
- fputc( c, stderr );
-}
-
-
-/****************
- * Generate a prime number (stored in secure memory)
- */
-MPI
-generate_secret_prime( unsigned nbits )
-{
- MPI prime;
-
- prime = gen_prime( nbits, 1, 2 );
- progress('\n');
- return prime;
-}
-
-MPI
-generate_public_prime( unsigned nbits )
-{
- MPI prime;
-
- prime = gen_prime( nbits, 0, 2 );
- progress('\n');
- return prime;
-}
-
-
-/****************
- * We do not need to use the strongest RNG because we gain no extra
- * security from it - The prime number is public and we could also
- * offer the factors for those who are willing to check that it is
- * indeed a strong prime.
- *
- * mode 0: Standard
- * 1: Make sure that at least one factor is of size qbits.
- */
-MPI
-generate_elg_prime( int mode, unsigned pbits, unsigned qbits,
- MPI g, MPI **ret_factors )
-{
- int n; /* number of factors */
- int m; /* number of primes in pool */
- unsigned fbits; /* length of prime factors */
- MPI *factors; /* current factors */
- MPI *pool; /* pool of primes */
- MPI q; /* first prime factor (variable)*/
- MPI prime; /* prime test value */
- MPI q_factor; /* used for mode 1 */
- byte *perms = NULL;
- int i, j;
- int count1, count2;
- unsigned nprime;
- unsigned req_qbits = qbits; /* the requested q bits size */
- MPI val_2 = mpi_alloc_set_ui( 2 );
-
- /* find number of needed prime factors */
- for(n=1; (pbits - qbits - 1) / n >= qbits; n++ )
- ;
- n--;
- if( !n || (mode==1 && n < 2) )
- log_fatal("can't gen prime with pbits=%u qbits=%u\n", pbits, qbits );
- if( mode == 1 ) {
- n--;
- fbits = (pbits - 2*req_qbits -1) / n;
- qbits = pbits - req_qbits - n*fbits;
- }
- else {
- fbits = (pbits - req_qbits -1) / n;
- qbits = pbits - n*fbits;
- }
- if( DBG_CIPHER )
- log_debug("gen prime: pbits=%u qbits=%u fbits=%u/%u n=%d\n",
- pbits, req_qbits, qbits, fbits, n );
- prime = mpi_alloc( (pbits + BITS_PER_MPI_LIMB - 1) / BITS_PER_MPI_LIMB );
- q = gen_prime( qbits, 0, 0 );
- q_factor = mode==1? gen_prime( req_qbits, 0, 0 ) : NULL;
-
- /* allocate an array to hold the factors + 2 for later usage */
- factors = m_alloc_clear( (n+2) * sizeof *factors );
-
- /* make a pool of 3n+5 primes (this is an arbitrary value) */
- m = n*3+5;
- if( mode == 1 )
- m += 5; /* need some more for DSA */
- if( m < 25 )
- m = 25;
- pool = m_alloc_clear( m * sizeof *pool );
-
- /* permutate over the pool of primes */
- count1=count2=0;
- do {
- next_try:
- if( !perms ) {
- /* allocate new primes */
- for(i=0; i < m; i++ ) {
- mpi_free(pool[i]);
- pool[i] = NULL;
- }
- /* init m_out_of_n() */
- perms = m_alloc_clear( m );
- for(i=0; i < n; i++ ) {
- perms[i] = 1;
- pool[i] = gen_prime( fbits, 0, 0 );
- factors[i] = pool[i];
- }
- }
- else {
- m_out_of_n( perms, n, m );
- for(i=j=0; i < m && j < n ; i++ )
- if( perms[i] ) {
- if( !pool[i] )
- pool[i] = gen_prime( fbits, 0, 0 );
- factors[j++] = pool[i];
- }
- if( i == n ) {
- m_free(perms); perms = NULL;
- progress('!');
- goto next_try; /* allocate new primes */
- }
- }
-
- mpi_set( prime, q );
- mpi_mul_ui( prime, prime, 2 );
- if( mode == 1 )
- mpi_mul( prime, prime, q_factor );
- for(i=0; i < n; i++ )
- mpi_mul( prime, prime, factors[i] );
- mpi_add_ui( prime, prime, 1 );
- nprime = mpi_get_nbits(prime);
- if( nprime < pbits ) {
- if( ++count1 > 20 ) {
- count1 = 0;
- qbits++;
- progress('>');
- mpi_free (q);
- q = gen_prime( qbits, 0, 0 );
- goto next_try;
- }
- }
- else
- count1 = 0;
- if( nprime > pbits ) {
- if( ++count2 > 20 ) {
- count2 = 0;
- qbits--;
- progress('<');
- mpi_free (q);
- q = gen_prime( qbits, 0, 0 );
- goto next_try;
- }
- }
- else
- count2 = 0;
- } while( !(nprime == pbits && check_prime( prime, val_2 )) );
-
- if( DBG_CIPHER ) {
- progress('\n');
- log_mpidump( "prime : ", prime );
- log_mpidump( "factor q: ", q );
- if( mode == 1 )
- log_mpidump( "factor q0: ", q_factor );
- for(i=0; i < n; i++ )
- log_mpidump( "factor pi: ", factors[i] );
- log_debug("bit sizes: prime=%u, q=%u", mpi_get_nbits(prime), mpi_get_nbits(q) );
- if( mode == 1 )
- fprintf(stderr, ", q0=%u", mpi_get_nbits(q_factor) );
- for(i=0; i < n; i++ )
- fprintf(stderr, ", p%d=%u", i, mpi_get_nbits(factors[i]) );
- progress('\n');
- }
-
- if( ret_factors ) { /* caller wants the factors */
- *ret_factors = m_alloc_clear( (n+2) * sizeof **ret_factors);
- i = 0;
- if( mode == 1 ) {
- (*ret_factors)[i++] = mpi_copy( q_factor );
- for(; i <= n; i++ )
- (*ret_factors)[i] = mpi_copy( factors[i-1] );
- }
- else {
- for(; i < n; i++ )
- (*ret_factors)[i] = mpi_copy( factors[i] );
- }
- }
-
- if( g ) { /* create a generator (start with 3)*/
- MPI tmp = mpi_alloc( mpi_get_nlimbs(prime) );
- MPI b = mpi_alloc( mpi_get_nlimbs(prime) );
- MPI pmin1 = mpi_alloc( mpi_get_nlimbs(prime) );
-
- if( mode == 1 )
- BUG(); /* not yet implemented */
- factors[n] = q;
- factors[n+1] = mpi_alloc_set_ui(2);
- mpi_sub_ui( pmin1, prime, 1 );
- mpi_set_ui(g,2);
- do {
- mpi_add_ui(g, g, 1);
- if( DBG_CIPHER ) {
- log_debug("checking g: ");
- mpi_print( stderr, g, 1 );
- }
- else
- progress('^');
- for(i=0; i < n+2; i++ ) {
- /*fputc('~', stderr);*/
- mpi_fdiv_q(tmp, pmin1, factors[i] );
- /* (no mpi_pow(), but it is okay to use this with mod prime) */
- mpi_powm(b, g, tmp, prime );
- if( !mpi_cmp_ui(b, 1) )
- break;
- }
- if( DBG_CIPHER )
- progress('\n');
- } while( i < n+2 );
- mpi_free(factors[n+1]);
- mpi_free(tmp);
- mpi_free(b);
- mpi_free(pmin1);
- }
- if( !DBG_CIPHER )
- progress('\n');
-
- m_free( factors ); /* (factors are shallow copies) */
- for(i=0; i < m; i++ )
- mpi_free( pool[i] );
- m_free( pool );
- m_free(perms);
- mpi_free(val_2);
- mpi_free(q);
- return prime;
-}
-
-
-
-static MPI
-gen_prime( unsigned nbits, int secret, int randomlevel )
-{
- unsigned nlimbs;
- MPI prime, ptest, pminus1, val_2, val_3, result;
- int i;
- unsigned x, step;
- int count1, count2;
- int *mods;
-
- if( 0 && DBG_CIPHER )
- log_debug("generate a prime of %u bits ", nbits );
-
- if( !no_of_small_prime_numbers ) {
- for(i=0; small_prime_numbers[i]; i++ )
- no_of_small_prime_numbers++;
- }
- mods = m_alloc( no_of_small_prime_numbers * sizeof *mods );
- /* make nbits fit into MPI implementation */
- nlimbs = (nbits + BITS_PER_MPI_LIMB - 1) / BITS_PER_MPI_LIMB;
- val_2 = mpi_alloc_set_ui( 2 );
- val_3 = mpi_alloc_set_ui( 3);
- prime = secret? mpi_alloc_secure( nlimbs ): mpi_alloc( nlimbs );
- result = mpi_alloc_like( prime );
- pminus1= mpi_alloc_like( prime );
- ptest = mpi_alloc_like( prime );
- count1 = count2 = 0;
- for(;;) { /* try forvever */
- int dotcount=0;
-
- /* generate a random number */
- { char *p = get_random_bits( nbits, randomlevel, secret );
- mpi_set_buffer( prime, p, (nbits+7)/8, 0 );
- m_free(p);
- }
-
- /* Set high order bit to 1, set low order bit to 0.
- If we are generating a secret prime we are most probably
- doing that for RSA, to make sure that the modulus does have
- the requested keysize we set the 2 high order bits */
- mpi_set_highbit( prime, nbits-1 );
- if (secret)
- mpi_set_bit (prime, nbits-2);
- mpi_set_bit( prime, 0 );
-
- /* calculate all remainders */
- for(i=0; (x = small_prime_numbers[i]); i++ )
- mods[i] = mpi_fdiv_r_ui(NULL, prime, x);
-
- /* now try some primes starting with prime */
- for(step=0; step < 20000; step += 2 ) {
- /* check against all the small primes we have in mods */
- count1++;
- for(i=0; (x = small_prime_numbers[i]); i++ ) {
- while( mods[i] + step >= x )
- mods[i] -= x;
- if( !(mods[i] + step) )
- break;
- }
- if( x )
- continue; /* found a multiple of an already known prime */
-
- mpi_add_ui( ptest, prime, step );
-
- /* do a faster Fermat test */
- count2++;
- mpi_sub_ui( pminus1, ptest, 1);
- mpi_powm( result, val_2, pminus1, ptest );
- if( !mpi_cmp_ui( result, 1 ) ) { /* not composite */
- /* perform stronger tests */
- if( is_prime(ptest, 5, &count2 ) ) {
- if( !mpi_test_bit( ptest, nbits-1 ) ) {
- progress('\n');
- log_debug("overflow in prime generation\n");
- break; /* step loop, continue with a new prime */
- }
-
- mpi_free(val_2);
- mpi_free(val_3);
- mpi_free(result);
- mpi_free(pminus1);
- mpi_free(prime);
- m_free(mods);
- return ptest;
- }
- }
- if( ++dotcount == 10 ) {
- progress('.');
- dotcount = 0;
- }
- }
- progress(':'); /* restart with a new random value */
- }
-}
-
-/****************
- * Returns: true if this may be a prime
- */
-static int
-check_prime( MPI prime, MPI val_2 )
-{
- int i;
- unsigned x;
- int count=0;
-
- /* check against small primes */
- for(i=0; (x = small_prime_numbers[i]); i++ ) {
- if( mpi_divisible_ui( prime, x ) )
- return 0;
- }
-
- /* a quick fermat test */
- {
- MPI result = mpi_alloc_like( prime );
- MPI pminus1 = mpi_alloc_like( prime );
- mpi_sub_ui( pminus1, prime, 1);
- mpi_powm( result, val_2, pminus1, prime );
- mpi_free( pminus1 );
- if( mpi_cmp_ui( result, 1 ) ) { /* if composite */
- mpi_free( result );
- progress('.');
- return 0;
- }
- mpi_free( result );
- }
-
- /* perform stronger tests */
- if( is_prime(prime, 5, &count ) )
- return 1; /* is probably a prime */
- progress('.');
- return 0;
-}
-
-
-/****************
- * Return true if n is probably a prime
- */
-static int
-is_prime( MPI n, int steps, int *count )
-{
- MPI x = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI y = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI z = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI nminus1 = mpi_alloc( mpi_get_nlimbs( n ) );
- MPI a2 = mpi_alloc_set_ui( 2 );
- MPI q;
- unsigned i, j, k;
- int rc = 0;
- unsigned nbits = mpi_get_nbits( n );
-
- mpi_sub_ui( nminus1, n, 1 );
-
- /* find q and k, so that n = 1 + 2^k * q */
- q = mpi_copy( nminus1 );
- k = mpi_trailing_zeros( q );
- mpi_tdiv_q_2exp(q, q, k);
-
- for(i=0 ; i < steps; i++ ) {
- ++*count;
- if( !i ) {
- mpi_set_ui( x, 2 );
- }
- else {
- /*mpi_set_bytes( x, nbits-1, get_random_byte, 0 );*/
- { char *p = get_random_bits( nbits, 0, 0 );
- mpi_set_buffer( x, p, (nbits+7)/8, 0 );
- m_free(p);
- }
- /* make sure that the number is smaller than the prime
- * and keep the randomness of the high bit */
- if( mpi_test_bit( x, nbits-2 ) ) {
- mpi_set_highbit( x, nbits-2 ); /* clear all higher bits */
- }
- else {
- mpi_set_highbit( x, nbits-2 );
- mpi_clear_bit( x, nbits-2 );
- }
- assert( mpi_cmp( x, nminus1 ) < 0 && mpi_cmp_ui( x, 1 ) > 0 );
- }
- mpi_powm( y, x, q, n);
- if( mpi_cmp_ui(y, 1) && mpi_cmp( y, nminus1 ) ) {
- for( j=1; j < k && mpi_cmp( y, nminus1 ); j++ ) {
- mpi_powm(y, y, a2, n);
- if( !mpi_cmp_ui( y, 1 ) )
- goto leave; /* not a prime */
- }
- if( mpi_cmp( y, nminus1 ) )
- goto leave; /* not a prime */
- }
- progress('+');
- }
- rc = 1; /* may be a prime */
-
- leave:
- mpi_free( x );
- mpi_free( y );
- mpi_free( z );
- mpi_free( nminus1 );
- mpi_free( q );
-
- return rc;
-}
-
-
-static void
-m_out_of_n( char *array, int m, int n )
-{
- int i=0, i1=0, j=0, jp=0, j1=0, k1=0, k2=0;
-
- if( !m || m >= n )
- return;
-
- if( m == 1 ) { /* special case */
- for(i=0; i < n; i++ )
- if( array[i] ) {
- array[i++] = 0;
- if( i >= n )
- i = 0;
- array[i] = 1;
- return;
- }
- BUG();
- }
-
- for(j=1; j < n; j++ ) {
- if( array[n-1] == array[n-j-1] )
- continue;
- j1 = j;
- break;
- }
-
- if( m & 1 ) { /* m is odd */
- if( array[n-1] ) {
- if( j1 & 1 ) {
- k1 = n - j1;
- k2 = k1+2;
- if( k2 > n )
- k2 = n;
- goto leave;
- }
- goto scan;
- }
- k2 = n - j1 - 1;
- if( k2 == 0 ) {
- k1 = i;
- k2 = n - j1;
- }
- else if( array[k2] && array[k2-1] )
- k1 = n;
- else
- k1 = k2 + 1;
- }
- else { /* m is even */
- if( !array[n-1] ) {
- k1 = n - j1;
- k2 = k1 + 1;
- goto leave;
- }
-
- if( !(j1 & 1) ) {
- k1 = n - j1;
- k2 = k1+2;
- if( k2 > n )
- k2 = n;
- goto leave;
- }
- scan:
- jp = n - j1 - 1;
- for(i=1; i <= jp; i++ ) {
- i1 = jp + 2 - i;
- if( array[i1-1] ) {
- if( array[i1-2] ) {
- k1 = i1 - 1;
- k2 = n - j1;
- }
- else {
- k1 = i1 - 1;
- k2 = n + 1 - j1;
- }
- goto leave;
- }
- }
- k1 = 1;
- k2 = n + 1 - m;
- }
- leave:
- array[k1-1] = !array[k1-1];
- array[k2-1] = !array[k2-1];
-}
-
diff --git a/cipher/pubkey.c b/cipher/pubkey.c
deleted file mode 100644
index 853c518be..000000000
--- a/cipher/pubkey.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/* pubkey.c - pubkey dispatcher
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "errors.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "elgamal.h"
-#include "dsa.h"
-#include "rsa.h"
-
-#define TABLE_SIZE 10
-
-struct pubkey_table_s {
- const char *name;
- int algo;
- int npkey;
- int nskey;
- int nenc;
- int nsig;
- int use;
- int (*generate)( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
- int (*check_secret_key)( int algo, MPI *skey );
- int (*encrypt)( int algo, MPI *resarr, MPI data, MPI *pkey );
- int (*decrypt)( int algo, MPI *result, MPI *data, MPI *skey );
- int (*sign)( int algo, MPI *resarr, MPI data, MPI *skey );
- int (*verify)( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
- unsigned (*get_nbits)( int algo, MPI *pkey );
-};
-
-static struct pubkey_table_s pubkey_table[TABLE_SIZE];
-static int disabled_algos[TABLE_SIZE];
-
-
-#if 0
-static int
-dummy_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{ log_bug("no generate() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_check_secret_key( int algo, MPI *skey )
-{ log_bug("no check_secret_key() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-#endif
-
-static int
-dummy_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{ log_bug("no encrypt() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{ log_bug("no decrypt() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{ log_bug("no sign() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-static int
-dummy_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{ log_bug("no verify() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; }
-
-#if 0
-static unsigned
-dummy_get_nbits( int algo, MPI *pkey )
-{ log_bug("no get_nbits() for %d\n", algo ); return 0; }
-#endif
-
-/****************
- * Put the static entries into the table.
- * This is out constructor function which fill the table
- * of algorithms with the one we have statically linked.
- */
-static void
-setup_pubkey_table(void)
-{
- int i;
-
- i = 0;
- pubkey_table[i].algo = PUBKEY_ALGO_ELGAMAL;
- pubkey_table[i].name = elg_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = elg_generate;
- pubkey_table[i].check_secret_key = elg_check_secret_key;
- pubkey_table[i].encrypt = elg_encrypt;
- pubkey_table[i].decrypt = elg_decrypt;
- pubkey_table[i].sign = elg_sign;
- pubkey_table[i].verify = elg_verify;
- pubkey_table[i].get_nbits = elg_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
- pubkey_table[i].algo = PUBKEY_ALGO_ELGAMAL_E;
- pubkey_table[i].name = elg_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = elg_generate;
- pubkey_table[i].check_secret_key = elg_check_secret_key;
- pubkey_table[i].encrypt = elg_encrypt;
- pubkey_table[i].decrypt = elg_decrypt;
- pubkey_table[i].sign = elg_sign;
- pubkey_table[i].verify = elg_verify;
- pubkey_table[i].get_nbits = elg_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
- pubkey_table[i].algo = PUBKEY_ALGO_DSA;
- pubkey_table[i].name = dsa_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = dsa_generate;
- pubkey_table[i].check_secret_key = dsa_check_secret_key;
- pubkey_table[i].encrypt = dummy_encrypt;
- pubkey_table[i].decrypt = dummy_decrypt;
- pubkey_table[i].sign = dsa_sign;
- pubkey_table[i].verify = dsa_verify;
- pubkey_table[i].get_nbits = dsa_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
-
- pubkey_table[i].algo = PUBKEY_ALGO_RSA;
- pubkey_table[i].name = rsa_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = rsa_generate;
- pubkey_table[i].check_secret_key = rsa_check_secret_key;
- pubkey_table[i].encrypt = rsa_encrypt;
- pubkey_table[i].decrypt = rsa_decrypt;
- pubkey_table[i].sign = rsa_sign;
- pubkey_table[i].verify = rsa_verify;
- pubkey_table[i].get_nbits = rsa_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
- pubkey_table[i].algo = PUBKEY_ALGO_RSA_E;
- pubkey_table[i].name = rsa_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = rsa_generate;
- pubkey_table[i].check_secret_key = rsa_check_secret_key;
- pubkey_table[i].encrypt = rsa_encrypt;
- pubkey_table[i].decrypt = rsa_decrypt;
- pubkey_table[i].sign = dummy_sign;
- pubkey_table[i].verify = dummy_verify;
- pubkey_table[i].get_nbits = rsa_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
- pubkey_table[i].algo = PUBKEY_ALGO_RSA_S;
- pubkey_table[i].name = rsa_get_info( pubkey_table[i].algo,
- &pubkey_table[i].npkey,
- &pubkey_table[i].nskey,
- &pubkey_table[i].nenc,
- &pubkey_table[i].nsig,
- &pubkey_table[i].use );
- pubkey_table[i].generate = rsa_generate;
- pubkey_table[i].check_secret_key = rsa_check_secret_key;
- pubkey_table[i].encrypt = dummy_encrypt;
- pubkey_table[i].decrypt = dummy_decrypt;
- pubkey_table[i].sign = rsa_sign;
- pubkey_table[i].verify = rsa_verify;
- pubkey_table[i].get_nbits = rsa_get_nbits;
- if( !pubkey_table[i].name )
- BUG();
- i++;
-
- for( ; i < TABLE_SIZE; i++ )
- pubkey_table[i].name = NULL;
-}
-
-
-/****************
- * Try to load all modules and return true if new modules are available
- */
-static int
-load_pubkey_modules(void)
-{
- static int initialized = 0;
-
- if( !initialized ) {
- setup_pubkey_table();
- initialized = 1;
- return 1;
- }
- return 0;
-}
-
-
-/****************
- * Map a string to the pubkey algo
- */
-int
-string_to_pubkey_algo( const char *string )
-{
- int i;
- const char *s;
-
- do {
- for(i=0; (s=pubkey_table[i].name); i++ )
- if( !ascii_strcasecmp( s, string ) )
- return pubkey_table[i].algo;
- } while( load_pubkey_modules() );
- return 0;
-}
-
-
-/****************
- * Map a pubkey algo to a string
- */
-const char *
-pubkey_algo_to_string( int algo )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].name;
- } while( load_pubkey_modules() );
- return NULL;
-}
-
-
-void
-disable_pubkey_algo( int algo )
-{
- int i;
-
- for(i=0; i < DIM(disabled_algos); i++ ) {
- if( !disabled_algos[i] || disabled_algos[i] == algo ) {
- disabled_algos[i] = algo;
- return;
- }
- }
- log_fatal("can't disable pubkey algo %d: table full\n", algo );
-}
-
-
-int
-check_pubkey_algo( int algo )
-{
- return check_pubkey_algo2( algo, 0 );
-}
-
-/****************
- * a use of 0 means: don't care
- */
-int
-check_pubkey_algo2( int algo, unsigned use )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- if( (use & PUBKEY_USAGE_SIG)
- && !(pubkey_table[i].use & PUBKEY_USAGE_SIG) )
- return G10ERR_WR_PUBKEY_ALGO;
- if( (use & PUBKEY_USAGE_ENC)
- && !(pubkey_table[i].use & PUBKEY_USAGE_ENC) )
- return G10ERR_WR_PUBKEY_ALGO;
-
- for(i=0; i < DIM(disabled_algos); i++ ) {
- if( disabled_algos[i] == algo )
- return G10ERR_PUBKEY_ALGO;
- }
- return 0; /* okay */
- }
- } while( load_pubkey_modules() );
- return G10ERR_PUBKEY_ALGO;
-}
-
-
-
-
-/****************
- * Return the number of public key material numbers
- */
-int
-pubkey_get_npkey( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].npkey;
- } while( load_pubkey_modules() );
- return 0;
-}
-
-/****************
- * Return the number of secret key material numbers
- */
-int
-pubkey_get_nskey( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].nskey;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 6; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Return the number of signature material numbers
- */
-int
-pubkey_get_nsig( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].nsig;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 1; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Return the number of encryption material numbers
- */
-int
-pubkey_get_nenc( int algo )
-{
- int i;
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return pubkey_table[i].nenc;
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* special hack, so that we are able to */
- return 1; /* see the RSA keyids */
- return 0;
-}
-
-/****************
- * Get the number of nbits from the public key
- */
-unsigned
-pubkey_nbits( int algo, MPI *pkey )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return (*pubkey_table[i].get_nbits)( algo, pkey );
- } while( load_pubkey_modules() );
- if( is_RSA(algo) ) /* we always wanna see the length of a key :-) */
- return mpi_get_nbits( pkey[0] );
- return 0;
-}
-
-
-int
-pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return (*pubkey_table[i].generate)( algo, nbits,
- skey, retfactors );
- } while( load_pubkey_modules() );
- return G10ERR_PUBKEY_ALGO;
-}
-
-
-int
-pubkey_check_secret_key( int algo, MPI *skey )
-{
- int i;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo )
- return (*pubkey_table[i].check_secret_key)( algo, skey );
- } while( load_pubkey_modules() );
- return G10ERR_PUBKEY_ALGO;
-}
-
-
-/****************
- * This is the interface to the public key encryption.
- * Encrypt DATA with PKEY and put it into RESARR which
- * should be an array of MPIs of size PUBKEY_MAX_NENC (or less if the
- * algorithm allows this - check with pubkey_get_nenc() )
- */
-int
-pubkey_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{
- int i, rc;
-
- if( DBG_CIPHER ) {
- log_debug("pubkey_encrypt: algo=%d\n", algo );
- for(i=0; i < pubkey_get_npkey(algo); i++ )
- log_mpidump(" pkey:", pkey[i] );
- log_mpidump(" data:", data );
- }
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].encrypt)( algo, resarr, data, pkey );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- if( !rc && DBG_CIPHER ) {
- for(i=0; i < pubkey_get_nenc(algo); i++ )
- log_mpidump(" encr:", resarr[i] );
- }
- return rc;
-}
-
-
-
-/****************
- * This is the interface to the public key decryption.
- * ALGO gives the algorithm to use and this implicitly determines
- * the size of the arrays.
- * result is a pointer to a mpi variable which will receive a
- * newly allocated mpi or NULL in case of an error.
- */
-int
-pubkey_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{
- int i, rc;
-
- *result = NULL; /* so the caller can always do an mpi_free */
- if( DBG_CIPHER ) {
- log_debug("pubkey_decrypt: algo=%d\n", algo );
- for(i=0; i < pubkey_get_nskey(algo); i++ )
- log_mpidump(" skey:", skey[i] );
- for(i=0; i < pubkey_get_nenc(algo); i++ )
- log_mpidump(" data:", data[i] );
- }
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].decrypt)( algo, result, data, skey );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- if( !rc && DBG_CIPHER ) {
- log_mpidump(" plain:", *result );
- }
- return rc;
-}
-
-
-/****************
- * This is the interface to the public key signing.
- * Sign data with skey and put the result into resarr which
- * should be an array of MPIs of size PUBKEY_MAX_NSIG (or less if the
- * algorithm allows this - check with pubkey_get_nsig() )
- */
-int
-pubkey_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- int i, rc;
-
- if( DBG_CIPHER ) {
- log_debug("pubkey_sign: algo=%d\n", algo );
- for(i=0; i < pubkey_get_nskey(algo); i++ )
- log_mpidump(" skey:", skey[i] );
- log_mpidump(" data:", data );
- }
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].sign)( algo, resarr, data, skey );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- if( !rc && DBG_CIPHER ) {
- for(i=0; i < pubkey_get_nsig(algo); i++ )
- log_mpidump(" sig:", resarr[i] );
- }
- return rc;
-}
-
-/****************
- * Verify a public key signature.
- * Return 0 if the signature is good
- */
-int
-pubkey_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev )
-{
- int i, rc;
-
- do {
- for(i=0; pubkey_table[i].name; i++ )
- if( pubkey_table[i].algo == algo ) {
- rc = (*pubkey_table[i].verify)( algo, hash, data, pkey,
- cmp, opaquev );
- goto ready;
- }
- } while( load_pubkey_modules() );
- rc = G10ERR_PUBKEY_ALGO;
- ready:
- return rc;
-}
-
diff --git a/cipher/rand-internal.h b/cipher/rand-internal.h
deleted file mode 100644
index ab01bc6db..000000000
--- a/cipher/rand-internal.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* rand-internal.h - header to glue the random functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_RAND_INTERNAL_H
-#define G10_RAND_INTERNAL_H
-
-int rndunix_gather_random (void (*add)(const void*, size_t, int),
- int requester, size_t length, int level);
-int rndlinux_gather_random (void (*add)(const void*, size_t, int),
- int requester, size_t length, int level);
-int rndegd_connect_socket (int nofail);
-int rndegd_gather_random (void (*add)(const void*, size_t, int),
- int requester, size_t length, int level );
-int rndw32_gather_random (void (*add)(const void*, size_t, int),
- int requester, size_t length, int level);
-int rndw32_gather_random_fast (void (*add)(const void*, size_t, int),
- int requester );
-int rndriscos_gather_random (void (*add)(const void*, size_t, int),
- int requester, size_t length, int level);
-
-
-#endif /*G10_RAND_INTERNAL_H*/
diff --git a/cipher/random.c b/cipher/random.c
deleted file mode 100644
index c2dea9c28..000000000
--- a/cipher/random.c
+++ /dev/null
@@ -1,749 +0,0 @@
-/* random.c - random number generator
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-/****************
- * This random number generator is modelled after the one described
- * in Peter Gutmann's Paper: "Software Generation of Practically
- * Strong Random Numbers".
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-#include <time.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#ifdef HAVE_GETHRTIME
- #include <sys/times.h>
-#endif
-#ifdef HAVE_GETTIMEOFDAY
- #include <sys/times.h>
-#endif
-#ifdef HAVE_GETRUSAGE
- #include <sys/resource.h>
-#endif
-#ifdef __MINGW32__
- #include <process.h>
-#endif
-#include "util.h"
-#include "rmd.h"
-#include "ttyio.h"
-#include "i18n.h"
-#include "random.h"
-#include "rand-internal.h"
-#include "algorithms.h"
-
-#ifndef RAND_MAX /* for SunOS */
- #define RAND_MAX 32767
-#endif
-
-
-#if SIZEOF_UNSIGNED_LONG == 8
- #define ADD_VALUE 0xa5a5a5a5a5a5a5a5
-#elif SIZEOF_UNSIGNED_LONG == 4
- #define ADD_VALUE 0xa5a5a5a5
-#else
- #error weird size for an unsigned long
-#endif
-
-#define BLOCKLEN 64 /* hash this amount of bytes */
-#define DIGESTLEN 20 /* into a digest of this length (rmd160) */
-/* poolblocks is the number of digests which make up the pool
- * and poolsize must be a multiple of the digest length
- * to make the AND operations faster, the size should also be
- * a multiple of ulong
- */
-#define POOLBLOCKS 30
-#define POOLSIZE (POOLBLOCKS*DIGESTLEN)
-#if (POOLSIZE % SIZEOF_UNSIGNED_LONG)
- #error Please make sure that poolsize is a multiple of ulong
-#endif
-#define POOLWORDS (POOLSIZE / SIZEOF_UNSIGNED_LONG)
-
-
-static int is_initialized;
-#define MASK_LEVEL(a) do {if( a > 2 ) a = 2; else if( a < 0 ) a = 0; } while(0)
-static char *rndpool; /* allocated size is POOLSIZE+BLOCKLEN */
-static char *keypool; /* allocated size is POOLSIZE+BLOCKLEN */
-static size_t pool_readpos;
-static size_t pool_writepos;
-static int pool_filled;
-static int pool_balance;
-static int just_mixed;
-static int did_initial_extra_seeding;
-static char *seed_file_name;
-static int allow_seed_file_update;
-
-static int secure_alloc;
-static int quick_test;
-static int faked_rng;
-
-
-static void read_pool( byte *buffer, size_t length, int level );
-static void add_randomness( const void *buffer, size_t length, int source );
-static void random_poll(void);
-static void read_random_source( int requester, size_t length, int level);
-static int gather_faked( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level );
-
-static struct {
- ulong mixrnd;
- ulong mixkey;
- ulong slowpolls;
- ulong fastpolls;
- ulong getbytes1;
- ulong ngetbytes1;
- ulong getbytes2;
- ulong ngetbytes2;
- ulong addbytes;
- ulong naddbytes;
-} rndstats;
-
-
-static int (*
-getfnc_gather_random (void))(void (*)(const void*, size_t, int), int,
- size_t, int)
-{
-#ifdef USE_ALL_RANDOM_MODULES
- static int (*fnc)(void (*)(const void*, size_t, int), int, size_t, int);
-
- if (fnc)
- return fnc;
-# ifdef USE_RNDLINUX
- if ( !access (NAME_OF_DEV_RANDOM, R_OK)
- && !access (NAME_OF_DEV_RANDOM, R_OK))
- {
- fnc = rndlinux_gather_random;
- return fnc;
- }
-# endif
-# ifdef USE_RNDEGD
- if ( rndegd_connect_socket (1) != -1 )
- {
- fnc = rndegd_gather_random;
- return fnc;
- }
-# endif
-# ifdef USE_RNDUNIX
- fnc = rndunix_gather_random;
- return fnc;
-# endif
-
- log_fatal (_("no entropy gathering module detected\n"));
-
-#else
-# ifdef USE_RNDLINUX
- return rndlinux_gather_random;
-# endif
-# ifdef USE_RNDUNIX
- return rndunix_gather_random;
-# endif
-# ifdef USE_RNDEGD
- return rndegd_gather_random;
-# endif
-# ifdef USE_RNDW32
- return rndw32_gather_random;
-# endif
-# ifdef USE_RNDRISCOS
- return rndriscos_gather_random;
-# endif
-#endif
- return NULL;
-}
-
-static void (*
-getfnc_fast_random_poll (void))( void (*)(const void*, size_t, int), int)
-{
-#ifdef USE_RNDW32
- return rndw32_gather_random_fast;
-#endif
- return NULL;
-}
-
-
-
-static void
-initialize(void)
-{
- /* The data buffer is allocated somewhat larger, so that
- * we can use this extra space (which is allocated in secure memory)
- * as a temporary hash buffer */
- rndpool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
- : m_alloc_clear(POOLSIZE+BLOCKLEN);
- keypool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
- : m_alloc_clear(POOLSIZE+BLOCKLEN);
- is_initialized = 1;
-}
-
-static void
-burn_stack (int bytes)
-{
- char buf[128];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-void
-random_dump_stats()
-{
- fprintf(stderr,
- "random usage: poolsize=%d mixed=%lu polls=%lu/%lu added=%lu/%lu\n"
- " outmix=%lu getlvl1=%lu/%lu getlvl2=%lu/%lu\n",
- POOLSIZE, rndstats.mixrnd, rndstats.slowpolls, rndstats.fastpolls,
- rndstats.naddbytes, rndstats.addbytes,
- rndstats.mixkey, rndstats.ngetbytes1, rndstats.getbytes1,
- rndstats.ngetbytes2, rndstats.getbytes2 );
-}
-
-void
-secure_random_alloc()
-{
- secure_alloc = 1;
-}
-
-
-int
-quick_random_gen( int onoff )
-{
- int last;
-
- read_random_source(0,0,0); /* init */
- last = quick_test;
- if( onoff != -1 )
- quick_test = onoff;
- return faked_rng? 1 : last;
-}
-
-
-/****************
- * Fill the buffer with LENGTH bytes of cryptographically strong
- * random bytes. level 0 is not very strong, 1 is strong enough
- * for most usage, 2 is good for key generation stuff but may be very slow.
- */
-void
-randomize_buffer( byte *buffer, size_t length, int level )
-{
- char *p = get_random_bits( length*8, level, 1 );
- memcpy( buffer, p, length );
- m_free(p);
-}
-
-
-int
-random_is_faked()
-{
- if( !is_initialized )
- initialize();
- return faked_rng || quick_test;
-}
-
-/****************
- * Return a pointer to a randomized buffer of level 0 and LENGTH bits
- * caller must free the buffer.
- * Note: The returned value is rounded up to bytes.
- */
-byte *
-get_random_bits( size_t nbits, int level, int secure )
-{
- byte *buf, *p;
- size_t nbytes = (nbits+7)/8;
-
- if( quick_test && level > 1 )
- level = 1;
- MASK_LEVEL(level);
- if( level == 1 ) {
- rndstats.getbytes1 += nbytes;
- rndstats.ngetbytes1++;
- }
- else if( level >= 2 ) {
- rndstats.getbytes2 += nbytes;
- rndstats.ngetbytes2++;
- }
-
- buf = secure && secure_alloc ? m_alloc_secure( nbytes ) : m_alloc( nbytes );
- for( p = buf; nbytes > 0; ) {
- size_t n = nbytes > POOLSIZE? POOLSIZE : nbytes;
- read_pool( p, n, level );
- nbytes -= n;
- p += n;
- }
- return buf;
-}
-
-
-/****************
- * Mix the pool
- */
-static void
-mix_pool(byte *pool)
-{
- char *hashbuf = pool + POOLSIZE;
- char *p, *pend;
- int i, n;
- RMD160_CONTEXT md;
-
- rmd160_init( &md );
- #if DIGESTLEN != 20
- #error must have a digest length of 20 for ripe-md-160
- #endif
- /* loop over the pool */
- pend = pool + POOLSIZE;
- memcpy(hashbuf, pend - DIGESTLEN, DIGESTLEN );
- memcpy(hashbuf+DIGESTLEN, pool, BLOCKLEN-DIGESTLEN);
- rmd160_mixblock( &md, hashbuf);
- memcpy(pool, hashbuf, 20 );
-
- p = pool;
- for( n=1; n < POOLBLOCKS; n++ ) {
- memcpy(hashbuf, p, DIGESTLEN );
-
- p += DIGESTLEN;
- if( p+DIGESTLEN+BLOCKLEN < pend )
- memcpy(hashbuf+DIGESTLEN, p+DIGESTLEN, BLOCKLEN-DIGESTLEN);
- else {
- char *pp = p+DIGESTLEN;
- for(i=DIGESTLEN; i < BLOCKLEN; i++ ) {
- if( pp >= pend )
- pp = pool;
- hashbuf[i] = *pp++;
- }
- }
-
- rmd160_mixblock( &md, hashbuf);
- memcpy(p, hashbuf, 20 );
- }
- burn_stack (384); /* for the rmd160_mixblock() */
-}
-
-
-void
-set_random_seed_file( const char *name )
-{
- if( seed_file_name )
- BUG();
- seed_file_name = m_strdup( name );
-}
-
-/****************
- * Read in a seed form the random_seed file
- * and return true if this was successful
- */
-static int
-read_seed_file(void)
-{
- int fd;
- struct stat sb;
- unsigned char buffer[POOLSIZE];
- int n;
-
- if( !seed_file_name )
- return 0;
-
- #ifdef HAVE_DOSISH_SYSTEM
- fd = open( seed_file_name, O_RDONLY | O_BINARY );
- #else
- fd = open( seed_file_name, O_RDONLY );
- #endif
- if( fd == -1 && errno == ENOENT) {
- allow_seed_file_update = 1;
- return 0;
- }
-
- if( fd == -1 ) {
- log_info(_("can't open `%s': %s\n"), seed_file_name, strerror(errno) );
- return 0;
- }
- if( fstat( fd, &sb ) ) {
- log_info(_("can't stat `%s': %s\n"), seed_file_name, strerror(errno) );
- close(fd);
- return 0;
- }
- if( !S_ISREG(sb.st_mode) ) {
- log_info(_("`%s' is not a regular file - ignored\n"), seed_file_name );
- close(fd);
- return 0;
- }
- if( !sb.st_size ) {
- log_info(_("note: random_seed file is empty\n") );
- close(fd);
- allow_seed_file_update = 1;
- return 0;
- }
- if( sb.st_size != POOLSIZE ) {
- log_info(_("WARNING: invalid size of random_seed file - not used\n") );
- close(fd);
- return 0;
- }
- do {
- n = read( fd, buffer, POOLSIZE );
- } while( n == -1 && errno == EINTR );
- if( n != POOLSIZE ) {
- log_fatal(_("can't read `%s': %s\n"), seed_file_name,strerror(errno) );
- close(fd);
- return 0;
- }
-
- close(fd);
-
- add_randomness( buffer, POOLSIZE, 0 );
- /* add some minor entropy to the pool now (this will also force a mixing) */
- { pid_t x = getpid();
- add_randomness( &x, sizeof(x), 0 );
- }
- { time_t x = time(NULL);
- add_randomness( &x, sizeof(x), 0 );
- }
- { clock_t x = clock();
- add_randomness( &x, sizeof(x), 0 );
- }
- /* And read a few bytes from our entropy source. By using
- * a level of 0 this will not block and might not return anything
- * with some entropy drivers, however the rndlinux driver will use
- * /dev/urandom and return some stuff - Do not read to much as we
- * want to be friendly to the scare system entropy resource. */
- read_random_source( 0, 16, 0 );
-
- allow_seed_file_update = 1;
- return 1;
-}
-
-void
-update_random_seed_file()
-{
- ulong *sp, *dp;
- int fd, i;
-
- if( !seed_file_name || !is_initialized || !pool_filled )
- return;
- if( !allow_seed_file_update ) {
- log_info(_("note: random_seed file not updated\n"));
- return;
- }
-
-
- /* copy the entropy pool to a scratch pool and mix both of them */
- for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool;
- i < POOLWORDS; i++, dp++, sp++ ) {
- *dp = *sp + ADD_VALUE;
- }
- mix_pool(rndpool); rndstats.mixrnd++;
- mix_pool(keypool); rndstats.mixkey++;
-
- #ifdef HAVE_DOSISH_SYSTEM
- fd = open( seed_file_name, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY,
- S_IRUSR|S_IWUSR );
- #else
- fd = open( seed_file_name, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR );
- #endif
- if( fd == -1 ) {
- log_info(_("can't create `%s': %s\n"), seed_file_name, strerror(errno) );
- return;
- }
- do {
- i = write( fd, keypool, POOLSIZE );
- } while( i == -1 && errno == EINTR );
- if( i != POOLSIZE ) {
- log_info(_("can't write `%s': %s\n"), seed_file_name, strerror(errno) );
- }
- if( close(fd) )
- log_info(_("can't close `%s': %s\n"), seed_file_name, strerror(errno) );
-}
-
-
-static void
-read_pool( byte *buffer, size_t length, int level )
-{
- int i;
- ulong *sp, *dp;
-
- if( length > POOLSIZE ) {
- log_bug("too many random bits requested\n");
- }
-
- if( !pool_filled ) {
- if( read_seed_file() )
- pool_filled = 1;
- }
-
- /* For level 2 quality (key generation) we alwas make
- * sure that the pool has been seeded enough initially */
- if( level == 2 && !did_initial_extra_seeding ) {
- size_t needed;
-
- pool_balance = 0;
- needed = length - pool_balance;
- if( needed < POOLSIZE/2 )
- needed = POOLSIZE/2;
- else if( needed > POOLSIZE )
- BUG();
- read_random_source( 3, needed, 2 );
- pool_balance += needed;
- did_initial_extra_seeding=1;
- }
-
- /* for level 2 make sure that there is enough random in the pool */
- if( level == 2 && pool_balance < length ) {
- size_t needed;
-
- if( pool_balance < 0 )
- pool_balance = 0;
- needed = length - pool_balance;
- if( needed > POOLSIZE )
- BUG();
- read_random_source( 3, needed, 2 );
- pool_balance += needed;
- }
-
- /* make sure the pool is filled */
- while( !pool_filled )
- random_poll();
-
- /* do always a fast random poll */
- fast_random_poll();
-
- if( !level ) { /* no need for cryptographic strong random */
- /* create a new pool */
- for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool;
- i < POOLWORDS; i++, dp++, sp++ )
- *dp = *sp + ADD_VALUE;
- /* must mix both pools */
- mix_pool(rndpool); rndstats.mixrnd++;
- mix_pool(keypool); rndstats.mixkey++;
- memcpy( buffer, keypool, length );
- }
- else {
- /* mix the pool (if add_randomness() didn't it) */
- if( !just_mixed ) {
- mix_pool(rndpool);
- rndstats.mixrnd++;
- }
- /* create a new pool */
- for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool;
- i < POOLWORDS; i++, dp++, sp++ )
- *dp = *sp + ADD_VALUE;
- /* and mix both pools */
- mix_pool(rndpool); rndstats.mixrnd++;
- mix_pool(keypool); rndstats.mixkey++;
- /* read the required data
- * we use a readpoiter to read from a different postion each
- * time */
- while( length-- ) {
- *buffer++ = keypool[pool_readpos++];
- if( pool_readpos >= POOLSIZE )
- pool_readpos = 0;
- pool_balance--;
- }
- if( pool_balance < 0 )
- pool_balance = 0;
- /* and clear the keypool */
- memset( keypool, 0, POOLSIZE );
- }
-}
-
-
-/****************
- * Add LENGTH bytes of randomness from buffer to the pool.
- * source may be used to specify the randomness source.
- * Source is:
- * 0 - used ony for initialization
- * 1 - fast random poll function
- * 2 - normal poll function
- * 3 - used when level 2 random quality has been requested
- * to do an extra pool seed.
- */
-static void
-add_randomness( const void *buffer, size_t length, int source )
-{
- const byte *p = buffer;
-
- if( !is_initialized )
- initialize();
- rndstats.addbytes += length;
- rndstats.naddbytes++;
- while( length-- ) {
- rndpool[pool_writepos++] ^= *p++;
- if( pool_writepos >= POOLSIZE ) {
- if( source > 1 )
- pool_filled = 1;
- pool_writepos = 0;
- mix_pool(rndpool); rndstats.mixrnd++;
- just_mixed = !length;
- }
- }
-}
-
-
-
-static void
-random_poll()
-{
- rndstats.slowpolls++;
- read_random_source( 2, POOLSIZE/5, 1 );
-}
-
-
-void
-fast_random_poll()
-{
- static void (*fnc)( void (*)(const void*, size_t, int), int) = NULL;
- static int initialized = 0;
-
- rndstats.fastpolls++;
- if( !initialized ) {
- if( !is_initialized )
- initialize();
- initialized = 1;
- fnc = getfnc_fast_random_poll();
- }
- if( fnc ) {
- (*fnc)( add_randomness, 1 );
- return;
- }
-
- /* fall back to the generic function */
- #if defined(HAVE_GETHRTIME) && !defined(HAVE_BROKEN_GETHRTIME)
- { hrtime_t tv;
- /* On some Solaris and HPUX system gethrtime raises an SIGILL, but we
- * checked this with configure */
- tv = gethrtime();
- add_randomness( &tv, sizeof(tv), 1 );
- }
- #elif defined (HAVE_GETTIMEOFDAY)
- { struct timeval tv;
- if( gettimeofday( &tv, NULL ) )
- BUG();
- add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
- add_randomness( &tv.tv_usec, sizeof(tv.tv_usec), 1 );
- }
- #elif defined (HAVE_CLOCK_GETTIME)
- { struct timespec tv;
- if( clock_gettime( CLOCK_REALTIME, &tv ) == -1 )
- BUG();
- add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
- add_randomness( &tv.tv_nsec, sizeof(tv.tv_nsec), 1 );
- }
- #else /* use times */
- #ifndef HAVE_DOSISH_SYSTEM
- { struct tms buf;
- times( &buf );
- add_randomness( &buf, sizeof buf, 1 );
- }
- #endif
- #endif
- #ifdef HAVE_GETRUSAGE
- #ifndef RUSAGE_SELF
- #ifdef __GCC__
- #warning There is no RUSAGE_SELF on this system
- #endif
- #else
- { struct rusage buf;
- /* QNX/Neutrino does return ENOSYS - so we just ignore it and
- * add whatever is in buf. In a chroot environment it might not
- * work at all (i.e. because /proc/ is not accessible), so we better
- * ignore all error codes and hope for the best
- */
- getrusage( RUSAGE_SELF, &buf );
-
- add_randomness( &buf, sizeof buf, 1 );
- memset( &buf, 0, sizeof buf );
- }
- #endif
- #endif
- /* time and clock are available on all systems - so
- * we better do it just in case one of the above functions
- * didn't work */
- { time_t x = time(NULL);
- add_randomness( &x, sizeof(x), 1 );
- }
- { clock_t x = clock();
- add_randomness( &x, sizeof(x), 1 );
- }
-}
-
-
-
-static void
-read_random_source( int requester, size_t length, int level )
-{
- static int (*fnc)(void (*)(const void*, size_t, int), int,
- size_t, int) = NULL;
- if( !fnc ) {
- if( !is_initialized )
- initialize();
- fnc = getfnc_gather_random();
- if( !fnc ) {
- faked_rng = 1;
- fnc = gather_faked;
- }
- if( !requester && !length && !level )
- return; /* init only */
- }
- if( (*fnc)( add_randomness, requester, length, level ) < 0 )
- log_fatal("No way to gather entropy for the RNG\n");
-}
-
-
-static int
-gather_faked( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static int initialized=0;
- size_t n;
- char *buffer, *p;
-
- if( !initialized ) {
- log_info(_("WARNING: using insecure random number generator!!\n"));
- tty_printf(_("The random number generator is only a kludge to let\n"
- "it run - it is in no way a strong RNG!\n\n"
- "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n\n"));
- initialized=1;
- #ifdef HAVE_RAND
- srand(make_timestamp()*getpid());
- #else
- srandom(make_timestamp()*getpid());
- #endif
- }
-
- p = buffer = m_alloc( length );
- n = length;
- #ifdef HAVE_RAND
- while( n-- )
- *p++ = ((unsigned)(1 + (int) (256.0*rand()/(RAND_MAX+1.0)))-1);
- #else
- while( n-- )
- *p++ = ((unsigned)(1 + (int) (256.0*random()/(RAND_MAX+1.0)))-1);
- #endif
- add_randomness( buffer, length, requester );
- m_free(buffer);
- return 0; /* okay */
-}
-
-
diff --git a/cipher/random.h b/cipher/random.h
deleted file mode 100644
index f4ba918bd..000000000
--- a/cipher/random.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* random.h - random functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_RANDOM_H
-#define G10_RANDOM_H
-
-#include "types.h"
-
-/*-- random.c --*/
-void random_dump_stats(void);
-void secure_random_alloc(void);
-void set_random_seed_file(const char *);
-void update_random_seed_file(void);
-int quick_random_gen( int onoff );
-int random_is_faked(void);
-void randomize_buffer( byte *buffer, size_t length, int level );
-byte *get_random_bits( size_t nbits, int level, int secure );
-void fast_random_poll( void );
-
-/*-- rndw32.c --*/
-#ifdef USE_STATIC_RNDW32
-void rndw32_set_dll_name( const char *name );
-#endif
-
-#endif /*G10_RANDOM_H*/
diff --git a/cipher/rijndael.c b/cipher/rijndael.c
deleted file mode 100644
index 62c5bc23a..000000000
--- a/cipher/rijndael.c
+++ /dev/null
@@ -1,2234 +0,0 @@
-/* Rijndael (AES) for GnuPG
- * Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- *******************************************************************
- * The code here is based on the optimized implementation taken from
- * http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ on Oct 2, 2000,
- * which carries this notice:
- *------------------------------------------
- * rijndael-alg-fst.c v2.3 April '2000
- *
- * Optimised ANSI C code
- *
- * authors: v1.0: Antoon Bosselaers
- * v2.0: Vincent Rijmen
- * v2.3: Paulo Barreto
- *
- * This code is placed in the public domain.
- *------------------------------------------
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h> /* for memcmp() */
-
-#include "types.h" /* for byte and u32 typedefs */
-#include "util.h"
-#include "errors.h"
-#include "algorithms.h"
-
-#define MAXKC (256/32)
-#define MAXROUNDS 14
-
-
-static const char *selftest(void);
-
-typedef struct {
- int ROUNDS; /* key-length-dependent number of rounds */
- int decryption_prepared;
- byte keySched[MAXROUNDS+1][4][4]; /* key schedule */
- byte keySched2[MAXROUNDS+1][4][4]; /* key schedule */
-} RIJNDAEL_context;
-
-
-static const byte S[256] = {
- 99, 124, 119, 123, 242, 107, 111, 197,
- 48, 1, 103, 43, 254, 215, 171, 118,
- 202, 130, 201, 125, 250, 89, 71, 240,
- 173, 212, 162, 175, 156, 164, 114, 192,
- 183, 253, 147, 38, 54, 63, 247, 204,
- 52, 165, 229, 241, 113, 216, 49, 21,
- 4, 199, 35, 195, 24, 150, 5, 154,
- 7, 18, 128, 226, 235, 39, 178, 117,
- 9, 131, 44, 26, 27, 110, 90, 160,
- 82, 59, 214, 179, 41, 227, 47, 132,
- 83, 209, 0, 237, 32, 252, 177, 91,
- 106, 203, 190, 57, 74, 76, 88, 207,
- 208, 239, 170, 251, 67, 77, 51, 133,
- 69, 249, 2, 127, 80, 60, 159, 168,
- 81, 163, 64, 143, 146, 157, 56, 245,
- 188, 182, 218, 33, 16, 255, 243, 210,
- 205, 12, 19, 236, 95, 151, 68, 23,
- 196, 167, 126, 61, 100, 93, 25, 115,
- 96, 129, 79, 220, 34, 42, 144, 136,
- 70, 238, 184, 20, 222, 94, 11, 219,
- 224, 50, 58, 10, 73, 6, 36, 92,
- 194, 211, 172, 98, 145, 149, 228, 121,
- 231, 200, 55, 109, 141, 213, 78, 169,
- 108, 86, 244, 234, 101, 122, 174, 8,
- 186, 120, 37, 46, 28, 166, 180, 198,
- 232, 221, 116, 31, 75, 189, 139, 138,
- 112, 62, 181, 102, 72, 3, 246, 14,
- 97, 53, 87, 185, 134, 193, 29, 158,
- 225, 248, 152, 17, 105, 217, 142, 148,
- 155, 30, 135, 233, 206, 85, 40, 223,
- 140, 161, 137, 13, 191, 230, 66, 104,
- 65, 153, 45, 15, 176, 84, 187, 22
-};
-
-
-static const byte T1[256][4] = {
- { 0xc6,0x63,0x63,0xa5 }, { 0xf8,0x7c,0x7c,0x84 },
- { 0xee,0x77,0x77,0x99 }, { 0xf6,0x7b,0x7b,0x8d },
- { 0xff,0xf2,0xf2,0x0d }, { 0xd6,0x6b,0x6b,0xbd },
- { 0xde,0x6f,0x6f,0xb1 }, { 0x91,0xc5,0xc5,0x54 },
- { 0x60,0x30,0x30,0x50 }, { 0x02,0x01,0x01,0x03 },
- { 0xce,0x67,0x67,0xa9 }, { 0x56,0x2b,0x2b,0x7d },
- { 0xe7,0xfe,0xfe,0x19 }, { 0xb5,0xd7,0xd7,0x62 },
- { 0x4d,0xab,0xab,0xe6 }, { 0xec,0x76,0x76,0x9a },
- { 0x8f,0xca,0xca,0x45 }, { 0x1f,0x82,0x82,0x9d },
- { 0x89,0xc9,0xc9,0x40 }, { 0xfa,0x7d,0x7d,0x87 },
- { 0xef,0xfa,0xfa,0x15 }, { 0xb2,0x59,0x59,0xeb },
- { 0x8e,0x47,0x47,0xc9 }, { 0xfb,0xf0,0xf0,0x0b },
- { 0x41,0xad,0xad,0xec }, { 0xb3,0xd4,0xd4,0x67 },
- { 0x5f,0xa2,0xa2,0xfd }, { 0x45,0xaf,0xaf,0xea },
- { 0x23,0x9c,0x9c,0xbf }, { 0x53,0xa4,0xa4,0xf7 },
- { 0xe4,0x72,0x72,0x96 }, { 0x9b,0xc0,0xc0,0x5b },
- { 0x75,0xb7,0xb7,0xc2 }, { 0xe1,0xfd,0xfd,0x1c },
- { 0x3d,0x93,0x93,0xae }, { 0x4c,0x26,0x26,0x6a },
- { 0x6c,0x36,0x36,0x5a }, { 0x7e,0x3f,0x3f,0x41 },
- { 0xf5,0xf7,0xf7,0x02 }, { 0x83,0xcc,0xcc,0x4f },
- { 0x68,0x34,0x34,0x5c }, { 0x51,0xa5,0xa5,0xf4 },
- { 0xd1,0xe5,0xe5,0x34 }, { 0xf9,0xf1,0xf1,0x08 },
- { 0xe2,0x71,0x71,0x93 }, { 0xab,0xd8,0xd8,0x73 },
- { 0x62,0x31,0x31,0x53 }, { 0x2a,0x15,0x15,0x3f },
- { 0x08,0x04,0x04,0x0c }, { 0x95,0xc7,0xc7,0x52 },
- { 0x46,0x23,0x23,0x65 }, { 0x9d,0xc3,0xc3,0x5e },
- { 0x30,0x18,0x18,0x28 }, { 0x37,0x96,0x96,0xa1 },
- { 0x0a,0x05,0x05,0x0f }, { 0x2f,0x9a,0x9a,0xb5 },
- { 0x0e,0x07,0x07,0x09 }, { 0x24,0x12,0x12,0x36 },
- { 0x1b,0x80,0x80,0x9b }, { 0xdf,0xe2,0xe2,0x3d },
- { 0xcd,0xeb,0xeb,0x26 }, { 0x4e,0x27,0x27,0x69 },
- { 0x7f,0xb2,0xb2,0xcd }, { 0xea,0x75,0x75,0x9f },
- { 0x12,0x09,0x09,0x1b }, { 0x1d,0x83,0x83,0x9e },
- { 0x58,0x2c,0x2c,0x74 }, { 0x34,0x1a,0x1a,0x2e },
- { 0x36,0x1b,0x1b,0x2d }, { 0xdc,0x6e,0x6e,0xb2 },
- { 0xb4,0x5a,0x5a,0xee }, { 0x5b,0xa0,0xa0,0xfb },
- { 0xa4,0x52,0x52,0xf6 }, { 0x76,0x3b,0x3b,0x4d },
- { 0xb7,0xd6,0xd6,0x61 }, { 0x7d,0xb3,0xb3,0xce },
- { 0x52,0x29,0x29,0x7b }, { 0xdd,0xe3,0xe3,0x3e },
- { 0x5e,0x2f,0x2f,0x71 }, { 0x13,0x84,0x84,0x97 },
- { 0xa6,0x53,0x53,0xf5 }, { 0xb9,0xd1,0xd1,0x68 },
- { 0x00,0x00,0x00,0x00 }, { 0xc1,0xed,0xed,0x2c },
- { 0x40,0x20,0x20,0x60 }, { 0xe3,0xfc,0xfc,0x1f },
- { 0x79,0xb1,0xb1,0xc8 }, { 0xb6,0x5b,0x5b,0xed },
- { 0xd4,0x6a,0x6a,0xbe }, { 0x8d,0xcb,0xcb,0x46 },
- { 0x67,0xbe,0xbe,0xd9 }, { 0x72,0x39,0x39,0x4b },
- { 0x94,0x4a,0x4a,0xde }, { 0x98,0x4c,0x4c,0xd4 },
- { 0xb0,0x58,0x58,0xe8 }, { 0x85,0xcf,0xcf,0x4a },
- { 0xbb,0xd0,0xd0,0x6b }, { 0xc5,0xef,0xef,0x2a },
- { 0x4f,0xaa,0xaa,0xe5 }, { 0xed,0xfb,0xfb,0x16 },
- { 0x86,0x43,0x43,0xc5 }, { 0x9a,0x4d,0x4d,0xd7 },
- { 0x66,0x33,0x33,0x55 }, { 0x11,0x85,0x85,0x94 },
- { 0x8a,0x45,0x45,0xcf }, { 0xe9,0xf9,0xf9,0x10 },
- { 0x04,0x02,0x02,0x06 }, { 0xfe,0x7f,0x7f,0x81 },
- { 0xa0,0x50,0x50,0xf0 }, { 0x78,0x3c,0x3c,0x44 },
- { 0x25,0x9f,0x9f,0xba }, { 0x4b,0xa8,0xa8,0xe3 },
- { 0xa2,0x51,0x51,0xf3 }, { 0x5d,0xa3,0xa3,0xfe },
- { 0x80,0x40,0x40,0xc0 }, { 0x05,0x8f,0x8f,0x8a },
- { 0x3f,0x92,0x92,0xad }, { 0x21,0x9d,0x9d,0xbc },
- { 0x70,0x38,0x38,0x48 }, { 0xf1,0xf5,0xf5,0x04 },
- { 0x63,0xbc,0xbc,0xdf }, { 0x77,0xb6,0xb6,0xc1 },
- { 0xaf,0xda,0xda,0x75 }, { 0x42,0x21,0x21,0x63 },
- { 0x20,0x10,0x10,0x30 }, { 0xe5,0xff,0xff,0x1a },
- { 0xfd,0xf3,0xf3,0x0e }, { 0xbf,0xd2,0xd2,0x6d },
- { 0x81,0xcd,0xcd,0x4c }, { 0x18,0x0c,0x0c,0x14 },
- { 0x26,0x13,0x13,0x35 }, { 0xc3,0xec,0xec,0x2f },
- { 0xbe,0x5f,0x5f,0xe1 }, { 0x35,0x97,0x97,0xa2 },
- { 0x88,0x44,0x44,0xcc }, { 0x2e,0x17,0x17,0x39 },
- { 0x93,0xc4,0xc4,0x57 }, { 0x55,0xa7,0xa7,0xf2 },
- { 0xfc,0x7e,0x7e,0x82 }, { 0x7a,0x3d,0x3d,0x47 },
- { 0xc8,0x64,0x64,0xac }, { 0xba,0x5d,0x5d,0xe7 },
- { 0x32,0x19,0x19,0x2b }, { 0xe6,0x73,0x73,0x95 },
- { 0xc0,0x60,0x60,0xa0 }, { 0x19,0x81,0x81,0x98 },
- { 0x9e,0x4f,0x4f,0xd1 }, { 0xa3,0xdc,0xdc,0x7f },
- { 0x44,0x22,0x22,0x66 }, { 0x54,0x2a,0x2a,0x7e },
- { 0x3b,0x90,0x90,0xab }, { 0x0b,0x88,0x88,0x83 },
- { 0x8c,0x46,0x46,0xca }, { 0xc7,0xee,0xee,0x29 },
- { 0x6b,0xb8,0xb8,0xd3 }, { 0x28,0x14,0x14,0x3c },
- { 0xa7,0xde,0xde,0x79 }, { 0xbc,0x5e,0x5e,0xe2 },
- { 0x16,0x0b,0x0b,0x1d }, { 0xad,0xdb,0xdb,0x76 },
- { 0xdb,0xe0,0xe0,0x3b }, { 0x64,0x32,0x32,0x56 },
- { 0x74,0x3a,0x3a,0x4e }, { 0x14,0x0a,0x0a,0x1e },
- { 0x92,0x49,0x49,0xdb }, { 0x0c,0x06,0x06,0x0a },
- { 0x48,0x24,0x24,0x6c }, { 0xb8,0x5c,0x5c,0xe4 },
- { 0x9f,0xc2,0xc2,0x5d }, { 0xbd,0xd3,0xd3,0x6e },
- { 0x43,0xac,0xac,0xef }, { 0xc4,0x62,0x62,0xa6 },
- { 0x39,0x91,0x91,0xa8 }, { 0x31,0x95,0x95,0xa4 },
- { 0xd3,0xe4,0xe4,0x37 }, { 0xf2,0x79,0x79,0x8b },
- { 0xd5,0xe7,0xe7,0x32 }, { 0x8b,0xc8,0xc8,0x43 },
- { 0x6e,0x37,0x37,0x59 }, { 0xda,0x6d,0x6d,0xb7 },
- { 0x01,0x8d,0x8d,0x8c }, { 0xb1,0xd5,0xd5,0x64 },
- { 0x9c,0x4e,0x4e,0xd2 }, { 0x49,0xa9,0xa9,0xe0 },
- { 0xd8,0x6c,0x6c,0xb4 }, { 0xac,0x56,0x56,0xfa },
- { 0xf3,0xf4,0xf4,0x07 }, { 0xcf,0xea,0xea,0x25 },
- { 0xca,0x65,0x65,0xaf }, { 0xf4,0x7a,0x7a,0x8e },
- { 0x47,0xae,0xae,0xe9 }, { 0x10,0x08,0x08,0x18 },
- { 0x6f,0xba,0xba,0xd5 }, { 0xf0,0x78,0x78,0x88 },
- { 0x4a,0x25,0x25,0x6f }, { 0x5c,0x2e,0x2e,0x72 },
- { 0x38,0x1c,0x1c,0x24 }, { 0x57,0xa6,0xa6,0xf1 },
- { 0x73,0xb4,0xb4,0xc7 }, { 0x97,0xc6,0xc6,0x51 },
- { 0xcb,0xe8,0xe8,0x23 }, { 0xa1,0xdd,0xdd,0x7c },
- { 0xe8,0x74,0x74,0x9c }, { 0x3e,0x1f,0x1f,0x21 },
- { 0x96,0x4b,0x4b,0xdd }, { 0x61,0xbd,0xbd,0xdc },
- { 0x0d,0x8b,0x8b,0x86 }, { 0x0f,0x8a,0x8a,0x85 },
- { 0xe0,0x70,0x70,0x90 }, { 0x7c,0x3e,0x3e,0x42 },
- { 0x71,0xb5,0xb5,0xc4 }, { 0xcc,0x66,0x66,0xaa },
- { 0x90,0x48,0x48,0xd8 }, { 0x06,0x03,0x03,0x05 },
- { 0xf7,0xf6,0xf6,0x01 }, { 0x1c,0x0e,0x0e,0x12 },
- { 0xc2,0x61,0x61,0xa3 }, { 0x6a,0x35,0x35,0x5f },
- { 0xae,0x57,0x57,0xf9 }, { 0x69,0xb9,0xb9,0xd0 },
- { 0x17,0x86,0x86,0x91 }, { 0x99,0xc1,0xc1,0x58 },
- { 0x3a,0x1d,0x1d,0x27 }, { 0x27,0x9e,0x9e,0xb9 },
- { 0xd9,0xe1,0xe1,0x38 }, { 0xeb,0xf8,0xf8,0x13 },
- { 0x2b,0x98,0x98,0xb3 }, { 0x22,0x11,0x11,0x33 },
- { 0xd2,0x69,0x69,0xbb }, { 0xa9,0xd9,0xd9,0x70 },
- { 0x07,0x8e,0x8e,0x89 }, { 0x33,0x94,0x94,0xa7 },
- { 0x2d,0x9b,0x9b,0xb6 }, { 0x3c,0x1e,0x1e,0x22 },
- { 0x15,0x87,0x87,0x92 }, { 0xc9,0xe9,0xe9,0x20 },
- { 0x87,0xce,0xce,0x49 }, { 0xaa,0x55,0x55,0xff },
- { 0x50,0x28,0x28,0x78 }, { 0xa5,0xdf,0xdf,0x7a },
- { 0x03,0x8c,0x8c,0x8f }, { 0x59,0xa1,0xa1,0xf8 },
- { 0x09,0x89,0x89,0x80 }, { 0x1a,0x0d,0x0d,0x17 },
- { 0x65,0xbf,0xbf,0xda }, { 0xd7,0xe6,0xe6,0x31 },
- { 0x84,0x42,0x42,0xc6 }, { 0xd0,0x68,0x68,0xb8 },
- { 0x82,0x41,0x41,0xc3 }, { 0x29,0x99,0x99,0xb0 },
- { 0x5a,0x2d,0x2d,0x77 }, { 0x1e,0x0f,0x0f,0x11 },
- { 0x7b,0xb0,0xb0,0xcb }, { 0xa8,0x54,0x54,0xfc },
- { 0x6d,0xbb,0xbb,0xd6 }, { 0x2c,0x16,0x16,0x3a }
-};
-
-static const byte T2[256][4] = {
- { 0xa5,0xc6,0x63,0x63 }, { 0x84,0xf8,0x7c,0x7c },
- { 0x99,0xee,0x77,0x77 }, { 0x8d,0xf6,0x7b,0x7b },
- { 0x0d,0xff,0xf2,0xf2 }, { 0xbd,0xd6,0x6b,0x6b },
- { 0xb1,0xde,0x6f,0x6f }, { 0x54,0x91,0xc5,0xc5 },
- { 0x50,0x60,0x30,0x30 }, { 0x03,0x02,0x01,0x01 },
- { 0xa9,0xce,0x67,0x67 }, { 0x7d,0x56,0x2b,0x2b },
- { 0x19,0xe7,0xfe,0xfe }, { 0x62,0xb5,0xd7,0xd7 },
- { 0xe6,0x4d,0xab,0xab }, { 0x9a,0xec,0x76,0x76 },
- { 0x45,0x8f,0xca,0xca }, { 0x9d,0x1f,0x82,0x82 },
- { 0x40,0x89,0xc9,0xc9 }, { 0x87,0xfa,0x7d,0x7d },
- { 0x15,0xef,0xfa,0xfa }, { 0xeb,0xb2,0x59,0x59 },
- { 0xc9,0x8e,0x47,0x47 }, { 0x0b,0xfb,0xf0,0xf0 },
- { 0xec,0x41,0xad,0xad }, { 0x67,0xb3,0xd4,0xd4 },
- { 0xfd,0x5f,0xa2,0xa2 }, { 0xea,0x45,0xaf,0xaf },
- { 0xbf,0x23,0x9c,0x9c }, { 0xf7,0x53,0xa4,0xa4 },
- { 0x96,0xe4,0x72,0x72 }, { 0x5b,0x9b,0xc0,0xc0 },
- { 0xc2,0x75,0xb7,0xb7 }, { 0x1c,0xe1,0xfd,0xfd },
- { 0xae,0x3d,0x93,0x93 }, { 0x6a,0x4c,0x26,0x26 },
- { 0x5a,0x6c,0x36,0x36 }, { 0x41,0x7e,0x3f,0x3f },
- { 0x02,0xf5,0xf7,0xf7 }, { 0x4f,0x83,0xcc,0xcc },
- { 0x5c,0x68,0x34,0x34 }, { 0xf4,0x51,0xa5,0xa5 },
- { 0x34,0xd1,0xe5,0xe5 }, { 0x08,0xf9,0xf1,0xf1 },
- { 0x93,0xe2,0x71,0x71 }, { 0x73,0xab,0xd8,0xd8 },
- { 0x53,0x62,0x31,0x31 }, { 0x3f,0x2a,0x15,0x15 },
- { 0x0c,0x08,0x04,0x04 }, { 0x52,0x95,0xc7,0xc7 },
- { 0x65,0x46,0x23,0x23 }, { 0x5e,0x9d,0xc3,0xc3 },
- { 0x28,0x30,0x18,0x18 }, { 0xa1,0x37,0x96,0x96 },
- { 0x0f,0x0a,0x05,0x05 }, { 0xb5,0x2f,0x9a,0x9a },
- { 0x09,0x0e,0x07,0x07 }, { 0x36,0x24,0x12,0x12 },
- { 0x9b,0x1b,0x80,0x80 }, { 0x3d,0xdf,0xe2,0xe2 },
- { 0x26,0xcd,0xeb,0xeb }, { 0x69,0x4e,0x27,0x27 },
- { 0xcd,0x7f,0xb2,0xb2 }, { 0x9f,0xea,0x75,0x75 },
- { 0x1b,0x12,0x09,0x09 }, { 0x9e,0x1d,0x83,0x83 },
- { 0x74,0x58,0x2c,0x2c }, { 0x2e,0x34,0x1a,0x1a },
- { 0x2d,0x36,0x1b,0x1b }, { 0xb2,0xdc,0x6e,0x6e },
- { 0xee,0xb4,0x5a,0x5a }, { 0xfb,0x5b,0xa0,0xa0 },
- { 0xf6,0xa4,0x52,0x52 }, { 0x4d,0x76,0x3b,0x3b },
- { 0x61,0xb7,0xd6,0xd6 }, { 0xce,0x7d,0xb3,0xb3 },
- { 0x7b,0x52,0x29,0x29 }, { 0x3e,0xdd,0xe3,0xe3 },
- { 0x71,0x5e,0x2f,0x2f }, { 0x97,0x13,0x84,0x84 },
- { 0xf5,0xa6,0x53,0x53 }, { 0x68,0xb9,0xd1,0xd1 },
- { 0x00,0x00,0x00,0x00 }, { 0x2c,0xc1,0xed,0xed },
- { 0x60,0x40,0x20,0x20 }, { 0x1f,0xe3,0xfc,0xfc },
- { 0xc8,0x79,0xb1,0xb1 }, { 0xed,0xb6,0x5b,0x5b },
- { 0xbe,0xd4,0x6a,0x6a }, { 0x46,0x8d,0xcb,0xcb },
- { 0xd9,0x67,0xbe,0xbe }, { 0x4b,0x72,0x39,0x39 },
- { 0xde,0x94,0x4a,0x4a }, { 0xd4,0x98,0x4c,0x4c },
- { 0xe8,0xb0,0x58,0x58 }, { 0x4a,0x85,0xcf,0xcf },
- { 0x6b,0xbb,0xd0,0xd0 }, { 0x2a,0xc5,0xef,0xef },
- { 0xe5,0x4f,0xaa,0xaa }, { 0x16,0xed,0xfb,0xfb },
- { 0xc5,0x86,0x43,0x43 }, { 0xd7,0x9a,0x4d,0x4d },
- { 0x55,0x66,0x33,0x33 }, { 0x94,0x11,0x85,0x85 },
- { 0xcf,0x8a,0x45,0x45 }, { 0x10,0xe9,0xf9,0xf9 },
- { 0x06,0x04,0x02,0x02 }, { 0x81,0xfe,0x7f,0x7f },
- { 0xf0,0xa0,0x50,0x50 }, { 0x44,0x78,0x3c,0x3c },
- { 0xba,0x25,0x9f,0x9f }, { 0xe3,0x4b,0xa8,0xa8 },
- { 0xf3,0xa2,0x51,0x51 }, { 0xfe,0x5d,0xa3,0xa3 },
- { 0xc0,0x80,0x40,0x40 }, { 0x8a,0x05,0x8f,0x8f },
- { 0xad,0x3f,0x92,0x92 }, { 0xbc,0x21,0x9d,0x9d },
- { 0x48,0x70,0x38,0x38 }, { 0x04,0xf1,0xf5,0xf5 },
- { 0xdf,0x63,0xbc,0xbc }, { 0xc1,0x77,0xb6,0xb6 },
- { 0x75,0xaf,0xda,0xda }, { 0x63,0x42,0x21,0x21 },
- { 0x30,0x20,0x10,0x10 }, { 0x1a,0xe5,0xff,0xff },
- { 0x0e,0xfd,0xf3,0xf3 }, { 0x6d,0xbf,0xd2,0xd2 },
- { 0x4c,0x81,0xcd,0xcd }, { 0x14,0x18,0x0c,0x0c },
- { 0x35,0x26,0x13,0x13 }, { 0x2f,0xc3,0xec,0xec },
- { 0xe1,0xbe,0x5f,0x5f }, { 0xa2,0x35,0x97,0x97 },
- { 0xcc,0x88,0x44,0x44 }, { 0x39,0x2e,0x17,0x17 },
- { 0x57,0x93,0xc4,0xc4 }, { 0xf2,0x55,0xa7,0xa7 },
- { 0x82,0xfc,0x7e,0x7e }, { 0x47,0x7a,0x3d,0x3d },
- { 0xac,0xc8,0x64,0x64 }, { 0xe7,0xba,0x5d,0x5d },
- { 0x2b,0x32,0x19,0x19 }, { 0x95,0xe6,0x73,0x73 },
- { 0xa0,0xc0,0x60,0x60 }, { 0x98,0x19,0x81,0x81 },
- { 0xd1,0x9e,0x4f,0x4f }, { 0x7f,0xa3,0xdc,0xdc },
- { 0x66,0x44,0x22,0x22 }, { 0x7e,0x54,0x2a,0x2a },
- { 0xab,0x3b,0x90,0x90 }, { 0x83,0x0b,0x88,0x88 },
- { 0xca,0x8c,0x46,0x46 }, { 0x29,0xc7,0xee,0xee },
- { 0xd3,0x6b,0xb8,0xb8 }, { 0x3c,0x28,0x14,0x14 },
- { 0x79,0xa7,0xde,0xde }, { 0xe2,0xbc,0x5e,0x5e },
- { 0x1d,0x16,0x0b,0x0b }, { 0x76,0xad,0xdb,0xdb },
- { 0x3b,0xdb,0xe0,0xe0 }, { 0x56,0x64,0x32,0x32 },
- { 0x4e,0x74,0x3a,0x3a }, { 0x1e,0x14,0x0a,0x0a },
- { 0xdb,0x92,0x49,0x49 }, { 0x0a,0x0c,0x06,0x06 },
- { 0x6c,0x48,0x24,0x24 }, { 0xe4,0xb8,0x5c,0x5c },
- { 0x5d,0x9f,0xc2,0xc2 }, { 0x6e,0xbd,0xd3,0xd3 },
- { 0xef,0x43,0xac,0xac }, { 0xa6,0xc4,0x62,0x62 },
- { 0xa8,0x39,0x91,0x91 }, { 0xa4,0x31,0x95,0x95 },
- { 0x37,0xd3,0xe4,0xe4 }, { 0x8b,0xf2,0x79,0x79 },
- { 0x32,0xd5,0xe7,0xe7 }, { 0x43,0x8b,0xc8,0xc8 },
- { 0x59,0x6e,0x37,0x37 }, { 0xb7,0xda,0x6d,0x6d },
- { 0x8c,0x01,0x8d,0x8d }, { 0x64,0xb1,0xd5,0xd5 },
- { 0xd2,0x9c,0x4e,0x4e }, { 0xe0,0x49,0xa9,0xa9 },
- { 0xb4,0xd8,0x6c,0x6c }, { 0xfa,0xac,0x56,0x56 },
- { 0x07,0xf3,0xf4,0xf4 }, { 0x25,0xcf,0xea,0xea },
- { 0xaf,0xca,0x65,0x65 }, { 0x8e,0xf4,0x7a,0x7a },
- { 0xe9,0x47,0xae,0xae }, { 0x18,0x10,0x08,0x08 },
- { 0xd5,0x6f,0xba,0xba }, { 0x88,0xf0,0x78,0x78 },
- { 0x6f,0x4a,0x25,0x25 }, { 0x72,0x5c,0x2e,0x2e },
- { 0x24,0x38,0x1c,0x1c }, { 0xf1,0x57,0xa6,0xa6 },
- { 0xc7,0x73,0xb4,0xb4 }, { 0x51,0x97,0xc6,0xc6 },
- { 0x23,0xcb,0xe8,0xe8 }, { 0x7c,0xa1,0xdd,0xdd },
- { 0x9c,0xe8,0x74,0x74 }, { 0x21,0x3e,0x1f,0x1f },
- { 0xdd,0x96,0x4b,0x4b }, { 0xdc,0x61,0xbd,0xbd },
- { 0x86,0x0d,0x8b,0x8b }, { 0x85,0x0f,0x8a,0x8a },
- { 0x90,0xe0,0x70,0x70 }, { 0x42,0x7c,0x3e,0x3e },
- { 0xc4,0x71,0xb5,0xb5 }, { 0xaa,0xcc,0x66,0x66 },
- { 0xd8,0x90,0x48,0x48 }, { 0x05,0x06,0x03,0x03 },
- { 0x01,0xf7,0xf6,0xf6 }, { 0x12,0x1c,0x0e,0x0e },
- { 0xa3,0xc2,0x61,0x61 }, { 0x5f,0x6a,0x35,0x35 },
- { 0xf9,0xae,0x57,0x57 }, { 0xd0,0x69,0xb9,0xb9 },
- { 0x91,0x17,0x86,0x86 }, { 0x58,0x99,0xc1,0xc1 },
- { 0x27,0x3a,0x1d,0x1d }, { 0xb9,0x27,0x9e,0x9e },
- { 0x38,0xd9,0xe1,0xe1 }, { 0x13,0xeb,0xf8,0xf8 },
- { 0xb3,0x2b,0x98,0x98 }, { 0x33,0x22,0x11,0x11 },
- { 0xbb,0xd2,0x69,0x69 }, { 0x70,0xa9,0xd9,0xd9 },
- { 0x89,0x07,0x8e,0x8e }, { 0xa7,0x33,0x94,0x94 },
- { 0xb6,0x2d,0x9b,0x9b }, { 0x22,0x3c,0x1e,0x1e },
- { 0x92,0x15,0x87,0x87 }, { 0x20,0xc9,0xe9,0xe9 },
- { 0x49,0x87,0xce,0xce }, { 0xff,0xaa,0x55,0x55 },
- { 0x78,0x50,0x28,0x28 }, { 0x7a,0xa5,0xdf,0xdf },
- { 0x8f,0x03,0x8c,0x8c }, { 0xf8,0x59,0xa1,0xa1 },
- { 0x80,0x09,0x89,0x89 }, { 0x17,0x1a,0x0d,0x0d },
- { 0xda,0x65,0xbf,0xbf }, { 0x31,0xd7,0xe6,0xe6 },
- { 0xc6,0x84,0x42,0x42 }, { 0xb8,0xd0,0x68,0x68 },
- { 0xc3,0x82,0x41,0x41 }, { 0xb0,0x29,0x99,0x99 },
- { 0x77,0x5a,0x2d,0x2d }, { 0x11,0x1e,0x0f,0x0f },
- { 0xcb,0x7b,0xb0,0xb0 }, { 0xfc,0xa8,0x54,0x54 },
- { 0xd6,0x6d,0xbb,0xbb }, { 0x3a,0x2c,0x16,0x16 }
-};
-
-static const byte T3[256][4] = {
- { 0x63,0xa5,0xc6,0x63 }, { 0x7c,0x84,0xf8,0x7c },
- { 0x77,0x99,0xee,0x77 }, { 0x7b,0x8d,0xf6,0x7b },
- { 0xf2,0x0d,0xff,0xf2 }, { 0x6b,0xbd,0xd6,0x6b },
- { 0x6f,0xb1,0xde,0x6f }, { 0xc5,0x54,0x91,0xc5 },
- { 0x30,0x50,0x60,0x30 }, { 0x01,0x03,0x02,0x01 },
- { 0x67,0xa9,0xce,0x67 }, { 0x2b,0x7d,0x56,0x2b },
- { 0xfe,0x19,0xe7,0xfe }, { 0xd7,0x62,0xb5,0xd7 },
- { 0xab,0xe6,0x4d,0xab }, { 0x76,0x9a,0xec,0x76 },
- { 0xca,0x45,0x8f,0xca }, { 0x82,0x9d,0x1f,0x82 },
- { 0xc9,0x40,0x89,0xc9 }, { 0x7d,0x87,0xfa,0x7d },
- { 0xfa,0x15,0xef,0xfa }, { 0x59,0xeb,0xb2,0x59 },
- { 0x47,0xc9,0x8e,0x47 }, { 0xf0,0x0b,0xfb,0xf0 },
- { 0xad,0xec,0x41,0xad }, { 0xd4,0x67,0xb3,0xd4 },
- { 0xa2,0xfd,0x5f,0xa2 }, { 0xaf,0xea,0x45,0xaf },
- { 0x9c,0xbf,0x23,0x9c }, { 0xa4,0xf7,0x53,0xa4 },
- { 0x72,0x96,0xe4,0x72 }, { 0xc0,0x5b,0x9b,0xc0 },
- { 0xb7,0xc2,0x75,0xb7 }, { 0xfd,0x1c,0xe1,0xfd },
- { 0x93,0xae,0x3d,0x93 }, { 0x26,0x6a,0x4c,0x26 },
- { 0x36,0x5a,0x6c,0x36 }, { 0x3f,0x41,0x7e,0x3f },
- { 0xf7,0x02,0xf5,0xf7 }, { 0xcc,0x4f,0x83,0xcc },
- { 0x34,0x5c,0x68,0x34 }, { 0xa5,0xf4,0x51,0xa5 },
- { 0xe5,0x34,0xd1,0xe5 }, { 0xf1,0x08,0xf9,0xf1 },
- { 0x71,0x93,0xe2,0x71 }, { 0xd8,0x73,0xab,0xd8 },
- { 0x31,0x53,0x62,0x31 }, { 0x15,0x3f,0x2a,0x15 },
- { 0x04,0x0c,0x08,0x04 }, { 0xc7,0x52,0x95,0xc7 },
- { 0x23,0x65,0x46,0x23 }, { 0xc3,0x5e,0x9d,0xc3 },
- { 0x18,0x28,0x30,0x18 }, { 0x96,0xa1,0x37,0x96 },
- { 0x05,0x0f,0x0a,0x05 }, { 0x9a,0xb5,0x2f,0x9a },
- { 0x07,0x09,0x0e,0x07 }, { 0x12,0x36,0x24,0x12 },
- { 0x80,0x9b,0x1b,0x80 }, { 0xe2,0x3d,0xdf,0xe2 },
- { 0xeb,0x26,0xcd,0xeb }, { 0x27,0x69,0x4e,0x27 },
- { 0xb2,0xcd,0x7f,0xb2 }, { 0x75,0x9f,0xea,0x75 },
- { 0x09,0x1b,0x12,0x09 }, { 0x83,0x9e,0x1d,0x83 },
- { 0x2c,0x74,0x58,0x2c }, { 0x1a,0x2e,0x34,0x1a },
- { 0x1b,0x2d,0x36,0x1b }, { 0x6e,0xb2,0xdc,0x6e },
- { 0x5a,0xee,0xb4,0x5a }, { 0xa0,0xfb,0x5b,0xa0 },
- { 0x52,0xf6,0xa4,0x52 }, { 0x3b,0x4d,0x76,0x3b },
- { 0xd6,0x61,0xb7,0xd6 }, { 0xb3,0xce,0x7d,0xb3 },
- { 0x29,0x7b,0x52,0x29 }, { 0xe3,0x3e,0xdd,0xe3 },
- { 0x2f,0x71,0x5e,0x2f }, { 0x84,0x97,0x13,0x84 },
- { 0x53,0xf5,0xa6,0x53 }, { 0xd1,0x68,0xb9,0xd1 },
- { 0x00,0x00,0x00,0x00 }, { 0xed,0x2c,0xc1,0xed },
- { 0x20,0x60,0x40,0x20 }, { 0xfc,0x1f,0xe3,0xfc },
- { 0xb1,0xc8,0x79,0xb1 }, { 0x5b,0xed,0xb6,0x5b },
- { 0x6a,0xbe,0xd4,0x6a }, { 0xcb,0x46,0x8d,0xcb },
- { 0xbe,0xd9,0x67,0xbe }, { 0x39,0x4b,0x72,0x39 },
- { 0x4a,0xde,0x94,0x4a }, { 0x4c,0xd4,0x98,0x4c },
- { 0x58,0xe8,0xb0,0x58 }, { 0xcf,0x4a,0x85,0xcf },
- { 0xd0,0x6b,0xbb,0xd0 }, { 0xef,0x2a,0xc5,0xef },
- { 0xaa,0xe5,0x4f,0xaa }, { 0xfb,0x16,0xed,0xfb },
- { 0x43,0xc5,0x86,0x43 }, { 0x4d,0xd7,0x9a,0x4d },
- { 0x33,0x55,0x66,0x33 }, { 0x85,0x94,0x11,0x85 },
- { 0x45,0xcf,0x8a,0x45 }, { 0xf9,0x10,0xe9,0xf9 },
- { 0x02,0x06,0x04,0x02 }, { 0x7f,0x81,0xfe,0x7f },
- { 0x50,0xf0,0xa0,0x50 }, { 0x3c,0x44,0x78,0x3c },
- { 0x9f,0xba,0x25,0x9f }, { 0xa8,0xe3,0x4b,0xa8 },
- { 0x51,0xf3,0xa2,0x51 }, { 0xa3,0xfe,0x5d,0xa3 },
- { 0x40,0xc0,0x80,0x40 }, { 0x8f,0x8a,0x05,0x8f },
- { 0x92,0xad,0x3f,0x92 }, { 0x9d,0xbc,0x21,0x9d },
- { 0x38,0x48,0x70,0x38 }, { 0xf5,0x04,0xf1,0xf5 },
- { 0xbc,0xdf,0x63,0xbc }, { 0xb6,0xc1,0x77,0xb6 },
- { 0xda,0x75,0xaf,0xda }, { 0x21,0x63,0x42,0x21 },
- { 0x10,0x30,0x20,0x10 }, { 0xff,0x1a,0xe5,0xff },
- { 0xf3,0x0e,0xfd,0xf3 }, { 0xd2,0x6d,0xbf,0xd2 },
- { 0xcd,0x4c,0x81,0xcd }, { 0x0c,0x14,0x18,0x0c },
- { 0x13,0x35,0x26,0x13 }, { 0xec,0x2f,0xc3,0xec },
- { 0x5f,0xe1,0xbe,0x5f }, { 0x97,0xa2,0x35,0x97 },
- { 0x44,0xcc,0x88,0x44 }, { 0x17,0x39,0x2e,0x17 },
- { 0xc4,0x57,0x93,0xc4 }, { 0xa7,0xf2,0x55,0xa7 },
- { 0x7e,0x82,0xfc,0x7e }, { 0x3d,0x47,0x7a,0x3d },
- { 0x64,0xac,0xc8,0x64 }, { 0x5d,0xe7,0xba,0x5d },
- { 0x19,0x2b,0x32,0x19 }, { 0x73,0x95,0xe6,0x73 },
- { 0x60,0xa0,0xc0,0x60 }, { 0x81,0x98,0x19,0x81 },
- { 0x4f,0xd1,0x9e,0x4f }, { 0xdc,0x7f,0xa3,0xdc },
- { 0x22,0x66,0x44,0x22 }, { 0x2a,0x7e,0x54,0x2a },
- { 0x90,0xab,0x3b,0x90 }, { 0x88,0x83,0x0b,0x88 },
- { 0x46,0xca,0x8c,0x46 }, { 0xee,0x29,0xc7,0xee },
- { 0xb8,0xd3,0x6b,0xb8 }, { 0x14,0x3c,0x28,0x14 },
- { 0xde,0x79,0xa7,0xde }, { 0x5e,0xe2,0xbc,0x5e },
- { 0x0b,0x1d,0x16,0x0b }, { 0xdb,0x76,0xad,0xdb },
- { 0xe0,0x3b,0xdb,0xe0 }, { 0x32,0x56,0x64,0x32 },
- { 0x3a,0x4e,0x74,0x3a }, { 0x0a,0x1e,0x14,0x0a },
- { 0x49,0xdb,0x92,0x49 }, { 0x06,0x0a,0x0c,0x06 },
- { 0x24,0x6c,0x48,0x24 }, { 0x5c,0xe4,0xb8,0x5c },
- { 0xc2,0x5d,0x9f,0xc2 }, { 0xd3,0x6e,0xbd,0xd3 },
- { 0xac,0xef,0x43,0xac }, { 0x62,0xa6,0xc4,0x62 },
- { 0x91,0xa8,0x39,0x91 }, { 0x95,0xa4,0x31,0x95 },
- { 0xe4,0x37,0xd3,0xe4 }, { 0x79,0x8b,0xf2,0x79 },
- { 0xe7,0x32,0xd5,0xe7 }, { 0xc8,0x43,0x8b,0xc8 },
- { 0x37,0x59,0x6e,0x37 }, { 0x6d,0xb7,0xda,0x6d },
- { 0x8d,0x8c,0x01,0x8d }, { 0xd5,0x64,0xb1,0xd5 },
- { 0x4e,0xd2,0x9c,0x4e }, { 0xa9,0xe0,0x49,0xa9 },
- { 0x6c,0xb4,0xd8,0x6c }, { 0x56,0xfa,0xac,0x56 },
- { 0xf4,0x07,0xf3,0xf4 }, { 0xea,0x25,0xcf,0xea },
- { 0x65,0xaf,0xca,0x65 }, { 0x7a,0x8e,0xf4,0x7a },
- { 0xae,0xe9,0x47,0xae }, { 0x08,0x18,0x10,0x08 },
- { 0xba,0xd5,0x6f,0xba }, { 0x78,0x88,0xf0,0x78 },
- { 0x25,0x6f,0x4a,0x25 }, { 0x2e,0x72,0x5c,0x2e },
- { 0x1c,0x24,0x38,0x1c }, { 0xa6,0xf1,0x57,0xa6 },
- { 0xb4,0xc7,0x73,0xb4 }, { 0xc6,0x51,0x97,0xc6 },
- { 0xe8,0x23,0xcb,0xe8 }, { 0xdd,0x7c,0xa1,0xdd },
- { 0x74,0x9c,0xe8,0x74 }, { 0x1f,0x21,0x3e,0x1f },
- { 0x4b,0xdd,0x96,0x4b }, { 0xbd,0xdc,0x61,0xbd },
- { 0x8b,0x86,0x0d,0x8b }, { 0x8a,0x85,0x0f,0x8a },
- { 0x70,0x90,0xe0,0x70 }, { 0x3e,0x42,0x7c,0x3e },
- { 0xb5,0xc4,0x71,0xb5 }, { 0x66,0xaa,0xcc,0x66 },
- { 0x48,0xd8,0x90,0x48 }, { 0x03,0x05,0x06,0x03 },
- { 0xf6,0x01,0xf7,0xf6 }, { 0x0e,0x12,0x1c,0x0e },
- { 0x61,0xa3,0xc2,0x61 }, { 0x35,0x5f,0x6a,0x35 },
- { 0x57,0xf9,0xae,0x57 }, { 0xb9,0xd0,0x69,0xb9 },
- { 0x86,0x91,0x17,0x86 }, { 0xc1,0x58,0x99,0xc1 },
- { 0x1d,0x27,0x3a,0x1d }, { 0x9e,0xb9,0x27,0x9e },
- { 0xe1,0x38,0xd9,0xe1 }, { 0xf8,0x13,0xeb,0xf8 },
- { 0x98,0xb3,0x2b,0x98 }, { 0x11,0x33,0x22,0x11 },
- { 0x69,0xbb,0xd2,0x69 }, { 0xd9,0x70,0xa9,0xd9 },
- { 0x8e,0x89,0x07,0x8e }, { 0x94,0xa7,0x33,0x94 },
- { 0x9b,0xb6,0x2d,0x9b }, { 0x1e,0x22,0x3c,0x1e },
- { 0x87,0x92,0x15,0x87 }, { 0xe9,0x20,0xc9,0xe9 },
- { 0xce,0x49,0x87,0xce }, { 0x55,0xff,0xaa,0x55 },
- { 0x28,0x78,0x50,0x28 }, { 0xdf,0x7a,0xa5,0xdf },
- { 0x8c,0x8f,0x03,0x8c }, { 0xa1,0xf8,0x59,0xa1 },
- { 0x89,0x80,0x09,0x89 }, { 0x0d,0x17,0x1a,0x0d },
- { 0xbf,0xda,0x65,0xbf }, { 0xe6,0x31,0xd7,0xe6 },
- { 0x42,0xc6,0x84,0x42 }, { 0x68,0xb8,0xd0,0x68 },
- { 0x41,0xc3,0x82,0x41 }, { 0x99,0xb0,0x29,0x99 },
- { 0x2d,0x77,0x5a,0x2d }, { 0x0f,0x11,0x1e,0x0f },
- { 0xb0,0xcb,0x7b,0xb0 }, { 0x54,0xfc,0xa8,0x54 },
- { 0xbb,0xd6,0x6d,0xbb }, { 0x16,0x3a,0x2c,0x16 }
-};
-
-static const byte T4[256][4] = {
- { 0x63,0x63,0xa5,0xc6 }, { 0x7c,0x7c,0x84,0xf8 },
- { 0x77,0x77,0x99,0xee }, { 0x7b,0x7b,0x8d,0xf6 },
- { 0xf2,0xf2,0x0d,0xff }, { 0x6b,0x6b,0xbd,0xd6 },
- { 0x6f,0x6f,0xb1,0xde }, { 0xc5,0xc5,0x54,0x91 },
- { 0x30,0x30,0x50,0x60 }, { 0x01,0x01,0x03,0x02 },
- { 0x67,0x67,0xa9,0xce }, { 0x2b,0x2b,0x7d,0x56 },
- { 0xfe,0xfe,0x19,0xe7 }, { 0xd7,0xd7,0x62,0xb5 },
- { 0xab,0xab,0xe6,0x4d }, { 0x76,0x76,0x9a,0xec },
- { 0xca,0xca,0x45,0x8f }, { 0x82,0x82,0x9d,0x1f },
- { 0xc9,0xc9,0x40,0x89 }, { 0x7d,0x7d,0x87,0xfa },
- { 0xfa,0xfa,0x15,0xef }, { 0x59,0x59,0xeb,0xb2 },
- { 0x47,0x47,0xc9,0x8e }, { 0xf0,0xf0,0x0b,0xfb },
- { 0xad,0xad,0xec,0x41 }, { 0xd4,0xd4,0x67,0xb3 },
- { 0xa2,0xa2,0xfd,0x5f }, { 0xaf,0xaf,0xea,0x45 },
- { 0x9c,0x9c,0xbf,0x23 }, { 0xa4,0xa4,0xf7,0x53 },
- { 0x72,0x72,0x96,0xe4 }, { 0xc0,0xc0,0x5b,0x9b },
- { 0xb7,0xb7,0xc2,0x75 }, { 0xfd,0xfd,0x1c,0xe1 },
- { 0x93,0x93,0xae,0x3d }, { 0x26,0x26,0x6a,0x4c },
- { 0x36,0x36,0x5a,0x6c }, { 0x3f,0x3f,0x41,0x7e },
- { 0xf7,0xf7,0x02,0xf5 }, { 0xcc,0xcc,0x4f,0x83 },
- { 0x34,0x34,0x5c,0x68 }, { 0xa5,0xa5,0xf4,0x51 },
- { 0xe5,0xe5,0x34,0xd1 }, { 0xf1,0xf1,0x08,0xf9 },
- { 0x71,0x71,0x93,0xe2 }, { 0xd8,0xd8,0x73,0xab },
- { 0x31,0x31,0x53,0x62 }, { 0x15,0x15,0x3f,0x2a },
- { 0x04,0x04,0x0c,0x08 }, { 0xc7,0xc7,0x52,0x95 },
- { 0x23,0x23,0x65,0x46 }, { 0xc3,0xc3,0x5e,0x9d },
- { 0x18,0x18,0x28,0x30 }, { 0x96,0x96,0xa1,0x37 },
- { 0x05,0x05,0x0f,0x0a }, { 0x9a,0x9a,0xb5,0x2f },
- { 0x07,0x07,0x09,0x0e }, { 0x12,0x12,0x36,0x24 },
- { 0x80,0x80,0x9b,0x1b }, { 0xe2,0xe2,0x3d,0xdf },
- { 0xeb,0xeb,0x26,0xcd }, { 0x27,0x27,0x69,0x4e },
- { 0xb2,0xb2,0xcd,0x7f }, { 0x75,0x75,0x9f,0xea },
- { 0x09,0x09,0x1b,0x12 }, { 0x83,0x83,0x9e,0x1d },
- { 0x2c,0x2c,0x74,0x58 }, { 0x1a,0x1a,0x2e,0x34 },
- { 0x1b,0x1b,0x2d,0x36 }, { 0x6e,0x6e,0xb2,0xdc },
- { 0x5a,0x5a,0xee,0xb4 }, { 0xa0,0xa0,0xfb,0x5b },
- { 0x52,0x52,0xf6,0xa4 }, { 0x3b,0x3b,0x4d,0x76 },
- { 0xd6,0xd6,0x61,0xb7 }, { 0xb3,0xb3,0xce,0x7d },
- { 0x29,0x29,0x7b,0x52 }, { 0xe3,0xe3,0x3e,0xdd },
- { 0x2f,0x2f,0x71,0x5e }, { 0x84,0x84,0x97,0x13 },
- { 0x53,0x53,0xf5,0xa6 }, { 0xd1,0xd1,0x68,0xb9 },
- { 0x00,0x00,0x00,0x00 }, { 0xed,0xed,0x2c,0xc1 },
- { 0x20,0x20,0x60,0x40 }, { 0xfc,0xfc,0x1f,0xe3 },
- { 0xb1,0xb1,0xc8,0x79 }, { 0x5b,0x5b,0xed,0xb6 },
- { 0x6a,0x6a,0xbe,0xd4 }, { 0xcb,0xcb,0x46,0x8d },
- { 0xbe,0xbe,0xd9,0x67 }, { 0x39,0x39,0x4b,0x72 },
- { 0x4a,0x4a,0xde,0x94 }, { 0x4c,0x4c,0xd4,0x98 },
- { 0x58,0x58,0xe8,0xb0 }, { 0xcf,0xcf,0x4a,0x85 },
- { 0xd0,0xd0,0x6b,0xbb }, { 0xef,0xef,0x2a,0xc5 },
- { 0xaa,0xaa,0xe5,0x4f }, { 0xfb,0xfb,0x16,0xed },
- { 0x43,0x43,0xc5,0x86 }, { 0x4d,0x4d,0xd7,0x9a },
- { 0x33,0x33,0x55,0x66 }, { 0x85,0x85,0x94,0x11 },
- { 0x45,0x45,0xcf,0x8a }, { 0xf9,0xf9,0x10,0xe9 },
- { 0x02,0x02,0x06,0x04 }, { 0x7f,0x7f,0x81,0xfe },
- { 0x50,0x50,0xf0,0xa0 }, { 0x3c,0x3c,0x44,0x78 },
- { 0x9f,0x9f,0xba,0x25 }, { 0xa8,0xa8,0xe3,0x4b },
- { 0x51,0x51,0xf3,0xa2 }, { 0xa3,0xa3,0xfe,0x5d },
- { 0x40,0x40,0xc0,0x80 }, { 0x8f,0x8f,0x8a,0x05 },
- { 0x92,0x92,0xad,0x3f }, { 0x9d,0x9d,0xbc,0x21 },
- { 0x38,0x38,0x48,0x70 }, { 0xf5,0xf5,0x04,0xf1 },
- { 0xbc,0xbc,0xdf,0x63 }, { 0xb6,0xb6,0xc1,0x77 },
- { 0xda,0xda,0x75,0xaf }, { 0x21,0x21,0x63,0x42 },
- { 0x10,0x10,0x30,0x20 }, { 0xff,0xff,0x1a,0xe5 },
- { 0xf3,0xf3,0x0e,0xfd }, { 0xd2,0xd2,0x6d,0xbf },
- { 0xcd,0xcd,0x4c,0x81 }, { 0x0c,0x0c,0x14,0x18 },
- { 0x13,0x13,0x35,0x26 }, { 0xec,0xec,0x2f,0xc3 },
- { 0x5f,0x5f,0xe1,0xbe }, { 0x97,0x97,0xa2,0x35 },
- { 0x44,0x44,0xcc,0x88 }, { 0x17,0x17,0x39,0x2e },
- { 0xc4,0xc4,0x57,0x93 }, { 0xa7,0xa7,0xf2,0x55 },
- { 0x7e,0x7e,0x82,0xfc }, { 0x3d,0x3d,0x47,0x7a },
- { 0x64,0x64,0xac,0xc8 }, { 0x5d,0x5d,0xe7,0xba },
- { 0x19,0x19,0x2b,0x32 }, { 0x73,0x73,0x95,0xe6 },
- { 0x60,0x60,0xa0,0xc0 }, { 0x81,0x81,0x98,0x19 },
- { 0x4f,0x4f,0xd1,0x9e }, { 0xdc,0xdc,0x7f,0xa3 },
- { 0x22,0x22,0x66,0x44 }, { 0x2a,0x2a,0x7e,0x54 },
- { 0x90,0x90,0xab,0x3b }, { 0x88,0x88,0x83,0x0b },
- { 0x46,0x46,0xca,0x8c }, { 0xee,0xee,0x29,0xc7 },
- { 0xb8,0xb8,0xd3,0x6b }, { 0x14,0x14,0x3c,0x28 },
- { 0xde,0xde,0x79,0xa7 }, { 0x5e,0x5e,0xe2,0xbc },
- { 0x0b,0x0b,0x1d,0x16 }, { 0xdb,0xdb,0x76,0xad },
- { 0xe0,0xe0,0x3b,0xdb }, { 0x32,0x32,0x56,0x64 },
- { 0x3a,0x3a,0x4e,0x74 }, { 0x0a,0x0a,0x1e,0x14 },
- { 0x49,0x49,0xdb,0x92 }, { 0x06,0x06,0x0a,0x0c },
- { 0x24,0x24,0x6c,0x48 }, { 0x5c,0x5c,0xe4,0xb8 },
- { 0xc2,0xc2,0x5d,0x9f }, { 0xd3,0xd3,0x6e,0xbd },
- { 0xac,0xac,0xef,0x43 }, { 0x62,0x62,0xa6,0xc4 },
- { 0x91,0x91,0xa8,0x39 }, { 0x95,0x95,0xa4,0x31 },
- { 0xe4,0xe4,0x37,0xd3 }, { 0x79,0x79,0x8b,0xf2 },
- { 0xe7,0xe7,0x32,0xd5 }, { 0xc8,0xc8,0x43,0x8b },
- { 0x37,0x37,0x59,0x6e }, { 0x6d,0x6d,0xb7,0xda },
- { 0x8d,0x8d,0x8c,0x01 }, { 0xd5,0xd5,0x64,0xb1 },
- { 0x4e,0x4e,0xd2,0x9c }, { 0xa9,0xa9,0xe0,0x49 },
- { 0x6c,0x6c,0xb4,0xd8 }, { 0x56,0x56,0xfa,0xac },
- { 0xf4,0xf4,0x07,0xf3 }, { 0xea,0xea,0x25,0xcf },
- { 0x65,0x65,0xaf,0xca }, { 0x7a,0x7a,0x8e,0xf4 },
- { 0xae,0xae,0xe9,0x47 }, { 0x08,0x08,0x18,0x10 },
- { 0xba,0xba,0xd5,0x6f }, { 0x78,0x78,0x88,0xf0 },
- { 0x25,0x25,0x6f,0x4a }, { 0x2e,0x2e,0x72,0x5c },
- { 0x1c,0x1c,0x24,0x38 }, { 0xa6,0xa6,0xf1,0x57 },
- { 0xb4,0xb4,0xc7,0x73 }, { 0xc6,0xc6,0x51,0x97 },
- { 0xe8,0xe8,0x23,0xcb }, { 0xdd,0xdd,0x7c,0xa1 },
- { 0x74,0x74,0x9c,0xe8 }, { 0x1f,0x1f,0x21,0x3e },
- { 0x4b,0x4b,0xdd,0x96 }, { 0xbd,0xbd,0xdc,0x61 },
- { 0x8b,0x8b,0x86,0x0d }, { 0x8a,0x8a,0x85,0x0f },
- { 0x70,0x70,0x90,0xe0 }, { 0x3e,0x3e,0x42,0x7c },
- { 0xb5,0xb5,0xc4,0x71 }, { 0x66,0x66,0xaa,0xcc },
- { 0x48,0x48,0xd8,0x90 }, { 0x03,0x03,0x05,0x06 },
- { 0xf6,0xf6,0x01,0xf7 }, { 0x0e,0x0e,0x12,0x1c },
- { 0x61,0x61,0xa3,0xc2 }, { 0x35,0x35,0x5f,0x6a },
- { 0x57,0x57,0xf9,0xae }, { 0xb9,0xb9,0xd0,0x69 },
- { 0x86,0x86,0x91,0x17 }, { 0xc1,0xc1,0x58,0x99 },
- { 0x1d,0x1d,0x27,0x3a }, { 0x9e,0x9e,0xb9,0x27 },
- { 0xe1,0xe1,0x38,0xd9 }, { 0xf8,0xf8,0x13,0xeb },
- { 0x98,0x98,0xb3,0x2b }, { 0x11,0x11,0x33,0x22 },
- { 0x69,0x69,0xbb,0xd2 }, { 0xd9,0xd9,0x70,0xa9 },
- { 0x8e,0x8e,0x89,0x07 }, { 0x94,0x94,0xa7,0x33 },
- { 0x9b,0x9b,0xb6,0x2d }, { 0x1e,0x1e,0x22,0x3c },
- { 0x87,0x87,0x92,0x15 }, { 0xe9,0xe9,0x20,0xc9 },
- { 0xce,0xce,0x49,0x87 }, { 0x55,0x55,0xff,0xaa },
- { 0x28,0x28,0x78,0x50 }, { 0xdf,0xdf,0x7a,0xa5 },
- { 0x8c,0x8c,0x8f,0x03 }, { 0xa1,0xa1,0xf8,0x59 },
- { 0x89,0x89,0x80,0x09 }, { 0x0d,0x0d,0x17,0x1a },
- { 0xbf,0xbf,0xda,0x65 }, { 0xe6,0xe6,0x31,0xd7 },
- { 0x42,0x42,0xc6,0x84 }, { 0x68,0x68,0xb8,0xd0 },
- { 0x41,0x41,0xc3,0x82 }, { 0x99,0x99,0xb0,0x29 },
- { 0x2d,0x2d,0x77,0x5a }, { 0x0f,0x0f,0x11,0x1e },
- { 0xb0,0xb0,0xcb,0x7b }, { 0x54,0x54,0xfc,0xa8 },
- { 0xbb,0xbb,0xd6,0x6d }, { 0x16,0x16,0x3a,0x2c }
-};
-
-static const byte T5[256][4] = {
- { 0x51,0xf4,0xa7,0x50 }, { 0x7e,0x41,0x65,0x53 },
- { 0x1a,0x17,0xa4,0xc3 }, { 0x3a,0x27,0x5e,0x96 },
- { 0x3b,0xab,0x6b,0xcb }, { 0x1f,0x9d,0x45,0xf1 },
- { 0xac,0xfa,0x58,0xab }, { 0x4b,0xe3,0x03,0x93 },
- { 0x20,0x30,0xfa,0x55 }, { 0xad,0x76,0x6d,0xf6 },
- { 0x88,0xcc,0x76,0x91 }, { 0xf5,0x02,0x4c,0x25 },
- { 0x4f,0xe5,0xd7,0xfc }, { 0xc5,0x2a,0xcb,0xd7 },
- { 0x26,0x35,0x44,0x80 }, { 0xb5,0x62,0xa3,0x8f },
- { 0xde,0xb1,0x5a,0x49 }, { 0x25,0xba,0x1b,0x67 },
- { 0x45,0xea,0x0e,0x98 }, { 0x5d,0xfe,0xc0,0xe1 },
- { 0xc3,0x2f,0x75,0x02 }, { 0x81,0x4c,0xf0,0x12 },
- { 0x8d,0x46,0x97,0xa3 }, { 0x6b,0xd3,0xf9,0xc6 },
- { 0x03,0x8f,0x5f,0xe7 }, { 0x15,0x92,0x9c,0x95 },
- { 0xbf,0x6d,0x7a,0xeb }, { 0x95,0x52,0x59,0xda },
- { 0xd4,0xbe,0x83,0x2d }, { 0x58,0x74,0x21,0xd3 },
- { 0x49,0xe0,0x69,0x29 }, { 0x8e,0xc9,0xc8,0x44 },
- { 0x75,0xc2,0x89,0x6a }, { 0xf4,0x8e,0x79,0x78 },
- { 0x99,0x58,0x3e,0x6b }, { 0x27,0xb9,0x71,0xdd },
- { 0xbe,0xe1,0x4f,0xb6 }, { 0xf0,0x88,0xad,0x17 },
- { 0xc9,0x20,0xac,0x66 }, { 0x7d,0xce,0x3a,0xb4 },
- { 0x63,0xdf,0x4a,0x18 }, { 0xe5,0x1a,0x31,0x82 },
- { 0x97,0x51,0x33,0x60 }, { 0x62,0x53,0x7f,0x45 },
- { 0xb1,0x64,0x77,0xe0 }, { 0xbb,0x6b,0xae,0x84 },
- { 0xfe,0x81,0xa0,0x1c }, { 0xf9,0x08,0x2b,0x94 },
- { 0x70,0x48,0x68,0x58 }, { 0x8f,0x45,0xfd,0x19 },
- { 0x94,0xde,0x6c,0x87 }, { 0x52,0x7b,0xf8,0xb7 },
- { 0xab,0x73,0xd3,0x23 }, { 0x72,0x4b,0x02,0xe2 },
- { 0xe3,0x1f,0x8f,0x57 }, { 0x66,0x55,0xab,0x2a },
- { 0xb2,0xeb,0x28,0x07 }, { 0x2f,0xb5,0xc2,0x03 },
- { 0x86,0xc5,0x7b,0x9a }, { 0xd3,0x37,0x08,0xa5 },
- { 0x30,0x28,0x87,0xf2 }, { 0x23,0xbf,0xa5,0xb2 },
- { 0x02,0x03,0x6a,0xba }, { 0xed,0x16,0x82,0x5c },
- { 0x8a,0xcf,0x1c,0x2b }, { 0xa7,0x79,0xb4,0x92 },
- { 0xf3,0x07,0xf2,0xf0 }, { 0x4e,0x69,0xe2,0xa1 },
- { 0x65,0xda,0xf4,0xcd }, { 0x06,0x05,0xbe,0xd5 },
- { 0xd1,0x34,0x62,0x1f }, { 0xc4,0xa6,0xfe,0x8a },
- { 0x34,0x2e,0x53,0x9d }, { 0xa2,0xf3,0x55,0xa0 },
- { 0x05,0x8a,0xe1,0x32 }, { 0xa4,0xf6,0xeb,0x75 },
- { 0x0b,0x83,0xec,0x39 }, { 0x40,0x60,0xef,0xaa },
- { 0x5e,0x71,0x9f,0x06 }, { 0xbd,0x6e,0x10,0x51 },
- { 0x3e,0x21,0x8a,0xf9 }, { 0x96,0xdd,0x06,0x3d },
- { 0xdd,0x3e,0x05,0xae }, { 0x4d,0xe6,0xbd,0x46 },
- { 0x91,0x54,0x8d,0xb5 }, { 0x71,0xc4,0x5d,0x05 },
- { 0x04,0x06,0xd4,0x6f }, { 0x60,0x50,0x15,0xff },
- { 0x19,0x98,0xfb,0x24 }, { 0xd6,0xbd,0xe9,0x97 },
- { 0x89,0x40,0x43,0xcc }, { 0x67,0xd9,0x9e,0x77 },
- { 0xb0,0xe8,0x42,0xbd }, { 0x07,0x89,0x8b,0x88 },
- { 0xe7,0x19,0x5b,0x38 }, { 0x79,0xc8,0xee,0xdb },
- { 0xa1,0x7c,0x0a,0x47 }, { 0x7c,0x42,0x0f,0xe9 },
- { 0xf8,0x84,0x1e,0xc9 }, { 0x00,0x00,0x00,0x00 },
- { 0x09,0x80,0x86,0x83 }, { 0x32,0x2b,0xed,0x48 },
- { 0x1e,0x11,0x70,0xac }, { 0x6c,0x5a,0x72,0x4e },
- { 0xfd,0x0e,0xff,0xfb }, { 0x0f,0x85,0x38,0x56 },
- { 0x3d,0xae,0xd5,0x1e }, { 0x36,0x2d,0x39,0x27 },
- { 0x0a,0x0f,0xd9,0x64 }, { 0x68,0x5c,0xa6,0x21 },
- { 0x9b,0x5b,0x54,0xd1 }, { 0x24,0x36,0x2e,0x3a },
- { 0x0c,0x0a,0x67,0xb1 }, { 0x93,0x57,0xe7,0x0f },
- { 0xb4,0xee,0x96,0xd2 }, { 0x1b,0x9b,0x91,0x9e },
- { 0x80,0xc0,0xc5,0x4f }, { 0x61,0xdc,0x20,0xa2 },
- { 0x5a,0x77,0x4b,0x69 }, { 0x1c,0x12,0x1a,0x16 },
- { 0xe2,0x93,0xba,0x0a }, { 0xc0,0xa0,0x2a,0xe5 },
- { 0x3c,0x22,0xe0,0x43 }, { 0x12,0x1b,0x17,0x1d },
- { 0x0e,0x09,0x0d,0x0b }, { 0xf2,0x8b,0xc7,0xad },
- { 0x2d,0xb6,0xa8,0xb9 }, { 0x14,0x1e,0xa9,0xc8 },
- { 0x57,0xf1,0x19,0x85 }, { 0xaf,0x75,0x07,0x4c },
- { 0xee,0x99,0xdd,0xbb }, { 0xa3,0x7f,0x60,0xfd },
- { 0xf7,0x01,0x26,0x9f }, { 0x5c,0x72,0xf5,0xbc },
- { 0x44,0x66,0x3b,0xc5 }, { 0x5b,0xfb,0x7e,0x34 },
- { 0x8b,0x43,0x29,0x76 }, { 0xcb,0x23,0xc6,0xdc },
- { 0xb6,0xed,0xfc,0x68 }, { 0xb8,0xe4,0xf1,0x63 },
- { 0xd7,0x31,0xdc,0xca }, { 0x42,0x63,0x85,0x10 },
- { 0x13,0x97,0x22,0x40 }, { 0x84,0xc6,0x11,0x20 },
- { 0x85,0x4a,0x24,0x7d }, { 0xd2,0xbb,0x3d,0xf8 },
- { 0xae,0xf9,0x32,0x11 }, { 0xc7,0x29,0xa1,0x6d },
- { 0x1d,0x9e,0x2f,0x4b }, { 0xdc,0xb2,0x30,0xf3 },
- { 0x0d,0x86,0x52,0xec }, { 0x77,0xc1,0xe3,0xd0 },
- { 0x2b,0xb3,0x16,0x6c }, { 0xa9,0x70,0xb9,0x99 },
- { 0x11,0x94,0x48,0xfa }, { 0x47,0xe9,0x64,0x22 },
- { 0xa8,0xfc,0x8c,0xc4 }, { 0xa0,0xf0,0x3f,0x1a },
- { 0x56,0x7d,0x2c,0xd8 }, { 0x22,0x33,0x90,0xef },
- { 0x87,0x49,0x4e,0xc7 }, { 0xd9,0x38,0xd1,0xc1 },
- { 0x8c,0xca,0xa2,0xfe }, { 0x98,0xd4,0x0b,0x36 },
- { 0xa6,0xf5,0x81,0xcf }, { 0xa5,0x7a,0xde,0x28 },
- { 0xda,0xb7,0x8e,0x26 }, { 0x3f,0xad,0xbf,0xa4 },
- { 0x2c,0x3a,0x9d,0xe4 }, { 0x50,0x78,0x92,0x0d },
- { 0x6a,0x5f,0xcc,0x9b }, { 0x54,0x7e,0x46,0x62 },
- { 0xf6,0x8d,0x13,0xc2 }, { 0x90,0xd8,0xb8,0xe8 },
- { 0x2e,0x39,0xf7,0x5e }, { 0x82,0xc3,0xaf,0xf5 },
- { 0x9f,0x5d,0x80,0xbe }, { 0x69,0xd0,0x93,0x7c },
- { 0x6f,0xd5,0x2d,0xa9 }, { 0xcf,0x25,0x12,0xb3 },
- { 0xc8,0xac,0x99,0x3b }, { 0x10,0x18,0x7d,0xa7 },
- { 0xe8,0x9c,0x63,0x6e }, { 0xdb,0x3b,0xbb,0x7b },
- { 0xcd,0x26,0x78,0x09 }, { 0x6e,0x59,0x18,0xf4 },
- { 0xec,0x9a,0xb7,0x01 }, { 0x83,0x4f,0x9a,0xa8 },
- { 0xe6,0x95,0x6e,0x65 }, { 0xaa,0xff,0xe6,0x7e },
- { 0x21,0xbc,0xcf,0x08 }, { 0xef,0x15,0xe8,0xe6 },
- { 0xba,0xe7,0x9b,0xd9 }, { 0x4a,0x6f,0x36,0xce },
- { 0xea,0x9f,0x09,0xd4 }, { 0x29,0xb0,0x7c,0xd6 },
- { 0x31,0xa4,0xb2,0xaf }, { 0x2a,0x3f,0x23,0x31 },
- { 0xc6,0xa5,0x94,0x30 }, { 0x35,0xa2,0x66,0xc0 },
- { 0x74,0x4e,0xbc,0x37 }, { 0xfc,0x82,0xca,0xa6 },
- { 0xe0,0x90,0xd0,0xb0 }, { 0x33,0xa7,0xd8,0x15 },
- { 0xf1,0x04,0x98,0x4a }, { 0x41,0xec,0xda,0xf7 },
- { 0x7f,0xcd,0x50,0x0e }, { 0x17,0x91,0xf6,0x2f },
- { 0x76,0x4d,0xd6,0x8d }, { 0x43,0xef,0xb0,0x4d },
- { 0xcc,0xaa,0x4d,0x54 }, { 0xe4,0x96,0x04,0xdf },
- { 0x9e,0xd1,0xb5,0xe3 }, { 0x4c,0x6a,0x88,0x1b },
- { 0xc1,0x2c,0x1f,0xb8 }, { 0x46,0x65,0x51,0x7f },
- { 0x9d,0x5e,0xea,0x04 }, { 0x01,0x8c,0x35,0x5d },
- { 0xfa,0x87,0x74,0x73 }, { 0xfb,0x0b,0x41,0x2e },
- { 0xb3,0x67,0x1d,0x5a }, { 0x92,0xdb,0xd2,0x52 },
- { 0xe9,0x10,0x56,0x33 }, { 0x6d,0xd6,0x47,0x13 },
- { 0x9a,0xd7,0x61,0x8c }, { 0x37,0xa1,0x0c,0x7a },
- { 0x59,0xf8,0x14,0x8e }, { 0xeb,0x13,0x3c,0x89 },
- { 0xce,0xa9,0x27,0xee }, { 0xb7,0x61,0xc9,0x35 },
- { 0xe1,0x1c,0xe5,0xed }, { 0x7a,0x47,0xb1,0x3c },
- { 0x9c,0xd2,0xdf,0x59 }, { 0x55,0xf2,0x73,0x3f },
- { 0x18,0x14,0xce,0x79 }, { 0x73,0xc7,0x37,0xbf },
- { 0x53,0xf7,0xcd,0xea }, { 0x5f,0xfd,0xaa,0x5b },
- { 0xdf,0x3d,0x6f,0x14 }, { 0x78,0x44,0xdb,0x86 },
- { 0xca,0xaf,0xf3,0x81 }, { 0xb9,0x68,0xc4,0x3e },
- { 0x38,0x24,0x34,0x2c }, { 0xc2,0xa3,0x40,0x5f },
- { 0x16,0x1d,0xc3,0x72 }, { 0xbc,0xe2,0x25,0x0c },
- { 0x28,0x3c,0x49,0x8b }, { 0xff,0x0d,0x95,0x41 },
- { 0x39,0xa8,0x01,0x71 }, { 0x08,0x0c,0xb3,0xde },
- { 0xd8,0xb4,0xe4,0x9c }, { 0x64,0x56,0xc1,0x90 },
- { 0x7b,0xcb,0x84,0x61 }, { 0xd5,0x32,0xb6,0x70 },
- { 0x48,0x6c,0x5c,0x74 }, { 0xd0,0xb8,0x57,0x42 }
-};
-
-static const byte T6[256][4] = {
- { 0x50,0x51,0xf4,0xa7 }, { 0x53,0x7e,0x41,0x65 },
- { 0xc3,0x1a,0x17,0xa4 }, { 0x96,0x3a,0x27,0x5e },
- { 0xcb,0x3b,0xab,0x6b }, { 0xf1,0x1f,0x9d,0x45 },
- { 0xab,0xac,0xfa,0x58 }, { 0x93,0x4b,0xe3,0x03 },
- { 0x55,0x20,0x30,0xfa }, { 0xf6,0xad,0x76,0x6d },
- { 0x91,0x88,0xcc,0x76 }, { 0x25,0xf5,0x02,0x4c },
- { 0xfc,0x4f,0xe5,0xd7 }, { 0xd7,0xc5,0x2a,0xcb },
- { 0x80,0x26,0x35,0x44 }, { 0x8f,0xb5,0x62,0xa3 },
- { 0x49,0xde,0xb1,0x5a }, { 0x67,0x25,0xba,0x1b },
- { 0x98,0x45,0xea,0x0e }, { 0xe1,0x5d,0xfe,0xc0 },
- { 0x02,0xc3,0x2f,0x75 }, { 0x12,0x81,0x4c,0xf0 },
- { 0xa3,0x8d,0x46,0x97 }, { 0xc6,0x6b,0xd3,0xf9 },
- { 0xe7,0x03,0x8f,0x5f }, { 0x95,0x15,0x92,0x9c },
- { 0xeb,0xbf,0x6d,0x7a }, { 0xda,0x95,0x52,0x59 },
- { 0x2d,0xd4,0xbe,0x83 }, { 0xd3,0x58,0x74,0x21 },
- { 0x29,0x49,0xe0,0x69 }, { 0x44,0x8e,0xc9,0xc8 },
- { 0x6a,0x75,0xc2,0x89 }, { 0x78,0xf4,0x8e,0x79 },
- { 0x6b,0x99,0x58,0x3e }, { 0xdd,0x27,0xb9,0x71 },
- { 0xb6,0xbe,0xe1,0x4f }, { 0x17,0xf0,0x88,0xad },
- { 0x66,0xc9,0x20,0xac }, { 0xb4,0x7d,0xce,0x3a },
- { 0x18,0x63,0xdf,0x4a }, { 0x82,0xe5,0x1a,0x31 },
- { 0x60,0x97,0x51,0x33 }, { 0x45,0x62,0x53,0x7f },
- { 0xe0,0xb1,0x64,0x77 }, { 0x84,0xbb,0x6b,0xae },
- { 0x1c,0xfe,0x81,0xa0 }, { 0x94,0xf9,0x08,0x2b },
- { 0x58,0x70,0x48,0x68 }, { 0x19,0x8f,0x45,0xfd },
- { 0x87,0x94,0xde,0x6c }, { 0xb7,0x52,0x7b,0xf8 },
- { 0x23,0xab,0x73,0xd3 }, { 0xe2,0x72,0x4b,0x02 },
- { 0x57,0xe3,0x1f,0x8f }, { 0x2a,0x66,0x55,0xab },
- { 0x07,0xb2,0xeb,0x28 }, { 0x03,0x2f,0xb5,0xc2 },
- { 0x9a,0x86,0xc5,0x7b }, { 0xa5,0xd3,0x37,0x08 },
- { 0xf2,0x30,0x28,0x87 }, { 0xb2,0x23,0xbf,0xa5 },
- { 0xba,0x02,0x03,0x6a }, { 0x5c,0xed,0x16,0x82 },
- { 0x2b,0x8a,0xcf,0x1c }, { 0x92,0xa7,0x79,0xb4 },
- { 0xf0,0xf3,0x07,0xf2 }, { 0xa1,0x4e,0x69,0xe2 },
- { 0xcd,0x65,0xda,0xf4 }, { 0xd5,0x06,0x05,0xbe },
- { 0x1f,0xd1,0x34,0x62 }, { 0x8a,0xc4,0xa6,0xfe },
- { 0x9d,0x34,0x2e,0x53 }, { 0xa0,0xa2,0xf3,0x55 },
- { 0x32,0x05,0x8a,0xe1 }, { 0x75,0xa4,0xf6,0xeb },
- { 0x39,0x0b,0x83,0xec }, { 0xaa,0x40,0x60,0xef },
- { 0x06,0x5e,0x71,0x9f }, { 0x51,0xbd,0x6e,0x10 },
- { 0xf9,0x3e,0x21,0x8a }, { 0x3d,0x96,0xdd,0x06 },
- { 0xae,0xdd,0x3e,0x05 }, { 0x46,0x4d,0xe6,0xbd },
- { 0xb5,0x91,0x54,0x8d }, { 0x05,0x71,0xc4,0x5d },
- { 0x6f,0x04,0x06,0xd4 }, { 0xff,0x60,0x50,0x15 },
- { 0x24,0x19,0x98,0xfb }, { 0x97,0xd6,0xbd,0xe9 },
- { 0xcc,0x89,0x40,0x43 }, { 0x77,0x67,0xd9,0x9e },
- { 0xbd,0xb0,0xe8,0x42 }, { 0x88,0x07,0x89,0x8b },
- { 0x38,0xe7,0x19,0x5b }, { 0xdb,0x79,0xc8,0xee },
- { 0x47,0xa1,0x7c,0x0a }, { 0xe9,0x7c,0x42,0x0f },
- { 0xc9,0xf8,0x84,0x1e }, { 0x00,0x00,0x00,0x00 },
- { 0x83,0x09,0x80,0x86 }, { 0x48,0x32,0x2b,0xed },
- { 0xac,0x1e,0x11,0x70 }, { 0x4e,0x6c,0x5a,0x72 },
- { 0xfb,0xfd,0x0e,0xff }, { 0x56,0x0f,0x85,0x38 },
- { 0x1e,0x3d,0xae,0xd5 }, { 0x27,0x36,0x2d,0x39 },
- { 0x64,0x0a,0x0f,0xd9 }, { 0x21,0x68,0x5c,0xa6 },
- { 0xd1,0x9b,0x5b,0x54 }, { 0x3a,0x24,0x36,0x2e },
- { 0xb1,0x0c,0x0a,0x67 }, { 0x0f,0x93,0x57,0xe7 },
- { 0xd2,0xb4,0xee,0x96 }, { 0x9e,0x1b,0x9b,0x91 },
- { 0x4f,0x80,0xc0,0xc5 }, { 0xa2,0x61,0xdc,0x20 },
- { 0x69,0x5a,0x77,0x4b }, { 0x16,0x1c,0x12,0x1a },
- { 0x0a,0xe2,0x93,0xba }, { 0xe5,0xc0,0xa0,0x2a },
- { 0x43,0x3c,0x22,0xe0 }, { 0x1d,0x12,0x1b,0x17 },
- { 0x0b,0x0e,0x09,0x0d }, { 0xad,0xf2,0x8b,0xc7 },
- { 0xb9,0x2d,0xb6,0xa8 }, { 0xc8,0x14,0x1e,0xa9 },
- { 0x85,0x57,0xf1,0x19 }, { 0x4c,0xaf,0x75,0x07 },
- { 0xbb,0xee,0x99,0xdd }, { 0xfd,0xa3,0x7f,0x60 },
- { 0x9f,0xf7,0x01,0x26 }, { 0xbc,0x5c,0x72,0xf5 },
- { 0xc5,0x44,0x66,0x3b }, { 0x34,0x5b,0xfb,0x7e },
- { 0x76,0x8b,0x43,0x29 }, { 0xdc,0xcb,0x23,0xc6 },
- { 0x68,0xb6,0xed,0xfc }, { 0x63,0xb8,0xe4,0xf1 },
- { 0xca,0xd7,0x31,0xdc }, { 0x10,0x42,0x63,0x85 },
- { 0x40,0x13,0x97,0x22 }, { 0x20,0x84,0xc6,0x11 },
- { 0x7d,0x85,0x4a,0x24 }, { 0xf8,0xd2,0xbb,0x3d },
- { 0x11,0xae,0xf9,0x32 }, { 0x6d,0xc7,0x29,0xa1 },
- { 0x4b,0x1d,0x9e,0x2f }, { 0xf3,0xdc,0xb2,0x30 },
- { 0xec,0x0d,0x86,0x52 }, { 0xd0,0x77,0xc1,0xe3 },
- { 0x6c,0x2b,0xb3,0x16 }, { 0x99,0xa9,0x70,0xb9 },
- { 0xfa,0x11,0x94,0x48 }, { 0x22,0x47,0xe9,0x64 },
- { 0xc4,0xa8,0xfc,0x8c }, { 0x1a,0xa0,0xf0,0x3f },
- { 0xd8,0x56,0x7d,0x2c }, { 0xef,0x22,0x33,0x90 },
- { 0xc7,0x87,0x49,0x4e }, { 0xc1,0xd9,0x38,0xd1 },
- { 0xfe,0x8c,0xca,0xa2 }, { 0x36,0x98,0xd4,0x0b },
- { 0xcf,0xa6,0xf5,0x81 }, { 0x28,0xa5,0x7a,0xde },
- { 0x26,0xda,0xb7,0x8e }, { 0xa4,0x3f,0xad,0xbf },
- { 0xe4,0x2c,0x3a,0x9d }, { 0x0d,0x50,0x78,0x92 },
- { 0x9b,0x6a,0x5f,0xcc }, { 0x62,0x54,0x7e,0x46 },
- { 0xc2,0xf6,0x8d,0x13 }, { 0xe8,0x90,0xd8,0xb8 },
- { 0x5e,0x2e,0x39,0xf7 }, { 0xf5,0x82,0xc3,0xaf },
- { 0xbe,0x9f,0x5d,0x80 }, { 0x7c,0x69,0xd0,0x93 },
- { 0xa9,0x6f,0xd5,0x2d }, { 0xb3,0xcf,0x25,0x12 },
- { 0x3b,0xc8,0xac,0x99 }, { 0xa7,0x10,0x18,0x7d },
- { 0x6e,0xe8,0x9c,0x63 }, { 0x7b,0xdb,0x3b,0xbb },
- { 0x09,0xcd,0x26,0x78 }, { 0xf4,0x6e,0x59,0x18 },
- { 0x01,0xec,0x9a,0xb7 }, { 0xa8,0x83,0x4f,0x9a },
- { 0x65,0xe6,0x95,0x6e }, { 0x7e,0xaa,0xff,0xe6 },
- { 0x08,0x21,0xbc,0xcf }, { 0xe6,0xef,0x15,0xe8 },
- { 0xd9,0xba,0xe7,0x9b }, { 0xce,0x4a,0x6f,0x36 },
- { 0xd4,0xea,0x9f,0x09 }, { 0xd6,0x29,0xb0,0x7c },
- { 0xaf,0x31,0xa4,0xb2 }, { 0x31,0x2a,0x3f,0x23 },
- { 0x30,0xc6,0xa5,0x94 }, { 0xc0,0x35,0xa2,0x66 },
- { 0x37,0x74,0x4e,0xbc }, { 0xa6,0xfc,0x82,0xca },
- { 0xb0,0xe0,0x90,0xd0 }, { 0x15,0x33,0xa7,0xd8 },
- { 0x4a,0xf1,0x04,0x98 }, { 0xf7,0x41,0xec,0xda },
- { 0x0e,0x7f,0xcd,0x50 }, { 0x2f,0x17,0x91,0xf6 },
- { 0x8d,0x76,0x4d,0xd6 }, { 0x4d,0x43,0xef,0xb0 },
- { 0x54,0xcc,0xaa,0x4d }, { 0xdf,0xe4,0x96,0x04 },
- { 0xe3,0x9e,0xd1,0xb5 }, { 0x1b,0x4c,0x6a,0x88 },
- { 0xb8,0xc1,0x2c,0x1f }, { 0x7f,0x46,0x65,0x51 },
- { 0x04,0x9d,0x5e,0xea }, { 0x5d,0x01,0x8c,0x35 },
- { 0x73,0xfa,0x87,0x74 }, { 0x2e,0xfb,0x0b,0x41 },
- { 0x5a,0xb3,0x67,0x1d }, { 0x52,0x92,0xdb,0xd2 },
- { 0x33,0xe9,0x10,0x56 }, { 0x13,0x6d,0xd6,0x47 },
- { 0x8c,0x9a,0xd7,0x61 }, { 0x7a,0x37,0xa1,0x0c },
- { 0x8e,0x59,0xf8,0x14 }, { 0x89,0xeb,0x13,0x3c },
- { 0xee,0xce,0xa9,0x27 }, { 0x35,0xb7,0x61,0xc9 },
- { 0xed,0xe1,0x1c,0xe5 }, { 0x3c,0x7a,0x47,0xb1 },
- { 0x59,0x9c,0xd2,0xdf }, { 0x3f,0x55,0xf2,0x73 },
- { 0x79,0x18,0x14,0xce }, { 0xbf,0x73,0xc7,0x37 },
- { 0xea,0x53,0xf7,0xcd }, { 0x5b,0x5f,0xfd,0xaa },
- { 0x14,0xdf,0x3d,0x6f }, { 0x86,0x78,0x44,0xdb },
- { 0x81,0xca,0xaf,0xf3 }, { 0x3e,0xb9,0x68,0xc4 },
- { 0x2c,0x38,0x24,0x34 }, { 0x5f,0xc2,0xa3,0x40 },
- { 0x72,0x16,0x1d,0xc3 }, { 0x0c,0xbc,0xe2,0x25 },
- { 0x8b,0x28,0x3c,0x49 }, { 0x41,0xff,0x0d,0x95 },
- { 0x71,0x39,0xa8,0x01 }, { 0xde,0x08,0x0c,0xb3 },
- { 0x9c,0xd8,0xb4,0xe4 }, { 0x90,0x64,0x56,0xc1 },
- { 0x61,0x7b,0xcb,0x84 }, { 0x70,0xd5,0x32,0xb6 },
- { 0x74,0x48,0x6c,0x5c }, { 0x42,0xd0,0xb8,0x57 }
-};
-
-static const byte T7[256][4] = {
- { 0xa7,0x50,0x51,0xf4 }, { 0x65,0x53,0x7e,0x41 },
- { 0xa4,0xc3,0x1a,0x17 }, { 0x5e,0x96,0x3a,0x27 },
- { 0x6b,0xcb,0x3b,0xab }, { 0x45,0xf1,0x1f,0x9d },
- { 0x58,0xab,0xac,0xfa }, { 0x03,0x93,0x4b,0xe3 },
- { 0xfa,0x55,0x20,0x30 }, { 0x6d,0xf6,0xad,0x76 },
- { 0x76,0x91,0x88,0xcc }, { 0x4c,0x25,0xf5,0x02 },
- { 0xd7,0xfc,0x4f,0xe5 }, { 0xcb,0xd7,0xc5,0x2a },
- { 0x44,0x80,0x26,0x35 }, { 0xa3,0x8f,0xb5,0x62 },
- { 0x5a,0x49,0xde,0xb1 }, { 0x1b,0x67,0x25,0xba },
- { 0x0e,0x98,0x45,0xea }, { 0xc0,0xe1,0x5d,0xfe },
- { 0x75,0x02,0xc3,0x2f }, { 0xf0,0x12,0x81,0x4c },
- { 0x97,0xa3,0x8d,0x46 }, { 0xf9,0xc6,0x6b,0xd3 },
- { 0x5f,0xe7,0x03,0x8f }, { 0x9c,0x95,0x15,0x92 },
- { 0x7a,0xeb,0xbf,0x6d }, { 0x59,0xda,0x95,0x52 },
- { 0x83,0x2d,0xd4,0xbe }, { 0x21,0xd3,0x58,0x74 },
- { 0x69,0x29,0x49,0xe0 }, { 0xc8,0x44,0x8e,0xc9 },
- { 0x89,0x6a,0x75,0xc2 }, { 0x79,0x78,0xf4,0x8e },
- { 0x3e,0x6b,0x99,0x58 }, { 0x71,0xdd,0x27,0xb9 },
- { 0x4f,0xb6,0xbe,0xe1 }, { 0xad,0x17,0xf0,0x88 },
- { 0xac,0x66,0xc9,0x20 }, { 0x3a,0xb4,0x7d,0xce },
- { 0x4a,0x18,0x63,0xdf }, { 0x31,0x82,0xe5,0x1a },
- { 0x33,0x60,0x97,0x51 }, { 0x7f,0x45,0x62,0x53 },
- { 0x77,0xe0,0xb1,0x64 }, { 0xae,0x84,0xbb,0x6b },
- { 0xa0,0x1c,0xfe,0x81 }, { 0x2b,0x94,0xf9,0x08 },
- { 0x68,0x58,0x70,0x48 }, { 0xfd,0x19,0x8f,0x45 },
- { 0x6c,0x87,0x94,0xde }, { 0xf8,0xb7,0x52,0x7b },
- { 0xd3,0x23,0xab,0x73 }, { 0x02,0xe2,0x72,0x4b },
- { 0x8f,0x57,0xe3,0x1f }, { 0xab,0x2a,0x66,0x55 },
- { 0x28,0x07,0xb2,0xeb }, { 0xc2,0x03,0x2f,0xb5 },
- { 0x7b,0x9a,0x86,0xc5 }, { 0x08,0xa5,0xd3,0x37 },
- { 0x87,0xf2,0x30,0x28 }, { 0xa5,0xb2,0x23,0xbf },
- { 0x6a,0xba,0x02,0x03 }, { 0x82,0x5c,0xed,0x16 },
- { 0x1c,0x2b,0x8a,0xcf }, { 0xb4,0x92,0xa7,0x79 },
- { 0xf2,0xf0,0xf3,0x07 }, { 0xe2,0xa1,0x4e,0x69 },
- { 0xf4,0xcd,0x65,0xda }, { 0xbe,0xd5,0x06,0x05 },
- { 0x62,0x1f,0xd1,0x34 }, { 0xfe,0x8a,0xc4,0xa6 },
- { 0x53,0x9d,0x34,0x2e }, { 0x55,0xa0,0xa2,0xf3 },
- { 0xe1,0x32,0x05,0x8a }, { 0xeb,0x75,0xa4,0xf6 },
- { 0xec,0x39,0x0b,0x83 }, { 0xef,0xaa,0x40,0x60 },
- { 0x9f,0x06,0x5e,0x71 }, { 0x10,0x51,0xbd,0x6e },
- { 0x8a,0xf9,0x3e,0x21 }, { 0x06,0x3d,0x96,0xdd },
- { 0x05,0xae,0xdd,0x3e }, { 0xbd,0x46,0x4d,0xe6 },
- { 0x8d,0xb5,0x91,0x54 }, { 0x5d,0x05,0x71,0xc4 },
- { 0xd4,0x6f,0x04,0x06 }, { 0x15,0xff,0x60,0x50 },
- { 0xfb,0x24,0x19,0x98 }, { 0xe9,0x97,0xd6,0xbd },
- { 0x43,0xcc,0x89,0x40 }, { 0x9e,0x77,0x67,0xd9 },
- { 0x42,0xbd,0xb0,0xe8 }, { 0x8b,0x88,0x07,0x89 },
- { 0x5b,0x38,0xe7,0x19 }, { 0xee,0xdb,0x79,0xc8 },
- { 0x0a,0x47,0xa1,0x7c }, { 0x0f,0xe9,0x7c,0x42 },
- { 0x1e,0xc9,0xf8,0x84 }, { 0x00,0x00,0x00,0x00 },
- { 0x86,0x83,0x09,0x80 }, { 0xed,0x48,0x32,0x2b },
- { 0x70,0xac,0x1e,0x11 }, { 0x72,0x4e,0x6c,0x5a },
- { 0xff,0xfb,0xfd,0x0e }, { 0x38,0x56,0x0f,0x85 },
- { 0xd5,0x1e,0x3d,0xae }, { 0x39,0x27,0x36,0x2d },
- { 0xd9,0x64,0x0a,0x0f }, { 0xa6,0x21,0x68,0x5c },
- { 0x54,0xd1,0x9b,0x5b }, { 0x2e,0x3a,0x24,0x36 },
- { 0x67,0xb1,0x0c,0x0a }, { 0xe7,0x0f,0x93,0x57 },
- { 0x96,0xd2,0xb4,0xee }, { 0x91,0x9e,0x1b,0x9b },
- { 0xc5,0x4f,0x80,0xc0 }, { 0x20,0xa2,0x61,0xdc },
- { 0x4b,0x69,0x5a,0x77 }, { 0x1a,0x16,0x1c,0x12 },
- { 0xba,0x0a,0xe2,0x93 }, { 0x2a,0xe5,0xc0,0xa0 },
- { 0xe0,0x43,0x3c,0x22 }, { 0x17,0x1d,0x12,0x1b },
- { 0x0d,0x0b,0x0e,0x09 }, { 0xc7,0xad,0xf2,0x8b },
- { 0xa8,0xb9,0x2d,0xb6 }, { 0xa9,0xc8,0x14,0x1e },
- { 0x19,0x85,0x57,0xf1 }, { 0x07,0x4c,0xaf,0x75 },
- { 0xdd,0xbb,0xee,0x99 }, { 0x60,0xfd,0xa3,0x7f },
- { 0x26,0x9f,0xf7,0x01 }, { 0xf5,0xbc,0x5c,0x72 },
- { 0x3b,0xc5,0x44,0x66 }, { 0x7e,0x34,0x5b,0xfb },
- { 0x29,0x76,0x8b,0x43 }, { 0xc6,0xdc,0xcb,0x23 },
- { 0xfc,0x68,0xb6,0xed }, { 0xf1,0x63,0xb8,0xe4 },
- { 0xdc,0xca,0xd7,0x31 }, { 0x85,0x10,0x42,0x63 },
- { 0x22,0x40,0x13,0x97 }, { 0x11,0x20,0x84,0xc6 },
- { 0x24,0x7d,0x85,0x4a }, { 0x3d,0xf8,0xd2,0xbb },
- { 0x32,0x11,0xae,0xf9 }, { 0xa1,0x6d,0xc7,0x29 },
- { 0x2f,0x4b,0x1d,0x9e }, { 0x30,0xf3,0xdc,0xb2 },
- { 0x52,0xec,0x0d,0x86 }, { 0xe3,0xd0,0x77,0xc1 },
- { 0x16,0x6c,0x2b,0xb3 }, { 0xb9,0x99,0xa9,0x70 },
- { 0x48,0xfa,0x11,0x94 }, { 0x64,0x22,0x47,0xe9 },
- { 0x8c,0xc4,0xa8,0xfc }, { 0x3f,0x1a,0xa0,0xf0 },
- { 0x2c,0xd8,0x56,0x7d }, { 0x90,0xef,0x22,0x33 },
- { 0x4e,0xc7,0x87,0x49 }, { 0xd1,0xc1,0xd9,0x38 },
- { 0xa2,0xfe,0x8c,0xca }, { 0x0b,0x36,0x98,0xd4 },
- { 0x81,0xcf,0xa6,0xf5 }, { 0xde,0x28,0xa5,0x7a },
- { 0x8e,0x26,0xda,0xb7 }, { 0xbf,0xa4,0x3f,0xad },
- { 0x9d,0xe4,0x2c,0x3a }, { 0x92,0x0d,0x50,0x78 },
- { 0xcc,0x9b,0x6a,0x5f }, { 0x46,0x62,0x54,0x7e },
- { 0x13,0xc2,0xf6,0x8d }, { 0xb8,0xe8,0x90,0xd8 },
- { 0xf7,0x5e,0x2e,0x39 }, { 0xaf,0xf5,0x82,0xc3 },
- { 0x80,0xbe,0x9f,0x5d }, { 0x93,0x7c,0x69,0xd0 },
- { 0x2d,0xa9,0x6f,0xd5 }, { 0x12,0xb3,0xcf,0x25 },
- { 0x99,0x3b,0xc8,0xac }, { 0x7d,0xa7,0x10,0x18 },
- { 0x63,0x6e,0xe8,0x9c }, { 0xbb,0x7b,0xdb,0x3b },
- { 0x78,0x09,0xcd,0x26 }, { 0x18,0xf4,0x6e,0x59 },
- { 0xb7,0x01,0xec,0x9a }, { 0x9a,0xa8,0x83,0x4f },
- { 0x6e,0x65,0xe6,0x95 }, { 0xe6,0x7e,0xaa,0xff },
- { 0xcf,0x08,0x21,0xbc }, { 0xe8,0xe6,0xef,0x15 },
- { 0x9b,0xd9,0xba,0xe7 }, { 0x36,0xce,0x4a,0x6f },
- { 0x09,0xd4,0xea,0x9f }, { 0x7c,0xd6,0x29,0xb0 },
- { 0xb2,0xaf,0x31,0xa4 }, { 0x23,0x31,0x2a,0x3f },
- { 0x94,0x30,0xc6,0xa5 }, { 0x66,0xc0,0x35,0xa2 },
- { 0xbc,0x37,0x74,0x4e }, { 0xca,0xa6,0xfc,0x82 },
- { 0xd0,0xb0,0xe0,0x90 }, { 0xd8,0x15,0x33,0xa7 },
- { 0x98,0x4a,0xf1,0x04 }, { 0xda,0xf7,0x41,0xec },
- { 0x50,0x0e,0x7f,0xcd }, { 0xf6,0x2f,0x17,0x91 },
- { 0xd6,0x8d,0x76,0x4d }, { 0xb0,0x4d,0x43,0xef },
- { 0x4d,0x54,0xcc,0xaa }, { 0x04,0xdf,0xe4,0x96 },
- { 0xb5,0xe3,0x9e,0xd1 }, { 0x88,0x1b,0x4c,0x6a },
- { 0x1f,0xb8,0xc1,0x2c }, { 0x51,0x7f,0x46,0x65 },
- { 0xea,0x04,0x9d,0x5e }, { 0x35,0x5d,0x01,0x8c },
- { 0x74,0x73,0xfa,0x87 }, { 0x41,0x2e,0xfb,0x0b },
- { 0x1d,0x5a,0xb3,0x67 }, { 0xd2,0x52,0x92,0xdb },
- { 0x56,0x33,0xe9,0x10 }, { 0x47,0x13,0x6d,0xd6 },
- { 0x61,0x8c,0x9a,0xd7 }, { 0x0c,0x7a,0x37,0xa1 },
- { 0x14,0x8e,0x59,0xf8 }, { 0x3c,0x89,0xeb,0x13 },
- { 0x27,0xee,0xce,0xa9 }, { 0xc9,0x35,0xb7,0x61 },
- { 0xe5,0xed,0xe1,0x1c }, { 0xb1,0x3c,0x7a,0x47 },
- { 0xdf,0x59,0x9c,0xd2 }, { 0x73,0x3f,0x55,0xf2 },
- { 0xce,0x79,0x18,0x14 }, { 0x37,0xbf,0x73,0xc7 },
- { 0xcd,0xea,0x53,0xf7 }, { 0xaa,0x5b,0x5f,0xfd },
- { 0x6f,0x14,0xdf,0x3d }, { 0xdb,0x86,0x78,0x44 },
- { 0xf3,0x81,0xca,0xaf }, { 0xc4,0x3e,0xb9,0x68 },
- { 0x34,0x2c,0x38,0x24 }, { 0x40,0x5f,0xc2,0xa3 },
- { 0xc3,0x72,0x16,0x1d }, { 0x25,0x0c,0xbc,0xe2 },
- { 0x49,0x8b,0x28,0x3c }, { 0x95,0x41,0xff,0x0d },
- { 0x01,0x71,0x39,0xa8 }, { 0xb3,0xde,0x08,0x0c },
- { 0xe4,0x9c,0xd8,0xb4 }, { 0xc1,0x90,0x64,0x56 },
- { 0x84,0x61,0x7b,0xcb }, { 0xb6,0x70,0xd5,0x32 },
- { 0x5c,0x74,0x48,0x6c }, { 0x57,0x42,0xd0,0xb8 }
-};
-
-static const byte T8[256][4] = {
- { 0xf4,0xa7,0x50,0x51 }, { 0x41,0x65,0x53,0x7e },
- { 0x17,0xa4,0xc3,0x1a }, { 0x27,0x5e,0x96,0x3a },
- { 0xab,0x6b,0xcb,0x3b }, { 0x9d,0x45,0xf1,0x1f },
- { 0xfa,0x58,0xab,0xac }, { 0xe3,0x03,0x93,0x4b },
- { 0x30,0xfa,0x55,0x20 }, { 0x76,0x6d,0xf6,0xad },
- { 0xcc,0x76,0x91,0x88 }, { 0x02,0x4c,0x25,0xf5 },
- { 0xe5,0xd7,0xfc,0x4f }, { 0x2a,0xcb,0xd7,0xc5 },
- { 0x35,0x44,0x80,0x26 }, { 0x62,0xa3,0x8f,0xb5 },
- { 0xb1,0x5a,0x49,0xde }, { 0xba,0x1b,0x67,0x25 },
- { 0xea,0x0e,0x98,0x45 }, { 0xfe,0xc0,0xe1,0x5d },
- { 0x2f,0x75,0x02,0xc3 }, { 0x4c,0xf0,0x12,0x81 },
- { 0x46,0x97,0xa3,0x8d }, { 0xd3,0xf9,0xc6,0x6b },
- { 0x8f,0x5f,0xe7,0x03 }, { 0x92,0x9c,0x95,0x15 },
- { 0x6d,0x7a,0xeb,0xbf }, { 0x52,0x59,0xda,0x95 },
- { 0xbe,0x83,0x2d,0xd4 }, { 0x74,0x21,0xd3,0x58 },
- { 0xe0,0x69,0x29,0x49 }, { 0xc9,0xc8,0x44,0x8e },
- { 0xc2,0x89,0x6a,0x75 }, { 0x8e,0x79,0x78,0xf4 },
- { 0x58,0x3e,0x6b,0x99 }, { 0xb9,0x71,0xdd,0x27 },
- { 0xe1,0x4f,0xb6,0xbe }, { 0x88,0xad,0x17,0xf0 },
- { 0x20,0xac,0x66,0xc9 }, { 0xce,0x3a,0xb4,0x7d },
- { 0xdf,0x4a,0x18,0x63 }, { 0x1a,0x31,0x82,0xe5 },
- { 0x51,0x33,0x60,0x97 }, { 0x53,0x7f,0x45,0x62 },
- { 0x64,0x77,0xe0,0xb1 }, { 0x6b,0xae,0x84,0xbb },
- { 0x81,0xa0,0x1c,0xfe }, { 0x08,0x2b,0x94,0xf9 },
- { 0x48,0x68,0x58,0x70 }, { 0x45,0xfd,0x19,0x8f },
- { 0xde,0x6c,0x87,0x94 }, { 0x7b,0xf8,0xb7,0x52 },
- { 0x73,0xd3,0x23,0xab }, { 0x4b,0x02,0xe2,0x72 },
- { 0x1f,0x8f,0x57,0xe3 }, { 0x55,0xab,0x2a,0x66 },
- { 0xeb,0x28,0x07,0xb2 }, { 0xb5,0xc2,0x03,0x2f },
- { 0xc5,0x7b,0x9a,0x86 }, { 0x37,0x08,0xa5,0xd3 },
- { 0x28,0x87,0xf2,0x30 }, { 0xbf,0xa5,0xb2,0x23 },
- { 0x03,0x6a,0xba,0x02 }, { 0x16,0x82,0x5c,0xed },
- { 0xcf,0x1c,0x2b,0x8a }, { 0x79,0xb4,0x92,0xa7 },
- { 0x07,0xf2,0xf0,0xf3 }, { 0x69,0xe2,0xa1,0x4e },
- { 0xda,0xf4,0xcd,0x65 }, { 0x05,0xbe,0xd5,0x06 },
- { 0x34,0x62,0x1f,0xd1 }, { 0xa6,0xfe,0x8a,0xc4 },
- { 0x2e,0x53,0x9d,0x34 }, { 0xf3,0x55,0xa0,0xa2 },
- { 0x8a,0xe1,0x32,0x05 }, { 0xf6,0xeb,0x75,0xa4 },
- { 0x83,0xec,0x39,0x0b }, { 0x60,0xef,0xaa,0x40 },
- { 0x71,0x9f,0x06,0x5e }, { 0x6e,0x10,0x51,0xbd },
- { 0x21,0x8a,0xf9,0x3e }, { 0xdd,0x06,0x3d,0x96 },
- { 0x3e,0x05,0xae,0xdd }, { 0xe6,0xbd,0x46,0x4d },
- { 0x54,0x8d,0xb5,0x91 }, { 0xc4,0x5d,0x05,0x71 },
- { 0x06,0xd4,0x6f,0x04 }, { 0x50,0x15,0xff,0x60 },
- { 0x98,0xfb,0x24,0x19 }, { 0xbd,0xe9,0x97,0xd6 },
- { 0x40,0x43,0xcc,0x89 }, { 0xd9,0x9e,0x77,0x67 },
- { 0xe8,0x42,0xbd,0xb0 }, { 0x89,0x8b,0x88,0x07 },
- { 0x19,0x5b,0x38,0xe7 }, { 0xc8,0xee,0xdb,0x79 },
- { 0x7c,0x0a,0x47,0xa1 }, { 0x42,0x0f,0xe9,0x7c },
- { 0x84,0x1e,0xc9,0xf8 }, { 0x00,0x00,0x00,0x00 },
- { 0x80,0x86,0x83,0x09 }, { 0x2b,0xed,0x48,0x32 },
- { 0x11,0x70,0xac,0x1e }, { 0x5a,0x72,0x4e,0x6c },
- { 0x0e,0xff,0xfb,0xfd }, { 0x85,0x38,0x56,0x0f },
- { 0xae,0xd5,0x1e,0x3d }, { 0x2d,0x39,0x27,0x36 },
- { 0x0f,0xd9,0x64,0x0a }, { 0x5c,0xa6,0x21,0x68 },
- { 0x5b,0x54,0xd1,0x9b }, { 0x36,0x2e,0x3a,0x24 },
- { 0x0a,0x67,0xb1,0x0c }, { 0x57,0xe7,0x0f,0x93 },
- { 0xee,0x96,0xd2,0xb4 }, { 0x9b,0x91,0x9e,0x1b },
- { 0xc0,0xc5,0x4f,0x80 }, { 0xdc,0x20,0xa2,0x61 },
- { 0x77,0x4b,0x69,0x5a }, { 0x12,0x1a,0x16,0x1c },
- { 0x93,0xba,0x0a,0xe2 }, { 0xa0,0x2a,0xe5,0xc0 },
- { 0x22,0xe0,0x43,0x3c }, { 0x1b,0x17,0x1d,0x12 },
- { 0x09,0x0d,0x0b,0x0e }, { 0x8b,0xc7,0xad,0xf2 },
- { 0xb6,0xa8,0xb9,0x2d }, { 0x1e,0xa9,0xc8,0x14 },
- { 0xf1,0x19,0x85,0x57 }, { 0x75,0x07,0x4c,0xaf },
- { 0x99,0xdd,0xbb,0xee }, { 0x7f,0x60,0xfd,0xa3 },
- { 0x01,0x26,0x9f,0xf7 }, { 0x72,0xf5,0xbc,0x5c },
- { 0x66,0x3b,0xc5,0x44 }, { 0xfb,0x7e,0x34,0x5b },
- { 0x43,0x29,0x76,0x8b }, { 0x23,0xc6,0xdc,0xcb },
- { 0xed,0xfc,0x68,0xb6 }, { 0xe4,0xf1,0x63,0xb8 },
- { 0x31,0xdc,0xca,0xd7 }, { 0x63,0x85,0x10,0x42 },
- { 0x97,0x22,0x40,0x13 }, { 0xc6,0x11,0x20,0x84 },
- { 0x4a,0x24,0x7d,0x85 }, { 0xbb,0x3d,0xf8,0xd2 },
- { 0xf9,0x32,0x11,0xae }, { 0x29,0xa1,0x6d,0xc7 },
- { 0x9e,0x2f,0x4b,0x1d }, { 0xb2,0x30,0xf3,0xdc },
- { 0x86,0x52,0xec,0x0d }, { 0xc1,0xe3,0xd0,0x77 },
- { 0xb3,0x16,0x6c,0x2b }, { 0x70,0xb9,0x99,0xa9 },
- { 0x94,0x48,0xfa,0x11 }, { 0xe9,0x64,0x22,0x47 },
- { 0xfc,0x8c,0xc4,0xa8 }, { 0xf0,0x3f,0x1a,0xa0 },
- { 0x7d,0x2c,0xd8,0x56 }, { 0x33,0x90,0xef,0x22 },
- { 0x49,0x4e,0xc7,0x87 }, { 0x38,0xd1,0xc1,0xd9 },
- { 0xca,0xa2,0xfe,0x8c }, { 0xd4,0x0b,0x36,0x98 },
- { 0xf5,0x81,0xcf,0xa6 }, { 0x7a,0xde,0x28,0xa5 },
- { 0xb7,0x8e,0x26,0xda }, { 0xad,0xbf,0xa4,0x3f },
- { 0x3a,0x9d,0xe4,0x2c }, { 0x78,0x92,0x0d,0x50 },
- { 0x5f,0xcc,0x9b,0x6a }, { 0x7e,0x46,0x62,0x54 },
- { 0x8d,0x13,0xc2,0xf6 }, { 0xd8,0xb8,0xe8,0x90 },
- { 0x39,0xf7,0x5e,0x2e }, { 0xc3,0xaf,0xf5,0x82 },
- { 0x5d,0x80,0xbe,0x9f }, { 0xd0,0x93,0x7c,0x69 },
- { 0xd5,0x2d,0xa9,0x6f }, { 0x25,0x12,0xb3,0xcf },
- { 0xac,0x99,0x3b,0xc8 }, { 0x18,0x7d,0xa7,0x10 },
- { 0x9c,0x63,0x6e,0xe8 }, { 0x3b,0xbb,0x7b,0xdb },
- { 0x26,0x78,0x09,0xcd }, { 0x59,0x18,0xf4,0x6e },
- { 0x9a,0xb7,0x01,0xec }, { 0x4f,0x9a,0xa8,0x83 },
- { 0x95,0x6e,0x65,0xe6 }, { 0xff,0xe6,0x7e,0xaa },
- { 0xbc,0xcf,0x08,0x21 }, { 0x15,0xe8,0xe6,0xef },
- { 0xe7,0x9b,0xd9,0xba }, { 0x6f,0x36,0xce,0x4a },
- { 0x9f,0x09,0xd4,0xea }, { 0xb0,0x7c,0xd6,0x29 },
- { 0xa4,0xb2,0xaf,0x31 }, { 0x3f,0x23,0x31,0x2a },
- { 0xa5,0x94,0x30,0xc6 }, { 0xa2,0x66,0xc0,0x35 },
- { 0x4e,0xbc,0x37,0x74 }, { 0x82,0xca,0xa6,0xfc },
- { 0x90,0xd0,0xb0,0xe0 }, { 0xa7,0xd8,0x15,0x33 },
- { 0x04,0x98,0x4a,0xf1 }, { 0xec,0xda,0xf7,0x41 },
- { 0xcd,0x50,0x0e,0x7f }, { 0x91,0xf6,0x2f,0x17 },
- { 0x4d,0xd6,0x8d,0x76 }, { 0xef,0xb0,0x4d,0x43 },
- { 0xaa,0x4d,0x54,0xcc }, { 0x96,0x04,0xdf,0xe4 },
- { 0xd1,0xb5,0xe3,0x9e }, { 0x6a,0x88,0x1b,0x4c },
- { 0x2c,0x1f,0xb8,0xc1 }, { 0x65,0x51,0x7f,0x46 },
- { 0x5e,0xea,0x04,0x9d }, { 0x8c,0x35,0x5d,0x01 },
- { 0x87,0x74,0x73,0xfa }, { 0x0b,0x41,0x2e,0xfb },
- { 0x67,0x1d,0x5a,0xb3 }, { 0xdb,0xd2,0x52,0x92 },
- { 0x10,0x56,0x33,0xe9 }, { 0xd6,0x47,0x13,0x6d },
- { 0xd7,0x61,0x8c,0x9a }, { 0xa1,0x0c,0x7a,0x37 },
- { 0xf8,0x14,0x8e,0x59 }, { 0x13,0x3c,0x89,0xeb },
- { 0xa9,0x27,0xee,0xce }, { 0x61,0xc9,0x35,0xb7 },
- { 0x1c,0xe5,0xed,0xe1 }, { 0x47,0xb1,0x3c,0x7a },
- { 0xd2,0xdf,0x59,0x9c }, { 0xf2,0x73,0x3f,0x55 },
- { 0x14,0xce,0x79,0x18 }, { 0xc7,0x37,0xbf,0x73 },
- { 0xf7,0xcd,0xea,0x53 }, { 0xfd,0xaa,0x5b,0x5f },
- { 0x3d,0x6f,0x14,0xdf }, { 0x44,0xdb,0x86,0x78 },
- { 0xaf,0xf3,0x81,0xca }, { 0x68,0xc4,0x3e,0xb9 },
- { 0x24,0x34,0x2c,0x38 }, { 0xa3,0x40,0x5f,0xc2 },
- { 0x1d,0xc3,0x72,0x16 }, { 0xe2,0x25,0x0c,0xbc },
- { 0x3c,0x49,0x8b,0x28 }, { 0x0d,0x95,0x41,0xff },
- { 0xa8,0x01,0x71,0x39 }, { 0x0c,0xb3,0xde,0x08 },
- { 0xb4,0xe4,0x9c,0xd8 }, { 0x56,0xc1,0x90,0x64 },
- { 0xcb,0x84,0x61,0x7b }, { 0x32,0xb6,0x70,0xd5 },
- { 0x6c,0x5c,0x74,0x48 }, { 0xb8,0x57,0x42,0xd0 }
-};
-
-static const byte S5[256] = {
- 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38,
- 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb,
- 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87,
- 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb,
- 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d,
- 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e,
- 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2,
- 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25,
- 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16,
- 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92,
- 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda,
- 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84,
- 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a,
- 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06,
- 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02,
- 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b,
- 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea,
- 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73,
- 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85,
- 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e,
- 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89,
- 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b,
- 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20,
- 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4,
- 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31,
- 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f,
- 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d,
- 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef,
- 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0,
- 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61,
- 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26,
- 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
-};
-
-static const byte U1[256][4] = {
- { 0x00,0x00,0x00,0x00 }, { 0x0e,0x09,0x0d,0x0b },
- { 0x1c,0x12,0x1a,0x16 }, { 0x12,0x1b,0x17,0x1d },
- { 0x38,0x24,0x34,0x2c }, { 0x36,0x2d,0x39,0x27 },
- { 0x24,0x36,0x2e,0x3a }, { 0x2a,0x3f,0x23,0x31 },
- { 0x70,0x48,0x68,0x58 }, { 0x7e,0x41,0x65,0x53 },
- { 0x6c,0x5a,0x72,0x4e }, { 0x62,0x53,0x7f,0x45 },
- { 0x48,0x6c,0x5c,0x74 }, { 0x46,0x65,0x51,0x7f },
- { 0x54,0x7e,0x46,0x62 }, { 0x5a,0x77,0x4b,0x69 },
- { 0xe0,0x90,0xd0,0xb0 }, { 0xee,0x99,0xdd,0xbb },
- { 0xfc,0x82,0xca,0xa6 }, { 0xf2,0x8b,0xc7,0xad },
- { 0xd8,0xb4,0xe4,0x9c }, { 0xd6,0xbd,0xe9,0x97 },
- { 0xc4,0xa6,0xfe,0x8a }, { 0xca,0xaf,0xf3,0x81 },
- { 0x90,0xd8,0xb8,0xe8 }, { 0x9e,0xd1,0xb5,0xe3 },
- { 0x8c,0xca,0xa2,0xfe }, { 0x82,0xc3,0xaf,0xf5 },
- { 0xa8,0xfc,0x8c,0xc4 }, { 0xa6,0xf5,0x81,0xcf },
- { 0xb4,0xee,0x96,0xd2 }, { 0xba,0xe7,0x9b,0xd9 },
- { 0xdb,0x3b,0xbb,0x7b }, { 0xd5,0x32,0xb6,0x70 },
- { 0xc7,0x29,0xa1,0x6d }, { 0xc9,0x20,0xac,0x66 },
- { 0xe3,0x1f,0x8f,0x57 }, { 0xed,0x16,0x82,0x5c },
- { 0xff,0x0d,0x95,0x41 }, { 0xf1,0x04,0x98,0x4a },
- { 0xab,0x73,0xd3,0x23 }, { 0xa5,0x7a,0xde,0x28 },
- { 0xb7,0x61,0xc9,0x35 }, { 0xb9,0x68,0xc4,0x3e },
- { 0x93,0x57,0xe7,0x0f }, { 0x9d,0x5e,0xea,0x04 },
- { 0x8f,0x45,0xfd,0x19 }, { 0x81,0x4c,0xf0,0x12 },
- { 0x3b,0xab,0x6b,0xcb }, { 0x35,0xa2,0x66,0xc0 },
- { 0x27,0xb9,0x71,0xdd }, { 0x29,0xb0,0x7c,0xd6 },
- { 0x03,0x8f,0x5f,0xe7 }, { 0x0d,0x86,0x52,0xec },
- { 0x1f,0x9d,0x45,0xf1 }, { 0x11,0x94,0x48,0xfa },
- { 0x4b,0xe3,0x03,0x93 }, { 0x45,0xea,0x0e,0x98 },
- { 0x57,0xf1,0x19,0x85 }, { 0x59,0xf8,0x14,0x8e },
- { 0x73,0xc7,0x37,0xbf }, { 0x7d,0xce,0x3a,0xb4 },
- { 0x6f,0xd5,0x2d,0xa9 }, { 0x61,0xdc,0x20,0xa2 },
- { 0xad,0x76,0x6d,0xf6 }, { 0xa3,0x7f,0x60,0xfd },
- { 0xb1,0x64,0x77,0xe0 }, { 0xbf,0x6d,0x7a,0xeb },
- { 0x95,0x52,0x59,0xda }, { 0x9b,0x5b,0x54,0xd1 },
- { 0x89,0x40,0x43,0xcc }, { 0x87,0x49,0x4e,0xc7 },
- { 0xdd,0x3e,0x05,0xae }, { 0xd3,0x37,0x08,0xa5 },
- { 0xc1,0x2c,0x1f,0xb8 }, { 0xcf,0x25,0x12,0xb3 },
- { 0xe5,0x1a,0x31,0x82 }, { 0xeb,0x13,0x3c,0x89 },
- { 0xf9,0x08,0x2b,0x94 }, { 0xf7,0x01,0x26,0x9f },
- { 0x4d,0xe6,0xbd,0x46 }, { 0x43,0xef,0xb0,0x4d },
- { 0x51,0xf4,0xa7,0x50 }, { 0x5f,0xfd,0xaa,0x5b },
- { 0x75,0xc2,0x89,0x6a }, { 0x7b,0xcb,0x84,0x61 },
- { 0x69,0xd0,0x93,0x7c }, { 0x67,0xd9,0x9e,0x77 },
- { 0x3d,0xae,0xd5,0x1e }, { 0x33,0xa7,0xd8,0x15 },
- { 0x21,0xbc,0xcf,0x08 }, { 0x2f,0xb5,0xc2,0x03 },
- { 0x05,0x8a,0xe1,0x32 }, { 0x0b,0x83,0xec,0x39 },
- { 0x19,0x98,0xfb,0x24 }, { 0x17,0x91,0xf6,0x2f },
- { 0x76,0x4d,0xd6,0x8d }, { 0x78,0x44,0xdb,0x86 },
- { 0x6a,0x5f,0xcc,0x9b }, { 0x64,0x56,0xc1,0x90 },
- { 0x4e,0x69,0xe2,0xa1 }, { 0x40,0x60,0xef,0xaa },
- { 0x52,0x7b,0xf8,0xb7 }, { 0x5c,0x72,0xf5,0xbc },
- { 0x06,0x05,0xbe,0xd5 }, { 0x08,0x0c,0xb3,0xde },
- { 0x1a,0x17,0xa4,0xc3 }, { 0x14,0x1e,0xa9,0xc8 },
- { 0x3e,0x21,0x8a,0xf9 }, { 0x30,0x28,0x87,0xf2 },
- { 0x22,0x33,0x90,0xef }, { 0x2c,0x3a,0x9d,0xe4 },
- { 0x96,0xdd,0x06,0x3d }, { 0x98,0xd4,0x0b,0x36 },
- { 0x8a,0xcf,0x1c,0x2b }, { 0x84,0xc6,0x11,0x20 },
- { 0xae,0xf9,0x32,0x11 }, { 0xa0,0xf0,0x3f,0x1a },
- { 0xb2,0xeb,0x28,0x07 }, { 0xbc,0xe2,0x25,0x0c },
- { 0xe6,0x95,0x6e,0x65 }, { 0xe8,0x9c,0x63,0x6e },
- { 0xfa,0x87,0x74,0x73 }, { 0xf4,0x8e,0x79,0x78 },
- { 0xde,0xb1,0x5a,0x49 }, { 0xd0,0xb8,0x57,0x42 },
- { 0xc2,0xa3,0x40,0x5f }, { 0xcc,0xaa,0x4d,0x54 },
- { 0x41,0xec,0xda,0xf7 }, { 0x4f,0xe5,0xd7,0xfc },
- { 0x5d,0xfe,0xc0,0xe1 }, { 0x53,0xf7,0xcd,0xea },
- { 0x79,0xc8,0xee,0xdb }, { 0x77,0xc1,0xe3,0xd0 },
- { 0x65,0xda,0xf4,0xcd }, { 0x6b,0xd3,0xf9,0xc6 },
- { 0x31,0xa4,0xb2,0xaf }, { 0x3f,0xad,0xbf,0xa4 },
- { 0x2d,0xb6,0xa8,0xb9 }, { 0x23,0xbf,0xa5,0xb2 },
- { 0x09,0x80,0x86,0x83 }, { 0x07,0x89,0x8b,0x88 },
- { 0x15,0x92,0x9c,0x95 }, { 0x1b,0x9b,0x91,0x9e },
- { 0xa1,0x7c,0x0a,0x47 }, { 0xaf,0x75,0x07,0x4c },
- { 0xbd,0x6e,0x10,0x51 }, { 0xb3,0x67,0x1d,0x5a },
- { 0x99,0x58,0x3e,0x6b }, { 0x97,0x51,0x33,0x60 },
- { 0x85,0x4a,0x24,0x7d }, { 0x8b,0x43,0x29,0x76 },
- { 0xd1,0x34,0x62,0x1f }, { 0xdf,0x3d,0x6f,0x14 },
- { 0xcd,0x26,0x78,0x09 }, { 0xc3,0x2f,0x75,0x02 },
- { 0xe9,0x10,0x56,0x33 }, { 0xe7,0x19,0x5b,0x38 },
- { 0xf5,0x02,0x4c,0x25 }, { 0xfb,0x0b,0x41,0x2e },
- { 0x9a,0xd7,0x61,0x8c }, { 0x94,0xde,0x6c,0x87 },
- { 0x86,0xc5,0x7b,0x9a }, { 0x88,0xcc,0x76,0x91 },
- { 0xa2,0xf3,0x55,0xa0 }, { 0xac,0xfa,0x58,0xab },
- { 0xbe,0xe1,0x4f,0xb6 }, { 0xb0,0xe8,0x42,0xbd },
- { 0xea,0x9f,0x09,0xd4 }, { 0xe4,0x96,0x04,0xdf },
- { 0xf6,0x8d,0x13,0xc2 }, { 0xf8,0x84,0x1e,0xc9 },
- { 0xd2,0xbb,0x3d,0xf8 }, { 0xdc,0xb2,0x30,0xf3 },
- { 0xce,0xa9,0x27,0xee }, { 0xc0,0xa0,0x2a,0xe5 },
- { 0x7a,0x47,0xb1,0x3c }, { 0x74,0x4e,0xbc,0x37 },
- { 0x66,0x55,0xab,0x2a }, { 0x68,0x5c,0xa6,0x21 },
- { 0x42,0x63,0x85,0x10 }, { 0x4c,0x6a,0x88,0x1b },
- { 0x5e,0x71,0x9f,0x06 }, { 0x50,0x78,0x92,0x0d },
- { 0x0a,0x0f,0xd9,0x64 }, { 0x04,0x06,0xd4,0x6f },
- { 0x16,0x1d,0xc3,0x72 }, { 0x18,0x14,0xce,0x79 },
- { 0x32,0x2b,0xed,0x48 }, { 0x3c,0x22,0xe0,0x43 },
- { 0x2e,0x39,0xf7,0x5e }, { 0x20,0x30,0xfa,0x55 },
- { 0xec,0x9a,0xb7,0x01 }, { 0xe2,0x93,0xba,0x0a },
- { 0xf0,0x88,0xad,0x17 }, { 0xfe,0x81,0xa0,0x1c },
- { 0xd4,0xbe,0x83,0x2d }, { 0xda,0xb7,0x8e,0x26 },
- { 0xc8,0xac,0x99,0x3b }, { 0xc6,0xa5,0x94,0x30 },
- { 0x9c,0xd2,0xdf,0x59 }, { 0x92,0xdb,0xd2,0x52 },
- { 0x80,0xc0,0xc5,0x4f }, { 0x8e,0xc9,0xc8,0x44 },
- { 0xa4,0xf6,0xeb,0x75 }, { 0xaa,0xff,0xe6,0x7e },
- { 0xb8,0xe4,0xf1,0x63 }, { 0xb6,0xed,0xfc,0x68 },
- { 0x0c,0x0a,0x67,0xb1 }, { 0x02,0x03,0x6a,0xba },
- { 0x10,0x18,0x7d,0xa7 }, { 0x1e,0x11,0x70,0xac },
- { 0x34,0x2e,0x53,0x9d }, { 0x3a,0x27,0x5e,0x96 },
- { 0x28,0x3c,0x49,0x8b }, { 0x26,0x35,0x44,0x80 },
- { 0x7c,0x42,0x0f,0xe9 }, { 0x72,0x4b,0x02,0xe2 },
- { 0x60,0x50,0x15,0xff }, { 0x6e,0x59,0x18,0xf4 },
- { 0x44,0x66,0x3b,0xc5 }, { 0x4a,0x6f,0x36,0xce },
- { 0x58,0x74,0x21,0xd3 }, { 0x56,0x7d,0x2c,0xd8 },
- { 0x37,0xa1,0x0c,0x7a }, { 0x39,0xa8,0x01,0x71 },
- { 0x2b,0xb3,0x16,0x6c }, { 0x25,0xba,0x1b,0x67 },
- { 0x0f,0x85,0x38,0x56 }, { 0x01,0x8c,0x35,0x5d },
- { 0x13,0x97,0x22,0x40 }, { 0x1d,0x9e,0x2f,0x4b },
- { 0x47,0xe9,0x64,0x22 }, { 0x49,0xe0,0x69,0x29 },
- { 0x5b,0xfb,0x7e,0x34 }, { 0x55,0xf2,0x73,0x3f },
- { 0x7f,0xcd,0x50,0x0e }, { 0x71,0xc4,0x5d,0x05 },
- { 0x63,0xdf,0x4a,0x18 }, { 0x6d,0xd6,0x47,0x13 },
- { 0xd7,0x31,0xdc,0xca }, { 0xd9,0x38,0xd1,0xc1 },
- { 0xcb,0x23,0xc6,0xdc }, { 0xc5,0x2a,0xcb,0xd7 },
- { 0xef,0x15,0xe8,0xe6 }, { 0xe1,0x1c,0xe5,0xed },
- { 0xf3,0x07,0xf2,0xf0 }, { 0xfd,0x0e,0xff,0xfb },
- { 0xa7,0x79,0xb4,0x92 }, { 0xa9,0x70,0xb9,0x99 },
- { 0xbb,0x6b,0xae,0x84 }, { 0xb5,0x62,0xa3,0x8f },
- { 0x9f,0x5d,0x80,0xbe }, { 0x91,0x54,0x8d,0xb5 },
- { 0x83,0x4f,0x9a,0xa8 }, { 0x8d,0x46,0x97,0xa3 }
-};
-
-static const byte U2[256][4] = {
- { 0x00,0x00,0x00,0x00 }, { 0x0b,0x0e,0x09,0x0d },
- { 0x16,0x1c,0x12,0x1a }, { 0x1d,0x12,0x1b,0x17 },
- { 0x2c,0x38,0x24,0x34 }, { 0x27,0x36,0x2d,0x39 },
- { 0x3a,0x24,0x36,0x2e }, { 0x31,0x2a,0x3f,0x23 },
- { 0x58,0x70,0x48,0x68 }, { 0x53,0x7e,0x41,0x65 },
- { 0x4e,0x6c,0x5a,0x72 }, { 0x45,0x62,0x53,0x7f },
- { 0x74,0x48,0x6c,0x5c }, { 0x7f,0x46,0x65,0x51 },
- { 0x62,0x54,0x7e,0x46 }, { 0x69,0x5a,0x77,0x4b },
- { 0xb0,0xe0,0x90,0xd0 }, { 0xbb,0xee,0x99,0xdd },
- { 0xa6,0xfc,0x82,0xca }, { 0xad,0xf2,0x8b,0xc7 },
- { 0x9c,0xd8,0xb4,0xe4 }, { 0x97,0xd6,0xbd,0xe9 },
- { 0x8a,0xc4,0xa6,0xfe }, { 0x81,0xca,0xaf,0xf3 },
- { 0xe8,0x90,0xd8,0xb8 }, { 0xe3,0x9e,0xd1,0xb5 },
- { 0xfe,0x8c,0xca,0xa2 }, { 0xf5,0x82,0xc3,0xaf },
- { 0xc4,0xa8,0xfc,0x8c }, { 0xcf,0xa6,0xf5,0x81 },
- { 0xd2,0xb4,0xee,0x96 }, { 0xd9,0xba,0xe7,0x9b },
- { 0x7b,0xdb,0x3b,0xbb }, { 0x70,0xd5,0x32,0xb6 },
- { 0x6d,0xc7,0x29,0xa1 }, { 0x66,0xc9,0x20,0xac },
- { 0x57,0xe3,0x1f,0x8f }, { 0x5c,0xed,0x16,0x82 },
- { 0x41,0xff,0x0d,0x95 }, { 0x4a,0xf1,0x04,0x98 },
- { 0x23,0xab,0x73,0xd3 }, { 0x28,0xa5,0x7a,0xde },
- { 0x35,0xb7,0x61,0xc9 }, { 0x3e,0xb9,0x68,0xc4 },
- { 0x0f,0x93,0x57,0xe7 }, { 0x04,0x9d,0x5e,0xea },
- { 0x19,0x8f,0x45,0xfd }, { 0x12,0x81,0x4c,0xf0 },
- { 0xcb,0x3b,0xab,0x6b }, { 0xc0,0x35,0xa2,0x66 },
- { 0xdd,0x27,0xb9,0x71 }, { 0xd6,0x29,0xb0,0x7c },
- { 0xe7,0x03,0x8f,0x5f }, { 0xec,0x0d,0x86,0x52 },
- { 0xf1,0x1f,0x9d,0x45 }, { 0xfa,0x11,0x94,0x48 },
- { 0x93,0x4b,0xe3,0x03 }, { 0x98,0x45,0xea,0x0e },
- { 0x85,0x57,0xf1,0x19 }, { 0x8e,0x59,0xf8,0x14 },
- { 0xbf,0x73,0xc7,0x37 }, { 0xb4,0x7d,0xce,0x3a },
- { 0xa9,0x6f,0xd5,0x2d }, { 0xa2,0x61,0xdc,0x20 },
- { 0xf6,0xad,0x76,0x6d }, { 0xfd,0xa3,0x7f,0x60 },
- { 0xe0,0xb1,0x64,0x77 }, { 0xeb,0xbf,0x6d,0x7a },
- { 0xda,0x95,0x52,0x59 }, { 0xd1,0x9b,0x5b,0x54 },
- { 0xcc,0x89,0x40,0x43 }, { 0xc7,0x87,0x49,0x4e },
- { 0xae,0xdd,0x3e,0x05 }, { 0xa5,0xd3,0x37,0x08 },
- { 0xb8,0xc1,0x2c,0x1f }, { 0xb3,0xcf,0x25,0x12 },
- { 0x82,0xe5,0x1a,0x31 }, { 0x89,0xeb,0x13,0x3c },
- { 0x94,0xf9,0x08,0x2b }, { 0x9f,0xf7,0x01,0x26 },
- { 0x46,0x4d,0xe6,0xbd }, { 0x4d,0x43,0xef,0xb0 },
- { 0x50,0x51,0xf4,0xa7 }, { 0x5b,0x5f,0xfd,0xaa },
- { 0x6a,0x75,0xc2,0x89 }, { 0x61,0x7b,0xcb,0x84 },
- { 0x7c,0x69,0xd0,0x93 }, { 0x77,0x67,0xd9,0x9e },
- { 0x1e,0x3d,0xae,0xd5 }, { 0x15,0x33,0xa7,0xd8 },
- { 0x08,0x21,0xbc,0xcf }, { 0x03,0x2f,0xb5,0xc2 },
- { 0x32,0x05,0x8a,0xe1 }, { 0x39,0x0b,0x83,0xec },
- { 0x24,0x19,0x98,0xfb }, { 0x2f,0x17,0x91,0xf6 },
- { 0x8d,0x76,0x4d,0xd6 }, { 0x86,0x78,0x44,0xdb },
- { 0x9b,0x6a,0x5f,0xcc }, { 0x90,0x64,0x56,0xc1 },
- { 0xa1,0x4e,0x69,0xe2 }, { 0xaa,0x40,0x60,0xef },
- { 0xb7,0x52,0x7b,0xf8 }, { 0xbc,0x5c,0x72,0xf5 },
- { 0xd5,0x06,0x05,0xbe }, { 0xde,0x08,0x0c,0xb3 },
- { 0xc3,0x1a,0x17,0xa4 }, { 0xc8,0x14,0x1e,0xa9 },
- { 0xf9,0x3e,0x21,0x8a }, { 0xf2,0x30,0x28,0x87 },
- { 0xef,0x22,0x33,0x90 }, { 0xe4,0x2c,0x3a,0x9d },
- { 0x3d,0x96,0xdd,0x06 }, { 0x36,0x98,0xd4,0x0b },
- { 0x2b,0x8a,0xcf,0x1c }, { 0x20,0x84,0xc6,0x11 },
- { 0x11,0xae,0xf9,0x32 }, { 0x1a,0xa0,0xf0,0x3f },
- { 0x07,0xb2,0xeb,0x28 }, { 0x0c,0xbc,0xe2,0x25 },
- { 0x65,0xe6,0x95,0x6e }, { 0x6e,0xe8,0x9c,0x63 },
- { 0x73,0xfa,0x87,0x74 }, { 0x78,0xf4,0x8e,0x79 },
- { 0x49,0xde,0xb1,0x5a }, { 0x42,0xd0,0xb8,0x57 },
- { 0x5f,0xc2,0xa3,0x40 }, { 0x54,0xcc,0xaa,0x4d },
- { 0xf7,0x41,0xec,0xda }, { 0xfc,0x4f,0xe5,0xd7 },
- { 0xe1,0x5d,0xfe,0xc0 }, { 0xea,0x53,0xf7,0xcd },
- { 0xdb,0x79,0xc8,0xee }, { 0xd0,0x77,0xc1,0xe3 },
- { 0xcd,0x65,0xda,0xf4 }, { 0xc6,0x6b,0xd3,0xf9 },
- { 0xaf,0x31,0xa4,0xb2 }, { 0xa4,0x3f,0xad,0xbf },
- { 0xb9,0x2d,0xb6,0xa8 }, { 0xb2,0x23,0xbf,0xa5 },
- { 0x83,0x09,0x80,0x86 }, { 0x88,0x07,0x89,0x8b },
- { 0x95,0x15,0x92,0x9c }, { 0x9e,0x1b,0x9b,0x91 },
- { 0x47,0xa1,0x7c,0x0a }, { 0x4c,0xaf,0x75,0x07 },
- { 0x51,0xbd,0x6e,0x10 }, { 0x5a,0xb3,0x67,0x1d },
- { 0x6b,0x99,0x58,0x3e }, { 0x60,0x97,0x51,0x33 },
- { 0x7d,0x85,0x4a,0x24 }, { 0x76,0x8b,0x43,0x29 },
- { 0x1f,0xd1,0x34,0x62 }, { 0x14,0xdf,0x3d,0x6f },
- { 0x09,0xcd,0x26,0x78 }, { 0x02,0xc3,0x2f,0x75 },
- { 0x33,0xe9,0x10,0x56 }, { 0x38,0xe7,0x19,0x5b },
- { 0x25,0xf5,0x02,0x4c }, { 0x2e,0xfb,0x0b,0x41 },
- { 0x8c,0x9a,0xd7,0x61 }, { 0x87,0x94,0xde,0x6c },
- { 0x9a,0x86,0xc5,0x7b }, { 0x91,0x88,0xcc,0x76 },
- { 0xa0,0xa2,0xf3,0x55 }, { 0xab,0xac,0xfa,0x58 },
- { 0xb6,0xbe,0xe1,0x4f }, { 0xbd,0xb0,0xe8,0x42 },
- { 0xd4,0xea,0x9f,0x09 }, { 0xdf,0xe4,0x96,0x04 },
- { 0xc2,0xf6,0x8d,0x13 }, { 0xc9,0xf8,0x84,0x1e },
- { 0xf8,0xd2,0xbb,0x3d }, { 0xf3,0xdc,0xb2,0x30 },
- { 0xee,0xce,0xa9,0x27 }, { 0xe5,0xc0,0xa0,0x2a },
- { 0x3c,0x7a,0x47,0xb1 }, { 0x37,0x74,0x4e,0xbc },
- { 0x2a,0x66,0x55,0xab }, { 0x21,0x68,0x5c,0xa6 },
- { 0x10,0x42,0x63,0x85 }, { 0x1b,0x4c,0x6a,0x88 },
- { 0x06,0x5e,0x71,0x9f }, { 0x0d,0x50,0x78,0x92 },
- { 0x64,0x0a,0x0f,0xd9 }, { 0x6f,0x04,0x06,0xd4 },
- { 0x72,0x16,0x1d,0xc3 }, { 0x79,0x18,0x14,0xce },
- { 0x48,0x32,0x2b,0xed }, { 0x43,0x3c,0x22,0xe0 },
- { 0x5e,0x2e,0x39,0xf7 }, { 0x55,0x20,0x30,0xfa },
- { 0x01,0xec,0x9a,0xb7 }, { 0x0a,0xe2,0x93,0xba },
- { 0x17,0xf0,0x88,0xad }, { 0x1c,0xfe,0x81,0xa0 },
- { 0x2d,0xd4,0xbe,0x83 }, { 0x26,0xda,0xb7,0x8e },
- { 0x3b,0xc8,0xac,0x99 }, { 0x30,0xc6,0xa5,0x94 },
- { 0x59,0x9c,0xd2,0xdf }, { 0x52,0x92,0xdb,0xd2 },
- { 0x4f,0x80,0xc0,0xc5 }, { 0x44,0x8e,0xc9,0xc8 },
- { 0x75,0xa4,0xf6,0xeb }, { 0x7e,0xaa,0xff,0xe6 },
- { 0x63,0xb8,0xe4,0xf1 }, { 0x68,0xb6,0xed,0xfc },
- { 0xb1,0x0c,0x0a,0x67 }, { 0xba,0x02,0x03,0x6a },
- { 0xa7,0x10,0x18,0x7d }, { 0xac,0x1e,0x11,0x70 },
- { 0x9d,0x34,0x2e,0x53 }, { 0x96,0x3a,0x27,0x5e },
- { 0x8b,0x28,0x3c,0x49 }, { 0x80,0x26,0x35,0x44 },
- { 0xe9,0x7c,0x42,0x0f }, { 0xe2,0x72,0x4b,0x02 },
- { 0xff,0x60,0x50,0x15 }, { 0xf4,0x6e,0x59,0x18 },
- { 0xc5,0x44,0x66,0x3b }, { 0xce,0x4a,0x6f,0x36 },
- { 0xd3,0x58,0x74,0x21 }, { 0xd8,0x56,0x7d,0x2c },
- { 0x7a,0x37,0xa1,0x0c }, { 0x71,0x39,0xa8,0x01 },
- { 0x6c,0x2b,0xb3,0x16 }, { 0x67,0x25,0xba,0x1b },
- { 0x56,0x0f,0x85,0x38 }, { 0x5d,0x01,0x8c,0x35 },
- { 0x40,0x13,0x97,0x22 }, { 0x4b,0x1d,0x9e,0x2f },
- { 0x22,0x47,0xe9,0x64 }, { 0x29,0x49,0xe0,0x69 },
- { 0x34,0x5b,0xfb,0x7e }, { 0x3f,0x55,0xf2,0x73 },
- { 0x0e,0x7f,0xcd,0x50 }, { 0x05,0x71,0xc4,0x5d },
- { 0x18,0x63,0xdf,0x4a }, { 0x13,0x6d,0xd6,0x47 },
- { 0xca,0xd7,0x31,0xdc }, { 0xc1,0xd9,0x38,0xd1 },
- { 0xdc,0xcb,0x23,0xc6 }, { 0xd7,0xc5,0x2a,0xcb },
- { 0xe6,0xef,0x15,0xe8 }, { 0xed,0xe1,0x1c,0xe5 },
- { 0xf0,0xf3,0x07,0xf2 }, { 0xfb,0xfd,0x0e,0xff },
- { 0x92,0xa7,0x79,0xb4 }, { 0x99,0xa9,0x70,0xb9 },
- { 0x84,0xbb,0x6b,0xae }, { 0x8f,0xb5,0x62,0xa3 },
- { 0xbe,0x9f,0x5d,0x80 }, { 0xb5,0x91,0x54,0x8d },
- { 0xa8,0x83,0x4f,0x9a }, { 0xa3,0x8d,0x46,0x97 }
-};
-
-static const byte U3[256][4] = {
- { 0x00,0x00,0x00,0x00 }, { 0x0d,0x0b,0x0e,0x09 },
- { 0x1a,0x16,0x1c,0x12 }, { 0x17,0x1d,0x12,0x1b },
- { 0x34,0x2c,0x38,0x24 }, { 0x39,0x27,0x36,0x2d },
- { 0x2e,0x3a,0x24,0x36 }, { 0x23,0x31,0x2a,0x3f },
- { 0x68,0x58,0x70,0x48 }, { 0x65,0x53,0x7e,0x41 },
- { 0x72,0x4e,0x6c,0x5a }, { 0x7f,0x45,0x62,0x53 },
- { 0x5c,0x74,0x48,0x6c }, { 0x51,0x7f,0x46,0x65 },
- { 0x46,0x62,0x54,0x7e }, { 0x4b,0x69,0x5a,0x77 },
- { 0xd0,0xb0,0xe0,0x90 }, { 0xdd,0xbb,0xee,0x99 },
- { 0xca,0xa6,0xfc,0x82 }, { 0xc7,0xad,0xf2,0x8b },
- { 0xe4,0x9c,0xd8,0xb4 }, { 0xe9,0x97,0xd6,0xbd },
- { 0xfe,0x8a,0xc4,0xa6 }, { 0xf3,0x81,0xca,0xaf },
- { 0xb8,0xe8,0x90,0xd8 }, { 0xb5,0xe3,0x9e,0xd1 },
- { 0xa2,0xfe,0x8c,0xca }, { 0xaf,0xf5,0x82,0xc3 },
- { 0x8c,0xc4,0xa8,0xfc }, { 0x81,0xcf,0xa6,0xf5 },
- { 0x96,0xd2,0xb4,0xee }, { 0x9b,0xd9,0xba,0xe7 },
- { 0xbb,0x7b,0xdb,0x3b }, { 0xb6,0x70,0xd5,0x32 },
- { 0xa1,0x6d,0xc7,0x29 }, { 0xac,0x66,0xc9,0x20 },
- { 0x8f,0x57,0xe3,0x1f }, { 0x82,0x5c,0xed,0x16 },
- { 0x95,0x41,0xff,0x0d }, { 0x98,0x4a,0xf1,0x04 },
- { 0xd3,0x23,0xab,0x73 }, { 0xde,0x28,0xa5,0x7a },
- { 0xc9,0x35,0xb7,0x61 }, { 0xc4,0x3e,0xb9,0x68 },
- { 0xe7,0x0f,0x93,0x57 }, { 0xea,0x04,0x9d,0x5e },
- { 0xfd,0x19,0x8f,0x45 }, { 0xf0,0x12,0x81,0x4c },
- { 0x6b,0xcb,0x3b,0xab }, { 0x66,0xc0,0x35,0xa2 },
- { 0x71,0xdd,0x27,0xb9 }, { 0x7c,0xd6,0x29,0xb0 },
- { 0x5f,0xe7,0x03,0x8f }, { 0x52,0xec,0x0d,0x86 },
- { 0x45,0xf1,0x1f,0x9d }, { 0x48,0xfa,0x11,0x94 },
- { 0x03,0x93,0x4b,0xe3 }, { 0x0e,0x98,0x45,0xea },
- { 0x19,0x85,0x57,0xf1 }, { 0x14,0x8e,0x59,0xf8 },
- { 0x37,0xbf,0x73,0xc7 }, { 0x3a,0xb4,0x7d,0xce },
- { 0x2d,0xa9,0x6f,0xd5 }, { 0x20,0xa2,0x61,0xdc },
- { 0x6d,0xf6,0xad,0x76 }, { 0x60,0xfd,0xa3,0x7f },
- { 0x77,0xe0,0xb1,0x64 }, { 0x7a,0xeb,0xbf,0x6d },
- { 0x59,0xda,0x95,0x52 }, { 0x54,0xd1,0x9b,0x5b },
- { 0x43,0xcc,0x89,0x40 }, { 0x4e,0xc7,0x87,0x49 },
- { 0x05,0xae,0xdd,0x3e }, { 0x08,0xa5,0xd3,0x37 },
- { 0x1f,0xb8,0xc1,0x2c }, { 0x12,0xb3,0xcf,0x25 },
- { 0x31,0x82,0xe5,0x1a }, { 0x3c,0x89,0xeb,0x13 },
- { 0x2b,0x94,0xf9,0x08 }, { 0x26,0x9f,0xf7,0x01 },
- { 0xbd,0x46,0x4d,0xe6 }, { 0xb0,0x4d,0x43,0xef },
- { 0xa7,0x50,0x51,0xf4 }, { 0xaa,0x5b,0x5f,0xfd },
- { 0x89,0x6a,0x75,0xc2 }, { 0x84,0x61,0x7b,0xcb },
- { 0x93,0x7c,0x69,0xd0 }, { 0x9e,0x77,0x67,0xd9 },
- { 0xd5,0x1e,0x3d,0xae }, { 0xd8,0x15,0x33,0xa7 },
- { 0xcf,0x08,0x21,0xbc }, { 0xc2,0x03,0x2f,0xb5 },
- { 0xe1,0x32,0x05,0x8a }, { 0xec,0x39,0x0b,0x83 },
- { 0xfb,0x24,0x19,0x98 }, { 0xf6,0x2f,0x17,0x91 },
- { 0xd6,0x8d,0x76,0x4d }, { 0xdb,0x86,0x78,0x44 },
- { 0xcc,0x9b,0x6a,0x5f }, { 0xc1,0x90,0x64,0x56 },
- { 0xe2,0xa1,0x4e,0x69 }, { 0xef,0xaa,0x40,0x60 },
- { 0xf8,0xb7,0x52,0x7b }, { 0xf5,0xbc,0x5c,0x72 },
- { 0xbe,0xd5,0x06,0x05 }, { 0xb3,0xde,0x08,0x0c },
- { 0xa4,0xc3,0x1a,0x17 }, { 0xa9,0xc8,0x14,0x1e },
- { 0x8a,0xf9,0x3e,0x21 }, { 0x87,0xf2,0x30,0x28 },
- { 0x90,0xef,0x22,0x33 }, { 0x9d,0xe4,0x2c,0x3a },
- { 0x06,0x3d,0x96,0xdd }, { 0x0b,0x36,0x98,0xd4 },
- { 0x1c,0x2b,0x8a,0xcf }, { 0x11,0x20,0x84,0xc6 },
- { 0x32,0x11,0xae,0xf9 }, { 0x3f,0x1a,0xa0,0xf0 },
- { 0x28,0x07,0xb2,0xeb }, { 0x25,0x0c,0xbc,0xe2 },
- { 0x6e,0x65,0xe6,0x95 }, { 0x63,0x6e,0xe8,0x9c },
- { 0x74,0x73,0xfa,0x87 }, { 0x79,0x78,0xf4,0x8e },
- { 0x5a,0x49,0xde,0xb1 }, { 0x57,0x42,0xd0,0xb8 },
- { 0x40,0x5f,0xc2,0xa3 }, { 0x4d,0x54,0xcc,0xaa },
- { 0xda,0xf7,0x41,0xec }, { 0xd7,0xfc,0x4f,0xe5 },
- { 0xc0,0xe1,0x5d,0xfe }, { 0xcd,0xea,0x53,0xf7 },
- { 0xee,0xdb,0x79,0xc8 }, { 0xe3,0xd0,0x77,0xc1 },
- { 0xf4,0xcd,0x65,0xda }, { 0xf9,0xc6,0x6b,0xd3 },
- { 0xb2,0xaf,0x31,0xa4 }, { 0xbf,0xa4,0x3f,0xad },
- { 0xa8,0xb9,0x2d,0xb6 }, { 0xa5,0xb2,0x23,0xbf },
- { 0x86,0x83,0x09,0x80 }, { 0x8b,0x88,0x07,0x89 },
- { 0x9c,0x95,0x15,0x92 }, { 0x91,0x9e,0x1b,0x9b },
- { 0x0a,0x47,0xa1,0x7c }, { 0x07,0x4c,0xaf,0x75 },
- { 0x10,0x51,0xbd,0x6e }, { 0x1d,0x5a,0xb3,0x67 },
- { 0x3e,0x6b,0x99,0x58 }, { 0x33,0x60,0x97,0x51 },
- { 0x24,0x7d,0x85,0x4a }, { 0x29,0x76,0x8b,0x43 },
- { 0x62,0x1f,0xd1,0x34 }, { 0x6f,0x14,0xdf,0x3d },
- { 0x78,0x09,0xcd,0x26 }, { 0x75,0x02,0xc3,0x2f },
- { 0x56,0x33,0xe9,0x10 }, { 0x5b,0x38,0xe7,0x19 },
- { 0x4c,0x25,0xf5,0x02 }, { 0x41,0x2e,0xfb,0x0b },
- { 0x61,0x8c,0x9a,0xd7 }, { 0x6c,0x87,0x94,0xde },
- { 0x7b,0x9a,0x86,0xc5 }, { 0x76,0x91,0x88,0xcc },
- { 0x55,0xa0,0xa2,0xf3 }, { 0x58,0xab,0xac,0xfa },
- { 0x4f,0xb6,0xbe,0xe1 }, { 0x42,0xbd,0xb0,0xe8 },
- { 0x09,0xd4,0xea,0x9f }, { 0x04,0xdf,0xe4,0x96 },
- { 0x13,0xc2,0xf6,0x8d }, { 0x1e,0xc9,0xf8,0x84 },
- { 0x3d,0xf8,0xd2,0xbb }, { 0x30,0xf3,0xdc,0xb2 },
- { 0x27,0xee,0xce,0xa9 }, { 0x2a,0xe5,0xc0,0xa0 },
- { 0xb1,0x3c,0x7a,0x47 }, { 0xbc,0x37,0x74,0x4e },
- { 0xab,0x2a,0x66,0x55 }, { 0xa6,0x21,0x68,0x5c },
- { 0x85,0x10,0x42,0x63 }, { 0x88,0x1b,0x4c,0x6a },
- { 0x9f,0x06,0x5e,0x71 }, { 0x92,0x0d,0x50,0x78 },
- { 0xd9,0x64,0x0a,0x0f }, { 0xd4,0x6f,0x04,0x06 },
- { 0xc3,0x72,0x16,0x1d }, { 0xce,0x79,0x18,0x14 },
- { 0xed,0x48,0x32,0x2b }, { 0xe0,0x43,0x3c,0x22 },
- { 0xf7,0x5e,0x2e,0x39 }, { 0xfa,0x55,0x20,0x30 },
- { 0xb7,0x01,0xec,0x9a }, { 0xba,0x0a,0xe2,0x93 },
- { 0xad,0x17,0xf0,0x88 }, { 0xa0,0x1c,0xfe,0x81 },
- { 0x83,0x2d,0xd4,0xbe }, { 0x8e,0x26,0xda,0xb7 },
- { 0x99,0x3b,0xc8,0xac }, { 0x94,0x30,0xc6,0xa5 },
- { 0xdf,0x59,0x9c,0xd2 }, { 0xd2,0x52,0x92,0xdb },
- { 0xc5,0x4f,0x80,0xc0 }, { 0xc8,0x44,0x8e,0xc9 },
- { 0xeb,0x75,0xa4,0xf6 }, { 0xe6,0x7e,0xaa,0xff },
- { 0xf1,0x63,0xb8,0xe4 }, { 0xfc,0x68,0xb6,0xed },
- { 0x67,0xb1,0x0c,0x0a }, { 0x6a,0xba,0x02,0x03 },
- { 0x7d,0xa7,0x10,0x18 }, { 0x70,0xac,0x1e,0x11 },
- { 0x53,0x9d,0x34,0x2e }, { 0x5e,0x96,0x3a,0x27 },
- { 0x49,0x8b,0x28,0x3c }, { 0x44,0x80,0x26,0x35 },
- { 0x0f,0xe9,0x7c,0x42 }, { 0x02,0xe2,0x72,0x4b },
- { 0x15,0xff,0x60,0x50 }, { 0x18,0xf4,0x6e,0x59 },
- { 0x3b,0xc5,0x44,0x66 }, { 0x36,0xce,0x4a,0x6f },
- { 0x21,0xd3,0x58,0x74 }, { 0x2c,0xd8,0x56,0x7d },
- { 0x0c,0x7a,0x37,0xa1 }, { 0x01,0x71,0x39,0xa8 },
- { 0x16,0x6c,0x2b,0xb3 }, { 0x1b,0x67,0x25,0xba },
- { 0x38,0x56,0x0f,0x85 }, { 0x35,0x5d,0x01,0x8c },
- { 0x22,0x40,0x13,0x97 }, { 0x2f,0x4b,0x1d,0x9e },
- { 0x64,0x22,0x47,0xe9 }, { 0x69,0x29,0x49,0xe0 },
- { 0x7e,0x34,0x5b,0xfb }, { 0x73,0x3f,0x55,0xf2 },
- { 0x50,0x0e,0x7f,0xcd }, { 0x5d,0x05,0x71,0xc4 },
- { 0x4a,0x18,0x63,0xdf }, { 0x47,0x13,0x6d,0xd6 },
- { 0xdc,0xca,0xd7,0x31 }, { 0xd1,0xc1,0xd9,0x38 },
- { 0xc6,0xdc,0xcb,0x23 }, { 0xcb,0xd7,0xc5,0x2a },
- { 0xe8,0xe6,0xef,0x15 }, { 0xe5,0xed,0xe1,0x1c },
- { 0xf2,0xf0,0xf3,0x07 }, { 0xff,0xfb,0xfd,0x0e },
- { 0xb4,0x92,0xa7,0x79 }, { 0xb9,0x99,0xa9,0x70 },
- { 0xae,0x84,0xbb,0x6b }, { 0xa3,0x8f,0xb5,0x62 },
- { 0x80,0xbe,0x9f,0x5d }, { 0x8d,0xb5,0x91,0x54 },
- { 0x9a,0xa8,0x83,0x4f }, { 0x97,0xa3,0x8d,0x46 }
-};
-
-static const byte U4[256][4] = {
- { 0x00,0x00,0x00,0x00 }, { 0x09,0x0d,0x0b,0x0e },
- { 0x12,0x1a,0x16,0x1c }, { 0x1b,0x17,0x1d,0x12 },
- { 0x24,0x34,0x2c,0x38 }, { 0x2d,0x39,0x27,0x36 },
- { 0x36,0x2e,0x3a,0x24 }, { 0x3f,0x23,0x31,0x2a },
- { 0x48,0x68,0x58,0x70 }, { 0x41,0x65,0x53,0x7e },
- { 0x5a,0x72,0x4e,0x6c }, { 0x53,0x7f,0x45,0x62 },
- { 0x6c,0x5c,0x74,0x48 }, { 0x65,0x51,0x7f,0x46 },
- { 0x7e,0x46,0x62,0x54 }, { 0x77,0x4b,0x69,0x5a },
- { 0x90,0xd0,0xb0,0xe0 }, { 0x99,0xdd,0xbb,0xee },
- { 0x82,0xca,0xa6,0xfc }, { 0x8b,0xc7,0xad,0xf2 },
- { 0xb4,0xe4,0x9c,0xd8 }, { 0xbd,0xe9,0x97,0xd6 },
- { 0xa6,0xfe,0x8a,0xc4 }, { 0xaf,0xf3,0x81,0xca },
- { 0xd8,0xb8,0xe8,0x90 }, { 0xd1,0xb5,0xe3,0x9e },
- { 0xca,0xa2,0xfe,0x8c }, { 0xc3,0xaf,0xf5,0x82 },
- { 0xfc,0x8c,0xc4,0xa8 }, { 0xf5,0x81,0xcf,0xa6 },
- { 0xee,0x96,0xd2,0xb4 }, { 0xe7,0x9b,0xd9,0xba },
- { 0x3b,0xbb,0x7b,0xdb }, { 0x32,0xb6,0x70,0xd5 },
- { 0x29,0xa1,0x6d,0xc7 }, { 0x20,0xac,0x66,0xc9 },
- { 0x1f,0x8f,0x57,0xe3 }, { 0x16,0x82,0x5c,0xed },
- { 0x0d,0x95,0x41,0xff }, { 0x04,0x98,0x4a,0xf1 },
- { 0x73,0xd3,0x23,0xab }, { 0x7a,0xde,0x28,0xa5 },
- { 0x61,0xc9,0x35,0xb7 }, { 0x68,0xc4,0x3e,0xb9 },
- { 0x57,0xe7,0x0f,0x93 }, { 0x5e,0xea,0x04,0x9d },
- { 0x45,0xfd,0x19,0x8f }, { 0x4c,0xf0,0x12,0x81 },
- { 0xab,0x6b,0xcb,0x3b }, { 0xa2,0x66,0xc0,0x35 },
- { 0xb9,0x71,0xdd,0x27 }, { 0xb0,0x7c,0xd6,0x29 },
- { 0x8f,0x5f,0xe7,0x03 }, { 0x86,0x52,0xec,0x0d },
- { 0x9d,0x45,0xf1,0x1f }, { 0x94,0x48,0xfa,0x11 },
- { 0xe3,0x03,0x93,0x4b }, { 0xea,0x0e,0x98,0x45 },
- { 0xf1,0x19,0x85,0x57 }, { 0xf8,0x14,0x8e,0x59 },
- { 0xc7,0x37,0xbf,0x73 }, { 0xce,0x3a,0xb4,0x7d },
- { 0xd5,0x2d,0xa9,0x6f }, { 0xdc,0x20,0xa2,0x61 },
- { 0x76,0x6d,0xf6,0xad }, { 0x7f,0x60,0xfd,0xa3 },
- { 0x64,0x77,0xe0,0xb1 }, { 0x6d,0x7a,0xeb,0xbf },
- { 0x52,0x59,0xda,0x95 }, { 0x5b,0x54,0xd1,0x9b },
- { 0x40,0x43,0xcc,0x89 }, { 0x49,0x4e,0xc7,0x87 },
- { 0x3e,0x05,0xae,0xdd }, { 0x37,0x08,0xa5,0xd3 },
- { 0x2c,0x1f,0xb8,0xc1 }, { 0x25,0x12,0xb3,0xcf },
- { 0x1a,0x31,0x82,0xe5 }, { 0x13,0x3c,0x89,0xeb },
- { 0x08,0x2b,0x94,0xf9 }, { 0x01,0x26,0x9f,0xf7 },
- { 0xe6,0xbd,0x46,0x4d }, { 0xef,0xb0,0x4d,0x43 },
- { 0xf4,0xa7,0x50,0x51 }, { 0xfd,0xaa,0x5b,0x5f },
- { 0xc2,0x89,0x6a,0x75 }, { 0xcb,0x84,0x61,0x7b },
- { 0xd0,0x93,0x7c,0x69 }, { 0xd9,0x9e,0x77,0x67 },
- { 0xae,0xd5,0x1e,0x3d }, { 0xa7,0xd8,0x15,0x33 },
- { 0xbc,0xcf,0x08,0x21 }, { 0xb5,0xc2,0x03,0x2f },
- { 0x8a,0xe1,0x32,0x05 }, { 0x83,0xec,0x39,0x0b },
- { 0x98,0xfb,0x24,0x19 }, { 0x91,0xf6,0x2f,0x17 },
- { 0x4d,0xd6,0x8d,0x76 }, { 0x44,0xdb,0x86,0x78 },
- { 0x5f,0xcc,0x9b,0x6a }, { 0x56,0xc1,0x90,0x64 },
- { 0x69,0xe2,0xa1,0x4e }, { 0x60,0xef,0xaa,0x40 },
- { 0x7b,0xf8,0xb7,0x52 }, { 0x72,0xf5,0xbc,0x5c },
- { 0x05,0xbe,0xd5,0x06 }, { 0x0c,0xb3,0xde,0x08 },
- { 0x17,0xa4,0xc3,0x1a }, { 0x1e,0xa9,0xc8,0x14 },
- { 0x21,0x8a,0xf9,0x3e }, { 0x28,0x87,0xf2,0x30 },
- { 0x33,0x90,0xef,0x22 }, { 0x3a,0x9d,0xe4,0x2c },
- { 0xdd,0x06,0x3d,0x96 }, { 0xd4,0x0b,0x36,0x98 },
- { 0xcf,0x1c,0x2b,0x8a }, { 0xc6,0x11,0x20,0x84 },
- { 0xf9,0x32,0x11,0xae }, { 0xf0,0x3f,0x1a,0xa0 },
- { 0xeb,0x28,0x07,0xb2 }, { 0xe2,0x25,0x0c,0xbc },
- { 0x95,0x6e,0x65,0xe6 }, { 0x9c,0x63,0x6e,0xe8 },
- { 0x87,0x74,0x73,0xfa }, { 0x8e,0x79,0x78,0xf4 },
- { 0xb1,0x5a,0x49,0xde }, { 0xb8,0x57,0x42,0xd0 },
- { 0xa3,0x40,0x5f,0xc2 }, { 0xaa,0x4d,0x54,0xcc },
- { 0xec,0xda,0xf7,0x41 }, { 0xe5,0xd7,0xfc,0x4f },
- { 0xfe,0xc0,0xe1,0x5d }, { 0xf7,0xcd,0xea,0x53 },
- { 0xc8,0xee,0xdb,0x79 }, { 0xc1,0xe3,0xd0,0x77 },
- { 0xda,0xf4,0xcd,0x65 }, { 0xd3,0xf9,0xc6,0x6b },
- { 0xa4,0xb2,0xaf,0x31 }, { 0xad,0xbf,0xa4,0x3f },
- { 0xb6,0xa8,0xb9,0x2d }, { 0xbf,0xa5,0xb2,0x23 },
- { 0x80,0x86,0x83,0x09 }, { 0x89,0x8b,0x88,0x07 },
- { 0x92,0x9c,0x95,0x15 }, { 0x9b,0x91,0x9e,0x1b },
- { 0x7c,0x0a,0x47,0xa1 }, { 0x75,0x07,0x4c,0xaf },
- { 0x6e,0x10,0x51,0xbd }, { 0x67,0x1d,0x5a,0xb3 },
- { 0x58,0x3e,0x6b,0x99 }, { 0x51,0x33,0x60,0x97 },
- { 0x4a,0x24,0x7d,0x85 }, { 0x43,0x29,0x76,0x8b },
- { 0x34,0x62,0x1f,0xd1 }, { 0x3d,0x6f,0x14,0xdf },
- { 0x26,0x78,0x09,0xcd }, { 0x2f,0x75,0x02,0xc3 },
- { 0x10,0x56,0x33,0xe9 }, { 0x19,0x5b,0x38,0xe7 },
- { 0x02,0x4c,0x25,0xf5 }, { 0x0b,0x41,0x2e,0xfb },
- { 0xd7,0x61,0x8c,0x9a }, { 0xde,0x6c,0x87,0x94 },
- { 0xc5,0x7b,0x9a,0x86 }, { 0xcc,0x76,0x91,0x88 },
- { 0xf3,0x55,0xa0,0xa2 }, { 0xfa,0x58,0xab,0xac },
- { 0xe1,0x4f,0xb6,0xbe }, { 0xe8,0x42,0xbd,0xb0 },
- { 0x9f,0x09,0xd4,0xea }, { 0x96,0x04,0xdf,0xe4 },
- { 0x8d,0x13,0xc2,0xf6 }, { 0x84,0x1e,0xc9,0xf8 },
- { 0xbb,0x3d,0xf8,0xd2 }, { 0xb2,0x30,0xf3,0xdc },
- { 0xa9,0x27,0xee,0xce }, { 0xa0,0x2a,0xe5,0xc0 },
- { 0x47,0xb1,0x3c,0x7a }, { 0x4e,0xbc,0x37,0x74 },
- { 0x55,0xab,0x2a,0x66 }, { 0x5c,0xa6,0x21,0x68 },
- { 0x63,0x85,0x10,0x42 }, { 0x6a,0x88,0x1b,0x4c },
- { 0x71,0x9f,0x06,0x5e }, { 0x78,0x92,0x0d,0x50 },
- { 0x0f,0xd9,0x64,0x0a }, { 0x06,0xd4,0x6f,0x04 },
- { 0x1d,0xc3,0x72,0x16 }, { 0x14,0xce,0x79,0x18 },
- { 0x2b,0xed,0x48,0x32 }, { 0x22,0xe0,0x43,0x3c },
- { 0x39,0xf7,0x5e,0x2e }, { 0x30,0xfa,0x55,0x20 },
- { 0x9a,0xb7,0x01,0xec }, { 0x93,0xba,0x0a,0xe2 },
- { 0x88,0xad,0x17,0xf0 }, { 0x81,0xa0,0x1c,0xfe },
- { 0xbe,0x83,0x2d,0xd4 }, { 0xb7,0x8e,0x26,0xda },
- { 0xac,0x99,0x3b,0xc8 }, { 0xa5,0x94,0x30,0xc6 },
- { 0xd2,0xdf,0x59,0x9c }, { 0xdb,0xd2,0x52,0x92 },
- { 0xc0,0xc5,0x4f,0x80 }, { 0xc9,0xc8,0x44,0x8e },
- { 0xf6,0xeb,0x75,0xa4 }, { 0xff,0xe6,0x7e,0xaa },
- { 0xe4,0xf1,0x63,0xb8 }, { 0xed,0xfc,0x68,0xb6 },
- { 0x0a,0x67,0xb1,0x0c }, { 0x03,0x6a,0xba,0x02 },
- { 0x18,0x7d,0xa7,0x10 }, { 0x11,0x70,0xac,0x1e },
- { 0x2e,0x53,0x9d,0x34 }, { 0x27,0x5e,0x96,0x3a },
- { 0x3c,0x49,0x8b,0x28 }, { 0x35,0x44,0x80,0x26 },
- { 0x42,0x0f,0xe9,0x7c }, { 0x4b,0x02,0xe2,0x72 },
- { 0x50,0x15,0xff,0x60 }, { 0x59,0x18,0xf4,0x6e },
- { 0x66,0x3b,0xc5,0x44 }, { 0x6f,0x36,0xce,0x4a },
- { 0x74,0x21,0xd3,0x58 }, { 0x7d,0x2c,0xd8,0x56 },
- { 0xa1,0x0c,0x7a,0x37 }, { 0xa8,0x01,0x71,0x39 },
- { 0xb3,0x16,0x6c,0x2b }, { 0xba,0x1b,0x67,0x25 },
- { 0x85,0x38,0x56,0x0f }, { 0x8c,0x35,0x5d,0x01 },
- { 0x97,0x22,0x40,0x13 }, { 0x9e,0x2f,0x4b,0x1d },
- { 0xe9,0x64,0x22,0x47 }, { 0xe0,0x69,0x29,0x49 },
- { 0xfb,0x7e,0x34,0x5b }, { 0xf2,0x73,0x3f,0x55 },
- { 0xcd,0x50,0x0e,0x7f }, { 0xc4,0x5d,0x05,0x71 },
- { 0xdf,0x4a,0x18,0x63 }, { 0xd6,0x47,0x13,0x6d },
- { 0x31,0xdc,0xca,0xd7 }, { 0x38,0xd1,0xc1,0xd9 },
- { 0x23,0xc6,0xdc,0xcb }, { 0x2a,0xcb,0xd7,0xc5 },
- { 0x15,0xe8,0xe6,0xef }, { 0x1c,0xe5,0xed,0xe1 },
- { 0x07,0xf2,0xf0,0xf3 }, { 0x0e,0xff,0xfb,0xfd },
- { 0x79,0xb4,0x92,0xa7 }, { 0x70,0xb9,0x99,0xa9 },
- { 0x6b,0xae,0x84,0xbb }, { 0x62,0xa3,0x8f,0xb5 },
- { 0x5d,0x80,0xbe,0x9f }, { 0x54,0x8d,0xb5,0x91 },
- { 0x4f,0x9a,0xa8,0x83 }, { 0x46,0x97,0xa3,0x8d }
-};
-
-static const u32 rcon[30] = {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
- 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35,
- 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91
-};
-
-
-
-static void
-burn_stack (int bytes)
-{
- char buf[64];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-/* Perform the key setup.
- */
-static int
-do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
-{
- static int initialized = 0;
- static const char *selftest_failed=0;
- int ROUNDS;
- byte k[MAXKC][4];
- int i,j, r, t, rconpointer = 0;
- byte tk[MAXKC][4];
- int KC;
- /* space for automatic variables is about 64 + 11*int */
-
- if (!initialized) {
- initialized = 1;
- selftest_failed = selftest ();
- if( selftest_failed )
- fprintf(stderr, "%s\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- if( keylen == 128/8 ) {
- ROUNDS = 10;
- KC = 4;
- }
- else if ( keylen == 192/8 ) {
- ROUNDS = 12;
- KC = 6;
- }
- else if ( keylen == 256/8 ) {
- ROUNDS = 14;
- KC = 8;
- }
- else
- return G10ERR_WRONG_KEYLEN;
-
- ctx->ROUNDS = ROUNDS;
- ctx->decryption_prepared = 0;
-
- for (i = 0; i < keylen; i++) {
- k[i >> 2][i & 3] = key[i];
- }
- #define W (ctx->keySched)
-
- for (j = KC-1; j >= 0; j--) {
- *((u32*)tk[j]) = *((u32*)k[j]);
- }
- r = 0;
- t = 0;
- /* copy values into round key array */
- for (j = 0; (j < KC) && (r < ROUNDS + 1); ) {
- for (; (j < KC) && (t < 4); j++, t++) {
- *((u32*)W[r][t]) = *((u32*)tk[j]);
- }
- if (t == 4) {
- r++;
- t = 0;
- }
- }
-
- while (r < ROUNDS + 1) {
- /* while not enough round key material calculated */
- /* calculate new values */
- tk[0][0] ^= S[tk[KC-1][1]];
- tk[0][1] ^= S[tk[KC-1][2]];
- tk[0][2] ^= S[tk[KC-1][3]];
- tk[0][3] ^= S[tk[KC-1][0]];
- tk[0][0] ^= rcon[rconpointer++];
-
- if (KC != 8) {
- for (j = 1; j < KC; j++) {
- *((u32*)tk[j]) ^= *((u32*)tk[j-1]);
- }
- } else {
- for (j = 1; j < KC/2; j++) {
- *((u32*)tk[j]) ^= *((u32*)tk[j-1]);
- }
- tk[KC/2][0] ^= S[tk[KC/2 - 1][0]];
- tk[KC/2][1] ^= S[tk[KC/2 - 1][1]];
- tk[KC/2][2] ^= S[tk[KC/2 - 1][2]];
- tk[KC/2][3] ^= S[tk[KC/2 - 1][3]];
- for (j = KC/2 + 1; j < KC; j++) {
- *((u32*)tk[j]) ^= *((u32*)tk[j-1]);
- }
- }
- /* copy values into round key array */
- for (j = 0; (j < KC) && (r < ROUNDS + 1); ) {
- for (; (j < KC) && (t < 4); j++, t++) {
- *((u32*)W[r][t]) = *((u32*)tk[j]);
- }
- if (t == 4) {
- r++;
- t = 0;
- }
- }
- }
-
- #undef W
- return 0;
-}
-
-static int
-rijndael_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
-{
- int rc = do_setkey (ctx, key, keylen);
- burn_stack ( 100 + 16*sizeof(int));
- return rc;
-}
-
-/* make a decryption key from an encryption key */
-static void
-prepare_decryption( RIJNDAEL_context *ctx )
-{
- int r;
- byte *w;
-
- for (r=0; r < MAXROUNDS+1; r++ ) {
- *((u32*)ctx->keySched2[r][0]) = *((u32*)ctx->keySched[r][0]);
- *((u32*)ctx->keySched2[r][1]) = *((u32*)ctx->keySched[r][1]);
- *((u32*)ctx->keySched2[r][2]) = *((u32*)ctx->keySched[r][2]);
- *((u32*)ctx->keySched2[r][3]) = *((u32*)ctx->keySched[r][3]);
- }
- #define W (ctx->keySched2)
- for (r = 1; r < ctx->ROUNDS; r++) {
- w = W[r][0];
- *((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
- ^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
-
- w = W[r][1];
- *((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
- ^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
-
- w = W[r][2];
- *((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
- ^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
-
- w = W[r][3];
- *((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
- ^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
- }
- #undef W
-}
-
-
-
-/* Encrypt one block. A and B may be the same. */
-static void
-do_encrypt (const RIJNDAEL_context *ctx, byte *b, const byte *a)
-{
- int r;
- byte temp[4][4];
- int ROUNDS = ctx->ROUNDS;
- #define rk (ctx->keySched)
-
- *((u32*)temp[0]) = *((u32*)(a )) ^ *((u32*)rk[0][0]);
- *((u32*)temp[1]) = *((u32*)(a+ 4)) ^ *((u32*)rk[0][1]);
- *((u32*)temp[2]) = *((u32*)(a+ 8)) ^ *((u32*)rk[0][2]);
- *((u32*)temp[3]) = *((u32*)(a+12)) ^ *((u32*)rk[0][3]);
- *((u32*)(b )) = *((u32*)T1[temp[0][0]])
- ^ *((u32*)T2[temp[1][1]])
- ^ *((u32*)T3[temp[2][2]])
- ^ *((u32*)T4[temp[3][3]]);
- *((u32*)(b + 4)) = *((u32*)T1[temp[1][0]])
- ^ *((u32*)T2[temp[2][1]])
- ^ *((u32*)T3[temp[3][2]])
- ^ *((u32*)T4[temp[0][3]]);
- *((u32*)(b + 8)) = *((u32*)T1[temp[2][0]])
- ^ *((u32*)T2[temp[3][1]])
- ^ *((u32*)T3[temp[0][2]])
- ^ *((u32*)T4[temp[1][3]]);
- *((u32*)(b +12)) = *((u32*)T1[temp[3][0]])
- ^ *((u32*)T2[temp[0][1]])
- ^ *((u32*)T3[temp[1][2]])
- ^ *((u32*)T4[temp[2][3]]);
- for (r = 1; r < ROUNDS-1; r++) {
- *((u32*)temp[0]) = *((u32*)(b )) ^ *((u32*)rk[r][0]);
- *((u32*)temp[1]) = *((u32*)(b+ 4)) ^ *((u32*)rk[r][1]);
- *((u32*)temp[2]) = *((u32*)(b+ 8)) ^ *((u32*)rk[r][2]);
- *((u32*)temp[3]) = *((u32*)(b+12)) ^ *((u32*)rk[r][3]);
-
- *((u32*)(b )) = *((u32*)T1[temp[0][0]])
- ^ *((u32*)T2[temp[1][1]])
- ^ *((u32*)T3[temp[2][2]])
- ^ *((u32*)T4[temp[3][3]]);
- *((u32*)(b + 4)) = *((u32*)T1[temp[1][0]])
- ^ *((u32*)T2[temp[2][1]])
- ^ *((u32*)T3[temp[3][2]])
- ^ *((u32*)T4[temp[0][3]]);
- *((u32*)(b + 8)) = *((u32*)T1[temp[2][0]])
- ^ *((u32*)T2[temp[3][1]])
- ^ *((u32*)T3[temp[0][2]])
- ^ *((u32*)T4[temp[1][3]]);
- *((u32*)(b +12)) = *((u32*)T1[temp[3][0]])
- ^ *((u32*)T2[temp[0][1]])
- ^ *((u32*)T3[temp[1][2]])
- ^ *((u32*)T4[temp[2][3]]);
- }
- /* last round is special */
- *((u32*)temp[0]) = *((u32*)(b )) ^ *((u32*)rk[ROUNDS-1][0]);
- *((u32*)temp[1]) = *((u32*)(b+ 4)) ^ *((u32*)rk[ROUNDS-1][1]);
- *((u32*)temp[2]) = *((u32*)(b+ 8)) ^ *((u32*)rk[ROUNDS-1][2]);
- *((u32*)temp[3]) = *((u32*)(b+12)) ^ *((u32*)rk[ROUNDS-1][3]);
- b[ 0] = T1[temp[0][0]][1];
- b[ 1] = T1[temp[1][1]][1];
- b[ 2] = T1[temp[2][2]][1];
- b[ 3] = T1[temp[3][3]][1];
- b[ 4] = T1[temp[1][0]][1];
- b[ 5] = T1[temp[2][1]][1];
- b[ 6] = T1[temp[3][2]][1];
- b[ 7] = T1[temp[0][3]][1];
- b[ 8] = T1[temp[2][0]][1];
- b[ 9] = T1[temp[3][1]][1];
- b[10] = T1[temp[0][2]][1];
- b[11] = T1[temp[1][3]][1];
- b[12] = T1[temp[3][0]][1];
- b[13] = T1[temp[0][1]][1];
- b[14] = T1[temp[1][2]][1];
- b[15] = T1[temp[2][3]][1];
- *((u32*)(b )) ^= *((u32*)rk[ROUNDS][0]);
- *((u32*)(b+ 4)) ^= *((u32*)rk[ROUNDS][1]);
- *((u32*)(b+ 8)) ^= *((u32*)rk[ROUNDS][2]);
- *((u32*)(b+12)) ^= *((u32*)rk[ROUNDS][3]);
- #undef rk
-}
-
-static void
-rijndael_encrypt (const RIJNDAEL_context *ctx, byte *b, const byte *a)
-{
- do_encrypt (ctx, b, a);
- burn_stack (16 + 2*sizeof(int));
-}
-
-
-/* Decrypt one block. a and b may be the same. */
-static void
-do_decrypt (RIJNDAEL_context *ctx, byte *b, const byte *a)
-{
- #define rk (ctx->keySched2)
- int ROUNDS = ctx->ROUNDS;
- int r;
- byte temp[4][4];
-
- if ( !ctx->decryption_prepared ) {
- prepare_decryption ( ctx );
- burn_stack (64);
- ctx->decryption_prepared = 1;
- }
-
- *((u32*)temp[0]) = *((u32*)(a )) ^ *((u32*)rk[ROUNDS][0]);
- *((u32*)temp[1]) = *((u32*)(a+ 4)) ^ *((u32*)rk[ROUNDS][1]);
- *((u32*)temp[2]) = *((u32*)(a+ 8)) ^ *((u32*)rk[ROUNDS][2]);
- *((u32*)temp[3]) = *((u32*)(a+12)) ^ *((u32*)rk[ROUNDS][3]);
-
- *((u32*)(b )) = *((u32*)T5[temp[0][0]])
- ^ *((u32*)T6[temp[3][1]])
- ^ *((u32*)T7[temp[2][2]])
- ^ *((u32*)T8[temp[1][3]]);
- *((u32*)(b+ 4)) = *((u32*)T5[temp[1][0]])
- ^ *((u32*)T6[temp[0][1]])
- ^ *((u32*)T7[temp[3][2]])
- ^ *((u32*)T8[temp[2][3]]);
- *((u32*)(b+ 8)) = *((u32*)T5[temp[2][0]])
- ^ *((u32*)T6[temp[1][1]])
- ^ *((u32*)T7[temp[0][2]])
- ^ *((u32*)T8[temp[3][3]]);
- *((u32*)(b+12)) = *((u32*)T5[temp[3][0]])
- ^ *((u32*)T6[temp[2][1]])
- ^ *((u32*)T7[temp[1][2]])
- ^ *((u32*)T8[temp[0][3]]);
- for (r = ROUNDS-1; r > 1; r--) {
- *((u32*)temp[0]) = *((u32*)(b )) ^ *((u32*)rk[r][0]);
- *((u32*)temp[1]) = *((u32*)(b+ 4)) ^ *((u32*)rk[r][1]);
- *((u32*)temp[2]) = *((u32*)(b+ 8)) ^ *((u32*)rk[r][2]);
- *((u32*)temp[3]) = *((u32*)(b+12)) ^ *((u32*)rk[r][3]);
- *((u32*)(b )) = *((u32*)T5[temp[0][0]])
- ^ *((u32*)T6[temp[3][1]])
- ^ *((u32*)T7[temp[2][2]])
- ^ *((u32*)T8[temp[1][3]]);
- *((u32*)(b+ 4)) = *((u32*)T5[temp[1][0]])
- ^ *((u32*)T6[temp[0][1]])
- ^ *((u32*)T7[temp[3][2]])
- ^ *((u32*)T8[temp[2][3]]);
- *((u32*)(b+ 8)) = *((u32*)T5[temp[2][0]])
- ^ *((u32*)T6[temp[1][1]])
- ^ *((u32*)T7[temp[0][2]])
- ^ *((u32*)T8[temp[3][3]]);
- *((u32*)(b+12)) = *((u32*)T5[temp[3][0]])
- ^ *((u32*)T6[temp[2][1]])
- ^ *((u32*)T7[temp[1][2]])
- ^ *((u32*)T8[temp[0][3]]);
- }
- /* last round is special */
- *((u32*)temp[0]) = *((u32*)(b )) ^ *((u32*)rk[1][0]);
- *((u32*)temp[1]) = *((u32*)(b+ 4)) ^ *((u32*)rk[1][1]);
- *((u32*)temp[2]) = *((u32*)(b+ 8)) ^ *((u32*)rk[1][2]);
- *((u32*)temp[3]) = *((u32*)(b+12)) ^ *((u32*)rk[1][3]);
- b[ 0] = S5[temp[0][0]];
- b[ 1] = S5[temp[3][1]];
- b[ 2] = S5[temp[2][2]];
- b[ 3] = S5[temp[1][3]];
- b[ 4] = S5[temp[1][0]];
- b[ 5] = S5[temp[0][1]];
- b[ 6] = S5[temp[3][2]];
- b[ 7] = S5[temp[2][3]];
- b[ 8] = S5[temp[2][0]];
- b[ 9] = S5[temp[1][1]];
- b[10] = S5[temp[0][2]];
- b[11] = S5[temp[3][3]];
- b[12] = S5[temp[3][0]];
- b[13] = S5[temp[2][1]];
- b[14] = S5[temp[1][2]];
- b[15] = S5[temp[0][3]];
- *((u32*)(b )) ^= *((u32*)rk[0][0]);
- *((u32*)(b+ 4)) ^= *((u32*)rk[0][1]);
- *((u32*)(b+ 8)) ^= *((u32*)rk[0][2]);
- *((u32*)(b+12)) ^= *((u32*)rk[0][3]);
- #undef rk
-}
-
-static void
-rijndael_decrypt (RIJNDAEL_context *ctx, byte *b, const byte *a)
-{
- do_decrypt (ctx, b, a);
- burn_stack (16+2*sizeof(int));
-}
-
-/* Test a single encryption and decryption with each key size. */
-
-static const char*
-selftest (void)
-{
- RIJNDAEL_context ctx;
- byte scratch[16];
-
- /* The test vectors are from the AES supplied ones; more or less
- * randomly taken from ecb_tbl.txt (I=42,81,14)
- */
- static const byte plaintext[16] = {
- 0x01,0x4B,0xAF,0x22,0x78,0xA6,0x9D,0x33,
- 0x1D,0x51,0x80,0x10,0x36,0x43,0xE9,0x9A
- };
- static const byte key[16] = {
- 0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,0xF0,
- 0xF2,0xF3,0xF4,0xF5,0xF7,0xF8,0xF9,0xFA
- };
- static const byte ciphertext[16] = {
- 0x67,0x43,0xC3,0xD1,0x51,0x9A,0xB4,0xF2,
- 0xCD,0x9A,0x78,0xAB,0x09,0xA5,0x11,0xBD
- };
-
- static const byte plaintext_192[16] = {
- 0x76,0x77,0x74,0x75,0xF1,0xF2,0xF3,0xF4,
- 0xF8,0xF9,0xE6,0xE7,0x77,0x70,0x71,0x72
- };
- static const byte key_192[24] = {
- 0x04,0x05,0x06,0x07,0x09,0x0A,0x0B,0x0C,
- 0x0E,0x0F,0x10,0x11,0x13,0x14,0x15,0x16,
- 0x18,0x19,0x1A,0x1B,0x1D,0x1E,0x1F,0x20
- };
- static const byte ciphertext_192[16] = {
- 0x5D,0x1E,0xF2,0x0D,0xCE,0xD6,0xBC,0xBC,
- 0x12,0x13,0x1A,0xC7,0xC5,0x47,0x88,0xAA
- };
-
- static const byte plaintext_256[16] = {
- 0x06,0x9A,0x00,0x7F,0xC7,0x6A,0x45,0x9F,
- 0x98,0xBA,0xF9,0x17,0xFE,0xDF,0x95,0x21
- };
- static const byte key_256[32] = {
- 0x08,0x09,0x0A,0x0B,0x0D,0x0E,0x0F,0x10,
- 0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1A,
- 0x1C,0x1D,0x1E,0x1F,0x21,0x22,0x23,0x24,
- 0x26,0x27,0x28,0x29,0x2B,0x2C,0x2D,0x2E
- };
- static const byte ciphertext_256[16] = {
- 0x08,0x0E,0x95,0x17,0xEB,0x16,0x77,0x71,
- 0x9A,0xCF,0x72,0x80,0x86,0x04,0x0A,0xE3
- };
-
- rijndael_setkey (&ctx, key, sizeof(key));
- rijndael_encrypt (&ctx, scratch, plaintext);
- if (memcmp (scratch, ciphertext, sizeof (ciphertext)))
- return "Rijndael-128 test encryption failed.";
- rijndael_decrypt (&ctx, scratch, scratch);
- if (memcmp (scratch, plaintext, sizeof (plaintext)))
- return "Rijndael-128 test decryption failed.";
-
- rijndael_setkey (&ctx, key_192, sizeof(key_192));
- rijndael_encrypt (&ctx, scratch, plaintext_192);
- if (memcmp (scratch, ciphertext_192, sizeof (ciphertext_192)))
- return "Rijndael-192 test encryption failed.";
- rijndael_decrypt (&ctx, scratch, scratch);
- if (memcmp (scratch, plaintext_192, sizeof (plaintext_192)))
- return "Rijndael-192 test decryption failed.";
-
- rijndael_setkey (&ctx, key_256, sizeof(key_256));
- rijndael_encrypt (&ctx, scratch, plaintext_256);
- if (memcmp (scratch, ciphertext_256, sizeof (ciphertext_256)))
- return "Rijndael-256 test encryption failed.";
- rijndael_decrypt (&ctx, scratch, scratch);
- if (memcmp (scratch, plaintext_256, sizeof (plaintext_256)))
- return "Rijndael-256 test decryption failed.";
-
- return NULL;
-}
-
-#ifdef IS_MODULE
-static
-#endif
- const char *
-rijndael_get_info (int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey) (void *c, byte *key, unsigned keylen),
- void (**r_encrypt) (void *c, byte *outbuf, byte *inbuf),
- void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
- )
-{
- *keylen = algo==7? 128 : algo==8? 192 : 256;
- *blocksize = 16;
- *contextsize = sizeof (RIJNDAEL_context);
-
- *(int (**)(RIJNDAEL_context*, const byte*, const unsigned))r_setkey
- = rijndael_setkey;
- *(void (**)(const RIJNDAEL_context*, byte*, const byte*))r_encrypt
- = rijndael_encrypt;
- *(void (**)(RIJNDAEL_context*, byte*, const byte*))r_decrypt
- = rijndael_decrypt;
-
- if( algo == 7 )
- return "AES";
- if (algo == 8)
- return "AES192";
- if (algo == 9)
- return "AES256";
- return NULL;
-}
-
-
-#ifdef IS_MODULE
-static
-const char * const gnupgext_version = "RIJNDAEL ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 20, 1, 0, (void(*)(void))rijndael_get_info },
- { 21, 1, 7 },
- { 21, 1, 8 },
- { 21, 1, 9 },
-};
-
-
-
-/****************
- * Enumerate the names of the functions together with information about
- * this function. Set sequence to an integer with a initial value of 0 and
- * do not change it.
- * If what is 0 all kind of functions are returned.
- * Return values: class := class of function:
- * 10 = message digest algorithm info function
- * 11 = integer with available md algorithms
- * 20 = cipher algorithm info function
- * 21 = integer with available cipher algorithms
- * 30 = public key algorithm info function
- * 31 = integer with available pubkey algorithms
- * version = interface version of the function/pointer
- * (currently this is 1 for all functions)
- */
-static
-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;
-}
-#endif
-
-
-
-
-
-
-
-
-
diff --git a/cipher/rmd.h b/cipher/rmd.h
deleted file mode 100644
index 917e04a26..000000000
--- a/cipher/rmd.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* rmd.h - RIPE-MD hash functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_RMD_H
-#define G10_RMD_H
-
-
-/* we need this here because random.c must have direct access */
-typedef struct {
- u32 h0,h1,h2,h3,h4;
- u32 nblocks;
- byte buf[64];
- int count;
-} RMD160_CONTEXT;
-
-void rmd160_init( RMD160_CONTEXT *hd );
-void rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer );
-
-#endif /*G10_RMD_H*/
diff --git a/cipher/rmd160.c b/cipher/rmd160.c
deleted file mode 100644
index 54dec6a15..000000000
--- a/cipher/rmd160.c
+++ /dev/null
@@ -1,588 +0,0 @@
-/* rmd160.c - RIPE-MD160
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "rmd.h"
-#include "cipher.h" /* for rmd160_hash_buffer */
-#include "algorithms.h"
-
-#include "bithelp.h"
-
-/*********************************
- * RIPEMD-160 is not patented, see (as of 25.10.97)
- * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html
- * Note that the code uses Little Endian byteorder, which is good for
- * 386 etc, but we must add some conversion when used on a big endian box.
- *
- *
- * Pseudo-code for RIPEMD-160
- *
- * RIPEMD-160 is an iterative hash function that operates on 32-bit words.
- * The round function takes as input a 5-word chaining variable and a 16-word
- * message block and maps this to a new chaining variable. All operations are
- * defined on 32-bit words. Padding is identical to that of MD4.
- *
- *
- * RIPEMD-160: definitions
- *
- *
- * nonlinear functions at bit level: exor, mux, -, mux, -
- *
- * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15)
- * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31)
- * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47)
- * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63)
- * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79)
- *
- *
- * added constants (hexadecimal)
- *
- * K(j) = 0x00000000 (0 <= j <= 15)
- * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2))
- * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3))
- * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5))
- * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7))
- * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2))
- * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3))
- * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5))
- * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7))
- * K'(j) = 0x00000000 (64 <= j <= 79)
- *
- *
- * selection of message word
- *
- * r(j) = j (0 <= j <= 15)
- * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
- * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
- * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
- * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
- * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
- * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
- * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
- * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
- * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
- *
- *
- * amount for rotate left (rol)
- *
- * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
- * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
- * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
- * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
- * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
- * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
- * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
- * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
- * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
- * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
- *
- *
- * initial value (hexadecimal)
- *
- * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476;
- * h4 = 0xC3D2E1F0;
- *
- *
- * RIPEMD-160: pseudo-code
- *
- * It is assumed that the message after padding consists of t 16-word blocks
- * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15.
- * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left
- * shift (rotate) over s positions.
- *
- *
- * for i := 0 to t-1 {
- * A := h0; B := h1; C := h2; D = h3; E = h4;
- * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4;
- * for j := 0 to 79 {
- * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E;
- * A := E; E := D; D := rol_10(C); C := B; B := T;
- * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)]
- [+] K'(j)) [+] E';
- * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T;
- * }
- * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A';
- * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T;
- * }
- */
-
-/* Some examples:
- * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31
- * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
- * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
- * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36
- * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc
- * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b
- * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189
- * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb
- * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528
- */
-
-static void
-burn_stack (int bytes)
-{
- char buf[150];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-
-void
-rmd160_init( RMD160_CONTEXT *hd )
-{
- hd->h0 = 0x67452301;
- hd->h1 = 0xEFCDAB89;
- hd->h2 = 0x98BADCFE;
- hd->h3 = 0x10325476;
- hd->h4 = 0xC3D2E1F0;
- hd->nblocks = 0;
- hd->count = 0;
-}
-
-
-
-/****************
- * Transform the message X which consists of 16 32-bit-words
- */
-static void
-transform( RMD160_CONTEXT *hd, byte *data )
-{
- u32 a,b,c,d,e,aa,bb,cc,dd,ee,t;
- #ifdef BIG_ENDIAN_HOST
- u32 x[16];
- { int i;
- byte *p2, *p1;
- for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) {
- p2[3] = *p1++;
- p2[2] = *p1++;
- p2[1] = *p1++;
- p2[0] = *p1++;
- }
- }
- #else
- #if 0
- u32 *x =(u32*)data;
- #else
- /* this version is better because it is always aligned;
- * The performance penalty on a 586-100 is about 6% which
- * is acceptable - because the data is more local it might
- * also be possible that this is faster on some machines.
- * This function (when compiled with -02 on gcc 2.7.2)
- * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec;
- * [measured with a 4MB data and "gpgm --print-md rmd160"] */
- u32 x[16];
- memcpy( x, data, 64 );
- #endif
- #endif
-
-
-#define K0 0x00000000
-#define K1 0x5A827999
-#define K2 0x6ED9EBA1
-#define K3 0x8F1BBCDC
-#define K4 0xA953FD4E
-#define KK0 0x50A28BE6
-#define KK1 0x5C4DD124
-#define KK2 0x6D703EF3
-#define KK3 0x7A6D76E9
-#define KK4 0x00000000
-#define F0(x,y,z) ( (x) ^ (y) ^ (z) )
-#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) )
-#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) )
-#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) )
-#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) )
-#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \
- a = rol(t,s) + e; \
- c = rol(c,10); \
- } while(0)
-
- /* left lane */
- a = hd->h0;
- b = hd->h1;
- c = hd->h2;
- d = hd->h3;
- e = hd->h4;
- R( a, b, c, d, e, F0, K0, 0, 11 );
- R( e, a, b, c, d, F0, K0, 1, 14 );
- R( d, e, a, b, c, F0, K0, 2, 15 );
- R( c, d, e, a, b, F0, K0, 3, 12 );
- R( b, c, d, e, a, F0, K0, 4, 5 );
- R( a, b, c, d, e, F0, K0, 5, 8 );
- R( e, a, b, c, d, F0, K0, 6, 7 );
- R( d, e, a, b, c, F0, K0, 7, 9 );
- R( c, d, e, a, b, F0, K0, 8, 11 );
- R( b, c, d, e, a, F0, K0, 9, 13 );
- R( a, b, c, d, e, F0, K0, 10, 14 );
- R( e, a, b, c, d, F0, K0, 11, 15 );
- R( d, e, a, b, c, F0, K0, 12, 6 );
- R( c, d, e, a, b, F0, K0, 13, 7 );
- R( b, c, d, e, a, F0, K0, 14, 9 );
- R( a, b, c, d, e, F0, K0, 15, 8 );
- R( e, a, b, c, d, F1, K1, 7, 7 );
- R( d, e, a, b, c, F1, K1, 4, 6 );
- R( c, d, e, a, b, F1, K1, 13, 8 );
- R( b, c, d, e, a, F1, K1, 1, 13 );
- R( a, b, c, d, e, F1, K1, 10, 11 );
- R( e, a, b, c, d, F1, K1, 6, 9 );
- R( d, e, a, b, c, F1, K1, 15, 7 );
- R( c, d, e, a, b, F1, K1, 3, 15 );
- R( b, c, d, e, a, F1, K1, 12, 7 );
- R( a, b, c, d, e, F1, K1, 0, 12 );
- R( e, a, b, c, d, F1, K1, 9, 15 );
- R( d, e, a, b, c, F1, K1, 5, 9 );
- R( c, d, e, a, b, F1, K1, 2, 11 );
- R( b, c, d, e, a, F1, K1, 14, 7 );
- R( a, b, c, d, e, F1, K1, 11, 13 );
- R( e, a, b, c, d, F1, K1, 8, 12 );
- R( d, e, a, b, c, F2, K2, 3, 11 );
- R( c, d, e, a, b, F2, K2, 10, 13 );
- R( b, c, d, e, a, F2, K2, 14, 6 );
- R( a, b, c, d, e, F2, K2, 4, 7 );
- R( e, a, b, c, d, F2, K2, 9, 14 );
- R( d, e, a, b, c, F2, K2, 15, 9 );
- R( c, d, e, a, b, F2, K2, 8, 13 );
- R( b, c, d, e, a, F2, K2, 1, 15 );
- R( a, b, c, d, e, F2, K2, 2, 14 );
- R( e, a, b, c, d, F2, K2, 7, 8 );
- R( d, e, a, b, c, F2, K2, 0, 13 );
- R( c, d, e, a, b, F2, K2, 6, 6 );
- R( b, c, d, e, a, F2, K2, 13, 5 );
- R( a, b, c, d, e, F2, K2, 11, 12 );
- R( e, a, b, c, d, F2, K2, 5, 7 );
- R( d, e, a, b, c, F2, K2, 12, 5 );
- R( c, d, e, a, b, F3, K3, 1, 11 );
- R( b, c, d, e, a, F3, K3, 9, 12 );
- R( a, b, c, d, e, F3, K3, 11, 14 );
- R( e, a, b, c, d, F3, K3, 10, 15 );
- R( d, e, a, b, c, F3, K3, 0, 14 );
- R( c, d, e, a, b, F3, K3, 8, 15 );
- R( b, c, d, e, a, F3, K3, 12, 9 );
- R( a, b, c, d, e, F3, K3, 4, 8 );
- R( e, a, b, c, d, F3, K3, 13, 9 );
- R( d, e, a, b, c, F3, K3, 3, 14 );
- R( c, d, e, a, b, F3, K3, 7, 5 );
- R( b, c, d, e, a, F3, K3, 15, 6 );
- R( a, b, c, d, e, F3, K3, 14, 8 );
- R( e, a, b, c, d, F3, K3, 5, 6 );
- R( d, e, a, b, c, F3, K3, 6, 5 );
- R( c, d, e, a, b, F3, K3, 2, 12 );
- R( b, c, d, e, a, F4, K4, 4, 9 );
- R( a, b, c, d, e, F4, K4, 0, 15 );
- R( e, a, b, c, d, F4, K4, 5, 5 );
- R( d, e, a, b, c, F4, K4, 9, 11 );
- R( c, d, e, a, b, F4, K4, 7, 6 );
- R( b, c, d, e, a, F4, K4, 12, 8 );
- R( a, b, c, d, e, F4, K4, 2, 13 );
- R( e, a, b, c, d, F4, K4, 10, 12 );
- R( d, e, a, b, c, F4, K4, 14, 5 );
- R( c, d, e, a, b, F4, K4, 1, 12 );
- R( b, c, d, e, a, F4, K4, 3, 13 );
- R( a, b, c, d, e, F4, K4, 8, 14 );
- R( e, a, b, c, d, F4, K4, 11, 11 );
- R( d, e, a, b, c, F4, K4, 6, 8 );
- R( c, d, e, a, b, F4, K4, 15, 5 );
- R( b, c, d, e, a, F4, K4, 13, 6 );
-
- aa = a; bb = b; cc = c; dd = d; ee = e;
-
- /* right lane */
- a = hd->h0;
- b = hd->h1;
- c = hd->h2;
- d = hd->h3;
- e = hd->h4;
- R( a, b, c, d, e, F4, KK0, 5, 8);
- R( e, a, b, c, d, F4, KK0, 14, 9);
- R( d, e, a, b, c, F4, KK0, 7, 9);
- R( c, d, e, a, b, F4, KK0, 0, 11);
- R( b, c, d, e, a, F4, KK0, 9, 13);
- R( a, b, c, d, e, F4, KK0, 2, 15);
- R( e, a, b, c, d, F4, KK0, 11, 15);
- R( d, e, a, b, c, F4, KK0, 4, 5);
- R( c, d, e, a, b, F4, KK0, 13, 7);
- R( b, c, d, e, a, F4, KK0, 6, 7);
- R( a, b, c, d, e, F4, KK0, 15, 8);
- R( e, a, b, c, d, F4, KK0, 8, 11);
- R( d, e, a, b, c, F4, KK0, 1, 14);
- R( c, d, e, a, b, F4, KK0, 10, 14);
- R( b, c, d, e, a, F4, KK0, 3, 12);
- R( a, b, c, d, e, F4, KK0, 12, 6);
- R( e, a, b, c, d, F3, KK1, 6, 9);
- R( d, e, a, b, c, F3, KK1, 11, 13);
- R( c, d, e, a, b, F3, KK1, 3, 15);
- R( b, c, d, e, a, F3, KK1, 7, 7);
- R( a, b, c, d, e, F3, KK1, 0, 12);
- R( e, a, b, c, d, F3, KK1, 13, 8);
- R( d, e, a, b, c, F3, KK1, 5, 9);
- R( c, d, e, a, b, F3, KK1, 10, 11);
- R( b, c, d, e, a, F3, KK1, 14, 7);
- R( a, b, c, d, e, F3, KK1, 15, 7);
- R( e, a, b, c, d, F3, KK1, 8, 12);
- R( d, e, a, b, c, F3, KK1, 12, 7);
- R( c, d, e, a, b, F3, KK1, 4, 6);
- R( b, c, d, e, a, F3, KK1, 9, 15);
- R( a, b, c, d, e, F3, KK1, 1, 13);
- R( e, a, b, c, d, F3, KK1, 2, 11);
- R( d, e, a, b, c, F2, KK2, 15, 9);
- R( c, d, e, a, b, F2, KK2, 5, 7);
- R( b, c, d, e, a, F2, KK2, 1, 15);
- R( a, b, c, d, e, F2, KK2, 3, 11);
- R( e, a, b, c, d, F2, KK2, 7, 8);
- R( d, e, a, b, c, F2, KK2, 14, 6);
- R( c, d, e, a, b, F2, KK2, 6, 6);
- R( b, c, d, e, a, F2, KK2, 9, 14);
- R( a, b, c, d, e, F2, KK2, 11, 12);
- R( e, a, b, c, d, F2, KK2, 8, 13);
- R( d, e, a, b, c, F2, KK2, 12, 5);
- R( c, d, e, a, b, F2, KK2, 2, 14);
- R( b, c, d, e, a, F2, KK2, 10, 13);
- R( a, b, c, d, e, F2, KK2, 0, 13);
- R( e, a, b, c, d, F2, KK2, 4, 7);
- R( d, e, a, b, c, F2, KK2, 13, 5);
- R( c, d, e, a, b, F1, KK3, 8, 15);
- R( b, c, d, e, a, F1, KK3, 6, 5);
- R( a, b, c, d, e, F1, KK3, 4, 8);
- R( e, a, b, c, d, F1, KK3, 1, 11);
- R( d, e, a, b, c, F1, KK3, 3, 14);
- R( c, d, e, a, b, F1, KK3, 11, 14);
- R( b, c, d, e, a, F1, KK3, 15, 6);
- R( a, b, c, d, e, F1, KK3, 0, 14);
- R( e, a, b, c, d, F1, KK3, 5, 6);
- R( d, e, a, b, c, F1, KK3, 12, 9);
- R( c, d, e, a, b, F1, KK3, 2, 12);
- R( b, c, d, e, a, F1, KK3, 13, 9);
- R( a, b, c, d, e, F1, KK3, 9, 12);
- R( e, a, b, c, d, F1, KK3, 7, 5);
- R( d, e, a, b, c, F1, KK3, 10, 15);
- R( c, d, e, a, b, F1, KK3, 14, 8);
- R( b, c, d, e, a, F0, KK4, 12, 8);
- R( a, b, c, d, e, F0, KK4, 15, 5);
- R( e, a, b, c, d, F0, KK4, 10, 12);
- R( d, e, a, b, c, F0, KK4, 4, 9);
- R( c, d, e, a, b, F0, KK4, 1, 12);
- R( b, c, d, e, a, F0, KK4, 5, 5);
- R( a, b, c, d, e, F0, KK4, 8, 14);
- R( e, a, b, c, d, F0, KK4, 7, 6);
- R( d, e, a, b, c, F0, KK4, 6, 8);
- R( c, d, e, a, b, F0, KK4, 2, 13);
- R( b, c, d, e, a, F0, KK4, 13, 6);
- R( a, b, c, d, e, F0, KK4, 14, 5);
- R( e, a, b, c, d, F0, KK4, 0, 15);
- R( d, e, a, b, c, F0, KK4, 3, 13);
- R( c, d, e, a, b, F0, KK4, 9, 11);
- R( b, c, d, e, a, F0, KK4, 11, 11);
-
-
- t = hd->h1 + d + cc;
- hd->h1 = hd->h2 + e + dd;
- hd->h2 = hd->h3 + a + ee;
- hd->h3 = hd->h4 + b + aa;
- hd->h4 = hd->h0 + c + bb;
- hd->h0 = t;
-}
-
-
-/* Update the message digest with the contents
- * of INBUF with length INLEN.
- */
-static void
-rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- burn_stack (108+5*sizeof(void*));
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- rmd160_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- burn_stack (108+5*sizeof(void*));
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-/****************
- * Apply the rmd160 transform function on the buffer which must have
- * a length 64 bytes. Do not use this function together with the
- * other functions, use rmd160_init to initialize internal variables.
- * Returns: 16 bytes in buffer with the mixed contentes of buffer.
- */
-void
-rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer )
-{
- char *p = buffer;
- transform( hd, buffer );
- #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
- X(0);
- X(1);
- X(2);
- X(3);
- X(4);
- #undef X
-}
-
-
-/* The routine terminates the computation
- */
-
-static void
-rmd160_final( RMD160_CONTEXT *hd )
-{
- u32 t, msb, lsb;
- byte *p;
-
- rmd160_write(hd, NULL, 0); /* flush */;
-
- t = hd->nblocks;
- /* multiply by 64 to make a byte count */
- lsb = t << 6;
- msb = t >> 26;
- /* add the count */
- t = lsb;
- if( (lsb += hd->count) < t )
- msb++;
- /* multiply by 8 to make a bit count */
- t = lsb;
- lsb <<= 3;
- msb <<= 3;
- msb |= t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x80; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x80; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- rmd160_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = lsb ;
- hd->buf[57] = lsb >> 8;
- hd->buf[58] = lsb >> 16;
- hd->buf[59] = lsb >> 24;
- hd->buf[60] = msb ;
- hd->buf[61] = msb >> 8;
- hd->buf[62] = msb >> 16;
- hd->buf[63] = msb >> 24;
- transform( hd, hd->buf );
- burn_stack (108+5*sizeof(void*));
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \
- *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0)
- #else /* little endian */
- #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
- #endif
- X(0);
- X(1);
- X(2);
- X(3);
- X(4);
- #undef X
-}
-
-static byte *
-rmd160_read( RMD160_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-
-
-/****************
- * Shortcut functions which puts the hash value of the supplied buffer
- * into outbuf which must have a size of 20 bytes.
- */
-void
-rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length )
-{
- RMD160_CONTEXT hd;
-
- rmd160_init( &hd );
- rmd160_write( &hd, (byte*)buffer, length );
- rmd160_final( &hd );
- memcpy( outbuf, hd.buf, 20 );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-rmd160_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- static byte asn[15] = /* Object ID is 1.3.36.3.2.1 */
- { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x24, 0x03,
- 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 };
-
- if( algo != 3 )
- return NULL;
-
- *contextsize = sizeof(RMD160_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 20;
- *(void (**)(RMD160_CONTEXT *))r_init = rmd160_init;
- *(void (**)(RMD160_CONTEXT *, byte*, size_t))r_write = rmd160_write;
- *(void (**)(RMD160_CONTEXT *))r_final = rmd160_final;
- *(byte *(**)(RMD160_CONTEXT *))r_read = rmd160_read;
-
- return "RIPEMD160";
-}
-
diff --git a/cipher/rmd160test.c b/cipher/rmd160test.c
deleted file mode 100644
index 14afb435b..000000000
--- a/cipher/rmd160test.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* rmd160test.c - ripe md160 test program
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "util.h"
-#include "rmd.h"
-
-static void
-usage(void)
-{
- fprintf(stderr, "usage: rmd160test\n");
- exit(1);
-}
-
-
-int
-main(int argc, char **argv)
-{
- RMDHANDLE rmdhd;
- int i, n;
- byte buf[100], *p;
-
- if( argc > 1 )
- usage();
-
- rmdhd = rmd160_open(0);
- #if 1
- while( (n = fread( buf, 1, 100, stdin )) > 0 )
- rmd160_write(rmdhd, buf, n);
- #else
- for(i=0; i < 1000000; i++ )
- rmd160_putchar(rmdhd, 'a');
- #endif
- p = rmd160_final(rmdhd);
- for(i=0; i < 20; i++, p++ )
- printf("%02x", *p );
- putchar('\n');
-
- rmd160_close(rmdhd);
- return 0;
-}
-
diff --git a/cipher/rndegd.c b/cipher/rndegd.c
deleted file mode 100644
index 5f71ab858..000000000
--- a/cipher/rndegd.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* rndegd.c - interface to the EGD
- * Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#ifdef USE_RNDEGD
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include "types.h"
-#include "util.h"
-#include "ttyio.h"
-#include "algorithms.h"
-#include "cipher.h"
-#include "i18n.h"
-
-
-#ifndef offsetof
-#define offsetof(type, member) ((size_t) &((type *)0)->member)
-#endif
-
-static int egd_socket = -1;
-
-static int
-do_write( int fd, void *buf, size_t nbytes )
-{
- size_t nleft = nbytes;
- int nwritten;
-
- while( nleft > 0 ) {
- nwritten = write( fd, buf, nleft);
- if( nwritten < 0 ) {
- if( errno == EINTR )
- continue;
- return -1;
- }
- nleft -= nwritten;
- buf = (char*)buf + nwritten;
- }
- return 0;
-}
-
-static int
-do_read( int fd, void *buf, size_t nbytes )
-{
- int n, nread = 0;
-
- while (nbytes)
- {
- do {
- n = read(fd, (char*)buf + nread, nbytes );
- } while( n == -1 && errno == EINTR );
- if( n == -1 )
- return nread? nread:-1;
- else if( n == 0 ) {
- /* EGD probably died. */
- errno = ECONNRESET;
- return -1;
- }
- nread += n;
- nbytes -= n;
- }
- return nread;
-}
-
-/* Connect to the EGD and return the file descriptor. Return -1 on
- error. With NOFAIL set to true, silently fail and return the
- error, otherwise print an error message and die. */
-int
-rndegd_connect_socket (int nofail)
-{
- int fd;
- const char *bname = NULL;
- char *name;
- struct sockaddr_un addr;
- int addr_len;
-
- if (egd_socket != -1)
- {
- close (egd_socket);
- egd_socket = -1;
- }
-
-#ifdef EGD_SOCKET_NAME
- bname = EGD_SOCKET_NAME;
-#endif
- if ( !bname || !*bname )
- bname = "=entropy";
-
- if ( *bname == '=' && bname[1] )
- name = make_filename( g10_opt_homedir, bname+1 , NULL );
- else
- name = make_filename( bname , NULL );
-
- if ( strlen(name)+1 >= sizeof addr.sun_path )
- g10_log_fatal ("EGD socketname is too long\n");
-
- memset( &addr, 0, sizeof addr );
- addr.sun_family = AF_UNIX;
- strcpy( addr.sun_path, name );
- addr_len = (offsetof( struct sockaddr_un, sun_path )
- + strlen( addr.sun_path ));
-
- fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1 && !nofail)
- g10_log_fatal("can't create unix domain socket: %s\n",
- strerror(errno) );
- else if (connect (fd, (struct sockaddr*)&addr, addr_len) == -1)
- {
- if (!nofail)
- g10_log_fatal("can't connect to `%s': %s\n",
- name, strerror(errno) );
- close (fd);
- fd = -1;
- }
- m_free(name);
- if (fd != -1)
- egd_socket = fd;
- return fd;
-}
-
-
-/****************
- * Note: we always use the highest level.
- * TO boost the performance we may want to add some
- * additional code for level 1
- *
- * Using a level of 0 should never block and better add nothing
- * to the pool. So this is just a dummy for EGD.
- */
-int
-rndegd_gather_random( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- int fd = egd_socket;
- int n;
- byte buffer[256+2];
- int nbytes;
- int do_restart = 0;
-
- if( !length )
- return 0;
- if( !level )
- return 0;
-
- restart:
- if (fd == -1 || do_restart)
- fd = rndegd_connect_socket (0);
-
- do_restart = 0;
-
- nbytes = length < 255? length : 255;
- /* first time we do it with a non blocking request */
- buffer[0] = 1; /* non blocking */
- buffer[1] = nbytes;
- if( do_write( fd, buffer, 2 ) == -1 )
- g10_log_fatal("can't write to the EGD: %s\n", strerror(errno) );
- n = do_read( fd, buffer, 1 );
- if( n == -1 ) {
- g10_log_error("read error on EGD: %s\n", strerror(errno));
- do_restart = 1;
- goto restart;
- }
- n = buffer[0];
- if( n ) {
- n = do_read( fd, buffer, n );
- if( n == -1 ) {
- g10_log_error("read error on EGD: %s\n", strerror(errno));
- do_restart = 1;
- goto restart;
- }
- (*add)( buffer, n, requester );
- length -= n;
- }
-
- if( length ) {
- tty_printf(
- _("Please wait, entropy is being gathered. Do some work if it would\n"
- "keep you from getting bored, because it will improve the quality\n"
- "of the entropy.\n") );
- }
- while( length ) {
- nbytes = length < 255? length : 255;
-
- buffer[0] = 2; /* blocking */
- buffer[1] = nbytes;
- if( do_write( fd, buffer, 2 ) == -1 )
- g10_log_fatal("can't write to the EGD: %s\n", strerror(errno) );
- n = do_read( fd, buffer, nbytes );
- if( n == -1 ) {
- g10_log_error("read error on EGD: %s\n", strerror(errno));
- do_restart = 1;
- goto restart;
- }
- (*add)( buffer, n, requester );
- length -= n;
- }
- memset(buffer, 0, sizeof(buffer) );
-
- return 0; /* success */
-}
-
-#endif /*USE_RNDEGD*/
diff --git a/cipher/rndlinux.c b/cipher/rndlinux.c
deleted file mode 100644
index c31b7f71c..000000000
--- a/cipher/rndlinux.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* rndlinux.c - raw random number for OSes with /dev/random
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-#include <config.h>
-
-#ifdef USE_RNDLINUX
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAVE_GETTIMEOFDAY
- #include <sys/times.h>
-#endif
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#if 0
- #include <sys/ioctl.h>
- #include <asm/types.h>
- #include <linux/random.h>
-#endif
-#include "types.h"
-#include "util.h"
-#include "ttyio.h"
-#include "algorithms.h"
-
-#include "i18n.h"
-
-static int open_device( const char *name, int minor );
-
-
-#if 0
-#ifdef HAVE_DEV_RANDOM_IOCTL
-static ulong
-get_entropy_count( int fd )
-{
- ulong count;
-
- if( ioctl( fd, RNDGETENTCNT, &count ) == -1 )
- g10_log_fatal("ioctl(RNDGETENTCNT) failed: %s\n", strerror(errno) );
- return count;
-}
-#endif
-#endif
-
-/****************
- * Used to open the /dev/random devices (Linux, xBSD, Solaris (if it exists), ...)
- */
-static int
-open_device( const char *name, int minor )
-{
- int fd;
- struct stat sb;
-
- fd = open( name, O_RDONLY );
- if( fd == -1 )
- g10_log_fatal("can't open %s: %s\n", name, strerror(errno) );
- if( fstat( fd, &sb ) )
- g10_log_fatal("stat() off %s failed: %s\n", name, strerror(errno) );
- /* Don't check device type for better portability */
- /* if( (!S_ISCHR(sb.st_mode)) && (!S_ISFIFO(sb.st_mode)) )
- g10_log_fatal("invalid random device!\n" ); */
- return fd;
-}
-
-
-/****************
- * Note: Using a level of 0 should never block and better add nothing
- * to the pool. This is easy to accomplish with /dev/urandom.
- */
-int
-rndlinux_gather_random( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static int fd_urandom = -1;
- static int fd_random = -1;
- int fd;
- int n;
- int warn=0;
- byte buffer[768];
-
- if( level >= 2 ) {
- if( fd_random == -1 )
- fd_random = open_device( NAME_OF_DEV_RANDOM, 8 );
- fd = fd_random;
- }
- else {
- /* this will also be used for elve 0 but by using /dev/urandom
- * we can be sure that oit will never block. */
- if( fd_urandom == -1 )
- fd_urandom = open_device( NAME_OF_DEV_URANDOM, 9 );
- fd = fd_urandom;
- }
-
- #if 0
- #ifdef HAVE_DEV_RANDOM_IOCTL
- g10_log_info("entropy count of %d is %lu\n", fd, get_entropy_count(fd) );
- #endif
- #endif
- while( length ) {
- fd_set rfds;
- struct timeval tv;
- int rc;
-
- FD_ZERO(&rfds);
- FD_SET(fd, &rfds);
- tv.tv_sec = 3;
- tv.tv_usec = 0;
- if( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) {
- if( !warn )
- tty_printf(
-_("\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"), (int)length );
- warn = 1;
- continue;
- }
- else if( rc == -1 ) {
- tty_printf(
- "select() error: %s\n", strerror(errno));
- continue;
- }
-
- do {
- int nbytes = length < sizeof(buffer)? length : sizeof(buffer);
- n = read(fd, buffer, nbytes );
- if( n >= 0 && n > nbytes ) {
- g10_log_error("bogus read from random device (n=%d)\n", n );
- n = nbytes;
- }
- } while( n == -1 && errno == EINTR );
- if( n == -1 )
- g10_log_fatal("read error on random device: %s\n", strerror(errno));
- (*add)( buffer, n, requester );
- length -= n;
- }
- memset(buffer, 0, sizeof(buffer) );
-
- return 0; /* success */
-}
-
-#endif /*USE_RNDLINUX*/
diff --git a/cipher/rndriscos.c b/cipher/rndriscos.c
deleted file mode 100644
index 98142b313..000000000
--- a/cipher/rndriscos.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* rndriscos.c - raw random number for RISC OS
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#ifdef USE_RNDRISCOS
-
-#include <string.h>
-#include <kernel.h>
-#include <swis.h>
-#include "util.h"
-
-static int init_device(void);
-
-#define CryptRandom_Byte 0x51980
-
-static const char * const path[] = {
- "GnuPG:CryptRandom",
- "GnuPG:CryptRand",
- "System:Modules.CryptRandom"
- "System:Modules.CryptRand",
- NULL
-};
-
-/****************
- * Used to load the CryptRandom module if it isn't already loaded
- */
-static int
-init_device(void)
-{
- int i;
-
- /* Is CryptRandom already loaded? */
- if (!_swix(OS_Module, _INR(0,1), 18, "CryptRandom"))
- return 1;
-
- /* Check all the places where the module could be located */
- for (i=0; path[i]; ++i)
- if (!_swix(OS_Module, _INR(0,1), 1, path[i]))
- return 1;
-
- /* Can't find CryptRandom in the default locations */
- g10_log_fatal("Can't load module CryptRandom.\n");
-
- return 0; /* never reached, but don't throw a warning */
-}
-
-
-/****************
- * Get the random bytes from module
- */
-int
-rndriscos_gather_random(void (*add)(const void*, size_t, int), int requester,
- size_t length, int level)
-{
- static int initialized = 0;
- int n;
- byte buffer[768];
-
- if (!initialized)
- initialized = init_device();
-
- while (length) {
- int nbytes = length < sizeof(buffer) ? length : sizeof(buffer);
-
- for (n = 0; n < nbytes; ++n)
- if (_swix(CryptRandom_Byte, _OUT(0), &buffer[n]))
- g10_log_fatal("CryptRandom module isn't working as expected!\n");
-
- (*add)(buffer, n, requester);
- length -= n;
- }
- memset(buffer, 0, sizeof(buffer));
-
- return 0; /* success */
-}
-
-#endif /*USE_RNDRISCOS */
diff --git a/cipher/rndunix.c b/cipher/rndunix.c
deleted file mode 100644
index 4c8aeaefa..000000000
--- a/cipher/rndunix.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/****************************************************************************
- * *
- * *
- * Unix Randomness-Gathering Code *
- * *
- * Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999. *
- * Heavily modified for GnuPG by Werner Koch *
- * *
- * *
- ****************************************************************************/
-
-/* This module is part of the cryptlib continuously seeded pseudorandom
- number generator. For usage conditions, see lib_rand.c
-
- [Here is the notice from lib_rand.c:]
-
- This module and the misc/rnd*.c modules represent the cryptlib
- continuously seeded pseudorandom number generator (CSPRNG) as described in
- my 1998 Usenix Security Symposium paper "The generation of random numbers
- for cryptographic purposes".
-
- The CSPRNG code is copyright Peter Gutmann (and various others) 1996,
- 1997, 1998, 1999, all rights reserved. Redistribution of the CSPRNG
- modules and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice
- and this permission notice in its entirety.
-
- 2. Redistributions in binary form must reproduce the copyright notice in
- the documentation and/or other materials provided with the distribution.
-
- 3. A copy of any bugfixes or enhancements made must be provided to the
- author, <pgut001@cs.auckland.ac.nz> to allow them to be added to the
- baseline version of the code.
-
- ALTERNATIVELY, the code may be distributed under the terms of the GNU
- General Public License, version 2 or any later version published by the
- Free Software Foundation, in which case the provisions of the GNU GPL are
- required INSTEAD OF the above restrictions.
-
- Although not required under the terms of the GPL, it would still be nice if
- you could make any changes available to the author to allow a consistent
- code base to be maintained */
-
-
-
-/* General includes */
-
-#include <config.h>
-
-#ifdef USE_RNDUNIX
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-/* OS-specific includes */
-
-#ifdef __osf__
- /* Somewhere in the morass of system-specific cruft which OSF/1 pulls in
- * via the following includes are various endianness defines, so we
- * undefine the cryptlib ones, which aren't really needed for this module
- * anyway */
-#undef BIG_ENDIAN
-#undef LITTLE_ENDIAN
-#endif /* __osf__ */
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <pwd.h>
-#ifndef __QNX__
-#include <sys/errno.h>
-#include <sys/ipc.h>
-#endif /* __QNX__ */
-#include <sys/time.h> /* SCO and SunOS need this before resource.h */
-#ifndef __QNX__
-#include <sys/resource.h>
-#endif /* __QNX__ */
-#if defined( _AIX ) || defined( __QNX__ )
-#include <sys/select.h>
-#endif /* _AIX || __QNX__ */
-#ifndef __QNX__
-#include <sys/shm.h>
-#include <signal.h>
-#include <sys/signal.h>
-#endif /* __QNX__ */
-#include <sys/stat.h>
-#include <sys/types.h> /* Verschiedene komische Typen */
-#if defined( __hpux ) && ( OS_VERSION == 9 )
-#include <vfork.h>
-#endif /* __hpux 9.x, after that it's in unistd.h */
-#include <sys/wait.h>
-/* #include <kitchensink.h> */
-#ifdef __QNX__
-#include <signal.h>
-#include <process.h>
-#endif /* __QNX__ */
-#include <errno.h>
-
-#include "types.h" /* for byte and u32 typedefs */
-#ifndef IS_MODULE
-#include "algorithms.h"
-#endif
-#include "util.h"
-
-#ifndef EAGAIN
-#define EAGAIN EWOULDBLOCK
-#endif
-#ifndef STDIN_FILENO
-#define STDIN_FILENO 0
-#endif
-#ifndef STDOUT_FILENO
-#define STDOUT_FILENO 1
-#endif
-
-#define GATHER_BUFSIZE 49152 /* Usually about 25K are filled */
-
-/* The structure containing information on random-data sources. Each
- * record contains the source and a relative estimate of its usefulness
- * (weighting) which is used to scale the number of kB of output from the
- * source (total = data_bytes / usefulness). Usually the weighting is in the
- * range 1-3 (or 0 for especially useless sources), resulting in a usefulness
- * rating of 1...3 for each kB of source output (or 0 for the useless
- * sources).
- *
- * If the source is constantly changing (certain types of network statistics
- * have this characteristic) but the amount of output is small, the weighting
- * is given as a negative value to indicate that the output should be treated
- * as if a minimum of 1K of output had been obtained. If the source produces
- * a lot of output then the scale factor is fractional, resulting in a
- * usefulness rating of < 1 for each kB of source output.
- *
- * In order to provide enough randomness to satisfy the requirements for a
- * slow poll, we need to accumulate at least 20 points of usefulness (a
- * typical system should get about 30 points).
- *
- * Some potential options are missed out because of special considerations.
- * pstat -i and pstat -f can produce amazing amounts of output (the record
- * is 600K on an Oracle server) which floods the buffer and doesn't yield
- * anything useful (apart from perhaps increasing the entropy of the vmstat
- * output a bit), so we don't bother with this. pstat in general produces
- * quite a bit of output, but it doesn't change much over time, so it gets
- * very low weightings. netstat -s produces constantly-changing output but
- * also produces quite a bit of it, so it only gets a weighting of 2 rather
- * than 3. The same holds for netstat -in, which gets 1 rather than 2.
- *
- * Some binaries are stored in different locations on different systems so
- * alternative paths are given for them. The code sorts out which one to
- * run by itself, once it finds an exectable somewhere it moves on to the
- * next source. The sources are arranged roughly in their order of
- * usefulness, occasionally sources which provide a tiny amount of
- * relatively useless data are placed ahead of ones which provide a large
- * amount of possibly useful data because another 100 bytes can't hurt, and
- * it means the buffer won't be swamped by one or two high-output sources.
- * All the high-output sources are clustered towards the end of the list
- * for this reason. Some binaries are checked for in a certain order, for
- * example under Slowaris /usr/ucb/ps understands aux as an arg, but the
- * others don't. Some systems have conditional defines enabling alternatives
- * to commands which don't understand the usual options but will provide
- * enough output (in the form of error messages) to look like they're the
- * real thing, causing alternative options to be skipped (we can't check the
- * return either because some commands return peculiar, non-zero status even
- * when they're working correctly).
- *
- * In order to maximise use of the buffer, the code performs a form of run-
- * length compression on its input where a repeated sequence of bytes is
- * replaced by the occurrence count mod 256. Some commands output an awful
- * lot of whitespace, this measure greatly increases the amount of data we
- * can fit in the buffer.
- *
- * When we scale the weighting using the SC() macro, some preprocessors may
- * give a division by zero warning for the most obvious expression
- * 'weight ? 1024 / weight : 0' (and gcc 2.7.2.2 dies with a division by zero
- * trap), so we define a value SC_0 which evaluates to zero when fed to
- * '1024 / SC_0' */
-
-#define SC( weight ) ( 1024 / weight ) /* Scale factor */
-#define SC_0 16384 /* SC( SC_0 ) evalutes to 0 */
-
-static struct RI {
- const char *path; /* Path to check for existence of source */
- const char *arg; /* Args for source */
- const int usefulness; /* Usefulness of source */
- FILE *pipe; /* Pipe to source as FILE * */
- int pipeFD; /* Pipe to source as FD */
- pid_t pid; /* pid of child for waitpid() */
- int length; /* Quantity of output produced */
- const int hasAlternative; /* Whether source has alt.location */
-} dataSources[] = {
-
- { "/bin/vmstat", "-s", SC(-3), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-s", SC(-3), NULL, 0, 0, 0, 0},
- { "/bin/vmstat", "-c", SC(-3), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-c", SC(-3), NULL, 0, 0, 0, 0},
- { "/usr/bin/pfstat", NULL, SC(-2), NULL, 0, 0, 0, 0},
- { "/bin/vmstat", "-i", SC(-2), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-i", SC(-2), NULL, 0, 0, 0, 0},
- { "/usr/ucb/netstat", "-s", SC(2), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-s", SC(2), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-s", SC(2), NULL, 0, 0, 0, 1},
- { "/usr/etc/netstat", "-s", SC(2), NULL, 0, 0, 0, 0},
- { "/usr/bin/nfsstat", NULL, SC(2), NULL, 0, 0, 0, 0},
- { "/usr/ucb/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/etc/netstat", "-m", SC(-1), NULL, 0, 0, 0, 0 },
- { "/bin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/ucb/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1},
- { "/usr/etc/netstat", "-in", SC(-1), NULL, 0, 0, 0, 0},
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.7.1.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* UDP in */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.7.4.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* UDP out */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.4.3.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* IP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.10.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.11.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.13.0",
- SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */
- { "/usr/bin/mpstat", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/w", NULL, SC(1), NULL, 0, 0, 0, 1 },
- { "/usr/bsd/w", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/df", NULL, SC(1), NULL, 0, 0, 0, 1 },
- { "/bin/df", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/sbin/portstat", NULL, SC(1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/iostat", NULL, SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/usr/bin/uptime", NULL, SC(SC_0), NULL, 0, 0, 0, 1 },
- { "/usr/bsd/uptime", NULL, SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/bin/vmstat", "-f", SC(SC_0), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", "-f", SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/bin/vmstat", NULL, SC(SC_0), NULL, 0, 0, 0, 1 },
- { "/usr/bin/vmstat", NULL, SC(SC_0), NULL, 0, 0, 0, 0 },
- { "/usr/ucb/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/usr/bin/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/usr/etc/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 0 },
-#if defined( __sgi ) || defined( __hpux )
- { "/bin/ps", "-el", SC(0.3), NULL, 0, 0, 0, 1 },
-#endif /* __sgi || __hpux */
- { "/usr/ucb/ps", "aux", SC(0.3), NULL, 0, 0, 0, 1 },
- { "/usr/bin/ps", "aux", SC(0.3), NULL, 0, 0, 0, 1 },
- { "/bin/ps", "aux", SC(0.3), NULL, 0, 0, 0, 0 },
- { "/bin/ps", "-A", SC(0.3), NULL, 0, 0, 0, 0 }, /*QNX*/
- { "/usr/bin/ipcs", "-a", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/bin/ipcs", "-a", SC(0.5), NULL, 0, 0, 0, 0 },
- /* Unreliable source, depends on system usage */
- { "/etc/pstat", "-p", SC(0.5), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-p", SC(0.5), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-S", SC(0.2), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-S", SC(0.2), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-v", SC(0.2), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-v", SC(0.2), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-x", SC(0.2), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-x", SC(0.2), NULL, 0, 0, 0, 0 },
- { "/etc/pstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/bin/pstat", "-t", SC(0.1), NULL, 0, 0, 0, 0 },
- /* pstat is your friend */
- { "/usr/bin/last", "-n 50", SC(0.3), NULL, 0, 0, 0, 1 },
-#ifdef __sgi
- { "/usr/bsd/last", "-50", SC(0.3), NULL, 0, 0, 0, 0 },
-#endif /* __sgi */
-#ifdef __hpux
- { "/etc/last", "-50", SC(0.3), NULL, 0, 0, 0, 0 },
-#endif /* __hpux */
- { "/usr/bsd/last", "-n 50", SC(0.3), NULL, 0, 0, 0, 0 },
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.5.1.0",
- SC(0.1), NULL, 0, 0, 0, 0 }, /* ICMP ? */
- { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.5.3.0",
- SC(0.1), NULL, 0, 0, 0, 0 }, /* ICMP ? */
- { "/etc/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/etc/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/sbin/arp", "-a", SC(0.1), NULL, 0, 0, 0, 0 },
- { "/usr/sbin/ripquery", "-nw 1 127.0.0.1",
- SC(0.1), NULL, 0, 0, 0, 0 },
- { "/bin/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/bin/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 },
- { "/usr/ucb/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 0 },
- { "/usr/bin/tcpdump", "-c 5 -efvvx", SC(1), NULL, 0, 0, 0, 0 },
- /* This is very environment-dependant. If network traffic is low, it'll
- * probably time out before delivering 5 packets, which is OK because
- * it'll probably be fixed stuff like ARP anyway */
- { "/usr/sbin/advfsstat", "-b usr_domain",
- SC(SC_0), NULL, 0, 0, 0, 0},
- { "/usr/sbin/advfsstat", "-l 2 usr_domain",
- SC(0.5), NULL, 0, 0, 0, 0},
- { "/usr/sbin/advfsstat", "-p usr_domain",
- SC(SC_0), NULL, 0, 0, 0, 0},
- /* This is a complex and screwball program. Some systems have things
- * like rX_dmn, x = integer, for RAID systems, but the statistics are
- * pretty dodgy */
-#ifdef __QNXNTO__
- { "/bin/pidin", "-F%A%B%c%d%E%I%J%K%m%M%n%N%p%P%S%s%T", SC(0.3),
- NULL, 0, 0, 0, 0 },
-#endif
-#if 0
- /* The following aren't enabled since they're somewhat slow and not very
- * unpredictable, however they give an indication of the sort of sources
- * you can use (for example the finger might be more useful on a
- * firewalled internal network) */
- { "/usr/bin/finger", "@ml.media.mit.edu", SC(0.9), NULL, 0, 0, 0, 0 },
- { "/usr/local/bin/wget", "-O - http://lavarand.sgi.com/block.html",
- SC(0.9), NULL, 0, 0, 0, 0 },
- { "/bin/cat", "/usr/spool/mqueue/syslog", SC(0.9), NULL, 0, 0, 0, 0 },
-#endif /* 0 */
- { NULL, NULL, 0, NULL, 0, 0, 0, 0 }
-};
-
-static byte *gather_buffer; /* buffer for gathering random noise */
-static int gather_buffer_size; /* size of the memory buffer */
-static uid_t gatherer_uid;
-
-/* The message structure used to communicate with the parent */
-typedef struct {
- int usefulness; /* usefulness of data */
- int ndata; /* valid bytes in data */
- char data[500]; /* gathered data */
-} GATHER_MSG;
-
-
-#ifndef HAVE_WAITPID
-pid_t
-waitpid(pid_t pid, int *statptr, int options)
-{
- #ifdef HAVE_WAIT4
- return wait4(pid, statptr, options, NULL);
- #else
- /* If wait4 is also not available, try wait3 for SVR3 variants */
- /* Less ideal because can't actually request a specific pid */
- /* For that reason, first check to see if pid is for an */
- /* existing process. */
- int tmp_pid, dummystat;;
- if (kill(pid, 0) == -1) {
- errno = ECHILD;
- return -1;
- }
- if (statptr == NULL)
- statptr = &dummystat;
- while (((tmp_pid = wait3(statptr, options, 0)) != pid) &&
- (tmp_pid != -1) && (tmp_pid != 0) && (pid != -1))
- ;
- return tmp_pid;
- #endif
-}
-#endif
-
-
-/* Under SunOS popen() doesn't record the pid of the child process. When
- * pclose() is called, instead of calling waitpid() for the correct child, it
- * calls wait() repeatedly until the right child is reaped. The problem is
- * that this reaps any other children that happen to have died at that
- * moment, and when their pclose() comes along, the process hangs forever.
- * The fix is to use a wrapper for popen()/pclose() which saves the pid in
- * the dataSources structure (code adapted from GNU-libc's popen() call).
- *
- * Aut viam inveniam aut faciam */
-
-static FILE *
-my_popen(struct RI *entry)
-{
-
- int pipedes[2];
- FILE *stream;
-
- /* Create the pipe */
- if (pipe(pipedes) < 0)
- return (NULL);
-
- /* Fork off the child ("vfork() is like an OS orgasm. All OS's want to
- * do it, but most just end up faking it" - Chris Wedgwood). If your OS
- * supports it, you should try to use vfork() here because it's somewhat
- * more efficient */
-#if defined( sun ) || defined( __ultrix__ ) || defined( __osf__ ) || \
- defined(__hpux)
- entry->pid = vfork();
-#else /* */
- entry->pid = fork();
-#endif /* Unixen which have vfork() */
- if (entry->pid == (pid_t) - 1) {
- /* The fork failed */
- close(pipedes[0]);
- close(pipedes[1]);
- return (NULL);
- }
-
- if (entry->pid == (pid_t) 0) {
- struct passwd *passwd;
- int fd;
-
- /* We are the child. Make the read side of the pipe be stdout */
- if (dup2(pipedes[STDOUT_FILENO], STDOUT_FILENO) < 0)
- exit(127);
- /* Connect the other standard handles to the bit bucket. */
- if ((fd = open ("/dev/null", O_RDWR)) != -1) {
- dup2 (fd, STDIN_FILENO);
- dup2 (fd, STDERR_FILENO);
- close (fd);
- }
-
- /* Now that everything is set up, give up our permissions to make
- * sure we don't read anything sensitive. If the getpwnam() fails,
- * we default to -1, which is usually nobody */
- if (gatherer_uid == (uid_t)-1 && \
- (passwd = getpwnam("nobody")) != NULL)
- gatherer_uid = passwd->pw_uid;
-
- setuid(gatherer_uid);
-
- /* Close the pipe descriptors. */
- close(pipedes[STDIN_FILENO]);
- close(pipedes[STDOUT_FILENO]);
-
- /* Try and exec the program */
- execl(entry->path, entry->path, entry->arg, NULL);
-
- /* Die if the exec failed */
- exit(127);
- }
-
- /* We are the parent. Close the irrelevant side of the pipe and open
- * the relevant side as a new stream. Mark our side of the pipe to
- * close on exec, so new children won't see it */
- close(pipedes[STDOUT_FILENO]);
-
-#ifdef FD_CLOEXEC
- fcntl(pipedes[STDIN_FILENO], F_SETFD, FD_CLOEXEC);
-#endif
-
- stream = fdopen(pipedes[STDIN_FILENO], "r");
-
- if (stream == NULL) {
- int savedErrno = errno;
-
- /* The stream couldn't be opened or the child structure couldn't be
- * allocated. Kill the child and close the other side of the pipe */
- kill(entry->pid, SIGKILL);
- if (stream == NULL)
- close(pipedes[STDOUT_FILENO]);
- else
- fclose(stream);
-
- waitpid(entry->pid, NULL, 0);
-
- entry->pid = 0;
- errno = savedErrno;
- return (NULL);
- }
-
- return (stream);
-}
-
-static int
-my_pclose(struct RI *entry)
-{
- int status = 0;
-
- if (fclose(entry->pipe))
- return (-1);
-
- /* We ignore the return value from the process because some programs
- * return funny values which would result in the input being discarded
- * even if they executed successfully. This isn't a problem because the
- * result data size threshold will filter out any programs which exit
- * with a usage message without producing useful output */
- if (waitpid(entry->pid, NULL, 0) != entry->pid)
- status = -1;
-
- entry->pipe = NULL;
- entry->pid = 0;
- return (status);
-}
-
-
-/* Unix slow poll (without special support for Linux)
- *
- * If a few of the randomness sources create a large amount of output then
- * the slowPoll() stops once the buffer has been filled (but before all the
- * randomness sources have been sucked dry) so that the 'usefulness' factor
- * remains below the threshold. For this reason the gatherer buffer has to
- * be fairly sizeable on moderately loaded systems. This is something of a
- * bug since the usefulness should be influenced by the amount of output as
- * well as the source type */
-
-
-static int
-slow_poll(FILE *dbgfp, int dbgall, size_t *nbytes )
-{
- int moreSources;
- struct timeval tv;
- fd_set fds;
- #if defined( __hpux )
- size_t maxFD = 0;
- #else
- int maxFD = 0;
- #endif /* OS-specific brokenness */
- int bufPos, i, usefulness = 0;
-
-
- /* Fire up each randomness source */
- FD_ZERO(&fds);
- for (i = 0; dataSources[i].path != NULL; i++) {
- /* Since popen() is a fairly heavy function, we check to see whether
- * the executable exists before we try to run it */
- if (access(dataSources[i].path, X_OK)) {
- if( dbgfp && dbgall )
- fprintf(dbgfp, "%s not present%s\n", dataSources[i].path,
- dataSources[i].hasAlternative ?
- ", has alternatives" : "");
- dataSources[i].pipe = NULL;
- }
- else
- dataSources[i].pipe = my_popen(&dataSources[i]);
-
- if (dataSources[i].pipe != NULL) {
- dataSources[i].pipeFD = fileno(dataSources[i].pipe);
- if (dataSources[i].pipeFD > maxFD)
- maxFD = dataSources[i].pipeFD;
- #ifdef O_NONBLOCK /* Ohhh what a hack (used for Atari) */
- fcntl(dataSources[i].pipeFD, F_SETFL, O_NONBLOCK);
- #endif
- FD_SET(dataSources[i].pipeFD, &fds);
- dataSources[i].length = 0;
-
- /* If there are alternatives for this command, don't try and
- * execute them */
- while (dataSources[i].hasAlternative) {
- if( dbgfp && dbgall )
- fprintf(dbgfp, "Skipping %s\n", dataSources[i + 1].path);
- i++;
- }
- }
- }
-
-
- /* Suck all the data we can get from each of the sources */
- bufPos = 0;
- moreSources = 1;
- while (moreSources && bufPos <= gather_buffer_size) {
- /* Wait for data to become available from any of the sources, with a
- * timeout of 10 seconds. This adds even more randomness since data
- * becomes available in a nondeterministic fashion. Kudos to HP's QA
- * department for managing to ship a select() which breaks its own
- * prototype */
- tv.tv_sec = 10;
- tv.tv_usec = 0;
-
- #if defined( __hpux ) && ( OS_VERSION == 9 )
- if (select(maxFD + 1, (int *)&fds, NULL, NULL, &tv) == -1)
- #else /* */
- if (select(maxFD + 1, &fds, NULL, NULL, &tv) == -1)
- #endif /* __hpux */
- break;
-
- /* One of the sources has data available, read it into the buffer */
- for (i = 0; dataSources[i].path != NULL; i++) {
- if( dataSources[i].pipe && FD_ISSET(dataSources[i].pipeFD, &fds)) {
- size_t noBytes;
-
- if ((noBytes = fread(gather_buffer + bufPos, 1,
- gather_buffer_size - bufPos,
- dataSources[i].pipe)) == 0) {
- if (my_pclose(&dataSources[i]) == 0) {
- int total = 0;
-
- /* Try and estimate how much entropy we're getting
- * from a data source */
- if (dataSources[i].usefulness) {
- if (dataSources[i].usefulness < 0)
- total = (dataSources[i].length + 999)
- / -dataSources[i].usefulness;
- else
- total = dataSources[i].length
- / dataSources[i].usefulness;
- }
- if( dbgfp )
- fprintf(dbgfp,
- "%s %s contributed %d bytes, "
- "usefulness = %d\n", dataSources[i].path,
- (dataSources[i].arg != NULL) ?
- dataSources[i].arg : "",
- dataSources[i].length, total);
- if( dataSources[i].length )
- usefulness += total;
- }
- dataSources[i].pipe = NULL;
- }
- else {
- int currPos = bufPos;
- int endPos = bufPos + noBytes;
-
- /* Run-length compress the input byte sequence */
- while (currPos < endPos) {
- int ch = gather_buffer[currPos];
-
- /* If it's a single byte, just copy it over */
- if (ch != gather_buffer[currPos + 1]) {
- gather_buffer[bufPos++] = ch;
- currPos++;
- }
- else {
- int count = 0;
-
- /* It's a run of repeated bytes, replace them
- * with the byte count mod 256 */
- while ((ch == gather_buffer[currPos])
- && currPos < endPos) {
- count++;
- currPos++;
- }
- gather_buffer[bufPos++] = count;
- noBytes -= count - 1;
- }
- }
-
- /* Remember the number of (compressed) bytes of input we
- * obtained */
- dataSources[i].length += noBytes;
- }
- }
- }
-
- /* Check if there is more input available on any of the sources */
- moreSources = 0;
- FD_ZERO(&fds);
- for (i = 0; dataSources[i].path != NULL; i++) {
- if (dataSources[i].pipe != NULL) {
- FD_SET(dataSources[i].pipeFD, &fds);
- moreSources = 1;
- }
- }
- }
-
- if( dbgfp ) {
- fprintf(dbgfp, "Got %d bytes, usefulness = %d\n", bufPos, usefulness);
- fflush(dbgfp);
- }
- *nbytes = bufPos;
- return usefulness;
-}
-
-/****************
- * Start the gatherer process which writes messages of
- * type GATHERER_MSG to pipedes
- */
-static void
-start_gatherer( int pipefd )
-{
- FILE *dbgfp = NULL;
- int dbgall;
-
- {
- const char *s = getenv("GNUPG_RNDUNIX_DBG");
- if( s ) {
- dbgfp = (*s=='-' && !s[1])? stdout : fopen(s, "a");
- if( !dbgfp )
- g10_log_info("can't open debug file `%s': %s\n",
- s, strerror(errno) );
- else
- fprintf(dbgfp,"\nSTART RNDUNIX DEBUG pid=%d\n", (int)getpid());
- }
- dbgall = !!getenv("GNUPG_RNDUNIX_DBGALL");
- }
-
-
- /* Set up the buffer */
- gather_buffer_size = GATHER_BUFSIZE;
- gather_buffer = malloc( gather_buffer_size );
- if( !gather_buffer ) {
- g10_log_error("out of core while allocating the gatherer buffer\n");
- exit(2);
- }
-
- /* Reset the SIGC(H)LD handler to the system default. This is necessary
- * because if the program which cryptlib is a part of installs its own
- * SIGC(H)LD handler, it will end up reaping the cryptlib children before
- * cryptlib can. As a result, my_pclose() will call waitpid() on a
- * process which has already been reaped by the installed handler and
- * return an error, so the read data won't be added to the randomness
- * pool. There are two types of SIGC(H)LD naming, the SysV SIGCLD and
- * the BSD/Posix SIGCHLD, so we need to handle either possibility */
- #ifdef SIGCLD
- signal(SIGCLD, SIG_DFL);
- #else
- signal(SIGCHLD, SIG_DFL);
- #endif
-
- fflush (stderr);
- /* Arrghh!! It's Stuart code!! */
- /* (close all files but the ones we need) */
- { int nmax, n1, i;
- #ifdef _SC_OPEN_MAX
- if( (nmax=sysconf( _SC_OPEN_MAX )) < 0 ) {
- #ifdef _POSIX_OPEN_MAX
- nmax = _POSIX_OPEN_MAX;
- #else
- nmax = 20; /* assume a reasonable value */
- #endif
- }
- #else
- nmax = 20; /* assume a reasonable value */
- #endif
- {
- int fd;
- if ((fd = open ("/dev/null", O_RDWR)) != -1) {
- dup2 (fd, STDIN_FILENO);
- dup2 (fd, STDOUT_FILENO);
- dup2 (fd, STDERR_FILENO);
- close (fd);
- }
- }
- n1 = dbgfp? fileno (dbgfp) : -1;
- for(i=0; i < nmax; i++ ) {
- if (i != STDIN_FILENO && i != STDOUT_FILENO && i != STDERR_FILENO
- && i != n1 && i != pipefd )
- close(i);
- }
- errno = 0;
- }
-
-
- for(;;) {
- GATHER_MSG msg;
- size_t nbytes;
- const char *p;
-
- msg.usefulness = slow_poll( dbgfp, dbgall, &nbytes );
- p = gather_buffer;
- while( nbytes ) {
- msg.ndata = nbytes > sizeof(msg.data)? sizeof(msg.data) : nbytes;
- memcpy( msg.data, p, msg.ndata );
- nbytes -= msg.ndata;
- p += msg.ndata;
-
- while( write( pipefd, &msg, sizeof(msg) ) != sizeof(msg) ) {
- if( errno == EINTR )
- continue;
- if( errno == EAGAIN ) {
- struct timeval tv;
- tv.tv_sec = 0;
- tv.tv_usec = 50000;
- select(0, NULL, NULL, NULL, &tv);
- continue;
- }
- if( errno == EPIPE ) /* parent has exited, so give up */
- exit(0);
-
- /* we can't do very much here because stderr is closed */
- if( dbgfp )
- fprintf(dbgfp, "gatherer can't write to pipe: %s\n",
- strerror(errno) );
- /* we start a new poll to give the system some time */
- nbytes = 0;
- break;
- }
- }
- }
- /* we are killed when the parent dies */
-}
-
-
-static int
-read_a_msg( int fd, GATHER_MSG *msg )
-{
- char *buffer = (char*)msg;
- size_t length = sizeof( *msg );
- int n;
-
- do {
- do {
- n = read(fd, buffer, length );
- } while( n == -1 && errno == EINTR );
- if( n == -1 )
- return -1;
- buffer += n;
- length -= n;
- } while( length );
- return 0;
-}
-
-
-/****************
- * Using a level of 0 should never block and better add nothing
- * to the pool. So this is just a dummy for this gatherer.
- */
-int
-rndunix_gather_random( void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static pid_t gatherer_pid = 0;
- static int pipedes[2];
- GATHER_MSG msg;
- size_t n;
-
- if( !level )
- return 0;
-
- if( !gatherer_pid ) {
- /* make sure we are not setuid */
- if( getuid() != geteuid() )
- BUG();
- /* time to start the gatherer process */
- if( pipe( pipedes ) ) {
- g10_log_error("pipe() failed: %s\n", strerror(errno));
- return -1;
- }
- gatherer_pid = fork();
- if( gatherer_pid == -1 ) {
- g10_log_error("can't for gatherer process: %s\n", strerror(errno));
- return -1;
- }
- if( !gatherer_pid ) {
- start_gatherer( pipedes[1] );
- /* oops, can't happen */
- return -1;
- }
- }
-
- /* now read from the gatherer */
- while( length ) {
- int goodness;
- ulong subtract;
-
- if( read_a_msg( pipedes[0], &msg ) ) {
- g10_log_error("reading from gatherer pipe failed: %s\n",
- strerror(errno));
- return -1;
- }
-
-
- if( level > 1 ) {
- if( msg.usefulness > 30 )
- goodness = 100;
- else if ( msg.usefulness )
- goodness = msg.usefulness * 100 / 30;
- else
- goodness = 0;
- }
- else if( level ) {
- if( msg.usefulness > 15 )
- goodness = 100;
- else if ( msg.usefulness )
- goodness = msg.usefulness * 100 / 15;
- else
- goodness = 0;
- }
- else
- goodness = 100; /* goodness of level 0 is always 100 % */
-
- n = msg.ndata;
- if( n > length )
- n = length;
- (*add)( msg.data, n, requester );
-
- /* this is the trick how e cope with the goodness */
- subtract = (ulong)n * goodness / 100;
- /* subtract at least 1 byte to avoid infinite loops */
- length -= subtract ? subtract : 1;
- }
-
- return 0;
-}
-
-#endif /*USE_RNDUNIX*/
diff --git a/cipher/rndw32.c b/cipher/rndw32.c
deleted file mode 100644
index c5f855ca6..000000000
--- a/cipher/rndw32.c
+++ /dev/null
@@ -1,706 +0,0 @@
-/* rndw32.c - W32 entropy gatherer
- * Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- * Copyright Peter Gutmann, Matt Thomlinson and Blake Coverett 1996-1999
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- *
- *************************************************************************
- * The code here is based on code from Cryptlib 3.0 beta by Peter Gutmann.
- * Source file misc/rndwin32.c "Win32 Randomness-Gathering Code" with this
- * copyright notice:
- *
- * This module is part of the cryptlib continuously seeded pseudorandom
- * number generator. For usage conditions, see lib_rand.c
- *
- * [Here is the notice from lib_rand.c, which is now called dev_sys.c]
- *
- * This module and the misc/rnd*.c modules represent the cryptlib
- * continuously seeded pseudorandom number generator (CSPRNG) as described in
- * my 1998 Usenix Security Symposium paper "The generation of random numbers
- * for cryptographic purposes".
- *
- * The CSPRNG code is copyright Peter Gutmann (and various others) 1996,
- * 1997, 1998, 1999, all rights reserved. Redistribution of the CSPRNG
- * modules and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice
- * and this permission notice in its entirety.
- *
- * 2. Redistributions in binary form must reproduce the copyright notice in
- * the documentation and/or other materials provided with the distribution.
- *
- * 3. A copy of any bugfixes or enhancements made must be provided to the
- * author, <pgut001@cs.auckland.ac.nz> to allow them to be added to the
- * baseline version of the code.
- *
- * ALTERNATIVELY, the code may be distributed under the terms of the GNU
- * General Public License, version 2 or any later version published by the
- * Free Software Foundation, in which case the provisions of the GNU GPL are
- * required INSTEAD OF the above restrictions.
- *
- * Although not required under the terms of the GPL, it would still be nice if
- * you could make any changes available to the author to allow a consistent
- * code base to be maintained
- *************************************************************************
- */
-
-#include <config.h>
-
-#ifdef USE_RNDW32
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-
-#include <windows.h>
-#ifdef __CYGWIN32__
-# include <winioctl.h>
-#endif
-
-
-#include "types.h"
-#include "util.h"
-#include "algorithms.h"
-
-#include "i18n.h"
-
-
-static int debug_me;
-
-/*
- * Definitions which are missing from the current GNU Windows32Api
- */
-
-#ifndef TH32CS_SNAPHEAPLIST
-#define TH32CS_SNAPHEAPLIST 1
-#define TH32CS_SNAPPROCESS 2
-#define TH32CS_SNAPTHREAD 4
-#define TH32CS_SNAPMODULE 8
-#define TH32CS_SNAPALL (1|2|4|8)
-#define TH32CS_INHERIT 0x80000000
-#endif /*TH32CS_SNAPHEAPLIST*/
-
-#ifndef IOCTL_DISK_PERFORMANCE
-#define IOCTL_DISK_PERFORMANCE 0x00070020
-#endif
-#ifndef VER_PLATFORM_WIN32_WINDOWS
-#define VER_PLATFORM_WIN32_WINDOWS 1
-#endif
-
-/* This used to be (6*8+5*4+8*2), but Peter Gutmann figured a larger
- value in a newer release. So we use a far larger value. */
-#define SIZEOF_DISK_PERFORMANCE_STRUCT 256
-
-
-typedef struct {
- DWORD dwSize;
- DWORD th32ProcessID;
- DWORD th32HeapID;
- DWORD dwFlags;
-} HEAPLIST32;
-
-typedef struct {
- DWORD dwSize;
- HANDLE hHandle;
- DWORD dwAddress;
- DWORD dwBlockSize;
- DWORD dwFlags;
- DWORD dwLockCount;
- DWORD dwResvd;
- DWORD th32ProcessID;
- DWORD th32HeapID;
-} HEAPENTRY32;
-
-typedef struct {
- DWORD dwSize;
- DWORD cntUsage;
- DWORD th32ProcessID;
- DWORD th32DefaultHeapID;
- DWORD th32ModuleID;
- DWORD cntThreads;
- DWORD th32ParentProcessID;
- LONG pcPriClassBase;
- DWORD dwFlags;
- char szExeFile[260];
-} PROCESSENTRY32;
-
-typedef struct {
- DWORD dwSize;
- DWORD cntUsage;
- DWORD th32ThreadID;
- DWORD th32OwnerProcessID;
- LONG tpBasePri;
- LONG tpDeltaPri;
- DWORD dwFlags;
-} THREADENTRY32;
-
-typedef struct {
- DWORD dwSize;
- DWORD th32ModuleID;
- DWORD th32ProcessID;
- DWORD GlblcntUsage;
- DWORD ProccntUsage;
- BYTE *modBaseAddr;
- DWORD modBaseSize;
- HMODULE hModule;
- char szModule[256];
- char szExePath[260];
-} MODULEENTRY32;
-
-
-
-/* Type definitions for function pointers to call Toolhelp32 functions
- * used with the windows95 gatherer */
-typedef BOOL (WINAPI * MODULEWALK) (HANDLE hSnapshot, MODULEENTRY32 *lpme);
-typedef BOOL (WINAPI * THREADWALK) (HANDLE hSnapshot, THREADENTRY32 *lpte);
-typedef BOOL (WINAPI * PROCESSWALK) (HANDLE hSnapshot, PROCESSENTRY32 *lppe);
-typedef BOOL (WINAPI * HEAPLISTWALK) (HANDLE hSnapshot, HEAPLIST32 *lphl);
-typedef BOOL (WINAPI * HEAPFIRST) (HEAPENTRY32 *lphe, DWORD th32ProcessID,
- DWORD th32HeapID);
-typedef BOOL (WINAPI * HEAPNEXT) (HEAPENTRY32 *lphe);
-typedef HANDLE (WINAPI * CREATESNAPSHOT) (DWORD dwFlags, DWORD th32ProcessID);
-
-/* Type definitions for function pointers to call NetAPI32 functions */
-typedef DWORD (WINAPI * NETSTATISTICSGET) (LPWSTR szServer, LPWSTR szService,
- DWORD dwLevel, DWORD dwOptions,
- LPBYTE * lpBuffer);
-typedef DWORD (WINAPI * NETAPIBUFFERSIZE) (LPVOID lpBuffer, LPDWORD cbBuffer);
-typedef DWORD (WINAPI * NETAPIBUFFERFREE) (LPVOID lpBuffer);
-
-
-/* When we query the performance counters, we allocate an initial buffer and
- * then reallocate it as required until RegQueryValueEx() stops returning
- * ERROR_MORE_DATA. The following values define the initial buffer size and
- * step size by which the buffer is increased
- */
-#define PERFORMANCE_BUFFER_SIZE 65536 /* Start at 64K */
-#define PERFORMANCE_BUFFER_STEP 16384 /* Step by 16K */
-
-
-static void
-slow_gatherer_windows95( void (*add)(const void*, size_t, int), int requester )
-{
- static CREATESNAPSHOT pCreateToolhelp32Snapshot = NULL;
- static MODULEWALK pModule32First = NULL;
- static MODULEWALK pModule32Next = NULL;
- static PROCESSWALK pProcess32First = NULL;
- static PROCESSWALK pProcess32Next = NULL;
- static THREADWALK pThread32First = NULL;
- static THREADWALK pThread32Next = NULL;
- static HEAPLISTWALK pHeap32ListFirst = NULL;
- static HEAPLISTWALK pHeap32ListNext = NULL;
- static HEAPFIRST pHeap32First = NULL;
- static HEAPNEXT pHeap32Next = NULL;
- HANDLE hSnapshot;
-
-
- /* initialize the Toolhelp32 function pointers */
- if ( !pCreateToolhelp32Snapshot ) {
- HANDLE hKernel;
-
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_95: init toolkit\n" );
-
- /* Obtain the module handle of the kernel to retrieve the addresses
- * of the Toolhelp32 functions */
- if ( ( !(hKernel = GetModuleHandle ("KERNEL32.DLL"))) ) {
- g10_log_fatal ( "rndw32: can't get module handle\n" );
- }
-
- /* Now get pointers to the functions */
- pCreateToolhelp32Snapshot = (CREATESNAPSHOT) GetProcAddress (hKernel,
- "CreateToolhelp32Snapshot");
- pModule32First = (MODULEWALK) GetProcAddress (hKernel, "Module32First");
- pModule32Next = (MODULEWALK) GetProcAddress (hKernel, "Module32Next");
- pProcess32First = (PROCESSWALK) GetProcAddress (hKernel,
- "Process32First");
- pProcess32Next = (PROCESSWALK) GetProcAddress (hKernel,
- "Process32Next");
- pThread32First = (THREADWALK) GetProcAddress (hKernel, "Thread32First");
- pThread32Next = (THREADWALK) GetProcAddress (hKernel, "Thread32Next");
- pHeap32ListFirst = (HEAPLISTWALK) GetProcAddress (hKernel,
- "Heap32ListFirst");
- pHeap32ListNext = (HEAPLISTWALK) GetProcAddress (hKernel,
- "Heap32ListNext");
- pHeap32First = (HEAPFIRST) GetProcAddress (hKernel, "Heap32First");
- pHeap32Next = (HEAPNEXT) GetProcAddress (hKernel, "Heap32Next");
-
- if ( !pCreateToolhelp32Snapshot
- || !pModule32First || !pModule32Next
- || !pProcess32First || !pProcess32Next
- || !pThread32First || !pThread32Next
- || !pHeap32ListFirst || !pHeap32ListNext
- || !pHeap32First || !pHeap32Next ) {
- g10_log_fatal ( "rndw32: failed to get a toolhep function\n" );
- }
- }
-
- /* Take a snapshot of everything we can get to which is currently
- * in the system */
- if ( !(hSnapshot = pCreateToolhelp32Snapshot (TH32CS_SNAPALL, 0)) ) {
- g10_log_fatal ( "rndw32: failed to take a toolhelp snapshot\n" );
- }
-
- /* Walk through the local heap */
- { HEAPLIST32 hl32;
- hl32.dwSize = sizeof (HEAPLIST32);
- if (pHeap32ListFirst (hSnapshot, &hl32)) {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_95: walk heap\n" );
- do {
- HEAPENTRY32 he32;
-
- /* First add the information from the basic Heaplist32 struct */
- (*add) ( &hl32, sizeof (hl32), requester );
-
- /* Now walk through the heap blocks getting information
- * on each of them */
- he32.dwSize = sizeof (HEAPENTRY32);
- if (pHeap32First (&he32, hl32.th32ProcessID, hl32.th32HeapID)){
- do {
- (*add) ( &he32, sizeof (he32), requester );
- } while (pHeap32Next (&he32));
- }
- } while (pHeap32ListNext (hSnapshot, &hl32));
- }
- }
-
-
- /* Walk through all processes */
- { PROCESSENTRY32 pe32;
- pe32.dwSize = sizeof (PROCESSENTRY32);
- if (pProcess32First (hSnapshot, &pe32)) {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_95: walk processes\n" );
- do {
- (*add) ( &pe32, sizeof (pe32), requester );
- } while (pProcess32Next (hSnapshot, &pe32));
- }
- }
-
- /* Walk through all threads */
- { THREADENTRY32 te32;
- te32.dwSize = sizeof (THREADENTRY32);
- if (pThread32First (hSnapshot, &te32)) {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_95: walk threads\n" );
- do {
- (*add) ( &te32, sizeof (te32), requester );
- } while (pThread32Next (hSnapshot, &te32));
- }
- }
-
- /* Walk through all modules associated with the process */
- { MODULEENTRY32 me32;
- me32.dwSize = sizeof (MODULEENTRY32);
- if (pModule32First (hSnapshot, &me32)) {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_95: walk modules\n" );
- do {
- (*add) ( &me32, sizeof (me32), requester );
- } while (pModule32Next (hSnapshot, &me32));
- }
- }
-
- CloseHandle (hSnapshot);
-}
-
-
-
-static void
-slow_gatherer_windowsNT( void (*add)(const void*, size_t, int), int requester )
-{
- static int is_initialized = 0;
- static NETSTATISTICSGET pNetStatisticsGet = NULL;
- static NETAPIBUFFERSIZE pNetApiBufferSize = NULL;
- static NETAPIBUFFERFREE pNetApiBufferFree = NULL;
- static int is_workstation = 1;
-
- static int cbPerfData = PERFORMANCE_BUFFER_SIZE;
- PERF_DATA_BLOCK *pPerfData;
- HANDLE hDevice, hNetAPI32 = NULL;
- DWORD dwSize, status;
- int nDrive;
-
- if ( !is_initialized ) {
- HKEY hKey;
-
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_nt: init toolkit\n" );
- /* Find out whether this is an NT server or workstation if necessary */
- if (RegOpenKeyEx (HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
- 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
- BYTE szValue[32];
- dwSize = sizeof (szValue);
-
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_nt: check product options\n" );
- status = RegQueryValueEx (hKey, "ProductType", 0, NULL,
- szValue, &dwSize);
- if (status == ERROR_SUCCESS
- && ascii_strcasecmp (szValue, "WinNT")) {
- /* Note: There are (at least) three cases for ProductType:
- * WinNT = NT Workstation, ServerNT = NT Server, LanmanNT =
- * NT Server acting as a Domain Controller */
- is_workstation = 0;
- if ( debug_me )
- log_debug ("rndw32: this is a NT server\n");
- }
- RegCloseKey (hKey);
- }
-
- /* Initialize the NetAPI32 function pointers if necessary */
- if ( (hNetAPI32 = LoadLibrary ("NETAPI32.DLL")) ) {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_nt: netapi32 loaded\n" );
- pNetStatisticsGet = (NETSTATISTICSGET) GetProcAddress (hNetAPI32,
- "NetStatisticsGet");
- pNetApiBufferSize = (NETAPIBUFFERSIZE) GetProcAddress (hNetAPI32,
- "NetApiBufferSize");
- pNetApiBufferFree = (NETAPIBUFFERFREE) GetProcAddress (hNetAPI32,
- "NetApiBufferFree");
-
- if ( !pNetStatisticsGet
- || !pNetApiBufferSize || !pNetApiBufferFree ) {
- FreeLibrary (hNetAPI32);
- hNetAPI32 = NULL;
- g10_log_debug ("rndw32: No NETAPI found\n" );
- }
- }
-
- is_initialized = 1;
- }
-
- /* Get network statistics. Note: Both NT Workstation and NT Server by
- * default will be running both the workstation and server services. The
- * heuristic below is probably useful though on the assumption that the
- * majority of the network traffic will be via the appropriate service.
- * In any case the network statistics return almost no randomness */
- { LPBYTE lpBuffer;
- if (hNetAPI32 && !pNetStatisticsGet (NULL,
- is_workstation ? L"LanmanWorkstation" :
- L"LanmanServer", 0, 0, &lpBuffer) ) {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_nt: get netstats\n" );
- pNetApiBufferSize (lpBuffer, &dwSize);
- (*add) ( lpBuffer, dwSize,requester );
- pNetApiBufferFree (lpBuffer);
- }
- }
-
- /* Get disk I/O statistics for all the hard drives */
- for (nDrive = 0;; nDrive++) {
- char diskPerformance[SIZEOF_DISK_PERFORMANCE_STRUCT];
- char szDevice[50];
-
- /* Check whether we can access this device */
- sprintf (szDevice, "\\\\.\\PhysicalDrive%d", nDrive);
- hDevice = CreateFile (szDevice, 0, FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL, OPEN_EXISTING, 0, NULL);
- if (hDevice == INVALID_HANDLE_VALUE)
- break;
-
- /* Note: This only works if you have turned on the disk performance
- * counters with 'diskperf -y'. These counters are off by default */
- if (DeviceIoControl (hDevice, IOCTL_DISK_PERFORMANCE, NULL, 0,
- diskPerformance, SIZEOF_DISK_PERFORMANCE_STRUCT,
- &dwSize, NULL))
- {
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_nt: iostats drive %d\n",
- nDrive );
- (*add) (diskPerformance, dwSize, requester );
- }
- else {
- log_info ("NOTE: you should run 'diskperf -y' "
- "to enable the disk statistics\n");
- }
- CloseHandle (hDevice);
- }
-
- #if 0 /* we don't need this in GnuPG */
- /* Wait for any async keyset driver binding to complete. You may be
- * wondering what this call is doing here... the reason it's necessary is
- * because RegQueryValueEx() will hang indefinitely if the async driver
- * bind is in progress. The problem occurs in the dynamic loading and
- * linking of driver DLL's, which work as follows:
- *
- * hDriver = LoadLibrary( DRIVERNAME );
- * pFunction1 = ( TYPE_FUNC1 ) GetProcAddress( hDriver, NAME_FUNC1 );
- * pFunction2 = ( TYPE_FUNC1 ) GetProcAddress( hDriver, NAME_FUNC2 );
- *
- * If RegQueryValueEx() is called while the GetProcAddress()'s are in
- * progress, it will hang indefinitely. This is probably due to some
- * synchronisation problem in the NT kernel where the GetProcAddress()
- * calls affect something like a module reference count or function
- * reference count while RegQueryValueEx() is trying to take a snapshot
- * of the statistics, which include the reference counts. Because of
- * this, we have to wait until any async driver bind has completed
- * before we can call RegQueryValueEx() */
- waitSemaphore (SEMAPHORE_DRIVERBIND);
- #endif
-
- /* Get information from the system performance counters. This can take
- * a few seconds to do. In some environments the call to
- * RegQueryValueEx() can produce an access violation at some random time
- * in the future, adding a short delay after the following code block
- * makes the problem go away. This problem is extremely difficult to
- * reproduce, I haven't been able to get it to occur despite running it
- * on a number of machines. The best explanation for the problem is that
- * on the machine where it did occur, it was caused by an external driver
- * or other program which adds its own values under the
- * HKEY_PERFORMANCE_DATA key. The NT kernel calls the required external
- * modules to map in the data, if there's a synchronisation problem the
- * external module would write its data at an inappropriate moment,
- * causing the access violation. A low-level memory checker indicated
- * that ExpandEnvironmentStrings() in KERNEL32.DLL, called an
- * interminable number of calls down inside RegQueryValueEx(), was
- * overwriting memory (it wrote twice the allocated size of a buffer to a
- * buffer allocated by the NT kernel). This may be what's causing the
- * problem, but since it's in the kernel there isn't much which can be
- * done.
- *
- * In addition to these problems the code in RegQueryValueEx() which
- * estimates the amount of memory required to return the performance
- * counter information isn't very accurate, since it always returns a
- * worst-case estimate which is usually nowhere near the actual amount
- * required. For example it may report that 128K of memory is required,
- * but only return 64K of data */
- { pPerfData = m_alloc (cbPerfData);
- for (;;) {
- dwSize = cbPerfData;
- if ( debug_me )
- log_debug ("rndw32#slow_gatherer_nt: get perf data\n" );
- status = RegQueryValueEx (HKEY_PERFORMANCE_DATA, "Global", NULL,
- NULL, (LPBYTE) pPerfData, &dwSize);
- if (status == ERROR_SUCCESS) {
- if (!memcmp (pPerfData->Signature, L"PERF", 8)) {
- (*add) ( pPerfData, dwSize, requester );
- }
- else
- g10_log_debug ( "rndw32: no PERF signature\n");
- break;
- }
- else if (status == ERROR_MORE_DATA) {
- cbPerfData += PERFORMANCE_BUFFER_STEP;
- pPerfData = m_realloc (pPerfData, cbPerfData);
- }
- else {
- g10_log_debug ( "rndw32: get performance data problem\n");
- break;
- }
- }
- m_free (pPerfData);
- }
- /* Although this isn't documented in the Win32 API docs, it's necessary
- to explicitly close the HKEY_PERFORMANCE_DATA key after use (it's
- implicitly opened on the first call to RegQueryValueEx()). If this
- isn't done then any system components which provide performance data
- can't be removed or changed while the handle remains active */
- RegCloseKey (HKEY_PERFORMANCE_DATA);
-}
-
-
-int
-rndw32_gather_random (void (*add)(const void*, size_t, int), int requester,
- size_t length, int level )
-{
- static int is_initialized;
- static int is_windowsNT, has_toolhelp;
-
-
- if( !level )
- return 0;
- /* We don't differentiate between level 1 and 2 here because
- * there is no nternal entropy pool as a scary resource. It may
- * all work slower, but because our entropy source will never
- * block but deliver some not easy to measure entropy, we assume level 2
- */
-
-
- if ( !is_initialized ) {
- OSVERSIONINFO osvi = { sizeof( osvi ) };
- DWORD platform;
-
- GetVersionEx( &osvi );
- platform = osvi.dwPlatformId;
- is_windowsNT = platform == VER_PLATFORM_WIN32_NT;
- has_toolhelp = (platform == VER_PLATFORM_WIN32_WINDOWS
- || (is_windowsNT && osvi.dwMajorVersion >= 5));
-
- if ( platform == VER_PLATFORM_WIN32s ) {
- g10_log_fatal("can't run on a W32s platform\n" );
- }
- is_initialized = 1;
- if ( debug_me )
- log_debug ("rndw32#gather_random: platform=%d\n", (int)platform );
- }
-
-
- if ( debug_me )
- log_debug ("rndw32#gather_random: req=%d len=%u lvl=%d\n",
- requester, (unsigned int)length, level );
-
- if ( has_toolhelp ) {
- slow_gatherer_windows95 ( add, requester );
- }
- if ( is_windowsNT ) {
- slow_gatherer_windowsNT ( add, requester );
- }
-
- return 0;
-}
-
-
-
-int
-rndw32_gather_random_fast( void (*add)(const void*, size_t, int), int requester )
-{
- static int addedFixedItems = 0;
-
- if ( debug_me )
- log_debug ("rndw32#gather_random_fast: req=%d\n", requester );
-
- /* Get various basic pieces of system information: Handle of active
- * window, handle of window with mouse capture, handle of clipboard owner
- * handle of start of clpboard viewer list, pseudohandle of current
- * process, current process ID, pseudohandle of current thread, current
- * thread ID, handle of desktop window, handle of window with keyboard
- * focus, whether system queue has any events, cursor position for last
- * message, 1 ms time for last message, handle of window with clipboard
- * open, handle of process heap, handle of procs window station, types of
- * events in input queue, and milliseconds since Windows was started */
- { byte buffer[20*sizeof(ulong)], *bufptr;
- bufptr = buffer;
- #define ADD(f) do { ulong along = (ulong)(f); \
- memcpy (bufptr, &along, sizeof (along) ); \
- bufptr += sizeof (along); } while (0)
- ADD ( GetActiveWindow ());
- ADD ( GetCapture ());
- ADD ( GetClipboardOwner ());
- ADD ( GetClipboardViewer ());
- ADD ( GetCurrentProcess ());
- ADD ( GetCurrentProcessId ());
- ADD ( GetCurrentThread ());
- ADD ( GetCurrentThreadId ());
- ADD ( GetDesktopWindow ());
- ADD ( GetFocus ());
- ADD ( GetInputState ());
- ADD ( GetMessagePos ());
- ADD ( GetMessageTime ());
- ADD ( GetOpenClipboardWindow ());
- ADD ( GetProcessHeap ());
- ADD ( GetProcessWindowStation ());
- ADD ( GetQueueStatus (QS_ALLEVENTS));
- ADD ( GetTickCount ());
-
- assert ( bufptr-buffer < sizeof (buffer) );
- (*add) ( buffer, bufptr-buffer, requester );
- #undef ADD
- }
-
- /* Get multiword system information: Current caret position, current
- * mouse cursor position */
- { POINT point;
- GetCaretPos (&point);
- (*add) ( &point, sizeof (point), requester );
- GetCursorPos (&point);
- (*add) ( &point, sizeof (point), requester );
- }
-
- /* Get percent of memory in use, bytes of physical memory, bytes of free
- * physical memory, bytes in paging file, free bytes in paging file, user
- * bytes of address space, and free user bytes */
- { MEMORYSTATUS memoryStatus;
- memoryStatus.dwLength = sizeof (MEMORYSTATUS);
- GlobalMemoryStatus (&memoryStatus);
- (*add) ( &memoryStatus, sizeof (memoryStatus), requester );
- }
-
- /* Get thread and process creation time, exit time, time in kernel mode,
- and time in user mode in 100ns intervals */
- { HANDLE handle;
- FILETIME creationTime, exitTime, kernelTime, userTime;
- DWORD minimumWorkingSetSize, maximumWorkingSetSize;
-
- handle = GetCurrentThread ();
- GetThreadTimes (handle, &creationTime, &exitTime,
- &kernelTime, &userTime);
- (*add) ( &creationTime, sizeof (creationTime), requester );
- (*add) ( &exitTime, sizeof (exitTime), requester );
- (*add) ( &kernelTime, sizeof (kernelTime), requester );
- (*add) ( &userTime, sizeof (userTime), requester );
-
- handle = GetCurrentProcess ();
- GetProcessTimes (handle, &creationTime, &exitTime,
- &kernelTime, &userTime);
- (*add) ( &creationTime, sizeof (creationTime), requester );
- (*add) ( &exitTime, sizeof (exitTime), requester );
- (*add) ( &kernelTime, sizeof (kernelTime), requester );
- (*add) ( &userTime, sizeof (userTime), requester );
-
- /* Get the minimum and maximum working set size for the current process */
- GetProcessWorkingSetSize (handle, &minimumWorkingSetSize,
- &maximumWorkingSetSize);
- (*add) ( &minimumWorkingSetSize,
- sizeof (&minimumWorkingSetSize), requester );
- (*add) ( &maximumWorkingSetSize,
- sizeof (&maximumWorkingSetSize), requester );
- }
-
-
- /* The following are fixed for the lifetime of the process so we only
- * add them once */
- if (!addedFixedItems) {
- STARTUPINFO startupInfo;
-
- /* Get name of desktop, console window title, new window position and
- * size, window flags, and handles for stdin, stdout, and stderr */
- startupInfo.cb = sizeof (STARTUPINFO);
- GetStartupInfo (&startupInfo);
- (*add) ( &startupInfo, sizeof (STARTUPINFO), requester );
- addedFixedItems = 1;
- }
-
- /* The performance of QPC varies depending on the architecture it's
- * running on and on the OS. Under NT it reads the CPU's 64-bit timestamp
- * counter (at least on a Pentium and newer '486's, it hasn't been tested
- * on anything without a TSC), under Win95 it reads the 1.193180 MHz PIC
- * timer. There are vague mumblings in the docs that it may fail if the
- * appropriate hardware isn't available (possibly '386's or MIPS machines
- * running NT), but who's going to run NT on a '386? */
- { LARGE_INTEGER performanceCount;
- if (QueryPerformanceCounter (&performanceCount)) {
- if ( debug_me )
- log_debug ("rndw32#gather_random_fast: perf data\n");
- (*add) (&performanceCount, sizeof (&performanceCount), requester);
- }
- else { /* Millisecond accuracy at best... */
- DWORD aword = GetTickCount ();
- (*add) (&aword, sizeof (aword), requester );
- }
- }
-
- return 0;
-}
-
-
-#endif /*USE_RNDW32*/
diff --git a/cipher/rsa.c b/cipher/rsa.c
deleted file mode 100644
index e438b39cf..000000000
--- a/cipher/rsa.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* rsa.c - RSA function
- * Copyright (C) 1997, 1998, 1999 by Werner Koch (dd9jn)
- * Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/* This code uses an algorithm protected by U.S. Patent #4,405,829
- which expires on September 20, 2000. The patent holder placed that
- patent into the public domain on Sep 6th, 2000.
-*/
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "util.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "rsa.h"
-
-
-typedef struct {
- MPI n; /* modulus */
- MPI e; /* exponent */
-} RSA_public_key;
-
-
-typedef struct {
- MPI n; /* public modulus */
- MPI e; /* public exponent */
- MPI d; /* exponent */
- MPI p; /* prime p. */
- MPI q; /* prime q. */
- MPI u; /* inverse of p mod q. */
-} RSA_secret_key;
-
-
-static void test_keys( RSA_secret_key *sk, unsigned nbits );
-static void generate( RSA_secret_key *sk, unsigned nbits );
-static int check_secret_key( RSA_secret_key *sk );
-static void public(MPI output, MPI input, RSA_public_key *skey );
-static void secret(MPI output, MPI input, RSA_secret_key *skey );
-
-
-static void
-test_keys( RSA_secret_key *sk, unsigned nbits )
-{
- RSA_public_key pk;
- MPI test = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- MPI out1 = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- MPI out2 = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
-
- pk.n = sk->n;
- pk.e = sk->e;
- { char *p = get_random_bits( nbits, 0, 0 );
- mpi_set_buffer( test, p, (nbits+7)/8, 0 );
- m_free(p);
- }
-
- public( out1, test, &pk );
- secret( out2, out1, sk );
- if( mpi_cmp( test, out2 ) )
- log_fatal("RSA operation: public, secret failed\n");
- secret( out1, test, sk );
- public( out2, out1, &pk );
- if( mpi_cmp( test, out2 ) )
- log_fatal("RSA operation: secret, public failed\n");
- mpi_free( test );
- mpi_free( out1 );
- mpi_free( out2 );
-}
-
-/****************
- * Generate a key pair with a key of size NBITS
- * Returns: 2 structures filled with all needed values
- */
-static void
-generate( RSA_secret_key *sk, unsigned nbits )
-{
- MPI p, q; /* the two primes */
- MPI d; /* the private key */
- MPI u;
- MPI t1, t2;
- MPI n; /* the public key */
- MPI e; /* the exponent */
- MPI phi; /* helper: (p-1)(q-1) */
- MPI g;
- MPI f;
-
- /* make sure that nbits is even so that we generate p, q of equal size */
- if ( (nbits&1) )
- nbits++;
-
- n = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
-
- p = q = NULL;
- do {
- /* select two (very secret) primes */
- if (p)
- mpi_free (p);
- if (q)
- mpi_free (q);
- p = generate_secret_prime( nbits / 2 );
- q = generate_secret_prime( nbits / 2 );
- if( mpi_cmp( p, q ) > 0 ) /* p shall be smaller than q (for calc of u)*/
- mpi_swap(p,q);
- /* calculate the modulus */
- mpi_mul( n, p, q );
- } while ( mpi_get_nbits(n) != nbits );
-
- /* calculate Euler totient: phi = (p-1)(q-1) */
- t1 = mpi_alloc_secure( mpi_get_nlimbs(p) );
- t2 = mpi_alloc_secure( mpi_get_nlimbs(p) );
- phi = mpi_alloc_secure( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- g = mpi_alloc_secure( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- f = mpi_alloc_secure( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- mpi_sub_ui( t1, p, 1 );
- mpi_sub_ui( t2, q, 1 );
- mpi_mul( phi, t1, t2 );
- mpi_gcd(g, t1, t2);
- mpi_fdiv_q(f, phi, g);
-
- /* find an public exponent.
- We use 41 as this is quite fast and more secure than the
- commonly used 17. Benchmarking the RSA verify function
- with a 1024 bit key yields (2001-11-08):
- e=17 0.54 ms
- e=41 0.75 ms
- e=257 0.95 ms
- e=65537 1.80 ms
- */
- e = mpi_alloc( (32+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- mpi_set_ui( e, 41);
- if( !mpi_gcd(t1, e, phi) ) {
- mpi_set_ui( e, 257);
- if( !mpi_gcd(t1, e, phi) ) {
- mpi_set_ui( e, 65537);
- while( !mpi_gcd(t1, e, phi) ) /* (while gcd is not 1) */
- mpi_add_ui( e, e, 2);
- }
- }
-
- /* calculate the secret key d = e^1 mod phi */
- d = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- mpi_invm(d, e, f );
- /* calculate the inverse of p and q (used for chinese remainder theorem)*/
- u = mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB );
- mpi_invm(u, p, q );
-
- if( DBG_CIPHER ) {
- log_mpidump(" p= ", p );
- log_mpidump(" q= ", q );
- log_mpidump("phi= ", phi );
- log_mpidump(" g= ", g );
- log_mpidump(" f= ", f );
- log_mpidump(" n= ", n );
- log_mpidump(" e= ", e );
- log_mpidump(" d= ", d );
- log_mpidump(" u= ", u );
- }
-
- mpi_free(t1);
- mpi_free(t2);
- mpi_free(phi);
- mpi_free(f);
- mpi_free(g);
-
- sk->n = n;
- sk->e = e;
- sk->p = p;
- sk->q = q;
- sk->d = d;
- sk->u = u;
-
- /* now we can test our keys (this should never fail!) */
- test_keys( sk, nbits - 64 );
-}
-
-
-/****************
- * Test wether the secret key is valid.
- * Returns: true if this is a valid key.
- */
-static int
-check_secret_key( RSA_secret_key *sk )
-{
- int rc;
- MPI temp = mpi_alloc( mpi_get_nlimbs(sk->p)*2 );
-
- mpi_mul(temp, sk->p, sk->q );
- rc = mpi_cmp( temp, sk->n );
- mpi_free(temp);
- return !rc;
-}
-
-
-
-/****************
- * Public key operation. Encrypt INPUT with PKEY and put result into OUTPUT.
- *
- * c = m^e mod n
- *
- * Where c is OUTPUT, m is INPUT and e,n are elements of PKEY.
- */
-static void
-public(MPI output, MPI input, RSA_public_key *pkey )
-{
- if( output == input ) { /* powm doesn't like output and input the same */
- MPI x = mpi_alloc( mpi_get_nlimbs(input)*2 );
- mpi_powm( x, input, pkey->e, pkey->n );
- mpi_set(output, x);
- mpi_free(x);
- }
- else
- mpi_powm( output, input, pkey->e, pkey->n );
-}
-
-#if 0
-static void
-stronger_key_check ( RSA_secret_key *skey )
-{
- MPI t = mpi_alloc_secure ( 0 );
- MPI t1 = mpi_alloc_secure ( 0 );
- MPI t2 = mpi_alloc_secure ( 0 );
- MPI phi = mpi_alloc_secure ( 0 );
-
- /* check that n == p * q */
- mpi_mul( t, skey->p, skey->q);
- if (mpi_cmp( t, skey->n) )
- log_info ( "RSA Oops: n != p * q\n" );
-
- /* check that p is less than q */
- if( mpi_cmp( skey->p, skey->q ) > 0 )
- log_info ("RSA Oops: p >= q\n");
-
-
- /* check that e divides neither p-1 nor q-1 */
- mpi_sub_ui(t, skey->p, 1 );
- mpi_fdiv_r(t, t, skey->e );
- if ( !mpi_cmp_ui( t, 0) )
- log_info ( "RSA Oops: e divides p-1\n" );
- mpi_sub_ui(t, skey->q, 1 );
- mpi_fdiv_r(t, t, skey->e );
- if ( !mpi_cmp_ui( t, 0) )
- log_info ( "RSA Oops: e divides q-1\n" );
-
- /* check that d is correct */
- mpi_sub_ui( t1, skey->p, 1 );
- mpi_sub_ui( t2, skey->q, 1 );
- mpi_mul( phi, t1, t2 );
- mpi_gcd(t, t1, t2);
- mpi_fdiv_q(t, phi, t);
- mpi_invm(t, skey->e, t );
- if ( mpi_cmp(t, skey->d ) )
- log_info ( "RSA Oops: d is wrong\n");
-
- /* check for crrectness of u */
- mpi_invm(t, skey->p, skey->q );
- if ( mpi_cmp(t, skey->u ) )
- log_info ( "RSA Oops: u is wrong\n");
-
- log_info ( "RSA secret key check finished\n");
-
- mpi_free (t);
- mpi_free (t1);
- mpi_free (t2);
- mpi_free (phi);
-}
-#endif
-
-
-/****************
- * Secret key operation. Encrypt INPUT with SKEY and put result into OUTPUT.
- *
- * m = c^d mod n
- *
- * Or faster:
- *
- * m1 = c ^ (d mod (p-1)) mod p
- * m2 = c ^ (d mod (q-1)) mod q
- * h = u * (m2 - m1) mod q
- * m = m1 + h * p
- *
- * Where m is OUTPUT, c is INPUT and d,n,p,q,u are elements of SKEY.
- */
-static void
-secret(MPI output, MPI input, RSA_secret_key *skey )
-{
- #if 0
- mpi_powm( output, input, skey->d, skey->n );
- #else
- MPI m1 = mpi_alloc_secure( mpi_get_nlimbs(skey->n)+1 );
- MPI m2 = mpi_alloc_secure( mpi_get_nlimbs(skey->n)+1 );
- MPI h = mpi_alloc_secure( mpi_get_nlimbs(skey->n)+1 );
-
- /* m1 = c ^ (d mod (p-1)) mod p */
- mpi_sub_ui( h, skey->p, 1 );
- mpi_fdiv_r( h, skey->d, h );
- mpi_powm( m1, input, h, skey->p );
- /* m2 = c ^ (d mod (q-1)) mod q */
- mpi_sub_ui( h, skey->q, 1 );
- mpi_fdiv_r( h, skey->d, h );
- mpi_powm( m2, input, h, skey->q );
- /* h = u * ( m2 - m1 ) mod q */
- mpi_sub( h, m2, m1 );
- if ( mpi_is_neg( h ) )
- mpi_add ( h, h, skey->q );
- mpi_mulm( h, skey->u, h, skey->q );
- /* m = m2 + h * p */
- mpi_mul ( h, h, skey->p );
- mpi_add ( output, m1, h );
- /* ready */
-
- mpi_free ( h );
- mpi_free ( m1 );
- mpi_free ( m2 );
- #endif
-}
-
-
-/*********************************************
- ************** interface ******************
- *********************************************/
-
-int
-rsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )
-{
- RSA_secret_key sk;
-
- if( !is_RSA(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- generate( &sk, nbits );
- skey[0] = sk.n;
- skey[1] = sk.e;
- skey[2] = sk.d;
- skey[3] = sk.p;
- skey[4] = sk.q;
- skey[5] = sk.u;
- /* make an empty list of factors */
- *retfactors = m_alloc_clear( 1 * sizeof **retfactors );
- return 0;
-}
-
-
-int
-rsa_check_secret_key( int algo, MPI *skey )
-{
- RSA_secret_key sk;
-
- if( !is_RSA(algo) )
- return G10ERR_PUBKEY_ALGO;
-
- sk.n = skey[0];
- sk.e = skey[1];
- sk.d = skey[2];
- sk.p = skey[3];
- sk.q = skey[4];
- sk.u = skey[5];
- if( !check_secret_key( &sk ) )
- return G10ERR_BAD_SECKEY;
-
- return 0;
-}
-
-
-
-int
-rsa_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey )
-{
- RSA_public_key pk;
-
- if( algo != 1 && algo != 2 )
- return G10ERR_PUBKEY_ALGO;
-
- pk.n = pkey[0];
- pk.e = pkey[1];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( pk.n ) );
- public( resarr[0], data, &pk );
- return 0;
-}
-
-int
-rsa_decrypt( int algo, MPI *result, MPI *data, MPI *skey )
-{
- RSA_secret_key sk;
-
- if( algo != 1 && algo != 2 )
- return G10ERR_PUBKEY_ALGO;
-
- sk.n = skey[0];
- sk.e = skey[1];
- sk.d = skey[2];
- sk.p = skey[3];
- sk.q = skey[4];
- sk.u = skey[5];
- *result = mpi_alloc_secure( mpi_get_nlimbs( sk.n ) );
- secret( *result, data[0], &sk );
- return 0;
-}
-
-int
-rsa_sign( int algo, MPI *resarr, MPI data, MPI *skey )
-{
- RSA_secret_key sk;
-
- if( algo != 1 && algo != 3 )
- return G10ERR_PUBKEY_ALGO;
-
- sk.n = skey[0];
- sk.e = skey[1];
- sk.d = skey[2];
- sk.p = skey[3];
- sk.q = skey[4];
- sk.u = skey[5];
- resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.n ) );
- secret( resarr[0], data, &sk );
-
- return 0;
-}
-
-int
-rsa_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *opaque, MPI tmp), void *opaquev )
-{
- RSA_public_key pk;
- MPI result;
- int rc;
-
- if( algo != 1 && algo != 3 )
- return G10ERR_PUBKEY_ALGO;
- pk.n = pkey[0];
- pk.e = pkey[1];
- result = mpi_alloc( (160+BITS_PER_MPI_LIMB-1)/BITS_PER_MPI_LIMB);
- public( result, data[0], &pk );
- /*rc = (*cmp)( opaquev, result );*/
- rc = mpi_cmp( result, hash )? G10ERR_BAD_SIGN:0;
- mpi_free(result);
-
- return rc;
-}
-
-
-unsigned int
-rsa_get_nbits( int algo, MPI *pkey )
-{
- if( !is_RSA(algo) )
- return 0;
- return mpi_get_nbits( pkey[0] );
-}
-
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- * Usage: Bit 0 set : allows signing
- * 1 set : allows encryption
- */
-const char *
-rsa_get_info( int algo,
- int *npkey, int *nskey, int *nenc, int *nsig, int *r_usage )
-{
- *npkey = 2;
- *nskey = 6;
- *nenc = 1;
- *nsig = 1;
-
- switch( algo ) {
- case 1: *r_usage = PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC; return "RSA";
- case 2: *r_usage = PUBKEY_USAGE_ENC; return "RSA-E";
- case 3: *r_usage = PUBKEY_USAGE_SIG; return "RSA-S";
- default:*r_usage = 0; return NULL;
- }
-}
-
-
-
diff --git a/cipher/rsa.h b/cipher/rsa.h
deleted file mode 100644
index 350a373ec..000000000
--- a/cipher/rsa.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* rsa.h
- * Copyright (C) 1997,1998 by Werner Koch (dd9jn)
- * Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_RSA_H
-#define G10_RSA_H
-
-int rsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
-int rsa_check_secret_key( int algo, MPI *skey );
-int rsa_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey );
-int rsa_decrypt( int algo, MPI *result, MPI *data, MPI *skey );
-int rsa_sign( int algo, MPI *resarr, MPI data, MPI *skey );
-int rsa_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaquev );
-unsigned rsa_get_nbits( int algo, MPI *pkey );
-const char *rsa_get_info( int algo, int *npkey, int *nskey,
- int *nenc, int *nsig, int *use );
-
-
-#endif /*G10_RSA_H*/
diff --git a/cipher/sha1.c b/cipher/sha1.c
deleted file mode 100644
index 06ca2532b..000000000
--- a/cipher/sha1.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/* sha1.c - SHA1 hash function
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * Please see below for more legal information!
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/* Test vectors:
- *
- * "abc"
- * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D
- *
- * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
- * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "algorithms.h"
-#include "bithelp.h"
-
-
-typedef struct {
- u32 h0,h1,h2,h3,h4;
- u32 nblocks;
- byte buf[64];
- int count;
-} SHA1_CONTEXT;
-
-static void
-burn_stack (int bytes)
-{
- char buf[128];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-void
-sha1_init( SHA1_CONTEXT *hd )
-{
- hd->h0 = 0x67452301;
- hd->h1 = 0xefcdab89;
- hd->h2 = 0x98badcfe;
- hd->h3 = 0x10325476;
- hd->h4 = 0xc3d2e1f0;
- hd->nblocks = 0;
- hd->count = 0;
-}
-
-
-/****************
- * Transform the message X which consists of 16 32-bit-words
- */
-static void
-transform( SHA1_CONTEXT *hd, byte *data )
-{
- u32 a,b,c,d,e,tm;
- u32 x[16];
-
- /* get values from the chaining vars */
- a = hd->h0;
- b = hd->h1;
- c = hd->h2;
- d = hd->h3;
- e = hd->h4;
-
- #ifdef BIG_ENDIAN_HOST
- memcpy( x, data, 64 );
- #else
- { int i;
- byte *p2;
- for(i=0, p2=(byte*)x; i < 16; i++, p2 += 4 ) {
- p2[3] = *data++;
- p2[2] = *data++;
- p2[1] = *data++;
- p2[0] = *data++;
- }
- }
- #endif
-
-
-#define K1 0x5A827999L
-#define K2 0x6ED9EBA1L
-#define K3 0x8F1BBCDCL
-#define K4 0xCA62C1D6L
-#define F1(x,y,z) ( z ^ ( x & ( y ^ z ) ) )
-#define F2(x,y,z) ( x ^ y ^ z )
-#define F3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) )
-#define F4(x,y,z) ( x ^ y ^ z )
-
-
-#define M(i) ( tm = x[i&0x0f] ^ x[(i-14)&0x0f] \
- ^ x[(i-8)&0x0f] ^ x[(i-3)&0x0f] \
- , (x[i&0x0f] = rol(tm,1)) )
-
-#define R(a,b,c,d,e,f,k,m) do { e += rol( a, 5 ) \
- + f( b, c, d ) \
- + k \
- + m; \
- b = rol( b, 30 ); \
- } while(0)
- R( a, b, c, d, e, F1, K1, x[ 0] );
- R( e, a, b, c, d, F1, K1, x[ 1] );
- R( d, e, a, b, c, F1, K1, x[ 2] );
- R( c, d, e, a, b, F1, K1, x[ 3] );
- R( b, c, d, e, a, F1, K1, x[ 4] );
- R( a, b, c, d, e, F1, K1, x[ 5] );
- R( e, a, b, c, d, F1, K1, x[ 6] );
- R( d, e, a, b, c, F1, K1, x[ 7] );
- R( c, d, e, a, b, F1, K1, x[ 8] );
- R( b, c, d, e, a, F1, K1, x[ 9] );
- R( a, b, c, d, e, F1, K1, x[10] );
- R( e, a, b, c, d, F1, K1, x[11] );
- R( d, e, a, b, c, F1, K1, x[12] );
- R( c, d, e, a, b, F1, K1, x[13] );
- R( b, c, d, e, a, F1, K1, x[14] );
- R( a, b, c, d, e, F1, K1, x[15] );
- R( e, a, b, c, d, F1, K1, M(16) );
- R( d, e, a, b, c, F1, K1, M(17) );
- R( c, d, e, a, b, F1, K1, M(18) );
- R( b, c, d, e, a, F1, K1, M(19) );
- R( a, b, c, d, e, F2, K2, M(20) );
- R( e, a, b, c, d, F2, K2, M(21) );
- R( d, e, a, b, c, F2, K2, M(22) );
- R( c, d, e, a, b, F2, K2, M(23) );
- R( b, c, d, e, a, F2, K2, M(24) );
- R( a, b, c, d, e, F2, K2, M(25) );
- R( e, a, b, c, d, F2, K2, M(26) );
- R( d, e, a, b, c, F2, K2, M(27) );
- R( c, d, e, a, b, F2, K2, M(28) );
- R( b, c, d, e, a, F2, K2, M(29) );
- R( a, b, c, d, e, F2, K2, M(30) );
- R( e, a, b, c, d, F2, K2, M(31) );
- R( d, e, a, b, c, F2, K2, M(32) );
- R( c, d, e, a, b, F2, K2, M(33) );
- R( b, c, d, e, a, F2, K2, M(34) );
- R( a, b, c, d, e, F2, K2, M(35) );
- R( e, a, b, c, d, F2, K2, M(36) );
- R( d, e, a, b, c, F2, K2, M(37) );
- R( c, d, e, a, b, F2, K2, M(38) );
- R( b, c, d, e, a, F2, K2, M(39) );
- R( a, b, c, d, e, F3, K3, M(40) );
- R( e, a, b, c, d, F3, K3, M(41) );
- R( d, e, a, b, c, F3, K3, M(42) );
- R( c, d, e, a, b, F3, K3, M(43) );
- R( b, c, d, e, a, F3, K3, M(44) );
- R( a, b, c, d, e, F3, K3, M(45) );
- R( e, a, b, c, d, F3, K3, M(46) );
- R( d, e, a, b, c, F3, K3, M(47) );
- R( c, d, e, a, b, F3, K3, M(48) );
- R( b, c, d, e, a, F3, K3, M(49) );
- R( a, b, c, d, e, F3, K3, M(50) );
- R( e, a, b, c, d, F3, K3, M(51) );
- R( d, e, a, b, c, F3, K3, M(52) );
- R( c, d, e, a, b, F3, K3, M(53) );
- R( b, c, d, e, a, F3, K3, M(54) );
- R( a, b, c, d, e, F3, K3, M(55) );
- R( e, a, b, c, d, F3, K3, M(56) );
- R( d, e, a, b, c, F3, K3, M(57) );
- R( c, d, e, a, b, F3, K3, M(58) );
- R( b, c, d, e, a, F3, K3, M(59) );
- R( a, b, c, d, e, F4, K4, M(60) );
- R( e, a, b, c, d, F4, K4, M(61) );
- R( d, e, a, b, c, F4, K4, M(62) );
- R( c, d, e, a, b, F4, K4, M(63) );
- R( b, c, d, e, a, F4, K4, M(64) );
- R( a, b, c, d, e, F4, K4, M(65) );
- R( e, a, b, c, d, F4, K4, M(66) );
- R( d, e, a, b, c, F4, K4, M(67) );
- R( c, d, e, a, b, F4, K4, M(68) );
- R( b, c, d, e, a, F4, K4, M(69) );
- R( a, b, c, d, e, F4, K4, M(70) );
- R( e, a, b, c, d, F4, K4, M(71) );
- R( d, e, a, b, c, F4, K4, M(72) );
- R( c, d, e, a, b, F4, K4, M(73) );
- R( b, c, d, e, a, F4, K4, M(74) );
- R( a, b, c, d, e, F4, K4, M(75) );
- R( e, a, b, c, d, F4, K4, M(76) );
- R( d, e, a, b, c, F4, K4, M(77) );
- R( c, d, e, a, b, F4, K4, M(78) );
- R( b, c, d, e, a, F4, K4, M(79) );
-
- /* update chainig vars */
- hd->h0 += a;
- hd->h1 += b;
- hd->h2 += c;
- hd->h3 += d;
- hd->h4 += e;
-}
-
-
-/* Update the message digest with the contents
- * of INBUF with length INLEN.
- */
-static void
-sha1_write( SHA1_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- burn_stack (88+4*sizeof(void*));
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- sha1_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- burn_stack (88+4*sizeof(void*));
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-
-/* The routine final terminates the computation and
- * returns the digest.
- * The handle is prepared for a new cycle, but adding bytes to the
- * handle will the destroy the returned buffer.
- * Returns: 20 bytes representing the digest.
- */
-
-static void
-sha1_final(SHA1_CONTEXT *hd)
-{
- u32 t, msb, lsb;
- byte *p;
-
- sha1_write(hd, NULL, 0); /* flush */;
-
- t = hd->nblocks;
- /* multiply by 64 to make a byte count */
- lsb = t << 6;
- msb = t >> 26;
- /* add the count */
- t = lsb;
- if( (lsb += hd->count) < t )
- msb++;
- /* multiply by 8 to make a bit count */
- t = lsb;
- lsb <<= 3;
- msb <<= 3;
- msb |= t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x80; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x80; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- sha1_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = msb >> 24;
- hd->buf[57] = msb >> 16;
- hd->buf[58] = msb >> 8;
- hd->buf[59] = msb ;
- hd->buf[60] = lsb >> 24;
- hd->buf[61] = lsb >> 16;
- hd->buf[62] = lsb >> 8;
- hd->buf[63] = lsb ;
- transform( hd, hd->buf );
- burn_stack (88+4*sizeof(void*));
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0)
- #else /* little endian */
- #define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \
- *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0)
- #endif
- X(0);
- X(1);
- X(2);
- X(3);
- X(4);
- #undef X
-
-}
-
-static byte *
-sha1_read( SHA1_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-sha1_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
- static byte asn[15] = /* Object ID is 1.3.14.3.2.26 */
- { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03,
- 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14 };
- if( algo != 2 )
- return NULL;
-
- *contextsize = sizeof(SHA1_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 20;
- *(void (**)(SHA1_CONTEXT *))r_init = sha1_init;
- *(void (**)(SHA1_CONTEXT *, byte*, size_t))r_write = sha1_write;
- *(void (**)(SHA1_CONTEXT *))r_final = sha1_final;
- *(byte *(**)(SHA1_CONTEXT *))r_read = sha1_read;
-
- return "SHA1";
-}
diff --git a/cipher/smallprime.c b/cipher/smallprime.c
deleted file mode 100644
index 941f4ce9a..000000000
--- a/cipher/smallprime.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* smallprime.c - List of small primes
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "util.h"
-#include "types.h"
-
-/* Note: 2 is not included because it can be tested more easily
- * by looking at bit 0. The last entry in this list is marked by a zero
- */
-ushort
-small_prime_numbers[] = {
- 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,
- 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,
- 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
- 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
- 211, 223, 227, 229, 233, 239, 241, 251, 257, 263,
- 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
- 331, 337, 347, 349, 353, 359, 367, 373, 379, 383,
- 389, 397, 401, 409, 419, 421, 431, 433, 439, 443,
- 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
- 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,
- 587, 593, 599, 601, 607, 613, 617, 619, 631, 641,
- 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
- 709, 719, 727, 733, 739, 743, 751, 757, 761, 769,
- 773, 787, 797, 809, 811, 821, 823, 827, 829, 839,
- 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
- 919, 929, 937, 941, 947, 953, 967, 971, 977, 983,
- 991, 997, 1009, 1013, 1019, 1021, 1031, 1033,
- 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091,
- 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151,
- 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213,
- 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277,
- 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307,
- 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399,
- 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
- 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493,
- 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559,
- 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609,
- 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667,
- 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733,
- 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789,
- 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871,
- 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931,
- 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997,
- 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053,
- 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111,
- 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161,
- 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243,
- 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297,
- 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357,
- 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411,
- 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473,
- 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551,
- 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633,
- 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687,
- 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729,
- 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791,
- 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851,
- 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917,
- 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,
- 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061,
- 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137,
- 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209,
- 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271,
- 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331,
- 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391,
- 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467,
- 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533,
- 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583,
- 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643,
- 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709,
- 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779,
- 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851,
- 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917,
- 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989,
- 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049,
- 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111,
- 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177,
- 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243,
- 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297,
- 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391,
- 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457,
- 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519,
- 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597,
- 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657,
- 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729,
- 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799,
- 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889,
- 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951,
- 4957, 4967, 4969, 4973, 4987, 4993, 4999,
- 0
-};
-
-
diff --git a/cipher/tiger.c b/cipher/tiger.c
deleted file mode 100644
index 1bb3375ed..000000000
--- a/cipher/tiger.c
+++ /dev/null
@@ -1,930 +0,0 @@
-/* tiger.c - The TIGER hash function
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "algorithms.h"
-
-#ifdef HAVE_U64_TYPEDEF
-
-/* we really need it here, but as this is only experiment we
- * can live without Tiger */
-
-typedef struct {
- u64 a, b, c;
- byte buf[64];
- int count;
- u32 nblocks;
-} TIGER_CONTEXT;
-
-
-/*********************************
- * Okay, okay, this is not the fastest code - improvements are welcome.
- *
- */
-
-/* Some test vectors:
- * "" 24F0130C63AC9332 16166E76B1BB925F F373DE2D49584E7A
- * "abc" F258C1E88414AB2A 527AB541FFC5B8BF 935F7B951C132951
- * "Tiger" 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDF
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-"
- * 87FB2A9083851CF7 470D2CF810E6DF9E B586445034A5A386
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789"
- * 467DB80863EBCE48 8DF1CD1261655DE9 57896565975F9197
- * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham"
- * 0C410A042968868A 1671DA5A3FD29A72 5EC1E457D3CDB303
- * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proc"
- * "eedings of Fast Software Encryption 3, Cambridge."
- * EBF591D5AFA655CE 7F22894FF87F54AC 89C811B6B0DA3193
- * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proc"
- * "eedings of Fast Software Encryption 3, Cambridge, 1996."
- * 3D9AEB03D1BD1A63 57B2774DFD6D5B24 DD68151D503974FC
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEF"
- * "GHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-"
- * 00B83EB4E53440C5 76AC6AAEE0A74858 25FD15E70A59FFE4
- */
-
-
-static u64 sbox1[256] = {
- 0x02aab17cf7e90c5eLL /* 0 */, 0xac424b03e243a8ecLL /* 1 */,
- 0x72cd5be30dd5fcd3LL /* 2 */, 0x6d019b93f6f97f3aLL /* 3 */,
- 0xcd9978ffd21f9193LL /* 4 */, 0x7573a1c9708029e2LL /* 5 */,
- 0xb164326b922a83c3LL /* 6 */, 0x46883eee04915870LL /* 7 */,
- 0xeaace3057103ece6LL /* 8 */, 0xc54169b808a3535cLL /* 9 */,
- 0x4ce754918ddec47cLL /* 10 */, 0x0aa2f4dfdc0df40cLL /* 11 */,
- 0x10b76f18a74dbefaLL /* 12 */, 0xc6ccb6235ad1ab6aLL /* 13 */,
- 0x13726121572fe2ffLL /* 14 */, 0x1a488c6f199d921eLL /* 15 */,
- 0x4bc9f9f4da0007caLL /* 16 */, 0x26f5e6f6e85241c7LL /* 17 */,
- 0x859079dbea5947b6LL /* 18 */, 0x4f1885c5c99e8c92LL /* 19 */,
- 0xd78e761ea96f864bLL /* 20 */, 0x8e36428c52b5c17dLL /* 21 */,
- 0x69cf6827373063c1LL /* 22 */, 0xb607c93d9bb4c56eLL /* 23 */,
- 0x7d820e760e76b5eaLL /* 24 */, 0x645c9cc6f07fdc42LL /* 25 */,
- 0xbf38a078243342e0LL /* 26 */, 0x5f6b343c9d2e7d04LL /* 27 */,
- 0xf2c28aeb600b0ec6LL /* 28 */, 0x6c0ed85f7254bcacLL /* 29 */,
- 0x71592281a4db4fe5LL /* 30 */, 0x1967fa69ce0fed9fLL /* 31 */,
- 0xfd5293f8b96545dbLL /* 32 */, 0xc879e9d7f2a7600bLL /* 33 */,
- 0x860248920193194eLL /* 34 */, 0xa4f9533b2d9cc0b3LL /* 35 */,
- 0x9053836c15957613LL /* 36 */, 0xdb6dcf8afc357bf1LL /* 37 */,
- 0x18beea7a7a370f57LL /* 38 */, 0x037117ca50b99066LL /* 39 */,
- 0x6ab30a9774424a35LL /* 40 */, 0xf4e92f02e325249bLL /* 41 */,
- 0x7739db07061ccae1LL /* 42 */, 0xd8f3b49ceca42a05LL /* 43 */,
- 0xbd56be3f51382f73LL /* 44 */, 0x45faed5843b0bb28LL /* 45 */,
- 0x1c813d5c11bf1f83LL /* 46 */, 0x8af0e4b6d75fa169LL /* 47 */,
- 0x33ee18a487ad9999LL /* 48 */, 0x3c26e8eab1c94410LL /* 49 */,
- 0xb510102bc0a822f9LL /* 50 */, 0x141eef310ce6123bLL /* 51 */,
- 0xfc65b90059ddb154LL /* 52 */, 0xe0158640c5e0e607LL /* 53 */,
- 0x884e079826c3a3cfLL /* 54 */, 0x930d0d9523c535fdLL /* 55 */,
- 0x35638d754e9a2b00LL /* 56 */, 0x4085fccf40469dd5LL /* 57 */,
- 0xc4b17ad28be23a4cLL /* 58 */, 0xcab2f0fc6a3e6a2eLL /* 59 */,
- 0x2860971a6b943fcdLL /* 60 */, 0x3dde6ee212e30446LL /* 61 */,
- 0x6222f32ae01765aeLL /* 62 */, 0x5d550bb5478308feLL /* 63 */,
- 0xa9efa98da0eda22aLL /* 64 */, 0xc351a71686c40da7LL /* 65 */,
- 0x1105586d9c867c84LL /* 66 */, 0xdcffee85fda22853LL /* 67 */,
- 0xccfbd0262c5eef76LL /* 68 */, 0xbaf294cb8990d201LL /* 69 */,
- 0xe69464f52afad975LL /* 70 */, 0x94b013afdf133e14LL /* 71 */,
- 0x06a7d1a32823c958LL /* 72 */, 0x6f95fe5130f61119LL /* 73 */,
- 0xd92ab34e462c06c0LL /* 74 */, 0xed7bde33887c71d2LL /* 75 */,
- 0x79746d6e6518393eLL /* 76 */, 0x5ba419385d713329LL /* 77 */,
- 0x7c1ba6b948a97564LL /* 78 */, 0x31987c197bfdac67LL /* 79 */,
- 0xde6c23c44b053d02LL /* 80 */, 0x581c49fed002d64dLL /* 81 */,
- 0xdd474d6338261571LL /* 82 */, 0xaa4546c3e473d062LL /* 83 */,
- 0x928fce349455f860LL /* 84 */, 0x48161bbacaab94d9LL /* 85 */,
- 0x63912430770e6f68LL /* 86 */, 0x6ec8a5e602c6641cLL /* 87 */,
- 0x87282515337ddd2bLL /* 88 */, 0x2cda6b42034b701bLL /* 89 */,
- 0xb03d37c181cb096dLL /* 90 */, 0xe108438266c71c6fLL /* 91 */,
- 0x2b3180c7eb51b255LL /* 92 */, 0xdf92b82f96c08bbcLL /* 93 */,
- 0x5c68c8c0a632f3baLL /* 94 */, 0x5504cc861c3d0556LL /* 95 */,
- 0xabbfa4e55fb26b8fLL /* 96 */, 0x41848b0ab3baceb4LL /* 97 */,
- 0xb334a273aa445d32LL /* 98 */, 0xbca696f0a85ad881LL /* 99 */,
- 0x24f6ec65b528d56cLL /* 100 */, 0x0ce1512e90f4524aLL /* 101 */,
- 0x4e9dd79d5506d35aLL /* 102 */, 0x258905fac6ce9779LL /* 103 */,
- 0x2019295b3e109b33LL /* 104 */, 0xf8a9478b73a054ccLL /* 105 */,
- 0x2924f2f934417eb0LL /* 106 */, 0x3993357d536d1bc4LL /* 107 */,
- 0x38a81ac21db6ff8bLL /* 108 */, 0x47c4fbf17d6016bfLL /* 109 */,
- 0x1e0faadd7667e3f5LL /* 110 */, 0x7abcff62938beb96LL /* 111 */,
- 0xa78dad948fc179c9LL /* 112 */, 0x8f1f98b72911e50dLL /* 113 */,
- 0x61e48eae27121a91LL /* 114 */, 0x4d62f7ad31859808LL /* 115 */,
- 0xeceba345ef5ceaebLL /* 116 */, 0xf5ceb25ebc9684ceLL /* 117 */,
- 0xf633e20cb7f76221LL /* 118 */, 0xa32cdf06ab8293e4LL /* 119 */,
- 0x985a202ca5ee2ca4LL /* 120 */, 0xcf0b8447cc8a8fb1LL /* 121 */,
- 0x9f765244979859a3LL /* 122 */, 0xa8d516b1a1240017LL /* 123 */,
- 0x0bd7ba3ebb5dc726LL /* 124 */, 0xe54bca55b86adb39LL /* 125 */,
- 0x1d7a3afd6c478063LL /* 126 */, 0x519ec608e7669eddLL /* 127 */,
- 0x0e5715a2d149aa23LL /* 128 */, 0x177d4571848ff194LL /* 129 */,
- 0xeeb55f3241014c22LL /* 130 */, 0x0f5e5ca13a6e2ec2LL /* 131 */,
- 0x8029927b75f5c361LL /* 132 */, 0xad139fabc3d6e436LL /* 133 */,
- 0x0d5df1a94ccf402fLL /* 134 */, 0x3e8bd948bea5dfc8LL /* 135 */,
- 0xa5a0d357bd3ff77eLL /* 136 */, 0xa2d12e251f74f645LL /* 137 */,
- 0x66fd9e525e81a082LL /* 138 */, 0x2e0c90ce7f687a49LL /* 139 */,
- 0xc2e8bcbeba973bc5LL /* 140 */, 0x000001bce509745fLL /* 141 */,
- 0x423777bbe6dab3d6LL /* 142 */, 0xd1661c7eaef06eb5LL /* 143 */,
- 0xa1781f354daacfd8LL /* 144 */, 0x2d11284a2b16affcLL /* 145 */,
- 0xf1fc4f67fa891d1fLL /* 146 */, 0x73ecc25dcb920adaLL /* 147 */,
- 0xae610c22c2a12651LL /* 148 */, 0x96e0a810d356b78aLL /* 149 */,
- 0x5a9a381f2fe7870fLL /* 150 */, 0xd5ad62ede94e5530LL /* 151 */,
- 0xd225e5e8368d1427LL /* 152 */, 0x65977b70c7af4631LL /* 153 */,
- 0x99f889b2de39d74fLL /* 154 */, 0x233f30bf54e1d143LL /* 155 */,
- 0x9a9675d3d9a63c97LL /* 156 */, 0x5470554ff334f9a8LL /* 157 */,
- 0x166acb744a4f5688LL /* 158 */, 0x70c74caab2e4aeadLL /* 159 */,
- 0xf0d091646f294d12LL /* 160 */, 0x57b82a89684031d1LL /* 161 */,
- 0xefd95a5a61be0b6bLL /* 162 */, 0x2fbd12e969f2f29aLL /* 163 */,
- 0x9bd37013feff9fe8LL /* 164 */, 0x3f9b0404d6085a06LL /* 165 */,
- 0x4940c1f3166cfe15LL /* 166 */, 0x09542c4dcdf3defbLL /* 167 */,
- 0xb4c5218385cd5ce3LL /* 168 */, 0xc935b7dc4462a641LL /* 169 */,
- 0x3417f8a68ed3b63fLL /* 170 */, 0xb80959295b215b40LL /* 171 */,
- 0xf99cdaef3b8c8572LL /* 172 */, 0x018c0614f8fcb95dLL /* 173 */,
- 0x1b14accd1a3acdf3LL /* 174 */, 0x84d471f200bb732dLL /* 175 */,
- 0xc1a3110e95e8da16LL /* 176 */, 0x430a7220bf1a82b8LL /* 177 */,
- 0xb77e090d39df210eLL /* 178 */, 0x5ef4bd9f3cd05e9dLL /* 179 */,
- 0x9d4ff6da7e57a444LL /* 180 */, 0xda1d60e183d4a5f8LL /* 181 */,
- 0xb287c38417998e47LL /* 182 */, 0xfe3edc121bb31886LL /* 183 */,
- 0xc7fe3ccc980ccbefLL /* 184 */, 0xe46fb590189bfd03LL /* 185 */,
- 0x3732fd469a4c57dcLL /* 186 */, 0x7ef700a07cf1ad65LL /* 187 */,
- 0x59c64468a31d8859LL /* 188 */, 0x762fb0b4d45b61f6LL /* 189 */,
- 0x155baed099047718LL /* 190 */, 0x68755e4c3d50baa6LL /* 191 */,
- 0xe9214e7f22d8b4dfLL /* 192 */, 0x2addbf532eac95f4LL /* 193 */,
- 0x32ae3909b4bd0109LL /* 194 */, 0x834df537b08e3450LL /* 195 */,
- 0xfa209da84220728dLL /* 196 */, 0x9e691d9b9efe23f7LL /* 197 */,
- 0x0446d288c4ae8d7fLL /* 198 */, 0x7b4cc524e169785bLL /* 199 */,
- 0x21d87f0135ca1385LL /* 200 */, 0xcebb400f137b8aa5LL /* 201 */,
- 0x272e2b66580796beLL /* 202 */, 0x3612264125c2b0deLL /* 203 */,
- 0x057702bdad1efbb2LL /* 204 */, 0xd4babb8eacf84be9LL /* 205 */,
- 0x91583139641bc67bLL /* 206 */, 0x8bdc2de08036e024LL /* 207 */,
- 0x603c8156f49f68edLL /* 208 */, 0xf7d236f7dbef5111LL /* 209 */,
- 0x9727c4598ad21e80LL /* 210 */, 0xa08a0896670a5fd7LL /* 211 */,
- 0xcb4a8f4309eba9cbLL /* 212 */, 0x81af564b0f7036a1LL /* 213 */,
- 0xc0b99aa778199abdLL /* 214 */, 0x959f1ec83fc8e952LL /* 215 */,
- 0x8c505077794a81b9LL /* 216 */, 0x3acaaf8f056338f0LL /* 217 */,
- 0x07b43f50627a6778LL /* 218 */, 0x4a44ab49f5eccc77LL /* 219 */,
- 0x3bc3d6e4b679ee98LL /* 220 */, 0x9cc0d4d1cf14108cLL /* 221 */,
- 0x4406c00b206bc8a0LL /* 222 */, 0x82a18854c8d72d89LL /* 223 */,
- 0x67e366b35c3c432cLL /* 224 */, 0xb923dd61102b37f2LL /* 225 */,
- 0x56ab2779d884271dLL /* 226 */, 0xbe83e1b0ff1525afLL /* 227 */,
- 0xfb7c65d4217e49a9LL /* 228 */, 0x6bdbe0e76d48e7d4LL /* 229 */,
- 0x08df828745d9179eLL /* 230 */, 0x22ea6a9add53bd34LL /* 231 */,
- 0xe36e141c5622200aLL /* 232 */, 0x7f805d1b8cb750eeLL /* 233 */,
- 0xafe5c7a59f58e837LL /* 234 */, 0xe27f996a4fb1c23cLL /* 235 */,
- 0xd3867dfb0775f0d0LL /* 236 */, 0xd0e673de6e88891aLL /* 237 */,
- 0x123aeb9eafb86c25LL /* 238 */, 0x30f1d5d5c145b895LL /* 239 */,
- 0xbb434a2dee7269e7LL /* 240 */, 0x78cb67ecf931fa38LL /* 241 */,
- 0xf33b0372323bbf9cLL /* 242 */, 0x52d66336fb279c74LL /* 243 */,
- 0x505f33ac0afb4eaaLL /* 244 */, 0xe8a5cd99a2cce187LL /* 245 */,
- 0x534974801e2d30bbLL /* 246 */, 0x8d2d5711d5876d90LL /* 247 */,
- 0x1f1a412891bc038eLL /* 248 */, 0xd6e2e71d82e56648LL /* 249 */,
- 0x74036c3a497732b7LL /* 250 */, 0x89b67ed96361f5abLL /* 251 */,
- 0xffed95d8f1ea02a2LL /* 252 */, 0xe72b3bd61464d43dLL /* 253 */,
- 0xa6300f170bdc4820LL /* 254 */, 0xebc18760ed78a77aLL /* 255 */
-};
-static u64 sbox2[256] = {
- 0xe6a6be5a05a12138LL /* 256 */, 0xb5a122a5b4f87c98LL /* 257 */,
- 0x563c6089140b6990LL /* 258 */, 0x4c46cb2e391f5dd5LL /* 259 */,
- 0xd932addbc9b79434LL /* 260 */, 0x08ea70e42015aff5LL /* 261 */,
- 0xd765a6673e478cf1LL /* 262 */, 0xc4fb757eab278d99LL /* 263 */,
- 0xdf11c6862d6e0692LL /* 264 */, 0xddeb84f10d7f3b16LL /* 265 */,
- 0x6f2ef604a665ea04LL /* 266 */, 0x4a8e0f0ff0e0dfb3LL /* 267 */,
- 0xa5edeef83dbcba51LL /* 268 */, 0xfc4f0a2a0ea4371eLL /* 269 */,
- 0xe83e1da85cb38429LL /* 270 */, 0xdc8ff882ba1b1ce2LL /* 271 */,
- 0xcd45505e8353e80dLL /* 272 */, 0x18d19a00d4db0717LL /* 273 */,
- 0x34a0cfeda5f38101LL /* 274 */, 0x0be77e518887caf2LL /* 275 */,
- 0x1e341438b3c45136LL /* 276 */, 0xe05797f49089ccf9LL /* 277 */,
- 0xffd23f9df2591d14LL /* 278 */, 0x543dda228595c5cdLL /* 279 */,
- 0x661f81fd99052a33LL /* 280 */, 0x8736e641db0f7b76LL /* 281 */,
- 0x15227725418e5307LL /* 282 */, 0xe25f7f46162eb2faLL /* 283 */,
- 0x48a8b2126c13d9feLL /* 284 */, 0xafdc541792e76eeaLL /* 285 */,
- 0x03d912bfc6d1898fLL /* 286 */, 0x31b1aafa1b83f51bLL /* 287 */,
- 0xf1ac2796e42ab7d9LL /* 288 */, 0x40a3a7d7fcd2ebacLL /* 289 */,
- 0x1056136d0afbbcc5LL /* 290 */, 0x7889e1dd9a6d0c85LL /* 291 */,
- 0xd33525782a7974aaLL /* 292 */, 0xa7e25d09078ac09bLL /* 293 */,
- 0xbd4138b3eac6edd0LL /* 294 */, 0x920abfbe71eb9e70LL /* 295 */,
- 0xa2a5d0f54fc2625cLL /* 296 */, 0xc054e36b0b1290a3LL /* 297 */,
- 0xf6dd59ff62fe932bLL /* 298 */, 0x3537354511a8ac7dLL /* 299 */,
- 0xca845e9172fadcd4LL /* 300 */, 0x84f82b60329d20dcLL /* 301 */,
- 0x79c62ce1cd672f18LL /* 302 */, 0x8b09a2add124642cLL /* 303 */,
- 0xd0c1e96a19d9e726LL /* 304 */, 0x5a786a9b4ba9500cLL /* 305 */,
- 0x0e020336634c43f3LL /* 306 */, 0xc17b474aeb66d822LL /* 307 */,
- 0x6a731ae3ec9baac2LL /* 308 */, 0x8226667ae0840258LL /* 309 */,
- 0x67d4567691caeca5LL /* 310 */, 0x1d94155c4875adb5LL /* 311 */,
- 0x6d00fd985b813fdfLL /* 312 */, 0x51286efcb774cd06LL /* 313 */,
- 0x5e8834471fa744afLL /* 314 */, 0xf72ca0aee761ae2eLL /* 315 */,
- 0xbe40e4cdaee8e09aLL /* 316 */, 0xe9970bbb5118f665LL /* 317 */,
- 0x726e4beb33df1964LL /* 318 */, 0x703b000729199762LL /* 319 */,
- 0x4631d816f5ef30a7LL /* 320 */, 0xb880b5b51504a6beLL /* 321 */,
- 0x641793c37ed84b6cLL /* 322 */, 0x7b21ed77f6e97d96LL /* 323 */,
- 0x776306312ef96b73LL /* 324 */, 0xae528948e86ff3f4LL /* 325 */,
- 0x53dbd7f286a3f8f8LL /* 326 */, 0x16cadce74cfc1063LL /* 327 */,
- 0x005c19bdfa52c6ddLL /* 328 */, 0x68868f5d64d46ad3LL /* 329 */,
- 0x3a9d512ccf1e186aLL /* 330 */, 0x367e62c2385660aeLL /* 331 */,
- 0xe359e7ea77dcb1d7LL /* 332 */, 0x526c0773749abe6eLL /* 333 */,
- 0x735ae5f9d09f734bLL /* 334 */, 0x493fc7cc8a558ba8LL /* 335 */,
- 0xb0b9c1533041ab45LL /* 336 */, 0x321958ba470a59bdLL /* 337 */,
- 0x852db00b5f46c393LL /* 338 */, 0x91209b2bd336b0e5LL /* 339 */,
- 0x6e604f7d659ef19fLL /* 340 */, 0xb99a8ae2782ccb24LL /* 341 */,
- 0xccf52ab6c814c4c7LL /* 342 */, 0x4727d9afbe11727bLL /* 343 */,
- 0x7e950d0c0121b34dLL /* 344 */, 0x756f435670ad471fLL /* 345 */,
- 0xf5add442615a6849LL /* 346 */, 0x4e87e09980b9957aLL /* 347 */,
- 0x2acfa1df50aee355LL /* 348 */, 0xd898263afd2fd556LL /* 349 */,
- 0xc8f4924dd80c8fd6LL /* 350 */, 0xcf99ca3d754a173aLL /* 351 */,
- 0xfe477bacaf91bf3cLL /* 352 */, 0xed5371f6d690c12dLL /* 353 */,
- 0x831a5c285e687094LL /* 354 */, 0xc5d3c90a3708a0a4LL /* 355 */,
- 0x0f7f903717d06580LL /* 356 */, 0x19f9bb13b8fdf27fLL /* 357 */,
- 0xb1bd6f1b4d502843LL /* 358 */, 0x1c761ba38fff4012LL /* 359 */,
- 0x0d1530c4e2e21f3bLL /* 360 */, 0x8943ce69a7372c8aLL /* 361 */,
- 0xe5184e11feb5ce66LL /* 362 */, 0x618bdb80bd736621LL /* 363 */,
- 0x7d29bad68b574d0bLL /* 364 */, 0x81bb613e25e6fe5bLL /* 365 */,
- 0x071c9c10bc07913fLL /* 366 */, 0xc7beeb7909ac2d97LL /* 367 */,
- 0xc3e58d353bc5d757LL /* 368 */, 0xeb017892f38f61e8LL /* 369 */,
- 0xd4effb9c9b1cc21aLL /* 370 */, 0x99727d26f494f7abLL /* 371 */,
- 0xa3e063a2956b3e03LL /* 372 */, 0x9d4a8b9a4aa09c30LL /* 373 */,
- 0x3f6ab7d500090fb4LL /* 374 */, 0x9cc0f2a057268ac0LL /* 375 */,
- 0x3dee9d2dedbf42d1LL /* 376 */, 0x330f49c87960a972LL /* 377 */,
- 0xc6b2720287421b41LL /* 378 */, 0x0ac59ec07c00369cLL /* 379 */,
- 0xef4eac49cb353425LL /* 380 */, 0xf450244eef0129d8LL /* 381 */,
- 0x8acc46e5caf4deb6LL /* 382 */, 0x2ffeab63989263f7LL /* 383 */,
- 0x8f7cb9fe5d7a4578LL /* 384 */, 0x5bd8f7644e634635LL /* 385 */,
- 0x427a7315bf2dc900LL /* 386 */, 0x17d0c4aa2125261cLL /* 387 */,
- 0x3992486c93518e50LL /* 388 */, 0xb4cbfee0a2d7d4c3LL /* 389 */,
- 0x7c75d6202c5ddd8dLL /* 390 */, 0xdbc295d8e35b6c61LL /* 391 */,
- 0x60b369d302032b19LL /* 392 */, 0xce42685fdce44132LL /* 393 */,
- 0x06f3ddb9ddf65610LL /* 394 */, 0x8ea4d21db5e148f0LL /* 395 */,
- 0x20b0fce62fcd496fLL /* 396 */, 0x2c1b912358b0ee31LL /* 397 */,
- 0xb28317b818f5a308LL /* 398 */, 0xa89c1e189ca6d2cfLL /* 399 */,
- 0x0c6b18576aaadbc8LL /* 400 */, 0xb65deaa91299fae3LL /* 401 */,
- 0xfb2b794b7f1027e7LL /* 402 */, 0x04e4317f443b5bebLL /* 403 */,
- 0x4b852d325939d0a6LL /* 404 */, 0xd5ae6beefb207ffcLL /* 405 */,
- 0x309682b281c7d374LL /* 406 */, 0xbae309a194c3b475LL /* 407 */,
- 0x8cc3f97b13b49f05LL /* 408 */, 0x98a9422ff8293967LL /* 409 */,
- 0x244b16b01076ff7cLL /* 410 */, 0xf8bf571c663d67eeLL /* 411 */,
- 0x1f0d6758eee30da1LL /* 412 */, 0xc9b611d97adeb9b7LL /* 413 */,
- 0xb7afd5887b6c57a2LL /* 414 */, 0x6290ae846b984fe1LL /* 415 */,
- 0x94df4cdeacc1a5fdLL /* 416 */, 0x058a5bd1c5483affLL /* 417 */,
- 0x63166cc142ba3c37LL /* 418 */, 0x8db8526eb2f76f40LL /* 419 */,
- 0xe10880036f0d6d4eLL /* 420 */, 0x9e0523c9971d311dLL /* 421 */,
- 0x45ec2824cc7cd691LL /* 422 */, 0x575b8359e62382c9LL /* 423 */,
- 0xfa9e400dc4889995LL /* 424 */, 0xd1823ecb45721568LL /* 425 */,
- 0xdafd983b8206082fLL /* 426 */, 0xaa7d29082386a8cbLL /* 427 */,
- 0x269fcd4403b87588LL /* 428 */, 0x1b91f5f728bdd1e0LL /* 429 */,
- 0xe4669f39040201f6LL /* 430 */, 0x7a1d7c218cf04adeLL /* 431 */,
- 0x65623c29d79ce5ceLL /* 432 */, 0x2368449096c00bb1LL /* 433 */,
- 0xab9bf1879da503baLL /* 434 */, 0xbc23ecb1a458058eLL /* 435 */,
- 0x9a58df01bb401eccLL /* 436 */, 0xa070e868a85f143dLL /* 437 */,
- 0x4ff188307df2239eLL /* 438 */, 0x14d565b41a641183LL /* 439 */,
- 0xee13337452701602LL /* 440 */, 0x950e3dcf3f285e09LL /* 441 */,
- 0x59930254b9c80953LL /* 442 */, 0x3bf299408930da6dLL /* 443 */,
- 0xa955943f53691387LL /* 444 */, 0xa15edecaa9cb8784LL /* 445 */,
- 0x29142127352be9a0LL /* 446 */, 0x76f0371fff4e7afbLL /* 447 */,
- 0x0239f450274f2228LL /* 448 */, 0xbb073af01d5e868bLL /* 449 */,
- 0xbfc80571c10e96c1LL /* 450 */, 0xd267088568222e23LL /* 451 */,
- 0x9671a3d48e80b5b0LL /* 452 */, 0x55b5d38ae193bb81LL /* 453 */,
- 0x693ae2d0a18b04b8LL /* 454 */, 0x5c48b4ecadd5335fLL /* 455 */,
- 0xfd743b194916a1caLL /* 456 */, 0x2577018134be98c4LL /* 457 */,
- 0xe77987e83c54a4adLL /* 458 */, 0x28e11014da33e1b9LL /* 459 */,
- 0x270cc59e226aa213LL /* 460 */, 0x71495f756d1a5f60LL /* 461 */,
- 0x9be853fb60afef77LL /* 462 */, 0xadc786a7f7443dbfLL /* 463 */,
- 0x0904456173b29a82LL /* 464 */, 0x58bc7a66c232bd5eLL /* 465 */,
- 0xf306558c673ac8b2LL /* 466 */, 0x41f639c6b6c9772aLL /* 467 */,
- 0x216defe99fda35daLL /* 468 */, 0x11640cc71c7be615LL /* 469 */,
- 0x93c43694565c5527LL /* 470 */, 0xea038e6246777839LL /* 471 */,
- 0xf9abf3ce5a3e2469LL /* 472 */, 0x741e768d0fd312d2LL /* 473 */,
- 0x0144b883ced652c6LL /* 474 */, 0xc20b5a5ba33f8552LL /* 475 */,
- 0x1ae69633c3435a9dLL /* 476 */, 0x97a28ca4088cfdecLL /* 477 */,
- 0x8824a43c1e96f420LL /* 478 */, 0x37612fa66eeea746LL /* 479 */,
- 0x6b4cb165f9cf0e5aLL /* 480 */, 0x43aa1c06a0abfb4aLL /* 481 */,
- 0x7f4dc26ff162796bLL /* 482 */, 0x6cbacc8e54ed9b0fLL /* 483 */,
- 0xa6b7ffefd2bb253eLL /* 484 */, 0x2e25bc95b0a29d4fLL /* 485 */,
- 0x86d6a58bdef1388cLL /* 486 */, 0xded74ac576b6f054LL /* 487 */,
- 0x8030bdbc2b45805dLL /* 488 */, 0x3c81af70e94d9289LL /* 489 */,
- 0x3eff6dda9e3100dbLL /* 490 */, 0xb38dc39fdfcc8847LL /* 491 */,
- 0x123885528d17b87eLL /* 492 */, 0xf2da0ed240b1b642LL /* 493 */,
- 0x44cefadcd54bf9a9LL /* 494 */, 0x1312200e433c7ee6LL /* 495 */,
- 0x9ffcc84f3a78c748LL /* 496 */, 0xf0cd1f72248576bbLL /* 497 */,
- 0xec6974053638cfe4LL /* 498 */, 0x2ba7b67c0cec4e4cLL /* 499 */,
- 0xac2f4df3e5ce32edLL /* 500 */, 0xcb33d14326ea4c11LL /* 501 */,
- 0xa4e9044cc77e58bcLL /* 502 */, 0x5f513293d934fcefLL /* 503 */,
- 0x5dc9645506e55444LL /* 504 */, 0x50de418f317de40aLL /* 505 */,
- 0x388cb31a69dde259LL /* 506 */, 0x2db4a83455820a86LL /* 507 */,
- 0x9010a91e84711ae9LL /* 508 */, 0x4df7f0b7b1498371LL /* 509 */,
- 0xd62a2eabc0977179LL /* 510 */, 0x22fac097aa8d5c0eLL /* 511 */
-};
-static u64 sbox3[256] = {
- 0xf49fcc2ff1daf39bLL /* 512 */, 0x487fd5c66ff29281LL /* 513 */,
- 0xe8a30667fcdca83fLL /* 514 */, 0x2c9b4be3d2fcce63LL /* 515 */,
- 0xda3ff74b93fbbbc2LL /* 516 */, 0x2fa165d2fe70ba66LL /* 517 */,
- 0xa103e279970e93d4LL /* 518 */, 0xbecdec77b0e45e71LL /* 519 */,
- 0xcfb41e723985e497LL /* 520 */, 0xb70aaa025ef75017LL /* 521 */,
- 0xd42309f03840b8e0LL /* 522 */, 0x8efc1ad035898579LL /* 523 */,
- 0x96c6920be2b2abc5LL /* 524 */, 0x66af4163375a9172LL /* 525 */,
- 0x2174abdcca7127fbLL /* 526 */, 0xb33ccea64a72ff41LL /* 527 */,
- 0xf04a4933083066a5LL /* 528 */, 0x8d970acdd7289af5LL /* 529 */,
- 0x8f96e8e031c8c25eLL /* 530 */, 0xf3fec02276875d47LL /* 531 */,
- 0xec7bf310056190ddLL /* 532 */, 0xf5adb0aebb0f1491LL /* 533 */,
- 0x9b50f8850fd58892LL /* 534 */, 0x4975488358b74de8LL /* 535 */,
- 0xa3354ff691531c61LL /* 536 */, 0x0702bbe481d2c6eeLL /* 537 */,
- 0x89fb24057deded98LL /* 538 */, 0xac3075138596e902LL /* 539 */,
- 0x1d2d3580172772edLL /* 540 */, 0xeb738fc28e6bc30dLL /* 541 */,
- 0x5854ef8f63044326LL /* 542 */, 0x9e5c52325add3bbeLL /* 543 */,
- 0x90aa53cf325c4623LL /* 544 */, 0xc1d24d51349dd067LL /* 545 */,
- 0x2051cfeea69ea624LL /* 546 */, 0x13220f0a862e7e4fLL /* 547 */,
- 0xce39399404e04864LL /* 548 */, 0xd9c42ca47086fcb7LL /* 549 */,
- 0x685ad2238a03e7ccLL /* 550 */, 0x066484b2ab2ff1dbLL /* 551 */,
- 0xfe9d5d70efbf79ecLL /* 552 */, 0x5b13b9dd9c481854LL /* 553 */,
- 0x15f0d475ed1509adLL /* 554 */, 0x0bebcd060ec79851LL /* 555 */,
- 0xd58c6791183ab7f8LL /* 556 */, 0xd1187c5052f3eee4LL /* 557 */,
- 0xc95d1192e54e82ffLL /* 558 */, 0x86eea14cb9ac6ca2LL /* 559 */,
- 0x3485beb153677d5dLL /* 560 */, 0xdd191d781f8c492aLL /* 561 */,
- 0xf60866baa784ebf9LL /* 562 */, 0x518f643ba2d08c74LL /* 563 */,
- 0x8852e956e1087c22LL /* 564 */, 0xa768cb8dc410ae8dLL /* 565 */,
- 0x38047726bfec8e1aLL /* 566 */, 0xa67738b4cd3b45aaLL /* 567 */,
- 0xad16691cec0dde19LL /* 568 */, 0xc6d4319380462e07LL /* 569 */,
- 0xc5a5876d0ba61938LL /* 570 */, 0x16b9fa1fa58fd840LL /* 571 */,
- 0x188ab1173ca74f18LL /* 572 */, 0xabda2f98c99c021fLL /* 573 */,
- 0x3e0580ab134ae816LL /* 574 */, 0x5f3b05b773645abbLL /* 575 */,
- 0x2501a2be5575f2f6LL /* 576 */, 0x1b2f74004e7e8ba9LL /* 577 */,
- 0x1cd7580371e8d953LL /* 578 */, 0x7f6ed89562764e30LL /* 579 */,
- 0xb15926ff596f003dLL /* 580 */, 0x9f65293da8c5d6b9LL /* 581 */,
- 0x6ecef04dd690f84cLL /* 582 */, 0x4782275fff33af88LL /* 583 */,
- 0xe41433083f820801LL /* 584 */, 0xfd0dfe409a1af9b5LL /* 585 */,
- 0x4325a3342cdb396bLL /* 586 */, 0x8ae77e62b301b252LL /* 587 */,
- 0xc36f9e9f6655615aLL /* 588 */, 0x85455a2d92d32c09LL /* 589 */,
- 0xf2c7dea949477485LL /* 590 */, 0x63cfb4c133a39ebaLL /* 591 */,
- 0x83b040cc6ebc5462LL /* 592 */, 0x3b9454c8fdb326b0LL /* 593 */,
- 0x56f56a9e87ffd78cLL /* 594 */, 0x2dc2940d99f42bc6LL /* 595 */,
- 0x98f7df096b096e2dLL /* 596 */, 0x19a6e01e3ad852bfLL /* 597 */,
- 0x42a99ccbdbd4b40bLL /* 598 */, 0xa59998af45e9c559LL /* 599 */,
- 0x366295e807d93186LL /* 600 */, 0x6b48181bfaa1f773LL /* 601 */,
- 0x1fec57e2157a0a1dLL /* 602 */, 0x4667446af6201ad5LL /* 603 */,
- 0xe615ebcacfb0f075LL /* 604 */, 0xb8f31f4f68290778LL /* 605 */,
- 0x22713ed6ce22d11eLL /* 606 */, 0x3057c1a72ec3c93bLL /* 607 */,
- 0xcb46acc37c3f1f2fLL /* 608 */, 0xdbb893fd02aaf50eLL /* 609 */,
- 0x331fd92e600b9fcfLL /* 610 */, 0xa498f96148ea3ad6LL /* 611 */,
- 0xa8d8426e8b6a83eaLL /* 612 */, 0xa089b274b7735cdcLL /* 613 */,
- 0x87f6b3731e524a11LL /* 614 */, 0x118808e5cbc96749LL /* 615 */,
- 0x9906e4c7b19bd394LL /* 616 */, 0xafed7f7e9b24a20cLL /* 617 */,
- 0x6509eadeeb3644a7LL /* 618 */, 0x6c1ef1d3e8ef0edeLL /* 619 */,
- 0xb9c97d43e9798fb4LL /* 620 */, 0xa2f2d784740c28a3LL /* 621 */,
- 0x7b8496476197566fLL /* 622 */, 0x7a5be3e6b65f069dLL /* 623 */,
- 0xf96330ed78be6f10LL /* 624 */, 0xeee60de77a076a15LL /* 625 */,
- 0x2b4bee4aa08b9bd0LL /* 626 */, 0x6a56a63ec7b8894eLL /* 627 */,
- 0x02121359ba34fef4LL /* 628 */, 0x4cbf99f8283703fcLL /* 629 */,
- 0x398071350caf30c8LL /* 630 */, 0xd0a77a89f017687aLL /* 631 */,
- 0xf1c1a9eb9e423569LL /* 632 */, 0x8c7976282dee8199LL /* 633 */,
- 0x5d1737a5dd1f7abdLL /* 634 */, 0x4f53433c09a9fa80LL /* 635 */,
- 0xfa8b0c53df7ca1d9LL /* 636 */, 0x3fd9dcbc886ccb77LL /* 637 */,
- 0xc040917ca91b4720LL /* 638 */, 0x7dd00142f9d1dcdfLL /* 639 */,
- 0x8476fc1d4f387b58LL /* 640 */, 0x23f8e7c5f3316503LL /* 641 */,
- 0x032a2244e7e37339LL /* 642 */, 0x5c87a5d750f5a74bLL /* 643 */,
- 0x082b4cc43698992eLL /* 644 */, 0xdf917becb858f63cLL /* 645 */,
- 0x3270b8fc5bf86ddaLL /* 646 */, 0x10ae72bb29b5dd76LL /* 647 */,
- 0x576ac94e7700362bLL /* 648 */, 0x1ad112dac61efb8fLL /* 649 */,
- 0x691bc30ec5faa427LL /* 650 */, 0xff246311cc327143LL /* 651 */,
- 0x3142368e30e53206LL /* 652 */, 0x71380e31e02ca396LL /* 653 */,
- 0x958d5c960aad76f1LL /* 654 */, 0xf8d6f430c16da536LL /* 655 */,
- 0xc8ffd13f1be7e1d2LL /* 656 */, 0x7578ae66004ddbe1LL /* 657 */,
- 0x05833f01067be646LL /* 658 */, 0xbb34b5ad3bfe586dLL /* 659 */,
- 0x095f34c9a12b97f0LL /* 660 */, 0x247ab64525d60ca8LL /* 661 */,
- 0xdcdbc6f3017477d1LL /* 662 */, 0x4a2e14d4decad24dLL /* 663 */,
- 0xbdb5e6d9be0a1eebLL /* 664 */, 0x2a7e70f7794301abLL /* 665 */,
- 0xdef42d8a270540fdLL /* 666 */, 0x01078ec0a34c22c1LL /* 667 */,
- 0xe5de511af4c16387LL /* 668 */, 0x7ebb3a52bd9a330aLL /* 669 */,
- 0x77697857aa7d6435LL /* 670 */, 0x004e831603ae4c32LL /* 671 */,
- 0xe7a21020ad78e312LL /* 672 */, 0x9d41a70c6ab420f2LL /* 673 */,
- 0x28e06c18ea1141e6LL /* 674 */, 0xd2b28cbd984f6b28LL /* 675 */,
- 0x26b75f6c446e9d83LL /* 676 */, 0xba47568c4d418d7fLL /* 677 */,
- 0xd80badbfe6183d8eLL /* 678 */, 0x0e206d7f5f166044LL /* 679 */,
- 0xe258a43911cbca3eLL /* 680 */, 0x723a1746b21dc0bcLL /* 681 */,
- 0xc7caa854f5d7cdd3LL /* 682 */, 0x7cac32883d261d9cLL /* 683 */,
- 0x7690c26423ba942cLL /* 684 */, 0x17e55524478042b8LL /* 685 */,
- 0xe0be477656a2389fLL /* 686 */, 0x4d289b5e67ab2da0LL /* 687 */,
- 0x44862b9c8fbbfd31LL /* 688 */, 0xb47cc8049d141365LL /* 689 */,
- 0x822c1b362b91c793LL /* 690 */, 0x4eb14655fb13dfd8LL /* 691 */,
- 0x1ecbba0714e2a97bLL /* 692 */, 0x6143459d5cde5f14LL /* 693 */,
- 0x53a8fbf1d5f0ac89LL /* 694 */, 0x97ea04d81c5e5b00LL /* 695 */,
- 0x622181a8d4fdb3f3LL /* 696 */, 0xe9bcd341572a1208LL /* 697 */,
- 0x1411258643cce58aLL /* 698 */, 0x9144c5fea4c6e0a4LL /* 699 */,
- 0x0d33d06565cf620fLL /* 700 */, 0x54a48d489f219ca1LL /* 701 */,
- 0xc43e5eac6d63c821LL /* 702 */, 0xa9728b3a72770dafLL /* 703 */,
- 0xd7934e7b20df87efLL /* 704 */, 0xe35503b61a3e86e5LL /* 705 */,
- 0xcae321fbc819d504LL /* 706 */, 0x129a50b3ac60bfa6LL /* 707 */,
- 0xcd5e68ea7e9fb6c3LL /* 708 */, 0xb01c90199483b1c7LL /* 709 */,
- 0x3de93cd5c295376cLL /* 710 */, 0xaed52edf2ab9ad13LL /* 711 */,
- 0x2e60f512c0a07884LL /* 712 */, 0xbc3d86a3e36210c9LL /* 713 */,
- 0x35269d9b163951ceLL /* 714 */, 0x0c7d6e2ad0cdb5faLL /* 715 */,
- 0x59e86297d87f5733LL /* 716 */, 0x298ef221898db0e7LL /* 717 */,
- 0x55000029d1a5aa7eLL /* 718 */, 0x8bc08ae1b5061b45LL /* 719 */,
- 0xc2c31c2b6c92703aLL /* 720 */, 0x94cc596baf25ef42LL /* 721 */,
- 0x0a1d73db22540456LL /* 722 */, 0x04b6a0f9d9c4179aLL /* 723 */,
- 0xeffdafa2ae3d3c60LL /* 724 */, 0xf7c8075bb49496c4LL /* 725 */,
- 0x9cc5c7141d1cd4e3LL /* 726 */, 0x78bd1638218e5534LL /* 727 */,
- 0xb2f11568f850246aLL /* 728 */, 0xedfabcfa9502bc29LL /* 729 */,
- 0x796ce5f2da23051bLL /* 730 */, 0xaae128b0dc93537cLL /* 731 */,
- 0x3a493da0ee4b29aeLL /* 732 */, 0xb5df6b2c416895d7LL /* 733 */,
- 0xfcabbd25122d7f37LL /* 734 */, 0x70810b58105dc4b1LL /* 735 */,
- 0xe10fdd37f7882a90LL /* 736 */, 0x524dcab5518a3f5cLL /* 737 */,
- 0x3c9e85878451255bLL /* 738 */, 0x4029828119bd34e2LL /* 739 */,
- 0x74a05b6f5d3ceccbLL /* 740 */, 0xb610021542e13ecaLL /* 741 */,
- 0x0ff979d12f59e2acLL /* 742 */, 0x6037da27e4f9cc50LL /* 743 */,
- 0x5e92975a0df1847dLL /* 744 */, 0xd66de190d3e623feLL /* 745 */,
- 0x5032d6b87b568048LL /* 746 */, 0x9a36b7ce8235216eLL /* 747 */,
- 0x80272a7a24f64b4aLL /* 748 */, 0x93efed8b8c6916f7LL /* 749 */,
- 0x37ddbff44cce1555LL /* 750 */, 0x4b95db5d4b99bd25LL /* 751 */,
- 0x92d3fda169812fc0LL /* 752 */, 0xfb1a4a9a90660bb6LL /* 753 */,
- 0x730c196946a4b9b2LL /* 754 */, 0x81e289aa7f49da68LL /* 755 */,
- 0x64669a0f83b1a05fLL /* 756 */, 0x27b3ff7d9644f48bLL /* 757 */,
- 0xcc6b615c8db675b3LL /* 758 */, 0x674f20b9bcebbe95LL /* 759 */,
- 0x6f31238275655982LL /* 760 */, 0x5ae488713e45cf05LL /* 761 */,
- 0xbf619f9954c21157LL /* 762 */, 0xeabac46040a8eae9LL /* 763 */,
- 0x454c6fe9f2c0c1cdLL /* 764 */, 0x419cf6496412691cLL /* 765 */,
- 0xd3dc3bef265b0f70LL /* 766 */, 0x6d0e60f5c3578a9eLL /* 767 */
-};
-static u64 sbox4[256] = {
- 0x5b0e608526323c55LL /* 768 */, 0x1a46c1a9fa1b59f5LL /* 769 */,
- 0xa9e245a17c4c8ffaLL /* 770 */, 0x65ca5159db2955d7LL /* 771 */,
- 0x05db0a76ce35afc2LL /* 772 */, 0x81eac77ea9113d45LL /* 773 */,
- 0x528ef88ab6ac0a0dLL /* 774 */, 0xa09ea253597be3ffLL /* 775 */,
- 0x430ddfb3ac48cd56LL /* 776 */, 0xc4b3a67af45ce46fLL /* 777 */,
- 0x4ececfd8fbe2d05eLL /* 778 */, 0x3ef56f10b39935f0LL /* 779 */,
- 0x0b22d6829cd619c6LL /* 780 */, 0x17fd460a74df2069LL /* 781 */,
- 0x6cf8cc8e8510ed40LL /* 782 */, 0xd6c824bf3a6ecaa7LL /* 783 */,
- 0x61243d581a817049LL /* 784 */, 0x048bacb6bbc163a2LL /* 785 */,
- 0xd9a38ac27d44cc32LL /* 786 */, 0x7fddff5baaf410abLL /* 787 */,
- 0xad6d495aa804824bLL /* 788 */, 0xe1a6a74f2d8c9f94LL /* 789 */,
- 0xd4f7851235dee8e3LL /* 790 */, 0xfd4b7f886540d893LL /* 791 */,
- 0x247c20042aa4bfdaLL /* 792 */, 0x096ea1c517d1327cLL /* 793 */,
- 0xd56966b4361a6685LL /* 794 */, 0x277da5c31221057dLL /* 795 */,
- 0x94d59893a43acff7LL /* 796 */, 0x64f0c51ccdc02281LL /* 797 */,
- 0x3d33bcc4ff6189dbLL /* 798 */, 0xe005cb184ce66af1LL /* 799 */,
- 0xff5ccd1d1db99beaLL /* 800 */, 0xb0b854a7fe42980fLL /* 801 */,
- 0x7bd46a6a718d4b9fLL /* 802 */, 0xd10fa8cc22a5fd8cLL /* 803 */,
- 0xd31484952be4bd31LL /* 804 */, 0xc7fa975fcb243847LL /* 805 */,
- 0x4886ed1e5846c407LL /* 806 */, 0x28cddb791eb70b04LL /* 807 */,
- 0xc2b00be2f573417fLL /* 808 */, 0x5c9590452180f877LL /* 809 */,
- 0x7a6bddfff370eb00LL /* 810 */, 0xce509e38d6d9d6a4LL /* 811 */,
- 0xebeb0f00647fa702LL /* 812 */, 0x1dcc06cf76606f06LL /* 813 */,
- 0xe4d9f28ba286ff0aLL /* 814 */, 0xd85a305dc918c262LL /* 815 */,
- 0x475b1d8732225f54LL /* 816 */, 0x2d4fb51668ccb5feLL /* 817 */,
- 0xa679b9d9d72bba20LL /* 818 */, 0x53841c0d912d43a5LL /* 819 */,
- 0x3b7eaa48bf12a4e8LL /* 820 */, 0x781e0e47f22f1ddfLL /* 821 */,
- 0xeff20ce60ab50973LL /* 822 */, 0x20d261d19dffb742LL /* 823 */,
- 0x16a12b03062a2e39LL /* 824 */, 0x1960eb2239650495LL /* 825 */,
- 0x251c16fed50eb8b8LL /* 826 */, 0x9ac0c330f826016eLL /* 827 */,
- 0xed152665953e7671LL /* 828 */, 0x02d63194a6369570LL /* 829 */,
- 0x5074f08394b1c987LL /* 830 */, 0x70ba598c90b25ce1LL /* 831 */,
- 0x794a15810b9742f6LL /* 832 */, 0x0d5925e9fcaf8c6cLL /* 833 */,
- 0x3067716cd868744eLL /* 834 */, 0x910ab077e8d7731bLL /* 835 */,
- 0x6a61bbdb5ac42f61LL /* 836 */, 0x93513efbf0851567LL /* 837 */,
- 0xf494724b9e83e9d5LL /* 838 */, 0xe887e1985c09648dLL /* 839 */,
- 0x34b1d3c675370cfdLL /* 840 */, 0xdc35e433bc0d255dLL /* 841 */,
- 0xd0aab84234131be0LL /* 842 */, 0x08042a50b48b7eafLL /* 843 */,
- 0x9997c4ee44a3ab35LL /* 844 */, 0x829a7b49201799d0LL /* 845 */,
- 0x263b8307b7c54441LL /* 846 */, 0x752f95f4fd6a6ca6LL /* 847 */,
- 0x927217402c08c6e5LL /* 848 */, 0x2a8ab754a795d9eeLL /* 849 */,
- 0xa442f7552f72943dLL /* 850 */, 0x2c31334e19781208LL /* 851 */,
- 0x4fa98d7ceaee6291LL /* 852 */, 0x55c3862f665db309LL /* 853 */,
- 0xbd0610175d53b1f3LL /* 854 */, 0x46fe6cb840413f27LL /* 855 */,
- 0x3fe03792df0cfa59LL /* 856 */, 0xcfe700372eb85e8fLL /* 857 */,
- 0xa7be29e7adbce118LL /* 858 */, 0xe544ee5cde8431ddLL /* 859 */,
- 0x8a781b1b41f1873eLL /* 860 */, 0xa5c94c78a0d2f0e7LL /* 861 */,
- 0x39412e2877b60728LL /* 862 */, 0xa1265ef3afc9a62cLL /* 863 */,
- 0xbcc2770c6a2506c5LL /* 864 */, 0x3ab66dd5dce1ce12LL /* 865 */,
- 0xe65499d04a675b37LL /* 866 */, 0x7d8f523481bfd216LL /* 867 */,
- 0x0f6f64fcec15f389LL /* 868 */, 0x74efbe618b5b13c8LL /* 869 */,
- 0xacdc82b714273e1dLL /* 870 */, 0xdd40bfe003199d17LL /* 871 */,
- 0x37e99257e7e061f8LL /* 872 */, 0xfa52626904775aaaLL /* 873 */,
- 0x8bbbf63a463d56f9LL /* 874 */, 0xf0013f1543a26e64LL /* 875 */,
- 0xa8307e9f879ec898LL /* 876 */, 0xcc4c27a4150177ccLL /* 877 */,
- 0x1b432f2cca1d3348LL /* 878 */, 0xde1d1f8f9f6fa013LL /* 879 */,
- 0x606602a047a7ddd6LL /* 880 */, 0xd237ab64cc1cb2c7LL /* 881 */,
- 0x9b938e7225fcd1d3LL /* 882 */, 0xec4e03708e0ff476LL /* 883 */,
- 0xfeb2fbda3d03c12dLL /* 884 */, 0xae0bced2ee43889aLL /* 885 */,
- 0x22cb8923ebfb4f43LL /* 886 */, 0x69360d013cf7396dLL /* 887 */,
- 0x855e3602d2d4e022LL /* 888 */, 0x073805bad01f784cLL /* 889 */,
- 0x33e17a133852f546LL /* 890 */, 0xdf4874058ac7b638LL /* 891 */,
- 0xba92b29c678aa14aLL /* 892 */, 0x0ce89fc76cfaadcdLL /* 893 */,
- 0x5f9d4e0908339e34LL /* 894 */, 0xf1afe9291f5923b9LL /* 895 */,
- 0x6e3480f60f4a265fLL /* 896 */, 0xeebf3a2ab29b841cLL /* 897 */,
- 0xe21938a88f91b4adLL /* 898 */, 0x57dfeff845c6d3c3LL /* 899 */,
- 0x2f006b0bf62caaf2LL /* 900 */, 0x62f479ef6f75ee78LL /* 901 */,
- 0x11a55ad41c8916a9LL /* 902 */, 0xf229d29084fed453LL /* 903 */,
- 0x42f1c27b16b000e6LL /* 904 */, 0x2b1f76749823c074LL /* 905 */,
- 0x4b76eca3c2745360LL /* 906 */, 0x8c98f463b91691bdLL /* 907 */,
- 0x14bcc93cf1ade66aLL /* 908 */, 0x8885213e6d458397LL /* 909 */,
- 0x8e177df0274d4711LL /* 910 */, 0xb49b73b5503f2951LL /* 911 */,
- 0x10168168c3f96b6bLL /* 912 */, 0x0e3d963b63cab0aeLL /* 913 */,
- 0x8dfc4b5655a1db14LL /* 914 */, 0xf789f1356e14de5cLL /* 915 */,
- 0x683e68af4e51dac1LL /* 916 */, 0xc9a84f9d8d4b0fd9LL /* 917 */,
- 0x3691e03f52a0f9d1LL /* 918 */, 0x5ed86e46e1878e80LL /* 919 */,
- 0x3c711a0e99d07150LL /* 920 */, 0x5a0865b20c4e9310LL /* 921 */,
- 0x56fbfc1fe4f0682eLL /* 922 */, 0xea8d5de3105edf9bLL /* 923 */,
- 0x71abfdb12379187aLL /* 924 */, 0x2eb99de1bee77b9cLL /* 925 */,
- 0x21ecc0ea33cf4523LL /* 926 */, 0x59a4d7521805c7a1LL /* 927 */,
- 0x3896f5eb56ae7c72LL /* 928 */, 0xaa638f3db18f75dcLL /* 929 */,
- 0x9f39358dabe9808eLL /* 930 */, 0xb7defa91c00b72acLL /* 931 */,
- 0x6b5541fd62492d92LL /* 932 */, 0x6dc6dee8f92e4d5bLL /* 933 */,
- 0x353f57abc4beea7eLL /* 934 */, 0x735769d6da5690ceLL /* 935 */,
- 0x0a234aa642391484LL /* 936 */, 0xf6f9508028f80d9dLL /* 937 */,
- 0xb8e319a27ab3f215LL /* 938 */, 0x31ad9c1151341a4dLL /* 939 */,
- 0x773c22a57bef5805LL /* 940 */, 0x45c7561a07968633LL /* 941 */,
- 0xf913da9e249dbe36LL /* 942 */, 0xda652d9b78a64c68LL /* 943 */,
- 0x4c27a97f3bc334efLL /* 944 */, 0x76621220e66b17f4LL /* 945 */,
- 0x967743899acd7d0bLL /* 946 */, 0xf3ee5bcae0ed6782LL /* 947 */,
- 0x409f753600c879fcLL /* 948 */, 0x06d09a39b5926db6LL /* 949 */,
- 0x6f83aeb0317ac588LL /* 950 */, 0x01e6ca4a86381f21LL /* 951 */,
- 0x66ff3462d19f3025LL /* 952 */, 0x72207c24ddfd3bfbLL /* 953 */,
- 0x4af6b6d3e2ece2ebLL /* 954 */, 0x9c994dbec7ea08deLL /* 955 */,
- 0x49ace597b09a8bc4LL /* 956 */, 0xb38c4766cf0797baLL /* 957 */,
- 0x131b9373c57c2a75LL /* 958 */, 0xb1822cce61931e58LL /* 959 */,
- 0x9d7555b909ba1c0cLL /* 960 */, 0x127fafdd937d11d2LL /* 961 */,
- 0x29da3badc66d92e4LL /* 962 */, 0xa2c1d57154c2ecbcLL /* 963 */,
- 0x58c5134d82f6fe24LL /* 964 */, 0x1c3ae3515b62274fLL /* 965 */,
- 0xe907c82e01cb8126LL /* 966 */, 0xf8ed091913e37fcbLL /* 967 */,
- 0x3249d8f9c80046c9LL /* 968 */, 0x80cf9bede388fb63LL /* 969 */,
- 0x1881539a116cf19eLL /* 970 */, 0x5103f3f76bd52457LL /* 971 */,
- 0x15b7e6f5ae47f7a8LL /* 972 */, 0xdbd7c6ded47e9ccfLL /* 973 */,
- 0x44e55c410228bb1aLL /* 974 */, 0xb647d4255edb4e99LL /* 975 */,
- 0x5d11882bb8aafc30LL /* 976 */, 0xf5098bbb29d3212aLL /* 977 */,
- 0x8fb5ea14e90296b3LL /* 978 */, 0x677b942157dd025aLL /* 979 */,
- 0xfb58e7c0a390acb5LL /* 980 */, 0x89d3674c83bd4a01LL /* 981 */,
- 0x9e2da4df4bf3b93bLL /* 982 */, 0xfcc41e328cab4829LL /* 983 */,
- 0x03f38c96ba582c52LL /* 984 */, 0xcad1bdbd7fd85db2LL /* 985 */,
- 0xbbb442c16082ae83LL /* 986 */, 0xb95fe86ba5da9ab0LL /* 987 */,
- 0xb22e04673771a93fLL /* 988 */, 0x845358c9493152d8LL /* 989 */,
- 0xbe2a488697b4541eLL /* 990 */, 0x95a2dc2dd38e6966LL /* 991 */,
- 0xc02c11ac923c852bLL /* 992 */, 0x2388b1990df2a87bLL /* 993 */,
- 0x7c8008fa1b4f37beLL /* 994 */, 0x1f70d0c84d54e503LL /* 995 */,
- 0x5490adec7ece57d4LL /* 996 */, 0x002b3c27d9063a3aLL /* 997 */,
- 0x7eaea3848030a2bfLL /* 998 */, 0xc602326ded2003c0LL /* 999 */,
- 0x83a7287d69a94086LL /* 1000 */, 0xc57a5fcb30f57a8aLL /* 1001 */,
- 0xb56844e479ebe779LL /* 1002 */, 0xa373b40f05dcbce9LL /* 1003 */,
- 0xd71a786e88570ee2LL /* 1004 */, 0x879cbacdbde8f6a0LL /* 1005 */,
- 0x976ad1bcc164a32fLL /* 1006 */, 0xab21e25e9666d78bLL /* 1007 */,
- 0x901063aae5e5c33cLL /* 1008 */, 0x9818b34448698d90LL /* 1009 */,
- 0xe36487ae3e1e8abbLL /* 1010 */, 0xafbdf931893bdcb4LL /* 1011 */,
- 0x6345a0dc5fbbd519LL /* 1012 */, 0x8628fe269b9465caLL /* 1013 */,
- 0x1e5d01603f9c51ecLL /* 1014 */, 0x4de44006a15049b7LL /* 1015 */,
- 0xbf6c70e5f776cbb1LL /* 1016 */, 0x411218f2ef552bedLL /* 1017 */,
- 0xcb0c0708705a36a3LL /* 1018 */, 0xe74d14754f986044LL /* 1019 */,
- 0xcd56d9430ea8280eLL /* 1020 */, 0xc12591d7535f5065LL /* 1021 */,
- 0xc83223f1720aef96LL /* 1022 */, 0xc3a0396f7363a51fLL /* 1023 */
-};
-
-
-static void
-print_abc( const char *text, u64 a, u64 b, u64 c )
-{
-/*printf("%s: %08X%08X %08X%08X %08X%08X\n",
- text,
- (u32)(a>>32),
- (u32)(a),
- (u32)(b>>32),
- (u32)(b),
- (u32)(c>>32),
- (u32)(c) );*/
-}
-
-static void
-print_data( const char *text, u64 a, u64 b, u64 c,
- u64 d, u64 e, u64 f,
- u64 g, u64 h )
-{
-/*printf("%s: %08X%08X %08X%08X %08X%08X %08X%08X\n"
- "%s %08X%08X %08X%08X %08X%08X %08X%08X\n",
- text,
- (u32)(a>>32),
- (u32)(a),
- (u32)(b>>32),
- (u32)(b),
- (u32)(c>>32),
- (u32)(c),
- (u32)(d>>32),
- (u32)(d),
- text,
- (u32)(e>>32),
- (u32)(e),
- (u32)(f>>32),
- (u32)(f),
- (u32)(g>>32),
- (u32)(g),
- (u32)(h>>32),
- (u32)(h) );*/
-}
-
-
-static void
-burn_stack (int bytes)
-{
- char buf[256];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-
-static void
-tiger_init( TIGER_CONTEXT *hd )
-{
- hd->a = 0x0123456789abcdefLL;
- hd->b = 0xfedcba9876543210LL;
- hd->c = 0xf096a5b4c3b2e187LL;
- hd->nblocks = 0;
- hd->count = 0;
-}
-
-static void
-round( u64 *ra, u64 *rb, u64 *rc, u64 x, int mul )
-{
- u64 a = *ra;
- u64 b = *rb;
- u64 c = *rc;
-
- c ^= x;
- a -= sbox1[ c & 0xff ] ^ sbox2[ (c >> 16) & 0xff ]
- ^ sbox3[ (c >> 32) & 0xff ] ^ sbox4[ (c >> 48) & 0xff ];
- b += sbox4[ (c >> 8) & 0xff ] ^ sbox3[ (c >> 24) & 0xff ]
- ^ sbox2[ (c >> 40) & 0xff ] ^ sbox1[ (c >> 56) & 0xff ];
- b *= mul;
-
- *ra = a;
- *rb = b;
- *rc = c;
-}
-
-
-static void
-pass( u64 *ra, u64 *rb, u64 *rc, u64 *x, int mul )
-{
- u64 a = *ra;
- u64 b = *rb;
- u64 c = *rc;
-
- round( &a, &b, &c, x[0], mul );
- round( &b, &c, &a, x[1], mul );
- round( &c, &a, &b, x[2], mul );
- round( &a, &b, &c, x[3], mul );
- round( &b, &c, &a, x[4], mul );
- round( &c, &a, &b, x[5], mul );
- round( &a, &b, &c, x[6], mul );
- round( &b, &c, &a, x[7], mul );
-
- *ra = a;
- *rb = b;
- *rc = c;
-}
-
-
-static void
-key_schedule( u64 *x )
-{
- x[0] -= x[7] ^ 0xa5a5a5a5a5a5a5a5LL;
- x[1] ^= x[0];
- x[2] += x[1];
- x[3] -= x[2] ^ ((~x[1]) << 19 );
- x[4] ^= x[3];
- x[5] += x[4];
- x[6] -= x[5] ^ ((~x[4]) >> 23 );
- x[7] ^= x[6];
- x[0] += x[7];
- x[1] -= x[0] ^ ((~x[7]) << 19 );
- x[2] ^= x[1];
- x[3] += x[2];
- x[4] -= x[3] ^ ((~x[2]) >> 23 );
- x[5] ^= x[4];
- x[6] += x[5];
- x[7] -= x[6] ^ 0x0123456789abcdefLL;
-}
-
-
-/****************
- * Transform the message DATA which consists of 512 bytes (8 words)
- */
-static void
-transform( TIGER_CONTEXT *hd, byte *data )
-{
- u64 a,b,c,aa,bb,cc;
- u64 x[8];
- #ifdef BIG_ENDIAN_HOST
- #define MKWORD(d,n) \
- ( ((u64)(d)[8*(n)+7]) << 56 | ((u64)(d)[8*(n)+6]) << 48 \
- | ((u64)(d)[8*(n)+5]) << 40 | ((u64)(d)[8*(n)+4]) << 32 \
- | ((u64)(d)[8*(n)+3]) << 24 | ((u64)(d)[8*(n)+2]) << 16 \
- | ((u64)(d)[8*(n)+1]) << 8 | ((u64)(d)[8*(n) ]) )
- x[0] = MKWORD(data, 0);
- x[1] = MKWORD(data, 1);
- x[2] = MKWORD(data, 2);
- x[3] = MKWORD(data, 3);
- x[4] = MKWORD(data, 4);
- x[5] = MKWORD(data, 5);
- x[6] = MKWORD(data, 6);
- x[7] = MKWORD(data, 7);
- #undef MKWORD
- #else
- memcpy( &x[0], data, 64 );
- #endif
-
- /* save */
- a = aa = hd->a;
- b = bb = hd->b;
- c = cc = hd->c;
-
- print_data(" key0", x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7] );
- print_abc(" init", a, b, c );
- pass( &a, &b, &c, x, 5);
- print_abc("pass1", a, b, c );
- key_schedule( x );
- pass( &c, &a, &b, x, 7);
- print_abc("pass2", a, b, c );
- key_schedule( x );
- pass( &b, &c, &a, x, 9);
- print_abc("pass3", a, b, c );
-
-
- /* feedforward */
- a ^= aa;
- b -= bb;
- c += cc;
- /* store */
- hd->a = a;
- hd->b = b;
- hd->c = c;
-}
-
-
-
-/* Update the message digest with the contents
- * of INBUF with length INLEN.
- */
-static void
-tiger_write( TIGER_CONTEXT *hd, byte *inbuf, size_t inlen)
-{
- if( hd->count == 64 ) { /* flush the buffer */
- transform( hd, hd->buf );
- burn_stack (21*8+11*sizeof(void*));
- hd->count = 0;
- hd->nblocks++;
- }
- if( !inbuf )
- return;
- if( hd->count ) {
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
- tiger_write( hd, NULL, 0 );
- if( !inlen )
- return;
- }
-
- while( inlen >= 64 ) {
- transform( hd, inbuf );
- hd->count = 0;
- hd->nblocks++;
- inlen -= 64;
- inbuf += 64;
- }
- burn_stack (21*8+11*sizeof(void*));
- for( ; inlen && hd->count < 64; inlen-- )
- hd->buf[hd->count++] = *inbuf++;
-}
-
-
-
-/* The routine terminates the computation
- */
-
-static void
-tiger_final( TIGER_CONTEXT *hd )
-{
- u32 t, msb, lsb;
- byte *p;
-
- tiger_write(hd, NULL, 0); /* flush */;
-
- t = hd->nblocks;
- /* multiply by 64 to make a byte count */
- lsb = t << 6;
- msb = t >> 26;
- /* add the count */
- t = lsb;
- if( (lsb += hd->count) < t )
- msb++;
- /* multiply by 8 to make a bit count */
- t = lsb;
- lsb <<= 3;
- msb <<= 3;
- msb |= t >> 29;
-
- if( hd->count < 56 ) { /* enough room */
- hd->buf[hd->count++] = 0x01; /* pad */
- while( hd->count < 56 )
- hd->buf[hd->count++] = 0; /* pad */
- }
- else { /* need one extra block */
- hd->buf[hd->count++] = 0x01; /* pad character */
- while( hd->count < 64 )
- hd->buf[hd->count++] = 0;
- tiger_write(hd, NULL, 0); /* flush */;
- memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
- }
- /* append the 64 bit count */
- hd->buf[56] = lsb ;
- hd->buf[57] = lsb >> 8;
- hd->buf[58] = lsb >> 16;
- hd->buf[59] = lsb >> 24;
- hd->buf[60] = msb ;
- hd->buf[61] = msb >> 8;
- hd->buf[62] = msb >> 16;
- hd->buf[63] = msb >> 24;
- transform( hd, hd->buf );
- burn_stack (21*8+11*sizeof(void*));
-
- p = hd->buf;
- #ifdef BIG_ENDIAN_HOST
- #define X(a) do { *(u64*)p = hd-> a ; p += 8; } while(0)
- #else /* little endian */
- #define X(a) do { *p++ = hd-> a >> 56; *p++ = hd-> a >> 48; \
- *p++ = hd-> a >> 40; *p++ = hd-> a >> 32; \
- *p++ = hd-> a >> 24; *p++ = hd-> a >> 16; \
- *p++ = hd-> a >> 8; *p++ = hd-> a; } while(0)
- #endif
- X(a);
- X(b);
- X(c);
- #undef X
-}
-
-static byte *
-tiger_read( TIGER_CONTEXT *hd )
-{
- return hd->buf;
-}
-
-#endif /*HAVE_U64_TYPEDEF*/
-
-/****************
- * Return some information about the algorithm. We need algo here to
- * distinguish different flavors of the algorithm.
- * Returns: A pointer to string describing the algorithm or NULL if
- * the ALGO is invalid.
- */
-const char *
-tiger_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asnlen, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- )
-{
-#ifdef HAVE_U64_TYPEDEF
-
-#ifdef USE_OLD_TIGER
- /* This is the old fake OID */
- static byte asn[18] =
- { 0x30, 0x28, 0x30, 0x0c, 0x04, 0x08, 0x54, 0x49, 0x47,
- 0x45, 0x52, 0x31, 0x39, 0x32, 0x05, 0x00, 0x04, 0x18 };
-#else /* !USE_OLD_TIGER */
- /* This is the new correct OID */
- static byte asn[19] = /* Object ID is 1.3.6.1.4.1.11591.12.2 */
- { 0x30, 0x29, 0x30, 0x0d, 0x06, 0x09, 0x2b, 0x06,
- 0x01, 0x04, 0x01, 0xda, 0x47, 0x0c, 0x02,
- 0x05, 0x00, 0x04, 0x18 };
-#endif
-
- if( algo != 6 )
- return NULL;
-
- *contextsize = sizeof(TIGER_CONTEXT);
- *r_asnoid = asn;
- *r_asnlen = DIM(asn);
- *r_mdlen = 24;
- *(void (**)(TIGER_CONTEXT *))r_init = tiger_init;
- *(void (**)(TIGER_CONTEXT *, byte*, size_t))r_write = tiger_write;
- *(void (**)(TIGER_CONTEXT *))r_final = tiger_final;
- *(byte *(**)(TIGER_CONTEXT *))r_read = tiger_read;
-
- return "TIGER192";
-#else /*!HAVE_U64_TYPEDEF*/
- return NULL; /* Alorithm not available. */
-#endif
-}
diff --git a/cipher/twofish.c b/cipher/twofish.c
deleted file mode 100644
index 5ed44872c..000000000
--- a/cipher/twofish.c
+++ /dev/null
@@ -1,1135 +0,0 @@
-/* Twofish for GPG
- * By Matthew Skala <mskala@ansuz.sooke.bc.ca>, July 26, 1998
- * 256-bit key length added March 20, 1999
- * Some modifications to reduce the text size by Werner Koch, April, 1998
- *
- * The original author has disclaimed all copyright interest in this
- * code and thus putting it in the public domain.
- *
- * This code is a "clean room" implementation, written from the paper
- * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey,
- * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available
- * through http://www.counterpane.com/twofish.html
- *
- * For background information on multiplication in finite fields, used for
- * the matrix operations in the key schedule, see the book _Contemporary
- * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the
- * Third Edition.
- *
- * Only the 128- and 256-bit key sizes are supported. This code is intended
- * for GNU C on a 32-bit system, but it should work almost anywhere. Loops
- * are unrolled, precomputation tables are used, etc., for maximum speed at
- * some cost in memory consumption. */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h> /* for memcmp() */
-
-#include "types.h" /* for byte and u32 typedefs */
-#include "util.h"
-#include "errors.h"
-#include "algorithms.h"
-
-/* Prototype for the self-test function. */
-static const char *selftest(void);
-
-/* Structure for an expanded Twofish key. s contains the key-dependent
- * S-boxes composed with the MDS matrix; w contains the eight "whitening"
- * subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note
- * that k[i] corresponds to what the Twofish paper calls K[i+8]. */
-typedef struct {
- u32 s[4][256], w[8], k[32];
-} TWOFISH_context;
-
-/* These two tables are the q0 and q1 permutations, exactly as described in
- * the Twofish paper. */
-
-static const byte q0[256] = {
- 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78,
- 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
- 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30,
- 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
- 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE,
- 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
- 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45,
- 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
- 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF,
- 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
- 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED,
- 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
- 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B,
- 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
- 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F,
- 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
- 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17,
- 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
- 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68,
- 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
- 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42,
- 0x4A, 0x5E, 0xC1, 0xE0
-};
-
-static const byte q1[256] = {
- 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B,
- 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
- 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B,
- 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
- 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54,
- 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
- 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7,
- 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
- 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF,
- 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
- 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D,
- 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
- 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21,
- 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
- 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E,
- 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
- 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44,
- 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
- 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B,
- 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
- 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56,
- 0x55, 0x09, 0xBE, 0x91
-};
-
-/* These MDS tables are actually tables of MDS composed with q0 and q1,
- * because it is only ever used that way and we can save some time by
- * precomputing. Of course the main saving comes from precomputing the
- * GF(2^8) multiplication involved in the MDS matrix multiply; by looking
- * things up in these tables we reduce the matrix multiply to four lookups
- * and three XORs. Semi-formally, the definition of these tables is:
- * mds[0][i] = MDS (q1[i] 0 0 0)^T mds[1][i] = MDS (0 q0[i] 0 0)^T
- * mds[2][i] = MDS (0 0 q1[i] 0)^T mds[3][i] = MDS (0 0 0 q0[i])^T
- * where ^T means "transpose", the matrix multiply is performed in GF(2^8)
- * represented as GF(2)[x]/v(x) where v(x)=x^8+x^6+x^5+x^3+1 as described
- * by Schneier et al, and I'm casually glossing over the byte/word
- * conversion issues. */
-
-static const u32 mds[4][256] = {
- {0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B,
- 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B,
- 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32,
- 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,
- 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA,
- 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B,
- 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1,
- 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,
- 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490,
- 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154,
- 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0,
- 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,
- 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228,
- 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7,
- 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3,
- 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,
- 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477,
- 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF,
- 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C,
- 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,
- 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA,
- 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D,
- 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72,
- 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,
- 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76,
- 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321,
- 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39,
- 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,
- 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D,
- 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E,
- 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5,
- 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,
- 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7,
- 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544,
- 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E,
- 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,
- 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A,
- 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B,
- 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2,
- 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,
- 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504,
- 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756,
- 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91},
-
- {0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252,
- 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A,
- 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020,
- 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,
- 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444,
- 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424,
- 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A,
- 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,
- 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383,
- 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A,
- 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9,
- 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,
- 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1,
- 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898,
- 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414,
- 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,
- 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1,
- 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989,
- 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5,
- 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,
- 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E,
- 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E,
- 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202,
- 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,
- 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565,
- 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A,
- 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808,
- 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,
- 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A,
- 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969,
- 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505,
- 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,
- 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D,
- 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343,
- 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF,
- 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,
- 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F,
- 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646,
- 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6,
- 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,
- 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A,
- 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7,
- 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8},
-
- {0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B,
- 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F,
- 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A,
- 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,
- 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70,
- 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3,
- 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB,
- 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,
- 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4,
- 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41,
- 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C,
- 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,
- 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622,
- 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18,
- 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035,
- 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,
- 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84,
- 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E,
- 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F,
- 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,
- 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558,
- 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40,
- 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA,
- 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,
- 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF,
- 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773,
- 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D,
- 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,
- 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C,
- 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19,
- 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086,
- 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,
- 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74,
- 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755,
- 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691,
- 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,
- 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4,
- 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53,
- 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E,
- 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,
- 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705,
- 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7,
- 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF},
-
- {0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98,
- 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866,
- 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643,
- 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,
- 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9,
- 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C,
- 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3,
- 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,
- 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F,
- 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25,
- 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF,
- 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,
- 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4,
- 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E,
- 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA,
- 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,
- 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12,
- 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A,
- 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D,
- 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,
- 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A,
- 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C,
- 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B,
- 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,
- 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B,
- 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3,
- 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE,
- 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,
- 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85,
- 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA,
- 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E,
- 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,
- 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33,
- 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC,
- 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718,
- 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,
- 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8,
- 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872,
- 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882,
- 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,
- 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10,
- 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6,
- 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8}
-};
-
-/* The exp_to_poly and poly_to_exp tables are used to perform efficient
- * operations in GF(2^8) represented as GF(2)[x]/w(x) where
- * w(x)=x^8+x^6+x^3+x^2+1. We care about doing that because it's part of the
- * definition of the RS matrix in the key schedule. Elements of that field
- * are polynomials of degree not greater than 7 and all coefficients 0 or 1,
- * which can be represented naturally by bytes (just substitute x=2). In that
- * form, GF(2^8) addition is the same as bitwise XOR, but GF(2^8)
- * multiplication is inefficient without hardware support. To multiply
- * faster, I make use of the fact x is a generator for the nonzero elements,
- * so that every element p of GF(2)[x]/w(x) is either 0 or equal to (x)^n for
- * some n in 0..254. Note that that caret is exponentiation in GF(2^8),
- * *not* polynomial notation. So if I want to compute pq where p and q are
- * in GF(2^8), I can just say:
- * 1. if p=0 or q=0 then pq=0
- * 2. otherwise, find m and n such that p=x^m and q=x^n
- * 3. pq=(x^m)(x^n)=x^(m+n), so add m and n and find pq
- * The translations in steps 2 and 3 are looked up in the tables
- * poly_to_exp (for step 2) and exp_to_poly (for step 3). To see this
- * in action, look at the CALC_S macro. As additional wrinkles, note that
- * one of my operands is always a constant, so the poly_to_exp lookup on it
- * is done in advance; I included the original values in the comments so
- * readers can have some chance of recognizing that this *is* the RS matrix
- * from the Twofish paper. I've only included the table entries I actually
- * need; I never do a lookup on a variable input of zero and the biggest
- * exponents I'll ever see are 254 (variable) and 237 (constant), so they'll
- * never sum to more than 491. I'm repeating part of the exp_to_poly table
- * so that I don't have to do mod-255 reduction in the exponent arithmetic.
- * Since I know my constant operands are never zero, I only have to worry
- * about zero values in the variable operand, and I do it with a simple
- * conditional branch. I know conditionals are expensive, but I couldn't
- * see a non-horrible way of avoiding them, and I did manage to group the
- * statements so that each if covers four group multiplications. */
-
-static const byte poly_to_exp[255] = {
- 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19,
- 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A,
- 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C,
- 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B,
- 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47,
- 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D,
- 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8,
- 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C,
- 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83,
- 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48,
- 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26,
- 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E,
- 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3,
- 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9,
- 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A,
- 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D,
- 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75,
- 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84,
- 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64,
- 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49,
- 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF,
- 0x85, 0xC8, 0xA1
-};
-
-static const byte exp_to_poly[492] = {
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2,
- 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03,
- 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6,
- 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A,
- 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63,
- 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C,
- 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07,
- 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88,
- 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12,
- 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7,
- 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C,
- 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8,
- 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25,
- 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A,
- 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE,
- 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC,
- 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E,
- 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92,
- 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89,
- 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB,
- 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1,
- 0x8F, 0x53, 0xA6, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D,
- 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC,
- 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3,
- 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52,
- 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0,
- 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1,
- 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A,
- 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11,
- 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51,
- 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66,
- 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB,
- 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19,
- 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D,
- 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56,
- 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE,
- 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9,
- 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE,
- 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41,
- 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E,
- 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB
-};
-
-
-/* The table constants are indices of
- * S-box entries, preprocessed through q0 and q1. */
-static byte calc_sb_tbl[512] = {
- 0xA9, 0x75, 0x67, 0xF3, 0xB3, 0xC6, 0xE8, 0xF4,
- 0x04, 0xDB, 0xFD, 0x7B, 0xA3, 0xFB, 0x76, 0xC8,
- 0x9A, 0x4A, 0x92, 0xD3, 0x80, 0xE6, 0x78, 0x6B,
- 0xE4, 0x45, 0xDD, 0x7D, 0xD1, 0xE8, 0x38, 0x4B,
- 0x0D, 0xD6, 0xC6, 0x32, 0x35, 0xD8, 0x98, 0xFD,
- 0x18, 0x37, 0xF7, 0x71, 0xEC, 0xF1, 0x6C, 0xE1,
- 0x43, 0x30, 0x75, 0x0F, 0x37, 0xF8, 0x26, 0x1B,
- 0xFA, 0x87, 0x13, 0xFA, 0x94, 0x06, 0x48, 0x3F,
- 0xF2, 0x5E, 0xD0, 0xBA, 0x8B, 0xAE, 0x30, 0x5B,
- 0x84, 0x8A, 0x54, 0x00, 0xDF, 0xBC, 0x23, 0x9D,
- 0x19, 0x6D, 0x5B, 0xC1, 0x3D, 0xB1, 0x59, 0x0E,
- 0xF3, 0x80, 0xAE, 0x5D, 0xA2, 0xD2, 0x82, 0xD5,
- 0x63, 0xA0, 0x01, 0x84, 0x83, 0x07, 0x2E, 0x14,
- 0xD9, 0xB5, 0x51, 0x90, 0x9B, 0x2C, 0x7C, 0xA3,
- 0xA6, 0xB2, 0xEB, 0x73, 0xA5, 0x4C, 0xBE, 0x54,
- 0x16, 0x92, 0x0C, 0x74, 0xE3, 0x36, 0x61, 0x51,
- 0xC0, 0x38, 0x8C, 0xB0, 0x3A, 0xBD, 0xF5, 0x5A,
- 0x73, 0xFC, 0x2C, 0x60, 0x25, 0x62, 0x0B, 0x96,
- 0xBB, 0x6C, 0x4E, 0x42, 0x89, 0xF7, 0x6B, 0x10,
- 0x53, 0x7C, 0x6A, 0x28, 0xB4, 0x27, 0xF1, 0x8C,
- 0xE1, 0x13, 0xE6, 0x95, 0xBD, 0x9C, 0x45, 0xC7,
- 0xE2, 0x24, 0xF4, 0x46, 0xB6, 0x3B, 0x66, 0x70,
- 0xCC, 0xCA, 0x95, 0xE3, 0x03, 0x85, 0x56, 0xCB,
- 0xD4, 0x11, 0x1C, 0xD0, 0x1E, 0x93, 0xD7, 0xB8,
- 0xFB, 0xA6, 0xC3, 0x83, 0x8E, 0x20, 0xB5, 0xFF,
- 0xE9, 0x9F, 0xCF, 0x77, 0xBF, 0xC3, 0xBA, 0xCC,
- 0xEA, 0x03, 0x77, 0x6F, 0x39, 0x08, 0xAF, 0xBF,
- 0x33, 0x40, 0xC9, 0xE7, 0x62, 0x2B, 0x71, 0xE2,
- 0x81, 0x79, 0x79, 0x0C, 0x09, 0xAA, 0xAD, 0x82,
- 0x24, 0x41, 0xCD, 0x3A, 0xF9, 0xEA, 0xD8, 0xB9,
- 0xE5, 0xE4, 0xC5, 0x9A, 0xB9, 0xA4, 0x4D, 0x97,
- 0x44, 0x7E, 0x08, 0xDA, 0x86, 0x7A, 0xE7, 0x17,
- 0xA1, 0x66, 0x1D, 0x94, 0xAA, 0xA1, 0xED, 0x1D,
- 0x06, 0x3D, 0x70, 0xF0, 0xB2, 0xDE, 0xD2, 0xB3,
- 0x41, 0x0B, 0x7B, 0x72, 0xA0, 0xA7, 0x11, 0x1C,
- 0x31, 0xEF, 0xC2, 0xD1, 0x27, 0x53, 0x90, 0x3E,
- 0x20, 0x8F, 0xF6, 0x33, 0x60, 0x26, 0xFF, 0x5F,
- 0x96, 0xEC, 0x5C, 0x76, 0xB1, 0x2A, 0xAB, 0x49,
- 0x9E, 0x81, 0x9C, 0x88, 0x52, 0xEE, 0x1B, 0x21,
- 0x5F, 0xC4, 0x93, 0x1A, 0x0A, 0xEB, 0xEF, 0xD9,
- 0x91, 0xC5, 0x85, 0x39, 0x49, 0x99, 0xEE, 0xCD,
- 0x2D, 0xAD, 0x4F, 0x31, 0x8F, 0x8B, 0x3B, 0x01,
- 0x47, 0x18, 0x87, 0x23, 0x6D, 0xDD, 0x46, 0x1F,
- 0xD6, 0x4E, 0x3E, 0x2D, 0x69, 0xF9, 0x64, 0x48,
- 0x2A, 0x4F, 0xCE, 0xF2, 0xCB, 0x65, 0x2F, 0x8E,
- 0xFC, 0x78, 0x97, 0x5C, 0x05, 0x58, 0x7A, 0x19,
- 0xAC, 0x8D, 0x7F, 0xE5, 0xD5, 0x98, 0x1A, 0x57,
- 0x4B, 0x67, 0x0E, 0x7F, 0xA7, 0x05, 0x5A, 0x64,
- 0x28, 0xAF, 0x14, 0x63, 0x3F, 0xB6, 0x29, 0xFE,
- 0x88, 0xF5, 0x3C, 0xB7, 0x4C, 0x3C, 0x02, 0xA5,
- 0xB8, 0xCE, 0xDA, 0xE9, 0xB0, 0x68, 0x17, 0x44,
- 0x55, 0xE0, 0x1F, 0x4D, 0x8A, 0x43, 0x7D, 0x69,
- 0x57, 0x29, 0xC7, 0x2E, 0x8D, 0xAC, 0x74, 0x15,
- 0xB7, 0x59, 0xC4, 0xA8, 0x9F, 0x0A, 0x72, 0x9E,
- 0x7E, 0x6E, 0x15, 0x47, 0x22, 0xDF, 0x12, 0x34,
- 0x58, 0x35, 0x07, 0x6A, 0x99, 0xCF, 0x34, 0xDC,
- 0x6E, 0x22, 0x50, 0xC9, 0xDE, 0xC0, 0x68, 0x9B,
- 0x65, 0x89, 0xBC, 0xD4, 0xDB, 0xED, 0xF8, 0xAB,
- 0xC8, 0x12, 0xA8, 0xA2, 0x2B, 0x0D, 0x40, 0x52,
- 0xDC, 0xBB, 0xFE, 0x02, 0x32, 0x2F, 0xA4, 0xA9,
- 0xCA, 0xD7, 0x10, 0x61, 0x21, 0x1E, 0xF0, 0xB4,
- 0xD3, 0x50, 0x5D, 0x04, 0x0F, 0xF6, 0x00, 0xC2,
- 0x6F, 0x16, 0x9D, 0x25, 0x36, 0x86, 0x42, 0x56,
- 0x4A, 0x55, 0x5E, 0x09, 0xC1, 0xBE, 0xE0, 0x91
-};
-/* Macro to perform one column of the RS matrix multiplication. The
- * parameters a, b, c, and d are the four bytes of output; i is the index
- * of the key bytes, and w, x, y, and z, are the column of constants from
- * the RS matrix, preprocessed through the poly_to_exp table. */
-
-#define CALC_S(a, b, c, d, i, w, x, y, z) \
- if (key[i]) { \
- tmp = poly_to_exp[key[i] - 1]; \
- (a) ^= exp_to_poly[tmp + (w)]; \
- (b) ^= exp_to_poly[tmp + (x)]; \
- (c) ^= exp_to_poly[tmp + (y)]; \
- (d) ^= exp_to_poly[tmp + (z)]; \
- }
-
-/* Macros to calculate the key-dependent S-boxes for a 128-bit key using
- * the S vector from CALC_S. CALC_SB_2 computes a single entry in all
- * four S-boxes, where i is the index of the entry to compute, and a and b
- * are the index numbers preprocessed through the q0 and q1 tables
- * respectively. CALC_SB is simply a convenience to make the code shorter;
- * it calls CALC_SB_2 four times with consecutive indices from i to i+3,
- * using the remaining parameters two by two. */
-
-#define CALC_SB_2(i, a, b) \
- ctx->s[0][i] = mds[0][q0[(a) ^ sa] ^ se]; \
- ctx->s[1][i] = mds[1][q0[(b) ^ sb] ^ sf]; \
- ctx->s[2][i] = mds[2][q1[(a) ^ sc] ^ sg]; \
- ctx->s[3][i] = mds[3][q1[(b) ^ sd] ^ sh]
-
-#define CALC_SB(i, a, b, c, d, e, f, g, h) \
- CALC_SB_2 (i, a, b); CALC_SB_2 ((i)+1, c, d); \
- CALC_SB_2 ((i)+2, e, f); CALC_SB_2 ((i)+3, g, h)
-
-/* Macros exactly like CALC_SB and CALC_SB_2, but for 256-bit keys. */
-
-#define CALC_SB256_2(i, a, b) \
- ctx->s[0][i] = mds[0][q0[q0[q1[(b) ^ sa] ^ se] ^ si] ^ sm]; \
- ctx->s[1][i] = mds[1][q0[q1[q1[(a) ^ sb] ^ sf] ^ sj] ^ sn]; \
- ctx->s[2][i] = mds[2][q1[q0[q0[(a) ^ sc] ^ sg] ^ sk] ^ so]; \
- ctx->s[3][i] = mds[3][q1[q1[q0[(b) ^ sd] ^ sh] ^ sl] ^ sp];
-
-#define CALC_SB256(i, a, b, c, d, e, f, g, h) \
- CALC_SB256_2 (i, a, b); CALC_SB256_2 ((i)+1, c, d); \
- CALC_SB256_2 ((i)+2, e, f); CALC_SB256_2 ((i)+3, g, h)
-
-/* Macros to calculate the whitening and round subkeys. CALC_K_2 computes the
- * last two stages of the h() function for a given index (either 2i or 2i+1).
- * a, b, c, and d are the four bytes going into the last two stages. For
- * 128-bit keys, this is the entire h() function and a and c are the index
- * preprocessed through q0 and q1 respectively; for longer keys they are the
- * output of previous stages. j is the index of the first key byte to use.
- * CALC_K computes a pair of subkeys for 128-bit Twofish, by calling CALC_K_2
- * twice, doing the Psuedo-Hadamard Transform, and doing the necessary
- * rotations. Its parameters are: a, the array to write the results into,
- * j, the index of the first output entry, k and l, the preprocessed indices
- * for index 2i, and m and n, the preprocessed indices for index 2i+1.
- * CALC_K256_2 expands CALC_K_2 to handle 256-bit keys, by doing two
- * additional lookup-and-XOR stages. The parameters a and b are the index
- * preprocessed through q0 and q1 respectively; j is the index of the first
- * key byte to use. CALC_K256 is identical to CALC_K but for using the
- * CALC_K256_2 macro instead of CALC_K_2. */
-
-#define CALC_K_2(a, b, c, d, j) \
- mds[0][q0[a ^ key[(j) + 8]] ^ key[j]] \
- ^ mds[1][q0[b ^ key[(j) + 9]] ^ key[(j) + 1]] \
- ^ mds[2][q1[c ^ key[(j) + 10]] ^ key[(j) + 2]] \
- ^ mds[3][q1[d ^ key[(j) + 11]] ^ key[(j) + 3]]
-
-#define CALC_K(a, j, k, l, m, n) \
- x = CALC_K_2 (k, l, k, l, 0); \
- y = CALC_K_2 (m, n, m, n, 4); \
- y = (y << 8) + (y >> 24); \
- x += y; y += x; ctx->a[j] = x; \
- ctx->a[(j) + 1] = (y << 9) + (y >> 23)
-
-#define CALC_K256_2(a, b, j) \
- CALC_K_2 (q0[q1[b ^ key[(j) + 24]] ^ key[(j) + 16]], \
- q1[q1[a ^ key[(j) + 25]] ^ key[(j) + 17]], \
- q0[q0[a ^ key[(j) + 26]] ^ key[(j) + 18]], \
- q1[q0[b ^ key[(j) + 27]] ^ key[(j) + 19]], j)
-
-#define CALC_K256(a, j, k, l, m, n) \
- x = CALC_K256_2 (k, l, 0); \
- y = CALC_K256_2 (m, n, 4); \
- y = (y << 8) + (y >> 24); \
- x += y; y += x; ctx->a[j] = x; \
- ctx->a[(j) + 1] = (y << 9) + (y >> 23)
-
-
-static void
-burn_stack (int bytes)
-{
- char buf[64];
-
- memset (buf, 0, sizeof buf);
- bytes -= sizeof buf;
- if (bytes > 0)
- burn_stack (bytes);
-}
-
-
-
-/* Perform the key setup. Note that this works only with 128- and 256-bit
- * keys, despite the API that looks like it might support other sizes. */
-
-#ifdef __riscos__
-/* need to switch off CSE optimisation for Norcroft C (Acorn/Pace) */
-#pragma no_optimise_cse
-#endif /* __riscos__ */
-
-static int
-do_twofish_setkey (TWOFISH_context *ctx, const byte *key, unsigned int keylen)
-{
- int i, j, k;
-
- /* Temporaries for CALC_K. */
- u32 x, y;
-
- /* The S vector used to key the S-boxes, split up into individual bytes.
- * 128-bit keys use only sa through sh; 256-bit use all of them. */
- byte sa = 0, sb = 0, sc = 0, sd = 0, se = 0, sf = 0, sg = 0, sh = 0;
- byte si = 0, sj = 0, sk = 0, sl = 0, sm = 0, sn = 0, so = 0, sp = 0;
-
- /* Temporary for CALC_S. */
- byte tmp;
-
- /* Flags for self-test. */
- static int initialized = 0;
- static const char *selftest_failed=0;
-
- /* Check key length. */
- if( ( ( keylen - 16 ) | 16 ) != 16 )
- return G10ERR_WRONG_KEYLEN;
-
- /* Do self-test if necessary. */
- if (!initialized) {
- initialized = 1;
- selftest_failed = selftest ();
- if( selftest_failed )
- fprintf(stderr, "%s\n", selftest_failed );
- }
- if( selftest_failed )
- return G10ERR_SELFTEST_FAILED;
-
- /* Compute the first two words of the S vector. The magic numbers are
- * the entries of the RS matrix, preprocessed through poly_to_exp. The
- * numbers in the comments are the original (polynomial form) matrix
- * entries. */
- CALC_S (sa, sb, sc, sd, 0, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */
- CALC_S (sa, sb, sc, sd, 1, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */
- CALC_S (sa, sb, sc, sd, 2, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */
- CALC_S (sa, sb, sc, sd, 3, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */
- CALC_S (sa, sb, sc, sd, 4, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */
- CALC_S (sa, sb, sc, sd, 5, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */
- CALC_S (sa, sb, sc, sd, 6, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */
- CALC_S (sa, sb, sc, sd, 7, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */
- CALC_S (se, sf, sg, sh, 8, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */
- CALC_S (se, sf, sg, sh, 9, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */
- CALC_S (se, sf, sg, sh, 10, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */
- CALC_S (se, sf, sg, sh, 11, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */
- CALC_S (se, sf, sg, sh, 12, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */
- CALC_S (se, sf, sg, sh, 13, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */
- CALC_S (se, sf, sg, sh, 14, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */
- CALC_S (se, sf, sg, sh, 15, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */
-
- if (keylen == 32) { /* 256-bit key */
- /* Calculate the remaining two words of the S vector */
- CALC_S (si, sj, sk, sl, 16, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */
- CALC_S (si, sj, sk, sl, 17, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */
- CALC_S (si, sj, sk, sl, 18, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */
- CALC_S (si, sj, sk, sl, 19, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */
- CALC_S (si, sj, sk, sl, 20, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */
- CALC_S (si, sj, sk, sl, 21, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */
- CALC_S (si, sj, sk, sl, 22, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */
- CALC_S (si, sj, sk, sl, 23, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */
- CALC_S (sm, sn, so, sp, 24, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */
- CALC_S (sm, sn, so, sp, 25, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */
- CALC_S (sm, sn, so, sp, 26, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */
- CALC_S (sm, sn, so, sp, 27, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */
- CALC_S (sm, sn, so, sp, 28, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */
- CALC_S (sm, sn, so, sp, 29, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */
- CALC_S (sm, sn, so, sp, 30, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */
- CALC_S (sm, sn, so, sp, 31, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */
-
- /* Compute the S-boxes. */
- for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) {
- CALC_SB256_2( i, calc_sb_tbl[j], calc_sb_tbl[k] );
- }
-
- /* Calculate whitening and round subkeys. The constants are
- * indices of subkeys, preprocessed through q0 and q1. */
- CALC_K256 (w, 0, 0xA9, 0x75, 0x67, 0xF3);
- CALC_K256 (w, 2, 0xB3, 0xC6, 0xE8, 0xF4);
- CALC_K256 (w, 4, 0x04, 0xDB, 0xFD, 0x7B);
- CALC_K256 (w, 6, 0xA3, 0xFB, 0x76, 0xC8);
- CALC_K256 (k, 0, 0x9A, 0x4A, 0x92, 0xD3);
- CALC_K256 (k, 2, 0x80, 0xE6, 0x78, 0x6B);
- CALC_K256 (k, 4, 0xE4, 0x45, 0xDD, 0x7D);
- CALC_K256 (k, 6, 0xD1, 0xE8, 0x38, 0x4B);
- CALC_K256 (k, 8, 0x0D, 0xD6, 0xC6, 0x32);
- CALC_K256 (k, 10, 0x35, 0xD8, 0x98, 0xFD);
- CALC_K256 (k, 12, 0x18, 0x37, 0xF7, 0x71);
- CALC_K256 (k, 14, 0xEC, 0xF1, 0x6C, 0xE1);
- CALC_K256 (k, 16, 0x43, 0x30, 0x75, 0x0F);
- CALC_K256 (k, 18, 0x37, 0xF8, 0x26, 0x1B);
- CALC_K256 (k, 20, 0xFA, 0x87, 0x13, 0xFA);
- CALC_K256 (k, 22, 0x94, 0x06, 0x48, 0x3F);
- CALC_K256 (k, 24, 0xF2, 0x5E, 0xD0, 0xBA);
- CALC_K256 (k, 26, 0x8B, 0xAE, 0x30, 0x5B);
- CALC_K256 (k, 28, 0x84, 0x8A, 0x54, 0x00);
- CALC_K256 (k, 30, 0xDF, 0xBC, 0x23, 0x9D);
- }
- else {
- /* Compute the S-boxes. */
- for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) {
- CALC_SB_2( i, calc_sb_tbl[j], calc_sb_tbl[k] );
- }
-
- /* Calculate whitening and round subkeys. The constants are
- * indices of subkeys, preprocessed through q0 and q1. */
- CALC_K (w, 0, 0xA9, 0x75, 0x67, 0xF3);
- CALC_K (w, 2, 0xB3, 0xC6, 0xE8, 0xF4);
- CALC_K (w, 4, 0x04, 0xDB, 0xFD, 0x7B);
- CALC_K (w, 6, 0xA3, 0xFB, 0x76, 0xC8);
- CALC_K (k, 0, 0x9A, 0x4A, 0x92, 0xD3);
- CALC_K (k, 2, 0x80, 0xE6, 0x78, 0x6B);
- CALC_K (k, 4, 0xE4, 0x45, 0xDD, 0x7D);
- CALC_K (k, 6, 0xD1, 0xE8, 0x38, 0x4B);
- CALC_K (k, 8, 0x0D, 0xD6, 0xC6, 0x32);
- CALC_K (k, 10, 0x35, 0xD8, 0x98, 0xFD);
- CALC_K (k, 12, 0x18, 0x37, 0xF7, 0x71);
- CALC_K (k, 14, 0xEC, 0xF1, 0x6C, 0xE1);
- CALC_K (k, 16, 0x43, 0x30, 0x75, 0x0F);
- CALC_K (k, 18, 0x37, 0xF8, 0x26, 0x1B);
- CALC_K (k, 20, 0xFA, 0x87, 0x13, 0xFA);
- CALC_K (k, 22, 0x94, 0x06, 0x48, 0x3F);
- CALC_K (k, 24, 0xF2, 0x5E, 0xD0, 0xBA);
- CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B);
- CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00);
- CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D);
- }
-
- return 0;
-}
-
-#ifdef __riscos__
-#pragma optimise_cse
-#endif /* __riscos__ */
-
-static int
-twofish_setkey (TWOFISH_context *ctx, const byte *key, unsigned int keylen)
-{
- int rc = do_twofish_setkey (ctx, key, keylen);
- burn_stack (23+6*sizeof(void*));
- return rc;
-}
-
-
-
-/* Macros to compute the g() function in the encryption and decryption
- * rounds. G1 is the straight g() function; G2 includes the 8-bit
- * rotation for the high 32-bit word. */
-
-#define G1(a) \
- (ctx->s[0][(a) & 0xFF]) ^ (ctx->s[1][((a) >> 8) & 0xFF]) \
- ^ (ctx->s[2][((a) >> 16) & 0xFF]) ^ (ctx->s[3][(a) >> 24])
-
-#define G2(b) \
- (ctx->s[1][(b) & 0xFF]) ^ (ctx->s[2][((b) >> 8) & 0xFF]) \
- ^ (ctx->s[3][((b) >> 16) & 0xFF]) ^ (ctx->s[0][(b) >> 24])
-
-/* Encryption and decryption Feistel rounds. Each one calls the two g()
- * macros, does the PHT, and performs the XOR and the appropriate bit
- * rotations. The parameters are the round number (used to select subkeys),
- * and the four 32-bit chunks of the text. */
-
-#define ENCROUND(n, a, b, c, d) \
- x = G1 (a); y = G2 (b); \
- x += y; y += x + ctx->k[2 * (n) + 1]; \
- (c) ^= x + ctx->k[2 * (n)]; \
- (c) = ((c) >> 1) + ((c) << 31); \
- (d) = (((d) << 1)+((d) >> 31)) ^ y
-
-#define DECROUND(n, a, b, c, d) \
- x = G1 (a); y = G2 (b); \
- x += y; y += x; \
- (d) ^= y + ctx->k[2 * (n) + 1]; \
- (d) = ((d) >> 1) + ((d) << 31); \
- (c) = (((c) << 1)+((c) >> 31)); \
- (c) ^= (x + ctx->k[2 * (n)])
-
-/* Encryption and decryption cycles; each one is simply two Feistel rounds
- * with the 32-bit chunks re-ordered to simulate the "swap" */
-
-#define ENCCYCLE(n) \
- ENCROUND (2 * (n), a, b, c, d); \
- ENCROUND (2 * (n) + 1, c, d, a, b)
-
-#define DECCYCLE(n) \
- DECROUND (2 * (n) + 1, c, d, a, b); \
- DECROUND (2 * (n), a, b, c, d)
-
-/* Macros to convert the input and output bytes into 32-bit words,
- * and simultaneously perform the whitening step. INPACK packs word
- * number n into the variable named by x, using whitening subkey number m.
- * OUTUNPACK unpacks word number n from the variable named by x, using
- * whitening subkey number m. */
-
-#define INPACK(n, x, m) \
- x = in[4 * (n)] ^ (in[4 * (n) + 1] << 8) \
- ^ (in[4 * (n) + 2] << 16) ^ (in[4 * (n) + 3] << 24) ^ ctx->w[m]
-
-#define OUTUNPACK(n, x, m) \
- x ^= ctx->w[m]; \
- out[4 * (n)] = x; out[4 * (n) + 1] = x >> 8; \
- out[4 * (n) + 2] = x >> 16; out[4 * (n) + 3] = x >> 24
-
-/* Encrypt one block. in and out may be the same. */
-
-#ifdef __riscos__
-/* need to switch off CSE optimisation for Norcroft C (Acorn/Pace) */
-#pragma no_optimise_cse
-#endif /* __riscos__ */
-
-static void
-do_twofish_encrypt (const TWOFISH_context *ctx, byte *out, const byte *in)
-{
- /* The four 32-bit chunks of the text. */
- u32 a, b, c, d;
-
- /* Temporaries used by the round function. */
- u32 x, y;
-
- /* Input whitening and packing. */
- INPACK (0, a, 0);
- INPACK (1, b, 1);
- INPACK (2, c, 2);
- INPACK (3, d, 3);
-
- /* Encryption Feistel cycles. */
- ENCCYCLE (0);
- ENCCYCLE (1);
- ENCCYCLE (2);
- ENCCYCLE (3);
- ENCCYCLE (4);
- ENCCYCLE (5);
- ENCCYCLE (6);
- ENCCYCLE (7);
-
- /* Output whitening and unpacking. */
- OUTUNPACK (0, c, 4);
- OUTUNPACK (1, d, 5);
- OUTUNPACK (2, a, 6);
- OUTUNPACK (3, b, 7);
-}
-
-#ifdef __riscos__
-#pragma optimise_cse
-#endif /* __riscos__ */
-
-static void
-twofish_encrypt (const TWOFISH_context *ctx, byte *out, const byte *in)
-{
- do_twofish_encrypt (ctx, out, in);
- burn_stack (24+3*sizeof (void*));
-}
-
-/* Decrypt one block. in and out may be the same. */
-
-#ifdef __riscos__
-/* need to switch off CSE optimisation for Norcroft C (Acorn/Pace) - bug */
-#pragma no_optimise_cse
-#endif /* __riscos__ */
-
-static void
-do_twofish_decrypt (const TWOFISH_context *ctx, byte *out, const byte *in)
-{
- /* The four 32-bit chunks of the text. */
- u32 a, b, c, d;
-
- /* Temporaries used by the round function. */
- u32 x, y;
-
- /* Input whitening and packing. */
- INPACK (0, c, 4);
- INPACK (1, d, 5);
- INPACK (2, a, 6);
- INPACK (3, b, 7);
-
- /* Encryption Feistel cycles. */
- DECCYCLE (7);
- DECCYCLE (6);
- DECCYCLE (5);
- DECCYCLE (4);
- DECCYCLE (3);
- DECCYCLE (2);
- DECCYCLE (1);
- DECCYCLE (0);
-
- /* Output whitening and unpacking. */
- OUTUNPACK (0, a, 0);
- OUTUNPACK (1, b, 1);
- OUTUNPACK (2, c, 2);
- OUTUNPACK (3, d, 3);
-}
-
-#ifdef __riscos__
-#pragma optimise_cse
-#endif /* __riscos__ */
-
-static void
-twofish_decrypt (const TWOFISH_context *ctx, byte *out, const byte *in)
-{
- do_twofish_decrypt (ctx, out, in);
- burn_stack (24+3*sizeof (void*));
-}
-
-/* Test a single encryption and decryption with each key size. */
-
-static const char*
-selftest (void)
-{
- TWOFISH_context ctx; /* Expanded key. */
- byte scratch[16]; /* Encryption/decryption result buffer. */
-
- /* Test vectors for single encryption/decryption. Note that I am using
- * the vectors from the Twofish paper's "known answer test", I=3 for
- * 128-bit and I=4 for 256-bit, instead of the all-0 vectors from the
- * "intermediate value test", because an all-0 key would trigger all the
- * special cases in the RS matrix multiply, leaving the math untested. */
- static const byte plaintext[16] = {
- 0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E,
- 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19
- };
- static const byte key[16] = {
- 0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32,
- 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A
- };
- static const byte ciphertext[16] = {
- 0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85,
- 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3
- };
- static const byte plaintext_256[16] = {
- 0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F,
- 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6
- };
- static const byte key_256[32] = {
- 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46,
- 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D,
- 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B,
- 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F
- };
- static const byte ciphertext_256[16] = {
- 0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97,
- 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA
- };
-
- twofish_setkey (&ctx, key, sizeof(key));
- twofish_encrypt (&ctx, scratch, plaintext);
- if (memcmp (scratch, ciphertext, sizeof (ciphertext)))
- return "Twofish-128 test encryption failed.";
- twofish_decrypt (&ctx, scratch, scratch);
- if (memcmp (scratch, plaintext, sizeof (plaintext)))
- return "Twofish-128 test decryption failed.";
-
- twofish_setkey (&ctx, key_256, sizeof(key_256));
- twofish_encrypt (&ctx, scratch, plaintext_256);
- if (memcmp (scratch, ciphertext_256, sizeof (ciphertext_256)))
- return "Twofish-256 test encryption failed.";
- twofish_decrypt (&ctx, scratch, scratch);
- if (memcmp (scratch, plaintext_256, sizeof (plaintext_256)))
- return "Twofish-256 test decryption failed.";
-
- return NULL;
-}
-
-/* More complete test program. This does 1000 encryptions and decryptions
- * with each of 250 128-bit keys and 2000 encryptions and decryptions with
- * each of 125 256-bit keys, using a feedback scheme similar to a Feistel
- * cipher, so as to be sure of testing all the table entries pretty
- * thoroughly. We keep changing the keys so as to get a more meaningful
- * performance number, since the key setup is non-trivial for Twofish. */
-
-#ifdef TEST
-
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-int
-main()
-{
- TWOFISH_context ctx; /* Expanded key. */
- int i, j; /* Loop counters. */
-
- const char *encrypt_msg; /* Message to print regarding encryption test;
- * the printf is done outside the loop to avoid
- * stuffing up the timing. */
- clock_t timer; /* For computing elapsed time. */
-
- /* Test buffer. */
- byte buffer[4][16] = {
- {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
- 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF},
- {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78,
- 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0},
- {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10},
- {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10,
- 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98}
- };
-
- /* Expected outputs for the million-operation test */
- static const byte test_encrypt[4][16] = {
- {0xC8, 0x23, 0xB8, 0xB7, 0x6B, 0xFE, 0x91, 0x13,
- 0x2F, 0xA7, 0x5E, 0xE6, 0x94, 0x77, 0x6F, 0x6B},
- {0x90, 0x36, 0xD8, 0x29, 0xD5, 0x96, 0xC2, 0x8E,
- 0xE4, 0xFF, 0x76, 0xBC, 0xE5, 0x77, 0x88, 0x27},
- {0xB8, 0x78, 0x69, 0xAF, 0x42, 0x8B, 0x48, 0x64,
- 0xF7, 0xE9, 0xF3, 0x9C, 0x42, 0x18, 0x7B, 0x73},
- {0x7A, 0x88, 0xFB, 0xEB, 0x90, 0xA4, 0xB4, 0xA8,
- 0x43, 0xA3, 0x1D, 0xF1, 0x26, 0xC4, 0x53, 0x57}
- };
- static const byte test_decrypt[4][16] = {
- {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
- 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF},
- {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78,
- 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0},
- {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10},
- {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10,
- 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98}
- };
-
- /* Start the timer ticking. */
- timer = clock ();
-
- /* Encryption test. */
- for (i = 0; i < 125; i++) {
- twofish_setkey (&ctx, buffer[0], sizeof (buffer[0]));
- for (j = 0; j < 1000; j++)
- twofish_encrypt (&ctx, buffer[2], buffer[2]);
- twofish_setkey (&ctx, buffer[1], sizeof (buffer[1]));
- for (j = 0; j < 1000; j++)
- twofish_encrypt (&ctx, buffer[3], buffer[3]);
- twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2);
- for (j = 0; j < 1000; j++) {
- twofish_encrypt (&ctx, buffer[0], buffer[0]);
- twofish_encrypt (&ctx, buffer[1], buffer[1]);
- }
- }
- encrypt_msg = memcmp (buffer, test_encrypt, sizeof (test_encrypt)) ?
- "encryption failure!\n" : "encryption OK!\n";
-
- /* Decryption test. */
- for (i = 0; i < 125; i++) {
- twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2);
- for (j = 0; j < 1000; j++) {
- twofish_decrypt (&ctx, buffer[0], buffer[0]);
- twofish_decrypt (&ctx, buffer[1], buffer[1]);
- }
- twofish_setkey (&ctx, buffer[1], sizeof (buffer[1]));
- for (j = 0; j < 1000; j++)
- twofish_decrypt (&ctx, buffer[3], buffer[3]);
- twofish_setkey (&ctx, buffer[0], sizeof (buffer[0]));
- for (j = 0; j < 1000; j++)
- twofish_decrypt (&ctx, buffer[2], buffer[2]);
- }
-
- /* Stop the timer, and print results. */
- timer = clock () - timer;
- printf (encrypt_msg);
- printf (memcmp (buffer, test_decrypt, sizeof (test_decrypt)) ?
- "decryption failure!\n" : "decryption OK!\n");
- printf ("elapsed time: %.1f s.\n", (float) timer / CLOCKS_PER_SEC);
-
- return 0;
-}
-
-#endif /* TEST */
-
-#ifdef IS_MODULE
-static
-#endif
- const char *
-twofish_get_info (int algo, size_t *keylen,
- size_t *blocksize, size_t *contextsize,
- int (**r_setkey) (void *c, byte *key, unsigned keylen),
- void (**r_encrypt) (void *c, byte *outbuf, byte *inbuf),
- void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
- )
-{
- *keylen = algo==10? 256 : 128;
- *blocksize = 16;
- *contextsize = sizeof (TWOFISH_context);
-
- *(int (**)(TWOFISH_context*, const byte*, const unsigned))r_setkey
- = twofish_setkey;
- *(void (**)(const TWOFISH_context*, byte*, const byte*))r_encrypt
- = twofish_encrypt;
- *(void (**)(const TWOFISH_context*, byte*, const byte*))r_decrypt
- = twofish_decrypt;
-
- if( algo == 10 )
- return "TWOFISH";
- if (algo == 102) /* This algorithm number is assigned for
- * experiments, so we can use it */
- return "TWOFISH128";
- return NULL;
-}
-
-
-#ifdef IS_MODULE
-static
-const char * const gnupgext_version = "TWOFISH ($Revision$)";
-
-static struct {
- int class;
- int version;
- int value;
- void (*func)(void);
-} func_table[] = {
- { 20, 1, 0, (void(*)(void))twofish_get_info },
- { 21, 1, 10 },
- { 21, 1, 102 },
-};
-
-
-
-/****************
- * Enumerate the names of the functions together with information about
- * this function. Set sequence to an integer with a initial value of 0 and
- * do not change it.
- * If what is 0 all kind of functions are returned.
- * Return values: class := class of function:
- * 10 = message digest algorithm info function
- * 11 = integer with available md algorithms
- * 20 = cipher algorithm info function
- * 21 = integer with available cipher algorithms
- * 30 = public key algorithm info function
- * 31 = integer with available pubkey algorithms
- * version = interface version of the function/pointer
- * (currently this is 1 for all functions)
- */
-static 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:
-#ifndef __riscos__
- ret = func_table[i].func;
-#else /* __riscos__ */
- ret = (void *) func_table[i].func;
-#endif /* __riscos__ */
- break;
- }
- i++;
- } while ( what && what != *class );
-
- *sequence = i;
- return ret;
-}
-#endif
diff --git a/common/ChangeLog b/common/ChangeLog
deleted file mode 100644
index ff886650d..000000000
--- a/common/ChangeLog
+++ /dev/null
@@ -1,139 +0,0 @@
-2002-09-04 Neal H. Walfield <neal@g10code.de>
-
- * vasprintf.c (vasprintf) [va_copy]: Use va_copy.
- [!va_copy && __va_copy]: Use __va_copy.
- [!va_copy && !__va_copy]: Only now fall back to using memcpy.
-
-2002-08-21 Werner Koch <wk@gnupg.org>
-
- * errors.h: Added STATUS_IMPORT_PROBLEM.
-
-2002-08-20 Werner Koch <wk@gnupg.org>
-
- * vasprintf.c: Hack to handle NULL for %s.
-
-2002-08-09 Werner Koch <wk@gnupg.org>
-
- * signal.c: New. Taken from GnuPG 1.1.91.
-
-2002-07-23 Werner Koch <wk@gnupg.org>
-
- * util.h (_IO_cookie_io_functions_t): Fixed typo. Noted by
- Richard Lefebvre.
-
-2002-07-22 Werner Koch <wk@gnupg.org>
-
- * fseeko.c, ftello.c: New.
-
-2002-06-28 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_to_assuan_status): Map more errorcodes to Bad
- Certificate.
-
-2002-06-26 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_to_assuan_status): Map EOF to No_Data_Available.
-
-2002-06-10 Werner Koch <wk@gnupg.org>
-
- * errors.h (gnupg_error_token): Add new prototype.
- (STATUS_ERROR): New.
-
- * mkerrtok: New.
- * Makefile.am: Use it to create the new error token function.
-
-2002-06-04 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_to_assuan_status): Map Bad_CA_Certificate.
-
-2002-05-23 Werner Koch <wk@gnupg.org>
-
- * no-pth.c, Makefile.am: Removed.
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * mkdtemp.c: Replaced byte by unsigned char because it is no longer
- defined in gcrypt.h.
-
-2002-05-21 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_gcry_err): Add libgcrypt's new S-expression errors.
- (map_ksba_err): Add a few mappings.
-
-2002-05-14 Werner Koch <wk@gnupg.org>
-
- * gettime.c: New.
-
-2002-05-03 Werner Koch <wk@gnupg.org>
-
- * errors.h: Added STARUS_EXPSIG and STATUS_EXPKEYSIG.
-
-2002-04-15 Werner Koch <wk@gnupg.org>
-
- * cryptmiss.c: New.
-
-2002-02-14 Werner Koch <wk@gnupg.org>
-
- * maperror.c: Add more assuan<->gnupg mappings.
-
-2002-02-12 Werner Koch <wk@gnupg.org>
-
- * fopencookie.c: Dummy function.
-
- * vasprintf.c: New. Taken from binutils-2.9.1 and dropped all non
- ANSI-C stuff. Merged with asprintf version.
-
- * no-pth.c: New.
-
-2002-01-23 Werner Koch <wk@gnupg.org>
-
- * mkdtemp.c: Copied from gnupg-1.0.6c and changed to use libgcrypt.
-
-2002-01-19 Werner Koch <wk@gnupg.org>
-
- * sysutils.c: New. This is the misc.c file from gnupg 1.0.6 with
- the OpenPGP stuff removed.
- * sysutils.h: New.
-
-2002-01-15 Werner Koch <wk@gnupg.org>
-
- * maperror.c: Add mapping for Not_Trusted.
-
-2002-01-11 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_assuan_err): Codes for CRL
-
-2002-01-08 Werner Koch <wk@gnupg.org>
-
- * util.h (spacep): New.
-
-2002-01-02 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_to_assuan_status): New. Merged from ../agent
- and ../sm.
-
-2001-12-20 Werner Koch <wk@gnupg.org>
-
- * maperror.c (map_gcry_err): Add some mappings.
-
-2001-12-18 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (AM_CPPFLAGS): Include flags for gcrypt and ksba
-
-2001-12-14 Werner Koch <wk@gnupg.org>
-
- * util.h (digitp, hexdigitp): New ctype like macros.
- (atoi_1,atoi_2,atoi_4,xtoi_1,xtoi_2): New.
-
-
- Copyright 2001, 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/common/Makefile.am b/common/Makefile.am
deleted file mode 100644
index 8f8209afd..000000000
--- a/common/Makefile.am
+++ /dev/null
@@ -1,52 +0,0 @@
-# Makefile for common gnupg modules
-# Copyright (C) 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = mkerrors mkerrtok
-#INCLUDES =
-BUILT_SOURCES = errors.c
-
-noinst_LIBRARIES = libcommon.a
-
-AM_CPPFLAGS = $(LIBGCRYPT_CFLAGS) $(KSBA_CFLAGS)
-
-libcommon_a_SOURCES = \
- util.h i18n.h \
- errors.c errors.h \
- maperror.c \
- sysutils.c sysutils.h \
- cryptmiss.c \
- gettime.c \
- signal.c
-
-
-libcommon_a_LIBADD = @LIBOBJS@
-
-errors.c : errors.h mkerrors mkerrtok
- $(srcdir)/mkerrors < $(srcdir)/errors.h > errors.c
- $(srcdir)/mkerrtok < $(srcdir)/errors.h >> errors.c
-
-
-
-
-
-
-
-
diff --git a/common/README b/common/README
deleted file mode 100644
index d3927d869..000000000
--- a/common/README
+++ /dev/null
@@ -1,14 +0,0 @@
-Stuff used by several modules of GnuPG. This way we can share error
-codes and serveral other things.
-
-
-These directories use it:
-
-gpg
-sm
-agent
-
-These directories don't use it:
-
-assuan
-kbx
\ No newline at end of file
diff --git a/common/errors.h b/common/errors.h
deleted file mode 100644
index c28149fb6..000000000
--- a/common/errors.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/* errors.h - Globally used error codes
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 GNUPG_COMMON_ERRORS_H
-#define GNUPG_COMMON_ERRORS_H
-
-#include "util.h"
-
-/* Error numbers */
-enum {
- GNUPG_EOF = -1,
- GNUPG_No_Error = 0,
- GNUPG_General_Error = 1,
- GNUPG_Out_Of_Core = 2,
- GNUPG_Invalid_Value = 3,
- GNUPG_IO_Error = 4,
- GNUPG_Resource_Limit = 5,
- GNUPG_Internal_Error = 6,
- GNUPG_Bad_Certificate = 7,
- GNUPG_Bad_Certificate_Chain = 8,
- GNUPG_Missing_Certificate = 9,
- GNUPG_No_Data = 10,
- GNUPG_Bad_Signature = 11,
- GNUPG_Not_Implemented = 12,
- GNUPG_Conflict = 13,
- GNUPG_Bug = 14,
- GNUPG_Read_Error = 15,
- GNUPG_Write_Error = 16,
- GNUPG_Incomplete_Line = 17,
- GNUPG_Invalid_Response = 18,
- GNUPG_No_Agent = 19,
- GNUPG_Agent_Error = 20,
- GNUPG_No_Public_Key = 21,
- GNUPG_No_Secret_Key = 22,
- GNUPG_File_Open_Error = 23,
- GNUPG_File_Create_Error = 24,
- GNUPG_File_Error = 25,
- GNUPG_Not_Supported = 26,
- GNUPG_Invalid_Data = 27,
- GNUPG_Assuan_Server_Fault = 28,
- GNUPG_Assuan_Error = 29, /* catch all assuan error */
- GNUPG_Invalid_Session_Key = 30,
- GNUPG_Invalid_Sexp = 31,
- GNUPG_Unsupported_Algorithm = 32,
- GNUPG_No_PIN_Entry = 33,
- GNUPG_PIN_Entry_Error = 34,
- GNUPG_Bad_PIN = 35,
- GNUPG_Bad_Passphrase = 36,
- GNUPG_Invalid_Name = 37,
- GNUPG_Bad_Public_Key = 38,
- GNUPG_Bad_Secret_Key = 39,
- GNUPG_Bad_Data = 40,
- GNUPG_Invalid_Parameter = 41,
- GNUPG_Tribute_to_D_A = 42,
- GNUPG_No_Dirmngr = 43,
- GNUPG_Dirmngr_Error = 44,
- GNUPG_Certificate_Revoked = 45,
- GNUPG_No_CRL_Known = 46,
- GNUPG_CRL_Too_Old = 47,
- GNUPG_Line_Too_Long = 48,
- GNUPG_Not_Trusted = 49,
- GNUPG_Canceled = 50,
- GNUPG_Bad_CA_Certificate = 51,
- GNUPG_Certificate_Expired = 52,
- GNUPG_Certificate_Too_Young = 53,
- GNUPG_Unsupported_Certificate = 54,
- GNUPG_Unknown_Sexp = 55,
- GNUPG_Unsupported_Protection = 56,
- GNUPG_Corrupted_Protection = 57,
- GNUPG_Ambiguous_Name = 58,
- GNUPG_Card_Error = 59,
- GNUPG_Card_Reset = 60,
- GNUPG_Card_Removed = 61,
- GNUPG_Invalid_Card = 62,
- GNUPG_Card_Not_Present = 63,
- GNUPG_No_PKCS15_App = 64,
- GNUPG_Not_Confirmed = 65,
- GNUPG_Configuration_Error = 66,
- GNUPG_No_Policy_Match = 67,
- GNUPG_Invalid_Index = 68,
- GNUPG_Invalid_Id = 69,
- GNUPG_No_Scdaemon = 70,
- GNUPG_Scdaemon_Error = 71,
- GNUPG_Unsupported_Protocol = 72,
- GNUPG_Bad_PIN_Method = 73,
- GNUPG_Card_Not_Initialized = 74,
- GNUPG_Unsupported_Operation = 75,
- GNUPG_Wrong_Key_Usage = 76,
-};
-
-/* Status codes - fixme: should go into another file */
-enum {
- STATUS_ENTER,
- STATUS_LEAVE,
- STATUS_ABORT,
- STATUS_GOODSIG,
- STATUS_BADSIG,
- STATUS_ERRSIG,
- STATUS_BADARMOR,
- STATUS_RSA_OR_IDEA,
- STATUS_SIGEXPIRED,
- STATUS_KEYREVOKED,
- STATUS_TRUST_UNDEFINED,
- STATUS_TRUST_NEVER,
- STATUS_TRUST_MARGINAL,
- STATUS_TRUST_FULLY,
- STATUS_TRUST_ULTIMATE,
-
- STATUS_SHM_INFO,
- STATUS_SHM_GET,
- STATUS_SHM_GET_BOOL,
- STATUS_SHM_GET_HIDDEN,
-
- STATUS_NEED_PASSPHRASE,
- STATUS_VALIDSIG,
- STATUS_SIG_ID,
- STATUS_ENC_TO,
- STATUS_NODATA,
- STATUS_BAD_PASSPHRASE,
- STATUS_NO_PUBKEY,
- STATUS_NO_SECKEY,
- STATUS_NEED_PASSPHRASE_SYM,
- STATUS_DECRYPTION_FAILED,
- STATUS_DECRYPTION_OKAY,
- STATUS_MISSING_PASSPHRASE,
- STATUS_GOOD_PASSPHRASE,
- STATUS_GOODMDC,
- STATUS_BADMDC,
- STATUS_ERRMDC,
- STATUS_IMPORTED,
- STATUS_IMPORT_PROBLEM,
- STATUS_IMPORT_RES,
- STATUS_FILE_START,
- STATUS_FILE_DONE,
- STATUS_FILE_ERROR,
-
- STATUS_BEGIN_DECRYPTION,
- STATUS_END_DECRYPTION,
- STATUS_BEGIN_ENCRYPTION,
- STATUS_END_ENCRYPTION,
-
- STATUS_DELETE_PROBLEM,
- STATUS_GET_BOOL,
- STATUS_GET_LINE,
- STATUS_GET_HIDDEN,
- STATUS_GOT_IT,
- STATUS_PROGRESS,
- STATUS_SIG_CREATED,
- STATUS_SESSION_KEY,
- STATUS_NOTATION_NAME,
- STATUS_NOTATION_DATA,
- STATUS_POLICY_URL,
- STATUS_BEGIN_STREAM,
- STATUS_END_STREAM,
- STATUS_KEY_CREATED,
- STATUS_USERID_HIN,
- STATUS_UNEXPECTED,
- STATUS_INV_RECP,
- STATUS_NO_RECP,
- STATUS_ALREADY_SIGNED,
-
- STATUS_EXPSIG,
- STATUS_EXPKEYSIG,
-
- STATUS_TRUNCATED,
- STATUS_ERROR
-};
-
-
-/*-- errors.c (build by mkerror and mkerrtok) --*/
-const char *gnupg_strerror (int err);
-const char *gnupg_error_token (int err);
-
-
-#endif /*GNUPG_COMMON_ERRORS_H*/
diff --git a/common/gettime.c b/common/gettime.c
deleted file mode 100644
index 6f656c8e4..000000000
--- a/common/gettime.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* gettime.c - Wrapper for time functions
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "util.h"
-
-static unsigned long timewarp;
-static enum { NORMAL = 0, FROZEN, FUTURE, PAST } timemode;
-
-/* Wrapper for the time(3). We use this here so we can fake the time
- for tests */
-time_t
-gnupg_get_time ()
-{
- time_t current = time (NULL);
- if (timemode == NORMAL)
- return current;
- else if (timemode == FROZEN)
- return timewarp;
- else if (timemode == FUTURE)
- return current + timewarp;
- else
- return current - timewarp;
-}
-
-/* set the time to NEWTIME so that gnupg_get_time returns a time
- starting with this one. With FREEZE set to 1 the returned time
- will never change. Just for completeness, a value of (time_t)-1
- for NEWTIME gets you back to rality. Note that this is obviously
- not thread-safe but this is not required. */
-void
-gnupg_set_time (time_t newtime, int freeze)
-{
- time_t current = time (NULL);
-
- if ( newtime == (time_t)-1 || current == newtime)
- {
- timemode = NORMAL;
- timewarp = 0;
- }
- else if (freeze)
- {
- timemode = FROZEN;
- timewarp = current;
- }
- else if (newtime > current)
- {
- timemode = FUTURE;
- timewarp = newtime - current;
- }
- else
- {
- timemode = PAST;
- timewarp = current - newtime;
- }
-}
-
-/* Returns true when we are in timewarp mode */
-int
-gnupg_faked_time_p (void)
-{
- return timemode;
-}
-
-
-
-
diff --git a/common/maperror.c b/common/maperror.c
deleted file mode 100644
index ab03669ae..000000000
--- a/common/maperror.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* maperror.c - Error mapping
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include <ksba.h>
-
-#include "util.h"
-#include "errors.h"
-#include "../assuan/assuan.h"
-
-/* Note: we might want to wrap this in a macro to get our hands on
- the line and file where the error occured */
-int
-map_ksba_err (int err)
-{
- switch (err)
- {
- case -1:
- case 0:
- break;
-
- case KSBA_Out_Of_Core: err = GNUPG_Out_Of_Core; break;
- case KSBA_Invalid_Value: err = GNUPG_Invalid_Value; break;
- case KSBA_Not_Implemented: err = GNUPG_Not_Implemented; break;
- case KSBA_Conflict: err = GNUPG_Conflict; break;
- case KSBA_Read_Error: err = GNUPG_Read_Error; break;
- case KSBA_Write_Error: err = GNUPG_Write_Error; break;
- case KSBA_No_Data: err = GNUPG_No_Data; break;
- case KSBA_Bug: err = GNUPG_Bug; break;
- case KSBA_Unsupported_Algorithm: err = GNUPG_Unsupported_Algorithm; break;
- case KSBA_Invalid_Index: err = GNUPG_Invalid_Index; break;
- case KSBA_Invalid_Sexp: err = GNUPG_Invalid_Sexp; break;
- case KSBA_Unknown_Sexp: err = GNUPG_Unknown_Sexp; break;
-
- default:
- err = seterr (General_Error);
- break;
- }
- return err;
-}
-
-
-int
-map_gcry_err (int err)
-{
- switch (err)
- {
- case GCRYERR_EOF:
- case -1:
- err = -1;
- break;
-
- case 0:
- break;
-
- case GCRYERR_WRONG_PK_ALGO:
- case GCRYERR_INV_PK_ALGO:
- case GCRYERR_INV_MD_ALGO:
- case GCRYERR_INV_CIPHER_ALGO:
- err = GNUPG_Unsupported_Algorithm;
- break;
- case GCRYERR_INV_KEYLEN:
- case GCRYERR_WEAK_KEY:
- case GCRYERR_BAD_PUBLIC_KEY: err = GNUPG_Bad_Public_Key; break;
- case GCRYERR_BAD_SECRET_KEY: err = GNUPG_Bad_Secret_Key; break;
- case GCRYERR_BAD_SIGNATURE: err = GNUPG_Bad_Signature; break;
-
- case GCRYERR_BAD_MPI:
- err = GNUPG_Bad_Data;
- break;
-
- case GCRYERR_INV_ARG:
- case GCRYERR_INV_OP:
- case GCRYERR_INTERNAL:
- case GCRYERR_INV_CIPHER_MODE:
- err = GNUPG_Invalid_Value;
- break;
-
- case GCRYERR_SELFTEST:
- err = GNUPG_Bug;
- break;
-
- case GCRYERR_SEXP_INV_LEN_SPEC :
- case GCRYERR_SEXP_STRING_TOO_LONG :
- case GCRYERR_SEXP_UNMATCHED_PAREN :
- case GCRYERR_SEXP_NOT_CANONICAL :
- case GCRYERR_SEXP_BAD_CHARACTER :
- case GCRYERR_SEXP_BAD_QUOTATION :
- case GCRYERR_SEXP_ZERO_PREFIX :
- case GCRYERR_SEXP_NESTED_DH :
- case GCRYERR_SEXP_UNMATCHED_DH :
- case GCRYERR_SEXP_UNEXPECTED_PUNC :
- case GCRYERR_SEXP_BAD_HEX_CHAR :
- case GCRYERR_SEXP_ODD_HEX_NUMBERS :
- case GCRYERR_SEXP_BAD_OCT_CHAR :
- err = GNUPG_Invalid_Sexp;
- break;
-
- case GCRYERR_NO_MEM: err = GNUPG_Out_Of_Core; break;
-
- case GCRYERR_NOT_IMPL: err = GNUPG_Not_Implemented; break;
- case GCRYERR_CONFLICT: err = GNUPG_Conflict; break;
-
- case GCRYERR_INV_OBJ: /* an object is not valid */
- case GCRYERR_TOO_SHORT: /* provided buffer too short */
- case GCRYERR_TOO_LARGE: /* object is too large */
- case GCRYERR_NO_OBJ: /* Missing item in an object */
- default:
- err = seterr (General_Error);
- break;
- }
- return err;
-}
-
-int
-map_kbx_err (int err)
-{
- switch (err)
- {
- case -1:
- case 0:
- break;
-
- default:
- err = seterr (General_Error);
- break;
- }
- return err;
-}
-
-
-int
-map_assuan_err (int err)
-{
- switch (err)
- {
- case -1:
- case 0:
- break;
-
- case ASSUAN_Canceled: err = GNUPG_Canceled; break;
- case ASSUAN_Invalid_Index: err = GNUPG_Invalid_Index; break;
-
- case ASSUAN_Not_Implemented: err = GNUPG_Not_Implemented; break;
- case ASSUAN_Server_Fault: err = GNUPG_Assuan_Server_Fault; break;
- case ASSUAN_No_Public_Key: err = GNUPG_No_Public_Key; break;
- case ASSUAN_No_Secret_Key: err = GNUPG_No_Secret_Key; break;
-
- case ASSUAN_Cert_Revoked: err = GNUPG_Certificate_Revoked; break;
- case ASSUAN_No_CRL_For_Cert: err = GNUPG_No_CRL_Known; break;
- case ASSUAN_CRL_Too_Old: err = GNUPG_CRL_Too_Old; break;
-
- case ASSUAN_Not_Trusted: err = GNUPG_Not_Trusted; break;
-
- case ASSUAN_Card_Error: err = GNUPG_Card_Error; break;
- case ASSUAN_Invalid_Card: err = GNUPG_Invalid_Card; break;
- case ASSUAN_No_PKCS15_App: err = GNUPG_No_PKCS15_App; break;
- case ASSUAN_Card_Not_Present: err= GNUPG_Card_Not_Present; break;
- case ASSUAN_Not_Confirmed: err = GNUPG_Not_Confirmed; break;
- case ASSUAN_Invalid_Id: err = GNUPG_Invalid_Id; break;
-
- default:
- err = err < 100? GNUPG_Assuan_Server_Fault : GNUPG_Assuan_Error;
- break;
- }
- return err;
-}
-
-/* Map GNUPG_xxx error codes to Assuan status codes */
-int
-map_to_assuan_status (int rc)
-{
- switch (rc)
- {
- case -1:
- rc = ASSUAN_No_Data_Available;
- break;
- case 0: break;
- case GNUPG_Bad_CA_Certificate:
- case GNUPG_Bad_Certificate:
- case GNUPG_Wrong_Key_Usage:
- case GNUPG_Certificate_Revoked:
- case GNUPG_No_CRL_Known:
- case GNUPG_CRL_Too_Old:
- case GNUPG_No_Policy_Match:
- case GNUPG_Certificate_Expired:
- rc = ASSUAN_Bad_Certificate;
- break;
- case GNUPG_Bad_Certificate_Chain: rc = ASSUAN_Bad_Certificate_Chain; break;
- case GNUPG_Missing_Certificate: rc = ASSUAN_Missing_Certificate; break;
- case GNUPG_No_Data: rc = ASSUAN_No_Data_Available; break;
- case GNUPG_Bad_Signature: rc = ASSUAN_Bad_Signature; break;
- case GNUPG_Not_Implemented: rc = ASSUAN_Not_Implemented; break;
- case GNUPG_No_Agent: rc = ASSUAN_No_Agent; break;
- case GNUPG_Agent_Error: rc = ASSUAN_Agent_Error; break;
- case GNUPG_No_Public_Key: rc = ASSUAN_No_Public_Key; break;
- case GNUPG_No_Secret_Key: rc = ASSUAN_No_Secret_Key; break;
- case GNUPG_Invalid_Data: rc = ASSUAN_Invalid_Data; break;
- case GNUPG_Invalid_Name: rc = ASSUAN_Invalid_Name; break;
- case GNUPG_Not_Trusted: rc = ASSUAN_Not_Trusted; break;
- case GNUPG_Canceled: rc = ASSUAN_Canceled; break;
- case GNUPG_Invalid_Index: rc = ASSUAN_Invalid_Index; break;
-
- case GNUPG_Card_Error:
- case GNUPG_Card_Reset:
- rc = ASSUAN_Card_Error;
- break;
- case GNUPG_Card_Removed:
- case GNUPG_Card_Not_Present:
- rc = ASSUAN_Card_Not_Present;
- break;
- case GNUPG_Invalid_Card: rc = ASSUAN_Invalid_Card; break;
- case GNUPG_No_PKCS15_App: rc = ASSUAN_No_PKCS15_App; break;
- case GNUPG_Not_Confirmed: rc = ASSUAN_Not_Confirmed; break;
- case GNUPG_Invalid_Id: rc = ASSUAN_Invalid_Id; break;
-
- case GNUPG_Bad_PIN:
- case GNUPG_Bad_Passphrase:
- rc = ASSUAN_No_Secret_Key;
- break;
-
- case GNUPG_Read_Error:
- case GNUPG_Write_Error:
- case GNUPG_IO_Error:
- rc = ASSUAN_Server_IO_Error;
- break;
- case GNUPG_Out_Of_Core:
- case GNUPG_Resource_Limit:
- rc = ASSUAN_Server_Resource_Problem;
- break;
- case GNUPG_Bug:
- case GNUPG_Internal_Error:
- rc = ASSUAN_Server_Bug;
- break;
- default:
- rc = ASSUAN_Server_Fault;
- break;
- }
- return rc;
-}
-
-
-
-
-
-
-
diff --git a/common/signal.c b/common/signal.c
deleted file mode 100644
index b150fa90a..000000000
--- a/common/signal.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* signal.c - signal handling
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "util.h"
-
-
-static volatile int caught_fatal_sig = 0;
-static volatile int caught_sigusr1 = 0;
-static void (*cleanup_fnc)(void);
-
-
-static void
-init_one_signal (int sig, RETSIGTYPE (*handler)(int), int check_ign )
-{
-#ifndef HAVE_DOSISH_SYSTEM
-# ifdef HAVE_SIGACTION
- struct sigaction oact, nact;
-
- if (check_ign)
- {
- /* we don't want to change an IGN handler */
- sigaction (sig, NULL, &oact );
- if (oact.sa_handler == SIG_IGN )
- return;
- }
-
- nact.sa_handler = handler;
- sigemptyset (&nact.sa_mask);
- nact.sa_flags = 0;
- sigaction ( sig, &nact, NULL);
-# else
- RETSIGTYPE (*ohandler)(int);
-
- ohandler = signal (sig, handler);
- if (check_ign && ohandler == SIG_IGN)
- {
- /* Change it back if it was already set to IGN */
- signal (sig, SIG_IGN);
- }
-# endif
-#endif /*!HAVE_DOSISH_SYSTEM*/
-}
-
-static const char *
-get_signal_name( int signum )
-{
-#if defined(SYS_SIGLIST_DECLARED) && defined(NSIG)
- return (signum >= 0 && signum < NSIG) ? sys_siglist[signum] : "?";
-#else
- return "some signal";
-#endif
-}
-
-static RETSIGTYPE
-got_fatal_signal (int sig)
-{
- const char *s;
-
- if (caught_fatal_sig)
- raise (sig);
- caught_fatal_sig = 1;
-
- if (cleanup_fnc)
- cleanup_fnc ();
- /* better don't translate these messages */
- write (2, "\n", 1 );
- s = log_get_prefix (NULL);
- if (s)
- write(2, s, strlen (s));
- write (2, ": ", 2 );
- s = get_signal_name(sig);
- write (2, s, strlen(s) );
- write (2, " caught ... exiting\n", 20);
-
- /* reset action to default action and raise signal again */
- init_one_signal (sig, SIG_DFL, 0);
- /* fixme: remove_lockfiles ();*/
-#ifdef __riscos__
- close_fds ();
-#endif /* __riscos__ */
- raise( sig );
-}
-
-
-static RETSIGTYPE
-got_usr_signal (int sig)
-{
- caught_sigusr1 = 1;
-}
-
-
-void
-gnupg_init_signals (int mode, void (*fast_cleanup)(void))
-{
- assert (!mode);
-
- cleanup_fnc = fast_cleanup;
-#ifndef HAVE_DOSISH_SYSTEM
- init_one_signal (SIGINT, got_fatal_signal, 1 );
- init_one_signal (SIGHUP, got_fatal_signal, 1 );
- init_one_signal (SIGTERM, got_fatal_signal, 1 );
- init_one_signal (SIGQUIT, got_fatal_signal, 1 );
- init_one_signal (SIGSEGV, got_fatal_signal, 1 );
- init_one_signal (SIGUSR1, got_usr_signal, 0 );
- init_one_signal (SIGPIPE, SIG_IGN, 0 );
-#endif
-}
-
-void
-gnupg_pause_on_sigusr (int which)
-{
-#ifndef HAVE_DOSISH_SYSTEM
-# ifdef HAVE_SIGPROCMASK
- sigset_t mask, oldmask;
-
- assert (which == 1);
- sigemptyset( &mask );
- sigaddset( &mask, SIGUSR1 );
-
- sigprocmask( SIG_BLOCK, &mask, &oldmask );
- while (!caught_sigusr1)
- sigsuspend (&oldmask);
- caught_sigusr1 = 0;
- sigprocmask (SIG_UNBLOCK, &mask, NULL);
-# else
- assert (which == 1);
- sighold (SIGUSR1);
- while (!caught_sigusr1)
- sigpause(SIGUSR1);
- caught_sigusr1 = 0;
- sigrelease(SIGUSR1);
-# endif /*!HAVE_SIGPROCMASK*/
-#endif
-}
-
-
-static void
-do_block( int block )
-{
-#ifndef HAVE_DOSISH_SYSTEM
- static int is_blocked;
-#ifdef HAVE_SIGPROCMASK
- static sigset_t oldmask;
-
- if (block)
- {
- sigset_t newmask;
-
- if (is_blocked)
- log_bug ("signals are already blocked\n");
- sigfillset( &newmask );
- sigprocmask( SIG_BLOCK, &newmask, &oldmask );
- is_blocked = 1;
- }
- else
- {
- if (!is_blocked)
- log_bug("signals are not blocked\n");
- sigprocmask (SIG_SETMASK, &oldmask, NULL);
- is_blocked = 0;
- }
-#else /*!HAVE_SIGPROCMASK*/
- static void (*disposition[MAXSIG])();
- int sig;
-
- if (block)
- {
- if (is_blocked)
- log_bug("signals are already blocked\n");
- for (sig=1; sig < MAXSIG; sig++)
- {
- disposition[sig] = sigset (sig, SIG_HOLD);
- }
- is_blocked = 1;
- }
- else
- {
- if (!is_blocked)
- log_bug ("signals are not blocked\n");
- for (sig=1; sig < MAXSIG; sig++) {
- sigset (sig, disposition[sig]);
- }
- is_blocked = 0;
- }
-#endif /*!HAVE_SIGPROCMASK*/
-#endif /*HAVE_DOSISH_SYSTEM*/
-}
-
-
-void
-gnupg_block_all_signals ()
-{
- do_block(1);
-}
-
-void
-gnupg_unblock_all_signals ()
-{
- do_block(0);
-}
diff --git a/common/util.h b/common/util.h
deleted file mode 100644
index a863f2078..000000000
--- a/common/util.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* util.h - Utility functions for Gnupg
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 GNUPG_COMMON_UTIL_H
-#define GNUPG_COMMON_UTIL_H
-
-#include <gcrypt.h> /* we need this for the memory function protos */
-#include <time.h> /* we need time_t */
-
-/* to pass hash functions to libksba we need to cast it */
-#define HASH_FNC ((void (*)(void *, const void*,size_t))gcry_md_write)
-
-/* get all the stuff from jnlib */
-#include "../jnlib/logging.h"
-#include "../jnlib/argparse.h"
-#include "../jnlib/stringhelp.h"
-#include "../jnlib/mischelp.h"
-#include "../jnlib/strlist.h"
-#include "../jnlib/dotlock.h"
-
-/* handy malloc macros - use only them */
-#define xtrymalloc(a) gcry_malloc ((a))
-#define xtrycalloc(a,b) gcry_calloc ((a),(b))
-#define xtryrealloc(a,b) gcry_realloc ((a),(b))
-#define xtrystrdup(a) gcry_strdup ((a))
-#define xfree(a) gcry_free ((a))
-
-#define xmalloc(a) gcry_xmalloc ((a))
-#define xcalloc(a,b) gcry_xcalloc ((a),(b))
-#define xrealloc(a,b) gcry_xrealloc ((a),(b))
-#define xstrdup(a) gcry_xstrdup ((a))
-
-#define seterr(a) (GNUPG_ ## a)
-
-/*-- maperror.c --*/
-int map_ksba_err (int err);
-int map_gcry_err (int err);
-int map_kbx_err (int err);
-int map_assuan_err (int err);
-int map_to_assuan_status (int rc);
-
-/*-- gettime.c --*/
-time_t gnupg_get_time (void);
-void gnupg_set_time (time_t newtime, int freeze);
-int gnupg_faked_time_p (void);
-
-/*-- signal.c --*/
-void gnupg_init_signals (int mode, void (*fast_cleanup)(void));
-void gnupg_pause_on_sigusr (int which);
-void gnupg_block_all_signals (void);
-void gnupg_unblock_all_signals (void);
-
-
-/*-- replacement functions from funcname.c --*/
-#if !HAVE_VASPRINTF
-#include <stdarg.h>
-int vasprintf (char **result, const char *format, va_list *args);
-int asprintf (char **result, const char *format, ...);
-#endif
-
-#if !HAVE_FOPENCOOKIE
-typedef struct
-{
- ssize_t (*read)(void*,char*,size_t);
- ssize_t (*write)(void*,const char*,size_t);
- int (*seek)(void*,off_t*,int);
- int (*close)(void*);
-} _IO_cookie_io_functions_t;
-typedef _IO_cookie_io_functions_t cookie_io_functions_t;
-FILE *fopencookie (void *cookie, const char *opentype,
- cookie_io_functions_t funclist);
-#endif /*!HAVE_FOPENCOOKIE*/
-
-
-
-/*-- some macros to replace ctype ones and avoid locale problems --*/
-#define spacep(p) (*(p) == ' ' || *(p) == '\t')
-#define digitp(p) (*(p) >= '0' && *(p) <= '9')
-#define hexdigitp(a) (digitp (a) \
- || (*(a) >= 'A' && *(a) <= 'F') \
- || (*(a) >= 'a' && *(a) <= 'f'))
-/* the atoi macros assume that the buffer has only valid digits */
-#define atoi_1(p) (*(p) - '0' )
-#define atoi_2(p) ((atoi_1(p) * 10) + atoi_1((p)+1))
-#define atoi_4(p) ((atoi_2(p) * 100) + atoi_2((p)+2))
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-
-#endif /*GNUPG_COMMON_UTIL_H*/
-
-
-
-
-
-
-
-
diff --git a/contrib/UTF-8-test.txt b/contrib/UTF-8-test.txt
deleted file mode 100644
index 2510f779c..000000000
Binary files a/contrib/UTF-8-test.txt and /dev/null differ
diff --git a/contrib/changes-in-2000 b/contrib/changes-in-2000
deleted file mode 100644
index d9a18d09f..000000000
--- a/contrib/changes-in-2000
+++ /dev/null
@@ -1,114 +0,0 @@
-New features since 1.0.0
-------------------------
-
- * The default symmetric cipher algorithm is now AES (aka
- Rijndael). OpenPGP uses preferences to figure out the algorithm
- to use, so this is only used if the recipient knows how to
- handles AES.
-
- * RSA keys can now be used (either old PGP 2 or new OpenPGP ones).
- RSA key generation is not yet available.
-
- * Unattended key generation.
-
- * Faster and more robust random number generator under W32.
-
- * Encryption is now much faster: About 2 times for 1k bit keys
- and 8 times for 4k keys.
-
- * New encryption keys are generated in a way which allows a much
- faster decryption.
-
- * GnuPG knows what the primary user ID is.
-
- * Large File Support (LFS) is working.
-
- * Ability to run gpg as a full controlled inferior process to speed up
- mass verification of signatures.
-
- * Rewritten key selection code so that GnuPG can better cope with
- multiple subkeys, expiration dates and so on. The drawback is that it
- is slower.
-
- * New utility gpgv which is a stripped down version of gpg to
- be used to verify signatures against a list of trusted keys.
-
- * New command --export-secret-subkeys which outputs the
- the _primary_ key with it's secret parts deleted. This is
- useful for automated decryption/signature creation as it
- allows to keep the real secret primary key offline and
- thereby protecting the key certificates and allowing to
- create revocations for the subkeys. See the FAQ for a
- procedure to install such secret keys.
-
- * New options --show-session-key and --override-session-key
- to help the British folks to somewhat minimize the danger
- of this Orwellian RIP bill.
-
- * New option --no-auto-key-retrieve to disable retrieving of a
- missing public key from a keyserver, even when a keyserver has
- been configured. Useful for dial-up connections.
-
- * HTTP proxy support for keyservers.
-
- * Keyserver support is how also available for W32 platforms (MS
- Windows 95, 98, 2000, NT, ME).
-
- * Experimental gpg-agent support to get the passphrase from a
- daemon which can pop up a query window.
-
-
-rfc2440bis support (PGP 6.5.8 does also handle them)
--------------------
-
- * MDC enhanced encryption is now used with the AES and Twofish
- algorithms to detect manipulated messages.
-
- * The user is now asked for the reason of a revocation.
-
-
-Translations:
-------------
-
- * Enhanced UTF-8 support
-
- * New translations: Danish, Estonian, Indonesian, Portuguese and
- Turkish.
-
-Serious bug fixes:
-------------------
-
- * Fixed a serious bug which could lead to false signature
- verification results when more than one signature is fed to gpg.
- This is the primary reason for releasing this version.
-
- * Protection against the recent Klima/Rosa attck on secret key
- rings.
-
- * Corrected hash calculation for input data larger than 512M - it
- was just wrong, so you might notice bad signature in some very
- big files. It may be wise to keep an old copy of GnuPG around.
-
- * Secret keys are no longer imported unless you use the new option
- --allow-secret-key-import.
-
-PGP quirks
-----------
-
- * Can handle (but not display) PGP's photo IDs.
-
- * Better default values to increase compatibilty with PGP.
-
- * Many other small enhancements to support the not fully-OpenPGP
- compliant PGP versions.
-
-Manual
-------
-
- * The manual called GNU Privacy Handbook (GPH) is a separate
- package and available preformatted in English, German, Italian,
- Russian and Spanish at http://www.gnupg.org/docs.html.
- [Due to the complicated build process, the source is currently
- on available from CVS]
-
-
diff --git a/contrib/why-gnupg b/contrib/why-gnupg
deleted file mode 100644
index 289b9af8c..000000000
--- a/contrib/why-gnupg
+++ /dev/null
@@ -1,80 +0,0 @@
-Why to use GnuPG and not PGP.
------------------------------
-
- * PGP 2 is nearly Free Software but encumbered by the IDEA patent.
-
- * PGP 2 is old, hard to maintain and limited to one set of
- encryption algorithms (RSA + IDEA)
-
- * PGP 2 is not a GNU or Unix Program and threfore not easy to use in
- those environments
-
- * PGP 2 has a couple of minor security flaws
-
- * PGP 5 and 6 are more or less OpenPGP conform but proprietray
- software. Source code is available but there is no way to be sure
- that the distributed binary versions do match the source code.
- Parts of the source code are not published. It is illegal to
- build versions of PGP from source and distribute them (IIRC, there
- is an exception for private users).
-
- * PGP 5 and 6 are not fullty OpenPGP compliant
-
- * PGP 7 is claimed to be OpenPGP compliant but the source code is
- not anymore published.
-
- * At least versions before 6.5.8 had severe coding bugs. We don't
- know about PGP 7.
-
- * PGP 5, 6 and 7 implement complicated methods for key recovering in
- corporate environments. Although this is not a hidden feature,
- this leads to more code and bugs.
-
- * NAI as the vendor of PGP seems to be a major government contractor.
-
- * Given the history of known backdoors in other proprietary software
- (e.g. Lotus Notes), some folks claim that there might also be
- backdoors in PGP 5, 6 and 7. Now there are even more rumors after
- Phil Zimmermann left NAI.
-
- * GnuPG is Free Software under the GNU GPL. It does not use
- patented algorithms.
-
- * Everyone is able to scrutinize the source code, build, distribute
- and use versions of his own or from a trusted party he chooses.
-
- * The build environment is also Free Software and therefore less
- likely tampered with malicious code. The exception here is the MS
- Windows version of GnuPG where the OS is proprietary. The binary
- version however is build using an entirely Free Software OS and
- toolchain (cross-platfrom development under GNU/Linux).
-
- * Security fixes are provided very fast.
-
- * GnuPG is a standard tool in all GNU/Linux systems and used in many
- different environments.
-
- * GnuPG gives reasonable messages and not just "Error encrypting".
-
- * GnuPG supports most of the optional features of the OpenPGP standard.
-
- * GnuPG comes with internationalization support for 16 languages.
-
- * Graphical frontends are available and they divert the task of
- the actual cryptographic operations to GnuPG as a specialized tool
- for this. A library called GPGME is available which makes
- interfacing of GnuPG with other programs quite easy.
-
- * GnuPG is available for all GNU and Unix platforms as well as for
- all MS Windows Operating systems. Porting to VMS, MAC OSX and
- OS/2 is nearly finished.
-
-
-
-
-
-
-
-
-
-
diff --git a/debian/README.Debian b/debian/README.Debian
deleted file mode 100644
index 854a2e43a..000000000
--- a/debian/README.Debian
+++ /dev/null
@@ -1,28 +0,0 @@
-GDBM keyring support
---------------------
-
-GDBM-based keyring support is (and always) was an experimental feature
-which is likely to be removed in future versions. For that reason it
-is not compiled into the Debian package and won't be until and unless
-GDBM support stabilises.
-
-Upgrading from old (<= 0.3.3) versions GnuPG
---------------------------------------------
-
-Due to a bug in the way secret keys were encrypted in versions prior
-to 0.3.3, later version of GnuPG are not backwards compatible and you
-will have to convert your secret keys before using old secret keys
-with recent versions of GnuPG.
-
-The upgrade strategy is described in /usr/doc/gnupg/NEWS.gz, please
-refer to it for more details, but it requires an old copy of the gpg
-and gpgm binaries. They may be on your system as gpg.old and
-gpgm.old, but if they're not you can find gnupg 0.3.2 source and
-binaries for i386, m68k, alpha, powerpc and hurd-i386 at:
-
- <URL:http://people.debian.org/~troup/gnupg/>
-
---
-James Troup <james@nocrew.org>, Horsforth, UK
-Sun, 1 Oct 2000 13:53:12 +0100
-
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index 8d33a87ae..000000000
--- a/debian/changelog
+++ /dev/null
@@ -1,402 +0,0 @@
-gnupg (1.0.5-1) unstable; urgency=low
-
- * New upstream version.
- * debian/README.Debian: fix spelling and update URL.
- * debian/rules (binary): remove the new info files.
- * scripts/config.{guess,sub}: sync with subversions, closes: #95729.
-
- -- James Troup <james@nocrew.org> Mon, 30 Apr 2001 02:12:38 +0100
-
-gnupg (1.0.4-4) unstable; urgency=low
-
- * po/ru.po: patch by Ilya Martynov <m_ilya@agava.com> to replace German
- entries and add missing translations, closes: #93987.
- * g10/revoke.c (ask_revocation_reason): typo fix (s/non longer/no
- longer/g); noticed by Colin Watson <cjw44@flatline.org.uk>, closes:
- #93664.
-
- * Deprecated depreciated; noticed by Vincent Broman
- <broman@spawar.navy.mil>.
-
- * Following two patches are from Vincent Broman.
- * g10/mainproc.c (proc_tree): use iobuf_get_real_fname() in preference
- to iobuf_get_fname().
- * g10/openfile.c (open_sigfile): handle .sign prefixed files correctly.
-
- -- James Troup <james@nocrew.org> Fri, 20 Apr 2001 23:32:44 +0100
-
-gnupg (1.0.4-3) unstable; urgency=medium
-
- * debian/rules (binary): make gpg binary suid, closes: #86433.
- * debian/postinst: don't use suidregister.
- * debian/postrm: removed (only called suidunregister).
- * debian/control: conflict with suidmanager << 0.50.
- * mpi/longlong.h: apply fix for ARM long long artimetic from Philip
- Blundell <philb@gnu.org>, closes: #87487.
- * debian/preinst: the old GnuPG debs have moved to people.debian.org.
- * cipher/random.c: #include <time.h> as well as <sys/time.h>
- * g10/misc.c: likewise.
- * debian/rules: define a strip alias which removes the .comment and
- .note sections.
- * debian/rules (binary-arch): use it.
- * debian/lintian.override: new file; override the SUID warning from
- lintian.
- * debian/rules (binary-arch): install it.
-
- -- James Troup <james@nocrew.org> Sun, 25 Feb 2001 05:24:58 +0000
-
-gnupg (1.0.4-2) stable unstable; urgency=high
-
- * Apply security fix patch from Werner.
- * Apply another patch from Werner to fix bogus warning on Rijndael
- usage.
- * Change section to 'non-US'.
-
- -- James Troup <james@nocrew.org> Mon, 12 Feb 2001 07:47:02 +0000
-
-gnupg (1.0.4-1) stable unstable; urgency=high
-
- * New upstream version.
- * Fixes a serious bug which could lead to false signature verification
- results when more than one signature is fed to gpg.
-
- -- James Troup <james@nocrew.org> Tue, 17 Oct 2000 17:26:17 +0100
-
-gnupg (1.0.3b-1) unstable; urgency=low
-
- * New upstream snapshot version.
-
- -- James Troup <james@nocrew.org> Fri, 13 Oct 2000 18:08:14 +0100
-
-gnupg (1.0.3-2) unstable; urgency=low
-
- * debian/control: Conflict, Replace and Provide gpg-rsa & gpg-rsaref.
- Fix long description to reflect the fact that RSA is no longer
- patented and now included. [#72177]
- * debian/rules: move faq.html to /usr/share/doc/gnupg/ and remove FAQ
- from /usr/share/gnupg/. Thanks to Robert Luberda
- <robert@pingu.ii.uj.edu.pl> for noticing. [#72151]
- * debian/control: Suggest new package gnupg-doc. [#64323, #65560]
- * utils/secmem.c (lock_pool): don't bomb out if mlock() returns ENOMEM,
- as Linux will do this if resource limits (or other reasons) prevent
- memory from being locked, instead treat it like permission was denied
- and warn but continue. Thanks to Topi Miettinen
- <Topi.Miettinen@nic.fi>. [#70446]
- * g10/hkp.c (not_implemented): s/ist/is/ in error message.
- * debian/README.Debian: add a note about GDBM support and why it is
- disabled. Upstream already fixed the manpage. [#65913]
- * debian/rules (binary-arch): fix the Spanish translation to be 'es' not
- 'es_ES' at Nicolás Lichtmaier <nick@debian.org>'s request. [#57314]
-
- -- James Troup <james@nocrew.org> Sun, 1 Oct 2000 14:55:03 +0100
-
-gnupg (1.0.3-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Mon, 18 Sep 2000 15:56:54 +0100
-
-gnupg (1.0.2-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Thu, 13 Jul 2000 20:26:50 +0100
-
-gnupg (1.0.1-2) unstable; urgency=low
-
- * debian/control (Build-Depends): added.
- * debian/copyright: corrected location of copyright file. Removed
- references to Linux. Removed warnings about beta nature of GnuPG.
- * debian/rules (binary-arch): install documentation into
- /usr/share/doc/gnupg/ and pass mandir to make install to ensure the
- manpages go to /usr/share/man/.
- * debian/postinst: create /usr/doc/gnupg symlink.
- * debian/prerm: new file; remove /usr/doc/gnupg symlink.
- * debian/rules (binary-arch): install prerm.
- * debian/control (Standards-Version): updated to 3.1.1.1.
-
- -- James Troup <james@nocrew.org> Thu, 30 Dec 1999 16:16:49 +0000
-
-gnupg (1.0.1-1) unstable; urgency=low
-
- * New upstream version.
- * doc/gpg.1: updated to something usable from
- ftp://ftp.gnupg.org/pub/gcrypt/gnupg/gpg.1.gz.
-
- -- James Troup <james@nocrew.org> Sun, 19 Dec 1999 23:47:10 +0000
-
-gnupg (1.0.0-3) unstable; urgency=low
-
- * debian/rules (build): remove the stunningly ill-advised --host option
- to configure. [#44698, #48212, #48281]
-
- -- James Troup <james@nocrew.org> Tue, 26 Oct 1999 01:12:59 +0100
-
-gnupg (1.0.0-2) unstable; urgency=low
-
- * debian/rules (binary-arch): fix the permissions on the
- modules. [#47280]
- * debian/postinst, debian/postrm: fix the package name passed to
- suidregister. [#45013]
- * debian/control: update long description. [#44636]
- * debian/rules (build): pass the host explicitly to configure to avoid
- problems on sparc64. [(Should fix) #44698].
-
- -- James Troup <james@nocrew.org> Wed, 20 Oct 1999 23:39:05 +0100
-
-gnupg (1.0.0-1) unstable; urgency=low
-
- * New upstream release. [#44545]
-
- -- James Troup <james@nocrew.org> Wed, 8 Sep 1999 00:53:02 +0100
-
-gnupg (0.9.10-2) unstable; urgency=low
-
- * debian/rules (binary-arch): install lspgpot. Requested by Kai
- Henningsen <kai@khms.westfalen.de>. [#42288]
- * debian/rules (binary-arch): correct the path where modules are looked
- for. Reported by Karl M. Hegbloom <karlheg@odin.cc.pdx.edu>. [#40881]
- * debian/postinst, debian/postrm: under protest, register gpg the
- package with suidmanager and make it suid by default.
- [#29780,#32590,#40391]
-
- -- James Troup <james@nocrew.org> Tue, 10 Aug 1999 00:12:40 +0100
-
-gnupg (0.9.10-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Fri, 6 Aug 1999 01:16:21 +0100
-
-gnupg (0.9.9-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Sun, 25 Jul 1999 01:06:31 +0100
-
-gnupg (0.9.8-1) unstable; urgency=low
-
- * New upstream version.
- * debian/rules (binary-arch): don't create a gpgm manpage as the binary
- no longer exists. Noticed by Wichert Akkerman
- <wichert@cs.leidenuniv.nl>. [#38864]
-
- -- James Troup <james@nocrew.org> Sun, 27 Jun 1999 01:07:58 +0100
-
-gnupg (0.9.7-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Tue, 25 May 1999 13:23:24 +0100
-
-gnupg (0.9.6-1) unstable; urgency=low
-
- * New upstream version.
- * debian/copyright: update version number, noticed by Lazarus Long
- <lazarus@frontiernet.net>.
- * debian/control (Depends): depend on makedev (>= 2.3.1-13) to ensure
- that /dev/urandom exists; reported by Steffen Markert
- <smort@rz.tu-ilmenau.de>. [#32076]
-
- -- James Troup <james@nocrew.org> Tue, 11 May 1999 21:06:27 +0100
-
-gnupg (0.9.5-1) unstable; urgency=low
-
- * New upstream version.
- * debian/control (Description): no tabs. [Lintian]
-
- -- James Troup <james@nocrew.org> Wed, 24 Mar 1999 22:37:40 +0000
-
-gnupg (0.9.4-1) unstable; urgency=low
-
- * New version.
- * debian/control: s/GNUPG/GnuPG/
-
- -- Werner Koch <wk@isil.d.suttle.de> Mon, 8 Mar 1999 19:58:28 +0100
-
-gnupg (0.9.3-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Mon, 22 Feb 1999 22:55:04 +0000
-
-gnupg (0.9.2-1) unstable; urgency=low
-
- * New version.
- * debian/rules (build): Removed CFLAGS as the default is now sufficient.
- * debian/rules (clean): remove special handling cleanup in intl.
-
- -- Werner Koch <wk@isil.d.suttle.de> Wed, 20 Jan 1999 21:23:11 +0100
-
-gnupg (0.9.1-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Sat, 9 Jan 1999 22:29:11 +0000
-
-gnupg (0.9.0-1) unstable; urgency=low
-
- * New upstream version.
- * g10/armor.c (armor_filter): add missing new line in comment string; as
- noticed by Stainless Steel Rat <ratinox@peorth.gweep.net>.
-
- -- James Troup <james@nocrew.org> Tue, 29 Dec 1998 20:22:43 +0000
-
-gnupg (0.4.5-1) unstable; urgency=low
-
- * New upstream version.
- * debian/rules (clean): force removal of intl/libintl.h which the
- Makefiles fail to remove properly.
-
- -- James Troup <james@nocrew.org> Tue, 8 Dec 1998 22:40:23 +0000
-
-gnupg (0.4.4-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Sat, 21 Nov 1998 01:34:29 +0000
-
-gnupg (0.4.3-1) unstable; urgency=low
-
- * New upstream version.
- * debian/README.Debian: new file; contains same information as is in the
- preinst. Suggested by Wichert Akkerman <wichert@cs.leidenuniv.nl>.
- * debian/rules (binary-arch): install `README.Debian'
- * debian/control (Standards-Version): updated to 2.5.0.0.
-
- -- James Troup <james@nocrew.org> Sun, 8 Nov 1998 19:08:12 +0000
-
-gnupg (0.4.2-1) unstable; urgency=low
-
- * New upstream version.
- * debian/preinst: improve message about the NEWS file which isn't
- actually installed when it's referred to, thanks to Martin Mitchell
- <martin@debian.org>.
- * debian/rules (binary-arch): don't install the now non-existent `rfcs',
- but do install `OpenPGP'.
-
- -- James Troup <james@nocrew.org> Sun, 18 Oct 1998 22:48:34 +0100
-
-gnupg (0.4.1-1) unstable; urgency=low
-
- * New upstream version.
- * debian/rules (binary-arch): fix the gpgm manpage symlink now installed
- by `make install'.
-
- -- James Troup <james@nocrew.org> Sun, 11 Oct 1998 17:01:21 +0100
-
-gnupg (0.4.0-1) unstable; urgency=high
-
- * New upstream version. [#26717]
- * debian/copyright: tone down warning about alpha nature of gnupg.
- * debian/copyright: new maintainer address.
- * debian/control: update extended description.
- * debian/rules (binary-arch): install FAQ and all ChangeLogs.
- * debian/preinst: new; check for upgrade from (<= 0.3.2-1) and warn about
- incompatibilities in keyring format and offer to move old copy out of
- gpg out of the way for transition strategy and inform the user about
- the old copies of gnupg available on my web page.
- * debian/rules (binary-arch) install preinst.
- * debian/rules (binary-arch): don't depend on the test target as it is
- now partially interactive (tries to generate a key, which requires
- someone else to be using the computer).
-
- -- James Troup <james@nocrew.org> Thu, 8 Oct 1998 00:47:07 +0100
-
-gnupg (0.3.2-1) unstable; urgency=low
-
- * New upstream version.
- * debian/control (Maintainer): new address.
- * debian/copyright: updated list of changes.
-
- -- James Troup <james@nocrew.org> Thu, 9 Jul 1998 21:06:07 +0200
-
-gnupg (0.3.1-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <james@nocrew.org> Tue, 7 Jul 1998 00:26:21 +0200
-
-gnupg (0.3.0-2) unstable; urgency=low
-
- * Applied bug-fix patch from Werner.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Fri, 26 Jun 1998 12:18:29 +0200
-
-gnupg (0.3.0-1) unstable; urgency=low
-
- * New upstream version.
- * debian/control: rewrote short and long description.
- * cipher/Makefile.am: link tiger with -lc.
- * debian/rules (binary-arch): strip loadable modules.
- * util/secmem.c (lock_pool): get rid of errant test code; fix from
- Werner Koch <wk@isil.d.shuttle.de>.
- * debian/rules (test): new target which runs gnupg's test suite.
- binary-arch depends on it, to ensure it's run whenever the package is
- built.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Thu, 25 Jun 1998 16:04:57 +0200
-
-gnupg (0.2.19-1) unstable; urgency=low
-
- * New upstream version.
- * debian/control: Updated long description.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Sat, 30 May 1998 12:12:35 +0200
-
-gnupg (0.2.18-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <J.J.Troup@comp.brad.ac.uk> Sat, 16 May 1998 11:52:47 +0200
-
-gnupg (0.2.17-1) unstable; urgency=high
-
- * New upstream version.
- * debian/control (Standards-Version): updated to 2.4.1.0.
- * debian/control: tone down warning about alpha nature of gnupg, as per
- README.
- * debian/copyright: ditto.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Mon, 4 May 1998 22:36:51 +0200
-
-gnupg (0.2.15-1) unstable; urgency=high
-
- * New upstream version.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Fri, 10 Apr 1998 01:12:20 +0100
-
-gnupg (0.2.13-1) unstable; urgency=high
-
- * New upstream version.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Wed, 11 Mar 1998 01:52:51 +0000
-
-gnupg (0.2.12-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Sat, 7 Mar 1998 13:52:40 +0000
-
-gnupg (0.2.11-1) unstable; urgency=low
-
- * New upstream version.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Wed, 4 Mar 1998 01:32:12 +0000
-
-gnupg (0.2.10-1) unstable; urgency=low
-
- * New upstream version.
- * Name changed upstream.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Mon, 2 Mar 1998 07:32:05 +0000
-
-g10 (0.2.7-1) unstable; urgency=low
-
- * Initial release.
-
- -- James Troup <jjtroup@comp.brad.ac.uk> Fri, 20 Feb 1998 02:05:34 +0000
-
-Local variables:
-mode: debian-changelog
-End:
diff --git a/debian/control b/debian/control
deleted file mode 100644
index 5b158daf5..000000000
--- a/debian/control
+++ /dev/null
@@ -1,24 +0,0 @@
-Source: gnupg
-Section: non-US
-Priority: optional
-Maintainer: James Troup <james@nocrew.org>
-Standards-Version: 3.1.1.1
-Build-Depends: gettext, libgdbmg1-dev, libz-dev
-
-Package: gnupg
-Architecture: any
-Depends: ${shlibs:Depends}, makedev (>= 2.3.1-13)
-Suggests: gnupg-doc
-Conflicts: gpg-rsa, gpg-rsaref, suidmanager (<< 0.50)
-Replaces: gpg-rsa, gpg-rsaref
-Provides: gpg-rsa, gpg-rsaref
-Description: GNU privacy guard - a free PGP replacement.
- GnuPG is GNU's tool for secure communication and data storage.
- It can be used to encrypt data and to create digital signatures.
- It includes an advanced key management facility and is compliant
- with the proposed OpenPGP Internet standard as described in RFC2440.
- .
- GnuPG does not use use any patented algorithms so it cannot be
- compatible with PGP2 because it uses IDEA (which is patented
- worldwide) and RSA. RSA's patent expired on the 20th September 2000,
- and it is now included in GnuPG.
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index e5d99f688..000000000
--- a/debian/copyright
+++ /dev/null
@@ -1,29 +0,0 @@
-This is Debian GNU's prepackaged version of GnuPG, a free PGP
-replacement.
-
-This package was put together by me, James Troup <james@nocrew.org>,
-from the sources, which I obtained from
-ftp://ftp.gnupg.org/pub/gcrypt/gnupg/gnupg-1.0.5.tar.gz. The changes
-were minimal, namely:
-
-- adding support for the Debian package maintenance scheme, by adding
- various debian/* files.
-
-Program Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-Modifications for Debian Copyright (C) 1998, 1999, 2000, 2001 James Troup.
-
-GnuPG is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-GnuPG is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License with
-your Debian GNU system, in /usr/share/common-licenses/GPL, or with the
-Debian GNU gnupg source package as the file COPYING. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-Boston, MA 02111-1307, USA.
diff --git a/debian/distfiles b/debian/distfiles
deleted file mode 100644
index f7f226104..000000000
--- a/debian/distfiles
+++ /dev/null
@@ -1,6 +0,0 @@
-README.Debian
-changelog
-control
-copyright
-preinst
-rules
diff --git a/debian/lintian.override b/debian/lintian.override
deleted file mode 100644
index c35ed27b3..000000000
--- a/debian/lintian.override
+++ /dev/null
@@ -1 +0,0 @@
-gnupg: setuid-binary usr/bin/gpg 4755 root/root
diff --git a/debian/preinst b/debian/preinst
deleted file mode 100644
index 607944c7c..000000000
--- a/debian/preinst
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-
-set -e
-
-case "$1" in
- upgrade|install)
- # Try to gracefully handle upgrades from a pre-0.3.3 version
-
- if [ ! -z $2 ]; then
- set +e
- dpkg --compare-versions $2 \<= 0.3.2-1
- result=$?
- set -e
- if [ $result = 0 ]; then
- cat <<EOF
-Due to a bug in the way secret keys were encrypted in versions prior
-to 0.3.3, this version of gnupg is not backwards compatible with $2
-which you have (had) installed on your system.
-
-There is an upgrade strategy (see /usr/doc/gnupg/NEWS.gz after this
-version is installed), but it requires an old copy of the gpg and gpgm
-EOF
- echo -n "binaries; shall I make copies of them for you (Y/n)? "
- read answer
- if [ ! "$answer" = "n" -a ! "$answer" = "N" ]; then
- cp /usr/bin/gpg /usr/bin/gpg.old
- cp /usr/bin/gpgm /usr/bin/gpgm.old
- echo "Okay, done. The old versions are /usr/bin/gpg*.old"
- else
- echo "Okay, I haven't made backups."
- fi;
- cat <<EOF
-
-If at any stage you need a pre-0.3.3 gnupg, you can find source and
-binaries for i386, m68k, alpha, powerpc and hurd-i386 at
-
- http://people.debian.org/~troup/gnupg/
-
-Press return to continue
-EOF
- read foo
- fi;
- fi;
- ;;
- abort-upgrade)
- ;;
-esac
diff --git a/debian/rules b/debian/rules
deleted file mode 100644
index 400472edf..000000000
--- a/debian/rules
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/make -f
-# debian/rules file - for GNUPG (1.0.5)
-# Based on sample debian/rules file - for GNU Hello (1.3).
-# Copyright 1994,1995 by Ian Jackson.
-# Copyright 1998 James Troup
-# I hereby give you perpetual unlimited permission to copy,
-# modify and relicense this file, provided that you do not remove
-# my name from the file itself. (I assert my moral right of
-# paternity under the Copyright, Designs and Patents Act 1988.)
-# This file may have to be extensively modified
-
-STRIP=strip --remove-section=.comment --remove-section=.note
-
-build:
- $(checkdir)
- ./configure --prefix=/usr --with-included-gettext
- $(MAKE)
- touch build
-
-test: build
- $(checkdir)
- make -C checks check || exit 127
- touch test
-
-clean:
- $(checkdir)
- -rm -f build
- -$(MAKE) -i distclean || $(MAKE) -f Makefile.in distclean
- -rm -rf debian/tmp debian/*~ debian/files* debian/substvars
-
-binary-indep:
-
-binary-arch: checkroot build # test
- $(checkdir)
- -rm -rf debian/tmp
- install -d debian/tmp/DEBIAN/
- install -m 755 debian/preinst debian/prerm debian/postinst debian/tmp/DEBIAN/
- $(MAKE) prefix=`pwd`/debian/tmp/usr mandir=`pwd`/debian/tmp/usr/share/man install
- # copies of the manpage which can't be grokked by install-info
- rm debian/tmp/usr/info/*
- $(STRIP) debian/tmp/usr/bin/*
- chmod 4755 debian/tmp/usr/bin/gpg
- chmod 644 debian/tmp/usr/lib/gnupg/*
- sed -e "s#../g10/gpg#gpg#" < tools/lspgpot > debian/tmp/usr/bin/lspgpot
- chmod 755 debian/tmp/usr/bin/lspgpot
- $(STRIP) --strip-unneeded debian/tmp/usr/lib/gnupg/*
- # In response to #53714... no idea if it's correct, will check with upstream
- mv debian/tmp/usr/share/locale/es_ES debian/tmp/usr/share/locale/es
- sed -e "s#/usr/local/#/usr/#" < debian/tmp/usr/share/man/man1/gpg.1 \
- > debian/tmp/usr/share/man/man1/gpg.1.new
- mv debian/tmp/usr/share/man/man1/gpg.1.new debian/tmp/usr/share/man/man1/gpg.1
- gzip -9v debian/tmp/usr/share/man/man1/*
- # Remove from /usr/share/gnupg that we install into /usr/share/doc/gnupg/
- rm debian/tmp/usr/share/gnupg/FAQ debian/tmp/usr/share/gnupg/faq.html
- install -d debian/tmp/usr/share/doc/gnupg/
- install -m 644 debian/changelog debian/tmp/usr/share/doc/gnupg/changelog.Debian
- install -m 644 debian/README.Debian README NEWS THANKS TODO doc/DETAILS \
- doc/FAQ doc/faq.html doc/OpenPGP debian/tmp/usr/share/doc/gnupg/
- for i in po util mpi cipher tools g10 checks include; do \
- install -m 644 $$i/ChangeLog debian/tmp/usr/share/doc/gnupg/changelog.$$i; done
- install -m 644 ChangeLog debian/tmp/usr/share/doc/gnupg/changelog.toplevel
- gzip -9v debian/tmp/usr/share/doc/gnupg/*
- ln -s changelog.g10.gz debian/tmp/usr/share/doc/gnupg/changelog.gz
- install -m 644 debian/copyright debian/tmp/usr/share/doc/gnupg/
- install -d debian/tmp/usr/share/lintian/overrides/
- install -m 644 debian/lintian.override debian/tmp/usr/share/lintian/overrides/gnupg
- dpkg-shlibdeps g10/gpg
- dpkg-gencontrol -isp
- chown -R root.root debian/tmp
- chmod -R go=rX debian/tmp
- dpkg --build debian/tmp ..
-
-define checkdir
- test -f g10/g10.c -a -f debian/rules
-endef
-
-# Below here is fairly generic really
-
-binary: binary-indep binary-arch
-
-checkroot:
- $(checkdir)
- test root = "`whoami`"
-
-.PHONY: binary binary-arch binary-indep clean checkroot
diff --git a/doc/ChangeLog b/doc/ChangeLog
deleted file mode 100644
index 7c200a409..000000000
--- a/doc/ChangeLog
+++ /dev/null
@@ -1,500 +0,0 @@
-2002-10-12 Werner Koch <wk@gnupg.org>
-
- * DETAILS (KEY_CREATED): Enhanced by fingerprint.
-
-2002-10-03 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Note that '#' means secret-key-unavailable, and that
- keyserver schemes are case-insensitive.
-
-2002-09-30 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Note that --pgp2 disables --textmode when encrypting.
-
-2002-09-20 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Some minor language cleanup.
-
-2002-09-20 Werner Koch <wk@gnupg.org>
-
- * DETAILS: s/XORed/ORed/.
-
-2002-09-15 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Add rebuild-keydb-caches.
-
-2002-09-12 David Shaw <dshaw@jabberwocky.com>
-
- * DETAILS: Fix batch key generation example.
-
-2002-09-11 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (EXTRA_DIST): Include gnupg-32.reg
-
-2002-09-02 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Updated the charset option.
-
- * DETAILS: Added status IMPORT_OK.
-
- * gnupg.7: New mini man page.
-
-2002-08-30 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Document keyserver-option include-subkeys. Note that
- honor-http-proxy is a keyserver-option now.
-
- * DETAILS: Add "Key not trusted" to INV_RECP status code.
-
-2002-08-23 Werner Koch <wk@gnupg.org>
-
- * faq.raw: Updated. New Maintainer is David D. Scribner.
-
-2002-08-22 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Clarify meaning of keyserver option include-revoked.
-
-2002-08-21 Werner Koch <wk@gnupg.org>
-
- * DETAILS: Added IMPORT_PROBLEM.
-
-2002-08-20 David Shaw <dshaw@jabberwocky.com>
-
- * DETAILS: Clarify that trust letters 'q' and '-' can be treated
- identically.
-
- * gpg.sgml: Document --ignore-mdc-error.
-
-2002-08-06 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Clarify that only long-form options can go in the
- config file.
-
-2002-08-06 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Fixed doc regarding the name change of the option
- file.
-
-2002-07-30 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Clarify --edit/addrevoker (sensitive), and
- --keyserver-options (--import/export-options may be used as well).
- Document --import-options and --export-options with their various
- options. --show-photos now works during signature verification as
- well. Document --exec-path. Note in --simple-sk-checksum that
- the passphrase must be changed for this to take effect. Note that
- --pgp7 does not disable MDC. Document --no-mdc-warning.
-
-2002-07-25 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Document new --delete behaviour.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Clarify the differences between "pref" and "showpref".
- Note in "setpref" that a list of available algorithms can be
- printed with "gpg -v --version". Note in "updpref" that we don't
- select keys via attribute uids, so preferences there will be
- ignored.
-
-2002-07-01 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Clarify "group".
-
-2002-07-01 Werner Koch <wk@gnupg.org>
-
- * Makefile.am: Due to problems with VPATH builds we don't try to
- build the texi vesions of the manual pages anymore automatically.
-
-2002-06-30 Werner Koch <wk@gnupg.org>
-
- * README.W32: Adjusted some descriptions. Fixed the regsitry
- entry descriptions.
-
-2002-06-21 David Shaw <dshaw@jabberwocky.com>
-
- * DETAILS: Document "uat".
-
- * gpg.sgml: Document
- --personal-{compress|digest|compress}-preferences, --group, and
- add comments to --expert.
-
-2002-06-17 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Grammar fix.
-
-2002-06-03 David Shaw <dshaw@jabberwocky.com>
-
- * DETAILS: Details of ATTRIBUTE.
-
- * gpg.sgml: Document --attribute-fd
-
-2002-06-03 Timo Schulz <ts@winpt.org>
-
- * DETAILS: Add ATTRIBUTE.
-
-2002-05-31 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Add "edit/addrevoker". Document --desig-revoke. Note
- that -z and --compress are the same option. Note that
- --digest-algo can no longer violate OpenPGP with a non-160 bit
- hash with DSA. Document --cert-digest-algo with suitable warnings
- not to use it. Note the default s2k-cipher-algo is now CAST5.
- Note that --force-v3-sigs overrides --ask-sig-expire. Revise
- --expert documentation, as it is now definitely legal to have more
- than one photo ID on a key. --preference-list is now
- --default-preference-list with the new meaning. Document
- --personal-preference-list.
-
- * DETAILS: Document "Revoker" for batch key generation.
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: sgml syntax fix.
-
-2002-05-12 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Fixed URL in the description section.
-
- * faq.raw: Minor typo fixes noted by kromJx@myrealbox.com.
-
-2002-05-11 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Typo fix.
-
-2002-05-07 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Add entries for --sk-comments, --no-sk-comments,
- --pgp7, and --no-pgp7. Fix --pgp2 and --pgp6: the proper name is
- --escape-from-lines and not --escape-from.
-
-2002-04-30 Timo Schulz <ts@winpt.org>
-
- * gpg.sgml: Add an entry for --encrypt-files and --decrypt-files.
-
-2002-04-29 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Fix minor error in --pgp6 documentation: it does not
- imply --digest-algo MD5
-
-2002-04-29 Werner Koch <wk@gnupg.org>
-
- * samplekeys.asc: Added gnupg distribution key 57548DCD.
-
- * faq.raw: Inserted Douglas Calvert as new maintainer. Acknowledge
- Nils. Add entry about trust packet parsing problems.
-
-2002-04-24 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Add some documentation for
- --edit/{addphoto|showphoto|nrsign|nrlsign}, and the difference
- between %t and %T in photo viewer command lines.
-
-2002-04-23 Stefan Bellon <sbellon@sbellon.de>
-
- * gpg.sgml: Moved options from section "COMMANDS" to
- section "OPTIONS".
-
-2002-04-20 David Shaw <dshaw@jabberwocky.com>
-
- * samplekeys.asc: Added 0x5B0358A2
-
-2002-04-19 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Add "%t" flag for photo IDs, a note about primary
- having different meanings for photo and regular IDs, rename
- --default-check-level to --default-cert-check-level, add
- --auto-check-trustdb, and --pgp6.
-
- * DETAILS: Add EXPSIG, EXPKEYSIG, and KEYEXPIRED. Add notes to
- SIGEXPIRED (deprecated), and VALIDSIG (added expiration date).
- Add "Preferences" command to unattended key generation
- instructions. Also fixed a few typos.
-
- * samplekeys.asc: new (added to EXTRA_DIST in Makefile.am as well)
-
-2002-01-31 Marcus Brinkmann <marcus@g10code.de>
-
- * DETAILS: Fix a spelling error, correct IMPORTED_RES to IMPORT_RES,
- correct INV_RECP (the second occurence) to NO_RECP.
-
-2002-04-03 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: auto-key-retrieve is a keyserver-option (noted by
- Roger Sondermann).
-
-2002-03-27 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: --pgp2 also means --disable-mdc, --no-ask-sig-expire,
- and --no-ask-cert-expire. It does not mean --no-force-v3-sigs
- (noted by Timo).
-
-2002-03-27 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Add a few notes about --pgp2 meaning MIT PGP 2.6.2,
- and keyserver details about HKP and NAI HKP.
-
-2002-03-18 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Change meaning of --allow-non-selfsigned-uid to match
- change in code, and add --no-allow-non-selfsigned-uid.
-
-2002-03-13 Werner Koch <wk@gnupg.org>
-
- * faq.raw: Due to a lack of time Nils can't serve anymore as a
- maintainer. Removed his address and setup a generic address.
-
-2002-03-06 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Add an entry for --export-ownertrust. Suggested by
- Bernhard Reiter.
-
-2002-01-26 Timo Schulz <ts@winpt.org>
-
- * gnupg-w32.reg: New. Registry file for W32 in registry format.
-
-2002-01-26 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: A few words about --gpg-agent-info and GPG_AGENT_INFO.
-
-2002-01-25 Timo Schulz <ts@winpt.org>
-
- * README.W32: Modify the filename because now the .exe extension
- is automatically added to the binary.
-
-2002-01-14 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Talk about PGP 5 and higher.
-
-2002-01-11 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Added documentation for --{no-}ask-cert-expire,
- --{no-}ask-sig-expire, and revise --expert (it doesn't switch on
- the expiration prompt anymore) and --default-check-level (to be
- clearer as to what makes a good key check before signing).
-
-2002-01-07 Werner Koch <wk@gnupg.org>
-
- * DETAILS: Removed the comment that unattended key generation is
- experimental. It is now a standard feature.
-
-2001-12-22 David Shaw <dshaw@jabberwocky.com>
-
- * gpg.sgml: Fixed a few typos.
-
- * gpg.sgml: Added documentation for --show-photos,
- --no-show-photos, --photo-viewer, --nrsign-key,
- --default-check-level, --search-keys, --keyserver-options,
- --show-notation, --no-show-notation, --show-policy-url,
- --no-show-policy-url, --for-your-eyes-only,
- --no-for-your-eyes-only, --pgp2, --no-pgp2,
- --no-permission-warning, --expert, --no-expert.
-
-2001-10-31 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Add a remark on how to get the long key ID. Suggested
- by Sebastian Klemke.
-
-2001-10-23 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Add missing tag.
-
-2001-09-28 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Add a note on option parsing.
-
-2001-09-24 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Described --{update,check}-trustdb.
-
-2001-09-03 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml, gpgv.sgml: Removed GDBM stuff.
-
-2001-08-29 Werner Koch <wk@gnupg.org>
-
- * faq.raw: Described how to delete a secret key w/o a public key
- and changed the entry on updating the preferences.
-
-2001-08-08 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Documented --print-mds and marked the --print-md * as
- deprecated because it does not work in the W32 version. Suggested
- by John Kane.
- (WARNINGS): Typo fix.
- (--with-colons): Clarified that the output is in UTF-8.
-
-2001-08-01 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Added --ignore-valid-from
-
-2001-04-20 Werner Koch <wk@gnupg.org>
-
- * faq.raw (Maintained-by): Removed note that load-extension is not
- available under Windoze.
-
- * gpg.sgml: Add new --charset UTF-8.
-
-2001-04-19 Werner Koch <wk@gnupg.org>
-
- * faq.raw: Add a note about dates displayed as ????-??-??.
-
-2001-04-17 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (%.texi): Add rules to create .texi from .sgml.
- However we can't automate this because automake does not like
- .texi files as BUILT_SOURCES.
- (%.dvi,%.ps): Removed these rules, because they are not needed
- and get in the way of automake's dvi target
-
- * HACKING: Changed CVS description.
-
-2001-04-06 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Small typo fixes by Florian Weimer.
-
-2001-03-27 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Add --no-sig-cache and --no-sig-create-check.
-
-2001-03-23 Werner Koch <wk@gnupg.org>
-
- * DETAILS: New status UNEXPECTED.
-
-2001-03-13 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Described --fixed-list-mode.
-
-2001-03-06 Werner Koch <wk@gnupg.org>
-
- * gpgv.sgml: Changed some gpg to gpgv. Thanks to John A. Murdie.
-
-2001-03-03 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Tell something about the 0x12345678! key ID syntax.
-
-2001-01-18 Werner Koch <wk@gnupg.org>
-
- * README.W32: Changed building instructions for MinGW32/CPD 0.3
-
-2001-01-09 Werner Koch <wk@gnupg.org>
-
- * DETAILS: Fixed docs for NEED_PASSPHRASE and added USERID_HINT.
-
-2000-11-30 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Fixed the description of --verify. Add a short note
- the warnings sections.
-
-2000-10-19 Werner Koch <wk@gnupg.org>
-
- * gpg.sgml: Fixed doc for --allow-non-selfsigned-uid.
- Add entry for --ignore-crc-error.
-
-2000-10-18 Werner Koch <wk@gnupg.org>
-
- * OpenPGP: Dropped the paragraph that RSA is not implemented.
-
-2000-10-14 Werner Koch <wk@gnupg.org>
-
- * faq.raw: Add an answer to the problem of multiple signatures.
-
-Wed Oct 4 15:50:18 CEST 2000 Werner Koch <wk@openit.de>
-
- * gpgv.sgml: New.
- * Makefile.am: build it.
-
-Thu Sep 14 14:20:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * faq.raw: New.
- * Makefile.am: Support to build FAQs
-
-Wed Jul 12 13:32:06 CEST 2000 Werner Koch <wk@>
-
- * gpg.sgml: Add a note about the availability of the GPH.
-
-2000-07-03 13:59:24 Werner Koch (wk@habibti.openit.de)
-
- * DETAILS, FAQ: Typo fixes by Yosiaki IIDA.
-
-2000-05-12 10:57:21 Werner Koch (wk@habibti.openit.de)
-
- * gpg.sgml: Documented --no-tty.
-
-2000-03-09 15:01:51 Werner Koch (wk@habibti.openit.de)
-
- * DETAILS: Ad a short blurb about unattended key generation.
-
-Wed Feb 9 15:33:44 CET 2000 Werner Koch <wk@gnupg.de>
-
- * gpg.sgml: Describe --ignore-time-conflict.
-
- * gpg.sgml: Fixed a few typos. Thanks to Holger Trapp.
-
-Wed Jan 5 11:51:17 CET 2000 Werner Koch <wk@gnupg.de>
-
- * FAQ: Enhanced answer for the 3des-s2k bug.
-
-Sat Dec 4 12:30:28 CET 1999 Werner Koch <wk@gnupg.de>
-
- * gpg.sgml: Add section about the user ID
-
-Mon Nov 22 11:14:53 CET 1999 Werner Koch <wk@gnupg.de>
-
- * gph: Removed the directory from the dist becuase it will
- go into it's own package.
-
-Thu Sep 23 09:52:58 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * README.W32: New.
-
-Mon Sep 6 19:59:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * Makefile.am (SUBDIRS): New subdir gph for the manual.
-
-Thu Jul 22 20:03:03 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * gpg.sgml (--always-trust): Added.
-
-Wed Jul 14 19:42:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * Makefile.am: Create a dummy man page if docbook-to-man is missing.
-
-Wed Jun 16 20:16:21 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * gpg1.pod: Removed.
- * gpg.sgml: New. Replaces the pod file
- * Makefile.am: Add rule to make a man file from sgml
-
-Tue Jun 15 12:21:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * Makefile.in.in: Use DESTDIR.
-
-Mon May 31 19:41:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * gpg.1pod: Enhanced the Bugs section (Michael).
-
-Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * gpg.1pod: Spelling and grammar corrections (John A. Martin)
- * FAQ: Ditto.
- * DETAILS: Ditto.
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/doc/DETAILS b/doc/DETAILS
deleted file mode 100644
index 1ba9df159..000000000
--- a/doc/DETAILS
+++ /dev/null
@@ -1,990 +0,0 @@
-
-Format of colon listings
-========================
-First an example:
-
-$ gpg --fixed-list-mode --with-colons --list-keys \
- --with-fingerprint --with-fingerprint wk@gnupg.org
-
-pub:f:1024:17:6C7EE1B8621CC013:899817715:1055898235::m:::scESC:
-fpr:::::::::ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013:
-uid:f::::::::Werner Koch <wk@g10code.com>:
-uid:f::::::::Werner Koch <wk@gnupg.org>:
-sub:f:1536:16:06AD222CADF6A6E1:919537416:1036177416:::::e:
-fpr:::::::::CF8BCC4B18DE08FCD8A1615906AD222CADF6A6E1:
-sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc:
-fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4:
-
-The double --with-fingerprint prints the fingerprint for the subkeys
-too, --fixed-list-mode is themodern listing way printing dates in
-seconds since Epoch and does not merge the first userID with the pub
-record.
-
-
- 1. Field: Type of record
- pub = public key
- crt = X.509 certificate
- crs = X.509 certificate and private key available
- sub = subkey (secondary key)
- sec = secret key
- ssb = secret subkey (secondary key)
- uid = user id (only field 10 is used).
- uat = user attribute (same as user id except for field 10).
- sig = signature
- rev = revocation signature
- fpr = fingerprint: (fingerprint is in field 10)
- pkd = public key data (special field format, see below)
- grp = reserved for gpgsm
- rvk = revocation key
-
- 2. Field: A letter describing the calculated trust. This is a single
- letter, but be prepared that additional information may follow
- in some future versions. (not used for secret keys)
- o = Unknown (this key is new to the system)
- i = The key is invalid (e.g. due to a missing self-signature)
- d = The key has been disabled
- r = The key has been revoked
- e = The key has expired
- - = Unknown trust (i.e. no value assigned)
- q = Undefined trust
- '-' and 'q' may safely be treated as the same
- value for most purposes
- n = Don't trust this key at all
- m = There is marginal trust in this key
- f = The key is full trusted.
- u = The key is ultimately trusted; this is only used for
- keys for which the secret key is also available.
- 3. Field: length of key in bits.
- 4. Field: Algorithm: 1 = RSA
- 16 = ElGamal (encrypt only)
- 17 = DSA (sometimes called DH, sign only)
- 20 = ElGamal (sign and encrypt)
- (for other id's see include/cipher.h)
- 5. Field: KeyID either of
- 6. Field: Creation Date (in UTC)
- 7. Field: Key expiration date or empty if none.
- 8. Field: Used for serial number in crt records (used to be the Local-ID)
- 9. Field: Ownertrust (primary public keys only)
- This is a single letter, but be prepared that additional
- information may follow in some future versions.
-10. Field: User-ID. The value is quoted like a C string to avoid
- control characters (the colon is quoted "\x3a").
- This is not used with --fixed-list-mode in gpg.
- A UAT record puts the attribute subpacket count here, a
- space, and then the total attribute subpacket size.
- In gpgsm the issuer name comes here
- An FPR record stores the fingerprint here.
- The fingerprint of an revocation key is stored here.
-11. Field: Signature class. This is a 2 digit hexnumber followed by
- either the letter 'x' for an exportable signature or the
- letter 'l' for a local-only signature.
- The class byte of an revocation key is also given here,
- 'x' and 'l' ist used the same way.
-12. Field: Key capabilities:
- e = encrypt
- s = sign
- c = certify
- A key may have any combination of them. The primary key has in
- addition to these letters, uppercase version of the letter to
- denote the _usable_ capabilities of the entire key.
-13. Field: Used in FPR records for S/MIME keys to store the fingerprint of
- the issuer certificate. This is useful to build the
- certificate path based on certificates stored in the local
- keyDB; it is only filled if the issue certificate is
- available. The advantage of using this value is that it is
- guaranteed to have been been build by the same lookup
- algorithm as gpgsm uses.
- For "uid" recods this lists the preferences n the sameway the
- -edit menu does.
-14. Field Flag field used in the --edit menu output:
-
-
-All dates are displayed in the format yyyy-mm-dd unless you use the
-option --fixed-list-mode in which case they are displayed as seconds
-since Epoch. More fields may be added later, so parsers should be
-prepared for this. When parsing a number the parser should stop at the
-first non-number character so that additional information can later be
-added.
-
-If field 1 has the tag "pkd", a listing looks like this:
-pkd:0:1024:B665B1435F4C2 .... FF26ABB:
- ! ! !-- the value
- ! !------ for information number of bits in the value
- !--------- index (eg. DSA goes from 0 to 3: p,q,g,y)
-
-
-
-Format of the "--status-fd" output
-==================================
-Every line is prefixed with "[GNUPG:] ", followed by a keyword with
-the type of the status line and a some arguments depending on the
-type (maybe none); an application should always be prepared to see
-more arguments in future versions.
-
-
- GOODSIG <long keyid> <username>
- The signature with the keyid is good. For each signature only
- one of the three codes GOODSIG, BADSIG or ERRSIG will be
- emitted and they may be used as a marker for a new signature.
- The username is the primary one encoded in UTF-8 and %XX
- escaped.
-
- EXPSIG <long keyid> <username>
- The signature with the keyid is good, but the signature is
- expired. The username is the primary one encoded in UTF-8 and
- %XX escaped.
-
- EXPKEYSIG <long keyid> <username>
- The signature with the keyid is good, but the signature was
- made by an expired key. The username is the primary one
- encoded in UTF-8 and %XX escaped.
-
- BADSIG <long keyid> <username>
- The signature with the keyid has not been verified okay.
- The username is the primary one encoded in UTF-8 and %XX
- escaped.
-
- ERRSIG <long keyid> <pubkey_algo> <hash_algo> \
- <sig_class> <timestamp> <rc>
- It was not possible to check the signature. This may be
- caused by a missing public key or an unsupported algorithm.
- A RC of 4 indicates unknown algorithm, a 9 indicates a missing
- public key. The other fields give more information about
- this signature. sig_class is a 2 byte hex-value.
-
- VALIDSIG <fingerprint in hex> <sig_creation_date> <sig-timestamp>
- <expire-timestamp>
-
- The signature with the keyid is good. This is the same
- as GOODSIG but has the fingerprint as the argument. Both
- status lines are emitted for a good signature.
- sig-timestamp is the signature creation time in seconds after
- the epoch. expire-timestamp is the signature expiration time
- in seconds after the epoch (zero means "does not expire").
-
- SIG_ID <radix64_string> <sig_creation_date> <sig-timestamp>
- This is emitted only for signatures of class 0 or 1 which
- have been verified okay. The string is a signature id
- and may be used in applications to detect replay attacks
- of signed messages. Note that only DLP algorithms give
- unique ids - others may yield duplicated ones when they
- have been created in the same second.
-
- ENC_TO <long keyid> <keytype> <keylength>
- The message is encrypted to this keyid.
- keytype is the numerical value of the public key algorithm,
- keylength is the length of the key or 0 if it is not known
- (which is currently always the case).
-
- NODATA <what>
- No data has been found. Codes for what are:
- 1 - No armored data.
- 2 - Expected a packet but did not found one.
- 3 - Invalid packet found, this may indicate a non OpenPGP message.
- You may see more than one of these status lines.
-
- UNEXPECTED <what>
- Unexpected data has been encountered
- 0 - not further specified 1
-
-
- TRUST_UNDEFINED <error token>
- TRUST_NEVER <error token>
- TRUST_MARGINAL
- TRUST_FULLY
- TRUST_ULTIMATE
- For good signatures one of these status lines are emitted
- to indicate how trustworthy the signature is. The error token
- values are currently only emiited by gpgsm.
-
- SIGEXPIRED
- This is deprecated in favor of KEYEXPIRED.
-
- KEYEXPIRED <expire-timestamp>
- The key has expired. expire-timestamp is the expiration time
- in seconds after the epoch.
-
- KEYREVOKED
- The used key has been revoked by its owner. No arguments yet.
-
- BADARMOR
- The ASCII armor is corrupted. No arguments yet.
-
- RSA_OR_IDEA
- The IDEA algorithms has been used in the data. A
- program might want to fallback to another program to handle
- the data if GnuPG failed. This status message used to be emitted
- also for RSA but this has been dropped after the RSA patent expired.
- However we can't change the name of the message.
-
- SHM_INFO
- SHM_GET
- SHM_GET_BOOL
- SHM_GET_HIDDEN
-
- GET_BOOL
- GET_LINE
- GET_HIDDEN
- GOT_IT
-
- NEED_PASSPHRASE <long main keyid> <long keyid> <keytype> <keylength>
- Issued whenever a passphrase is needed.
- keytype is the numerical value of the public key algorithm
- or 0 if this is not applicable, keylength is the length
- of the key or 0 if it is not known (this is currently always the case).
-
- NEED_PASSPHRASE_SYM <cipher_algo> <s2k_mode> <s2k_hash>
- Issued whenever a passphrase for symmetric encryption is needed.
-
- MISSING_PASSPHRASE
- No passphrase was supplied. An application which encounters this
- message may want to stop parsing immediately because the next message
- will probably be a BAD_PASSPHRASE. However, if the application
- is a wrapper around the key edit menu functionality it might not
- make sense to stop parsing but simply ignoring the following
- BAD_PASSPHRASE.
-
- BAD_PASSPHRASE <long keyid>
- The supplied passphrase was wrong or not given. In the latter case
- you may have seen a MISSING_PASSPHRASE.
-
- GOOD_PASSPHRASE
- The supplied passphrase was good and the secret key material
- is therefore usable.
-
- DECRYPTION_FAILED
- The symmetric decryption failed - one reason could be a wrong
- passphrase for a symmetrical encrypted message.
-
- DECRYPTION_OKAY
- The decryption process succeeded. This means, that either the
- correct secret key has been used or the correct passphrase
- for a conventional encrypted message was given. The program
- itself may return an errorcode because it may not be possible to
- verify a signature for some reasons.
-
- NO_PUBKEY <long keyid>
- NO_SECKEY <long keyid>
- The key is not available
-
- IMPORTED <long keyid> <username>
- The keyid and name of the signature just imported
-
- IMPORT_OK <reason> [<fingerprint>]
- The key with the primary key's FINGERPRINT has been imported.
- Reason flags:
- 0 := Not actually changed
- 1 := Entirely new key.
- 2 := New user IDs
- 4 := New signatures
- 8 := New subkeys
- 16 := Contains private key.
- The flags may be ORed.
-
- IMPORT_PROBLEM <reason> [<fingerprint>]
- Issued for each import failure. Reason codes are:
- 0 := "No specific reason given".
- 1 := "Invalid Certificate".
- 2 := "Issuer Certificate missing".
- 3 := "Certificate Chain too long".
- 4 := "Error storing certificate".
-
- IMPORT_RES <count> <no_user_id> <imported> <imported_rsa> <unchanged>
- <n_uids> <n_subk> <n_sigs> <n_revoc> <sec_read> <sec_imported> <sec_dups> <not_imported>
- Final statistics on import process (this is one long line)
-
- FILE_START <what> <filename>
- Start processing a file <filename>. <what> indicates the performed
- operation:
- 1 - verify
- 2 - encrypt
- 3 - decrypt
-
- FILE_DONE
- Marks the end of a file processing which has been started
- by FILE_START.
-
- BEGIN_DECRYPTION
- END_DECRYPTION
- Mark the start and end of the actual decryption process. These
- are also emitted when in --list-only mode.
-
- BEGIN_ENCRYPTION <mdc_method> <sym_algo>
- END_ENCRYPTION
- Mark the start and end of the actual encryption process.
-
- DELETE_PROBLEM reason_code
- Deleting a key failed. Reason codes are:
- 1 - No such key
- 2 - Must delete secret key first
- 3 - Ambigious specification
-
- PROGRESS what char cur total
- Used by the primegen and Public key functions to indicate progress.
- "char" is the character displayed with no --status-fd enabled, with
- the linefeed replaced by an 'X'. "cur" is the current amount
- done and "total" is amount to be done; a "total" of 0 indicates that
- the total amount is not known. 100/100 may be used to detect the
- end of operation.
-
- SIG_CREATED <type> <pubkey algo> <hash algo> <class> <timestamp> <key fpr>
- A signature has been created using these parameters.
- type: 'D' = detached
- 'C' = cleartext
- 'S' = standard
- (only the first character should be checked)
- class: 2 hex digits with the signature class
-
- KEY_CREATED <type> <fingerprint>
- A key has been created
- type: 'B' = primary and subkey
- 'P' = primary
- 'S' = subkey
- The fingerprint is one of the primary key for type B and P and
- the one of the subkey for S.
-
- SESSION_KEY <algo>:<hexdigits>
- The session key used to decrypt the message. This message will
- only be emmited when the special option --show-session-key
- is used. The format is suitable to be passed to the option
- --override-session-key
-
- NOTATION_NAME <name>
- NOTATION_DATA <string>
- name and string are %XX escaped; the data may be splitted
- among several notation_data lines.
-
- USERID_HINT <long main keyid> <string>
- Give a hint about the user ID for a certain keyID.
-
- POLICY_URL <string>
- string is %XX escaped
-
- BEGIN_STREAM
- END_STREAM
- Issued by pipemode.
-
- INV_RECP <reason> <requested_recipient>
- Issued for each unusable recipient. The reasons codes
- currently in use are:
- 0 := "No specific reason given".
- 1 := "Not Found"
- 2 := "Ambigious specification"
- 3 := "Wrong key usage"
- 4 := "Key revoked"
- 5 := "Key expired"
- 6 := "No CRL known"
- 7 := "CRL too old"
- 8 := "Policy mismatch"
- 9 := "Not a secret key"
- 10 := "Key not trusted"
-
- Note that this status is also used for gpgsm's SIGNER command
- where it relates to signer's of course.
-
- NO_RECP <reserved>
- Issued when no recipients are usable.
-
- ALREADY_SIGNED <long-keyid>
- Warning: This is experimental and might be removed at any time.
-
- TRUNCATED <maxno>
- The output was truncated to MAXNO items. This status code is issued
- for certain external requests
-
- ERROR <error location> <error code>
- This is a generic error status message, it might be followed
- by error location specific data. <error token> and
- <error_location> should not contain a space.
-
- ATTRIBUTE <fpr> <octets> <type> <index> <count>
- <timestamp> <expiredate> <flags>
- This is one long line issued for each attribute subpacket when
- an attribute packet is seen during key listing. <fpr> is the
- fingerprint of the key. <octets> is the length of the
- attribute subpacket. <type> is the attribute type
- (1==image). <index>/<count> indicates that this is the Nth
- indexed subpacket of count total subpackets in this attribute
- packet. <timestamp> and <expiredate> are from the
- self-signature on the attribute packet. If the attribute
- packet does not have a valid self-signature, then the
- timestamp is 0. <flags> are a bitwise OR of:
- 0x01 = this attribute packet is a primary uid
- 0x02 = this attribute packet is revoked
- 0x04 = this attribute packet is expired
-
-
-Key generation
-==============
- Key generation shows progress by printing different characters to
- stderr:
- "." Last 10 Miller-Rabin tests failed
- "+" Miller-Rabin test succeeded
- "!" Reloading the pool with fresh prime numbers
- "^" Checking a new value for the generator
- "<" Size of one factor decreased
- ">" Size of one factor increased
-
- The prime number for ElGamal is generated this way:
-
- 1) Make a prime number q of 160, 200, 240 bits (depending on the keysize)
- 2) Select the length of the other prime factors to be at least the size
- of q and calculate the number of prime factors needed
- 3) Make a pool of prime numbers, each of the length determined in step 2
- 4) Get a new permutation out of the pool or continue with step 3
- if we have tested all permutations.
- 5) Calculate a candidate prime p = 2 * q * p[1] * ... * p[n] + 1
- 6) Check that this prime has the correct length (this may change q if
- it seems not to be possible to make a prime of the desired length)
- 7) Check whether this is a prime using trial divisions and the
- Miller-Rabin test.
- 8) Continue with step 4 if we did not find a prime in step 7.
- 9) Find a generator for that prime.
-
- This algorithm is based on Lim and Lee's suggestion from the
- Crypto '97 proceedings p. 260.
-
-
-Unattended key generation
-=========================
-This feature allows unattended generation of keys controlled by a
-parameter file. To use this feature, you use --gen-key together with
---batch and feed the parameters either from stdin or from a file given
-on the commandline.
-
-The format of this file is as follows:
- o Text only, line length is limited to about 1000 chars.
- o You must use UTF-8 encoding to specify non-ascii characters.
- o Empty lines are ignored.
- o Leading and trailing spaces are ignored.
- o A hash sign as the first non white space character indicates a comment line.
- o Control statements are indicated by a leading percent sign, the
- arguments are separated by white space from the keyword.
- o Parameters are specified by a keyword, followed by a colon. Arguments
- are separated by white space.
- o The first parameter must be "Key-Type", control statements
- may be placed anywhere.
- o Key generation takes place when either the end of the parameter file
- is reached, the next "Key-Type" parameter is encountered or at the
- control statement "%commit"
- o Control statements:
- %echo <text>
- Print <text>.
- %dry-run
- Suppress actual key generation (useful for syntax checking).
- %commit
- Perform the key generation. An implicit commit is done
- at the next "Key-Type" parameter.
- %pubring <filename>
- %secring <filename>
- Do not write the key to the default or commandline given
- keyring but to <filename>. This must be given before the first
- commit to take place, duplicate specification of the same filename
- is ignored, the last filename before a commit is used.
- The filename is used until a new filename is used (at commit points)
- and all keys are written to that file. If a new filename is given,
- this file is created (and overwrites an existing one).
- Both control statements must be given.
- o The order of the parameters does not matter except for "Key-Type"
- which must be the first parameter. The parameters are only for the
- generated keyblock and parameters from previous key generations are not
- used. Some syntactically checks may be performed.
- The currently defined parameters are:
- Key-Type: <algo-number>|<algo-string>
- Starts a new parameter block by giving the type of the
- primary key. The algorithm must be capable of signing.
- This is a required parameter.
- Key-Length: <length-in-bits>
- Length of the key in bits. Default is 1024.
- Key-Usage: <usage-list>
- Space or comma delimited list of key usage, allowed values are
- "encrypt" and "sign". This is used to generate the key flags.
- Please make sure that the algorithm is capable of this usage.
- Subkey-Type: <algo-number>|<algo-string>
- This generates a secondary key. Currently only one subkey
- can be handled.
- Subkey-Length: <length-in-bits>
- Length of the subkey in bits. Default is 1024.
- Subkey-Usage: <usage-list>
- Similar to Key-Usage.
- Passphrase: <string>
- If you want to specify a passphrase for the secret key,
- enter it here. Default is not to use any passphrase.
- Name-Real: <string>
- Name-Comment: <string>
- Name-Email: <string>
- The 3 parts of a key. Remember to use UTF-8 here.
- If you don't give any of them, no user ID is created.
- Expire-Date: <iso-date>|(<number>[d|w|m|y])
- Set the expiration date for the key (and the subkey). It
- may either be entered in ISO date format (2000-08-15) or as
- number of days, weeks, month or years. Without a letter days
- are assumed.
- Preferences: <string>
- Set the cipher, hash, and compression preference values for
- this key. This expects the same type of string as "setpref"
- in the --edit menu.
- Revoker: <algo>:<fpr> [sensitive]
- Add a designated revoker to the generated key. Algo is the
- public key algorithm of the designated revoker (i.e. RSA=1,
- DSA=17, etc.) Fpr is the fingerprint of the designated
- revoker. The optional "sensitive" flag marks the designated
- revoker as sensitive information. Only v4 keys may be
- designated revokers.
-
-Here is an example:
-$ cat >foo <<EOF
- %echo Generating a standard key
- Key-Type: DSA
- Key-Length: 1024
- Subkey-Type: ELG-E
- Subkey-Length: 1024
- Name-Real: Joe Tester
- Name-Comment: with stupid passphrase
- Name-Email: joe@foo.bar
- Expire-Date: 0
- Passphrase: abc
- %pubring foo.pub
- %secring foo.sec
- # Do a commit here, so that we can later print "done" :-)
- %commit
- %echo done
-EOF
-$ gpg --batch --gen-key foo
- [...]
-$ gpg --no-default-keyring --secret-keyring ./foo.sec \
- --keyring ./foo.pub --list-secret-keys
-/home/wk/work/gnupg-stable/scratch/foo.sec
-------------------------------------------
-sec 1024D/915A878D 2000-03-09 Joe Tester (with stupid passphrase) <joe@foo.bar>
-ssb 1024g/8F70E2C0 2000-03-09
-
-
-
-Layout of the TrustDB
-=====================
-The TrustDB is built from fixed length records, where the first byte
-describes the record type. All numeric values are stored in network
-byte order. The length of each record is 40 bytes. The first record of
-the DB is always of type 1 and this is the only record of this type.
-
-FIXME: The layout changed, document it here.
-
- Record type 0:
- --------------
- Unused record, can be reused for any purpose.
-
- Record type 1:
- --------------
- Version information for this TrustDB. This is always the first
- record of the DB and the only one with type 1.
- 1 byte value 1
- 3 bytes 'gpg' magic value
- 1 byte Version of the TrustDB (2)
- 1 byte marginals needed
- 1 byte completes needed
- 1 byte max_cert_depth
- The three items are used to check whether the cached
- validity value from the dir record can be used.
- 1 u32 locked flags
- 1 u32 timestamp of trustdb creation
- 1 u32 timestamp of last modification which may affect the validity
- of keys in the trustdb. This value is checked against the
- validity timestamp in the dir records.
- 1 u32 timestamp of last validation
- (Used to keep track of the time, when this TrustDB was checked
- against the pubring)
- 1 u32 record number of keyhashtable
- 1 u32 first free record
- 1 u32 record number of shadow directory hash table
- It does not make sense to combine this table with the key table
- because the keyid is not in every case a part of the fingerprint.
- 1 u32 record number of the trusthashtbale
-
-
- Record type 2: (directory record)
- --------------
- Informations about a public key certificate.
- These are static values which are never changed without user interaction.
-
- 1 byte value 2
- 1 byte reserved
- 1 u32 LID . (This is simply the record number of this record.)
- 1 u32 List of key-records (the first one is the primary key)
- 1 u32 List of uid-records
- 1 u32 cache record
- 1 byte ownertrust
- 1 byte dirflag
- 1 byte maximum validity of all the user ids
- 1 u32 time of last validity check.
- 1 u32 Must check when this time has been reached.
- (0 = no check required)
-
-
- Record type 3: (key record)
- --------------
- Informations about a primary public key.
- (This is mainly used to lookup a trust record)
-
- 1 byte value 3
- 1 byte reserved
- 1 u32 LID
- 1 u32 next - next key record
- 7 bytes reserved
- 1 byte keyflags
- 1 byte pubkey algorithm
- 1 byte length of the fingerprint (in bytes)
- 20 bytes fingerprint of the public key
- (This is the value we use to identify a key)
-
- Record type 4: (uid record)
- --------------
- Informations about a userid
- We do not store the userid but the hash value of the userid because that
- is sufficient.
-
- 1 byte value 4
- 1 byte reserved
- 1 u32 LID points to the directory record.
- 1 u32 next next userid
- 1 u32 pointer to preference record
- 1 u32 siglist list of valid signatures
- 1 byte uidflags
- 1 byte validity of the key calculated over this user id
- 20 bytes ripemd160 hash of the username.
-
-
- Record type 5: (pref record)
- --------------
- This record type is not anymore used.
-
- 1 byte value 5
- 1 byte reserved
- 1 u32 LID; points to the directory record (and not to the uid record!).
- (or 0 for standard preference record)
- 1 u32 next
- 30 byte preference data
-
- Record type 6 (sigrec)
- -------------
- Used to keep track of key signatures. Self-signatures are not
- stored. If a public key is not in the DB, the signature points to
- a shadow dir record, which in turn has a list of records which
- might be interested in this key (and the signature record here
- is one).
-
- 1 byte value 6
- 1 byte reserved
- 1 u32 LID points back to the dir record
- 1 u32 next next sigrec of this uid or 0 to indicate the
- last sigrec.
- 6 times
- 1 u32 Local_id of signatures dir or shadow dir record
- 1 byte Flag: Bit 0 = checked: Bit 1 is valid (we have a real
- directory record for this)
- 1 = valid is set (but may be revoked)
-
-
-
- Record type 8: (shadow directory record)
- --------------
- This record is used to reserve a LID for a public key. We
- need this to create the sig records of other keys, even if we
- do not yet have the public key of the signature.
- This record (the record number to be more precise) will be reused
- as the dir record when we import the real public key.
-
- 1 byte value 8
- 1 byte reserved
- 1 u32 LID (This is simply the record number of this record.)
- 2 u32 keyid
- 1 byte pubkey algorithm
- 3 byte reserved
- 1 u32 hintlist A list of records which have references to
- this key. This is used for fast access to
- signature records which are not yet checked.
- Note, that this is only a hint and the actual records
- may not anymore hold signature records for that key
- but that the code cares about this.
- 18 byte reserved
-
-
-
- Record Type 10 (hash table)
- --------------
- Due to the fact that we use fingerprints to lookup keys, we can
- implement quick access by some simple hash methods, and avoid
- the overhead of gdbm. A property of fingerprints is that they can be
- used directly as hash values. (They can be considered as strong
- random numbers.)
- What we use is a dynamic multilevel architecture, which combines
- hashtables, record lists, and linked lists.
-
- This record is a hashtable of 256 entries; a special property
- is that all these records are stored consecutively to make one
- big table. The hash value is simple the 1st, 2nd, ... byte of
- the fingerprint (depending on the indirection level).
-
- When used to hash shadow directory records, a different table is used
- and indexed by the keyid.
-
- 1 byte value 10
- 1 byte reserved
- n u32 recnum; n depends on the record length:
- n = (reclen-2)/4 which yields 9 for the current record length
- of 40 bytes.
-
- the total number of such record which makes up the table is:
- m = (256+n-1) / n
- which is 29 for a record length of 40.
-
- To look up a key we use the first byte of the fingerprint to get
- the recnum from this hashtable and look up the addressed record:
- - If this record is another hashtable, we use 2nd byte
- to index this hash table and so on.
- - if this record is a hashlist, we walk all entries
- until we found one a matching one.
- - if this record is a key record, we compare the
- fingerprint and to decide whether it is the requested key;
-
-
- Record type 11 (hash list)
- --------------
- see hash table for an explanation.
- This is also used for other purposes.
-
- 1 byte value 11
- 1 byte reserved
- 1 u32 next next hash list record
- n times n = (reclen-5)/5
- 1 u32 recnum
-
- For the current record length of 40, n is 7
-
-
-
- Record type 254 (free record)
- ---------------
- All these records form a linked list of unused records.
- 1 byte value 254
- 1 byte reserved (0)
- 1 u32 next_free
-
-
-
-Packet Headers
-===============
-
-GNUPG uses PGP 2 packet headers and also understands OpenPGP packet header.
-There is one enhancement used with the old style packet headers:
-
- CTB bits 10, the "packet-length length bits", have values listed in
- the following table:
-
- 00 - 1-byte packet-length field
- 01 - 2-byte packet-length field
- 10 - 4-byte packet-length field
- 11 - no packet length supplied, unknown packet length
-
- As indicated in this table, depending on the packet-length length
- bits, the remaining 1, 2, 4, or 0 bytes of the packet structure field
- are a "packet-length field". The packet-length field is a whole
- number field. The value of the packet-length field is defined to be
- the value of the whole number field.
-
- A value of 11 is currently used in one place: on compressed data.
- That is, a compressed data block currently looks like <A3 01 . . .>,
- where <A3>, binary 10 1000 11, is an indefinite-length packet. The
- proper interpretation is "until the end of the enclosing structure",
- although it should never appear outermost (where the enclosing
- structure is a file).
-
-+ This will be changed with another version, where the new meaning of
-+ the value 11 (see below) will also take place.
-+
-+ A value of 11 for other packets enables a special length encoding,
-+ which is used in case, where the length of the following packet can
-+ not be determined prior to writing the packet; especially this will
-+ be used if large amounts of data are processed in filter mode.
-+
-+ It works like this: After the CTB (with a length field of 11) a
-+ marker field is used, which gives the length of the following datablock.
-+ This is a simple 2 byte field (MSB first) containing the amount of data
-+ following this field, not including this length field. After this datablock
-+ another length field follows, which gives the size of the next datablock.
-+ A value of 0 indicates the end of the packet. The maximum size of a
-+ data block is limited to 65534, thereby reserving a value of 0xffff for
-+ future extensions. These length markers must be inserted into the data
-+ stream just before writing the data out.
-+
-+ This 2 byte field is large enough, because the application must buffer
-+ this amount of data to prepend the length marker before writing it out.
-+ Data block sizes larger than about 32k doesn't make any sense. Note
-+ that this may also be used for compressed data streams, but we must use
-+ another packet version to tell the application that it can not assume,
-+ that this is the last packet.
-
-
-GNU extensions to the S2K algorithm
-===================================
-S2K mode 101 is used to identify these extensions.
-After the hash algorithm the 3 bytes "GNU" are used to make
-clear that these are extensions for GNU, the next bytes gives the
-GNU protection mode - 1000. Defined modes are:
- 1001 - do not store the secret part at all
-
-
-Usage of gdbm files for keyrings
-================================
- The key to store the keyblock is its fingerprint, other records
- are used for secondary keys. Fingerprints are always 20 bytes
- 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)
- data is the keyblock
- 2 = key is the complete 8 byte keyid
- data is a list of 20 byte fingerprints
- 3 = key is the short 4 byte keyid
- data is a list of 20 byte fingerprints
- 4 = key is the email address
- data is a list of 20 byte fingerprints
-
- Data is prepended with a type byte:
- 1 = keyblock
- 2 = list of 20 byte padded fingerprints
- 3 = list of list fingerprints (but how to we key them?)
-
-
-
-Pipemode
-========
-This mode can be used to perform multiple operations with one call to
-gpg. It comes handy in cases where you have to verify a lot of
-signatures. Currently we support only detached signatures. This mode
-is a kludge to avoid running gpg n daemon mode and using Unix Domain
-Sockets to pass the data to it. There is no easy portable way to do
-this under Windows, so we use plain old pipes which do work well under
-Windows. Because there is no way to signal multiple EOFs in a pipe we
-have to embed control commands in the data stream: We distinguish
-between a data state and a control state. Initially the system is in
-data state but it won't accept any data. Instead it waits for
-transition to control state which is done by sending a single '@'
-character. While in control state the control command os expected and
-this command is just a single byte after which the system falls back
-to data state (but does not necesary accept data now). The simplest
-control command is a '@' which just inserts this character into the
-data stream.
-
-Here is the format we use for detached signatures:
-"@<" - Begin of new stream
-"@B" - Detached signature follows.
- This emits a control packet (1,'B')
-<detached_signature>
-"@t" - Signed text follows.
- This emits the control packet (2, 'B')
-<signed_text>
-"@." - End of operation. The final control packet forces signature
- verification
-"@>" - End of stream
-
-
-
-
-
-
-Other Notes
-===========
- * For packet version 3 we calculate the keyids this way:
- RSA := low 64 bits of n
- ELGAMAL := build a v3 pubkey packet (with CTB 0x99) and calculate
- a rmd160 hash value from it. This is used as the
- fingerprint and the low 64 bits are the keyid.
-
- * Revocation certificates consist only of the signature packet;
- "import" knows how to handle this. The rationale behind it is
- to keep them small.
-
-
-
-
-
-
-
-Keyserver Message Format
-=========================
-
-The keyserver may be contacted by a Unix Domain socket or via TCP.
-
-The format of a request is:
-
-====
-command-tag
-"Content-length:" digits
-CRLF
-=======
-
-Where command-tag is
-
-NOOP
-GET <user-name>
-PUT
-DELETE <user-name>
-
-
-The format of a response is:
-
-======
-"GNUPG/1.0" status-code status-text
-"Content-length:" digits
-CRLF
-============
-followed by <digits> bytes of data
-
-
-Status codes are:
-
- o 1xx: Informational - Request received, continuing process
-
- o 2xx: Success - The action was successfully received, understood,
- and accepted
-
- o 4xx: Client Error - The request contains bad syntax or cannot be
- fulfilled
-
- o 5xx: Server Error - The server failed to fulfill an apparently
- valid request
-
-
-
-Documentation on HKP (the http keyserver protocol):
-
-A minimalistic HTTP server on port 11371 recognizes a GET for /pks/lookup.
-The standard http URL encoded query parameters are this (always key=value):
-
-- op=index (like pgp -kv), op=vindex (like pgp -kvv) and op=get (like
- pgp -kxa)
-
-- search=<stringlist>. This is a list of words that must occur in the key.
- The words are delimited with space, points, @ and so on. The delimiters
- are not searched for and the order of the words doesn't matter (but see
- next option).
-
-- exact=on. This switch tells the hkp server to only report exact matching
- keys back. In this case the order and the "delimiters" are important.
-
-- fingerprint=on. Also reports the fingerprints when used with 'index' or
- 'vindex'
-
-The keyserver also recognizes http-POSTs to /pks/add. Use this to upload
-keys.
-
-
-A better way to do this would be a request like:
-
- /pks/lookup/<gnupg_formatierte_user_id>?op=<operation>
-
-This can be implemented using Hurd's translator mechanism.
-However, I think the whole key server stuff has to be re-thought;
-I have some ideas and probably create a white paper.
-
diff --git a/doc/HACKING b/doc/HACKING
deleted file mode 100644
index 811179e53..000000000
--- a/doc/HACKING
+++ /dev/null
@@ -1,301 +0,0 @@
- A Hacker's Guide to GNUPG
- ================================
- (Some notes on GNUPG internals.)
-
-
- ===> Under construction <=======
-
-
-CVS Access
-==========
-Anonymous read-only CVS access is available:
-
- cvs -z3 -d :pserver:anoncvs@cvs.gnupg.org:/cvs/gnupg login
-
-use the password "anoncvs". To check out the the complete
-archive use:
-
- cvs -z3 -d :pserver:anoncvs@cvs.gnupg.org:/cvs/gnupg \
- checkout -R STABLE-BRANCH-1-0 gnupg
-
-This service is provided to help you in hunting bugs and not to deliver
-stable snapshots; it may happen that it even does not compile, so please
-don't complain. CVS may put a high load on a server, so please don't poll
-poll for new updates but wait for an announcement; to receive this you may
-want to subscribe to:
-
- gnupg-commit-watchers@gnupg.org
-
-by sending a mail with subject "subscribe" to
-
- gnupg-commit-watchers-request@gnupg.org
-
-
-You must run scripts/autogen.sh before doing the ./configure,
-as this creates some needed while which are not in the CVS.
-autogen.sh should checks that you have all required tools
-installed.
-
-
-RSYNC access
-============
-The FTP archive is also available by anonymous rsync. A daily snapshot
-of the CVS head revision is also available. See rsync(1) and try
-"rsync ftp.gnupg.org::" to see available resources.
-
-
-
-Special Tools
-=============
-Documentation is based on the docbook DTD. Actually we have only the
-man page for now. To build a man page you need the docbook-to-man
-tool and all the other thinks needed for SGML processing. Debian
-comes with the docbook tools and you only need this docbook-to-man
-script which is comes with gtk-doc or download it from
-ftp.openit.de:/pub/devel/sgml. If you don't have it everything
-should still work fine but you will have only a dummy man page.
-
-
-RFCs
-====
-
-1423 Privacy Enhancement for Internet Electronic Mail:
- Part III: Algorithms, Modes, and Identifiers.
-
-1489 Registration of a Cyrillic Character Set.
-
-1750 Randomness Recommendations for Security.
-
-1991 PGP Message Exchange Formats.
-
-2015 MIME Security with Pretty Good Privacy (PGP).
-
-2144 The CAST-128 Encryption Algorithm.
-
-2279 UTF-8, a transformation format of ISO 10646.
-
-2440 OpenPGP.
-
-
-
-Debug Flags
------------
-Use the option "--debug n" to output debug information. This option
-can be used multiple times, all values are ORed; n maybe prefixed with
-0x to use hex-values.
-
- value used for
- ----- ----------------------------------------------
- 1 packet reading/writing
- 2 MPI details
- 4 ciphers and primes (may reveal sensitive data)
- 8 iobuf filter functions
- 16 iobuf stuff
- 32 memory allocation stuff
- 64 caching
- 128 show memory statistics at exit
- 256 trust verification stuff
-
-
-
-
-Directory Layout
-----------------
- ./ Readme, configure
- ./scripts Scripts needed by configure and others
- ./doc Documentation
- ./util General purpose utility function
- ./mpi Multi precision integer library
- ./cipher Cryptographic functions
- ./g10 GnuPG application
- ./tools Some helper and demo programs
- ./keybox The keybox library (under construction)
- ./gcrypt Stuff needed to build libgcrypt (under construction)
-
-
-Detailed Roadmap
-----------------
-g10/g10.c Main module with option parsing and all the stuff you have
- to do on startup. Also has the exout handler and some
- helper functions.
-g10/sign.c Create signature and optionally encrypt
-
-g10/parse-packet.c
-g10/build-packet.c
-g10/free-packet.c
- Parsing and creating of OpenPGP message packets.
-
-g10/getkey.c Key selection code
-g10/pkclist.c Build a list of public keys
-g10/skclist.c Build a list of secret keys
-g10/ringedit.c Keyring I/O
-g10/keydb.h
-
-g10/keyid.c Helper functions to get the keyid, fingerprint etc.
-
-
-g10/trustdb.c
-g10/trustdb.h
-g10/tdbdump.c
- Management of the trustdb.gpg
-
-g10/compress.c Filter to handle compression
-g10/filter.h Declarations for all filter functions
-g10/delkey.c Delete a key
-g10/kbnode.c Helper for the KBNODE linked list
-g10/main.h Prototypes and some constants
-g10/mainproc.c Message processing
-g10/armor.c Ascii armor filter
-g10/mdfilter.c Filter to calculate hashs
-g10/textfilter.c Filter to handle CR/LF and trailing white space
-g10/cipher.c En-/Decryption filter
-g10/misc.c Utlity functions
-g10/options.h Structure with all the command line options
- and related constants
-g10/openfile.c Create/Open Files
-g10/tdbio.c I/O handling for the trustdb.gpg
-g10/tdbio.h
-g10/hkp.h Keyserver access
-g10/hkp.c
-g10/packet.h Defintion of OpenPGP structures.
-g10/passphrase.c Passphrase handling code
-g10/pubkey-enc.c
-g10/seckey-cert.c
-g10/seskey.c
-g10/import.c
-g10/export.c
-g10/comment.c
-g10/status.c
-g10/status.h
-g10/sign.c
-g10/plaintext.c
-g10/encr-data.c
-g10/encode.c
-g10/revoke.c
-g10/keylist.c
-g10/sig-check.c
-g10/signal.c
-g10/helptext.c
-g10/verify.c
-g10/decrypt.c
-g10/keyedit.c
-g10/dearmor.c
-g10/keygen.c
-
-
-
-Memory allocation
------------------
-Use only the functions:
-
- m_alloc()
- m_alloc_clear()
- m_strdup()
- m_free()
-
-If you want to store a passphrase or some other sensitive data you may
-want to use m_alloc_secure() instead of m_alloc(), as this puts the data
-into a memory region which is protected from swapping (on some platforms).
-m_free() works for both. This functions will not return if there is not
-enough memory available.
-
-
-
-Logging
--------
-
-
-
-
-
-
-Option parsing
----------------
-GNUPG does not use getopt or GNU getopt but functions of it's own. See
-util/argparse.c for details. The advantage of these functions is that
-it is more easy to display and maintain the help texts for the options.
-The same option table is also used to parse resource files.
-
-
-
-What is an IOBUF
-----------------
-This is the data structure used for most I/O of gnupg. It is similar
-to System V Streams but much simpler. Because OpenPGP messages are nested
-in different ways; the use of such a system has big advantages. Here is
-an example, how it works: If the parser sees a packet header with a partial
-length, it pushes the block_filter onto the IOBUF to handle these partial
-length packets: from now on you don't have to worry about this. When it sees
-a compressed packet it pushes the uncompress filter and the next read byte
-is one which has already been uncompressed by this filter. Same goes for
-enciphered packet, plaintext packets and so on. The file g10/encode.c
-might be a good staring point to see how it is used - actually this is
-the other way: constructing messages using pushed filters but it may be
-easier to understand.
-
-
-How to use the message digest functions
----------------------------------------
-cipher/md.c implements an interface to hash (message digest functions).
-
-a) If you have a common part of data and some variable parts
- and you need to hash of the concatenated parts, you can use this:
- md = md_open(...)
- md_write( md, common_part )
- md1 = md_copy( md )
- md_write(md1, part1)
- md_final(md1);
- digest1 = md_read(md1)
- md2 = md_copy( md )
- md_write(md2, part2)
- md_final(md2);
- digest2 = md_read(md2)
-
- An example are key signatures; the key packet is the common part
- and the user-id packets are the variable parts.
-
-b) If you need a running digest you should use this:
- md = md_open(...)
- md_write( md, part1 )
- digest_of_part1 = md_digest( md );
- md_write( md, part2 )
- digest_of_part1_cat_part2 = md_digest( md );
- ....
-
-Both methods may be combined. [Please see the source for the real syntax]
-
-
-
-
-How to use the cipher functions
--------------------------------
-cipher/cipher.c implements the interface to symmetric encryption functions.
-As usual you have a function to open a cipher (which returns a handle to be used
-with all other functions), some functions to set the key and other stuff and
-a encrypt and decrypt function which does the real work. You probably know
-how to work with files - so it should really be easy to work with these
-functions. Here is an example:
-
- CIPHER_HANDLE hd;
-
- hd = cipher_open( CIPHER_ALGO_TWOFISH, CIPHER_MODE_CFB, 0 );
- if( !hd )
- oops( use other function to check for the real error );
- rc = cipher_setkey( hd, key256bit, 32 ) )
- if( rc )
- oops( weak key or something like this );
- cipher_setiv( hd, some_IV_or_NULL_for_all_zeroes );
- cipher_encrypt( hd, plain, cipher, size );
- cipher_close( hd );
-
-
-
-How to use the public key functions
------------------------------------
-cipher/pubkey.c implements the interface to asymmetric encryption and
-signature functions. This is basically the same as with the symmetric
-counterparts, but due to their nature it is a little bit more complicated.
-
- [Give an example]
-
-
diff --git a/doc/OpenPGP b/doc/OpenPGP
deleted file mode 100644
index a511ad7fd..000000000
--- a/doc/OpenPGP
+++ /dev/null
@@ -1,108 +0,0 @@
- GnuPG and OpenPGP
- =================
-
- See RFC2440 for a description of OpenPGP. We have an annotated version
- of this RFC online: http://www.gnupg.org/rfc2440.html
-
-
-
- Compatibility Notes
- ===================
- GnuPG (>=1.0.3) is in compliance with RFC2440 despite these exceptions:
-
- * (9.2) states that IDEA SHOULD be implemented. This is not done
- due to patent problems.
-
-
- All MAY features are implemented with this exception:
-
- * multi-part armored messages are not supported.
- MIME (rfc2015) should be used instead.
-
- Most of the OPTIONAL stuff is implemented.
-
- There are a couple of options which can be used to override some
- RFC requirements. This is always mentioned with the description
- of that options.
-
- A special format of partial packet length exists for v3 packets
- which can be considered to be in compliance with RFC1991; this
- format is only created if a special option is active.
-
- GnuPG uses a S2K mode of 101 for GNU extensions to the secret key
- protection algorithms. This number is not defined in OpenPGP, but
- given the fact that this number is in a range which used at many
- other places in OpenPGP for private/experimenat algorithm identifiers,
- this should be not a so bad choice. The 3 bytes "GNU" are used
- to identify this as a GNU extension - see the file DETAILS for a
- definition of the used data formats.
-
-
-
- Some Notes on OpenPGP / PGP Compatibility:
- ==========================================
-
- * PGP 5.x does not accept V4 signatures for anything other than
- key material. The GnuPG option --force-v3-sigs mimics this
- behavior.
-
- * PGP 5.x does not recognize the "five-octet" lengths in
- new-format headers or in signature subpacket lengths.
-
- * PGP 5.0 rejects an encrypted session key if the keylength
- differs from the S2K symmetric algorithm. This is a bug in its
- validation function.
-
- * PGP 5.0 does not handle multiple one-pass signature headers and
- trailers. Signing one will compress the one-pass signed literal
- and prefix a V3 signature instead of doing a nested one-pass
- signature.
-
- * When exporting a private key, PGP 2.x generates the header
- "BEGIN PGP SECRET KEY BLOCK" instead of "BEGIN PGP PRIVATE KEY
- BLOCK". All previous versions ignore the implied data type, and
- look directly at the packet data type.
-
- * In a clear-signed signature, PGP 5.0 will figure out the correct
- hash algorithm if there is no "Hash:" header, but it will reject
- a mismatch between the header and the actual algorithm used. The
- "standard" (i.e. Zimmermann/Finney/et al.) version of PGP 2.x
- rejects the "Hash:" header and assumes MD5. There are a number
- of enhanced variants of PGP 2.6.x that have been modified for
- SHA-1 signatures.
-
- * PGP 5.0 can read an RSA key in V4 format, but can only recognize
- it with a V3 keyid, and can properly use only a V3 format RSA
- key.
-
- * Neither PGP 5.x nor PGP 6.0 recognize ElGamal Encrypt and Sign
- keys. They only handle ElGamal Encrypt-only keys.
-
-
- Parts of this document are taken from:
- ======================================
-
- OpenPGP Message Format
- draft-ietf-openpgp-formats-07.txt
-
-
- Copyright 1998 by The Internet Society. All Rights Reserved.
-
- This document and translations of it may be copied and furnished to
- others, and derivative works that comment on or otherwise explain it
- or assist in its implementation may be prepared, copied, published
- and distributed, in whole or in part, without restriction of any
- kind, provided that the above copyright notice and this paragraph
- are included on all such copies and derivative works. However, this
- document itself may not be modified in any way, such as by removing
- the copyright notice or references to the Internet Society or other
- Internet organizations, except as needed for the purpose of
- developing Internet standards in which case the procedures for
- copyrights defined in the Internet Standards process must be
- followed, or as required to translate it into languages other than
- English.
-
- The limited permissions granted above are perpetual and will not be
- revoked by the Internet Society or its successors or assigns.
-
-
diff --git a/doc/README.W32 b/doc/README.W32
deleted file mode 100644
index 61aa05f0e..000000000
--- a/doc/README.W32
+++ /dev/null
@@ -1,100 +0,0 @@
-This is a binary version of GnuPG for MS-Windows 95, 98, WNT and W2000.
-
-A FAQ comes with this package and a probably more recent one can be
-found online at http://www.gnupg.org/faq.html. See
-http://www.gnupg.org/docs-mls.html for a list of mailing lists. In
-particular the list gnupg-users@gnupg.org might be useful to answer
-questions - but please read the FAQ first.
-
-Installation instructions:
---------------------------
- 1. Unpack the ZIP archive (alright, you already did this).
- 2. Copy "gpg.exe" and "gpgv.exe" to some place where you
- usually store your binaries.
- 3. Create a directory "c:\gnupg" (or any other as you like)
- 4. If you did not use the default directory "c:\gnupg", you
- should enter a string with the directory into the Registry
- under the key:
- HKEY_CURRENT_USER -> Software -> GNU -> GnuPG
- (you probably need to create the keys GNU and GnuPG) and insert a
- new string under the name "HomeDir" with the value of the default
- directory you want to use. Please use forward slashes and not the
- backslashes when setting filenames for GnuPG into the Registry.
- 5. Enter "gpg" and see what happens
- 6. Read the file README and the online HOWTOs
-
-
-Internationalization support:
------------------------------
- 1. Decide where to store the translation files for your language.
- Here we assume the directory "c:/gnu/locale/fr"
-
- 2. Set the directory with the translations into the Registry under
- the key:
- HKEY_CURRENT_USER -> Control Panel -> Mingw32 -> NLS
- (you probably need to create the keys Mingw32 and NLS) using a string
- entry with the name "MoDir".
- 3. Select which language to use and copy the currect translation file
- under the name "gnupg.mo" into the directory set in step 2
- (Example: "copy fr.mo c:\gnu\locale\fr\gnupg.mo")
- 4. Done.
-
-Currently we only support the Codepages 437, 850 und Latin1. If you have
-problems, either delete the gnupg.mo file or don't set the environment
-variable
-
-
-
-How to build it from the source:
---------------------------------
-This version has been build with the Mingw32/CPD kit using the latest
-stable version of GnuPG.
-
-First get the source: It has to be available at the same location you
-found this binary package - if not you should have received a written
-offer to get the source delivered to you See the file COPYING (section
-3) for details.
-
-If you got this package from its canonical place (ftp.gnupg.org), the
-source is available at:
-
- ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-1.2.n.tar.gz
-
-or for development snapshots
-
- ftp://ftp.gnupg.org/gcrypt/alpha/gnupg/gnupg-1.x.n.tar.gz
-
-this is the same source as for the Unix version. If your binary
-version of GnuPG is called something like gnupg-w32-1.0.4-1.zip, you
-should find a patch file named gnupg-w32-1.0.4-1.0.4-1.diff.gz at the
-same location, which has to be applied to the stock gpg source file.
-Instructions are at the top of this file.
-
-To build it, you need the MingW32/CPD kit, which is available at
-
- ftp://ftp.gnupg.org/people/werner/cpd/mingw32-cpd-0.3.0.tar.gz
- ftp://ftp.gnupg.org/people/werner/cpd/gcc-core-2.95.2.tar.gz
- ftp://ftp.gnupg.org/people/werner/cpd/binutils-2.9.1.tar.gz
-
-gcc and binutils are stock GNU source which are available
-at every GNU mirror.
-
-After you have installed this environment you should be able to do this:
-
- $ scripts/autogen.sh --build-w32
- $ make
- $ mingw32 strip g10/gpg.exe
- $ cp g10/gpg.exe /some_windows_drive/
-
-And everything hopefully works.
-
-
-Don't forget that MS-Windows ist just a temporary workaround until
-you can switch to a GNU system ;-)
-
-Be the source always with you.
-
- Werner
-
-
-
diff --git a/doc/credits-1.0 b/doc/credits-1.0
deleted file mode 100644
index 977910652..000000000
--- a/doc/credits-1.0
+++ /dev/null
@@ -1,41 +0,0 @@
-The GNU Privacy Guard has been created by the GnuPG team:
-Matthew Skala, Michael Roth, Niklas Hernaeus, Rémi Guyomarch
-and Werner Koch. Gael Queri, Gregory Steuck, Janusz A. Urbanowicz,
-Marco d'Itri, Thiago Jung Bauermann, Urko Lusa and Walter Koch
-did the official translations. Mike Ashley is working on the
-GNU Privacy Handbook.
-
-The following people helped greatly by suggesting improvements,
-testing, fixing bugs, providing resources and doing other important
-tasks: Allan Clark, Anand Kumria, Ariel T Glenn, Bodo Moeller,
-Bryan Fullerton, Brian Moore, Brian Warner, Caskey L. Dickson,
-Cees van de Griend, Charles Levert, Christian von Roques,
-Christopher Oliver, Christian Recktenwald, Daniel Eisenbud,
-Daniel Koenig, David Ellement, Detlef Lannert, Dirk Lattermann,
-Ed Boraas, Enzo Michelangeli, Ernst Molitor, Fabio Coatti,
-Felix von Leitner, Frank Heckenbach, Frank Stajano, Gaël Quéri,
-Greg Louis, Greg Troxel, Gregory Steuck, Geoff Keating, Harald Denker,
-Hendrik Buschkamp, Holger Schurig, Hugh Daniel, Ian McKellar,
-Janusz A. Urbanowicz, James Troup, Jean-loup Gailly, Jens Bachem,
-Joachim Backes, John A. Martin, Johnny Teveßen, Jörg Schilling,
-Jun Kuriyama, Karl Fogel, Karsten Thygesen, Katsuhiro Kondou,
-Kazu Yamamoto, Lars Kellogg-Stedman, Marco d'Itri, Mark Adler,
-Mark Elbrecht, Markus Friedl, Martin Kahlert, Martin Hamilton,
-Martin Schulte, Matthew Skala, Max Valianskiy, Michael Roth,
-Michael Sobolev, Nicolas Graner, NIIBE Yutaka, Niklas Hernaeus,
-Nimrod Zimerman, N J Doye, Oliver Haakert, Oskari Jääskeläinen,
-Paul D. Smith, Philippe Laliberte, Peter Gutmann, QingLong,
-Ralph Gillen, Rat, Reinhard Wobst, Rémi Guyomarch, Reuben Sumner,
-Roland Rosenfeld, Ross Golder, Serge Munhoven, SL Baur, Stefan Karrmann,
-Stefan Keller, Steffen Ullrich, Steffen Zahn, Steven Bakker,
-Susanne Schultz, Thiago Jung Bauermann, Thomas Roessler, Tom Spindler,
-Tom Zerucha, Tomas Fasth, Thomas Mikkelsen, Ulf Möller, Urko Lusa,
-Walter Koch, Wim Vandeputte and Gerlinde Klaes.
-
-This software has been made possible by the previous work of
-Chris Wedgwood, Jean-loup Gailly, Jon Callas, Mark Adler, Martin Hellmann
-Paul Kendall, Philip R. Zimmermann, Peter Gutmann, Philip A. Nelson,
-Taher ElGamal, Torbjorn Granlund, Whitfield Diffie, some unknown NSA
-mathematicians and all the folks who have worked hard to create complete
-and free operating systems.
-
diff --git a/doc/faq.raw b/doc/faq.raw
deleted file mode 100644
index ec4212326..000000000
--- a/doc/faq.raw
+++ /dev/null
@@ -1,1019 +0,0 @@
-[$htmltitle=GnuPG FAQ]
-[$sfaqheader=The GnuPG FAQ says:]
-[$sfaqfooter=
-The most recent version of the FAQ is available from
-<http://www.gnupg.org/>
-]
-[$usenetheader=
-]
-[$maintainer=David D. Scribner, <faq 'at' gnupg.org>]
-[$hGPG=http://www.gnupg.org]
-
-[H body bgcolor=#ffffff text=#000000 link=#1f00ff alink=#ff0000 vlink=#9900dd]
-[H H1]GnuPG Frequently Asked Questions[H /H1]
-
-
-[H p]
-Version: 1.5.7[H br]
-Last-Modified: Aug 21, 2002[H br]
-Maintained-by: [$maintainer]
-[H /p]
-
-
-This is the GnuPG FAQ. The latest HTML version is available
-[H a href=[$hGPG]/faq.html]here[H/a].
-
-The index is generated automatically, so there may be errors here. Not
-all questions may be in the section they belong to. Suggestions about
-how to improve the structure of this FAQ are welcome.
-
-Please send additions and corrections to the maintainer. It would be
-most convenient if you could provide the answer to be included here
-as well. Your help is very much appreciated.
-
-Please, don't send message like "This should be a FAQ - what's the answer?".
-If it hasn't been asked before, it isn't a FAQ. In that case you could
-search in the mailing list archive.
-
-[H HR]
-<C>
-[H HR]
-
-
-<S> GENERAL
-
-<Q> What is GnuPG?
-
- [H a href=[$hGPG]]GnuPG[H /a] stands for GNU Privacy Guard and
- is GNU's tool for secure communication and data storage. It can be
- used to encrypt data and to create digital signatures. It includes
- an advanced key management facility and is compliant with the
- proposed OpenPGP Internet standard as described in [H a href=http://www.gnupg.org/rfc2440.html]RFC 2440[H/a].
- As such, it is aimed to be compatible with PGP from NAI, Inc.
-
-<Q> Is GnuPG compatible with PGP?
-
- In general, yes. GnuPG and newer PGP releases should be implementing
- the OpenPGP standard. But there are some interoperability
- problems. See question <Rcompat> for details.
-
-
-<S> SOURCES of INFORMATION
-
-<Q> Where can I find more information?
-
- Here's a list of on-line resources:
-
- [H UL]
- [H LI]The documentation page is located at [H a href=[$hGPG]/docs.html]<[$hGPG]/docs.html>[H/a].
- Have a look at the HOWTOs and the GNU Privacy Handbook (GPH, available
- in English, Spanish and Russian). The latter provides a detailed user's
- guide to GnuPG. You'll also find a document about how to convert from
- PGP 2.x to GnuPG.
-
- [H LI]On [H a href=http://lists.gnupg.org]<http://lists.gnupg.org>[H/a] you'll find an online archive of the
- GnuPG mailing lists. Most interesting should be gnupg-users for all
- user-related issues and gnupg-devel if you want to get in touch with
- the developers.
-
- In addition, searchable archives can be found on MARC, e.g.: [H br]
- GnuPG-users: [H a href=http://marc.theaimsgroup.com/?l=gnupg-users&r=1&w=2]<http://marc.theaimsgroup.com/?l=gnupg-users&r=1&w=2>[H/a],[H br]
- GnuPG-devel: [H a href=http://marc.theaimsgroup.com/?l=gnupg-devel&r=1&w=2]<http://marc.theaimsgroup.com/?l=gnupg-devel&r=1&w=2>[H/a].[H br]
-
- [H B]PLEASE:[H/B]
- Before posting to a list, read this FAQ and the available
- documentation. In addition, search the list archive - maybe your
- question has already been discussed. This way you help people focus
- on topics that have not yet been resolved.
-
- [H LI]The GnuPG source distribution contains a subdirectory:
-
- [H PRE]
- ./doc
- [H /PRE]
-
- where some additional documentation is located (mainly interesting
- for hackers, not the casual user).
- [H /UL]
-
-<Q> Where do I get GnuPG?
-
- You can download the GNU Privacy Guard from its primary FTP server
- [H a href=ftp://ftp.gnupg.org/pub/gcrypt]ftp.gnupg.org[H /a] or from one of the mirrors:
-
- [H a href=[$hGPG]/mirrors.html]
- <[$hGPG]/mirror.html>
- [H /a]
-
- The current version is 1.0.4, please upgrade to this version as it
- fixes a security bug regarding the verification of multiple signatures.
-
-
-<S> INSTALLATION
-
-<Q> Which OSes does GnuPG run on?
-
- It should run on most Unices as well as Windows 95 and Windows NT. A
- list of OSes reported to be OK is presented at:
-
- [H a href=http://www.gnupg.org/backend.html#supsys]
- <http://www.gnupg.org/gnupg.html#supsys>
- [H /a]
-
-<Q> Which random gatherer should I use?
-
- "Good" random numbers are crucial for the security of your encryption.
- Different operating systems provide a variety of more or less quality
- random data. Linux and *BSD provide kernel generated random data
- through /dev/random - this should be the preferred choice on these
- systems. Also Solaris users with the SUNWski package installed have
- a /dev/random. In these cases, use the configure option:
-
- [H pre]
- --enable-static-rnd=linux
- [H/pre]
-
- In addition, there's also the kernel random device by Andi Maier
- [H a href= http://www.cosy.sbg.ac.at/~andi]<http://www.cosy.sbg.ac.at/~andi>[H /a], but it's still beta. Use at your
- own risk!
-
- On other systems, the Entropy Gathering Daemon (EGD) is a good choice.
- It is a perl-daemon that monitors system activity and hashes it into
- random data. See the download page [H a href=http://www.gnupg.org/download.html]<http://www.gnupg.org/download.html>[H /a]
- to obtain egd. Use:
-
- [H pre]
- --enable-static-rnd=egd
- [H/pre]
-
- here.
-
- If the above options do not work, you can use the random number
- generator "unix". This is [H B]very[H /B] slow and should be avoiced. The
- random quality isn't very good so don't use it on sensitive data.
-
-<Didea>
-<Q> How do I include support for RSA and IDEA?
-
- RSA is included as of GnuPG 1.0.3.
-
- The official GnuPG distribution does not contain IDEA due to a
- patent restriction. The patent does not expire before 2007 so don't
- expect official support before then.
-
- However, there is an unofficial module to include it even
- in earlier versions of GnuPG. It's available from
- [H a href=ftp://ftp.gnupg.org/pub/gcrypt/contrib/]<ftp://ftp.gnupg.org/pub/gcrypt/contrib/>[H /a]. Look for:
-
- [H pre]
- idea.c
- [H /pre]
-
- Compilation directives are in the headers of these files. Then add
- the following line to your ~/.gnupg/options:
-
- [H pre]
- load-extension idea
- [H /pre]
-
-
-<S> USAGE
-
-<Q> What is the recommended key size?
-
- 1024 bit for DSA signatures; even for plain ElGamal signatures
- this is sufficient as the size of the hash is probably the weakest
- link if the key size is larger than 1024 bits. Encryption keys may
- have greater sizes, but you should then check the fingerprint of
- this key:
-
- [H pre]
- gpg --fingerprint <user ID>
- [H /pre]
-
- As for the key algorithms, you should stick with the default (i.e.,
- DSA signature and ElGamal encryption). A ElGamal signing key has the
- following disadvantages: the signature is larger, it is hard to
- create such a key useful for signatures which can withstand some
- real world attacks, you don't get any extra security compared to
- DSA, and there might be compatibility problems with certain PGP
- versions. It has only been introduced because at the time it was
- not clear whether there was a patent on DSA.
-
-<Q> Why does it sometimes take so long to create keys?
-
- 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 commented that the best way to fill the
- buffer is to play with your keyboard. Good security has its price.
- What I do is to hit several times on the shift, control, alternate,
- and caps lock 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/random).
-
-<Q> And it really takes long when I work on a remote system. Why?
-
- 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 key ring (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 that you can trust your system
- administrator.
-
- When I check GnuPG on a remote system via ssh (I have no Alpha here
- ;-) 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> What is the difference between options and commands?
-
- 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 [H B]must[H /B] pick exactly one command (with one exception,
- see below). You [H B]may[H /B] 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:
-
- [H pre]
- gpg [--option something] [--option2] [--option3 something] --command file
- [H/pre]
-
- Some options take arguments. For example, the --output option (which
- can be 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 --recipient (-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:
-
- [H pre]
- gpg -r alice -o secret.txt -e test.txt
- [H/pre]
-
- If you write the options out in full, it is easier to read:
-
- [H pre]
- gpg --recipient alice --output secret.txt --encrypt test.txt
- [H/pre]
-
- 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:
-
- [H pre]
- gpg --armor --recipient alice --output secret.txt --encrypt test.txt
- [H/pre]
-
- If you imagine square brackets around the optional parts, it becomes
- a bit clearer:
-
- [H pre]
- gpg [--armor] [--recipient alice] [--output secret.txt] --encrypt test.txt
- [H/pre]
-
- The optional parts can be rearranged any way you want:
-
- [H pre]
- gpg --output secret.txt --recipient alice --armor --encrypt test.txt
- [H/pre]
-
- If your filename begins with a hyphen (e.g. "-a.txt"), GnuPG assumes
- this is an option and may complain. To avoid this you have either
- to use "./-a.txt" or stop the option and command processing with two
- hyphens: "-- -a.txt". [H B]The exception:[H /B] signing and encrypting at the
- same time. Use:
-
- [H pre]
- gpg [--options] --sign --encrypt foo.txt
- [H/pre]
-
-<Q> I can't delete a user ID because it is already deleted on my public
- keyring?
-
- Because you can only select from the public key ring, there is no
- direct way to do this. However it is not very complicated to do
- 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> I can't delete the secret key because my public key disappeared?
-
- To select a key a search is always done on the public keyring,
- therefore it is not possible to select an secret key without
- having the public key. Normally it shoud never happen that the
- public key got lost but the secret key is still available. The
- reality is different, so GnuPG implements a special way to deal
- with it: Simply use the long keyid which can be obtained by using
- the --with-colons options (it is the fifth field in the lines
- beginning with "sec").
-
-<Q> What are trust, validity and ownertrust?
-
- "ownertrust" is used instead of "trust" to make clear that this is
- the value you have assigned to a 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
- much 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.
-
-<Q> How do I sign a patch file?
-
- 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 lines starting with a dash and
- these are then quoted and that is not good for a 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.
-
-<Q> Where is the "encrypt-to-self" option?
-
- Use "--encrypt-to your_keyid". You can use more than one of these
- options. To temporarily override the use of this additional key,
- you can use the option "--no-encrypt-to".
-
-<Q> How can I get rid of the Version and Comment headers in armored
- messages?
-
- Use "--no-version --comment ''". Note that the left over blank line
- is required by the protocol.
-
-<Q> What does the "You are using the xxxx character set." mean?
-
- This note is printed when UTF8 mapping has to be done. Make sure
- that the displayed charset is the one you have activated on your
- system. Since "iso-8859-1" is the charset most used, this is the
- default. You can change the charset with the option "--charset".
- It is important that your active character set matches the one
- displayed - if not, restrict yourself to plain 7 bit ASCII and no
- mapping has to be done.
-
-<Q> How can a get list of key IDs used to encrypt a message?
-
- [H pre]
- gpg --batch --decrypt --list-only --status-fd 1 2>/dev/null | \
- awk '/^\[GNUPG:\] ENC_TO / { print $3 }'
- [H /pre]
-
-<Q> I can't decrypt my symmetrical only (-c) encrypted message with
- a new version of GnuPG.
-
- There used to be a bug in GnuPG < 1.0.1 which happens only if 3DES
- or Twofish has been used for symmetric only encryption (this has
- never been the default). The bug has been fixed but to enable you
- to decrypt old messages, you should run gpg with the option
- "--emulate-3des-s2k-bug", decrypt the message and encrypt it again
- without this option. The option will be removed in 1.1, so better
- re-encrypt your message now.
-
-<Q> How can I use GnuPG in an automated environment?
-
- You should use the option --batch and don't use pass phrases as
- there is usually no way to store it more secure than the secret
- keyring itself. The suggested way to create the keys for the
- automated environment is:
-
- On a secure machine:
- [H OL]
- [H LI] If you want to do automatic signing, create a signing
- subkey for your key (edit menu, choose "addkey" and the DSA).
- [H LI] Make sure that you use a passphrase (needed by the current
- implementation).
- [H LI] gpg --export-secret-subkeys --no-comment foo >secring.auto
- [H LI] Copy secring.auto and the public keyring to a test directory.
- [H LI] Change to this directory.
- [H LI] gpg --homedir . --edit foo and use "passwd" to remove the
- passphrase from the subkeys. You may also want to remove all
- unused subkeys.
- [H LI] Copy secring.auto to a floppy and carry it to the target box.
- [H /OL]
-
- On the target machine:
- [H OL]
- [H LI] Install secring.auto as secret keyring.
- [H LI] Now you can start your new service. It is a good idea to
- install some intrusion detection system so that you hopefully
- get a notice of an successful intrusion, so that you in turn
- can revoke all the subkeys installed on that machine and
- install new subkeys.
- [H /OL]
-
-<Q> Which email-client can I use with GnuPG?
-
- Using GnuPG to encrypt email is one of the most popular uses.
- Several mail clients or mail user-agents (MUA) support GnuPG at
- varying degrees. Simplifying a bit, there are two ways mail can be
- encrypted with GnuPG: the "old style" ASCII armor, i.e. plain text
- encryption, and RFC2015 style (previously PGP/MIME, now OpenPGP).
- The latter has full MIME support. Some MUAs support only one of
- them, so whichever you actually use depends on your needs as well
- as the capabilities of your addressee.
-
- The following list is probably not exhaustive:
-
- OpenPGP: Mutt (Unix), Emacs/Mew, Becky2 (Windows, with plugin),
- TkRat (Unix). There is effort for a Mozilla plugin and
- Emacs/GNUS has support in the current CVS.
-
- ASCII: Emacs/{VM,GNUS}/MailCrypt, Mutt(Unix), Pine(Unix), and
- probably many more.
-
- Good overviews of OpenPGP-support can be found at
- [H a href=http://cryptorights.org/pgp-users/pgp-mail-clients.html]http://cryptorights.org/pgp-users/pgp-mail-clients.html[H /a]
- and [H a href=http://www.geocities.com/openpgp/courrier_en.html]http://www.geocities.com/openpgp/courrier_en.html[H /a].
-
-<Q> Can't we have a gpg library?
-
- This has been frequently requested. However, the current viewpoint
- of the GnuPG maintainers is that this would lead to several security
- issues and will therefore not be implemented in the foreseeable
- future. However, for some areas of application gpgme could do the
- trick. You'll find it at [H a href=ftp://ftp.guug.de/pub/gcrypt/alpha/gpgme]ftp://ftp.guug.de/pub/gcrypt/alpha/gpgme[H /a].
-
-<Q> I have successfully generated a revocation certificate, but I don't
- understand how to send it to the key servers.
-
- Most keyservers don't accept a 'bare' revocation certificate. You
- have to import the certificate into gpg first:
-
- [H pre]
- gpg --import my-revocation.asc
- [H /pre]
-
- then send the revoked key to the keyservers:
-
- [H pre]
- gpg --keyserver certserver.pgp.com --send-keys mykeyid
- [H /pre]
-
- (or use a keyserver web interface for this).
-
-<Q> How do I put my keyring in a different directory?
-
- GnuPG keeps several files in a special homedir directory. These
- include the options file, pubring.gpg, secring.gpg, trustdb.gpg,
- and others. GnuPG will always create and use these files. On unices,
- the homedir is usually ~/.gnupg; on Windows "C:\gnupg\".
-
- If you want to put your keyrings somewhere else, use:
-
- [H pre]
- --homedir /my/path/
- [H /pre]
-
- to make GnuPG create all its files in that directory. Your keyring
- will be "/my/path/pubring.gpg". This way you can store your secrets
- on a floppy disk. Don't use "--keyring" as its purpose is to specify
- additional keyring files.
-
-
-<S> COMPATIBILITY ISSUES
-
-<Dcompat>
-<Q> How can I encrypt a message with GnuPG so that PGP is able to decrypt it?
-
- It depends on the PGP version.
-
- [H UL]
- [H LI]PGP 2.x[H br]
- You can't do that because PGP 2.x normally uses IDEA which is not
- supported by GnuPG as it is patented (see <Ridea>), but if you have a
- modified version of PGP you can try this:
-
- [H pre]
- gpg --rfc1991 --cipher-algo 3des ...
- [H/pre]
-
- Please don't pipe the data to encrypt to gpg but provide it using a
- filename; otherwise, PGP 2 will not be able to handle it.
-
- As for conventional encryption, you can't do this for PGP 2.
-
- [H LI]PGP 5.x and higher[H br]
- You need to provide two additional options:
-
- [H pre]
- --compress-algo 1 --cipher-algo cast5
- [H/pre]
-
- You may also use "3des" instead of "cast5", and "blowfish" does not
- work with all versions of PGP 5. You may also want to put:
-
- [H pre]
- compress-algo 1
- [H/pre]
-
- into your ~/.gnupg/options file - this does not affect normal GnuPG
- operation.
-
- This applies to conventional encryption as well.
- [H /UL]
-
-<Q> How do I migrate from PGP 2.x to GnuPG?
-
- PGP 2 uses the RSA and IDEA encryption algorithms. Whereas the RSA
- patent has expired and RSA is included as of GnuPG 1.0.3, the IDEA
- algorithm is still patented until 2007. Under certain conditions you
- may use IDEA even today. In that case, you may refer to Question
- <Ridea> about how to add IDEA support to GnuPG and read
- [H a href=http://www.gnupg.org/gph/en/pgp2x.html]http://www.gnupg.org/gph/en/pgp2x.html[H /a] to perform the migration.
-
-<Q> (removed)
-
- (empty)
-
-<Q> Why is PGP 5.x not able to encrypt messages with some keys?
-
- PGP, Inc. refuses to accept ElGamal keys of type 20 even for
- encryption. They only support type 16 (which is identical 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 a 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?
-
- PGP 5.x does not accept v4 signatures for data material but OpenPGP
- requests generation of v4 signatures for all kind of data, that's why
- GnuPG defaults to them. Use the option "--force-v3-sigs" to generate
- v3 signatures for data.
-
-<Q> How do I transfer owner trust values from PGP to GnuPG?
-
- There is a script in the tools directory to help you. After you have
- imported the PGP keyring you can give this command:
-
- [H pre]
- $ lspgpot pgpkeyring | gpg --import-ownertrust
- [H /pre]
-
- where pgpkeyring is the original keyring and not the GnuPG keyring
- you might have created in the first step.
-
-<Q> PGP does not like my secret key.
-
- Older PGPs probably bail out on some private comment packets used by
- GnuPG. These packets are fully in compliance with OpenPGP; however
- PGP is not really OpenPGP aware. A workaround is to export the
- secret keys with this command:
-
- [H pre]
- $ gpg --export-secret-keys --no-comment -a your-key-id
- [H /pre]
-
- Another possibility is this: by default, GnuPG encrypts your secret
- key using the Blowfish symmetric algorithm. Older PGPs will only
- understand 3DES, CAST5, or IDEA symmetric algorithms. Using the
- following method you can re-encrypt your secret gpg key with a
- different algo:
-
- [H pre]
- $ gpg --s2k-cipher-algo=CAST5 --s2k-digest-algo=SHA1 \
- --compress-algo=1 --edit-key <username>
- [H /pre]
-
- Then use passwd to change the password (just change it to the same
- thing, but it will encrypt the key with CAST5 this time).
-
- Now you can export it and PGP should be able to handle it.
-
- For PGP 6.x the following options work to export a key:
-
- [H pre]
- $ gpg --s2k-cipher-algo 3des --compress-algo 1 --rfc1991 \
- --export-secret-keys <key-ID>
- [H /pre]
-
-
-<S> PROBLEMS and ERROR MESSAGES
-
-<Q> Why do I get "gpg: Warning: using insecure memory!"
-
- On many systems this program should be installed as setuid(root).
- This is necessary to lock memory pages. Locking memory pages prevents
- the operating system from writing them to disk and thereby keeping your
- secret keys really secret. If you get no warning message about insecure
- memory your operating system supports locking without being root. The
- program drops root privileges as soon as locked memory is allocated.
-
- On UnixWare 2.x and 7.x you should install GnuPG with the 'plock'
- privilege to get the same effect:
-
- [H pre]
- filepriv -f plock /path/to/gpg
- [H /pre]
-
- If you can't or don't want to install GnuPG setuid(root), you can
- use the option "--no-secmem-warning" or put:
-
- [H pre]
- no-secmem-warning
- [H /pre]
-
- in your ~/.gnupg/options file (this disables the warning).
-
- On some systems (e.g., Windows) GnuPG does not lock memory pages
- and older GnuPG versions (<=1.0.4) issue the warning:
-
- [H pre]
- gpg: Please note that you don't have secure memory
- [H /pre]
-
- This warning can't be switched off by the above option because it
- was thought to be too serious an issue. However, it confused users
- too much, so the warning was eventually removed.
-
-<Q> Large File Support doesn't work ...
-
- LFS is correctly working in post-1.0.4 CVS. If configure doesn't
- detect it correctly, try a different (i.e., better) compiler. egcs
- 1.1.2 works fine, other gccs sometimes don't. BTW, several
- compilation problems of GnuPG 1.0.3 and 1.0.4 on HP-UX and Solaris
- were due to broken LFS support.
-
-<Q> In the edit menu the trust values is not displayed correctly after
- signing uids - why?
-
- This happens because some information is stored immediately in
- the trustdb, but the actual trust calculation can be done after the
- save command. This is a "not easy to fix" design bug which will be
- addressed in some future release.
-
-<Q> What does "skipping pubkey 1: already loaded" mean?
-
- As of GnuPG 1.0.3, the RSA algorithm is included. If you still have
- a "load-extension rsa" in your options file, the above message
- occurs. Just remove the load command from the options file.
-
-<Q> GnuPG 1.0.4 doesn't create ~/.gnupg ...
-
- That's a known bug, already fixed in newer versions.
-
-<Q> An ElGamal signature does not verify anymore since version 1.0.2 ...
-
- Use the option --emulate-md-encode-bug.
-
-<Q> Old versions of GnuPG can't verify ElGamal signatures
-
- Update to GnuPG 1.0.2 or newer.
-
-<Q> When I use --clearsign, the plain text has sometimes extra dashes
- in it - why?
-
- This is called dash-escaped text and is required by OpenPGP.
- It always happens when a line starts with a dash ("-") and is
- needed to make the lines that structure signature and text
- (i.e., "-----BEGIN PGP SIGNATURE-----") to be the only lines
- that start with two dashes.
-
- If you use GnuPG to process those messages, the extra dashes
- are removed. Good mail clients remove those extra dashes when
- displaying such a message.
-
-<Q> What is the thing with "can't handle multiple signatures"?
-
- Due to different message formats GnuPG is not always able to split
- a file with multiple signatures unambiguously into its parts. This
- error message informs you that there is something wrong with the input.
-
- The only way to have multiple signatures in a file is by using the
- OpenPGP format with one-pass-signature packets (which is GnuPG's
- default) or the cleartext signed format.
-
-<Q> If I submit a key to a keyserver, nothing happens ...
-
- You are most likely using GnuPG 1.0.2 or older on Windows. That's
- feature isn't yet implemented, but it's a bug not to say it. Newer
- versions issue a warning. Upgrade to 1.0.4 or newer.
-
-<Q> I get "gpg: waiting for lock ..."
-
- A previous gpg has most likely exited abnormally and left a lock
- file. Go to ~/.gnupg and look for .*.lock files and remove them.
-
-<Q> Older gpg's (e.g., 1.0) have problems with keys from newer gpgs ...
-
- As of 1.0.3, keys generated with gpg are created with preferences to
- TWOFISH (and AES since 1.0.4) and that also means that they have the
- capability to use the new MDC encryption method. This will go into
- OpenPGP soon and is also suppoted by PGP 7. This new method avoids
- a (not so new) attack on all email encryption systems.
-
- This in turn means that pre-1.0.3 gpg's have problems with newer
- keys. Because of security fixes, you should keep your GnuPG
- installation in a recent state anyway. As a workaround, you can
- force gpg to use a previous default cipher algo by putting:
-
- [H pre]
- cipher-algo cast5
- [H /pre]
-
- into your options file.
-
-<Q> With 1.0.4, I get "this cipher algorithm is deprecated ..."
-
- If you just generated a new key and get this message while
- encrypting, you've witnessed a bug in 1.0.4. It uses the new AES
- cipher Rijndael that is incorrectly being referred as "deprecated".
- Ignore this warning, more recent versions of gpg are corrected.
-
-<Q> Some dates are displayed as ????-??-??, why?
-
- Due to constraints in most libc implementations, dates beyond
- 2038-01-19 can't be displayed correctly. 64 bit OSes are not
- affected by this problem. To avoid printing wrong dates, GnuPG
- instead prints some question marks. To see the correct value, you
- can use the options --with-colons and --fixed-list-mode.
-
-<Q> I still have a problem. How do I report a bug?
-
- Are you sure that it's not been mentioned somewhere on the mailing
- lists? Did you have a look at the bug list (you'll find a link to
- the list of reported bugs on the documentation page). If you're not
- sure about it being a bug, you can send mail to the gnupg-devel
- list. Otherwise, use the GUUG bug tracking system
- [H a href=http://bugs.guug.de/Reporting.html]http://bugs.guug.de/Reporting.html[H /a].
-
-<Q> Why doesn't GnuPG support X509 certificates?
-
- GnuPG, first and foremost, is an implementation of the OpenPGP
- standard (RFC 2440), which is a competing infrastructure, different
- from X509.
-
- They are both public-key cryptosystems, but how the public keys are
- actually handled is different.
-
-<Q> Why do national characters in my user ID look funny?
-
- According to OpenPGP, GnuPG encodes user ID strings (and other
- things) using UTF-8. In this encoding of Unicode, most national
- characters get encoded as two- or three-byte sequences. For
- example, &aring; (0xE5 in ISO-8859-1) becomes &Atilde;&yen; (0xC3,
- 0xA5). This might also be the reason why keyservers can't find
- your key.
-
-<Q> I get 'sed' errors when running ./configure on Mac OS X ...
-
- This will be fixed after GnuPG has been upgraded to autoconf-2.50.
- Until then, find the line setting CDPATH in the configure script
- and place a:
-
- [H pre]
- unset CDPATH
- [H /pre]
-
- statement below it.
-
-<Q> Why does GnuPG 1.0.6 bail out on keyrings used with 1.0.7?
-
- There is a small bug in 1.0.6 which didn't parse trust packets
- correctly. You may want to apply this patch if you can't upgrade:
-
- [H pre]
- http://www.gnupg.org/developer/gpg-woody-fix.txt
- [H /pre]
-
-
-<S> ADVANCED TOPICS
-
-<Q> How does this whole thing work?
-
- To generate a secret/public keypair, run:
-
- [H pre]
- gpg --gen-key
- [H/pre]
-
- and choose the default values.
-
- Data that is encrypted with a public key can only be decrypted by
- the matching secret key. The secret key is protected by a password,
- the public key is not.
-
- So to send your friend a message, you would encrypt your message
- with his public key, and he would only be able to decrypt it by
- having the secret key and putting in the password to use his secret
- key.
-
- 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.
-
- 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 keyring that you keep your secret key on, and should be very
- careful with. Never ever give anyone else access to it and use a *good*
- passphrase to protect the data in it.
-
- You can 'conventionally' encrypt something by using the option 'gpg -c'.
- It is encrypted using a passphrase, and does not use public and secret
- keys. If the person you send the data to knows that passphrase, they
- can decrypt it. This is usually most useful for encrypting things to
- yourself, although you can encrypt things to your own public key in the
- same way. It should be used for communication with partners you know
- and where it is easy to exchange the passphrases (e.g. with your boy
- friend or your wife). The advantage is that you can change the
- passphrase from time to time and decrease the risk, that many old
- messages may be decrypted by people who accidently got your passphrase.
-
- You can add and copy keys to and from your keyring with the 'gpg
- --import' and 'gpg --export' option. 'gpg --export-secret-keys' will
- export secret keys. This is normally not useful, but you can generate
- the key on one machine then move it to another machine.
-
- Keys can be signed under the 'gpg --edit-key' option. When you sign a
- key, you are saying that you are certain that the key belongs to the
- person it says it comes from. You should be very sure that is really
- that person: You should verify the key fingerprint with:
-
- [H pre]
- gpg --fingerprint user-id
- [H/pre]
-
- over the phone (if you really know the voice of the other person), at a
- key signing party (which are often held at computer conferences), 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.
-
- 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 readable, just add the '-a' option. But the preferred method
- is to use a MIME aware mail reader (Mutt, Pine and many more).
-
- There is a small security glitch in the OpenPGP (and therefore GnuPG)
- system; to avoid this you should always sign and encrypt a message
- instead of only encrypting it.
-
-<Q> Why are some signatures with an ELG-E key valid?
-
- These are ElGamal keys generated by GnuPG in v3 (RFC 1991) packets.
- The OpenPGP draft later changed the algorithm identifier for ElGamal
- keys which are usable for signatures and encryption from 16 to 20.
- GnuPG now uses 20 when it generates new ElGamal keys but still
- accepts 16 (which is according to OpenPGP "encryption only") if this
- key is in a v3 packet. GnuPG is the only program which had used
- these v3 ElGamal keys - so this assumption is quite safe.
-
-<Q> How does the whole trust thing work?
-
- 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.
-
- You can see the validity (calculated trust value) using this
- command.
-
- [H pre]
- gpg --list-keys --with-colons
- [H/pre]
-
- If the first field is "pub" or "uid", the second field shows you the
- trust:
-
- [H pre]
- o = Unknown (this key is new to the system)
- e = The key has expired
- q = Undefined (no value assigned)
- n = Don't trust this key at all
- m = There is marginal trust in this key
- f = The key is full trusted
- u = The key is ultimately trusted; this is only used
- for keys for which the secret key is also available.
- r = The key has been revoked
- d = The key has been disabled
- [H/pre]
-
- The value in the "pub" record is the best one of all "uid" records.
- You can get a list of the assigned trust values (how much you trust
- the owner to correctly sign another person's key) with:
-
- [H pre]
- gpg --list-ownertrust
- [H/pre]
-
- The first field is the fingerprint of the primary key, the second
- field is the assigned value:
-
- [H pre]
- - = No Ownertrust value yet assigned.
- n = Never trust this keyholder to correctly verify others signatures.
- m = Have marginal trust in the keyholders capability to sign other
- keys.
- f = Assume that the key holder really knows how to sign keys.
- u = No need to trust ourself because we have the secret key.
- [H/pre]
-
- 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 trustdb.gpg file so it is okay
- to give a gpg keyring away (but we have a --export command too).
-
-<Q> What kind of output is this: "key C26EE891.298, uid 09FB: ...."?
-
- This is the internal representation of a user ID in the trustdb.
- "C26EE891" is the keyid, "298" is the local ID (a record number in
- the trustdb) and "09FB" is the last two bytes of a ripe-md-160 hash
- of the user ID for this key.
-
-<Q> How do I interpret some of the informational outputs?
-
- While checking the validity of a key, GnuPG sometimes prints some
- information which is prefixed with information about the checked
- item.
-
- [H pre]
- "key 12345678.3456"
- [H/pre]
-
- 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.
-
- [H pre]
- "uid 12345678.3456/ACDE"
- [H/pre]
-
- 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.
-
- [H pre]
- "sig 12345678.3456/ACDE/9A8B7C6D"
- [H/pre]
-
- This is about the signature with key ID 9A8B7C6D for the above key
- and user ID, if it is a signature which is direct on a key, the user
- ID part is empty (..//..).
-
-<Q> Are the header lines of a cleartext signature part of the signed
- material?
-
- No. For example you can add or remove "Comment:" lines. They have
- a purpose like the mail header lines. However a "Hash:" line is
- needed for OpenPGP signatures to tell the parser which hash
- algorithm to use.
-
-<Q> What is the list of preferred algorithms?
-
- The list of preferred algorithms is a list of cipher, hash and
- compression algorithms stored in the self-signature of a key during
- key generation. When you encrypt a document, GnuPG uses this list
- (which is then part of a public key) to determine which algorithms
- to use. Basically it tells other people what algorithms the
- recipient is able to handle and provides an order of preference.
-
-<Q> How do I change the list of preferred algorithms?
-
- In version 1.0.7 or later, you can use the edit menu and set the
- new list of preference using the command "setpref"; the format of
- this command resembles the output of the command "pref". The
- preference is not changed immediately but the set preference will
- be used when a new user ID is created. If you want to update the
- preferences for existing user IDs, select those user IDs (or select
- none to update all) and enter the command "updpref". Note that the
- timestamp of the self-signature is increased by one second when
- running this command.
-
-
-<S> ACKNOWLEDGEMENTS
-
- Many thanks to Nils Ellmenreich for maintaining this FAQ file for
- a long time, Werner Koch for the original FAQ file, and to all
- posters to gnupg-users and gnupg-devel. They all provided most
- of the answers.
-
- Also thanks to Casper Dik for providing us with a script to generate
- this FAQ (he uses it for the excellent Solaris2 FAQ).
-
-[H HR]
-
-Copyright (C) 2000-2002 Free Software Foundation, Inc.,
-59 Temple Place - Suite 330, Boston, MA 02111, USA
-
-Verbatim copying and distribution of this entire article is permitted in
-any medium, provided this notice is preserved.
diff --git a/doc/fr/ChangeLog b/doc/fr/ChangeLog
deleted file mode 100644
index 167093dcc..000000000
--- a/doc/fr/ChangeLog
+++ /dev/null
@@ -1,17 +0,0 @@
-2001-09-10 Gilbert Fernandes <gilbertf@posse-press.com>
-
- * Traduction en français des documents doc/*
-
-
-Copyright 2001 Free Software Foundation, Inc.
-
-Ce fichier est un logiciel libre ; l'auteur vous donne une autorisation
-spéciale de copies illimitées et/ou distribution illimitée avec ou sans
-modifications attendu que cette notice de copyright et note associée
-se trouve conservée dans le document.
-
-This file is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/doc/fr/DETAILS b/doc/fr/DETAILS
deleted file mode 100644
index 5c7246c9d..000000000
--- a/doc/fr/DETAILS
+++ /dev/null
@@ -1,945 +0,0 @@
-
-Format des listings "---with-colons"
-====================================
-
-sec::1024:17:6C7EE1B8621CC013:1998-07-07:0:::Werner Koch <werner.koch@guug.de>:
-ssb::1536:20:5CE086B5B5A18FF4:1998-07-07:0:::
-
- 1. Champ: Type d'enregistrement
- pub = clef publique
- sub = sous-clef (clef secondaire)
- sec = clef secrète
- ssb = sous-clef secrète (clef secondaire)
- uid = id d'utilisateur (seul le champ 10 est utilisé)
- sig = signature
- fpr = fingerprint: (le champ 10 est le fingerprint)
- pkd = données publiques de la clef
- (champ au format spécial, voir ci-dessous)
-
- 2. Champ: Une lettre décrivant la confiance calculée. Ce n'est qu'une
- seule lettre, mais elle fera peut-être l'objet d'une information
- supplémentaire pour les versions futures, comme décrit ici
- (ceci ne sera pas utilisé pour les clefs privées)
- o = Inconnu (cette clef est nouvelle au système)
- i = La clef est invalide (eg. il manque sa propre signature)
- d = La clef a été désactivée
- r = La clef a été révoquée
- e = La clef a expiré
- q = Non-défini (pas de valeur attribuée)
- n = Ne jamais faire confiance à cette clef
- m = Cette clef dispose d'une confiance marginale
- f = Cette clef dispose d'une confiance totale
- u = Cette clef dispose d'une confiance ultime. Cette valeur
- n'est utilisée que pour les clefs où la clef secrète est
- également disponibles.
- 3. Champ: taille de la clef en bits.
- 4. Champ: Algorithme utilisé: 1 = RSA
- 16 = ElGamal (chiffrement uniquement)
- 17 = DSA (parfois appellé DH, signature seulement)
- 20 = ElGamal (signe et chiffre)
- (pour d'autres is, consultez include/cipher.h)
- 5. Champ: ID de clef (KeyID)
- 6. Champ: Date de création (en UTC)
- 7. Champ: Date d'expiration de la clef, vide si aucune.
- 8. Champ: ID local : numéro d'enregistrement du répertoire dans la
- trustdb. Cette valeur n'est valide que tant que la
- trustdb n'est pas effacée. Vous pouvez utiliser
- "#<local-id>" comme id d'utilisateur lorsque vous spécifiez
- la clef. Ceci est requis puisque les id de clef ne sont pas
- toujours uniques - un programme peut donc utiliser ce numéro
- pour accéder aux clefs ultérieurement.
- 9. Champ: Confiance propre (clef publiques primaires uniquement)
- C'est une simple lettre, mais une information supplémentaire pourrait
- se voir ajoutée dans les versions futures.
-10. Champ: ID utilisateur. La valeur est placée entre guillemets comme une
- chaîne en C, par exemple : "\x3a".
-11. Champ: Classe de signature. C'est un nombre hexadécimal à deux chiffres
- suivi par la lettre "x" si la signature peut être exportée ou la
- lettre "l" si la signature est uniquement locale.
-12. Champ: Capacités de la clef :
- e = chiffrement
- s = signature
- c = certification
- Une clef peut disposer de toute combinaison de ces caractéristiques.
- La clef primaire dispose, en plus de ces lettres, une version en
- majuscule des lettres pour marquer les capacités "d'utilisation"
- de la totalité de la clef.
-
-Toutes les dates sont affichées dans le format :
-
-yyyy-mm-dd
-
-Sauf si vous utilisez l'option --fixed-list-mode où dans ce cas précis les
-dates sont affichées en secondes depuis Epoch. Plus de champs feront l'objet
-d'additions dans les futures versions et les parsers doivent y être préparés.
-Lorsque le parser traitera ces données, il devra s'arrêter au premier
-caractère non-numérique afin que des informations supplémentaires soient
-ajoutées à l'avenir.
-
-Le champ 1 dispose d'un tag "pkd" dont le listing ressemble à ceci :
-
-pkd:0:1024:B665B1435F4C2 .... FF26ABB:
- ! ! !-- la valeur
- ! !------ indicateur du nombre de bits de la valeur
- !--------- index (eg. DSA va de 0 à 3 : p,q,g,y)
-
-
-
-Format de la sortie "--status-fd"
-=================================
-
-Chaque ligne dispose d'un préfixe :
-
-"[GNUPG:] "
-
-Suivie par un mot clef indiquant le type de la ligne de statut,
-et quelques arguments selon le type (probablement aucun) ; une application
-devrait toujours assumer que des arguments supplémentaires seront
-présents dans les versions futures.
-
- GOODSIG <long keyid> <username>
- La signature keyid est valide.
- Pour chaque signature seul l'un des trois codes GOODSIG, BADSIG ou
- ERRSIG seront produits et ils pourront être utilisés comme
- marqueurs pour les nouvelles signatures.
-
- BADSIG <long keyid> <username>
- La signature keyid n'a pas été vérifiée correctement.
-
- ERRSIG <long keyid> <pubkey_algo> <hash_algo> \
- <sig_class> <timestamp> <rc>
- Il n'a pas été possible de vérifier la signature. Ceci peut provenir
- d'une clef publique manquante, ou bien à cause d'un algorithme non-
- supporté. Un RC de 4 indique un algorithme inconnu, un 9 indique
- une clef publique manquante. Les autres champs donnent plus d'information
- sur la signature. sig_class est une valeur hexadécimale de 2 octets.
-
- VALIDSIG <fingerprint in hex> <sig_creation_date> <sig-timestamp>
- La signature keyid est valide. C'est ici la même chose que GOODSIG
- mais avec le fingerprint comme argument. Les lignes de statut seront
- émises pour une bonne signature.
- sig-timestamp est la date de création de la signature en secondes
- depuis Epoch.
-
- SIG_ID <radix64_string> <sig_creation_date> <sig-timestamp>
- N'est émis que pour les signatures de classe 0 ou 1 qui ont été
- vérifiées comme valides. Le chaîne est un identifiant d'utilisateur
- et peut être utilisée dans les applications pour détecter les
- attaques par rejeu de messages signés. Notez que seuls les
- algorithmes DLP offrent des identifiants uniques ; les autres peuvent
- produire des id dupliqués lorsqu'ils furent créés à la même seconde.
-
- ENC_TO <long keyid> <keytype> <keylength>
- Le message est chiffré avec ce keyid.
- keytype est une valeur numérique de l'algorithme à clef publique,
- keylength est la taille de la clef ou 0 si elle n'est pas connue
- (ce qui est toujours le cas).
-
- NODATA <what>
- Aucune donnée n'a été trouvée. Les codes suivants sont utilisés :
- 1 - Pas de données sous ARMOR.
- 2 - Un paquet attendu n'a pas été trouvé.
- 3 - Paquet invalide trouvé ; ceci peut indiquer un message
- non-OpenPGP. Vous devez vous attendre à une extension
- de ces lignes de statu à l'avenir.
-
- UNEXPECTED <what>
- Des données innatendues ont été rencontrées
- 0 - pas de détail supplémentaire
-
- TRUST_UNDEFINED
- TRUST_NEVER
- TRUST_MARGINAL
- TRUST_FULLY
- TRUST_ULTIMATE
- Pour les signatures valides, l'une de ces lignes de statut sera produite
- pour indiquer le niveau de confiance attribué à la clef. Pas d'arguments
- pour l'instant.
-
- SIGEXPIRED
- La clef de signature a expiré. Pas d'arguments pour l'instant.
-
- KEYREVOKED
- L'utilisateur a révoqué sa clef. Pas d'arguments pour l'instant.
-
- BADARMOR
- L'ARMOR ASCII est corrompu. Pas d'arguments pour l'instant.
-
- RSA_OR_IDEA
- Les algorithmes IDEA ont été utilisés sur les données. Un programme
- pourra basculer sur un autre programme de traitement si GnuPG échoue.
- Ce message de statut sera affiché pour le RSA aussi, mais ceci a été
- abandonné puisque le brevêt sur le RSA a expiré.
- Toutefois, nous ne pouvons modifier le nom du message.
-
- SHM_INFO
- SHM_GET
- SHM_GET_BOOL
- SHM_GET_HIDDEN
-
- GET_BOOL
- GET_LINE
- GET_HIDDEN
- GOT_IT
-
- NEED_PASSPHRASE <long main keyid> <long keyid> <keytype> <keylength>
- Sera affiché à chaque fois qu'une phrase passe sera requise.
- keytype est la valeur numérique de l'algorithme à clef publique
- ou bien 0 si cela n'est pas applicable. keylength est la taille de la
- clef ou 0 si la taille n'est pas connue (ceci est actuellement
- toujours le cas).
-
- NEED_PASSPHRASE_SYM <cipher_algo> <s2k_mode> <s2k_hash>
- Affiché à chaque fois qu'une phrase passe pour un chiffrement
- symétrique sera requise.
-
- MISSING_PASSPHRASE
- Aucune phrase passe n'a été fournie. Une application qui rencontre
- ce message devrait stopper immédiatement le parsing car le prochain
- message sera probablement BAD_PASSPHRASE. Toutefois, si l'application
- n'est qu'un wrapper autour de la fonctionnalité d'édition de clefs,
- ceci pourrait avoir un autre sens et stopper le parsing pourrait
- être incorrect, et il faudra ignorer le BAD_PASSPHRASE.
-
- BAD_PASSPHRASE <long keyid>
- La phrase passe fournie est soit invalide, soit n'a pas été fournie.
- Dans le seconde cas vous devriez voir un MISSING_PASSPHRASE.
-
- GOOD_PASSPHRASE
- La phrase passe fournie est valide et le matériel de clefs secrète
- est utilisable.
-
- DECRYPTION_FAILED
- La déchiffrement symétrique a échoué. Il s'agit généralement d'une
- mauvaise phrase passe ne correspondant pas au message chiffré.
-
- DECRYPTION_OKAY
- Succès du déchiffrement. Ceci signifie que soit la clef secrète
- adaptée a été utilisée avec succès, soit que la phrase passe
- valide pour un chiffrement symétrique aura conduit au déchiffrement.
- Le programme pourait toutefois renvoyer un message d'erreur s'il
- n'a pas été possible de vérifier la signature.
-
- NO_PUBKEY <long keyid>
- NO_SECKEY <long keyid>
- La clef n'est pas utilisable.
-
- IMPORTED <long keyid> <username>
- Le keyid et la signature ont été importés.
-
- IMPORTED_RES <count> <no_user_id> <imported> <imported_rsa> <unchanged>
- <n_uids> <n_subk> <n_sigs> <n_revoc> <sec_read> <sec_imported> <sec_dups>
- Statistiques finales sur le processus d'importation (cette ligne est longue!)
-
- FILE_START <what> <filename>
- Début de traitement du fichier <filename>. <what> indique l'opération
- réalisée :
- 1 - vérifier
-
- FILE_DONE
- Marque la fin de traitement d'un fichier, ayant débuté avec FILE_START.
-
- BEGIN_DECRYPTION
- END_DECRYPTION
- Marque le début et la fin du processus de déchiffrement. Ces messages
- seront également produits lors de l'utilisation du mode --list-only.
-
- BEGIN_ENCRYPTION
- END_ENCRYPTION
- Marque le début et la fin du processus de chiffrement.
-
- DELETE_PROBLEM reason_code
- L'effacement d'une clef a échoué. Un code indique la raison de l'erreur :
- 1 - La clef spécifiée n'existe pas
- 2 - La clef privée doit être détruite avant !
-
- PROGRESS what char cur total
- Utilisé par les fonctions primegen et de clef publique pour indiquer
- la progression de l'opération. "char" est le caractère affiché sans
- --status-fd avec les retours à la ligne marqués par "X". "cur" indique
- la quantitité de traitement terminée et "total" indique la valeur
- finale à atteindre. Un total de 0 indique que le total n'est pas
- connu. 100/100 peut être utilisé pour détecter la fin de l'opération.
-
- SIG_CREATED <type> <pubkey algo> <hash algo> <class> <timestamp> <key fpr>
- Une signature a été créée à l'aide de ces paramètres.
- type: 'D' = détachée
- 'C' = en texte clair
- 'S' = standard
- (seul le premier caractère doit être vérifié)
- class: 2 chiffres hexadécimaux avec la classe de signature
-
- KEY_CREATED <type>
- Une clef a été créée
- type: 'B' = primaire et sous-clef
- 'P' = primaire
- 'S' = sous-clef
-
- SESSION_KEY <algo>:<hexdigits>
- La clef de session utilisée pour déchiffrer le message. Ce message
- sera seulement affiché si l'option --show-session est utilisée.
- Le format est utilisable pour un passage direct à la fonction
- --override-session-key.
-
- NOTATION_NAME <name>
- NOTATION_DATA <string>
- Le nom et la chaîne sont "escaped" à l'aide de %XX et les données
- peuvent être découpées sur plusieurs lignes notation_data.
-
- USERID_HINT <long main keyid> <string>
- Donne un indice sur l'ID utilisateur pour un keyID donné.
-
- POLICY_URL <string>
- La chaîne est "escaped" en %XX
-
- BEGIN_STREAM
- END_STREAM
- Produit par pipemode.
-
-
-Génération de clef
-==================
-
-La génération de clef marque sa progression à l'aide de différents caractères, dont
-voici la signification :
-
-"." : les 10 derniers tests Miller-Rabin ont échoué.
-"+" : réussite du test Miller-Rabin.
-"!" : Rechargement du pool avec des nombres premiers frais.
-"^" : Vérification d'une nouvelle valeur pour le générateur.
-"<" : La taille d'un facteur a été réduite.
-">" : La taille d'un facteur a été augmentée.
-
-Le nombre premier pour l'ElGamal est généré de la manière suivante :
-
-1. On crée un nombre premier q de 160, 200 ou 240 bits (selon la taille
- de la clef).
-2. On sélectionne la taille de l'autre facteur premier, afin qu'elle soit
- au moins de la taille de q et on calcule le nombre de facteurs premiers
- requis.
-3. On crée un pool de nombres premiers, chacun dont la longueur fut déterminée
- à l'étape 2.
-4. On obtient une nouvelle permutation du pool et nous continuons avec
- l'étape 3 une fois toutes les permutations testées.
-5. Le premier cancidat est calculé par p = 2 * q * p[1] * ... * p[n] + 1
-6. On vérifie que ce premier dispose de la taille désirée (ceci peut changer
- q s'il ne semble pas possible de produire un premier de la taille voulue)
-7. On vérifie si ce nombre est premier à l'aide de divisions d'essai et par
- le test de Miller-Rabin.
-8. On continue à l'étape 4 si on n'a pas trouvé de premier à l'étape 7.
-9. On trouve un générateur pour ce premier.
-
-Cet algorithme se base sur la suggestion de Lim et Lee du Crypto' 97 (p. 260).
-
-Génération de clef innatendue
-=============================
-
-Cette fonction est actuellement expérimentale et permet la production de
-clefs innatendues avec un contrôle depuis un fichier de paramètres.
-Cette fonctionnalité n'a pas fait l'objet de tests poussés ! Veuillez ne
-PAS vous plaindre si nous décidons d'apporter des modifications importantes
-à cette commande.
-
-Pour utiliser cette fonctionnalité, vous devez utiliser --gen-key en
-combinaison avec --batch et fournir les paramètres soit depuis stdin,
-soit depuis un fichier dont le nom est fourni en ligne de commande.
-
-Ce fichier devra utiliser le format suivant :
-
- o En texte uniquement, chaque ligne étant limitée à environ 1000 caractères.
- o Vous devez utiliser un codage UTF-8 pour marquer les caractères non ASCII.
- o Les lignes vides seront ignorées.
- o Les espaces en début et fin de ligne seront ignorés.
- o Un signe "-" en tant que premier caractère "non white space" marque
- une ligne de commentaire.
- o Les commandes sont marquées par un signe "%" en début de ligne,
- suivi par la commande et ses arguments sont séparés par des espaces.
- o Les paramètres sont indiqués par un mot clef, suivi par un ":". Les
- arguments sont séparés par des espaces.
- o Le premier paramètre doit être "Key-Type" et ses contrôles peuvent
- être placés à votre discrétion.
- o La génération de clef aura lieu soit à la fin du fichier de paramètres,
- soit lorsque le premier "Key-Type" est rencontré au sein du fichier,
- dans un ensenble de contrôle "%commit".
- o Les ensembles de contrôle sont :
- %echo <texte>
- Affiche <texte>
-
- %dry-run
- Ne réalise pas la production de clef (pratique pour vérifier la
- syntaxe).
-
- %commit
- Réalise la production de clef. Un commit implicite est produit
- à chaque rencontre de "Key-Type".
-
- %pubring <filename>
- %secring <filename>
- Ne renvoie pas la clef vers le sortie par défaut ou dans le keyring
- indiqué en ligne de commande, mais vers le fichier <filename>. Ce
- contrôle doit être utilisé avant que le commit ne soit rencontré.
- Toute double mention sera ignorée et le dernier nom de fichier
- rencontré sera celui utilisé. Le fichier sera utilisé jusqu'à ce
- qu'un nouveau fichier soit spécifié (au points de commit) sinon
- toutes les clefs seront placées dans le même fichier. Si un nouveau
- nom de fichier est indiqué, le fichier sera créé (et tout ancien
- fichier sera alors écrasé). Les deux indications doivent être
- fournies au contrôle.
-
- o L'ordre des paramètres n'a pas d'importance, sauf pour "Key-Type" qui
- doit être le premier paramètre rencontré. Les paramètres ne sont
- destinés qu'au bloc keybloc généré et les paramètres des productions
- précédentes de clefs ne seront pas pris en compte. Certaines
- vérifications syntaxiques seront mises en place et peuvent être
- ou non actives. Les paramètres actuellement définis sont :
-
- Key-Type: <algo-number>|<algo-string>
- Débute un nouveau bloc de paramètres indiquant le type de la clef
- primaire à produire. L'algorithme doit être capable de produire
- des signatures. Ce paramètre est indispensable !
-
- Key-Length: <length-in-bits>
- Indique la taille de la clef, en bits. La valeur par défaut est
- 1024.
-
- Subkey-Type: <algo-number>|<algo-string>
- Permet de produire une clef secondaire. Actuellement, seule une
- sous-clef peut être gérée.
-
- Subkey-Length: <length-in-bits>
- Taille de la sous-clef en bits. La valeur par défaut est
- 1024.
-
- Passphrase: <string>
- Si vous souhaitez spécifier une phrase passe pour la clef
- secrète vous pouvez utiliser cette commande. Par défaut,
- aucune phrase passe ne sera associée aux clefs privées.
-
- Name-Real: <string>
- Name-Comment: <string>
- Name-Email: <string>
- Voici les trois composantes d'une clef. Vous devez ici
- n'utiliser que de l'UTF-8. Si vous ne fournissez aucune
- de ces indications, aucun ID d'utilisateur ne sera créé.
-
- Expire-Date: <iso-date>|(<number>[d|w|m|y])
- Spécifie la date d'expiration de la clef (et de sa sous-clef)
- La date doit être entrée sous la forme d'une date au format
- ISO (année-mois-jour) ou bien sous forme d'un nombre de
- jours, de semaines, de mois ou d'années. Si vous n'utilisez
- pas de lettre pour indiquer la durée, des "jours" sont
- assumés par défaut.
-
-Voici un exemple :
-$ cat >foo <<EOF
- %echo Génération d'une clef standard
- Key-Type: DSA
- Key-Length: 1024
- Subkey-Type: ELG-E
- Subkey-Length: 1024
- Name-Real: Joe le testeur
- Name-Comment: ma phrase passe est stupide
- Name-Email: joe@foo.bar
- Expire-Date: 0
- Passphrase: abc
- %pubring foo.pub
- %secring foo.sec
- # Un commit est requis ici, pour pouvoir afficher un "done" :-)
- %commit
- %echo done
-EOF
-$ gpg --batch --gen-key -a foo
- [...]
-$ gpg --no-default-keyring --secret-keyring foo.sec \
- --keyring foo.pub --list-secret-keys
-/home/wk/work/gnupg-stable/scratch/foo.sec
-------------------------------------------
-sec 1024D/915A878D 2000-03-09 Joe le testeur (ma phrase passe est stupide) <joe@foo.bar>
-ssb 1024g/8F70E2C0 2000-03-09
-
-
-
-Composition de la TrustDB
-=========================
-
-La TrustDB est construire à partir d'enregistrements à taille fixe, où le premier
-octet décrit le type d'enregistrement. Toutes les valeurs numériques sont
-conservées dans un réseau d'ordre d'octets. La longueur de chaque enregistrement
-est de 40 octets. Le premier enregistrement de la TrustDB est toujours de type 1
-et c'est le seul enregistrement de ce type.
-
- Record type 0:
- --------------
-
- Cet enregistrement n'est pas utilisé. Il peut être utilisé
- à votre discrétion.
-
- Record type 1:
- --------------
-
- Indique la version de la TrustDB. Cet enregistrement doit toujours être
- le premier enregistrement de la base de données et c'est le seul
- enregistrement de type 1.
-
- 1 octet valeur : 1
- 3 octets 'gpg' valeur "magic"
- 1 octet Version de la TrustDB (2)
- 1 octet marginales requises
- 1 octet complètes requises
- 1 octet max_cert_depth
-
- Ces trois éléments sont utilisés pour vérifier si la valeur de validité
- mise en cache dans l'enregistrement du répertoire peut être utilisée :
-
- 1 u32 locked flags
- 1 u32 datation de la création de la trustdb
- 1 u32 datation de la dernière modification
-
- Cette datation pourrait affecter la validité des clefs dans la base de
- données. Cette valeur sera comparée à celle de la datation de validité
- des enregistrements dir :
-
- 1 u32 datation de la dernière validation
-
- Cette valeur sera utilisée pour stocker le passage du temps, lorsque
- cette TrustDB sera comparée au trousseau de clefs publiques :
-
- 1 u32 numéro de l'enregistrement du keyhashtable
- 1 u32 premier enregistrement libre
- 1 u32 numéro de l'enregistrement répertoire shadow de la table de hachage
-
- Cette table ne devrait pas être combinée avec la table de clefs car le
- keyid n'est pas dans chaque cas un élément du fingerprint.
-
- 4 bytes réservés pour l'enregistrement d'extension de version
-
-
- Record type 2: (enregistrement répertoire)
- --------------
-
- Regroupe les informations sur un certificat de clef publique.
- Ces valeur sont statiques et ne sont jamais modifiées sans une
- interaction avec l'utilisateur :
-
- 1 octet valeur : 2
- 1 octet réservé
- 1 u32 LID . (numéro d'enregistrement de cet enregistrement)
- 1 u32 Liste de key-records (le premier est la clef primaire)
- 1 u32 Liste de uid-records
- 1 u32 cache record
- 1 octet ownertrust
- 1 octet dirflag
- 1 octet validité maximale de tous les id utilisateurs
- 1 u32 datation de la dernière vérification de validité
- 1 u32 Vérification requise lorsque cette datation sera atteinte
- (0 = pas de vérification requise)
-
-
- Record type 3: (enregistrement de clef)
- --------------
-
- Regroupe les informations sur une clef publique primaire.
- (ces informations sont principalement utilisées pour réaliser les lookup
- dans l'enregistrement trust)
-
- 1 octet valeur : 3
- 1 octet réservé
- 1 u32 LID
- 1 u32 next - prochain enregistrement
- 7 octets réservés
- 1 octet keyflags
- 1 octet algorithme de la clef publique
- 1 octet taille du fingerprint (en octets)
- 20 octets fingerprint de la clef publique
- (Cette valeur est utilisée pour identifier toute clef)
-
- Record type 4: (enregistrement uid)
- --------------
-
- Regroupe les informations sur un id utilisateur (un "uid").
- Nous ne stockons par l'uid mais un hachage de l'uid : cela semble suffire.
-
- 1 octet valeur : 4
- 1 octet réservé
- 1 u32 LID pointe vers l'enregistrement directory
- 1 u32 next le userid suivant
- 1 u32 pointeur vers l'enregistrement preference
- 1 u32 siglist liste de signatures valides
- 1 octet uidflags
- 1 octet validité de la clef calculée pour cet userid
- 20 bytes ripemd160 hachage du nom de l'utilisateur
-
-
- Record type 5: (enregistrement pref)
- --------------
-
- Regroupe les informations formant les préférences.
-
- 1 octet valeur : 5
- 1 octet réservé
- 1 u32 LID; pointe vers l'enregistrement directory (et PAS vers le uid !!!)
- (égal à 0 pour un enregistrement de préférences standard)
- 1 u32 suivant
- 30 byte données de préférences
-
- Record type 6 (sigrec)
- -------------
-
- Cet enregistrement est utilisé pour traquer les signatures de clefs. Les
- auto-signatures ne sont pas conservées. Si une clef publique ne se trouve
- pas dans la TrustDB, la signature pointe vers un enregistrement dir fantôme,
- lequel contient une liste des enregistrements qui seraient intéressés
- par cette clef (et l'enregistrement signature en fait partie).
-
- 1 octet valeur : 6
- 1 octet réservé
- 1 u32 LID pointe en retour vers l'enregistrment dir
- 1 u32 next prochain sigrec de cet uid ou bien 0 pour indiquer que ce
- sigrec est le dernier.
- 6 times
- 1 u32 Local_id des dir signatures ou de l'enregistrement dir fantôme
- 1 octet Flag: Bit 0 = vérifié: Bit 1 est valide (nous avons un
- véritable enregistrement directory)
- 1 = valide est vrai (mais pourrait être révoqué)
-
-
-
- Record type 8: (enregistrement répertoire (dir) fantôme)
- --------------
-
- Cet enregistrement est utilisé pour réserver un LID pour une clef publique.
- Nous avons besoin de cet enregistrement pour créer les enregistrements sigs
- des autres clefs, même si nous ne disposons pas d'une signature de la clef
- publique.
- Cet enregistrement (le numéro d'enregistrement pour être plus précis)
- sera réutilisé dans l'enregistrement dir lorsque nous importerons la
- véritable clef publique.
-
- 1 octet valeur : 8
- 1 octet réservé
- 1 u32 LID (Ceci est simplement le numéro d'enregistrement de ce record.)
- 2 u32 keyid
- 1 octet algorithme de la clef publique
- 3 octets réservé
- 1 u32 hintlist
-
- hintlist contient la liste des enregistrements qui ont des références qui pointent
- vers cette clef. Nous utilisons cet élément pour augmenter la vitesse d'accès
- des enregistrements de signature qui ne sont pas encore vérifiés. Notez que ces
- données ne sont qu'un indice, une indication ("hint") mais les enregistrements actuels
- pourraient ne pas détenir d'enregistrement de signature pour la clef, mais le
- code du programme saura prendre soin de tout cela.
-
- 18 octets réservés
-
-
-
- Record Type 10 (table de hachage)
- --------------
-
- Comme nous utilisons les fingerprint pour accéder aux clefs, nous devons
- implémenter un accès rapide en utilisant des méthodes de hachages simples,
- afin d'éviter une surcharge de gdbm. La propriété des fingerprint
- est qu'ils permettent un usage direct en tant que valeurs hachées (ils
- peuvent être considérés comme des nombres aléatoires cryptographiquement
- forts).
- Nous utilisons une architecture à multiples niveaux dynamique, qui combine
- les tables de hachage, les listes d'enregistrements et les listes
- chaînées.
-
- Cet enregistrement est une table de hachages de 256 entrées ; une propriété
- spéciale est que tous les enregistrements sont stockés consécutivement
- pour produire une grande table. La valeur hachée est simplement le 1er,
- 2nd.. octet du fingerprint (selon le niveau d'indirection).
-
- Lorsque nous les utilisons pour hacher les enregistrements de répertoires
- shadow, une différente table est utilisée, et elle se trouve indexée
- par le keyid.
-
- 1 octet valeur : 10
- 1 octet réservé
- n u32 recnum; n dépend de la taille de l'enregistrement :
- n = (reclen-2)/4 ce qui donne 9 pour la taille actuelle
- d'enregistrement de 40 octets.
-
- Le nombre total de ces enregistrements constituant la table est :
-
- m = (256+n-1) / n
-
- ce qui donne 29 pour une taille d'enregistrement de 40.
-
- Pour rechercher une clef, nous utilisons le premier octet du fingerprint
- pour obtenir le recnum de la table de hachage et nous étudions l'enregistrement
- adressé :
-
- o Si cet enregistrement est une autre table de hachage, nous pouvons
- utiliser le second octet pour indexer cette table de hachage et continuer.
-
- o Si cet enregistrement est une liste de hachages, nous pouvons parcourir
- toutes les entrées jusqu'à trouver la bonne.
-
- o Si cet enregistrement est un enregistrement de clef, nous comparons
- le fingerprint avec celui recherché et nous déterminons s'il s'agit
- de la clef recherchée.
-
-
-
- Record type 11 (liste hachée)
- --------------
-
- Consultez la table hachée pour une explication.
- Ceci sera également utilisé à d'autres fins.
-
- 1 octet valeur : 11
- 1 octet réservé
- 1 u32 next enregistrement de liste hachée suivant
- n times n = (reclen-5)/5
- 1 u32 recnum
-
- Pour la taille actuelle utilisée par les enregistrements (taille 40) nous avons n = 7.
-
-
-
-
- Record type 254 (enregistrement libre)
- ---------------
-
-Tous ces enregistrements forment une liste chaînée d'enregistrements non-utilisés.
-
- 1 octet valeur 254
- 1 octet réservé (0)
- 1 u32 next_free
-
-
-
-En-têtes de paquets
-===================
-
-GnuPG utilise des en-têtes PGP 2 et il est aussi capable de comprendre
-les en-têtes de type OpenPGP. C'est une amélioration utilisée sur les anciens
-en-têtes de paquets :
-
-Les CTB bits 10, les "packet-length length bits" ont leurs valeurs listées
-dans la table suivante :
-
- 00 - 1-octet champ packet-length
- 01 - 2-octets champ packet-length
- 10 - 4-octets champ packet-length
- 11 - pas de taille de paquet fournie, taille inconnue
-
-Comme indiqué dans cette table, selon la taille du packet-length les
-octets restants (1, 2, 4 ou 0) du champ de structure de paquets sont
-un "champ packet-length". Ce champ est une valeur numérique à part entière.
-La valeur du champ packet-length est définie par la valeur de la
-totalité du champ numérique.
-
-La valeur 11 est actuellement utilisée dans un cas : les données
-compressées. C''est à dire qu'un bloc de données compressées
-ressemble à : <A3 01 .. .. > où A3 est le binaire "10 1000 11" et
-produit ici un paquet de taille non-définie. L'interprétation
-correcte en est : "jusqu'à la fin de la structure englobante"
-bien qu'en fait la structure englobante soit généralement
-le fichier.
-
-+ Ceci sera modifié dans une future version, où la signification de la
-+ valeur 11 (voir ci-dessous) aura aussi sa place.
-+
-+ Une valeur de 11 pour d'autres paquets active un codage spécial
-+ de la taille, où la taille du paquet suivant ne pourra pas être
-+ déterminée avant l'écriture du paquet, en particulier ceci sera
-+ utilisé si de grande quantités de données sont à traiter dans
-+ un mode filtre.
-+
-+ Ceci fonctionne de la manière suivante : après le CTB (qui est un
-+ champ de longueur de 11) un champ marqueur sera utilisé, il indiquera
-+ alors la taille du bloc de données suivant. C'est un simple champ
-+ de deux octets (MSB en premier) contenant la quantité de données qui
-+ suivent le champ, sans inclure le champ de taille toutefois. Après
-+ ce bloc de données un autre champ de taille suivra, qui donnera la taille
-+ du bloc de données suivant. Une valeur de 0 indique une fin de paquet.
-+ La taille maximale d'un bloc de données est limitée à 65534, ce qui
-+ réserve la valeur 0xffff pour des extensions futures. Ces marqueurs de
-+ taille devront être insérés dans le flux de données avant que les
-+ données ne soient envoyées en sortie.
-+
-+ Ce champ de deux octets est largement suffisant, car l'application
-+ doit placer en tampon cette quantité de données pour précéder le
-+ marqueur de taille avant de produire une sortie. Les blocs de données
-+ d'une taille supérieure à 32 Ko n'ont aucun sens. Notez que ceci pourra
-+ également être utilisé pour les flux de données compressées, mais
-+ nous devrons alors utiliser une autre version de paquet afin de dire à
-+ l'application qu'elle ne peut assumer qu'il s'agit du dernier paquet.
-
-
-Extensions GNU à l'algorithme S2K
-=================================
-
-Le S2K mode 101 est utilisé pour identifier ces extensions.
-Après l'algorithme de hachage les trois octets "GNU" sont utilisés
-pour indiquer clairement qu'il s'agit d'extensions GNU et les octets
-qui suivent donnent le mode de protection GNU utilisé : 1000. Les
-modes définis sont :
-
- 1001 - ne pas conserver du tout de partie secrète
-
-
-
-Usage des fichiers gdbm pour les trousseaux de clefs
-====================================================
-
-La clef utilisé pour stocker le keyblock est son propre fingerprint,
-les autres enregistrements sont utilisés pour les clefs secondaires.
-Les fingerprint font toujours 20 octets où 16 bits de fingerprint
-sont suivis par 0. Le premier octet de chaque clef indique une
-information sur le type de clef :
-
- 1 = la clef est un fingerprint de 20 octets (16 octets fpr "paddés" de 0)
- les données sont le keyblock
- 2 = la clef est un keyid complet de 8 octets
- les données sont une liste de 20 octets fingerprints
- 3 = la clef est un keyid court de 4 octets
- les données sont une liste de 20 octets fingerprints
- 4 = la clef est une adresse email
- les données sont une liste de 20 octets fingerprints
-
- Les données sont pre-appended (précédées) par un octet de type :
-
- 1 = keyblock
- 2 = liste de 20 octets fingerprints "paddés"
- 3 = liste de liste de fingerprints ("but how to we key them?")
-
-
-
-Pipemode
-========
-
-Ce mode est utilisé pour réaliser des opérations multiples avec un
-unique appel à gpg. C'est assez pratique lorsqu'il faut pouvoir vérifier
-un grand nombre de signatures. Actuellement nous n'avons qu'un support
-des signatures détachées. Ce mode est une astuce qui permet d'éviter
-de faire fonctionner gpg n en daemon mode et d'utiliser les Unix Domain
-Sockets pour lui faire passer les données. Il n'existe aucun moyen
-pratique de portabilité de ce concept sous Windows, alors nous utilisons
-des pipes simples pour faire fonctionner ce mode sous Windows. Comme nous
-n'avons aucun moyen de signaler des EOF multiples dans un pipe nous
-devons laisser le contrôle s'insérer dans le flux de données lui-même.
-Nous réalisons alors une distinction entre les données du flux et un
-état de contrôle. A son lancement, le système se trouve dans un état
-de données mais n'acceptera aucune donnée. Il attend en fait une
-transition vers un mode de contrôle qui s'obtient en envoyant un simple
-caractère '@'. Une fois dans le mode de contrôle, des commandes sont
-attendues et ces commandes sont à un octet après lequel le système
-revient au mode de données (mais cela n'implique pas qu'il acceptera
-des données immédiatement). La commande de contrôle la plus simple
-est '@' qui permet d'insérer ce caractère dans le flux de données.
-
-Voici le format que nous utilisons pour les signatures détachées :
-
-"@<" - Début d'un nouveau flux
-"@B" - La signature détachée suit.
- Ceci émet le paquet de contrôle (1,'B')
-<detached_signature>
-"@t" - Le texte signé suit.
- Ceci émet le paquet de contrôle (2, 'B')
-<signed_text>
-"@." - Fin de l'opération. Le paquet de contrôle final force la
- vérification de la signature.
-"@>" - Fin du flux.
-
-
-
-Autres notes
-============
-
-Dans la version* 3 de version de paquet nous calculons les keyid de cette manière :
-
-RSA : les 64 bits de poids faible de n
-ELGAMAL : nous construisons un paquet de clef publique v3 (avec CTB 0x99)
- et nous calculons une valeur hachée rmd160 à partir de ce paquet.
- Il est utilisé comme fingerprint avec les 64 bits de poids faible
- qui produisent le keyid.
-
-* Les certificats de révocation ne comportent qu'un paquet de signature ;
-"import" sait comment traiter ces paquets. L'idée derrière ce principe
-est de conserver une petite taille de paquet.
-
-
-
-Format des messages Keyserver
-=============================
-
-Le serveur de clef peut être contacté par un Unix Domain Socket ou via TCP.
-
-Le format des requêtes est :
-
-====
-command-tag
-"Content-length:" digits
-CRLF
-=======
-
-Où le command-tag est :
-
-NOOP
-GET <user-name>
-PUT
-DELETE <user-name>
-
-
-Le format de réponse utilisé est :
-
-======
-"GNUPG/1.0" status-code status-text
-"Content-length:" digits
-CRLF
-============
-
-suivi par <digits> octets de données.
-
-
-Les codes de statut utilisés sont :
-
- o 1xx: Information: requête reçue, traitement en cours.
-
- o 2xx: Succès - L'action a été reçue, comprise et acceptée.
-
- o 4xx: Erreur client : la requête contient une erreur, mauvaise syntaxe
- ou demande irréalisable.
-
- o 5xx: Erreur serveur - Le serveur n'a pu traiter une demande
- qui semble valide.
-
-
-Documentation sur HKP (le protocol de serveurs de clefs http)
-=============================================================
-
-Un serveur HTTP minimal sur port 11371 reconnaît les requêtes GET
-pour /pks/lookup. Les paramètres standard encodés URL de la requête
-sont toujours ceux-ci : (toujours key=valeur)
-
-- op=index (comme pgp -kv), op=vindex (comme pgp -kvv) and op=get (comme
- pgp -kxa)
-
-- search=<stringlist>. Nous avons ici une liste de mots qui doivent
- apparaître dans la clef. Ces mots sont séparés par des espaces,
- points, @, etc. Les délimiteurs ne feront pas partie de la
- recherche et l'ordre des mots n'a aucune importance (mais consultez
- l'option suivante).
-
-- exact=on. Ce switch permet d'indiquer au serveur hkp qu'il ne doit
- rechercher que les correspondances exactes. Dans ce cas, les
- délimiteurs et l'ordre des mots sera considéré.
-
-- fingerprint=on. Renvoie également les fingerprint, lorsque utilisé
- avec 'index' ou 'vindex'
-
-Les serveurs de clefs savent aussi reconnaître le format http-POST vers /pks/add.
-Vous utilisez ceci pour envoyer des clefs au serveur.
-
-Le mieux pour produire une requête reste :
-
- /pks/lookup/<gnupg_formatierte_user_id>?op=<operation>
-
-Ceci peut être implémenté en utilisant le mécanisme de traduction Hurd.
-Toutefois, nous pensons que les traitements du serveur de clef doivent
-faire l'objet d'une refonte.
diff --git a/doc/fr/FAQ b/doc/fr/FAQ
deleted file mode 100644
index 48c28ae76..000000000
--- a/doc/fr/FAQ
+++ /dev/null
@@ -1,1111 +0,0 @@
-
-GNUPG : FOIRE AUX QUESTIONS
-
-Version : 1.2
-Dernière modification : 10 septembre 2001
-Maintenu par : Nils Ellmenreich <nils 'at' gnupg.org>
-Traduction : Gilbert Fernandes <gilbertf 'at' posse-press.com>
-
-Ce document est la FAQ de GnuPG. La dernière version HTML est
-disponble ici : <http://www.gnupg.org/faq.html>
-
-L'index est produit automatiquement. Des erreurs peuvent donc
-s'y trouver. Toutes les questions ne seront pas situées dans leurs
-sections afférentes. Les suggestions quand à l'amélioration de cette
-FAQ seront les bienvenues.
-
-Veuilez envoyer vos additions et corrections au mainteneur de la FAQ.
-Il serait plus pratique si vous pouviez fournir une réponse à inclure
-directement dans la FAQ. Toute aide sera fortement appréciée.
-
-Veuillez ne pas nous envoyer de message du type : "Ceci devrait
-être une FAQ, quelle est la réponse ?". Si la réponse ne se trouve
-pas dans la FAQ c'est que la question n'a pas été considérée.
-Dans ce cas, recherchez dans les archives de la liste de
-distribution par email.
-
-
-
-
- 1. GENERAL
- 1.1) Qu'est-ce que GnuPG ?
- 1.2) GnuPG est-il compatible avec PGP ?
-
- 2. SOURCES D'INFORMATION
- 2.1) Où puis-je trouver plus d'informations ?
- 2.2) Où puis-je obtenir GnuPG ?
-
- 3. INSTALLATION
- 3.1) Sur quels systèmes fonctionne GnuPG ?
- 3.2) Quel collecteur d'entropie dois-je utiliser ?
- 3.3) Comment puis-je inclure le support du RSA et de l'IDEA ?
-
- 4. UTILISATION
- 4.1) Quelle est la taille de clef recommandée ?
- 4.2) Pourquoi la création de clefs est-elle aussi longue ?
- 4.3) Pourquoi tout est si lent quand je travaille sur un système distant ?
- 4.4) Quelle est la différence entre options et commandes ?
- 4.5) Je ne peux pas effacer un userid car il a déjà été effacé dans mon
- trousseau de clefs publiques ?
- 4.6) Que sont la confiance, la validité et l'ownertrust ?
- 4.7) Comment puis-je signer un fichier de patch ?
- 4.8) Où se trouve l'option "encrypt-to-self" ?
- 4.9) Comment puis-je me débarasser de la version et du champ de commentaire
- dans la version "armor" des messages ?
- 4.10) Que signifie le message "You are using the xxxx character set" ?
- 4.11) Comment puis-je obtenir la liste des keyid ayant servi à
- chiffrer un message ?
- 4.12) Je ne peux plus déchiffrer mon message chiffré symétriquement (-c) avec la nouvelle
-version de GnuPG ?
- 4.13) Comment puis-je utiliser GnuPG en environnement automatisé ?
- 4.14) Quel client email puis-je utiliser avec GnuPG ?
- 4.15) On ne peut pas avoir une librairie gpg ?
- 4.16) J'ai produit avec succès un certificat de révocation, mais comment dois-je
- le transmettre aux serveurs de clefs ?
-
- 5. QUESTIONS SUR LA COMPATIBILITE
- 5.1) Comment puis-je chiffrer un message avec GnuPG pour que PGP soit capable de le déchiffrer ?
- 5.2) Comment migrer de PGP 2.x vers GnuPG ?
- 5.3) (supprimé)
- 5.4) Pourquoi PGP 5.x n'est pas capable de déchiffrer les messages pour certaines clefs ?
- 5.5) Pourquoi PGP 5.x ne peut vérifier mes messages ?
- 5.6) Comment puis-je transférer mes valeurs de confiance de PGP vers GnuPG ?
- 5.7) PGP n'aime pas ma clef privée.
-
- 6. PROBLEMES ET MESSAGES D'ERREUR
- 6.1) Pourquoi GnupG me dit sans cesse "Warning : using insecure memory!" ?
- 6.2) Le support des fichiers de grande taille ne fonctionne pas ..
- 6.3) Dans le menu d'édition les valeurs de confiance ne sont pas affichées
- correctement après la signature des uid : pourquoi ?
- 6.4) Que signifie "skipping pubkey 1: already loaded" ?
- 6.5) GnuPG 1.0.4 ne tient pas compte de ~/.gnupg ...
- 6.6) Une signature ElGamal ne vérifie plus rien depuis la 1.0.2 ..
- 6.7) Les anciennes versions de GnuPG ne vérifient pas les anciennes
- signatures ElGamal
- 6.8) Lorsque j'utilise --clearsign le texte en clair comporte parfois des
- tirets supplémentaires : pourquoi ?
- 6.9) Que signifie "can't handle multiple signatures" ?
- 6.10) Si je soumet une clef au serveur de clefs, rien ne survient !
- 6.11) J'obtiens un "gpg: waiting for lock ..."
- 6.12) Les anciennes versions de GnuPG (e.g. 1.0) ont des problèmes
- avec les clefs de GnuPG récents ..
- 6.13) Avec GnuPG 1.0.4 j'obtiens un "this cipher algorithm is deprecated ..."
- 6.14) Les dates sont affichées par ????-??-??, pourquoi ?
- 6.15) J'ai encore un problème, dois-je produire un message de bogue ?
- 6.16) Pourquoi GnuPG ne supporte pas les certificats X.509 ?
-
- 7. SUJETS AVANCES
- 7.1) Comment tout cela fonctionne-t-il ?
- 7.2) Pourquoi certaines signatures avec une clef ELG-E sont valides ?
- 7.3) Comment tout le système de confiance fonctionne au juste ?
- 7.4) Quel est ce genre de sortie : "key C26EE891.298, uid 09FB: ...."?
- 7.5) Comment interpréter certaines sorties informatives ?
- 7.6) Les lignes d'en-tête des messages font-elles parties des éléments signés ?
- 7.7) Quelle est la liste des algorithmes préférés ?
- 7.8) Comment puis-je changer la liste des algorithmes préférés ?
-
- 8. REMERCIEMENTS
-
-
-
-1. GENERAL
-
-1.1) Qu'est-ce que GnuPG ?
-
-GnuPG signifie GNU Privacy Guard et <http://www.gnupg.org> est
-l'outil GNU destiné aux communications protégées par chiffrement,
-ainsi que le stockage protégé d'informations. Ce programme peut
-être utilisé pour chiffrer des données et produire des signatures
-numériques. Il comprend une gestion avancée des clefs et respecte
-le standard Internet proposé OpenPGP comme décrit dans le
-RFC 2440 : <http://www.gnupg.org/rfc2440.html> et il se destine
-à une parfaite compatibilité avec le PGP produit par NAI Inc.
-
-1.2) GnuPG est-il compatible avec PGP ?
-
-En règle générale, oui. GnuPG et les distributions récentes de PGP
-devraient respecter le standard OpenPGP et fonctionner de concert.
-Il existe toutefois quelques problèmes d'interopérabilité. Consultez
-les questions 5.1ff pour plus de détails.
-
-2. SOURCES D'INFORMATION
-
-2.1) Où puis-je trouver plus d'informations ?
-
-Voici une liste de ressources en ligne :
-
-<http://www.gnupg.org/docs.html>
-
-Cette page regroupe la page de documentation GnuPG. Vous pouvez consulter
-les HOWTO ainsi que le manuel de GnuPG : le GNU Privacy Handbook
-actuellement disponible en anglais, espagnol et russe. Ce dernier offre par
-ailleurs une présentation étendue de GnuPG. Vous trouverez aussi des
-documentations expliquant la conversion de PGP 2.x vers GnuPG.
-
-<http://lists.gnupg.org>
-
-Vous trouverez ici une archive en ligne des listes de distribution par
-courrier électronique de GnuPG. La liste la plus intéressante sera
-probablement gnupg-users où toutes les questions en rapport avec
-l'utilisation de GnuPG se trouvent rassemblées. Si le développement
-vous intéresse vous consulterez avec joie la liste gnupg-devel et
-vous pourrez également prendre contact avec les développeurs.
-
-S'IL-VOUS-PLAIT !
-
-Avant de poster sur une liste, veuillez lire avec attention la FAQ et
-toutes les documentations disponibles. D'autre part, vous devez ensuite
-consulter les archives afin de découvrir si votre question n'a pas été
-déjà posée et résolue. Vous épargnerez des pertes de temps et la
-liste pourra se concentrer sur les problèmes qui n'ont pas encore
-été résolus.
-
-La distribution des sources de GnuPG comprend également un
-sous-répertoire /doc qui contient des documentations supplémentaires
-et ces informations seront précieuses aux hackers (pas beaucoup aux
-utilisateurs habituels, sauf les plus curieux).
-
-2.2) Où puis-je obtenir GnuPG ?
-
-Vous pouvez télécharger GNU Privacy Guard depuis son FTP primaire :
-
-<ftp.gnupg.org>
-
-Ou depuis l'un des mirroirs :
-
-<http://www.gnupg.org/mirror.html>
-
-La version actuelle est la version 1.0.6 et nous vous encourageons à migrer
-vers cette version rapidement : elle corrige des bogues et améliore le
-fonctionnement du programme, ainsi que votre sécurité de fait.
-
-
-3. INSTALLATION
-
-3.1) Sur quels systèmes fonctionne GnuPG ?
-
-GnuPG devrait fonctionner sur tous les Unices ainsi que Windows (95, 98..) et les variantes
-NT. Une liste de systèmes d'exploitation fonctionnels se trouve à :
-
-<http://www.gnupg.org/gnupg.html#supsys>
-
-3.2) Quel collecteur d'entropie dois-je utiliser ?
-
-Les "bons" générateurs de nombres aléatoires sont cruciaux pour la sécurité de vos
-chiffrements. Les différents systèmes d'exploitation proposent des valeurs
-aléatoires de qualité variable. Linux et les systèmes *BSD produisent généralement
-de bonnes valeurs grâce au /dev/random et cette méthode devrait rester la
-méthode de choix pour ces systèmes. Les utilisateurs de Solaris devraient opter
-pour pe paquetage SUNWski afin de disposer d'un /dev/random. Dans ces cas,
-vous devriez utiliser l'option --enable-static-rnd=linux. D'autre part, il existe également
-un dispositif au niveau kernel pour la production de valeurs aléatoires développé
-par Andi Maier :
-
-< http://www.cosy.sbg.ac.at/~andi>
-
-Ce logiciel est au stade de beta : vous ne l'utilisez que sous votre seule
-responsabilité !
-
-Sur les autres systèmes, l'utilisation de l'EGC ou "Entropy Gathering Daemon"
-se montre un bon choix. C'est un daemon écrit en Perl qui surveille l'activité du
-système et produit des hachages permettant d'obtenir des valeurs aléatoires.
-Vous devriez en consulter la page de téléchargement depuis :
-
-<http://www.gnupg.org/download.html>
-
-Pour l'utiliser vous devrez utiliser l'option --enable-static-rnd=egd
-
-Si les options ci-dessus ne fonctionne pas, vous pourrez utiliser le producteur
-d'entropie "unix". Il est *TRES* lent et il devrait être évité lorsque possible.
-Sa qualité d'entropie laisse vraiment à désirer et vous ne devrez jamais
-l'utiliser dans la protection de données sensibles.
-
-3.3) Comment puis-je inclure le support du RSA et de l'IDEA ?
-
-RSA se trouve inclus dans GnuPG depuis la version 1.0.3 et supérieures.
-
-La distribution officielle de GnuPG ne comprend pas l'IDEA à cause
-d'une restriction par brevêt. Le brevêt devrait expirer en 2007 et nous
-attendons cette date pour l'inclure dans GnuPG.
-
-Toutefois, il existe des modules officieux qui permettent de l'inclure
-même dans les versions de GnuPG avant cette date. Ces modules
-sont disponibles depuis :
-
-<ftp://ftp.gnupg.org/pub/gcrypt/contrib/>
-
-Recherchez 'idea.c'
-
-Les directives de compilation se trouvent dans les fichiers "headers" de
-ces fichiers. Vous pourrez ensuite ajouter la ligne suivante à votre
-fichier ~/.gnupg/options :
-
- load-extension idea
-
-4. USAGE
-
-4.1) Quelle est la taille de clef recommandée ?
-
-Nous vous recommandons un minimum de 1024 bits pour les clefs de type
-DSA et également pour les signatures simples de type ElGamal. La taille
-du hachage est probablement le lien le plus faible si la taille de la clef
-augmente à plus de 1024 bits. Les clefs de chiffrement peuvent avoir
-des tailles supérieures, mais vous devriez alors vérifier le fingerprint
-de la clef de cette manière :
-
-gpg --fingerprint --fingerprint <user ID>
-
-Comme pour les algorithmes de clef, vous devriez vous en tenir aux
-valeurs par défaut (i.e. les chiffrements ElGamal avec signature
-DSA). Une clef de signature ElGamal comporte les désavantages
-suivants : si la signature est grosse, il est difficile de créer une
-clef correspondante utile pour les signatures et capable de résister
-aux attaques réelles, et vous n'obtiendrez pas de sécurité
-supplémentaire face au DSA. Il pourrait y avoir des problèmes
-de compatibilité avec certaines versions de PGP. Il n'aura été
-introduit que parce à l'époque, il n'était pas clair de savoir si
-un brevêt s'appliquait ou non au DSA.
-
-4.2) Pourquoi la création de clefs est-elle aussi longue ?
-
-Le problème est ici que nous avons besoin d'une grande quantité d'octets aléatoires et que
-nous devons pour ce faire collecter une certaine quantité d'entropie depuis, sous Linux,
-le /dev/random. Il n'est pas vraiment facile de remplir l'entropie de Linux ; nous en avons
-discuté avec Ted Ts'o et il a expliqué que la meilleure méthode pour remplir le buffer
-n'est autre que de jouer avec votre clavier. Une bonne sécurité implique un coût.
-Vous pouvez utiliser les touches Shift, Control, Alt en appuyant dessus de manière aléatoire,
-d'autant que ces touches ne produisent aucune sortie à l'écran et vous pourrez accélérer
-la production des clefs.
-
-Un autre programme pourrait également consommer une partie de l'entropie du système
-dont vous avez besoin (jettez un oeil à vos daemons actifs).
-
-4.3) Pourquoi tout est si lent quand je travaille sur un système distant ?
-
-Vous ne devez SURTOUT pas faire cela ! Vous ne devez jamais créer de
-clef GnuPG sur un système distant car vous n'aurez alors aucun contrôle
-physique sur votre clef privée, ni même votre trousseau de clefs privées.
-Ces clefs seront alors suspectibles de subir une attaque par dictionnaire.
-Nous vous encourageons vivement à ne produire vos clefs que sur une
-machine personnelle (un portable déconnecté de toute alimentation
-et connexion réseau est le meilleur choix) et si vous devez conserver
-votre clef privée sur une machine fixe, assurez-vous qu'une phrase
-passe solide en protège le contenu et que vous pouvez faire confiance
-à votre administrateur système.
-
-Lorsque nous devons utiliser GnuPG à distance c'est au-travers de SSH
-et nous rencontrons le même problème. Il faut *beaucoup* de temps
-pour produire des clefs de toute manière. Il ne faut pas créer de clefs
-à distance. Si vous avez juste besoin de clefs à fins de tests, vous
-pouvez utiliser l'optoin --quick-random pour produire rapidement des
-clefs *faibles* qui permettent de vérifier quelques tests.
-
-4.4) Quelle est la différence entre options et commandes ?
-
-Si vous tapez 'gpg --help' vous obtiendrez deux listes séparées. La première
-liste vous répertorie les commandes. La seconde liste regroupe elle les
-options. A chaque fois que vous utiliserez GnuPG vous devrez utiliser
-*UNE* commande (avec une exception, voir ci-dessous) et vous pourrez
-utiliser une ou *plusieurs* options en combinaison avec la commande.
-
-Par convention, la commande doit se trouver à la fin de la liste d'arguments
-après toutes les options. Si la commande requiert un nom de fichier,
-ce dernier sera donné à GnuPG en *dernier* sur la ligne de commande.
-
-L'usage basique de GnuPG est donc :
-
- gpg [--option something] [--option2] [--option3 something] --command file
-
-Certaines options demandent des arguments. Par exemple, l'option
---output (que l'on peut raccourcir par -o) requiert un nom de fichier
-en argument. L'argument de l'option doit suivre celle-ci immédiatement !
-GnuPG ne sera sinon pas capable de différencier le nom de fichier comme
-option. Comme option, --output et son nom de fichier doivent se trouver
-avant la commande donnée à GnuPG. L'option --recipient (ou -r) demande
-un nom ou un keyID pour chiffrer le message et ces informations devront
-imméditamenet suivre l'option --recipient/-r. La commande --encrypt ou
--e sera fournie après ces options, avec en final le nom du fichier à
-chiffrer. En voici un exemple :
-
- gpg -r alice -o secret.txt -e test.txt
-
-Mais l'utilisation des options sous leur forme longue permet de simplifier
-la compréhension des lignes de commande :
-
- gpg --recipient alice --output secret.txt --encrypt test.txt
-
-Si vous sauvez dans un fichier nommé ".txt" alors vous devriez probablement
-utiliser l'option ARMOR en ajoutant l'option --armor ou -a qui ne prend aucun
-argument :
-
- gpg --armor --recipient alice --output secret.txt --encrypt test.txt
-
-Si nous plaçons des crochets autour des parties optionnelles, les choses
-deviennent plus claires :
-
- gpg [--armor] [--recipient alice] [--output secret.txt] --encrypt test.txt
-
-Les parties entre crochets peuvent être placées dans l'ordre de votre
-choix :
-
- gpg --output secret.txt --recipient alice --armor --encrypt test.txt
-
-Si votre nom de fichier commence par un tiret, GnuPG risque de penser
-qu'il s'agit d'un paramètre et pour éviter cette situation vous pouvez
-soit utiliser un "./-a.txt" soit utiliser un double-tiret comme ceci :
-
--- -a.txt
-
-* L'exception concerne le chiffrement ET la signature au même moment.
-On utilise alors gpg [--options] --sign --encrypt foo.txt
-
-4.5) Je ne peux pas effacer un userid car il a déjà été effacé dans mon
- trousseau de clefs publiques ?
-
-Comme vous ne pouvez sélectionner que depuis le trousseau de clefs
-publiques, vous ne pouvez pas directement effacer le userid. Toutefois,
-ce n'est pas très compliqué à faire. Vous devez créer un nouvel
-utilisateur, disposant du même userid ce qui vous permet d'obtenir deux
-utilisateurs identiques avec un seul disposant d'une correspondance
-dans la clef privée. Vous pouvez désormais sélectionner cet utilisateur
-et l'effacer. Les deux identifiants seront affacés du trousseau de clefs
-privées.
-
-4.6) Que sont la confiance, la validité et l'ownertrust ?
-
-Le terme "ownertrust" est utilisé en remplacement de "trust" lorsqu'il
-s'agit de la valeur que vous avez attribuée à une clef en fonction
-du degré de confiance que vous accordez à son propriétaire, et si
-vous l'autorisez à introduire de nouvelles clefs avec votre signature
-jointe. La "validité" est un terme de confiance calculée, une valeur
-numérique calculée par GnuPG en fonction des paramètres de
-confiance des clefs et vous donne une idée de la confiance que
-GnuPG attribue ou n'attribue pas à une clef et s'il estime que la clef
-est valide pour un usage de chiffrement. Pour plus de détails consultez
-le chapître "The web of trust"
-
-4.7) Comment puis-je signer un fichier de patch ?
-
-Vous pouvez utiliser :
-
-gpg --clearsign --not-dash-espaced ...
-
-Le problème avec --clearsign c'est que toutes les lignes qui
-commençent par un tiret sont "quotées" avec "- " et comme diff
-produit beaucoup de lignes de ce type, le patch risque d'être
-détruit par la signature. Pour utiliser un fichier patch en le signant
-et sans perdre la signature claire, l'option spéciale :
-
---not-dash-escaped
-
-Permet de supprimer la production de ces séquences d'échappement.
-Vous ne devriez pas transmettre par courrier électronique un patch
-de ce type car les espaces et les fins de ligne font également
-partie de la signature et un logiciel de messagerie risque de modifier
-l'espacement et/ou les tailles de lignes, invalidant la signature. Si vous
-souhaitez transmettre le fichier, le plus simple reste de le signer à l'aide
-de votre MUA.
-
-4.8) Où se trouve l'option "encrypt-to-self" ?
-
-Utilisez l'option :
-
---encrypt-to <votre_keyID>
-
-Vous pouvez utiliser une combinaison de cette option pour spécifier
-plus d'un keyID. Pour désactiver temporairement l'utilisation de clefs
-additionnelles, vous pouvez utiliser l'option : --no-encrypt-to.
-
-4.9) Comment puis-je me débarasser de la version et du champ de commentaire
- dans la version "armor" des messages ?
-
-Utilisez l'option --no-version --comment ""
-
-Veuillez noter que la ligne vide laissée en place est *requise* par le format
-et le protocole.
-
-4.10) Que signifie le message "You are using the xxxx character set" ?
-
-Cette note est affichée lorsque une conversion UTF-8 a été réalisée.
-Veuillez vous assurer que le jeu de caractères utilisé pour l'affichage
-correspond bien à celui du système. Le plus utilisé reste "iso-8859-1" et
-c'est le jeu de caractères par défaut. Vous pouvez modifier ce jeu
-de caractères à l'aide de l'option "--charset". Il faut que le jeu de
-caractères utilisé corresponde à celui de votre affichage ou des
-caractères pourraient ne plus correspondre dans le message une
-fois transmis. Sinon, n'utilisez que de l'ASCII 7 bits pour qu'aucune
-conversion ne puisse survenir.
-
-4.11) Comment puis-je obtenir la liste des keyid ayant servi à
- chiffrer un message ?
-
- gpg --batch --decrypt --list-only --status-fd 1 2>/dev/null | \
- awk '/^\[GNUPG:\] ENC_TO / { print $3 }'
-
-4.12) Je ne peux plus déchiffrer mon message chiffré symétriquement
- (-c) avec la nouvelle version de GnuPG ?
-
-Il existait un bogue dans les versions 1.0.1 et antérieures de GnuPG
-qui surveniait lorsque 3DES ou Twofish avaient été utilisé pour des
-chiffrements symétriques (ce qui n'a jamais été le cas par défaut).
-Ce bogue a été corrigé afin de permettre le déchiffrement des anciens
-messages, en utilisant l'option :
-
----emulate-3des-s2k-bug
-
-Vous devriez déchiffrer puis rechiffrer (correctement) le ou les
-messages concernés. Cette option sera retirée dans la version 1.1
-de GnuPG : n'attendez pas pour convertir vos messages !
-
-4.13) Comment puis-je utiliser GnuPG en environnement automatisé ?
-
-Vous devriez utiliser l'option --batch et ne pas utiliser de phrase
-passe car il n'existe alors aucun moyen de conserver cette
-information de manière plus secrète que le trousseau de clefs
-lui-même. Nous vous suggérons de créer vos clefs, en environnement
-automatisé, de la manière suivante :
-
-Sur une machine protégée :
-
-Créez une sous-clef de signature pour votre clef, en utilisant le menu
-edit et en utilisant l'option "addkeu" puis DSA. Vous devez ensuite
-vous assurer que vous utilisez une phrase passe (requise par
-l'implémentation actuelle) puis utiliser :
-
-gpg --export-secret-subkeys --no-comment foo
- >secring.auto
-
-Copiez secring.auto et le trousseau de clefs publiques dans un
-répertoire test. Entrez dans le répertoire, puis :
-
-gpg --homedir . --edit foo
-
-Et utilisez "passwd" pour retirer la phrase passe des sous-clefs.
-Vous devriez également retirer toutes les sous-clefs qui ne sont
-pas utilisées et copier secring.auto sur une disquette et la
-porter jusqu'à la machine cible.
-
-Sur celle-ci, installez secring.auto comme trousseau de clefs
-secrètes. Vous pouvez maintenant faire démarrer votre
-nouveau service. C'est aussi une bonne idée que d'installer
-un système de détection d'intrusions afin de pouvoir repérer
-les intrusions ce qui vous permettra alors de révoquer toutes
-les sous-clefs installées sur cette machine et de procéder à une
-nouvelle installation de sous-clefs.
-
-4.14) Quel client email puis-je utiliser avec GnuPG ?
-
-Utiliser GnuPG pour le chiffrement de courrier électronique est
-probablement l'usage le plus répandu. De nombreux logiciels de
-messagerie (les "MUA") supportent GnuPG à divers degrés. Pour simplifier,
-il existe deux moyens de chiffrer les emails avec GnuPG : l'ancien style
-qui repose sur l'utilisation de l'ASCII Armor (un chiffrement classique
-suivi par une conversion selon le RFC2015) ce qu'on appellait le
-PGP/MIME et qui s'appelle désormais l'OpenPGP. Ce dernier supporte
-d'autre part le MIME. Certains MUA ne supportent qu'un seul de ces
-formats et vous devrez utiliser ce qui correspond aux capacités
-de votre client de messagerie.
-
-La liste suivante n'est probablement pas exhaustive :
-
- OpenPGP: Mutt (Unix), Emacs/Mew, Becky2 (Windows avec plugin),
- TkRat (Unix). Il y a un effort pour disposer d'un plug-in
- Mozilla et Emacs/GNUS dispose d'un support en CVS.
-
- ASCII: Emacs/{VM,GNUS}/MailCrypt, Mutt(Unix), Pine(Unix), et
- probablement beaucoup d'autres.
-
-Un bon aperçu du support de PGP se trouve à l'adresse :
-
-http://cryptorights.org/pgp-users/pgp-mail-clients.html
-
-Le support direct de GnuPG n'est pas indiqué, toutefois dans certains
-cas il doit être possible d'utiliser un "wrapper".
-
-4.15) On ne peut pas avoir une librairie gpg ?
-
-Cette question aura souvent été posée. Toutefois, le point de vue
-actuel est que GnuPG en tant que librairie risque de conduire à des
-problèmes de sécurité. Dans un futur proche, GnuPG ne sera pas
-implémenté sous forme de librairie. Toutefois, pour quelques domaines
-d'application le programme gpgme doit pouvoir assurer ces questions.
-Vous pouvez obtenir ce programme depuis :
-
-ftp://ftp.guug.de/pub/gcrypt/alpha/gpgme
-
-
-4.16) J'ai produit avec succès un certificat de révocation, mais comment
- dois-je le transmettre aux serveurs de clefs ?
-
-La plupart des serveurs de clefs n'accepteront pas une simple et "dure"
-révocation. Vous devez d'abord importer le certificat dans GnuPG :
-
- gpg --import my-revocation.asc
-
-Puis transmettre la révocation au serveurs de clefs :
-
- gpg --keyserver certserver.pgp.com --send-keys mykeyid
-
-5. COMPATIBILITY ISSUES
-
-5.1) Comment puis-je chiffrer un message avec GnuPG pour que PGP
- soit capable de le déchiffrer ?
-
-Tout ceci dépend de la version de PGP.
-
- PGP 2.x
-
-Vous ne pourrez pas dans ce cas, car PGP 2.x utilise l'IDEA qui n'est
-pas un algorithme supporté par GnuPG à cause de son brevêt (voir
-la section 3.3) mais si vous disposez d'une version modifiée de PGP
-vous pouvez essayer ceci :
-
- gpg --rfc1991 --cipher-algo 3des ...
-
-Attention ! N'utlisez pas de pipe des données à chiffrer vers gpg,
-mais donnez à gpg un nom de fichier sinon PGP 2 ne sera pas
-capable de le prendre en charge.
-
-Quand à ce qui concerne le chiffrement conventionnel, vous ne
-pouvez l'obtenir avec PGP 2.
-
-
- PGP 5.x et ultérieurs
-
-Vous devrez utiliser deux options additionnelles :
-
- --compress-algo 1 --cipher-algo cast5
-
-Vous devrez parfois utiliser "3des" au lieu de "cast5". PGP 5 ne
-supporte pas l'algorithme "blowfish". Vous devrez aussi insérer
-un "compress-algo 1" au sein de votre fichier ~/.gnupg/options
-et ceci n'affectera pas le fonctionnement général de GnuPG.
-
-Ceci s'applique également au chiffrement conventionnel.
-
-5.2) Comment migrer de PGP 2.x vers GnuPG ?
-
-PGP 2 utilise les algorithmes RSA et IDEA pour le chiffrement. Depuis que le
-brevêt sur le RSA a expiré GnuPG incorpore ce dernier, depuis la version
-1.0.3 et ultérieures. L'algorithme IDEA reste sous brevêt jusqu'en 2007.
-Sous certaines conditions vous pouvez utiliser l'IDEA, même aujourd'hui.
-Dans ce cas, vous devriez consulter la réponse à la question 3.3 qui
-explique l'ajout du support de l'IDEA à GnuPG et également lire ce
-document :
-
-http://www.gnupg.org/gph/en/pgp2x.html
-
-Pour procéder à la migration.
-
-5.3) (supprimé)
-
- (vide)
-
-5.4) Pourquoi PGP 5.x n'est pas capable de déchiffrer les messages
- pour certaines clefs ?
-
-PGP Inc refuse d'accepter les clefs ElGamal de type 20 même pour
-le chiffrement. Ils ne supportent que le type 16 (qui est identifique en tout
-cas en ce qui concerne le déchiffrement). Pour être plus inter-opérable,
-GnuPG (depuis la version 0.3.3) utilise également le type 16 pour la sous-
-clef ElGamal qui est créée par l'algorithme par défaut. Vous pouvez
-aussi ajouter une clef de type 16 à votre trousseau de clefs publiques
-tout en assurant que vos signatures sont valides.
-
-5.5) Pourquoi PGP 5.x ne peut vérifier mes messages ?
-
-PGP 5.x n'accepte pas les signatures en version 4 pour les données
-mais OpenPGP demande la production de clefs V4 pour tous les types
-de données et c'est pourquoi GnuPG les utilise... Vous devrez utiliser
-l'option --force-v3-sigs pour produir'e des signatures V3 sur les
-données.
-
-5.6) Comment puis-je transférer mes valeurs de confiance de
- PGP vers GnuPG ?
-
-Il existe un script au sein du répertoire tools qui pourra vous aider. Après
-avoir importé le trousseau de clefs publiques PGP vous pouvez utiliser
-cette commande :
-
- $ lspgpot pgpkeyring | gpg --import-ownertrust
-
-où "pgpkeyring" est le trousseau de clefs originels et NON celui de GnuPG
-que vous avez produit à la première étape.
-
-5.7) PGP n'aime pas ma clef privée.
-
-Les anciens PGP échouent parfois au traitement des commentaires privés
-sur les paquets utilisés par GnuPG. Ces paquets sont en *totale* conformité
-avec OpenPGP mais vous l'aurez compris, PGP n'est pas vraiment soucieux
-d'OpenPGP. Pour contourner ce problème il faut exporter les clefs privées
-à l'aide de cette commande :
-
- $ gpg --export-secret-keys --no-comment -a your-key-id
-
-Une autre possibilité : par défaut, GnuPG chiffre votre clef privée à l'aide
-de l'algorithme symétrique Blowfish. Les anciennes versions de PGP
-ne peuvent comprendre que le 3DES, CAST5 ou l'IDEA sous leurs formes
-symétriques. L'utilisation de la méthode suivante permet de rechiffrer
-vos clefs privées à l'aide d'un algorithme différent :
-
- $ gpg --s2k-cipher-algo=CAST5 --s2k-digest-algo=SHA1 \
- --compress-algo=1 --edit-key <username>
-
-Vous utiliserez alors l'option passwd pour modifier le mot de passe ; il suffit
-de choisir la même phrase passe mais cette fois la clef sera chiffrée
-symétriquement par du CAST5.
-
-Vous pouvez maintenant exporter la clef et PGP devrait pouvoir la gérer.
-
-Pour PGP 6.x les options suivantes permettent d'exporter une clef :
-
- $ gpg --s2k-cipher-algo 3des --compress-algo 1 --rfc1991 \
- --export-secret-keys <Key-ID>
-
-6. PROBLEMS and ERROR MESSAGES
-
-6.1) Pourquoi GnupG me dit sans cesse "Warning : using insecure memory!" ?
-
-Sur beaucoup de systèmes, ce programme doit être installé en tant que
-setuid(root). Ceci est requis afin de pouvoir produire un blocage en mémoire
-des pages utilisées (et d'éviter tout transfert en swap ou sur disque). Ce "lock"
-permet de verrouiller dans la pratique les informations sensibles en RAM
-afin de conserver ces données comme secrètes. Si vous n'obtenez aucun
-message d'erreur c'est que votre système supporte le verrouillage de pages
-mémoire depuis l'accès root (le programme s'exécute en tant que root grâce
-à son setuid). Le programme quitte le mode d'exécution "root" dès que les
-pages sont verrouillées en mémoire qui plus est.
-
-Sur Unixware 2.x et 7.x vous devriez installer GnuPG avec le privilège
-"plock" pour obtenir le même effet :
-
- filepriv -f plock /path/to/gpg
-
-Si vous ne pouvez pas installer GnuPG en tant que setuid(root) ou si vous
-ne voulez pas, vous pouvez utiliser l'option :
-
---no-secmem-warning
-
-Ou bien le placer en tant qu'option (sans les deux tirets) dans votre
-fichier ~/.gnupg/options ce qui permet de désactiver le warning.
-
-Sur quelques systèmes (e.g; Windows) GnuPG ne verrouille pas les
-pages en mémoire (ce n'est pas toujours possible selon les systèmes)
-et les anciennes versions de GnuPG (1.0.4 et antérieures) produisent
-sur ces systèmes le message d'erreur suivant :
-
- gpg: Please note that you don't have secure memory
-
-Cet avertissement ne peut être désactivé en utilisant l'option décrite
-ci-dessus car nous considérons que cet avertissement forme une
-faille de sécurité importante. Toutefois, comme il provoquait une trop
-forte confusion auprès des utilisateurs de ces systèmes, le message
-d'avertissement a été retiré.
-
-6.2) Le support des fichiers de grande taille ne fonctionne pas ..
-
-Le LFS fonctionne correctement depuis les versions 1.0.4 et ultérieures.
-Si le configure ne le détecte pas correctement, essayez un autre
-compilateur : egcs 1.1.2 fonctionne parfaitement mais d'autres
-versions semblent poser problème. D'autre part, certains problèmes
-de compilation rencontrés dans GnuPG 1.0.3 et 1.0.4 sur HP-UX et
-Solaris étaient provoqués par un support "cassé" du LFS dans les
-sources ...
-
-6.3) Dans le menu d'édition les valeurs de confiance ne sont pas affichées
- correctement après la signature des uid : pourquoi ?
-
-Ceci survient car certaines informations sont stockées immédiatement
-dans la TrustDB, mais le calcul ne se réalisé qu'au moment de la
-sauvegarde effective. Ce n'est pas un bogue vraiment facile à corriger
-mais nous pensons régler ce problème dans une future version.
-
-6.4) Que signifie "skipping pubkey 1: already loaded" ?
-
-Depuis la version 1.0.3 de GnuPG l'algorithme RSA est inclus. Si vous
-avez toujours l'option :
-
-load-extension rsa
-
-Dans votre fichier .options le message en question apparaîtra.
-Il vous suffira de retirer la commande qui n'est plus requise
-du fichier .options pour que le message cesse.
-
-6.5) GnuPG 1.0.4 ne tient pas compte de ~/.gnupg ...
-
-Ce bogue est connu et il a été corrigé dans les versions ultérieures.
-
-6.6) Une signature ElGamal ne vérifie plus rien depuis la 1.0.2 ..
-
-Utilisez l'option :
-
---emulate-md-encode-bug
-
- Use the option --emulate-md-encode-bug.
-
-6.7) Les anciennes versions de GnuPG ne vérifient pas les anciennes
- signatures ElGamal
-
-Veuillez migrer vers la version 1.0.2 au minimum, et de préférence
-une version ultérieure (1.0.6 par exemple).
-
-6.8) Lorsque j'utilise --clearsign le texte en clair comporte parfois des
- tirets supplémentaires : pourquoi ?
-
-Ceci s'appelle le "dash-escaped" et il est requis par le format
-OpenPGP. A chaque fois qu'une ligne commence par un tiret, ceci
-risque de survenir. Cela permet aux programmes de retrouver
-sans difficulté les lignes de marquage du format, comme :
-
------BEGIN PGP SIGNATURE-----
-
-Seules ces lignes doivent pouvoir commencer par deux tirets. Si vous
-utilisez GnuPG pour traiter ces messages, les tirets supplémentaires
-seront retirés et les clients de messagerie "corrects" devraient
-également retirer ces tirets lorsqu'ils affichent le message.
-
-6.9) Que signifie "can't handle multiple signatures" ?
-
-A cause des différents formats de messages, GnuPG n'est pas toujours
-capable de découper un fichier contenant des signatures multiples.
-Ce message d'erreur vous informe que les données en entrée
-comportent un problème. Le seul moyen pour disposer correctement
-de signatures multiples revient à utiliser le standard : le format
-OpenPGP avec les paquets "one-pass-signature" qui sont utilisés
-par défaut par GnuPG ou bien de recourir au format de texte en clair.
-
-6.10) Si je soumet une clef au serveur de clefs, rien ne survient !
-
-Vous utilisez probablement GnuPG sur Windows en version 1.0.2 ou
-antérieure. Cette fonctionnalité n'était alors pas encore disponible,
-et il ne s'agit pas d'un bogue. Vous devriez adopter une version
-plus récente, qui dispose de toutes les fonctionnalités :-)
-
-6.11) J'obtiens un "gpg: waiting for lock ..."
-
-Les anciennes versions de GnuPG ne quittaient pas correctement
-et laissaient un fichier "lock". Allez dans le répertoire ~/.gnupg et
-effacez les fichiers *.lock qui s'y trouvent pour continuer.
-
-6.12) Les anciennes versions de GnuPG (e.g. 1.0) ont des problèmes
- avec les clefs de GnuPG récents ..
-
-Depuis la version 1.0.3 les clefs produites par GnuPG sont créées avec
-une préférence pour Twofish (et l'AES depuis la version 1.0.4 à savoir,
-l'algorithme Rijndael) et ceci signifie également qu'elles disposent de la
-capacité d'utilisation de la nouvelle méthode de chiffrement MDC. Ceci
-sera disponible dans OpenPGP très rapidement et sera supporté en
-tout logique par PGP 7. Cette nouvelle méthode de chiffrement permet
-de se protéger votre des attaques (des anciennes attaques en fait)
-contre les systèmes de chiffrement du courrier électronique.
-
-Ceci signifie également que les versions 1.0.3 et antérieures de GnuPG
-auront des problèmes avec les clefs plus récentes. A cause des
-correctifs de sécurité, vous devriez conserver votre installation
-de GnuPG à jour de toute manière. Comme manière de régler le
-problème vous devriez demander à GnuPG de n'utiliser que l'ancien
-algorithme de chiffrement en utilisant la ligne :
-
-cipher-algo cast5
-
-dans votre fichiers d'options.
-
-6.13) Avec GnuPG 1.0.4 j'obtiens un "this cipher algorithm is deprecated ..."
-
-Si vous venez de produire une nouvelle clef et que vous obtenez ce message
-pendant un chiffrement, il s'agit d'un bogue de la version 1.0.4 ; le nouvel
-algorithme AES Rijndael est utilisé mais il n'est pas enregistré sous le bon
-numéro d'algorithme ce qui produit ce message d'erreur "deprecated".
-Vous pouvez ignorer cet avertissement et les versions plus récentes
-de GnuPG sont corrigées sur ce point.
-
-6.14) Les dates sont affichées par ????-??-??, pourquoi ?
-
-A cause de contraintes dans la plupart des implémentations de la libc,
-les dates au-delà de 2038-01-19 ne seront pas affichées correctement.
-Les systèmes 64-bit ne sont pas affectés par ce problème. Pour éviter
-d'afficher les dates de manière incorrecte, GnuPG utilise des signes
-"?" au lieu des chiffres. Pour obtenir la valeur correcte vous devrez
-utiliser l'option :
-
---with-colons --fixed-list-mode
-
-6.15) J'ai encore un problème, dois-je produire un message de bogue ?
-
-Si vous êtes sûr(e) que le problème n'est mentionné nulle part, ni dans
-cette FAQ ni dans aucune liste de distribution GnuPG, commencez
-par consulter la liste de bogues qui sont en cours de traitement (la page
-de documentation dispose d'un lien vers la page de bogues). Si vous
-ne savez pas trop s'il s'agit d'un bogue, envoyez un courrier
-électronique à la liste : gnupg-devel. Sinon, vous pouvez utiliser
-le système de suivi de bogues GUUG à l'adresse :
-
-http://bugs.guug.de/Reporting.html.
-
-6.16) Pourquoi GnuPG ne supporte pas les certificats X.509 ?
-
-GnuPG est avant tout une implémentation du standard OpenPGP,
-défini dans le RFC 2440. Ce standard propose une infrastructure
-complète et différente du X.509
-
-Ces deux systèmes sont des cryptosystèmes à clef publique, mais
-la manière dont les clefs sont traitées diffèrent.
-
-7. SUJETS AVANCES
-
-7.1) Comment tout cela fonctionne-t-il ?
-
-Pour produire une paire de clefs publique/privée, utilisez la commande
-
-gpg --gen-key
-
-Puis répondez aux questions en adoptant de préférence les valeurs
-par défaut.
-
-Les données qui sont chiffrées par une clef publique ne peuvent être
-déchiffrées que par la clef privée correspondante. La clef secrète
-est d'autre part protégée par une phrase-passe ce qui n'est pas le cas
-de la clef publique, librement distribuable.
-
-Pour transmettre à vos amis un message, il vous suffit de le chiffrer
-à l'aide de leurs clefs publiques. Seules leurs clefs privées seront
-capables de déchiffrer le message.
-
-GnuPG est pratique pour signer de manière numérique les choses.
-Les éléments qui sont chiffrés à l'aide de la clef publique ne peuvent
-être déchiffrés que par la clef publique, ce qui permet de signer
-des documents. On commence par produire un hachage, une sorte
-d'empreinte à taille fixe d'un document (de taille variable). Ensuite,
-votre clef privée est utilisée pour chiffrer ce hachage. Par la suite,
-toute personne disposant de votre clef publique et du document
-peut vérifier si le hachage du document correspond bien au
-déchiffrement du hachage, obtenu par votre clef publique dont
-disposent vos destinataires.
-
-Un trousseau de clefs n'est qu'un gros fichier (selon le nombre de
-clefs qu'il contient). Vous avez un trousseau de clefs publiques
-qui contient vos clefs publiques et celles de vos amis. Vous avez
-également un trousseau de clefs privées qui ne contient que vos
-clefs privées (chiffrées et protégées par votre phrase-passe). Vous
-devez faire très *attention* à ce fichier. Personne ne devra jamais
-y avoir accès et la phrase-passe qui le protège devra être
-complexe, et longue afin de bien protéger le secret.
-
-Vous pouvez aussi chiffrer des données de manière conventionnelle,
-en utilisant l'option "-c" de GnuPG. Dans ce cas, la phrase-passe
-utilisée servira de clef pour protéger le message. Aucun usage
-de clef publique ou de clef privée ici : il s'agit d'un chiffrement
-classique où il n'existe qu'une seule clef, utilisée pour chiffrer et
-déchiffrer les données. Généralement, on utilise cette méthode
-pour chiffrer ses propres documents à l'aide d'une phrase-passe
-secrète qui vous est propre. Cette méthode de chiffrement ne
-doit être utilisée pour des communications que si vous avez
-physiquement rencontré vos destinataires et que vous partagez
-dans le plus grand secret la phrase-passe (votre propre époux ou
-épouse, ou un ami de confiance). L'avantage est que vous pouvez
-changer de temps en temps la phrase-passe et en réduire le
-risque afin qu'en cas de découverte de la phrase-passe toutes
-vos données ne soient pas lisibles ;-)
-
-Vous pouvez ajouter et copier des clefs depuis votre trousseau
-de clefs publiques à l'aide des commandes "gpg --import" et
-"gpg --export". Vous pouvez également (ATTENTION !!) exporter
-vos clefs privées à l'aide de la commande : "gpg --export-secret-keys"
-mais ce n'est généralement pas utile sauf si vous devez déplacer
-vos clefs privées d'une machine à l'autre.
-
-Les clefs peuvent être signées à l'aide de l'option "gpg --edit-key". Lorsque
-vous signez une clef, vous certifiez que la clef appartient selon vous
-à la personne dont l'identité se trouve mentionnée dans la clef. Vous
-devez absolument être sûr(e) que la clef appartient bien à cette
-personne, sans le moindre doute. Vous devez vérifier son fingerprint
-à l'aide de la commande :
-
-gpg --fingerprint userid
-
-Et recevoir le même finger par téléphone ou de visu par la personne
-concernée. Généralement, on procède à des "fêtes" où chaque personne
-amène sa pièce d'identité, une carte de visite comprenant le fingerprint
-et l'on procède à un échange des fingerprint, ou directement des clefs.
-
-Vous pouvez également utiliser l'option "-o filename" pour forcer
-la sortie vers le fichier "filename". Pour forcer une sortie en console
-par défaut on utilise un tiret. La commande "-r" permet de spécifier
-le destinataire (avec quelle clef publique vous allez chiffrer) en ligne
-de commande au lieu d'avoir à taper le nom du destinataire dans
-le mode interactif.
-
-Autre chose d'importance. Par défaut, TOUTES les données sont chiffrées
-dans un format binaire particulier; Si vous souhaitez transmettre les données
-par courrier électronique (par exemple) vous devez les protéger dans
-un format d'amure qu'on appelle ASCII ARMOR. Ce format sera obtenu
-en utilisant l'option "-a" mais la méthode préférée reste d'utiliser
-un client de messagerie respectueux du format MIME comme Mutt, Pine
-et bien d'autres.
-
-Enfin, il existe une petite faille de sécurité dans OpenPGP (et donc dans PGP)
-et vous devriez TOUJOURS chiffrer PUIS signer un message. Il ne faut
-pas seulement chiffrer afin d'être totalement protégé. N'oubliez jamais.
-
-7.2) Pourquoi certaines signatures avec une clef ELG-E sont valides ?
-
-Ces clefs ElGamal furent produites par GnuPG en version 3 de paquets
-(selon le RFC 1991). Le brouillon OpenPGP a été modifié par la suite
-afin de modifier l'identifiant d'algorithme pour les clefs ElGamal qui est
-utilisable pour les signatures et le chiffrement des modes 16 à 20.
-GnuPG utilise le mode 20 quand il produit ses nouvelles clefs ElGamal
-mais il accepte toujours les clefs de type 16 qui selon le standard
-OpenPGP ne peuvent servir qu'au chiffrement, si la clef se trouve
-dans un paquet en version 3 du format. GnuPG est le seul programme
-ayant jamais utilisé les clefs au sein de paquets v3 - vous ne risquez
-donc pas grand chose.
-
-7.3) Comment tout le système de confiance fonctionne au juste ?
-
-Il fonctionne d'une manière proche de PGP. La différence c'est que
-la confiance est calculée uniquement lorsqu'elle est requise. C'est
-pourquoi la TrustDB contient une liste des signatures de clefs
-valides. Si vous ne fonctionnez pas en mode batch, vous devrez
-assigner un paramètre de confiance aux clefs (un ownertrust).
-
-Vous pouvez consulter la validité (la valeur de confiance
-calculée) en utilisant cette commande :
-
- gpg --list-keys --with-colons
-
-Si le premier champ est "pub" ou "uid" le second champ vous
-indiquera le niveau de confiance :
-
-o = Inconnu (cette clef est nouvelle au système)
-i = La clef est invalide (eg. il manque sa propre signature)
-d = La clef a été désactivée
-r = La clef a été révoquée
-e = La clef a expiré
-q = Non-défini (pas de valeur attribuée)
-n = Ne jamais faire confiance à cette clef
-m = Cette clef dispose d'une confiance marginale
-f = Cette clef dispose d'une confiance totale
-u = Cette clef dispose d'une confiance ultime. Cette valeur
- n'est utilisée que pour les clefs où la clef secrète est
- également disponibles.
-
-La valeur dans l'enregistrement "pub" est la meilleure valeur
-obtenue depuis les enregistrements "uid".
-
-Vous pouvez obtenir la liste des valeurs de confiance attribuées ;
-i.e. la confiance que vous accordez aux autres lorsqu'il s'agit
-de signer la clef d'un autre individu) :
-
- gpg --list-ownertrust
-
-Le premier champ est le fingerprint de la clef primaire, le second
-champ est la valeur assignée :
-
-_ = Aucune valeur d'ownertrust assignée
-n = Ne jamais faire confiance au propriétaire de cette clef
- lorsqu'il s'agit de vérifier d'autres signatures.
-m = Une confiance marginale est accordée au détenteur de cette clef
- lorsqu'il s'agit de signer d'autres clefs.
-f = Assumer que le détenteur de cette clef est une personne de confiance
- lorsqu'il s'agit de signer des clefs.
-u = Nous n'avons pas besoin de nous faire confiance à nous-même puisque
- nous détenons notre propre clef privée.
-
-Vous devez conserver ces valeurs confidentielles, car elles représentent
-la confiance que vous accordez ou non à d'autres individus. PGP stocke
-cette information au sein de trousseau de clefs et le publier n'est PAS
-une bonne idée. Vous devez utiliser la commande d'exportation pour
-transmettre des clefs. Quoi qu'il en soit, GnuPG
-évite ces problèmes en ne conservant ces valeurs qu'aun sein de sa
-TrustDB donc vous pouvez copier un trousseau de clefs publiques
-si vous utilisez GnuPG (et nous disposons aussi de la commande
-d'exportation).
-
-7.4) Quel est ce genre de sortie : "key C26EE891.298, uid 09FB: ...."?
-
-Cette sortie est la représentation interne d'un userid au sein
-de la TrustDB. Le keyid est "C26EE891" et le "298" est le keyid local,
-un simple numéro d'enregistrement dans la TrustDB. Enfin, le "09FB"
-sont les deux derniers octets d'un ripe-md-160 de l'identifiant de
-l'utilisateur pour cette clef.
-
-7.5) Comment interpréter certaines sorties informatives ?
-
-Lorsque vous vérifiez la validité d'une clef, GnuPG affiche
-parfois une information préfixée par l'information en rapport
-avec le sujet vérifié. Par exemple : "key 12345678.3456" indique
-que la clef disposant de l'ID 12345678, et du numéro interne 3456
-est considérée au sein de la TrustDB au sein de ce qu'on
-appelle un enregistrement "directory". Un "uid 12345678.3456/ACDE"
-indique quel est l'identifiant d'utilisateur qui correspond
-à cette clef. Il s'agit d'une information sur la signature de la
-clef 9A8B7C6D disposant de cet ID et s'il s'agit d'une signature
-directe sur la clef, la partie User ID sera vide :
-
-(..//..)
-
-7.6) Les lignes d'en-tête des messages font-elles parties des
- éléments signés ?
-
-Non. Par exemple, vous pouvez retirer les lignes "Comment:"
-Elles n'ont pas vraiment d'objet comme les lignes "header" des
-courriers électroniques. Toutefois, une ligne qui débute par
-"Hash: ..." est requise par les signatures OpenPGP afin de permettre
-au parser de déterminer quel algorithme de hachage utiliser.
-
-7.7) Quelle est la liste des algorithmes préférés ?
-
-La liste des algorithmes préférés est une liste d'algorithmes
-de chiffrement, de hachage et de compression stockés dans
-la signature propre de la clef durant sa production. Lorsque
-vous chiffrez un document, GnuPG utilise cette liste (elle fait
-partie de la clef publique) pour déterminer quels algorithmes
-doivent être utilisés. De manière basique, ces indications
-expliquent aux autres utilisateurs quels algorithmes vous
-acceptez en entrée avec un ordre de préférence.
-
-7.8) Comment puis-je changer la liste des algorithmes préférés ?
-
-Actuellement la liste et les préférences sont directement intégrées
-dans les codes sources de GnuPG. Vous devrez modifier le fichier
-g10/keygen afin de modifier cette liste et procéder à une
-nouvelle compilation. La fonction que vous devrez modifier est
-keygen_add_std_prefs. Le code est d'ailleurs assez simple à
-comprendre. Les constantes utilisées pour différencier les
-algorithmes sont définies au sein du fichier include/cipher.h
-
-Après avoir modifié ces fichiers, générez une nouvelle paire
-de clefs (ou une nouvelle sous-clef de chiffrement) avec
-la version modifiée de l'exécutable. La nouvelle clef disposera
-des nouvelles préférences et pourra être utilisée depuis des
-exécutables non modifiés.
-
-Pour modifier les préférénces d'une clef existante, vous devrez
-utiliser un exécutable modifié (voir ci-dessus) afin de modifier
-la date d'expiration puis sauvegardez les changements. Les
-préférences seront automatiquement modifiées lors de la
-sauvegarde et vous pouvez désormais utiliser la clef modifiée
-avec tout exécutable, modifié ou non.
-
-La modification de la liste de préférences à l'aide d'une
-version non-modifiée de GnuPG (probablement depuis le menu
-d'édition) fait partie de la liste TODO (A FAIRE) prévue
-pour les prochaines versions de GnuPG.
-
-
-8. REMERCIEMENTS
-
-Nous souhaitons remercier Werker Kosh pour la rédaction de la
-première FAQ originelle et pour tous les participants aux listes
-de discussion gnupg-users et gnupg-devel. La quasi-totalité
-des réponses de ce document proviennent de leurs efforts.
-
-Nous souhaitons également remercier Casper Dik pour nous
-avoir fourni le script permettant de générer cette FAQ,
-qu'il utilise d'autre part pour son excellente FAQ Solaris2 ;-)
-
-Copyright (C) 2000 Free Software Foundation, Inc. ,
-59 Temple Place - Suite 330, Boston, MA 02111, USA
-
-Verbatim copying and distribution of this entire article is permitted in
-any medium, provided this notice is preserved.
diff --git a/doc/fr/README.fr b/doc/fr/README.fr
deleted file mode 100644
index 3a5d8485e..000000000
--- a/doc/fr/README.fr
+++ /dev/null
@@ -1,10 +0,0 @@
-You find here translations to French of some of the documents in
-../doc. Those translations are not necessary up-to-date and should
-not be used as reference without checking the original English
-versions.
-
-Gilbert Fernandes kindly contributed thses translatons.
-
-
-
-
diff --git a/doc/gnupg-w32.reg b/doc/gnupg-w32.reg
deleted file mode 100644
index 7a6e346a8..000000000
--- a/doc/gnupg-w32.reg
+++ /dev/null
@@ -1,8 +0,0 @@
-REGEDIT4
-
-[HKEY_CURRENT_USER\Software\GNU\GNUPG]
-"HomeDir"="C:\\GnuPG"
-"gpgProgram"="C:\\GnuPG\\gpg.exe"
-
-[HKEY_CURRENT_USER\Control Panel\Mingw32\NLS]
-"MODir"="C:\\GnuPG\\Locale"
diff --git a/doc/gnupg.7 b/doc/gnupg.7
deleted file mode 100644
index d11a4c94a..000000000
--- a/doc/gnupg.7
+++ /dev/null
@@ -1,14 +0,0 @@
-.TH GNUPG 7 2002-09-02 GNU "GNU Privacy Guard"
-.SH NAME
-GnuPG \- The GNU Privacy Guard suite of programs
-.SH DESCRIPTION
-GnuPG is a set of programs for public key encryption and digital
-signatures. The program most users want to use is
-the OpenPGP command line tool, named \fBgpg\fP. \fBgpgv\fP
-is a stripped down version of \fBgpg\fP to verify signatures
-against a trusted keyring. There is also a tool called
-\fBgpgsplit\fP to split OpenPGP messages or keyrings into their packets.
-.SH "SEE ALSO"
-.BR gpg (1),
-.BR gpgv (1),
-
diff --git a/doc/gpg.sgml b/doc/gpg.sgml
deleted file mode 100644
index 83a286172..000000000
--- a/doc/gpg.sgml
+++ /dev/null
@@ -1,2461 +0,0 @@
-<!-- gpg.sgml - the man page for GnuPG
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-
- This file is part of GnuPG.
-
- GnuPG is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- GnuPG is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
--->
-<!-- This file should be processed by docbook-to-man to
- create a manual page. This program has currently the bug
- not to remove leading white space. So this source file does
- not look very pretty
-
- FIXME: generated a file with entity (e.g. pathnames) from the
- configure scripts and include it here
--->
-
-
-<!DOCTYPE refentry PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
-<!entity ParmDir "<parameter>directory</parameter>">
-<!entity ParmFile "<parameter>file</parameter>">
-<!entity OptParmFile "<optional>&ParmFile;</optional>">
-<!entity ParmFiles "<parameter>files</parameter>">
-<!entity OptParmFiles "<optional>&ParmFiles;</optional>">
-<!entity ParmNames "<parameter>names</parameter>">
-<!entity OptParmNames "<optional>&ParmNames;</optional>">
-<!entity ParmName "<parameter>name</parameter>">
-<!entity OptParmName "<optional>&ParmName;</optional>">
-<!entity ParmKeyIDs "<parameter>key IDs</parameter>">
-<!entity ParmN "<parameter>n</parameter>">
-<!entity ParmFlags "<parameter>flags</parameter>">
-<!entity ParmString "<parameter>string</parameter>">
-<!entity ParmValue "<parameter>value</parameter>">
-<!entity ParmNameValue "<parameter>name=value</parameter>">
-<!entity ParmNameValues "<parameter>name=value1 <optional>value2 value3 ...</optional></parameter>">
-]>
-
-<refentry id="gpg">
-<refmeta>
- <refentrytitle>gpg</refentrytitle>
- <manvolnum>1</manvolnum>
- <refmiscinfo class="gnu">GNU Tools</refmiscinfo>
-</refmeta>
-<refnamediv>
- <refname/gpg/
- <refpurpose>encryption and signing tool</>
-</refnamediv>
-<refsynopsisdiv>
- <synopsis>
-<command>gpg</>
- <optional>--homedir <parameter/name/</optional>
- <optional>--options <parameter/file/</optional>
- <optional><parameter/options/</optional>
- <parameter>command</>
- <optional><parameter/args/</optional>
- </synopsis>
-</refsynopsisdiv>
-
-<refsect1>
- <title>DESCRIPTION</title>
- <para>
-<command/gpg/ is the main program for the GnuPG system.
- </para>
- <para>
-This man page only lists the commands and options available.
-For more verbose documentation get the GNU Privacy Handbook (GPH) or
-one of the other documents at http://www.gnupg.org/docs.html .
-</para>
-<para>
-Please remember that option parsing stops as soon as a non option is
-encountered, you can explicitly stop option parsing by using the
-special option "--".
-</para>
-</refsect1>
-
-<refsect1>
-<title>COMMANDS</title>
-<para>
-<command/gpg/ recognizes these commands:
-</para>
-
-<variablelist>
-
-<varlistentry>
-<term>-s, --sign</term>
-<listitem><para>
-Make a signature. This command may be combined
-with --encrypt.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--clearsign</term>
-<listitem><para>
-Make a clear text signature.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-b, --detach-sign</term>
-<listitem><para>
-Make a detached signature.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-e, --encrypt</term>
-<listitem><para>
-Encrypt data. This option may be combined with --sign.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-c, --symmetric</term>
-<listitem><para>
-Encrypt with symmetric cipher only.
-This command asks for a passphrase.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--store</term>
-<listitem><para>
-Store only (make a simple RFC1991 packet).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--decrypt &OptParmFile;</term>
-<listitem><para>
-Decrypt &ParmFile; (or stdin if no file is specified) and
-write it to stdout (or the file specified with
---output). If the decrypted file is signed, the
-signature is also verified. This command differs
-from the default operation, as it never writes to the
-filename which is included in the file and it
-rejects files which don't begin with an encrypted
-message.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--verify <optional><optional><parameter/sigfile/</optional>
- <optional><parameter/signed-files/</optional></optional></term>
-<listitem><para>
-Assume that <parameter/sigfile/ is a signature and verify it
-without generating any output. With no arguments,
-the signature packet is read from stdin. If
-only a sigfile is given, it may be a complete
-signature or a detached signature, in which case
-the signed stuff is expected in a file without the
-".sig" or ".asc" extension.
-With more than
-1 argument, the first should be a detached signature
-and the remaining files are the signed stuff. To read the signed
-stuff from stdin, use <literal>-</literal> as the second filename.
-For security reasons a detached signature cannot read the signed
-material from stdin without denoting it in the above way.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--verify-files <optional><parameter/files/</optional></term>
-<listitem><para>
-This is a special version of the --verify command which does not work with
-detached signatures. The command expects the files to be verified either
-on the command line or reads the filenames from stdin; each name must be on
-separate line. The command is intended for quick checking of many files.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--encrypt-files <optional><parameter/files/</optional></term>
-<listitem><para>
-This is a special version of the --encrypt command. The command expects
-the files to be encrypted either on the command line or reads the filenames
-from stdin; each name must be on separate line. The command is intended
-for a quick encryption of multiple files.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--decrypt-files <optional><parameter/files/</optional></term>
-<listitem><para>
-The same as --encrypt-files with the difference that files will be
-decrypted. The syntax or the filenames is the same.
-</para></listitem></varlistentry>
-
-<!--
-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 they may
- give strange results when combined with more options.
- B<-kv> Same as B<-k>
- B<-kvv> List the signatures with every key.
- B<-kvvv> Additionally check all signatures.
- B<-kvc> List fingerprints
- B<-kvvc> List fingerprints and signatures
-
- B<This command may be removed in the future!>
--->
-
-<varlistentry>
-<term>--list-keys &OptParmNames;</term>
-<term>--list-public-keys &OptParmNames;</term>
-<listitem><para>
-List all keys from the public keyrings, or just the
-ones given on the command line.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--list-secret-keys &OptParmNames;</term>
-<listitem><para>
-List all keys from the secret keyrings, or just the ones given on the
-command line. A '#' after the letters 'sec' means that the secret key
-is not usable (for example, if it was created via
---export-secret-subkeys).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--list-sigs &OptParmNames;</term>
-<listitem><para>
-Same as --list-keys, but the signatures are listed too.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--check-sigs &OptParmNames;</term>
-<listitem><para>
-Same as --list-sigs, but the signatures are verified.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--fingerprint &OptParmNames;</term>
-<listitem><para>
-List all keys with their fingerprints. This is the
-same output as --list-keys but with the additional output
-of a line with the fingerprint. May also be combined
-with --list-sigs or --check-sigs.
-If this command is given twice, the fingerprints of all
-secondary keys are listed too.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--list-packets</term>
-<listitem><para>
-List only the sequence of packets. This is mainly
-useful for debugging.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--gen-key</term>
-<listitem><para>
-Generate a new key pair. This command is normally only used
-interactively.
-</para>
-<para>
-There is an experimental feature which allows you to create keys
-in batch mode. See the file <filename>doc/DETAILS</filename>
-in the source distribution on how to use this.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--edit-key &ParmName;</term>
-<listitem><para>
-Present a menu which enables you to do all key
-related tasks:</para>
- <variablelist>
-
- <varlistentry>
- <term>sign</term>
- <listitem><para>
-Make a signature on key of user &ParmName;
-If the key is not yet signed by the default
-user (or the users given with -u), the
-program displays the information of the key
-again, together with its fingerprint and
-asks whether it should be signed. This
-question is repeated for all users specified
-with -u.</para></listitem></varlistentry>
- <varlistentry>
- <term>lsign</term>
- <listitem><para>
-Same as --sign but the signature is marked as
-non-exportable and will therefore never be used
-by others. This may be used to make keys valid
-only in the local environment.</para></listitem></varlistentry>
- <varlistentry>
- <term>nrsign</term>
- <listitem><para>
-Same as --sign but the signature is marked as non-revocable and can
-therefore never be revoked.</para></listitem></varlistentry>
- <varlistentry>
- <term>nrlsign</term>
- <listitem><para>
-Combines the functionality of nrsign and lsign to make a signature
-that is both non-revocable and
-non-exportable.</para></listitem></varlistentry>
- <varlistentry>
- <term>revsig</term>
- <listitem><para>
-Revoke a signature. For every signature which has been generated by
-one of the secret keys, GnuPG asks whether a revocation certificate
-should be generated.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>trust</term>
- <listitem><para>
-Change the owner trust value. This updates the
-trust-db immediately and no save is required.</para></listitem></varlistentry>
- <varlistentry>
- <term>disable</term>
- <term>enable</term>
- <listitem><para>
-Disable or enable an entire key. A disabled key can normally not be used
-for encryption.</para></listitem></varlistentry>
- <varlistentry>
- <term>adduid</term>
- <listitem><para>
-Create an alternate user id.</para></listitem></varlistentry>
- <varlistentry>
- <term>addphoto</term>
- <listitem><para>
-Create a photographic user id.</para></listitem></varlistentry>
- <varlistentry>
- <term>deluid</term>
- <listitem><para>
-Delete a user id.</para></listitem></varlistentry>
- <varlistentry>
- <term>addkey</term>
- <listitem><para>
-Add a subkey to this key.</para></listitem></varlistentry>
- <varlistentry>
- <term>delkey</term>
- <listitem><para>
-Remove a subkey.</para></listitem></varlistentry>
- <varlistentry>
- <term>addrevoker</term>
- <listitem><para>
-Add a designated revoker. This takes one optional argument:
-"sensitive". If a designated revoker is marked as sensitive, it will
-not be exported by default (see
-export-options).</para></listitem></varlistentry>
- <varlistentry>
- <term>revkey</term>
- <listitem><para>
-Revoke a subkey.</para></listitem></varlistentry>
- <varlistentry>
- <term>expire</term>
- <listitem><para>
-Change the key expiration time. If a subkey is selected, the
-expiration time of this subkey will be changed. With no selection,
-the key expiration of the primary key is changed.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>passwd</term>
- <listitem><para>
-Change the passphrase of the secret key.</para></listitem></varlistentry>
- <varlistentry>
- <term>primary</term>
- <listitem><para>
-Flag the current user id as the primary one, removes the primary user
-id flag from all other user ids and sets the timestamp of all affected
-self-signatures one second ahead. Note that setting a photo user ID
-as primary makes it primary over other photo user IDs, and setting a
-regular user ID as primary makes it primary over other regular user
-IDs.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>uid &ParmN;</term>
- <listitem><para>
-Toggle selection of user id with index &ParmN;.
-Use 0 to deselect all.</para></listitem></varlistentry>
- <varlistentry>
- <term>key &ParmN;</term>
- <listitem><para>
-Toggle selection of subkey with index &ParmN;.
-Use 0 to deselect all.</para></listitem></varlistentry>
- <varlistentry>
- <term>check</term>
- <listitem><para>
-Check all selected user ids.</para></listitem></varlistentry>
- <varlistentry>
- <term>showphoto</term>
- <listitem><para>
-Display the selected photographic user
-id.</para></listitem></varlistentry>
- <varlistentry>
- <term>pref</term>
- <listitem><para>
-List preferences from the selected user ID. This shows the actual
-preferences, without including any implied preferences.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>showpref</term>
- <listitem><para>
-More verbose preferences listing for the selected user ID. This shows
-the preferences in effect by including the implied preferences of
-3DES (cipher), SHA-1 (digest), and Uncompressed (compression) if they
-are not already included in the preference list.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>setpref &ParmString;</term>
- <listitem><para>
-Set the list of user ID preferences to &ParmString;, this should be a
-string similar to the one printed by "pref". Using an empty string
-will set the default preference string, using "none" will set the
-preferences to nil. Use "gpg -v --version" to get a list of available
-algorithms. This command just initializes an internal list and does
-not change anything unless another command (such as "updpref") which
-changes the self-signatures is used.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>updpref</term>
- <listitem><para>
-Change the preferences of all user IDs (or just of the selected ones
-to the current list of preferences. The timestamp of all affected
-self-signatures will be advanced by one second. Note that while you
-can change the preferences on an attribute user ID (aka "photo ID"),
-GnuPG does not select keys via attribute user IDs so these preferences
-will not be used by GnuPG.
-</para></listitem></varlistentry>
- <varlistentry>
- <term>toggle</term>
- <listitem><para>
-Toggle between public and secret key listing.</para></listitem></varlistentry>
- <varlistentry>
- <term>save</term>
- <listitem><para>
-Save all changes to the key rings and quit.</para></listitem></varlistentry>
- <varlistentry>
- <term>quit</term>
- <listitem><para>
-Quit the program without updating the
-key rings.</para></listitem></varlistentry>
- </variablelist>
- <para>
-The listing shows you the key with its secondary
-keys and all user ids. Selected keys or user ids
-are indicated by an asterisk. The trust value is
-displayed with the primary key: the first is the
-assigned owner trust and the second is the calculated
-trust value. Letters are used for the values:</para>
- <variablelist>
- <varlistentry><term>-</term><listitem><para>No ownertrust assigned / not yet calculated.</para></listitem></varlistentry>
- <varlistentry><term>e</term><listitem><para>Trust
-calculation has failed; probably due to an expired key.</para></listitem></varlistentry>
- <varlistentry><term>q</term><listitem><para>Not enough information for calculation.</para></listitem></varlistentry>
- <varlistentry><term>n</term><listitem><para>Never trust this key.</para></listitem></varlistentry>
- <varlistentry><term>m</term><listitem><para>Marginally trusted.</para></listitem></varlistentry>
- <varlistentry><term>f</term><listitem><para>Fully trusted.</para></listitem></varlistentry>
- <varlistentry><term>u</term><listitem><para>Ultimately trusted.</para></listitem></varlistentry>
- </variablelist>
-</listitem></varlistentry>
-
-<varlistentry>
-<term>--sign-key &ParmName;</term>
-<listitem><para>
-Signs a public key with your secret key. This is a shortcut version of
-the subcommand "sign" from --edit.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--lsign-key &ParmName;</term>
-<listitem><para>
-Signs a public key with your secret key but marks it as
-non-exportable. This is a shortcut version of the subcommand "lsign"
-from --edit.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--nrsign-key &ParmName;</term>
-<listitem><para>
-Signs a public key with your secret key but marks it as non-revocable.
-This is a shortcut version of the subcommand "nrsign" from --edit.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--delete-key &ParmName;</term>
-<listitem><para>
-Remove key from the public keyring. In batch mode either --yes is
-required or the key must be specified by fingerprint. This is a
-safeguard against accidental deletion of multiple keys.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--delete-secret-key &ParmName;</term>
-<listitem><para>
-Remove key from the secret and public keyring. In batch mode the key
-must be specified by fingerprint.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--delete-secret-and-public-key &ParmName;</term>
-<listitem><para>
-Same as --delete-key, but if a secret key exists, it will be removed
-first. In batch mode the key must be specified by fingerprint.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--gen-revoke</term>
-<listitem><para>
-Generate a revocation certificate for the complete key. To revoke
-a subkey or a signature, use the --edit command.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--desig-revoke</term>
-<listitem><para>
-Generate a designated revocation certificate for a key. This allows a
-user (with the permission of the keyholder) to revoke someone elses
-key.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--export &OptParmNames;</term>
-<listitem><para>
-Either export all keys from all keyrings (default
-keyrings and those registered via option --keyring),
-or if at least one name is given, those of the given
-name. The new keyring is written to stdout or to
-the file given with option "output". Use together
-with --armor to mail those keys.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--send-keys &OptParmNames;</term>
-<listitem><para>
-Same as --export but sends the keys to a keyserver.
-Option --keyserver must be used to give the name
-of this keyserver. Don't send your complete keyring
-to a keyserver - select only those keys which are new
-or changed by you.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--export-all &OptParmNames;</term>
-<listitem><para>
-Same as --export, but also exports keys which
-are not compatible with OpenPGP.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--export-secret-keys &OptParmNames;</term>
-<term>--export-secret-subkeys &OptParmNames;</term>
-<listitem><para>
-Same as --export, but exports the secret keys instead.
-This is normally not very useful and a security risk.
-The second form of the command has the special property to
-render the secret part of the primary key useless; this is
-a GNU extension to OpenPGP and other implementations can
-not be expected to successfully import such a key.
-
-See the option --simple-sk-checksum if you want to import such an
-exported key with an older OpenPGP implementation.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--import &OptParmFiles;</term>
-<term>--fast-import &OptParmFiles;</term>
-<listitem><para>
-Import/merge keys. This adds the given keys to the
-keyring. The fast version is currently just a synonym.
-</para>
-<para>
-There are a few other options which control how this command works.
-Most notable here is the --merge-only option which does not insert new keys
-but does only the merging of new signatures, user-IDs and subkeys.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--recv-keys &ParmKeyIDs;</term>
-<listitem><para>
-Import the keys with the given key IDs from a keyserver. Option
---keyserver must be used to give the name of this keyserver.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--search-keys &OptParmNames;</term>
-<listitem><para>
-Search the keyserver for the given names. Multiple names given here
-will be joined together to create the search string for the keyserver.
-Option --keyserver must be used to give the name of this keyserver.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--update-trustdb</term>
-<listitem><para>
-Do trust DB maintenance. This command goes over all keys and builds
-the Web-of-Trust. This is an interactive command because it may has to
-ask for the "ownertrust" values of keys. The user has to give an
-estimation in how far she trusts the owner of the displayed key to
-correctly certify (sign) other keys. It does only ask for that value
-if it has not yet been assigned to a key. Using the edit menu, that
-value can be changed at any time later.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--check-trustdb</term>
-<listitem><para>
-Do trust DB maintenance without user interaction. Form time to time
-the trust database must be updated so that expired keys and resulting
-changes in the Web-of-Trust can be tracked. GnuPG tries to figure
-when this is required and then does it implicitly; this command can be
-used to force such a check. The processing is identically to that of
---update-trustdb but it skips keys with a not yet defined "ownertrust".
-</para>
-<para>
-For use with cron jobs, this command can be used together with --batch
-in which case the check is only done when it is due. To force a run
-even in batch mode add the option --yes.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--export-ownertrust &OptParmFile;</term>
-<listitem><para>
-Store the ownertrust values into
-&ParmFile; (or stdin if not given). This is useful for backup
-purposes as these values are the only ones which can't be re-created
-from a corrupted trust DB.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--import-ownertrust &OptParmFiles;</term>
-<listitem><para>
-Update the trustdb with the ownertrust values stored
-in &ParmFiles; (or stdin if not given); existing
-values will be overwritten.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--rebuild-keydb-caches</term>
-<listitem><para>
-When updating from version 1.0.6 to 1.0.7 this command should be used
-to create signature caches in the keyring. It might be handy in other
-situations too.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--print-md <parameter>algo</parameter> &OptParmFiles;</term>
-<term>--print-mds &OptParmFiles;</term>
-<listitem><para>
-Print message digest of algorithm ALGO for all given files or stdin.
-With the second form (or a deprecated "*" as algo) digests for all
-available algorithms are printed.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--gen-random <parameter>0|1|2</parameter>
- <optional><parameter>count</parameter></optional></term>
-<listitem><para>
-Emit COUNT random bytes of the given quality level. If count is not given
-or zero, an endless sequence of random bytes will be emitted.
-PLEASE, don't use this command unless you know what you are doing; it may
-remove precious entropy from the system!
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--gen-prime <parameter>mode</parameter>
- <parameter>bits</parameter>
- <optional><parameter>qbits</parameter></optional></term>
-<listitem><para>
-Use the source, Luke :-). The output format is still subject to change.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--version</term>
-<listitem><para>
-Print version information along with a list
-of supported algorithms.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--warranty</term>
-<listitem><para>
-Print warranty information.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-h, --help</term>
-<listitem><para>
-Print usage information. This is a really long list even though it doesn't list
-all options.
-</para></listitem></varlistentry>
-
-
-
-</variablelist>
-</refsect1>
-
-<refsect1>
-<title>OPTIONS</title>
-<para>
-Long options can be put in an options file (default
-"~/.gnupg/gpg.conf"). Short option names will not work - for example,
-"armor" is a valid option for the options file, while "a" is not. Do
-not write the 2 dashes, but simply the name of the option and any
-required arguments. Lines with a hash ('#') as the first
-non-white-space character are ignored. Commands may be put in this
-file too, but that does not make sense.
-</para>
-<para>
-<command/gpg/ recognizes these options:
-</para>
-
-<variablelist>
-
-
-<varlistentry>
-<term>-a, --armor</term>
-<listitem><para>
-Create ASCII armored output.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-o, --output &ParmFile;</term>
-<listitem><para>
-Write output to &ParmFile;.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-u, --local-user &ParmName;</term>
-<listitem><para>
-Use &ParmName as the user ID to sign.
-This option is silently ignored for the list commands,
-so that it can be used in an options file.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--default-key &ParmName;</term>
-<listitem><para>
-Use &ParmName; as default user ID for signatures. If this
-is not used the default user ID is the first user ID
-found in the secret keyring.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-r, --recipient &ParmName;</term>
-<term></term>
-<listitem><para>
-Encrypt for user id &ParmName;. If this option is not
-specified, GnuPG asks for the user-id unless --default-recipient is given
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--default-recipient &ParmName;</term>
-<listitem><para>
-Use &ParmName; as default recipient if option --recipient is not used and
-don't ask if this is a valid one. &ParmName; must be non-empty.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--default-recipient-self</term>
-<listitem><para>
-Use the default key as default recipient if option --recipient is not used and
-don't ask if this is a valid one. The default key is the first one from the
-secret keyring or the one set with --default-key.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-default-recipient</term>
-<listitem><para>
-Reset --default-recipient and --default-recipient-self.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--encrypt-to &ParmName;</term>
-<listitem><para>
-Same as --recipient but this one is intended for use
-in the options file and may be used with
-your own user-id as an "encrypt-to-self". These keys
-are only used when there are other recipients given
-either by use of --recipient or by the asked user id.
-No trust checking is performed for these user ids and
-even disabled keys can be used.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-encrypt-to</term>
-<listitem><para>
-Disable the use of all --encrypt-to keys.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-v, --verbose</term>
-<listitem><para>
-Give more information during processing. If used
-twice, the input data is listed in detail.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-q, --quiet</term>
-<listitem><para>
-Try to be as quiet as possible.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-z &ParmN;, --compress &ParmN;</term>
-<listitem><para>
-Set compression level to &ParmN;. A value of 0 for &ParmN;
-disables compression. Default is to use the default
-compression level of zlib (normally 6).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-t, --textmode</term>
-<listitem><para>
-Use canonical text mode. If -t (but not
---textmode) is used together with armoring
-and signing, this enables clearsigned messages.
-This kludge is needed for PGP compatibility;
-normally you would use --sign or --clearsign
-to selected the type of the signature.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-n, --dry-run</term>
-<listitem><para>
-Don't make any changes (this is not completely implemented).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-i, --interactive</term>
-<listitem><para>
-Prompt before overwriting any files.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--batch</term>
-<listitem><para>
-Use batch mode. Never ask, do not allow interactive
-commands.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-tty</term>
-<listitem><para>
-Make sure that the TTY (terminal) is never used for any output.
-This option is needed in some cases because GnuPG sometimes prints
-warnings to the TTY if --batch is used.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-batch</term>
-<listitem><para>
-Disable batch mode. This may be of use if --batch
-is enabled from an options file.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--yes</term>
-<listitem><para>
-Assume "yes" on most questions.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no</term>
-<listitem><para>
- Assume "no" on most questions.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--default-cert-check-level &ParmN;</term>
-<listitem><para>
-The default to use for the check level when signing a key.
-</para><para>
-0 means you make no particular claim as to how carefully you verified
-the key.
-</para><para>
-1 means you believe the key is owned by the person who claims to own
-it but you could not, or did not verify the key at all. This is
-useful for a "persona" verification, where you sign the key of a
-pseudonymous user.
-</para><para>
-2 means you did casual verification of the key. For example, this
-could mean that you verified that the key fingerprint and checked the
-user ID on the key against a photo ID.
-</para><para>
-3 means you did extensive verification of the key. For example, this
-could mean that you verified the key fingerprint with the owner of the
-key in person, and that you checked, by means of a hard to forge
-document with a photo ID (such as a passport) that the name of the key
-owner matches the name in the user ID on the key, and finally that you
-verified (by exchange of email) that the email address on the key
-belongs to the key owner.
-</para><para>
-Note that the examples given above for levels 2 and 3 are just that:
-examples. In the end, it is up to you to decide just what "casual"
-and "extensive" mean to you.
-</para><para>
-This option defaults to 0.
-</para></listitem></varlistentry>
-
-
-
-<varlistentry>
-<term>--trusted-key <parameter>long key ID</parameter></term>
-<listitem><para>
-Assume that the specified key (which must be given
-as a full 8 byte key ID) is as trustworthy as one of
-your own secret keys. This option is useful if you
-don't want to keep your secret keys (or one of them)
-online but still want to be able to check the validity of a given
-recipient's or signator's key.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--always-trust</term>
-<listitem><para>
-Skip key validation and assume that used keys are always fully trusted.
-You won't use this unless you have installed some external validation
-scheme. This option also suppresses the "[uncertain]" tag printed
-with signature checks when there is no evidence that the user ID
-is bound to the key.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--keyserver &ParmName;</term>
-<listitem><para>
-Use &ParmName as your keyserver. This is the server that --recv-keys,
---send-keys, and --search-keys will communicate with to receive keys
-from, send keys to, and search for keys on. The format of the
-&ParmName is a URI: `scheme:[//]keyservername[:port]' The scheme is
-the type of keyserver: "hkp" for the Horowitz (or compatible)
-keyservers, "ldap" for the NAI LDAP keyserver, or "mailto" for the
-Horowitz email keyserver. Note that your particular installation of
-GnuPG may have other keyserver types available as well. Keyserver
-schemes are case-insensitive.
-</para><para>
-Most keyservers synchronize with each other, so there is generally no
-need to send keys to more than one server. Using the command "host -l
-pgp.net | grep wwwkeys" gives you a list of HKP keyservers. When
-using one of the wwwkeys servers, due to load balancing using
-round-robin DNS you may notice that you get a different key server
-each time.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--keyserver-options <parameter>parameters</parameter></term>
-<listitem><para>
-This is a space or comma delimited string that gives options for the
-keyserver. Options can be prepended with a `no-' to give the opposite
-meaning. Valid import-options or export-options may be used here as
-well to apply to importing (--recv-key) or exporting (--send-key) a
-key from a keyserver. While not all options are available for all
-keyserver types, some common options are:
-<variablelist>
-
-<varlistentry>
-<term>include-revoked</term>
-<listitem><para>
-When searching for a key, include keys that are marked on the
-keyserver as revoked. Note that this option is always set when using
-the NAI HKP keyserver, as this keyserver does not differentiate
-between revoked and unrevoked keys. When using the LDAP keyserver,
-this applies to both searching (--search-keys) and receiving
-(--recv-keys).
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>include-disabled</term>
-<listitem><para>
-When receiving or searching for a key, include keys that are marked on
-the keyserver as disabled. Note that this option is not used with HKP
-keyservers, as they do not support disabling keys.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>include-subkeys</term>
-<listitem><para>
-When receiving a key, include subkeys in the search. Note that this
-option is not used with HKP keyservers, as they do not support
-retrieving keys by subkey id.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>use-temp-files</term>
-<listitem><para>
-On most Unix-like platforms, GnuPG communicates with the keyserver
-helper program via pipes, which is the most efficient method. This
-option forces GnuPG to use temporary files to communicate. On some
-platforms (such as Win32 and RISC OS), this option is always enabled.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>keep-temp-files</term>
-<listitem><para>
-If using `use-temp-files', do not delete the temp files after using
-them. This option is useful to learn the keyserver communication
-protocol by reading the temporary files.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>verbose</term>
-<listitem><para>
-Tell the keyserver helper program to be more verbose. This option can
-be repeated multiple times to increase the verbosity level.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>honor-http-proxy</term>
-<listitem><para>
-For keyserver schemes that use HTTP (such as HKP), try to access the
-keyserver over the proxy set with the environment variable
-"http_proxy".
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>auto-key-retrieve</term>
-<listitem><para>
-This option enables the automatic retrieving of keys from a keyserver
-when verifying signatures made by keys that are not on the local
-keyring.
-</para></listitem></varlistentry>
-
-</variablelist>
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--import-options <parameter>parameters</parameter></term>
-<listitem><para>
-This is a space or comma delimited string that gives options for
-importing keys. Options can be prepended with a `no-' to give the
-opposite meaning. The options are:
-<variablelist>
-
-<varlistentry>
-<term>allow-local-sigs</term>
-<listitem><para>
-Allow importing key signatures marked as "local". This is not
-generally useful unless a shared keyring scheme is being used.
-Defaults to no.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>repair-hkp-subkey-bug</term>
-<listitem><para>
-During import, attempt to repair the HKP keyserver mangling multiple
-subkeys bug. Note that this cannot completely repair the damaged key
-as some crucial data is removed by the keyserver, but it does at least
-give you back one subkey. Defaults to no for regular --import and to
-yes for keyserver --recv-keys.
-</para></listitem></varlistentry>
-
-</variablelist>
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--export-options <parameter>parameters</parameter></term>
-<listitem><para>
-This is a space or comma delimited string that gives options for
-exporting keys. Options can be prepended with a `no-' to give the
-opposite meaning. The options are:
-<variablelist>
-
-<varlistentry>
-<term>include-non-rfc</term>
-<listitem><para>
-Include non-RFC compliant keys in the export. Defaults to yes.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>include-local-sigs</term>
-<listitem><para>
-Allow exporting key signatures marked as "local". This is not
-generally useful unless a shared keyring scheme is being used.
-Defaults to no.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>include-attributes</term>
-<listitem><para>
-Include attribute user IDs (photo IDs) while exporting. This is
-useful to export keys if they are going to be used by an OpenPGP
-program that does not accept attribute user IDs. Defaults to yes.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>include-sensitive-revkeys</term>
-<listitem><para>
-Include designated revoker information that was marked as
-"sensitive". Defaults to no.
-</para></listitem></varlistentry>
-
-</variablelist>
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--show-photos</term>
-<listitem><para>
-Causes --list-keys, --list-sigs, --list-public-keys,
---list-secret-keys, and verifying a signature to also display the
-photo ID attached to the key, if any.
-See also --photo-viewer.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-show-photos</term>
-<listitem><para>
-Resets the --show-photos flag.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--photo-viewer &ParmString;</term>
-<listitem><para>
-This is the command line that should be run to view a photo ID. "%i"
-will be expanded to a filename containing the photo. "%I" does the
-same, except the file will not be deleted once the viewer exits.
-Other flags are "%k" for the key ID, "%K" for the long key ID, "%f"
-for the key fingerprint, "%t" for the extension of the image type
-(e.g. "jpg"), "%T" for the MIME type of the image (e.g. "image/jpeg"),
-and "%%" for an actual percent sign. If neither %i or %I are present,
-then the photo will be supplied to the viewer on standard input.
-</para><para>
-The default viewer is "xloadimage -fork -quiet -title 'KeyID 0x%k'
-stdin"
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--exec-path &ParmString;</term>
-<listitem><para>
-Sets a list of directories to search for photo viewers and keyserver
-helpers. If not provided, keyserver helpers use the compiled-in
-default directory, and photo viewers use the $PATH environment
-variable.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--show-keyring</term>
-<listitem><para>
-Causes --list-keys, --list-public-keys, and --list-secret-keys to
-display the name of the keyring a given key resides on. This is only
-useful when you're listing a specific key or set of keys. It has no
-effect when listing all keys.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--keyring &ParmFile;</term>
-<listitem><para>
-Add &ParmFile to the list of keyrings.
-If &ParmFile begins with a tilde and a slash, these
-are replaced by the HOME directory. If the filename
-does not contain a slash, it is assumed to be in the
-home-directory ("~/.gnupg" if --homedir is not used).
-The filename may be prefixed with a scheme:</para>
-<para>"gnupg-ring:" is the default one.</para>
-<para>It might make sense to use it together with --no-default-keyring.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--secret-keyring &ParmFile;</term>
-<listitem><para>
-Same as --keyring but for the secret keyrings.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--homedir &ParmDir;</term>
-<listitem><para>
-Set the name of the home directory to &ParmDir; If this
-option is not used it defaults to "~/.gnupg". It does
-not make sense to use this in a options file. This
-also overrides the environment variable "GNUPGHOME".
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--charset &ParmName;</term>
-<listitem><para>
-Set the name of the native character set. This is used
-to convert some strings to proper UTF-8 encoding. If this option is not used, the default character set is determined
-from the current locale. A verbosity level of 3 shows the used one.
-Valid values for &ParmName; are:</para>
-<variablelist>
-<varlistentry>
-<term>iso-8859-1</term><listitem><para>This is the Latin 1 set.</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>iso-8859-2</term><listitem><para>The Latin 2 set.</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>iso-8859-15</term><listitem><para>This is currently an alias for
-the Latin 1 set.</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>koi8-r</term><listitem><para>The usual Russian set (rfc1489).</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>utf-8</term><listitem><para>Bypass all translations and assume
-that the OS uses native UTF-8 encoding.</para></listitem>
-</varlistentry>
-</variablelist>
-</listitem></varlistentry>
-
-
-<varlistentry>
-<term>--utf8-strings</term>
-<term>--no-utf8-strings</term>
-<listitem><para>
-Assume that the arguments are already given as UTF8 strings. The default
-(--no-utf8-strings)
-is to assume that arguments are encoded in the character set as specified
-by --charset. These options affect all following arguments. Both options may
-be used multiple times.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--options &ParmFile;</term>
-<listitem><para>
-Read options from &ParmFile; and do not try to read
-them from the default options file in the homedir
-(see --homedir). This option is ignored if used
-in an options file.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-options</term>
-<listitem><para>
-Shortcut for "--options /dev/null". This option is
-detected before an attempt to open an option file.
-Using this option will also prevent the creation of a
-"~./gnupg" homedir.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--load-extension &ParmName;</term>
-<listitem><para>
-Load an extension module. If &ParmName; does not contain a slash it is
-searched for in the directory configured when GnuPG was built
-(generally "/usr/local/lib/gnupg"). Extensions are not generally
-useful anymore, and the use of this option is deprecated.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--debug &ParmFlags;</term>
-<listitem><para>
-Set debugging flags. All flags are or-ed and &ParmFlags; may
-be given in C syntax (e.g. 0x0042).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--debug-all</term>
-<listitem><para>
- Set all useful debugging flags.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--status-fd &ParmN;</term>
-<listitem><para>
-Write special status strings to the file descriptor &ParmN;.
-See the file DETAILS in the documentation for a listing of them.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--logger-fd &ParmN;</term>
-<listitem><para>
-Write log output to file descriptor &ParmN; and not to stderr.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--attribute-fd &ParmN;</term>
-<listitem><para>
-Write attribute subpackets to the file descriptor &ParmN;. This is
-most useful for use with --status-fd, since the status messages are
-needed to separate out the various subpackets from the stream
-delivered to the file descriptor.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--sk-comments</term>
-<listitem><para>
-Include secret key comment packets when exporting secret keys. This
-is a GnuPG extension to the OpenPGP standard, and is off by default.
-Please note that this has nothing to do with the comments in clear
-text signatures or armor headers.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-sk-comments</term>
-<listitem><para>
-Resets the --sk-comments option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-comment</term>
-<listitem><para>
-See --sk-comments. This option is deprecated and may be removed soon.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--comment &ParmString;</term>
-<listitem><para>
-Use &ParmString; as comment string in clear text signatures.
-The default is not do write a comment string.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--default-comment</term>
-<listitem><para>
-Force to write the standard comment string in clear
-text signatures. Use this to overwrite a --comment
-from a config file. This option is now obsolete because there is no
-default comment string anymore.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-version</term>
-<listitem><para>
-Omit the version string in clear text signatures.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--emit-version</term>
-<listitem><para>
-Force to write the version string in clear text
-signatures. Use this to overwrite a previous
---no-version from a config file.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-N, --notation-data &ParmNameValue;</term>
-<listitem><para>
-Put the name value pair into the signature as notation data.
-&ParmName; must consist only of alphanumeric characters, digits
-or the underscore; the first character must not be a digit.
-&ParmValue; may be any printable string; it will be encoded in UTF8,
-so you should check that your --charset is set correctly.
-If you prefix &ParmName; with an exclamation mark, the notation
-data will be flagged as critical (rfc2440:5.2.3.15).
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--show-notation</term>
-<listitem><para>
-Show key signature notations in the --list-sigs or --check-sigs
-listings.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-show-notation</term>
-<listitem><para>
-Do not show key signature notations in the --list-sigs or --check-sigs
-listings.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--set-policy-url &ParmString;</term>
-<listitem><para>
-Use &ParmString; as Policy URL for signatures (rfc2440:5.2.3.19).
-If you prefix it with an exclamation mark, the policy URL
-packet will be flagged as critical.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--show-policy-url</term>
-<listitem><para>
-Show any policy URLs set in the --list-sigs or --check-sigs listings.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-show-policy-url</term>
-<listitem><para>
-Do not show any policy URLs set in the --list-sigs or --check-sigs
-listings.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--set-filename &ParmString;</term>
-<listitem><para>
-Use &ParmString; as the name of file which is stored in
-messages.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--for-your-eyes-only</term>
-<listitem><para>
-Set the `for your eyes only' flag in the message. This causes GnuPG
-to refuse to save the file unless the --output option is given, and
-PGP to use the "secure viewer" with a Tempest-resistant font to
-display the message. This option overrides --set-filename.
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--no-for-your-eyes-only</term>
-<listitem><para>
-Resets the --for-your-eyes-only flag.
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--use-embedded-filename</term>
-<listitem><para>
-Try to create a file with a name as embedded in the data.
-This can be a dangerous option as it allows to overwrite files.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--completes-needed &ParmN;</term>
-<listitem><para>
-Number of completely trusted users to introduce a new
-key signer (defaults to 1).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--marginals-needed &ParmN;</term>
-<listitem><para>
-Number of marginally trusted users to introduce a new
-key signer (defaults to 3)
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--max-cert-depth &ParmN;</term>
-<listitem><para>
-Maximum depth of a certification chain (default is 5).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--cipher-algo &ParmName;</term>
-<listitem><para>
-Use &ParmName; as cipher algorithm. Running the program
-with the command --version yields a list of supported
-algorithms. If this is not used the cipher algorithm is
-selected from the preferences stored with the key.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--digest-algo &ParmName;</term>
-<listitem><para>
-Use &ParmName; as the message digest algorithm. Running the program
-with the command --version yields a list of supported algorithms.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--cert-digest-algo &ParmName;</term>
-<listitem><para>
-Use &ParmName; as the message digest algorithm used when signing a
-key. Running the program with the command --version yields a list of
-supported algorithms. Be aware that if you choose an algorithm that
-GnuPG supports but other OpenPGP implementations do not, then some
-users will not be able to use the key signatures you make, or quite
-possibly your entire key.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--s2k-cipher-algo &ParmName;</term>
-<listitem><para>
-Use &ParmName; as the cipher algorithm used to protect secret keys.
-The default cipher is CAST5. This cipher is also used for
-conventional encryption if --cipher-algo is not given.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--s2k-digest-algo &ParmName;</term>
-<listitem><para>
-Use &ParmName; as the digest algorithm used to mangle the
-passphrases. The default algorithm is RIPE-MD-160.
-This digest algorithm is also used for conventional
-encryption if --digest-algo is not given.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--s2k-mode &ParmN;</term>
-<listitem><para>
-Selects how passphrases are mangled. If &ParmN; is 0
-a plain passphrase (which is not recommended) will be used,
-a 1 (default) adds a salt to the passphrase and
-a 3 iterates the whole process a couple of times.
-Unless --rfc1991 is used, this mode is also used
-for conventional encryption.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--simple-sk-checksum</term>
-<listitem><para>
-Secret keys are integrity protected by using a SHA-1 checksum. This
-method will be part of an enhanced OpenPGP specification but GnuPG
-already uses it as a countermeasure against certain attacks. Old
-applications don't understand this new format, so this option may be
-used to switch back to the old behaviour. Using this this option
-bears a security risk. Note that using this option only takes effect
-when the secret key is encrypted - the simplest way to make this
-happen is to change the passphrase on the key (even changing it to the
-same value is acceptable).
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--compress-algo &ParmN;</term>
-<listitem><para>
-Use compression algorithm &ParmN;. Default is 2 which is RFC1950
-compression. You may use 1 to use the old zlib version (RFC1951) which
-is used by PGP. 0 disables compression. 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; note, that this can't be
-done if you do not encrypt the data.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--disable-cipher-algo &ParmName;</term>
-<listitem><para>
-Never allow the use of &ParmName; as cipher algorithm.
-The given name will not be checked so that a later loaded algorithm
-will still get disabled.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--disable-pubkey-algo &ParmName;</term>
-<listitem><para>
-Never allow the use of &ParmName; as public key algorithm.
-The given name will not be checked so that a later loaded algorithm
-will still get disabled.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-sig-cache</term>
-<listitem><para>
-Do not cache the verification status of key signatures.
-Caching gives a much better performance in key listings. However, if
-you suspect that your public keyring is not save against write
-modifications, you can use this option to disable the caching. It
-probably does not make sense to disable it because all kind of damage
-can be done if someone else has write access to your public keyring.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-sig-create-check</term>
-<listitem><para>
-GnuPG normally verifies each signature right after creation to protect
-against bugs and hardware malfunctions which could leak out bits from
-the secret key. This extra verification needs some time (about 115%
-for DSA keys), and so this option can be used to disable it.
-However, due to the fact that the signature creation needs manual
-interaction, this performance penalty does not matter in most settings.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--auto-check-trustdb</term>
-<listitem><para>
-If GnuPG feels that its information about the Web-of-Trust has to be
-updated, it automatically runs the --check-trustdb command
-internally. This may be a time consuming process.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-auto-check-trustdb</term>
-<listitem><para>
-Resets the --auto-check-trustdb option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--throw-keyid</term>
-<listitem><para>
-Do not put the keyid into encrypted packets. This option
-hides the receiver of the message and is a countermeasure
-against traffic analysis. It may slow down the decryption
-process because all available secret keys are tried.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--not-dash-escaped</term>
-<listitem><para>
-This option changes the behavior of cleartext signatures
-so that they can be used for patch files. You should not
-send such an armored file via email because all spaces
-and line endings are hashed too. You can not use this
-option for data which has 5 dashes at the beginning of a
-line, patch files don't have this. A special armor header
-line tells GnuPG about this cleartext signature option.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--escape-from-lines</term>
-<listitem><para>
-Because some mailers change lines starting with "From "
-to "&#60;From " it is good to handle such lines in a special
-way when creating cleartext signatures. All other PGP
-versions do it this way too. This option is not enabled
-by default because it would violate rfc2440.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--passphrase-fd &ParmN;</term>
-<listitem><para>
-Read the passphrase from file descriptor &ParmN;. If you use
-0 for &ParmN;, the passphrase will be read from stdin. This
-can only be used if only one passphrase is supplied.
-<!--fixme: make this print strong-->
-Don't use this option if you can avoid it.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--command-fd &ParmN;</term>
-<listitem><para>
-This is a replacement for the deprecated shared-memory IPC mode.
-If this option is enabled, user input on questions is not expected
-from the TTY but from the given file descriptor. It should be used
-together with --status-fd. See the file doc/DETAILS in the source
-distribution for details on how to use it.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--use-agent</term>
-<listitem><para>
-Try to use the GnuPG-Agent. Please note that this agent is still under
-development. With this option, GnuPG first tries to connect to the
-agent before it asks for a passphrase.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--gpg-agent-info</term>
-<listitem><para>
-Override the value of the environment variable
-<literal>GPG_AGENT_INFO</>. This is only used when --use-agent has been given
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--rfc1991</term>
-<listitem><para>
-Try to be more RFC1991 (PGP 2.x) compliant.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--pgp2</term>
-<listitem><para>
-Set up all options to be as PGP 2.x compliant as possible, and warn if
-an action is taken (e.g. encrypting to a non-RSA key) that will create
-a message that PGP 2.x will not be able to handle. Note that `PGP
-2.x' here means `MIT PGP 2.6.2'. There are other versions of PGP 2.x
-available, but the MIT release is a good common baseline.
-</para><para>
-This option implies `--rfc1991 --no-openpgp --disable-mdc
---no-force-v4-certs --no-comment --escape-from-lines --force-v3-sigs
---no-ask-sig-expire --no-ask-cert-expire --cipher-algo IDEA
---digest-algo MD5 --compress-algo 1'. It also disables --textmode
-when encrypting.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-pgp2</term>
-<listitem><para>
-Resets the --pgp2 option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--pgp6</term>
-<listitem><para>
-Set up all options to be as PGP 6 compliant as possible. This
-restricts you to the ciphers IDEA (if the IDEA plugin is installed),
-3DES, and CAST5, the hashes MD5, SHA1 and RIPEMD160, and the
-compression algorithms none and ZIP. This also disables making
-signatures with signing subkeys as PGP 6 does not understand
-signatures made by signing subkeys.
-</para><para>
-This option implies `--disable-mdc --no-comment --escape-from-lines
---force-v3-sigs --no-ask-sig-expire --compress-algo 1'
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-pgp6</term>
-<listitem><para>
-Resets the --pgp6 option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--pgp7</term>
-<listitem><para>
-Set up all options to be as PGP 7 compliant as possible. This is
-identical to --pgp6 except that MDCs are not disabled, and the list of
-allowable ciphers is expanded to add AES128, AES192, AES256, and
-TWOFISH.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-pgp7</term>
-<listitem><para>
-Resets the --pgp7 option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--openpgp</term>
-<listitem><para>
-Reset all packet, cipher and digest options to OpenPGP behavior. Use
-this option to reset all previous options like --rfc1991,
---force-v3-sigs, --s2k-*, --cipher-algo, --digest-algo and
---compress-algo to OpenPGP compliant values. All PGP workarounds are
-also disabled.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--force-v3-sigs</term>
-<listitem><para>
-OpenPGP states that an implementation should generate v4 signatures
-but PGP versions 5 and higher only recognize v4 signatures on key
-material. This option forces v3 signatures for signatures on data.
-Note that this option overrides --ask-sig-expire, as v3 signatures
-cannot have expiration dates.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-force-v3-sigs</term>
-<listitem><para>
-Reset the --force-v3-sigs option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--force-v4-certs</term>
-<listitem><para>
-Always use v4 key signatures even on v3 keys. This option also
-changes the default hash algorithm for v3 RSA keys from MD5 to SHA-1.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-force-v4-certs</term>
-<listitem><para>
-Reset the --force-v4-certs option.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--force-mdc</term>
-<listitem><para>
-Force the use of encryption with appended manipulation code. This is
-always used with the newer ciphers (those with a blocksize greater
-than 64 bit).
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--allow-non-selfsigned-uid</term>
-<listitem><para>
-Allow the import and use of keys with user IDs which are not
-self-signed. This is not recommended, as a non self-signed user ID is
-trivial to forge.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-allow-non-selfsigned-uid</term>
-<listitem><para>
-Reset the --allow-non-selfsigned-uid option.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--allow-freeform-uid</term>
-<listitem><para>
-Disable all checks on the form of the user ID while generating a new
-one. This option should only be used in very special environments as
-it does not ensure the de-facto standard format of user IDs.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--ignore-time-conflict</term>
-<listitem><para>
-GnuPG normally checks that the timestamps associated with keys and
-signatures have plausible values. However, sometimes a signature seems to
-be older than the key due to clock problems. This option makes these
-checks just a warning.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--ignore-valid-from</term>
-<listitem><para>
-GnuPG normally does not select and use subkeys created in the future. This
-option allows the use of such keys and thus exhibits the pre-1.0.7
-behaviour. You should not use this option unless you there is some
-clock problem.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--ignore-crc-error</term>
-<listitem><para>
-The ASCII armor used by OpenPGP is protected by a CRC checksum against
-transmission errors. Sometimes it happens that the CRC gets mangled
-somewhere on the transmission channel but the actual content (which is
-protected by the OpenPGP protocol anyway) is still okay. This option
-will let gpg ignore CRC errors.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--ignore-mdc-error</term>
-<listitem><para>
-This option changes a MDC integrity protection failure into a warning.
-This can be useful if a message is partially corrupt, but it is
-necessary to get as much data as possible out of the corrupt message.
-However, be aware that a MDC protection failure may also mean that the
-message was tampered with intentionally by an attacker.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--lock-once</term>
-<listitem><para>
-Lock the databases the first time a lock is requested
-and do not release the lock until the process
-terminates.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--lock-multiple</term>
-<listitem><para>
-Release the locks every time a lock is no longer
-needed. Use this to override a previous --lock-once
-from a config file.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--lock-never</term>
-<listitem><para>
-Disable locking entirely. This option should be used only in very
-special environments, where it can be assured that only one process
-is accessing those files. A bootable floppy with a stand-alone
-encryption system will probably use this. Improper usage of this
-option may lead to data and key corruption.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-random-seed-file</term>
-<listitem><para>
-GnuPG uses a file to store its internal random pool over invocations.
-This makes random generation faster; however sometimes write operations
-are not desired. This option can be used to achieve that with the cost of
-slower random generation.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-verbose</term>
-<listitem><para>
-Reset verbose level to 0.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-greeting</term>
-<listitem><para>
-Suppress the initial copyright message but do not
-enter batch mode.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-secmem-warning</term>
-<listitem><para>
-Suppress the warning about "using insecure memory".
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-permission-warning</term>
-<listitem><para>
-Suppress the warning about unsafe file permissions.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-mdc-warning</term>
-<listitem><para>
-Suppress the warning about missing MDC integrity protection.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-armor</term>
-<listitem><para>
-Assume the input data is not in ASCII armored format.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--no-default-keyring</term>
-<listitem><para>
-Do not add the default keyrings to the list of
-keyrings.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--skip-verify</term>
-<listitem><para>
-Skip the signature verification step. This may be
-used to make the decryption faster if the signature
-verification is not needed.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--with-colons</term>
-<listitem><para>
-Print key listings delimited by colons. Note, that the output will be
-encoded in UTF-8 regardless of any --charset setting.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--with-key-data</term>
-<listitem><para>
-Print key listings delimited by colons (like --with-colons) and print the public key data.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--with-fingerprint</term>
-<listitem><para>
-Same as the command --fingerprint but changes only the format of the output
-and may be used together with another command.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--fast-list-mode</term>
-<listitem><para>
-Changes the output of the list commands to work faster; this is achieved
-by leaving some parts empty. Some applications don't need the user ID and
-the trust information given in the listings. By using this options they
-can get a faster listing. The exact behaviour of this option may change
-in future versions.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--fixed-list-mode</term>
-<listitem><para>
-Do not merge user ID and primary key in --with-colon listing mode and
-print all timestamps as seconds since 1970-01-01.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--list-only</term>
-<listitem><para>
-Changes the behaviour of some commands. This is like --dry-run but
-different in some cases. The semantic of this command may be extended in
-the future. Currently it only skips the actual decryption pass and
-therefore enables a fast listing of the encryption keys.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-literal</term>
-<listitem><para>
-This is not for normal use. Use the source to see for what it might be useful.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--set-filesize</term>
-<listitem><para>
-This is not for normal use. Use the source to see for what it might be useful.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--emulate-md-encode-bug</term>
-<listitem><para>
-GnuPG versions prior to 1.0.2 had a bug in the way a signature was encoded.
-This options enables a workaround by checking faulty signatures again with
-the encoding used in old versions. This may only happen for ElGamal signatures
-which are not widely used.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--show-session-key</term>
-<listitem><para>
-Display the session key used for one message. See --override-session-key
-for the counterpart of this option.
-</para>
-<para>
-We think that Key-Escrow is a Bad Thing; however the user should
-have the freedom to decide whether to go to prison or to reveal the content of
-one specific message without compromising all messages ever encrypted for one
-secret key. DON'T USE IT UNLESS YOU ARE REALLY FORCED TO DO SO.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--override-session-key &ParmString; </term>
-<listitem><para>
-Don't use the public key but the session key &ParmString;. The format of this
-string is the same as the one printed by --show-session-key. This option
-is normally not used but comes handy in case someone forces you to reveal the
-content of an encrypted message; using this option you can do this without
-handing out the secret key.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--ask-sig-expire</term>
-<listitem><para>
-When making a data signature, prompt for an expiration time. If this
-option is not specified, the expiration time is "never".
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--no-ask-sig-expire</term>
-<listitem><para>
-Resets the --ask-sig-expire option.
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--ask-cert-expire</term>
-<listitem><para>
-When making a key signature, prompt for an expiration time. If this
-option is not specified, the expiration time is "never".
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--no-ask-cert-expire</term>
-<listitem><para>
-Resets the --ask-cert-expire option.
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--expert</term>
-<listitem><para>
-Allow the user to do certain nonsensical or "silly" things like
-signing an expired or revoked key, or certain potentially incompatible
-things like generating deprecated key types. This also disables
-certain warning messages about potentially incompatible actions. As
-the name implies, this option is for experts only. If you don't fully
-understand the implications of what it allows you to do, leave this
-off.
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--no-expert</term>
-<listitem><para>
-Resets the --expert option.
-</para></listitem></varlistentry
-
-<varlistentry>
-<term>--merge-only</term>
-<listitem><para>
-Don't insert new keys into the keyrings while doing an import.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--allow-secret-key-import</term>
-<listitem><para>
-This is an obsolete option and is not used anywhere.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--try-all-secrets</term>
-<listitem><para>
-Don't look at the key ID as stored in the message but try all secret keys in
-turn to find the right decryption key. This option forces the behaviour as
-used by anonymous recipients (created by using --throw-keyid) and might come
-handy in case where an encrypted message contains a bogus key ID.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--enable-special-filenames</term>
-<listitem><para>
-This options enables a mode in which filenames of the form
-<filename>-&#38;n</>, where n is a non-negative decimal number,
-refer to the file descriptor n and not to a file with that name.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--no-expensive-trust-checks</term>
-<listitem><para>
-Experimental use only.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--group &ParmNameValues;</term>
-<listitem><para>
-Sets up a named group, which is similar to aliases in email programs.
-Any time the group name is a receipient (-r or --recipient), it will
-be expanded to the values specified.
-
-The values are &ParmKeyIDs; or fingerprints, but any key description
-is accepted. Note that a value with spaces in it will be treated as
-two different values. Note also there is only one level of expansion
-- you cannot make an group that points to another group.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--preserve-permissions</term>
-<listitem><para>
-Don't change the permissions of a secret keyring back to user
-read/write only. Use this option only if you really know what you are doing.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--personal-cipher-preferences &ParmString;</term>
-<listitem><para>
-Set the list of personal cipher preferences to &ParmString;, this list
-should be a string similar to the one printed by the command "pref" in
-the edit menu. This allows the user to factor in their own preferred
-algorithms when algorithms are chosen via recipient key preferences.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--personal-digest-preferences &ParmString;</term>
-<listitem><para>
-Set the list of personal digest preferences to &ParmString;, this list
-should be a string similar to the one printed by the command "pref" in
-the edit menu. This allows the user to factor in their own preferred
-algorithms when algorithms are chosen via recipient key preferences.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--personal-compress-preferences &ParmString;</term>
-<listitem><para>
-Set the list of personal compression preferences to &ParmString;, this
-list should be a string similar to the one printed by the command
-"pref" in the edit menu. This allows the user to factor in their own
-preferred algorithms when algorithms are chosen via recipient key
-preferences.
-</para></listitem></varlistentry>
-
-<varlistentry>
-<term>--default-preference-list &ParmString;</term>
-<listitem><para>
-Set the list of default preferences to &ParmString;, this list should
-be a string similar to the one printed by the command "pref" in the
-edit menu. This affects both key generation and "updpref" in the edit
-menu.
-</para></listitem></varlistentry>
-
-
-</variablelist>
-</refsect1>
-
-
-<refsect1>
- <title>How to specify a user ID</title>
- <para>
-There are different ways on how to specify a user ID to GnuPG;
-here are some examples:
- </para>
-
- <variablelist>
-<varlistentry>
-<term></term>
-<listitem><para></para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>234567C4</term>
-<term>0F34E556E</term>
-<term>01347A56A</term>
-<term>0xAB123456</term>
-<listitem><para>
-Here the key ID is given in the usual short form.
-</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>234AABBCC34567C4</term>
-<term>0F323456784E56EAB</term>
-<term>01AB3FED1347A5612</term>
-<term>0x234AABBCC34567C4</term>
-<listitem><para>
-Here the key ID is given in the long form as used by OpenPGP
-(you can get the long key ID using the option --with-colons).
-</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>1234343434343434C434343434343434</term>
-<term>123434343434343C3434343434343734349A3434</term>
-<term>0E12343434343434343434EAB3484343434343434</term>
-<term>0xE12343434343434343434EAB3484343434343434</term>
-<listitem><para>
-The best way to specify a key ID is by using the fingerprint of
-the key. This avoids any ambiguities in case that there are duplicated
-key IDs (which are really rare for the long key IDs).
-</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>=Heinrich Heine &#60;heinrichh@uni-duesseldorf.de&#62;</term>
-<listitem><para>
-Using an exact to match string. The equal sign indicates this.
-</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>&#60;heinrichh@uni-duesseldorf.de&#62;</term>
-<listitem><para>
-Using the email address part which must match exactly. The left angle bracket
-indicates this email address mode.
-</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>+Heinrich Heine duesseldorf</term>
-<listitem><para>
-All words must match exactly (not case sensitive) but can appear in
-any order in the user ID. Words are any sequences of letters,
-digits, the underscore and all characters with bit 7 set.
-</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>Heine</term>
-<term>*Heine</term>
-<listitem><para>
-By case insensitive substring matching. This is the default mode but
-applications may want to explicitly indicate this by putting the asterisk
-in front.
-</para></listitem>
-</varlistentry>
-
- </variablelist>
-
- <para>
-Note that you can append an exclamation mark to key IDs or
-fingerprints. This flag tells GnuPG to use exactly the given primary
-or secondary key and not to try to figure out which secondary or
-primary key to use.
- </para>
-
-</refsect1>
-
-
-<refsect1>
- <title>RETURN VALUE</title>
- <para>
-The program returns 0 if everything was fine, 1 if at least
-a signature was bad, and other error codes for fatal errors.
- </para>
-</refsect1>
-
-<refsect1>
- <title>EXAMPLES</title>
- <variablelist>
-
-<varlistentry>
-<term>gpg -se -r <parameter/Bob/ &ParmFile;</term>
-<listitem><para>sign and encrypt for user Bob</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>gpg --clearsign &ParmFile;</term>
-<listitem><para>make a clear text signature</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>gpg -sb &ParmFile;</term>
-<listitem><para>make a detached signature</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>gpg --list-keys <parameter/user_ID/</term>
-<listitem><para>show keys</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>gpg --fingerprint <parameter/user_ID/</term>
-<listitem><para>show fingerprint</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>gpg --verify <parameter/pgpfile/</term>
-<term>gpg --verify <parameter/sigfile/ &OptParmFiles;</term>
-<listitem><para>
-Verify the signature of the file but do not output the data. The second form
-is used for detached signatures, where <parameter/sigfile/ is the detached
-signature (either ASCII armored of binary) and &OptParmFiles are the signed
-data; if this is not given the name of the file holding the signed data is
-constructed by cutting off the extension (".asc" or ".sig") of
-<parameter/sigfile/ or by asking the user for the filename.
-</para></listitem></varlistentry>
-
- </variablelist>
-</refsect1>
-
-
-<refsect1>
- <title>ENVIRONMENT</title>
-
- <variablelist>
-<varlistentry>
-<term>HOME</term>
-<listitem><para>Used to locate the default home directory.</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>GNUPGHOME</term>
-<listitem><para>If set directory used instead of "~/.gnupg".</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>GPG_AGENT_INFO</term>
-<listitem><para>Used to locate the gpg-agent; only honored when
---use-agent is set. The value consists of 3 colon delimited fields:
-The first is the path to the Unix Domain Socket, the second the PID of
-the gpg-agent and the protocol version which should be set to 1. When
-starting the gpg-agent as described in its documentation, this
-variable is set to the correct value. The option --gpg-agent-info can
-be used to override it.</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>http_proxy</term>
-<listitem><para>Only honored when the keyserver-option
-honor-http-proxy is set.</para></listitem>
-</varlistentry>
- </variablelist>
-
-</refsect1>
-
-<refsect1>
- <title>FILES</title>
- <variablelist>
-
-<varlistentry>
-<term>~/.gnupg/secring.gpg</term>
-<listitem><para>The secret keyring</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/secring.gpg.lock</term>
-<listitem><para>and the lock file</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/pubring.gpg</term>
-<listitem><para>The public keyring</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/pubring.gpg.lock</term>
-<listitem><para>and the lock file</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/trustdb.gpg</term>
-<listitem><para>The trust database</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/trustdb.gpg.lock</term>
-<listitem><para>and the lock file</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/random_seed</term>
-<listitem><para>used to preserve the internal random pool</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/gpg.conf</term>
-<listitem><para>Default configuration file</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>~/.gnupg/options</term>
-<listitem><para>Old style configuration file; only used when gpg.conf
-is not found</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>/usr[/local]/share/gnupg/options.skel</term>
-<listitem><para>Skeleton options file</para></listitem>
-</varlistentry>
-
-<varlistentry>
-<term>/usr[/local]/lib/gnupg/</term>
-<listitem><para>Default location for extensions</para></listitem>
-</varlistentry>
-
- </variablelist>
-</refsect1>
-
-<!-- SEE ALSO not yet needed-->
-
-<refsect1>
- <title>WARNINGS</title>
- <para>
-Use a *good* password for your user account and a *good* passphrase
-to protect your secret key. This passphrase is the weakest part of the
-whole system. Programs to do dictionary attacks on your secret keyring
-are very easy to write and so you should protect your "~/.gnupg/"
-directory very well.
-</para>
-<para>
-Keep in mind that, if this program is used over a network (telnet), it
-is *very* easy to spy out your passphrase!
-</para>
-<para>
-If you are going to verify detached signatures, make sure that the
-program knows about it; either be giving both filenames on the
-command line or using <literal>-</literal> to specify stdin.
-</para>
-</refsect1>
-
-
-<refsect1>
- <title>BUGS</title>
- <para>
-On many systems this program should be installed as setuid(root). This
-is necessary to lock memory pages. Locking memory pages prevents the
-operating system from writing memory pages to disk. If you get no
-warning message about insecure memory your operating system supports
-locking without being root. The program drops root privileges as soon
-as locked memory is allocated.
-</para>
-</refsect1>
-
-</refentry>
-
diff --git a/doc/gpg.texi b/doc/gpg.texi
deleted file mode 100644
index 88cf053f1..000000000
--- a/doc/gpg.texi
+++ /dev/null
@@ -1,1531 +0,0 @@
-\input texinfo
-@c This Texinfo document has been automatically generated by
-@c docbook2texi from a DocBook documentation. The tool used
-@c can be found at:
-@c <URL:http://shell.ipoline.com/~elmert/hacks/docbook2X/>
-@c Please send any bug reports, improvements, comments,
-@c patches, etc. to Steve Cheng <steve@ggi-project.org>.
-
-@setfilename gpg.info
-@dircategory GnuPG
-@direntry
-* gpg: (gpg). GnuPG encryption and signing tool.
-@end direntry
-
-@node top
-@top gpg
-@menu
-@end menu
-
-@majorheading Name
-gpg ---- encryption and signing tool
-
-@majorheading Synopsis
-
-@majorheading DESCRIPTION
-@code{gpg} is the main program for the GnuPG system.
-
-This man page only lists the commands and options available.
-For more verbose documentation get the GNU Privacy Handbook (GPH) or
-one of the other documents at http://www.gnupg.org/docs.html .
-
-Please remember that option parsing stops as soon as a non option is
-encountered, you can explicitly stop option parsing by using the
-special option "---".
-
-@majorheading COMMANDS
-@code{gpg} recognizes these commands:
-
-@table @asis
-@item -s, ---sign
-Make a signature. This command may be combined
-with ---encrypt.
-
-@item ---clearsign
-Make a clear text signature.
-
-@item -b, ---detach-sign
-Make a detached signature.
-
-@item -e, ---encrypt
-Encrypt data. This option may be combined with ---sign.
-
-@item -c, ---symmetric
-Encrypt with symmetric cipher only.
-This command asks for a passphrase.
-
-@item ---store
-Store only (make a simple RFC1991 packet).
-
-@item ---decrypt @code{file}
-Decrypt @code{file} (or stdin if no file is specified) and
-write it to stdout (or the file specified with
----output). If the decrypted file is signed, the
-signature is also verified. This command differs
-from the default operation, as it never writes to the
-filename which is included in the file and it
-rejects files which don't begin with an encrypted
-message.
-
-@item ---verify @code{sigfile} @code{signed-files}
-Assume that @code{sigfile} is a signature and verify it
-without generating any output. With no arguments,
-the signature packet is read from stdin. If
-only a sigfile is given, it may be a complete
-signature or a detached signature, in which case
-the signed stuff is expected in a file without the
-".sig" or ".asc" extension.
-With more than
-1 argument, the first should be a detached signature
-and the remaining files are the signed stuff. To read the signed
-stuff from stdin, use @samp{-} as the second filename.
-For security reasons a detached signature cannot read the signed
-material from stdin without denoting it in the above way.
-
-@item ---verify-files @code{files}
-This is a special version of the ---verify command which does not work with
-detached signatures. The command expects the files to be verified either
-on the command line or reads the filenames from stdin; each name must be on
-separate line. The command is intended for quick checking of many files.
-
-@item ---encrypt-files @code{files}
-This is a special version of the ---encrypt command. The command expects
-the files to be encrypted either on the command line or reads the filenames
-from stdin; each name must be on separate line. The command is intended
-for a quick encryption of multiple files.
-
-@item ---decrypt-files @code{files}
-The same as ---encrypt-files with the difference that files will be
-decrypted. The syntax or the filenames is the same.
-
-@item ---list-keys @code{names}
-@itemx ---list-public-keys @code{names}
-List all keys from the public keyrings, or just the
-ones given on the command line.
-
-@item ---list-secret-keys @code{names}
-List all keys from the secret keyrings, or just the
-ones given on the command line.
-
-@item ---list-sigs @code{names}
-Same as ---list-keys, but the signatures are listed too.
-
-@item ---check-sigs @code{names}
-Same as ---list-sigs, but the signatures are verified.
-
-@item ---fingerprint @code{names}
-List all keys with their fingerprints. This is the
-same output as ---list-keys but with the additional output
-of a line with the fingerprint. May also be combined
-with ---list-sigs or --check-sigs.
-If this command is given twice, the fingerprints of all
-secondary keys are listed too.
-
-@item ---list-packets
-List only the sequence of packets. This is mainly
-useful for debugging.
-
-@item ---gen-key
-Generate a new key pair. This command is normally only used
-interactively.
-
-There is an experimental feature which allows you to create keys
-in batch mode. See the file @file{doc/DETAILS}
-in the source distribution on how to use this.
-
-@item ---edit-key @code{name}
-Present a menu which enables you to do all key
-related tasks:
-
-@table @asis
-@item sign
-Make a signature on key of user @code{name}
-If the key is not yet signed by the default
-user (or the users given with -u), the
-program displays the information of the key
-again, together with its fingerprint and
-asks whether it should be signed. This
-question is repeated for all users specified
-with -u.
-
-@item lsign
-Same as ---sign but the signature is marked as
-non-exportable and will therefore never be used
-by others. This may be used to make keys valid
-only in the local environment.
-
-@item nrsign
-Same as ---sign but the signature is marked as non-revocable and can
-therefore never be revoked.
-
-@item nrlsign
-Combines the functionality of nrsign and lsign to make a signature
-that is both non-revocable and
-non-exportable.
-
-@item revsig
-Revoke a signature. GnuPG asks for every
-signature which has been done by one of
-the secret keys, whether a revocation
-certificate should be generated.
-
-@item trust
-Change the owner trust value. This updates the
-trust-db immediately and no save is required.
-
-@item disable
-@itemx enable
-Disable or enable an entire key. A disabled key can normally not be used
-for encryption.
-
-@item adduid
-Create an alternate user id.
-
-@item addphoto
-Create a photographic user id.
-
-@item deluid
-Delete a user id.
-
-@item addkey
-Add a subkey to this key.
-
-@item delkey
-Remove a subkey.
-
-@item addrevoker
-Add a designated revoker. This takes one optional argument:
-"sensitive". If a designated revoker is marked as sensitive, it will
-not be exported by default (see
-export-options).
-
-@item revkey
-Revoke a subkey.
-
-@item expire
-Change the key expiration time. If a key is
-selected, the time of this key will be changed.
-With no selection the key expiration of the
-primary key is changed.
-
-@item passwd
-Change the passphrase of the secret key.
-
-@item primary
-Flag the current user id as the primary one, removes the primary user
-id flag from all other user ids and sets the timestamp of all affected
-self-signatures one second ahead. Note that setting a photo user ID
-as primary makes it primary over other photo user IDs, and setting a
-regular user ID as primary makes it primary over other regular user
-IDs.
-
-@item uid @code{n}
-Toggle selection of user id with index @code{n}.
-Use 0 to deselect all.
-
-@item key @code{n}
-Toggle selection of subkey with index @code{n}.
-Use 0 to deselect all.
-
-@item check
-Check all selected user ids.
-
-@item showphoto
-Display the selected photographic user
-id.
-
-@item pref
-List preferences from the selected user ID. This shows the actual
-preferences, without including any implied preferences.
-
-@item showpref
-More verbose preferences listing for the selected user ID. This shows
-the preferences in effect by including the implied preferences of
-3DES (cipher), SHA-1 (digest), and Uncompressed (compression) if they
-are not already included in the preference list.
-
-@item setpref @code{string}
-Set the list of user ID preferences to @code{string}, this should be a
-string similar to the one printed by "pref". Using an empty string
-will set the default preference string, using "none" will set the
-preferences to nil. Use "gpg -v ---version" to get a list of available
-algorithms. This command just initializes an internal list and does
-not change anything unless another command (such as "updpref") which
-changes the self-signatures is used.
-
-@item updpref
-Change the preferences of all user IDs (or just of the selected ones
-to the current list of preferences. The timestamp of all affected
-self-signatures will be advanced by one second. Note that while you
-can change the preferences on an attribute user ID (aka "photo ID"),
-GnuPG does not select keys via attribute user IDs so these preferences
-will not be used by GnuPG.
-
-@item toggle
-Toggle between public and secret key listing.
-
-@item save
-Save all changes to the key rings and quit.
-
-@item quit
-Quit the program without updating the
-key rings.
-
-@end table
-
-The listing shows you the key with its secondary
-keys and all user ids. Selected keys or user ids
-are indicated by an asterisk. The trust value is
-displayed with the primary key: the first is the
-assigned owner trust and the second is the calculated
-trust value. Letters are used for the values:
-
-@table @asis
-@item -
-No ownertrust assigned / not yet calculated.
-
-@item e
-Trust
-calculation has failed; probably due to an expired key.
-
-@item q
-Not enough information for calculation.
-
-@item n
-Never trust this key.
-
-@item m
-Marginally trusted.
-
-@item f
-Fully trusted.
-
-@item u
-Ultimately trusted.
-
-@end table
-
-@item ---sign-key @code{name}
-Signs a public key with your secret key. This is a shortcut version of
-the subcommand "sign" from ---edit.
-
-@item ---lsign-key @code{name}
-Signs a public key with your secret key but marks it as
-non-exportable. This is a shortcut version of the subcommand "lsign"
-from ---edit.
-
-@item ---nrsign-key @code{name}
-Signs a public key with your secret key but marks it as non-revocable.
-This is a shortcut version of the subcommand "nrsign" from ---edit.
-
-@item ---delete-key @code{name}
-Remove key from the public keyring. In batch mode either ---yes is
-required or the key must be specified by fingerprint. This is a
-safeguard against accidental deletion of multiple keys.
-
-@item ---delete-secret-key @code{name}
-Remove key from the secret and public keyring. In batch mode the key
-must be specified by fingerprint.
-
-@item ---delete-secret-and-public-key @code{name}
-Same as ---delete-key, but if a secret key exists, it will be removed
-first. In batch mode the key must be specified by fingerprint.
-
-@item ---gen-revoke
-Generate a revocation certificate for the complete key. To revoke
-a subkey or a signature, use the ---edit command.
-
-@item ---desig-revoke
-Generate a designated revocation certificate for a key. This allows a
-user (with the permission of the keyholder) to revoke someone elses
-key.
-
-@item ---export @code{names}
-Either export all keys from all keyrings (default
-keyrings and those registered via option ---keyring),
-or if at least one name is given, those of the given
-name. The new keyring is written to stdout or to
-the file given with option "output". Use together
-with ---armor to mail those keys.
-
-@item ---send-keys @code{names}
-Same as ---export but sends the keys to a keyserver.
-Option ---keyserver must be used to give the name
-of this keyserver. Don't send your complete keyring
-to a keyserver - select only those keys which are new
-or changed by you.
-
-@item ---export-all @code{names}
-Same as ---export, but also exports keys which
-are not compatible with OpenPGP.
-
-@item ---export-secret-keys @code{names}
-@itemx ---export-secret-subkeys @code{names}
-Same as ---export, but exports the secret keys instead.
-This is normally not very useful and a security risk.
-The second form of the command has the special property to
-render the secret part of the primary key useless; this is
-a GNU extension to OpenPGP and other implementations can
-not be expected to successfully import such a key.
-See the option ---simple-sk-checksum if you want to import such an
-exported key with an older OpenPGP implementation.
-
-@item ---import @code{files}
-@itemx ---fast-import @code{files}
-Import/merge keys. This adds the given keys to the
-keyring. The fast version is currently just a synonym.
-
-There are a few other options which control how this command works.
-Most notable here is the ---merge-only option which does not insert new keys
-but does only the merging of new signatures, user-IDs and subkeys.
-
-@item ---recv-keys @code{key IDs}
-Import the keys with the given key IDs from a keyserver. Option
----keyserver must be used to give the name of this keyserver.
-
-@item ---search-keys @code{names}
-Search the keyserver for the given names. Multiple names given here
-will be joined together to create the search string for the keyserver.
-Option ---keyserver must be used to give the name of this keyserver.
-
-@item ---update-trustdb
-Do trust DB maintenance. This command goes over all keys and builds
-the Web-of-Trust. This is an interactive command because it may has to
-ask for the "ownertrust" values of keys. The user has to give an
-estimation in how far she trusts the owner of the displayed key to
-correctly certify (sign) other keys. It does only ask for that value
-if it has not yet been assigned to a key. Using the edit menu, that
-value can be changed at any time later.
-
-@item ---check-trustdb
-Do trust DB maintenance without user interaction. Form time to time
-the trust database must be updated so that expired keys and resulting
-changes in the Web-of-Trust can be tracked. GnuPG tries to figure
-when this is required and then does it implicitly; this command can be
-used to force such a check. The processing is identically to that of
----update-trustdb but it skips keys with a not yet defined "ownertrust".
-
-For use with cron jobs, this command can be used together with ---batch
-in which case the check is only done when it is due. To force a run
-even in batch mode add the option ---yes.
-
-@item ---export-ownertrust @code{file}
-Store the ownertrust values into
-@code{file} (or stdin if not given). This is useful for backup
-purposes as these values are the only ones which can't be re-created
-from a corrupted trust DB.
-
-@item ---import-ownertrust @code{files}
-Update the trustdb with the ownertrust values stored
-in @code{files} (or stdin if not given); existing
-values will be overwritten.
-
-@item ---print-md @code{algo} @code{files}
-@itemx ---print-mds @code{files}
-Print message digest of algorithm ALGO for all given files or stdin.
-With the second form (or a deprecated "*" as algo) digests for all
-available algorithms are printed.
-
-@item ---gen-random @code{0|1|2} @code{count}
-Emit COUNT random bytes of the given quality level. If count is not given
-or zero, an endless sequence of random bytes will be emitted.
-PLEASE, don't use this command unless you know what you are doing; it may
-remove precious entropy from the system!
-
-@item ---gen-prime @code{mode} @code{bits} @code{qbits}
-Use the source, Luke :-). The output format is still subject to change.
-
-@item ---version
-Print version information along with a list
-of supported algorithms.
-
-@item ---warranty
-Print warranty information.
-
-@item -h, ---help
-Print usage information. This is a really long list even though it doesn't list
-all options.
-
-@end table
-
-@majorheading OPTIONS
-Long options can be put in an options file (default
-"~/.gnupg/gpg.conf"). Short option names will not work - for example,
-"armor" is a valid option for the options file, while "a" is not. Do
-not write the 2 dashes, but simply the name of the option and any
-required arguments. Lines with a hash ('#') as the first
-non-white-space character are ignored. Commands may be put in this
-file too, but that does not make sense.
-
-@code{gpg} recognizes these options:
-
-@table @asis
-@item -a, ---armor
-Create ASCII armored output.
-
-@item -o, ---output @code{file}
-Write output to @code{file}.
-
-@item -u, ---local-user @code{name}
-Use @code{name} as the user ID to sign.
-This option is silently ignored for the list commands,
-so that it can be used in an options file.
-
-@item ---default-key @code{name}
-Use @code{name} as default user ID for signatures. If this
-is not used the default user ID is the first user ID
-found in the secret keyring.
-
-@item -r, ---recipient @code{name}
-@itemx
-Encrypt for user id @code{name}. If this option is not
-specified, GnuPG asks for the user-id unless ---default-recipient is given
-
-@item ---default-recipient @code{name}
-Use @code{name} as default recipient if option ---recipient is not used and
-don't ask if this is a valid one. @code{name} must be non-empty.
-
-@item ---default-recipient-self
-Use the default key as default recipient if option ---recipient is not used and
-don't ask if this is a valid one. The default key is the first one from the
-secret keyring or the one set with ---default-key.
-
-@item ---no-default-recipient
-Reset ---default-recipient and --default-recipient-self.
-
-@item ---encrypt-to @code{name}
-Same as ---recipient but this one is intended for use
-in the options file and may be used with
-your own user-id as an "encrypt-to-self". These keys
-are only used when there are other recipients given
-either by use of ---recipient or by the asked user id.
-No trust checking is performed for these user ids and
-even disabled keys can be used.
-
-@item ---no-encrypt-to
-Disable the use of all ---encrypt-to keys.
-
-@item -v, ---verbose
-Give more information during processing. If used
-twice, the input data is listed in detail.
-
-@item -q, ---quiet
-Try to be as quiet as possible.
-
-@item -z @code{n}, ---compress @code{n}
-Set compression level to @code{n}. A value of 0 for @code{n}
-disables compression. Default is to use the default
-compression level of zlib (normally 6).
-
-@item -t, ---textmode
-Use canonical text mode. If -t (but not
----textmode) is used together with armoring
-and signing, this enables clearsigned messages.
-This kludge is needed for PGP compatibility;
-normally you would use ---sign or --clearsign
-to selected the type of the signature.
-
-@item -n, ---dry-run
-Don't make any changes (this is not completely implemented).
-
-@item -i, ---interactive
-Prompt before overwriting any files.
-
-@item ---batch
-Use batch mode. Never ask, do not allow interactive
-commands.
-
-@item ---no-tty
-Make sure that the TTY (terminal) is never used for any output.
-This option is needed in some cases because GnuPG sometimes prints
-warnings to the TTY if ---batch is used.
-
-@item ---no-batch
-Disable batch mode. This may be of use if ---batch
-is enabled from an options file.
-
-@item ---yes
-Assume "yes" on most questions.
-
-@item ---no
-Assume "no" on most questions.
-
-@item ---default-cert-check-level @code{n}
-The default to use for the check level when signing a key.
-
-0 means you make no particular claim as to how carefully you verified
-the key.
-
-1 means you believe the key is owned by the person who claims to own
-it but you could not, or did not verify the key at all. This is
-useful for a "persona" verification, where you sign the key of a
-pseudonymous user.
-
-2 means you did casual verification of the key. For example, this
-could mean that you verified that the key fingerprint and checked the
-user ID on the key against a photo ID.
-
-3 means you did extensive verification of the key. For example, this
-could mean that you verified the key fingerprint with the owner of the
-key in person, and that you checked, by means of a hard to forge
-document with a photo ID (such as a passport) that the name of the key
-owner matches the name in the user ID on the key, and finally that you
-verified (by exchange of email) that the email address on the key
-belongs to the key owner.
-
-Note that the examples given above for levels 2 and 3 are just that:
-examples. In the end, it is up to you to decide just what "casual"
-and "extensive" mean to you.
-
-This option defaults to 0.
-
-@item ---trusted-key @code{long key ID}
-Assume that the specified key (which must be given
-as a full 8 byte key ID) is as trustworthy as one of
-your own secret keys. This option is useful if you
-don't want to keep your secret keys (or one of them)
-online but still want to be able to check the validity of a given
-recipient's or signator's key.
-
-@item ---always-trust
-Skip key validation and assume that used keys are always fully trusted.
-You won't use this unless you have installed some external validation
-scheme. This option also suppresses the "[uncertain]" tag printed
-with signature checks when there is no evidence that the user ID
-is bound to the key.
-
-@item ---keyserver @code{name}
-Use @code{name} as your keyserver. This is the server that ---recv-keys,
----send-keys, and --search-keys will communicate with to receive keys
-from, send keys to, and search for keys on. The format of the
-@code{name} is a URI: `scheme:[//]keyservername[:port]' The scheme is
-the type of keyserver: "hkp" for the Horowitz (or compatible)
-keyservers, "ldap" for the NAI LDAP keyserver, or "mailto" for the
-Horowitz email keyserver. Note that your particular installation of
-GnuPG may have other keyserver types available as well.
-
-Most keyservers synchronize with each other, so there is generally no
-need to send keys to more than one server. Using the command "host -l
-pgp.net | grep wwwkeys" gives you a list of HKP keyservers. When
-using one of the wwwkeys servers, due to load balancing using
-round-robin DNS you may notice that you get a different key server
-each time.
-
-@item ---keyserver-options @code{parameters}
-This is a space or comma delimited string that gives options for the
-keyserver. Options can be prepended with a `no-' to give the opposite
-meaning. Valid import-options or export-options may be used here as
-well to apply to importing (---recv-key) or exporting (--send-key) a
-key from a keyserver. While not all options are available for all
-keyserver types, some common options are:
-
-@table @asis
-@item include-revoked
-When searching for a key, include keys that are marked on the
-keyserver as revoked. Note that this option is always set when using
-the NAI HKP keyserver, as this keyserver does not differentiate
-between revoked and unrevoked keys. When using the LDAP keyserver,
-this applies to both searching (---search-keys) and receiving
-(---recv-keys).
-
-@item include-disabled
-When receiving or searching for a key, include keys that are marked on
-the keyserver as disabled. Note that this option is not used with HKP
-keyservers, as they do not support disabling keys.
-
-@item include-subkeys
-When receiving a key, include subkeys in the search. Note that this
-option is not used with HKP keyservers, as they do not support
-retrieving keys by subkey id.
-
-@item use-temp-files
-On most Unix-like platforms, GnuPG communicates with the keyserver
-helper program via pipes, which is the most efficient method. This
-option forces GnuPG to use temporary files to communicate. On some
-platforms (such as Win32 and RISC OS), this option is always enabled.
-
-@item keep-temp-files
-If using `use-temp-files', do not delete the temp files after using
-them. This option is useful to learn the keyserver communication
-protocol by reading the temporary files.
-
-@item verbose
-Tell the keyserver helper program to be more verbose. This option can
-be repeated multiple times to increase the verbosity level.
-
-@item honor-http-proxy
-For keyserver schemes that use HTTP (such as HKP), try to access the
-keyserver over the proxy set with the environment variable
-"http_proxy".
-
-@item auto-key-retrieve
-This option enables the automatic retrieving of keys from a keyserver
-when verifying signatures made by keys that are not on the local
-keyring.
-
-@end table
-
-@item ---import-options @code{parameters}
-This is a space or comma delimited string that gives options for
-importing keys. Options can be prepended with a `no-' to give the
-opposite meaning. The options are:
-
-@table @asis
-@item allow-local-sigs
-Allow importing key signatures marked as "local". This is not
-generally useful unless a shared keyring scheme is being used.
-Defaults to no.
-
-@item repair-hkp-subkey-bug
-During import, attempt to repair the HKP keyserver mangling multiple
-subkeys bug. Note that this cannot completely repair the damaged key
-as some crucial data is removed by the keyserver, but it does at least
-give you back one subkey. Defaults to no for regular ---import and to
-yes for keyserver ---recv-keys.
-
-@end table
-
-@item ---export-options @code{parameters}
-This is a space or comma delimited string that gives options for
-exporting keys. Options can be prepended with a `no-' to give the
-opposite meaning. The options are:
-
-@table @asis
-@item include-non-rfc
-Include non-RFC compliant keys in the export. Defaults to yes.
-
-@item include-local-sigs
-Allow exporting key signatures marked as "local". This is not
-generally useful unless a shared keyring scheme is being used.
-Defaults to no.
-
-@item include-attributes
-Include attribute user IDs (photo IDs) while exporting. This is
-useful to export keys if they are going to be used by an OpenPGP
-program that does not accept attribute user IDs. Defaults to yes.
-
-@item include-sensitive-revkeys
-Include designated revoker information that was marked as
-"sensitive". Defaults to no.
-
-@end table
-
-@item ---show-photos
-Causes ---list-keys, --list-sigs, --list-public-keys,
----list-secret-keys, and verifying a signature to also display the
-photo ID attached to the key, if any.
-See also ---photo-viewer.
-
-@item ---no-show-photos
-Resets the ---show-photos flag.
-
-@item ---photo-viewer @code{string}
-This is the command line that should be run to view a photo ID. "%i"
-will be expanded to a filename containing the photo. "%I" does the
-same, except the file will not be deleted once the viewer exits.
-Other flags are "%k" for the key ID, "%K" for the long key ID, "%f"
-for the key fingerprint, "%t" for the extension of the image type
-(e.g. "jpg"), "%T" for the MIME type of the image (e.g. "image/jpeg"),
-and "%%" for an actual percent sign. If neither %i or %I are present,
-then the photo will be supplied to the viewer on standard input.
-
-The default viewer is "xloadimage -fork -quiet -title 'KeyID 0x%k'
-stdin"
-
-@item ---exec-path @code{string}
-Sets a list of directories to search for photo viewers and keyserver
-helpers. If not provided, keyserver helpers use the compiled-in
-default directory, and photo viewers use the $PATH environment
-variable.
-
-@item ---show-keyring
-Causes ---list-keys, --list-public-keys, and --list-secret-keys to
-display the name of the keyring a given key resides on. This is only
-useful when you're listing a specific key or set of keys. It has no
-effect when listing all keys.
-
-@item ---keyring @code{file}
-Add @code{file} to the list of keyrings.
-If @code{file} begins with a tilde and a slash, these
-are replaced by the HOME directory. If the filename
-does not contain a slash, it is assumed to be in the
-home-directory ("~/.gnupg" if ---homedir is not used).
-The filename may be prefixed with a scheme:
-
-"gnupg-ring:" is the default one.
-
-It might make sense to use it together with ---no-default-keyring.
-
-@item ---secret-keyring @code{file}
-Same as ---keyring but for the secret keyrings.
-
-@item ---homedir @code{directory}
-Set the name of the home directory to @code{directory} If this
-option is not used it defaults to "~/.gnupg". It does
-not make sense to use this in a options file. This
-also overrides the environment variable "GNUPGHOME".
-
-@item ---charset @code{name}
-Set the name of the native character set. This is used
-to convert some strings to proper UTF-8 encoding. If this option is not used, the default character set is determined
-from the current locale. A verbosity level of 3 shows the used one.
-Valid values for @code{name} are:
-
-@table @asis
-@item iso-8859-1
-This is the Latin 1 set.
-
-@item iso-8859-2
-The Latin 2 set.
-
-@item iso-8859-15
-This is currently an alias for
-the Latin 1 set.
-
-@item koi8-r
-The usual Russian set (rfc1489).
-
-@item utf-8
-Bypass all translations and assume
-that the OS uses native UTF-8 encoding.
-
-@end table
-
-@item ---utf8-strings
-@itemx ---no-utf8-strings
-Assume that the arguments are already given as UTF8 strings. The default
-(---no-utf8-strings)
-is to assume that arguments are encoded in the character set as specified
-by ---charset. These options affect all following arguments. Both options may
-be used multiple times.
-
-@item ---options @code{file}
-Read options from @code{file} and do not try to read
-them from the default options file in the homedir
-(see ---homedir). This option is ignored if used
-in an options file.
-
-@item ---no-options
-Shortcut for "---options /dev/null". This option is
-detected before an attempt to open an option file.
-Using this option will also prevent the creation of a
-"~./gnupg" homedir.
-
-@item ---load-extension @code{name}
-Load an extension module. If @code{name} does not
-contain a slash it is searched in "/usr/local/lib/gnupg"
-Extension are in gernal not useful anymore; the use of this
-option is deprecated.
-
-@item ---debug @code{flags}
-Set debugging flags. All flags are or-ed and @code{flags} may
-be given in C syntax (e.g. 0x0042).
-
-@item ---debug-all
-Set all useful debugging flags.
-
-@item ---status-fd @code{n}
-Write special status strings to the file descriptor @code{n}.
-See the file DETAILS in the documentation for a listing of them.
-
-@item ---logger-fd @code{n}
-Write log output to file descriptor @code{n} and not to stderr.
-
-@item ---attribute-fd @code{n}
-Write attribute subpackets to the file descriptor @code{n}. This is
-most useful for use with ---status-fd, since the status messages are
-needed to separate out the various subpackets from the stream
-delivered to the file descriptor.
-
-@item ---sk-comments
-Include secret key comment packets when exporting secret keys. This
-is a GnuPG extension to the OpenPGP standard, and is off by default.
-Please note that this has nothing to do with the comments in clear
-text signatures or armor headers.
-
-@item ---no-sk-comments
-Resets the ---sk-comments option.
-
-@item ---no-comment
-See ---sk-comments. This option is deprecated and may be removed soon.
-
-@item ---comment @code{string}
-Use @code{string} as comment string in clear text signatures.
-The default is not do write a comment string.
-
-@item ---default-comment
-Force to write the standard comment string in clear
-text signatures. Use this to overwrite a ---comment
-from a config file. This option is now obsolete because there is no
-default comment string anymore.
-
-@item ---no-version
-Omit the version string in clear text signatures.
-
-@item ---emit-version
-Force to write the version string in clear text
-signatures. Use this to overwrite a previous
----no-version from a config file.
-
-@item -N, ---notation-data @code{name=value}
-Put the name value pair into the signature as notation data.
-@code{name} must consist only of alphanumeric characters, digits
-or the underscore; the first character must not be a digit.
-@code{value} may be any printable string; it will be encoded in UTF8,
-so you should check that your ---charset is set correctly.
-If you prefix @code{name} with an exclamation mark, the notation
-data will be flagged as critical (rfc2440:5.2.3.15).
-
-@item ---show-notation
-Show key signature notations in the ---list-sigs or --check-sigs
-listings.
-
-@item ---no-show-notation
-Do not show key signature notations in the ---list-sigs or --check-sigs
-listings.
-
-@item ---set-policy-url @code{string}
-Use @code{string} as Policy URL for signatures (rfc2440:5.2.3.19).
-If you prefix it with an exclamation mark, the policy URL
-packet will be flagged as critical.
-
-@item ---show-policy-url
-Show any policy URLs set in the ---list-sigs or --check-sigs listings.
-
-@item ---no-show-policy-url
-Do not show any policy URLs set in the ---list-sigs or --check-sigs
-listings.
-
-@item ---set-filename @code{string}
-Use @code{string} as the name of file which is stored in
-messages.
-
-@item ---for-your-eyes-only
-Set the `for your eyes only' flag in the message. This causes GnuPG
-to refuse to save the file unless the ---output option is given, and
-PGP to use the "secure viewer" with a Tempest-resistant font to
-display the message. This option overrides ---set-filename.
-
-@item ---no-for-your-eyes-only
-Resets the ---for-your-eyes-only flag.
-
-@item ---use-embedded-filename
-Try to create a file with a name as embedded in the data.
-This can be a dangerous option as it allows to overwrite files.
-
-@item ---completes-needed @code{n}
-Number of completely trusted users to introduce a new
-key signer (defaults to 1).
-
-@item ---marginals-needed @code{n}
-Number of marginally trusted users to introduce a new
-key signer (defaults to 3)
-
-@item ---max-cert-depth @code{n}
-Maximum depth of a certification chain (default is 5).
-
-@item ---cipher-algo @code{name}
-Use @code{name} as cipher algorithm. Running the program
-with the command ---version yields a list of supported
-algorithms. If this is not used the cipher algorithm is
-selected from the preferences stored with the key.
-
-@item ---digest-algo @code{name}
-Use @code{name} as the message digest algorithm. Running the program
-with the command ---version yields a list of supported algorithms.
-
-@item ---cert-digest-algo @code{name}
-Use @code{name} as the message digest algorithm used when signing a
-key. Running the program with the command ---version yields a list of
-supported algorithms. Be aware that if you choose an algorithm that
-GnuPG supports but other OpenPGP implementations do not, then some
-users will not be able to use the key signatures you make, or quite
-possibly your entire key.
-
-@item ---s2k-cipher-algo @code{name}
-Use @code{name} as the cipher algorithm used to protect secret keys.
-The default cipher is CAST5. This cipher is also used for
-conventional encryption if ---cipher-algo is not given.
-
-@item ---s2k-digest-algo @code{name}
-Use @code{name} as the digest algorithm used to mangle the
-passphrases. The default algorithm is RIPE-MD-160.
-This digest algorithm is also used for conventional
-encryption if ---digest-algo is not given.
-
-@item ---s2k-mode @code{n}
-Selects how passphrases are mangled. If @code{n} is 0
-a plain passphrase (which is not recommended) will be used,
-a 1 (default) adds a salt to the passphrase and
-a 3 iterates the whole process a couple of times.
-Unless ---rfc1991 is used, this mode is also used
-for conventional encryption.
-
-@item ---simple-sk-checksum
-Secret keys are integrity protected by using a SHA-1 checksum. This
-method will be part of an enhanced OpenPGP specification but GnuPG
-already uses it as a countermeasure against certain attacks. Old
-applications don't understand this new format, so this option may be
-used to switch back to the old behaviour. Using this this option
-bears a security risk. Note that using this option only takes effect
-when the secret key is encrypted - the simplest way to make this
-happen is to change the passphrase on the key (even changing it to the
-same value is acceptable).
-
-@item ---compress-algo @code{n}
-Use compression algorithm @code{n}. Default is 2 which is RFC1950
-compression. You may use 1 to use the old zlib version (RFC1951) which
-is used by PGP. 0 disables compression. 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; note, that this can't be
-done if you do not encrypt the data.
-
-@item ---disable-cipher-algo @code{name}
-Never allow the use of @code{name} as cipher algorithm.
-The given name will not be checked so that a later loaded algorithm
-will still get disabled.
-
-@item ---disable-pubkey-algo @code{name}
-Never allow the use of @code{name} as public key algorithm.
-The given name will not be checked so that a later loaded algorithm
-will still get disabled.
-
-@item ---no-sig-cache
-Do not cache the verification status of key signatures.
-Caching gives a much better performance in key listings. However, if
-you suspect that your public keyring is not save against write
-modifications, you can use this option to disable the caching. It
-probably does not make sense to disable it because all kind of damage
-can be done if someone else has write access to your public keyring.
-
-@item ---no-sig-create-check
-GnuPG normally verifies each signature right after creation to protect
-against bugs and hardware malfunctions which could leak out bits from
-the secret key. This extra verification needs some time (about 115%
-for DSA keys), and so this option can be used to disable it.
-However, due to the fact that the signature creation needs manual
-interaction, this performance penalty does not matter in most settings.
-
-@item ---auto-check-trustdb
-If GnuPG feels that its information about the Web-of-Trust has to be
-updated, it automatically runs the ---check-trustdb command
-internally. This may be a time consuming process.
-
-@item ---no-auto-check-trustdb
-Resets the ---auto-check-trustdb option.
-
-@item ---throw-keyid
-Do not put the keyid into encrypted packets. This option
-hides the receiver of the message and is a countermeasure
-against traffic analysis. It may slow down the decryption
-process because all available secret keys are tried.
-
-@item ---not-dash-escaped
-This option changes the behavior of cleartext signatures
-so that they can be used for patch files. You should not
-send such an armored file via email because all spaces
-and line endings are hashed too. You can not use this
-option for data which has 5 dashes at the beginning of a
-line, patch files don't have this. A special armor header
-line tells GnuPG about this cleartext signature option.
-
-@item ---escape-from-lines
-Because some mailers change lines starting with "From "
-to "<From " it is good to handle such lines in a special
-way when creating cleartext signatures. All other PGP
-versions do it this way too. This option is not enabled
-by default because it would violate rfc2440.
-
-@item ---passphrase-fd @code{n}
-Read the passphrase from file descriptor @code{n}. If you use
-0 for @code{n}, the passphrase will be read from stdin. This
-can only be used if only one passphrase is supplied.
-Don't use this option if you can avoid it.
-
-@item ---command-fd @code{n}
-This is a replacement for the deprecated shared-memory IPC mode.
-If this option is enabled, user input on questions is not expected
-from the TTY but from the given file descriptor. It should be used
-together with ---status-fd. See the file doc/DETAILS in the source
-distribution for details on how to use it.
-
-@item ---use-agent
-Try to use the GnuPG-Agent. Please note that this agent is still under
-development. With this option, GnuPG first tries to connect to the
-agent before it asks for a passphrase.
-
-@item ---gpg-agent-info
-Override the value of the environment variable
-@samp{GPG_AGENT_INFO}. This is only used when ---use-agent has been given
-
-@item ---rfc1991
-Try to be more RFC1991 (PGP 2.x) compliant.
-
-@item ---pgp2
-Set up all options to be as PGP 2.x compliant as possible, and warn if
-an action is taken (e.g. encrypting to a non-RSA key) that will create
-a message that PGP 2.x will not be able to handle. Note that `PGP
-2.x' here means `MIT PGP 2.6.2'. There are other versions of PGP 2.x
-available, but the MIT release is a good common baseline.
-
-This option implies `---rfc1991 --no-openpgp --disable-mdc
----no-force-v4-certs --no-comment --escape-from-lines --force-v3-sigs
----no-ask-sig-expire --no-ask-cert-expire --cipher-algo IDEA
----digest-algo MD5 --compress-algo 1'
-
-@item ---no-pgp2
-Resets the ---pgp2 option.
-
-@item ---pgp6
-Set up all options to be as PGP 6 compliant as possible. This
-restricts you to the ciphers IDEA (if the IDEA plugin is installed),
-3DES, and CAST5, the hashes MD5, SHA1 and RIPEMD160, and the
-compression algorithms none and ZIP. This also disables making
-signatures with signing subkeys as PGP 6 does not understand
-signatures made by signing subkeys.
-
-This option implies `---disable-mdc --no-comment --escape-from-lines
----force-v3-sigs --no-ask-sig-expire --compress-algo 1'
-
-@item ---no-pgp6
-Resets the ---pgp6 option.
-
-@item ---pgp7
-Set up all options to be as PGP 7 compliant as possible. This is
-identical to ---pgp6 except that MDCs are not disabled, and the list of
-allowable ciphers is expanded to add AES128, AES192, AES256, and
-TWOFISH.
-
-@item ---no-pgp7
-Resets the ---pgp7 option.
-
-@item ---openpgp
-Reset all packet, cipher and digest options to OpenPGP behavior. Use
-this option to reset all previous options like ---rfc1991,
----force-v3-sigs, --s2k-*, --cipher-algo, --digest-algo and
----compress-algo to OpenPGP compliant values. All PGP workarounds are
-also disabled.
-
-@item ---force-v3-sigs
-OpenPGP states that an implementation should generate v4 signatures
-but PGP versions 5 and higher only recognize v4 signatures on key
-material. This option forces v3 signatures for signatures on data.
-Note that this option overrides ---ask-sig-expire, as v3 signatures
-cannot have expiration dates.
-
-@item ---no-force-v3-sigs
-Reset the ---force-v3-sigs option.
-
-@item ---force-v4-certs
-Always use v4 key signatures even on v3 keys. This option also
-changes the default hash algorithm for v3 RSA keys from MD5 to SHA-1.
-
-@item ---no-force-v4-certs
-Reset the ---force-v4-certs option.
-
-@item ---force-mdc
-Force the use of encryption with appended manipulation code. This is
-always used with the newer ciphers (those with a blocksize greater
-than 64 bit).
-
-@item ---allow-non-selfsigned-uid
-Allow the import and use of keys with user IDs which are not
-self-signed. This is not recommended, as a non self-signed user ID is
-trivial to forge.
-
-@item ---no-allow-non-selfsigned-uid
-Reset the ---allow-non-selfsigned-uid option.
-
-@item ---allow-freeform-uid
-Disable all checks on the form of the user ID while generating a new
-one. This option should only be used in very special environments as
-it does not ensure the de-facto standard format of user IDs.
-
-@item ---ignore-time-conflict
-GnuPG normally checks that the timestamps associated with keys and
-signatures have plausible values. However, sometimes a signature seems to
-be older than the key due to clock problems. This option makes these
-checks just a warning.
-
-@item ---ignore-valid-from
-GnuPG normally does not select and use subkeys created in the future. This
-option allows the use of such keys and thus exhibits the pre-1.0.7
-behaviour. You should not use this option unless you there is some
-clock problem.
-
-@item ---ignore-crc-error
-The ASCII armor used by OpenPGP is protected by a CRC checksum against
-transmission errors. Sometimes it happens that the CRC gets mangled
-somewhere on the transmission channel but the actual content (which is
-protected by the OpenPGP protocol anyway) is still okay. This option
-will let gpg ignore CRC errors.
-
-@item ---ignore-mdc-error
-This option changes a MDC integrity protection failure into a warning.
-This can be useful if a message is partially corrupt, but it is
-necessary to get as much data as possible out of the corrupt message.
-However, be aware that a MDC protection failure may also mean that the
-message was tampered with intentionally by an attacker.
-
-@item ---lock-once
-Lock the databases the first time a lock is requested
-and do not release the lock until the process
-terminates.
-
-@item ---lock-multiple
-Release the locks every time a lock is no longer
-needed. Use this to override a previous ---lock-once
-from a config file.
-
-@item ---lock-never
-Disable locking entirely. This option should be used only in very
-special environments, where it can be assured that only one process
-is accessing those files. A bootable floppy with a stand-alone
-encryption system will probably use this. Improper usage of this
-option may lead to data and key corruption.
-
-@item ---no-random-seed-file
-GnuPG uses a file to store its internal random pool over invocations.
-This makes random generation faster; however sometimes write operations
-are not desired. This option can be used to achieve that with the cost of
-slower random generation.
-
-@item ---no-verbose
-Reset verbose level to 0.
-
-@item ---no-greeting
-Suppress the initial copyright message but do not
-enter batch mode.
-
-@item ---no-secmem-warning
-Suppress the warning about "using insecure memory".
-
-@item ---no-permission-warning
-Suppress the warning about unsafe file permissions.
-
-@item ---no-mdc-warning
-Suppress the warning about missing MDC integrity protection.
-
-@item ---no-armor
-Assume the input data is not in ASCII armored format.
-
-@item ---no-default-keyring
-Do not add the default keyrings to the list of
-keyrings.
-
-@item ---skip-verify
-Skip the signature verification step. This may be
-used to make the decryption faster if the signature
-verification is not needed.
-
-@item ---with-colons
-Print key listings delimited by colons. Note, that the output will be
-encoded in UTF-8 regardless of any ---charset setting.
-
-@item ---with-key-data
-Print key listings delimited by colons (like ---with-colons) and print the public key data.
-
-@item ---with-fingerprint
-Same as the command ---fingerprint but changes only the format of the output
-and may be used together with another command.
-
-@item ---fast-list-mode
-Changes the output of the list commands to work faster; this is achieved
-by leaving some parts empty. Some applications don't need the user ID and
-the trust information given in the listings. By using this options they
-can get a faster listing. The exact behaviour of this option may change
-in future versions.
-
-@item ---fixed-list-mode
-Do not merge user ID and primary key in ---with-colon listing mode and
-print all timestamps as seconds since 1970-01-01.
-
-@item ---list-only
-Changes the behaviour of some commands. This is like ---dry-run but
-different in some cases. The semantic of this command may be extended in
-the future. Currently it only skips the actual decryption pass and
-therefore enables a fast listing of the encryption keys.
-
-@item ---no-literal
-This is not for normal use. Use the source to see for what it might be useful.
-
-@item ---set-filesize
-This is not for normal use. Use the source to see for what it might be useful.
-
-@item ---emulate-md-encode-bug
-GnuPG versions prior to 1.0.2 had a bug in the way a signature was encoded.
-This options enables a workaround by checking faulty signatures again with
-the encoding used in old versions. This may only happen for ElGamal signatures
-which are not widely used.
-
-@item ---show-session-key
-Display the session key used for one message. See ---override-session-key
-for the counterpart of this option.
-
-We think that Key-Escrow is a Bad Thing; however the user should
-have the freedom to decide whether to go to prison or to reveal the content of
-one specific message without compromising all messages ever encrypted for one
-secret key. DON'T USE IT UNLESS YOU ARE REALLY FORCED TO DO SO.
-
-@item ---override-session-key @code{string}
-Don't use the public key but the session key @code{string}. The format of this
-string is the same as the one printed by ---show-session-key. This option
-is normally not used but comes handy in case someone forces you to reveal the
-content of an encrypted message; using this option you can do this without
-handing out the secret key.
-
-@item ---ask-sig-expire
-When making a data signature, prompt for an expiration time. If this
-option is not specified, the expiration time is "never".
-
-@item ---no-ask-sig-expire
-Resets the ---ask-sig-expire option.
-
-@item ---ask-cert-expire
-When making a key signature, prompt for an expiration time. If this
-option is not specified, the expiration time is "never".
-
-@item ---no-ask-cert-expire
-Resets the ---ask-cert-expire option.
-
-@item ---expert
-Allow the user to do certain nonsensical or "silly" things like
-signing an expired or revoked key, or certain potentially incompatible
-things like generating deprecated key types. This also disables
-certain warning messages about potentially incompatible actions. As
-the name implies, this option is for experts only. If you don't fully
-understand the implications of what it allows you to do, leave this
-off.
-
-@item ---no-expert
-Resets the ---expert option.
-
-@item ---merge-only
-Don't insert new keys into the keyrings while doing an import.
-
-@item ---allow-secret-key-import
-This is an obsolete option and is not used anywhere.
-
-@item ---try-all-secrets
-Don't look at the key ID as stored in the message but try all secret keys in
-turn to find the right decryption key. This option forces the behaviour as
-used by anonymous recipients (created by using ---throw-keyid) and might come
-handy in case where an encrypted message contains a bogus key ID.
-
-@item ---enable-special-filenames
-This options enables a mode in which filenames of the form
-@file{-&n}, where n is a non-negative decimal number,
-refer to the file descriptor n and not to a file with that name.
-
-@item ---no-expensive-trust-checks
-Experimental use only.
-
-@item ---group @code{name=value1 value2 value3 ...}
-Sets up a named group, which is similar to aliases in email programs.
-Any time the group name is a receipient (-r or ---recipient), it will
-be expanded to the values specified.
-The values are @code{key IDs} or fingerprints, but any key description
-is accepted. Note that a value with spaces in it will be treated as
-two different values. Note also there is only one level of expansion
-- you cannot make an group that points to another group.
-
-@item ---preserve-permissions
-Don't change the permissions of a secret keyring back to user
-read/write only. Use this option only if you really know what you are doing.
-
-@item ---personal-cipher-preferences @code{string}
-Set the list of personal cipher preferences to @code{string}, this list
-should be a string similar to the one printed by the command "pref" in
-the edit menu. This allows the user to factor in their own preferred
-algorithms when algorithms are chosen via recipient key preferences.
-
-@item ---personal-digest-preferences @code{string}
-Set the list of personal digest preferences to @code{string}, this list
-should be a string similar to the one printed by the command "pref" in
-the edit menu. This allows the user to factor in their own preferred
-algorithms when algorithms are chosen via recipient key preferences.
-
-@item ---personal-compress-preferences @code{string}
-Set the list of personal compression preferences to @code{string}, this
-list should be a string similar to the one printed by the command
-"pref" in the edit menu. This allows the user to factor in their own
-preferred algorithms when algorithms are chosen via recipient key
-preferences.
-
-@item ---default-preference-list @code{string}
-Set the list of default preferences to @code{string}, this list should
-be a string similar to the one printed by the command "pref" in the
-edit menu. This affects both key generation and "updpref" in the edit
-menu.
-
-@end table
-
-@majorheading How to specify a user ID
-There are different ways on how to specify a user ID to GnuPG;
-here are some examples:
-
-@table @asis
-@item
-@item 234567C4
-@itemx 0F34E556E
-@itemx 01347A56A
-@itemx 0xAB123456
-Here the key ID is given in the usual short form.
-
-@item 234AABBCC34567C4
-@itemx 0F323456784E56EAB
-@itemx 01AB3FED1347A5612
-@itemx 0x234AABBCC34567C4
-Here the key ID is given in the long form as used by OpenPGP
-(you can get the long key ID using the option ---with-colons).
-
-@item 1234343434343434C434343434343434
-@itemx 123434343434343C3434343434343734349A3434
-@itemx 0E12343434343434343434EAB3484343434343434
-@itemx 0xE12343434343434343434EAB3484343434343434
-The best way to specify a key ID is by using the fingerprint of
-the key. This avoids any ambiguities in case that there are duplicated
-key IDs (which are really rare for the long key IDs).
-
-@item =Heinrich Heine <heinrichh@@uni-duesseldorf.de>
-Using an exact to match string. The equal sign indicates this.
-
-@item <heinrichh@@uni-duesseldorf.de>
-Using the email address part which must match exactly. The left angle bracket
-indicates this email address mode.
-
-@item +Heinrich Heine duesseldorf
-All words must match exactly (not case sensitive) but can appear in
-any order in the user ID. Words are any sequences of letters,
-digits, the underscore and all characters with bit 7 set.
-
-@item Heine
-@itemx *Heine
-By case insensitive substring matching. This is the default mode but
-applications may want to explicitly indicate this by putting the asterisk
-in front.
-
-@end table
-
-Note that you can append an exclamation mark to key IDs or
-fingerprints. This flag tells GnuPG to use exactly the given primary
-or secondary key and not to try to figure out which secondary or
-primary key to use.
-
-@majorheading RETURN VALUE
-The program returns 0 if everything was fine, 1 if at least
-a signature was bad, and other error codes for fatal errors.
-
-@majorheading EXAMPLES
-@table @asis
-@item gpg -se -r @code{Bob} @code{file}
-sign and encrypt for user Bob
-
-@item gpg ---clearsign @code{file}
-make a clear text signature
-
-@item gpg -sb @code{file}
-make a detached signature
-
-@item gpg ---list-keys @code{user_ID}
-show keys
-
-@item gpg ---fingerprint @code{user_ID}
-show fingerprint
-
-@item gpg ---verify @code{pgpfile}
-@itemx gpg ---verify @code{sigfile} @code{files}
-Verify the signature of the file but do not output the data. The second form
-is used for detached signatures, where @code{sigfile} is the detached
-signature (either ASCII armored of binary) and @code{files} are the signed
-data; if this is not given the name of the file holding the signed data is
-constructed by cutting off the extension (".asc" or ".sig") of
-@code{sigfile} or by asking the user for the filename.
-
-@end table
-
-@majorheading ENVIRONMENT
-@table @asis
-@item HOME
-Used to locate the default home directory.
-
-@item GNUPGHOME
-If set directory used instead of "~/.gnupg".
-
-@item GPG_AGENT_INFO
-Used to locate the gpg-agent; only honored when
----use-agent is set. The value consists of 3 colon delimited fields:
-The first is the path to the Unix Domain Socket, the second the PID of
-the gpg-agent and the protocol version which should be set to 1. When
-starting the gpg-agent as described in its documentation, this
-variable is set to the correct value. The option ---gpg-agent-info can
-be used to overide it.
-
-@item http_proxy
-Only honored when the keyserver-option
-honor-http-proxy is set.
-
-@end table
-
-@majorheading FILES
-@table @asis
-@item ~/.gnupg/secring.gpg
-The secret keyring
-
-@item ~/.gnupg/secring.gpg.lock
-and the lock file
-
-@item ~/.gnupg/pubring.gpg
-The public keyring
-
-@item ~/.gnupg/pubring.gpg.lock
-and the lock file
-
-@item ~/.gnupg/trustdb.gpg
-The trust database
-
-@item ~/.gnupg/trustdb.gpg.lock
-and the lock file
-
-@item ~/.gnupg/random_seed
-used to preserve the internal random pool
-
-@item ~/.gnupg/gpg.conf
-Default configuration file
-
-@item ~/.gnupg/options
-Old style configuration file; only used when gpg.conf
-is not found
-
-@item /usr[/local]/share/gnupg/options.skel
-Skeleton options file
-
-@item /usr[/local]/lib/gnupg/
-Default location for extensions
-
-@end table
-
-@majorheading WARNINGS
-Use a *good* password for your user account and a *good* passphrase
-to protect your secret key. This passphrase is the weakest part of the
-whole system. Programs to do dictionary attacks on your secret keyring
-are very easy to write and so you should protect your "~/.gnupg/"
-directory very well.
-
-Keep in mind that, if this program is used over a network (telnet), it
-is *very* easy to spy out your passphrase!
-
-If you are going to verify detached signatures, make sure that the
-program knows about it; either be giving both filenames on the
-commandline or using @samp{-} to specify stdin.
-
-@majorheading BUGS
-On many systems this program should be installed as setuid(root). This
-is necessary to lock memory pages. Locking memory pages prevents the
-operating system from writing memory pages to disk. If you get no
-warning message about insecure memory your operating system supports
-locking without being root. The program drops root privileges as soon
-as locked memory is allocated.
-
-@bye
diff --git a/doc/gpgv.sgml b/doc/gpgv.sgml
deleted file mode 100644
index 4119b41dc..000000000
--- a/doc/gpgv.sgml
+++ /dev/null
@@ -1,225 +0,0 @@
-<!-- gpgv.sgml - the man page for GnuPG
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-
- This file is part of GnuPG.
-
- GnuPG is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- GnuPG is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
--->
-<!-- This file should be processed by docbook-to-man to
- create a manual page. This program has currently the bug
- not to remove leading white space. So this source file does
- not look very pretty
-
- FIXME: generated a file with entity (e.g. pathnames) from the
- configure scripts and include it here
--->
-
-
-<!DOCTYPE refentry PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
-<!entity ParmDir "<parameter>directory</parameter>">
-<!entity ParmFile "<parameter>file</parameter>">
-<!entity OptParmFile "<optional>&ParmFile;</optional>">
-<!entity ParmFiles "<parameter>files</parameter>">
-<!entity OptParmFiles "<optional>&ParmFiles;</optional>">
-<!entity ParmNames "<parameter>names</parameter>">
-<!entity OptParmNames "<optional>&ParmNames;</optional>">
-<!entity ParmName "<parameter>name</parameter>">
-<!entity OptParmName "<optional>&ParmName;</optional>">
-<!entity ParmKeyIDs "<parameter>key IDs</parameter>">
-<!entity ParmN "<parameter>n</parameter>">
-<!entity ParmFlags "<parameter>flags</parameter>">
-<!entity ParmString "<parameter>string</parameter>">
-<!entity ParmValue "<parameter>value</parameter>">
-<!entity ParmNameValue "<parameter>name=value</parameter>">
-]>
-
-<refentry id="gpgv">
-<refmeta>
- <refentrytitle>gpgv</refentrytitle>
- <manvolnum>1</manvolnum>
- <refmiscinfo class="gnu">GNU Tools</refmiscinfo>
-</refmeta>
-<refnamediv>
- <refname/gpgv/
- <refpurpose>signature verification tool</>
-</refnamediv>
-<refsynopsisdiv>
- <synopsis>
-<command>gpgv</>
- <optional><parameter/options/</optional>
- <optional><parameter/signed files/</optional>
- </synopsis>
-</refsynopsisdiv>
-
-<refsect1>
- <title>DESCRIPTION</title>
- <para>
-<command/gpgv/ is the OpenPGP signature checking tool.
- </para>
- <para>
-This program is a stripped down version of <command/gpg/ which is only
-able
-to check signatures. It is somewhat smaller than the full blown
-<command/gpg/ and uses a different (and more simple way) to check that
-the public keys used to made the signature are trustworth. There is
-no options files and only very few options are implemented.
-</para>
-<para>
-<command/gpgv/ assumes that all keys in the keyring are trustworty.
-It uses by default a keyring named <filename/trustedkeys.gpg/ which is
-assumed to be in the home directory as defined by GnuPG or set by an
-option or an environment variable. An option may be used to specify
-another keyring or even multiple keyrings.
-</para>
-</refsect1>
-
-<refsect1>
-<title>OPTIONS</title>
-<para>
-<command/gpgv/ recognizes these options:
-</para>
-
-<variablelist>
-
-
-<varlistentry>
-<term>-v, --verbose</term>
-<listitem><para>
-Give more information during processing. If used
-twice, the input data is listed in detail.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>-q, --quiet</term>
-<listitem><para>
-Try to be as quiet as possible.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--keyring &ParmFile;</term>
-<listitem><para>
-Add &ParmFile to the list of keyrings.
-If &ParmFile begins with a tilde and a slash, these
-are replaced by the HOME directory. If the filename
-does not contain a slash, it is assumed to be in the
-home-directory ("~/.gnupg" if --homedir is not used).
-The filename may be prefixed with a scheme:</para>
-<para>"gnupg-ring:" is the default one.</para>
-<para>It might make sense to use it together with --no-default-keyring.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--homedir &ParmDir;</term>
-<listitem><para>
-Set the name of the home directory to &ParmDir; If this
-option is not used it defaults to "~/.gnupg". It does
-not make sense to use this in a options file. This
-also overrides the environment variable "GNUPGHOME".
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--status-fd &ParmN;</term>
-<listitem><para>
-Write special status strings to the file descriptor &ParmN;.
-See the file DETAILS in the documentation for a listing of them.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--logger-fd &ParmN;</term>
-<listitem><para>
-Write log output to file descriptor &ParmN; and not to stderr.
-</para></listitem></varlistentry>
-
-
-<varlistentry>
-<term>--ignore-time-conflict</term>
-<listitem><para>
-GnuPG normally checks that the timestamps associated with keys and
-signatures have plausible values. However, sometimes a signature seems to
-be older than the key due to clock problems. This option makes these
-checks just a warning.
-</para></listitem></varlistentry>
-
-
-</variablelist>
-</refsect1>
-
-
-<refsect1>
- <title>RETURN VALUE</title>
- <para>
-The program returns 0 if everything was fine, 1 if at least
-one signature was bad, and other error codes for fatal errors.
- </para>
-</refsect1>
-
-<refsect1>
- <title>EXAMPLES</title>
- <variablelist>
-
-<varlistentry>
-<term>gpgv <parameter/pgpfile/</term>
-<term>gpgv <parameter/sigfile/ &OptParmFiles;</term>
-<listitem><para>
-Verify the signature of the file. The second form
-is used for detached signatures, where <parameter/sigfile/ is the detached
-signature (either ASCII armored or binary) and &OptParmFiles are the signed
-data; if this is not given the name of the file holding the signed data is
-constructed by cutting off the extension (".asc", ".sig" or ".sign") from
-<parameter/sigfile/.
-</para></listitem></varlistentry>
-
- </variablelist>
-</refsect1>
-
-
-<refsect1>
- <title>ENVIRONMENT</title>
-
- <variablelist>
-<varlistentry>
-<term>HOME</term>
-<listitem><para>Used to locate the default home directory.</para></listitem>
-</varlistentry>
-<varlistentry>
-<term>GNUPGHOME</term>
-<listitem><para>If set directory used instead of "~/.gnupg".</para></listitem>
-</varlistentry>
-
- </variablelist>
-
-</refsect1>
-
-<refsect1>
- <title>FILES</title>
- <variablelist>
-
-<varlistentry>
-<term>~/.gnupg/trustedkeys.gpg</term>
-<listitem><para>The default keyring with the allowed keys</para></listitem>
-</varlistentry>
-
- </variablelist>
-</refsect1>
-
-<!-- SEE ALSO not yet needed-->
-
-</refentry>
-
diff --git a/doc/gpgv.texi b/doc/gpgv.texi
deleted file mode 100644
index 91e2fcadf..000000000
--- a/doc/gpgv.texi
+++ /dev/null
@@ -1,119 +0,0 @@
-\input texinfo
-@c This Texinfo document has been automatically generated by
-@c docbook2texi from a DocBook documentation. The tool used
-@c can be found at:
-@c <URL:http://shell.ipoline.com/~elmert/hacks/docbook2X/>
-@c Please send any bug reports, improvements, comments,
-@c patches, etc. to Steve Cheng <steve@ggi-project.org>.
-
-@setfilename gpgv.info
-@dircategory GnuPG
-@direntry
-* gpgv: (gpgv). GnuPG signature verification tool.
-@end direntry
-
-@node top
-@top gpgv
-@menu
-@end menu
-
-@majorheading Name
-gpgv ---- signature verification tool
-
-@majorheading Synopsis
-
-@majorheading DESCRIPTION
-@code{gpgv} is the OpenPGP signature checking tool.
-
-This program is a stripped down version of @code{gpg} which is only
-able
-to check signatures. It is somewhat smaller than the full blown
-@code{gpg} and uses a different (and more simple way) to check that
-the public keys used to made the signature are trustworth. There is
-no options files and only very few options are implemented.
-
-@code{gpgv} assumes that all keys in the keyring are trustworty.
-It uses by default a keyring named @file{trustedkeys.gpg} which is
-assumed to be in the home directory as defined by GnuPG or set by an
-option or an environment variable. An option may be used to specify
-another keyring or even multiple keyrings.
-
-@majorheading OPTIONS
-@code{gpgv} recognizes these options:
-
-@table @asis
-@item -v, ---verbose
-Give more information during processing. If used
-twice, the input data is listed in detail.
-
-@item -q, ---quiet
-Try to be as quiet as possible.
-
-@item ---keyring @code{file}
-Add @code{file} to the list of keyrings.
-If @code{file} begins with a tilde and a slash, these
-are replaced by the HOME directory. If the filename
-does not contain a slash, it is assumed to be in the
-home-directory ("~/.gnupg" if ---homedir is not used).
-The filename may be prefixed with a scheme:
-
-"gnupg-ring:" is the default one.
-
-It might make sense to use it together with ---no-default-keyring.
-
-@item ---homedir @code{directory}
-Set the name of the home directory to @code{directory} If this
-option is not used it defaults to "~/.gnupg". It does
-not make sense to use this in a options file. This
-also overrides the environment variable "GNUPGHOME".
-
-@item ---status-fd @code{n}
-Write special status strings to the file descriptor @code{n}.
-See the file DETAILS in the documentation for a listing of them.
-
-@item ---logger-fd @code{n}
-Write log output to file descriptor @code{n} and not to stderr.
-
-@item ---ignore-time-conflict
-GnuPG normally checks that the timestamps associated with keys and
-signatures have plausible values. However, sometimes a signature seems to
-be older than the key due to clock problems. This option makes these
-checks just a warning.
-
-@end table
-
-@majorheading RETURN VALUE
-The program returns 0 if everything was fine, 1 if at least
-one signature was bad, and other error codes for fatal errors.
-
-@majorheading EXAMPLES
-@table @asis
-@item gpgv @code{pgpfile}
-@itemx gpgv @code{sigfile} @code{files}
-Verify the signature of the file. The second form
-is used for detached signatures, where @code{sigfile} is the detached
-signature (either ASCII armored or binary) and @code{files} are the signed
-data; if this is not given the name of the file holding the signed data is
-constructed by cutting off the extension (".asc", ".sig" or ".sign") from
-@code{sigfile}.
-
-@end table
-
-@majorheading ENVIRONMENT
-@table @asis
-@item HOME
-Used to locate the default home directory.
-
-@item GNUPGHOME
-If set directory used instead of "~/.gnupg".
-
-@end table
-
-@majorheading FILES
-@table @asis
-@item ~/.gnupg/trustedkeys.gpg
-The default keyring with the allowed keys
-
-@end table
-
-@bye
diff --git a/doc/gph/ChangeLog b/doc/gph/ChangeLog
deleted file mode 100644
index 0d42fa163..000000000
--- a/doc/gph/ChangeLog
+++ /dev/null
@@ -1,9 +0,0 @@
-Tue Sep 7 16:18:03 1999 Werner Koch (wk@gnupg.org)
-
- * Makefile.am: Ugly workarounds to do a VPATH build.
-
-Fri Sep 3 13:24:45 1999 Werner Koch (wk@gnupg.org)
-
- * Makefile.am: New
-
-
diff --git a/doc/gph/Makefile.am b/doc/gph/Makefile.am
deleted file mode 100644
index d36b0013a..000000000
--- a/doc/gph/Makefile.am
+++ /dev/null
@@ -1,54 +0,0 @@
-# GPH - GNU Privacy Handbook
-
-PARTS = manual.sgml c1.sgml c2.sgml c3.sgml c4.sgml c5.sgml c6.sgml c7.sgml \
- signatures.fig signatures.jpg.asc
-
-EXTRA_DIST = $(PARTS) index.html
-#BUILT_SOURCES = index.html
-
-all-local: ./signatures.jpg
-
-./signatures.jpg: $(srcdir)/signatures.jpg.asc
- ../../g10/gpg --yes --dearmor \
- -o ./signatures.jpg $(srcdir)/signatures.jpg.asc
- -test -d manual && cp ./signatures.jpg ./manual/signatures.jpg
-
-
-index.html: $(PARTS)
- @set -e; \
- for i in $(PARTS); do \
- [ -f $$i ] || cat /dev/null $(srcdir)/$$i >./$$i ; \
- done
- db2html manual.sgml
- echo '<html><body>' >index.html
- echo '<ul>' >>index.html
- echo '<li><a href="manual/book1.html">GnuPG User Manual</a>' >>index.html
- echo '</ul>' >>index.html
- echo '</body></html>' >>index.html
- -rm -r manual.junk
- -rm manual/signatures.jpg
-## (cd manual; rm -r stylesheet-images; ls | grep -v distfiles >distfiles)
-
-
-dist-hook: index.html
-
-
-%.dvi: %.sgml
- db2dvi $<
-
-%.ps: %.dvi
- dvips -o $@ $<
-
-%/%.html: %.sgml
- db2html $<
-
-
-%.png: %.fig
- fig2dev -L png $< $@
-
-%.jpg: %.fig
- fig2dev -L jpeg $< $@
-
-%.eps: %.fig
- fig2dev -L ps $< $@
-
diff --git a/doc/gph/c1.sgml b/doc/gph/c1.sgml
deleted file mode 100644
index 2839f7c62..000000000
--- a/doc/gph/c1.sgml
+++ /dev/null
@@ -1,627 +0,0 @@
-<chapter id="intro" xreflabel="1">
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Getting Started
-</title>
-
-<para>
-&Gnupg; is a tool for secure communication.
-This chapter is a quick-start guide that covers the core functionality
-of &gnupg;.
-This includes keypair creation, exchanging and verifying keys, encrypting
-and decrypting documents, and making and verifying signatures.
-It does not explain in detail the concepts behind public-key cryptography,
-encryption, and digital signatures.
-This is covered in Chapter <xref linkend="concepts">.
-It also does not explain how to use &gnupg; wisely.
-This is covered in Chapters <xref linkend="management"> and
-<xref linkend="wise">.
-</para>
-
-<para>
-&Gnupg; uses public-key cryptography so that users may communicate securely.
-In a public-key system, each user has a public/private keypair.
-A user's private key is kept secret; it need never be revealed.
-The public key may be given to anyone with whom the user wants to
-communicate.
-&Gnupg; uses a somewhat more sophisticated scheme in which a user has
-a primary keypair and then zero or more additional subordinate keypairs.
-The primary and subordinate keypairs are bundled to facilitate key
-management and the bundle can often be considered simply as one keypair.
-</para>
-
-<sect1>
-<title>
-Generating a new keypair
-</title>
-
-<para>
-The command-line option <link linkend="gen-key"><option>--gen-key</option></link>
-is used to create a new primary keypair.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --gen-key</userinput>
-gpg (GnuPG) 0.9.4; Copyright (C) 1999 Free Software Foundation, Inc.
-This program comes with ABSOLUTELY NO WARRANTY.
-This is free software, and you are welcome to redistribute it
-under certain conditions. See the file COPYING for details.
-
-Please select what kind of key you want:
- (1) DSA and ElGamal (default)
- (2) DSA (sign only)
- (4) ElGamal (sign and encrypt)
-Your selection?
-</screen>
-
-<!--
-REWRITE
-From Thomas Zander (zander@microweb.nl):
-In GPG you can create 3 type of keypairs. A keypair is the combination
-of a publ ic key and a private key, see chapter X. A DSA keypair can
-only be used to sign a message. A ElGamal subordinate keypair can be
-used for encryption as well as s igning, but is not as compatible with
-former standards.
-
-Option 1 creates 2 keypairs; a DSA (signing) and a ElGamal (Encryption).
-Option 2 creates a DSA keypair (Signing)
-Option 4 creates a ElGemal keypair (Signing & Encryption).
-
-note: option 3 xxxx
-
-This doesn't quite work, but I agree the following paragraph is rough.
--->
-
-&Gnupg; is able to create several different types of keypairs, but a primary
-key must be capable of making signatures.
-There are therefore only three options.
-Option 1 actually creates two keypairs.
-A DSA keypair is the primary keypair usable only for making signatures.
-An ElGamal subordinate keypair is also created for encryption.
-Option 2 is similar but creates only a DSA keypair.
-Option 4<footnote><para>Option 3 is to generate an ElGamal keypair that is
-not usable for making signatures.</para></footnote> creates a single ElGamal
-keypair usable for both making signatures and performing encryption.
-In all cases it is possible to later add additional subkeys for encryption
-and signing.
-For most users the default option is fine.
-</para>
-
-<para>
-You must also choose a key size.
-The size of a DSA key must be between 512 and 1024 bits, and an ElGamal
-key may be of any size.
-&Gnupg;, however, requires that keys be no smaller than 768 bits.
-Therefore, if Option 1 was chosen and you choose a keysize larger than
-1024 bits, the ElGamal key will have the requested size, but the DSA
-key will be 1024 bits.
-
-<screen width="80">
-About to generate a new ELG-E keypair.
- minimum keysize is 768 bits
- default keysize is 1024 bits
- highest suggested keysize is 2048 bits
-What keysize do you want? (1024)
-</screen>
-
-The longer the key the more secure it is against brute-force attacks,
-but for almost all purposes the default keysize is adequate since
-it would be cheaper to circumvent the encryption than try to break it.
-Also, encryption and decryption will be slower as the
-key size is increased, and a larger keysize may affect signature length.
-Once selected, the keysize can never be changed.
-</para>
-
-<para>
-Finally, you must choose an expiration date.
-If Option 1 was chosen, the expiration date will be used for both the
-ElGamal and DSA keypairs.
-
-<screen width="80">
-Please specify how long the key should be valid.
- 0 = key does not expire
- &lt;n> = key expires in n days
- &lt;n>w = key expires in n weeks
- &lt;n>m = key expires in n months
- &lt;n>y = key expires in n years
-Key is valid for? (0)
-</screen>
-
-For most users a key that does not expire is adequate.
-The expiration time should be chosen with care, however,
-since although it is possible to change the expiration date after the key
-is created, it may be difficult to communicate a change
-to users who have your public key.
-</para>
-
-<para>
-You must provide a user ID in addition to the key parameters.
-The user ID is used to associate the key being created with a real
-person.
-
-<screen width="80">
-You need a User-ID to identify your key; the software constructs the user id
-from Real Name, Comment and Email Address in this form:
- "Heinrich Heine (Der Dichter) &lt;heinrichh@duesseldorf.de>"
-
-Real name:
-</screen>
-
-Only one user ID is created when a key is created, but it is possible
-to create additional user IDs if you want to use the key in two or
-more contexts, &eg;, as an employee at work and a political activist
-on the side.
-A user ID should be created carefully since it cannot be edited after
-it is created.
-</para>
-
-<para>
-&Gnupg; needs a passphrase to protect the primary and subordinate
-private keys that you keep in your possession.
-
-<screen width="80">
-You need a Passphrase to protect your private key.
-
-Enter passphrase:
-</screen>
-
-There is no limit on the length of a passphrase, and it should be
-carefully chosen.
-From the perspective of security, the passphrase to unlock the private
-key is one of the weakest points in &gnupg; (and other public-key
-encryption systems as well) since it is the only protection you
-have if another individual gets your private key.
-Ideally, the passphrase should not use words from a dictionary and
-should mix the case of alphabetic characters as well as use
-non-alphabetic characters.
-A good passphrase is crucial to the secure use of &gnupg;.
-</para>
-
-<sect2 id="revocation">
-<title>
-Generating a revocation certificate
-</title>
-
-<para>
-After your keypair is created you should immediately generate a revocation
-certificate for the primary public key using the option
-<link linkend="gen-revoke"><option>--gen-revoke</option></link>.
-If you forget your passphrase or if your private key is compromised
-or lost, this revocation certificate may be published to notify others
-that the public key should no longer be used.
-A revoked public key can still be used to verify signatures made
-by you in the past, but it cannot be used to encrypt future messages
-to you.
-It also does not affect your ability to decrypt messages sent to
-you in the past if you still do have access to the private key.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --output revoke.asc --gen-revoke mykey</userinput>
-[...]
-</screen>
-
-The argument <userinput>mykey</userinput> must be a <emphasis>key
-specifier</emphasis>,
-either the key ID of your primary keypair or any part of a user ID
-that identifies your keypair.
-The generated certificate will be left in the file
-<parameter>revoke.asc</parameter>.
-If the <link linkend="output"><option>--output</option></link> option is
-omitted, the result will be placed on standard output.
-Since the certificate is short, you may wish to print a hardcopy of
-the certificate to store somewhere safe such as your safe deposit box.
-The certificate should not be stored where others can access it since
-anybody can publish the revocation certificate and render the
-corresponding public key useless.
-</para>
-</sect2>
-</sect1>
-
-<sect1>
-<title>
-Exchanging keys
-</title>
-
-<para>
-To communicate with others you must exchange public keys.
-To list the keys on your public keyring use the command-line
-option <link linkend="list-keys"><option>--list-keys</option></link>.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --list-keys</userinput>
-/users/alice/.gnupg/pubring.gpg
----------------------------------------
-pub 1024D/BB7576AC 1999-06-04 Alice (Judge) &lt;alice@cyb.org>
-sub 1024g/78E9A8FA 1999-06-04
-</screen>
-
-<sect2>
-<title>
-Exporting a public key
-</title>
-
-<para>
-To send your public key to a correspondent you must first export it.
-The command-line option <link linkend="export"><option>--export</option></link>
-is used to do this.
-It takes an additional argument identifying the public key to export.
-As with the <option>--gen-revoke</option> option, either the key ID or any part of
-the user ID may be used to identify the key to export.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --output alice.gpg --export alice@cyb.org</userinput>
-</screen>
-
-<para>
-The key is exported in a binary format, but this can be inconvenient
-when the key is to be sent though email or published on a web page.
-&Gnupg; therefore supports a command-line option
-<link linkend="armor"><option>--armor</option></link><footnote>
-<para>Many
-command-line options that are frequently used can also be set in a
-<link linkend="optionsfile">configuration file</link>.
-</para>
-</footnote>
-that that
-causes output to be generated in an ASCII-armored format similar to
-uuencoded documents.
-In general, any output from &gnupg;, &eg;, keys, encrypted documents, and
-signatures, can be ASCII-armored by adding the <option>--armor</option> option.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --armor --export alice@cyb.org</userinput>
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v0.9.7 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-[...]
------END PGP PUBLIC KEY BLOCK-----
-</screen>
-</sect2>
-
-<sect2>
-<title>
-Importing a public key
-</title>
-
-<para>
-A public key may be added to your public keyring with the
-<link linkend="import"><option>--import</option></link> option.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --import blake.gpg</userinput>
-gpg: key 9E98BC16: public key imported
-gpg: Total number processed: 1
-gpg: imported: 1
-<prompt>alice%</prompt> <userinput>gpg --list-keys</userinput>
-/users/alice/.gnupg/pubring.gpg
----------------------------------------
-pub 1024D/BB7576AC 1999-06-04 Alice (Judge) &lt;alice@cyb.org>
-sub 1024g/78E9A8FA 1999-06-04
-
-pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) &lt;blake@cyb.org>
-sub 1024g/5C8CBD41 1999-06-04
-</screen>
-
-<para>
-Once a key is imported it should be validated.
-&Gnupg; uses a powerful and flexible trust model that does not require
-you to personally validate each key you import.
-Some keys may need to be personally validated, however.
-A key is validated by verifying the key's fingerprint and then signing
-the key to certify it as a valid key.
-A key's fingerprint can be quickly viewed with the
-<link linkend="fingerprint"><option>--fingerprint</option></link>
-command-line option, but in order to certify the key you must edit it.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --edit-key blake@cyb.org</userinput>
-
-pub 1024D/9E98BC16 created: 1999-06-04 expires: never trust: -/q
-sub 1024g/5C8CBD41 created: 1999-06-04 expires: never
-(1) Blake (Executioner) &lt;blake@cyb.org>
-
-<prompt>Command></prompt> <userinput>fpr</userinput>
-pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) &lt;blake@cyb.org>
- Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16
-</screen>
-
-Key verification is a weak point in public-key cryptography, so you
-must be sure that the fingerprint is correct.
-The fingerprint displayed should be checked with the key's owner.
-This may be done in person or over the phone or through any other means
-as long as you can guarantee that you are communicating with the key's
-true owner.
-Once verified you may sign the key to validate it.
-</para>
-
-<screen width="80">
-<prompt>Command></prompt> <userinput>sign</userinput>
-
-pub 1024D/9E98BC16 created: 1999-06-04 expires: never trust: -/q
- Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16
-
- Blake (Executioner) &lt;blake@cyb.org>
-
-Are you really sure that you want to sign this key
-with your key: "Alice (Judge) &lt;alice@cyb.org>"
-
-Really sign?
-</screen>
-
-<para>
-Once signed you can check the key to list the signatures on it and
-see the signature that you have added.
-Every user ID on the key will have one or more self-signatures as well
-as a signature for each user that has validated the key.
-</para>
-
-<screen width="80">
-<prompt>Command></prompt> <userinput>check</userinput>
-uid Blake (Executioner) &lt;blake@cyb.org>
-sig! 9E98BC16 1999-06-04 [self-signature]
-sig! BB7576AC 1999-06-04 Alice (Judge) &lt;alice@cyb.org>
-</screen>
-</sect2>
-</sect1>
-
-<sect1>
-<title>
-Encrypting and decrypting documents
-</title>
-
-<para>
-To encrypt a document the option
-<link linkend="encrypt"><option>--encrypt</option></link> is used.
-You must have the public keys of the intended recipients.
-The software expects the name of the document to encrypt as input or, if
-omitted, on standard input.
-The encrypted result is placed on standard output or as specified using
-the option <option>--output</option>.
-The document is compressed for additional security in addition to
-encrypting it.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --output doc.gpg --encrypt --recipient blake@cyb.org doc</userinput>
-</screen>
-
-The <link linkend="recipient"><option>--recipient</option></link> option
-is used once for each recipient and takes an extra argument specifying
-the public key to which the document should be encrypted.
-The encrypted document can only be decrypted by someone with a private
-key that complements one of the recipients' public keys.
-In particular, you cannot decrypt a document encrypted by you unless
-you included your own public key in the recipient list.
-</para>
-
-<para>
-To decrypt a message the option
-<link linkend="decrypt"><option>--decrypt</option></link> is used.
-You need the private key to which the message was encrypted.
-Similar to the encryption process, the document to decrypt is
-input, and the decrypted result is output.
-</para>
-
-<screen width="80">
-<prompt>blake%</prompt> <userinput>gpg --output doc --decrypt doc.gpg</userinput>
-
-You need a passphrase to unlock the secret key for
-user: "Blake (Executioner) &lt;blake@cyb.org>"
-1024-bit ELG-E key, ID 5C8CBD41, created 1999-06-04 (main key ID 9E98BC16)
-
-Enter passphrase:
-</screen>
-
-<para>
-Documents may also be encrypted without using public-key cryptography.
-Instead, only a symmetric cipher is used to encrypt the document.
-The key used to drive the symmetric cipher is derived from a passphrase
-supplied when the document is encrypted, and for good security, it
-should not be the same passphrase that you use to protect your private key.
-Symmetric encryption is useful for securing documents when the
-passphrase does not need to be communicated to others.
-A document can be encrypted with a symmetric cipher by using the
-<link linkend="symmetric"><option>--symmetric</option></link> option.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --output doc.gpg --symmetric doc</userinput>
-Enter passphrase:
-</screen>
-</sect1>
-
-<sect1>
-<title>
-Making and verifying signatures
-</title>
-
-<para>
-A digital signature certifies and timestamps a document.
-If the document is subsequently modified in any way, a verification
-of the signature will fail.
-A digital signature can serve the same purpose as a hand-written signature
-with the additional benefit of being tamper-resistant.
-The &gnupg; source distribution, for example, is signed so that users can
-verify that the source code has not been modified since it was packaged.
-</para>
-
-<para>
-Creating and verifying signatures uses the public/private keypair
-in an operation different from encryption and decryption.
-A signature is created using the private key of the signer.
-The signature is verified using the corresponding public key.
-A consequence is that it is difficult to deny that you made a digital
-signature since that would imply your private key had been compromised.
-</para>
-
-<para>
-The command-line option <link linkend="sign"><option>--sign</option></link> is
-used to make a digital signature.
-The document to sign is input, and the signed document is output.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --output doc.sig --sign doc</userinput>
-
-You need a passphrase to unlock the private key for
-user: "Alice (Judge) &lt;alice@cyb.org>"
-1024-bit DSA key, ID BB7576AC, created 1999-06-04
-
-Enter passphrase:
-</screen>
-
-The document is compressed before signed, and the output is in binary
-format.
-</para>
-
-<para>
-Given a signed document, you can either check the signature or
-check the signature and recover the original document.
-To check the signature use the
-<link linkend="verify"><option>--verify</option></link> option.
-To verify the signature and extract the document use the
-<option>--decrypt</option>
-option.
-The signed document to verify and recover is input and the recovered
-document is output.
-</para>
-
-<screen width="80">
-<prompt>blake%</prompt> <userinput>gpg --output doc --decrypt doc.sig</userinput>
-gpg: Signature made Fri Jun 4 12:02:38 1999 CDT using DSA key ID BB7576AC
-gpg: Good signature from "Alice (Judge) &lt;alice@cyb.org>"
-</screen>
-
-<sect2>
-<title>
-Clearsigned documents
-</title>
-
-<para>
-A common use of digital signatures is to sign usenet postings or
-email messages.
-In such situations it is undesirable to compress the document while
-signing it.
-The option
-<link linkend="clearsign"><option>--clearsign</option></link>
-causes the document to be wrapped in an ASCII-armored signature but
-otherwise does not modify the document.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --clearsign doc</userinput>
-
-You need a passphrase to unlock the secret key for
-user: "Alice (Judge) &lt;alice@cyb.org>"
-1024-bit DSA key, ID BB7576AC, created 1999-06-04
-
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-[...]
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v0.9.7 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-iEYEARECAAYFAjdYCQoACgkQJ9S6ULt1dqz6IwCfQ7wP6i/i8HhbcOSKF4ELyQB1
-oCoAoOuqpRqEzr4kOkQqHRLE/b8/Rw2k
-=y6kj
------END PGP SIGNATURE-----
-</screen>
-</sect2>
-
-<sect2>
-<title>
-Detached signatures
-</title>
-
-<para>
-A signed document has limited usefulness.
-Other users must recover the original document from the signed
-version, and even with clearsigned documents, the signed document
-must be edited to recover the original.
-Therefore, there is a third method for signing a document that
-creates a detached signature.
-A detached signature is created using the
-<link linkend="detach-sig"><option>--detach-sig</option></link>
-option.
-</para>
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --output doc.sig --detach-sig doc</userinput>
-
-You need a passphrase to unlock the secret key for
-user: "Alice (Judge) &lt;alice@cyb.org>"
-1024-bit DSA key, ID BB7576AC, created 1999-06-04
-
-Enter passphrase:
-</screen>
-
-<para>
-Both the document and detached signature are needed to verify
-the signature.
-The <option>--verify</option> option can be to check the
-signature.
-</para>
-
-<screen width="80">
-<prompt>blake%</prompt> <userinput>gpg --verify doc.sig doc</userinput>
-gpg: Signature made Fri Jun 4 12:38:46 1999 CDT using DSA key ID BB7576AC
-gpg: Good signature from "Alice (Judge) &lt;alice@cyb.org>"
-</screen>
-</sect2>
-</sect1>
-</chapter>
-
-<!--
-In the "Getting Started" chapter, it would be interesting to provide
-a checklist of assumptions that the reader can consult to determine
-whether or not she fits the "most users" profile. Perhaps put this
-at the end of the chapter (perhaps w/ forward pointer?). You could
-include cross references for each item on the list. For example:
-
- 23. Your use of public key encryption has property X with attribute Y.
- (see Section 3.4.1 for a more detailed discussion of other
- attributes of property X)
-
-What prompted this was wondering, as I read through the generating keypair
-section, "under what circumstances would these defaults be inappropriate?"
-
-The notion of using the same key with different user IDs "as an employee at
-work and a political activist on the side" is interesting. Knowing one,
-could you be traced to the other? (Are they separate numeric ids, and is
-that enough?) (seems someone could just match the public keys)
-
-It's a very nice touch that you don't cover every single prompt that the
-system throws at you, but instead treat them functionally. For example,
-I can imagine other books going through the "Comment:" and "Email Address:"
-prompts.
--->
-
-<!--
-"Key verification is a weak point in public-key cryptography ..."
-Saying "weak point" makes it sound like a slam on public key stuff.
-Although we've talked about weaknesses of the trust model, I'm guessing
-the point here is that communication is only secure if you verify the
-identity of the key's owner.
-
-Key verification can be done through any means "as long as you can
-guarantee that you are communicating with the key's true owner".
-I suspect we'd also like to prevent leaking information that an
-interceptor could use to pose as us in a key verification step with
-another party. I suppose the notion of bootstrapping may not be widely
-appreciated as an analogy.
-
-I'm almost inclined to want to see a section in the Getting Started
-guide called "Why you should read the rest of this book". Failing
-that, or perhaps better yet, maybe it would work to have some margin
-notes that point to other sections of the book for more information
-("a discussion of trust models begins on p. 95").
--->
-
diff --git a/doc/gph/c2.sgml b/doc/gph/c2.sgml
deleted file mode 100644
index b045ed4ee..000000000
--- a/doc/gph/c2.sgml
+++ /dev/null
@@ -1,345 +0,0 @@
-<chapter id="concepts" xreflabel="2">
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Concepts
-</title>
-
-<para>
-&Gnupg; makes uses of several cryptographic concepts including
-<firstterm>symmetric ciphers</firstterm>,
-<firstterm>public-key ciphers</firstterm>, and
-<firstterm>one-way hashing</firstterm>.
-You can make basic use &gnupg; without fully understanding these concepts,
-but in order to use it wisely some understanding of them is necessary.
-</para>
-
-<para>
-This chapter introduces the basic cryptographic concepts used in GnuPG.
-Other books cover these topics in much more detail.
-A good book with which to pursue further study is
-<ulink url="http://www.counterpane.com/schneier.html">Bruce
-Schneier</ulink>'s
-<ulink url="http://www.counterpane.com/applied.html">"Applied
-Cryptography"</ulink>.
-</para>
-
-<sect1>
-<title>
-Symmetric ciphers
-</title>
-
-<para>
-A symmetric cipher is a cipher that uses the same key for both encryption
-and decryption.
-Two parties communicating using a symmetric cipher must agree on the
-key beforehand.
-Once they agree, the sender encrypts a message using the key, sends it
-to the receiver, and the receiver decrypts the message using the key.
-As an example, the German Enigma is a symmetric cipher, and daily keys
-were distributed as code books.
-Each day, a sending or receiving radio operator would consult his copy
-of the code book to find the day's key.
-Radio traffic for that day was then encrypted and decrypted using the
-day's key.
-Modern examples of symmetric ciphers include 3DES, Blowfish, and IDEA.
-</para>
-
-<para>
-A good cipher puts all the security in the key and none in the algorithm.
-In other words, it should be no help to an attacker if he knows which
-cipher is being used.
-Only if he obtains the key would knowledge of the algorithm be needed.
-The ciphers used in &gnupg; have this property.
-</para>
-
-<para>
-Since all the security is in the key, then it is important that it be
-very difficult to guess the key.
-In other words, the set of possible keys, &ie;, the <emphasis>key
-space</emphasis>, needs
-to be large.
-While at Los Alamos, Richard Feynman was famous for his ability to
-crack safes.
-To encourage the mystique he even carried around a set of tools
-including an old stethoscope.
-In reality, he used a variety of tricks to reduce the number of
-combinations he had to try to a small number and then simply guessed
-until he found the right combination.
-In other words, he reduced the size of the key space.
-</para>
-
-<para>
-Britain used machines to guess keys during World War 2.
-The German Enigma had a very large key space, but the British built
-speciailzed computing engines, the Bombes, to mechanically try
-keys until the day's key was found.
-This meant that sometimes they found the day's key within hours of
-the new key's use, but it also meant that on some days they never
-did find the right key.
-The Bombes were not general-purpose computers but were precursors
-to modern-day computers.
-</para>
-
-<para>
-Today, computers can guess keys very quickly, and this is why key
-size is important in modern cryptosystems.
-The cipher DES uses a 56-bit key, which means that there are
-<!-- inlineequation -->
-2<superscript>56</superscript> possible keys.
-<!-- inlineequation -->
-2<superscript>56</superscript> is 72,057,594,037,927,936 keys.
-This is a lot of keys, but a general-purpose computer can check the
-entire key space in a matter of days.
-A specialized computer can check it in hours.
-On the other hand, more recently designed ciphers such as 3DES,
-Blowfish, and IDEA
-<!-- inlineequation -->
-all use 128-bit keys, which means there are 2<superscript>128</superscript>
-possible keys.
-This is many, many more keys, and even if all the computers on the
-planet cooperated, it could still take more time than the age of
-the universe to find the key.
-</para>
-</sect1>
-
-<sect1>
-<title>
-Public-key ciphers
-</title>
-
-<para>
-The primary problem with symmetric ciphers is not their security but
-with key exchange.
-Once the sender and receiver have exchanged keys, that key can be
-used to securely communicate, but what secure communication channel
-was used to communicate the key itself?
-In particular, it would probably be much easier for an attacker to work
-to intercept the key than it is to try all the keys in the key space.
-Another problem is the number of keys needed.
-<!-- inlineequation -->
-If there are <emphasis>n</emphasis> people who need to communicate, then
-<!-- inlineequation -->
-<emphasis>n(n-1)/2</emphasis> keys
-are needed for each pair of people to communicate privately.
-This may be ok for a small number of people but quickly becomes unwieldly
-for large groups of people.
-</para>
-
-<para>
-Public-key ciphers were invented to avoid the key-exchange problem
-entirely.
-A public-key cipher uses a pair of keys for sending messages.
-The two keys belong to the person receiving the message.
-One key is a <emphasis>public key</emphasis> and may be given to anybody.
-The other key is a <emphasis>private key</emphasis> and is kept
-secret by the owner.
-A sender encrypts a message using the public key and once encrypted,
-only the private key may be used to decrypt it.
-</para>
-
-<para>
-This protocol solves the key-exchange problem inherent with symmetric
-ciphers.
-There is no need for the sender and receiver to agree
-upon a key.
-All that is required is that some time before secret communication the
-sender gets a copy of the receiver's public key.
-Furthermore, the one public key can be used by anybody wishing to
-communicate with the receiver.
-<!-- inlineequation -->
-So only <emphasis>n</emphasis> keypairs are needed for <emphasis>n</emphasis>
-people to communicate secretly
-with one another,
-</para>
-
-<para>
-Public-key ciphers are based on one-way trapdoor functions.
-A one-way function is a function that is easy to compute,
-but the inverse is hard to compute.
-For example, it is easy to multiply two prime numbers together to get
-a composite, but it is difficult to factor a composite into its prime
-components.a
-A one-way trapdoor function is similar, but it has a trapdoor.
-That is, if some piece of information is known, it becomes easy
-to compute the inverse.
-For example, if you have a number made of two prime factors, then knowing
-one of the factors makes it easy to compute the second.
-Given a public-key cipher based on prime factorization, the public
-key contains a composite number made from two large prime factors, and
-the encryption algorithm uses that composite to encrypt the
-message.
-The algorithm to decrypt the message requires knowing the prime factors,
-so decryption is easy if you have the private key containing one of the
-factors but extremely difficult if you do not have it.
-</para>
-
-<para>
-As with good symmetric ciphers, with a good public-key cipher all of the
-security rests with the key.
-Therefore, key size is a measure of the system's security, but
-one cannot compare the size of a symmetric cipher key and a public-key
-cipher key as a measure of their relative security.
-In a brute-force attack on a symmetric cipher with a key size of 80 bits,
-<!-- inlineequation -->
-the attacker must enumerate up to 2<superscript>81</superscript>-1 keys to
-find the right key.
-In a brute-force attack on a public-key cipher with a key size of 512 bits,
-the attacker must factor a composite number encoded in 512 bits (up to
-155 decimal digits).
-The workload for the attacker is fundamentally different depending on
-the cipher he is attacking.
-While 128 bits is sufficient for symmetric ciphers, given today's factoring
-technology public keys with 1024 bits are recommended for most purposes.
-</para>
-</sect1>
-
-<sect1>
-<title>
-Hybrid ciphers
-</title>
-
-<para>
-Public-key ciphers are no panacea.
-Many symmetric ciphers are stronger from a security standpoint,
-and public-key encryption and decryption are more expensive than the
-corresponding operations in symmetric systems.
-Public-key ciphers are nevertheless an effective tool for distributing
-symmetric cipher keys, and that is how they are used in hybrid cipher
-systems.
-</para>
-
-<para>
-A hybrid cipher uses both a symmetric cipher and a public-key cipher.
-It works by using a public-key cipher to share a key for the symmetric
-cipher.
-The actual message being sent is then encrypted using the key and sent
-to the recipient.
-Since symmetric key sharing is secure, the symmetric key used is different
-for each message sent.
-Hence it is sometimes called a session key.
-</para>
-
-<para>
-Both PGP and &gnupg; use hybrid ciphers.
-The session key, encrypted using the public-key cipher, and the message
-being sent, encrypted with the symmetric cipher, are automatically
-combined in one package.
-The recipient uses his private-key to decrypt the session key and the
-session key is then used to decrypt the message.
-</para>
-
-<para>
-A hybrid cipher is no stronger than the public-key cipher or symmetric
-cipher it uses, whichever is weaker.
-In PGP and &gnupg;, the public-key cipher is probably the weaker of
-the pair.
-Fortunately, however, if an attacker could decrypt a session key it
-would only be useful for reading the one message encrypted with that
-session key.
-The attacker would have to start over and decrypt another session
-key in order to read any other message.
-</para>
-</sect1>
-
-<sect1>
-<title>
-Digital signatures
-</title>
-
-<para>
-A hash function is a many-to-one function that maps its input to a
-value in a finite set.
-Typically this set is a range of natural numbers.
-<!-- inlineequation -->
-A simple ehash function is <emphasis>f</emphasis>(<emphasis>x</emphasis>) = 0
-for all integers <emphasis>x</emphasis>.
-A more interesting hash function is
-<emphasis>f</emphasis>(<emphasis>x</emphasis>) = <emphasis>x</emphasis>
-<emphasis>mod</emphasis> 37, which
-maps <emphasis>x</emphasis> to the remainder of dividing <emphasis>x</emphasis> by 37.
-</para>
-
-<para>
-A document's digital signature is the result of applying a hash
-function to the document.
-To be useful, however, the hash function needs to satisfy two
-important properties.
-First, it should be hard to find two documents that hash to the
-same value.
-Second, given a hash value it should be hard to recover the document
-that produced that value.
-</para>
-
-<para>
-Some public-key ciphers<footnote><para>
-The cipher must have the property that the actual public key or private
-key could be used by the encryption algorithm as the public key.
-RSA is an example of such an algorithm while ElGamal is not an example.
-</para>
-</footnote> could be used to sign documents.
-The signer encrypts the document with his <emphasis>private</emphasis> key.
-Anybody wishing to check the signature and see the document simply
-uses the signer's public key to decrypt the document.
-This algorithm does satisfy the two properties needed from a good hash
-function, but in practice, this algorithm is too slow to be useful.
-</para>
-
-<para>
-An alternative is to use hash functions designed to satisfy these
-two important properties.
-SHA and MD5 are examples of such algorithms.
-Using such an algorithm, a document is signed by hashing it, and
-the hash value is the signature.
-Another person can check the signature by also hashing their copy of the
-document and comparing the hash value they get with the hash value of
-the original document.
-If they match, it is almost certain that the documents are identical.
-</para>
-
-<para>
-Of course, the problem now is using a hash function for digital
-signatures without permitting an attacker to interfere with signature
-checking.
-If the document and signature are sent unencrypted, an attacker could
-modify the document and generate a corresponding signature without the
-recipient's knowledge.
-If only the document is encrypted, an attacker could tamper with the
-signature and cause a signature check to fail.
-A third option is to use a hybrid public-key encryption to encrypt both
-the signature and document.
-The signer uses his private key, and anybody can use his public key
-to check the signature and document.
-This sounds good but is actually nonsense.
-If this algorithm truly secured the document it would also
-secure it from tampering and there would be no need for the signature.
-The more serious problem, however, is that this does not protect either
-the signature or document from tampering.
-With this algorithm, only the session key for the symmetric cipher
-is encrypted using the signer's private key.
-Anybody can use the public key to recover the session key.
-Therefore, it is straightforward for an attacker to recover the session
-key and use it to encrypt substitute documents and signatures to send
-to others in the sender's name.
-</para>
-
-<para>
-An algorithm that does work is to use a public key algorithm to
-encrypt only the signature.
-In particular, the hash value is encrypted using the signer's private
-key, and anbody can check the signature using the public key.
-The signed document can be sent using any other encryption algorithm
-including none if it is a public document.
-If the document is modified the signature check will fail, but this
-is precisely what the signature check is supposed to catch.
-The Digital Signature Standard (DSA) is a public key signature
-algorithm that works as just described.
-DSA is the primary signing algorithm used in &Gnupg;.
-</para>
-
-</sect1>
-</chapter>
-
diff --git a/doc/gph/c3.sgml b/doc/gph/c3.sgml
deleted file mode 100644
index 541cf6c9d..000000000
--- a/doc/gph/c3.sgml
+++ /dev/null
@@ -1,885 +0,0 @@
-<chapter id="management" xreflabel="3">
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Key Management
-</title>
-
-<para>
-Key tampering is a major security weakness with public-key cryptography.
-An eavesdropper may tamper with a user's keyrings or forge a
-user's public key and post it for others to download and use.
-For example, suppose Chloe wants to monitor the messages that Alice
-sends to Blake.
-She could mount what is called a <firstterm>man in the
-middle</firstterm> attack.
-In this attack, Chloe creates a new public/private keypair.
-She replaces Alice's copy of Blake's public key with the new public key.
-She then intercepts the messages that Alice sends to Blake.
-For each intercept, she decrypts it using the new private key, reencrypts
-it using Blake's true public key, and forwards the reencrypted
-message to Blake.
-All messages sent from Alice to Blake can now be read by Chloe.
-</para>
-
-<para>
-Good key management is crucial in order to ensure not just the integrity
-of your keyrings but the integrity of other users' keyrings as well.
-The core of key management in &gnupg; is the notion of signing keys.
-Key signing has two main purposes: it permits you to detect tampering
-on your keyring, and it allows you to certify that a key truly belongs
-to the person named by a user ID on the key.
-Key signatures are also used in a scheme known as the <firstterm>web of
-trust</firstterm> to extend certification to keys not directly signed by you
-but signed by others you trust.
-Responsible users who practice good key management can defeat key
-tampering as a practical attack on secure communication with &gnupg;.
-</para>
-
-<sect1>
-<title>
-Managing your own keypair
-</title>
-
-<para>
-A keypair has a public key and a private key.
-A public key consists of
-the public portion of the master signing key,
-the public portions of the subordinate signing and encryption subkeys, and
-a set of user IDs used to associate the public key with a real person.
-Each piece has data about itself.
-For a key, this data includes its ID, when it was created, when it
-will expire, etc.
-For a user ID, this data includes the name of the real person it identifies,
-an optional comment, and an email address.
-The structure of the private key is similar, except that it contains only
-the private portions of the keys, and there is no user ID information.
-</para>
-
-<para>
-The command-line option
-<link linkend="edit-key"><option>--edit-key</option></link>
-may be used to view a keypair.
-For example,
-
-<screen width="80">
-<prompt>chloe%</prompt> <userinput>gpg --edit-key chloe@cyb.org</userinput>
-Secret key is available.
-
-pub 1024D/26B6AAE1 created: 1999-06-15 expires: never trust: -/u
-sub 2048g/0CF8CB7A created: 1999-06-15 expires: never
-sub 1792G/08224617 created: 1999-06-15 expires: 2002-06-14
-sub 960D/B1F423E7 created: 1999-06-15 expires: 2002-06-14
-(1) Chloe (Jester) &lt;chloe@cyb.org>
-(2) Chloe (Plebian) &lt;chloe@tel.net>
-<prompt>Command></prompt>
-</screen>
-
-The public key is displayed along with an indication of whether
-or not the private key is available.
-Information about each component of the public key is then listed.
-The first column indicates the type of the key.
-The keyword <literal>pub</literal> identifies the public master signing key,
-and the keyword <literal>sub</literal> identifies a public subordinate key.
-The second column indicates the key's bit length, type, and ID.
-The type is <literal>D</literal> for a DSA key, <literal>g</literal> for an
-encryption-only
-ElGamal key, and <literal>G</literal> for an ElGamal key that may be used for
-both encryption and signing.
-The creation date and expiration date are given in columns three and four.
-The user IDs are listed following the keys.
-</para>
-
-<para>
-More information about the key can be obtained with interactive commands.
-The command <link linkend="toggle"><command>toggle</command></link>
-switches between the public and private
-components of a keypair if indeed both components are available.
-
-<screen width="80">
-<prompt>Command></prompt> <userinput>toggle</userinput>
-
-sec 1024D/26B6AAE1 created: 1999-06-15 expires: never
-sbb 2048g/0CF8CB7A created: 1999-06-15 expires: never
-sbb 1792G/08224617 created: 1999-06-15 expires: 2002-06-14
-sbb 960D/B1F423E7 created: 1999-06-15 expires: 2002-06-14
-(1) Chloe (Jester) &lt;chloe@cyb.org>
-(2) Chloe (Plebian) &lt;chloe@tel.net>
-</screen>
-
-The information provided is similar to the listing for the public-key
-component.
-The keyword <literal>sec</literal> identifies the private master signing key,
-and the keyword <literal>sbb</literal> identifies the private subordinates keys.
-The user IDs from the public key are also listed for convenience.
-</para>
-
-<sect2>
-<title id="integrity">
-Key integrity
-</title>
-
-<para>
-When you distribute your public key, you are distributing the public
-components of your master and subordinate keys as well as the user IDs.
-Distributing this material alone, however, is a security risk since
-it is possible for an attacker to tamper with the key.
-The public key can be modified by adding or substituting keys, or by
-adding or changing user IDs.
-By tampering with a user ID, the attacker could change the user ID's email
-address to have email redirected to himself.
-By changing one of the encryption keys, the attacker would
-also be able to decrypt the messages redirected to him.
-</para>
-
-<para>
-Using digital signatures is a solution to this problem.
-When data is signed by a private key, the corresponding public key
-is bound to the signed data.
-In other words, only the corresponding public key can be used to
-verify the signature and ensure that the data has not been modified.
-A public key can be protected from tampering by using its corresponding
-private master key to sign the public key components and user IDs, thus
-binding the components to the public master key.
-Signing public key components with the corresponding private master
-signing key is called <firstterm>self-signing</firstterm>, and a public key that has
-self-signed user IDs bound to it is called a <firstterm>certificate</firstterm>.
-</para>
-
-<!--
-%\begin{figure}
-%Blank
-%\caption{This should depict how self-signatures bind information to
-%a public key.}\label{fig:selfsignedkey}
-%\end{figure}
-%
-%As an example, Figure~\ref{fig:selfsignedkey} illustrates Chloe's public
-%key, which has been self-signed to bind the user IDs and public subkeys
-%to the public master key.
-%The signatures on the user IDs can be checked with the \texttt{check}
-%command from the key edit menu.
--->
-
-<para>
-As an example, Chloe has two user IDs and three subkeys.
-The signatures on the user IDs can be checked with the command
-<link linkend="check"><command>check</command></link> from the key edit menu.
-
-<screen width="80">
-<prompt>chloe%</prompt> <userinput>gpg --edit-key chloe</userinput>
-Secret key is available.
-
-pub 1024D/26B6AAE1 created: 1999-06-15 expires: never trust: -/u
-sub 2048g/0CF8CB7A created: 1999-06-15 expires: never
-sub 1792G/08224617 created: 1999-06-15 expires: 2002-06-14
-sub 960D/B1F423E7 created: 1999-06-15 expires: 2002-06-14
-(1) Chloe (Jester) &lt;chloe@cyb.org>
-(2) Chloe (Plebian) &lt;chloe@tel.net>
-
-<prompt>Command></prompt> <userinput>check</userinput>
-uid Chloe (Jester) &lt;chloe@cyb.org>
-sig! 26B6AAE1 1999-06-15 [self-signature]
-uid Chloe (Plebian) &lt;chloe@tel.net>
-sig! 26B6AAE1 1999-06-15 [self-signature]
-</screen>
-
-As expected, the signing key for each signature is the master signing
-key with key ID <literal>0x26B6AAE1</literal>.
-The self-signatures on the subkeys are present in the public key, but
-they are not shown by the &gnupg; interface.
-</para>
-</sect2>
-
-<sect2>
-<title>
-Adding and deleting key components
-</title>
-
-<para>
-Both new subkeys and new user IDs may be added to your keypair after
-it has been created.
-A user ID is added using the command
-<link linkend="adduid"><command>adduid</command></link>.
-You are prompted for a real name, email address, and comment just
-as when you create an initial keypair.
-A subkey is added using the command
-<link linkend="addkey"><command>addkey</command></link>.
-The interface is similar to the interface used when creating an initial
-keypair.
-The subkey may be a DSA signing key, and encrypt-only ElGamal
-key, or a sign-and-encrypt ElGamal key.
-When a subkey or user ID is generated it is self-signed using your
-master signing key, which is why you must supply your passphrase
-when the key is generated.
-</para>
-
-<para>
-Additional user IDs are useful when you need multiple identities.
-For example, you may have an identity for your job and an identity
-for your work as a political activist.
-Coworkers will know you by your work user ID.
-Coactivists will know you by your activist user ID.
-Since those groups of people may not overlap, though, each group
-may not trust the other user ID.
-Both user IDs are therefore necessary.
-</para>
-
-<para>
-Additional subkeys are also useful.
-The user IDs associated with your public master key are validated by
-the people with whom you
-communicate, and changing the master key therefore requires recertification.
-This may be difficult and time consuming if you communicate with
-many people.
-On the other hand, it is good to periodically change encryption subkeys.
-If a key is broken, all the data encrypted with that key will be
-vulnerable.
-By changing keys, however, only the data encrypted with the one broken
-key will be revealed.
-</para>
-
-<para>
-Subkeys and user IDs may also be deleted.
-To delete a subkey or user ID you must first select it using the
-<link linkend="key"><command>key</command></link> or
-<link linkend="uid"><command>uid</command></link> commands respectively.
-These commands are toggles.
-For example, the command <command>key <parameter>2</parameter></command>
-selects the second subkey,
-and invoking <command>key <parameter>2</parameter></command> again
-deselects it.
-If no extra argument is given, all subkeys or user IDs are deselected.
-Once the user IDs to be deleted are selected, the command
-<link linkend="deluid"><command>deluid</command></link>
-actually deletes the user IDs from your key.
-Similarly, the command <link linkend="delkey"><command>delkey</command></link>
-deletes all selected subkeys from both your public and private keys.
-</para>
-
-<para>
-For local keyring management, deleting key components is a good way
-to trim other people's public keys of unnecessary material.
-Deleting user IDs and subkeys on your own key, however, is not always
-wise since it complicates key distribution.
-By default, when a user imports your updated public key it will be merged
-with the old copy of your public key on his ring if it exists.
-The components from both keys are combined in the merge, and this
-effectively restores any components you deleted.
-To properly update the key, the user must first delete the old version
-of your key and then import the new version.
-This puts an extra burden on the people with whom you communicate.
-Furthermore, if you send your key to a keyserver, the merge will
-happen regardless, and anybody who downloads your key from a keyserver
-will never see your key with components deleted.
-Consequently, for updating your own key it is better to revoke key
-components instead of deleting them.
-</para>
-</sect2>
-
-<sect2>
-<title>
-Revoking key components
-</title>
-
-<para>
-To revoke a subkey it must be selected.
-Once selected it may be revoked with the
-<link linkend="revkey"><command>revkey</command></link> command.
-The key is revoked by adding a revocation self-signature to the key.
-Unlike the command-line option <option>--gen-revoke</option>, the effect of
-revoking a subkey is immediate.
-</para>
-
-<screen width="80">
-<prompt>Command></prompt> <userinput>revkey</userinput>
-Do you really want to revoke this key? y
-
-You need a passphrase to unlock the secret key for
-user: "Chloe (Jester) &lt;chloe@cyb.org>"
-1024-bit DSA key, ID B87DBA93, created 1999-06-28
-
-
-pub 1024D/B87DBA93 created: 1999-06-28 expires: never trust: -/u
-sub 2048g/B7934539 created: 1999-06-28 expires: never
-sub 1792G/4E3160AD created: 1999-06-29 expires: 2000-06-28
-rev! subkey has been revoked: 1999-06-29
-sub 960D/E1F56448 created: 1999-06-29 expires: 2000-06-28
-(1) Chloe (Jester) &lt;chloe@cyb.org>
-(2) Chloe (Plebian) &lt;chloe@tel.net>
-</screen>
-
-<para>
-A user ID is revoked differently.
-Normally, a user ID collects signatures that attest that the user ID
-describes the person who actually owns the associated key.
-In theory, a user ID describes a person forever, since that person will
-never change.
-In practice, though, elements of the user ID such as the email address
-and comment may change over time, thus invalidating the user ID.
-</para>
-
-<para>
-The OpenPGP
-<comment>First reference to OpenPGP</comment>
-specification does not support user ID revocation, but
-a user ID can effectively be revoked by revoking the self-signature
-on the user ID.
-For the security reasons described
-<link linkend="integrity">previously</link>,
-correspondents will not trust a user ID with no valid self-signature.
-</para>
-
-<para>
-A signature is revoked by using the command
-<link linkend="revsig"><command>revsig</command></link>.
-Since you may have signed any number of user IDs, the user interface
-prompts you to decide for each signature whether or not to revoke it.
-</para>
-
-<screen width="80">
-<prompt>Command></prompt> <userinput>revsig</userinput>
-You have signed these user IDs:
- Chloe (Jester) &lt;chloe@cyb.org>
- signed by B87DBA93 at 1999-06-28
- Chloe (Plebian) &lt;chloe@tel.net>
- signed by B87DBA93 at 1999-06-28
-user ID: "Chloe (Jester) &lt;chloe@cyb.org>"
-signed with your key B87DBA93 at 1999-06-28
-Create a revocation certificate for this signature? (y/N)n
-user ID: "Chloe (Plebian) &lt;chloe@tel.net>"
-signed with your key B87DBA93 at 1999-06-28
-Create a revocation certificate for this signature? (y/N)y
-You are about to revoke these signatures:
- Chloe (Plebian) &lt;chloe@tel.net>
- signed by B87DBA93 at 1999-06-28
-Really create the revocation certificates? (y/N)y
-
-You need a passphrase to unlock the secret key for
-user: "Chloe (Jester) &lt;chloe@cyb.org>"
-1024-bit DSA key, ID B87DBA93, created 1999-06-28
-
-
-pub 1024D/B87DBA93 created: 1999-06-28 expires: never trust: -/u
-sub 2048g/B7934539 created: 1999-06-28 expires: never
-sub 1792G/4E3160AD created: 1999-06-29 expires: 2000-06-28
-rev! subkey has been revoked: 1999-06-29
-sub 960D/E1F56448 created: 1999-06-29 expires: 2000-06-28
-(1) Chloe (Jester) &lt;chloe@cyb.org>
-(2) Chloe (Plebian) &lt;chloe@tel.net>
-</screen>
-
-<para>
-A revoked user ID is indicated by the revocation signature on
-the ID when the signatures on the key's user IDs are listed.
-</para>
-
-<screen width="80">
-<prompt>Command></prompt> <userinput>check</userinput>
-uid Chloe (Jester) &lt;chloe@cyb.org>
-sig! B87DBA93 1999-06-28 [self-signature]
-uid Chloe (Plebian) &lt;chloe@tel.net>
-rev! B87DBA93 1999-06-29 [revocation]
-sig! B87DBA93 1999-06-28 [self-signature]
-</screen>
-
-<para>
-Revoking both subkeys and self-signatures on user IDs adds revocation
-self-signatures to the key.
-Since signatures are being added and no material is deleted, a
-revocation will always be visible to others when your updated public
-key is distributed and merged with older copies of it.
-Revocation therefore guarantees that everybody has a consistent
-copy of your public key.
-</para>
-</sect2>
-
-<sect2>
-<title>
-Updating a key's expiration time
-</title>
-
-<para>
-The expiration time of a key may be updated with the command
-<link linkend="expire"><command>expire</command></link> from the key edit menu.
-If no key is selected the expiration time of the primary key
-is updated.
-Otherwise the expiration time of the selected subordinate key
-is updated.
-</para>
-
-<para>
-A key's expiration time is associated with the key's self-signature.
-The expiration time is updated by deleting the old self-signature
-and adding a new self-signature.
-Since correspondents will not have deleted the old self-signature, they
-will see an additional self-signature on the key when they update
-their copy of your key.
-The latest self-signature takes precedence, however, so all correspondents
-will unambiguously know the expiration times of your keys.
-</para>
-</sect2>
-</sect1>
-
-<sect1>
-<title>
-Validating other keys on your public keyring
-</title>
-
-<para>
-In Chapter <xref linkend="intro"> a procedure was given to validate your
-correspondents' public keys: a correspondent's key is validated by
-personally checking his key's fingerprint and then signing his public
-key with your private key.
-By personally checking the fingerprint you can be sure that the
-key really does belong to him, and since you have signed they key, you
-can be sure to detect any tampering with it in the future.
-Unfortunately, this procedure is awkward when either you must validate
-a large number of keys or communicate with people whom you do not
-know personally.
-</para>
-
-<para>
-&Gnupg; addresses this problem with a mechanism popularly known
-as the <firstterm>web of trust</firstterm>.
-In the web of trust model, responsibility for validating public
-keys is delegated to people you trust.
-For example, suppose
-<itemizedlist spacing="compact">
-<listitem>
-<para>
-Alice has signed Blake's key, and
-</para>
-</listitem>
-<listitem>
-<para>
-Blake has signed Chloe's key and Dharma's key.
-</para>
-</listitem>
-</itemizedlist>
-
-If Alice trusts Blake to properly validate keys that he signs, then
-Alice can infer that Chloe's and Dharma's keys are valid without
-having to personally check them.
-She simply uses her validated copy of Blake's public key to
-check that Blake's signatures on Chloe's and Dharma's are good.
-In general, assuming that Alice fully trusts everybody to properly
-validate keys they sign, then any key signed by a valid key is also
-considered valid.
-The root is Alice's key, which is axiomatically assumed to be valid.
-</para>
-
-<sect2>
-<title>
-Trust in a key's owner
-</title>
-
-<para>
-In practice trust is subjective.
-For example, Blake's key is valid to Alice since she signed it, but she
-may not trust Blake to properly validate keys that he signs.
-In that case, she would not take Chloe's and Dharma's key as valid
-based on Blake's signatures alone.
-The web of trust model accounts for this by associating with each
-public key on your keyring an indication of how much you trust the
-key's owner.
-There are four trust levels.
-
-<variablelist>
-<varlistentry>
-<term>
-unknown
-</term>
-<listitem>
-<para>
-Nothing is known about the owner's judgement in key signing.
-Keys on your public keyring that you do not own initially have
-this trust level.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-none
-</term>
-<listitem>
-<para>
-The owner is known to improperly sign other keys.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-marginal
-</term>
-<listitem>
-<para>
-The owner understands the implications of key signing and
-properly validates keys before signing them.
-</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>
-full
-</term>
-<listitem>
-<para>
-The owner has an excellent understanding of key signing,
-and his signature on a key would be as good as your own.
-</para>
-</listitem>
-</varlistentry>
-</variablelist>
-
-A key's trust level is something that you alone assign to the
-key, and it is considered private information.
-It is not packaged with the key when it is exported; it is even
-stored separately from your keyrings in a separate database.
-</para>
-
-<para>
-The &gnupg; key editor may be used to adjust your trust in a key's owner.
-The command is <link linkend="trust"><command>trust</command></link>.
-In this example Alice edits her trust in Blake and then updates
-the trust database to recompute which keys are valid based on her new
-trust in Blake.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --edit-key blake</userinput>
-
-pub 1024D/8B927C8A created: 1999-07-02 expires: never trust: q/f
-sub 1024g/C19EA233 created: 1999-07-02 expires: never
-(1) Blake (Executioner) &lt;blake@cyb.org>
-
-<prompt>Command></prompt> <userinput>trust</userinput>
-pub 1024D/8B927C8A created: 1999-07-02 expires: never trust: q/f
-sub 1024g/C19EA233 created: 1999-07-02 expires: never
-(1) Blake (Executioner) &lt;blake@cyb.org>
-
-Please decide how far you trust this user to correctly
-verify other users' keys (by looking at passports,
-checking fingerprints from different sources...)?
-
- 1 = Don't know
- 2 = I do NOT trust
- 3 = I trust marginally
- 4 = I trust fully
- s = please show me more information
- m = back to the main menu
-
-<prompt>Your decision?</prompt> <userinput>3</userinput>
-
-pub 1024D/8B927C8A created: 1999-07-02 expires: never trust: m/f
-sub 1024g/C19EA233 created: 1999-07-02 expires: never
-(1) Blake (Executioner) &lt;blake@cyb.org>
-
-<prompt>Command></prompt> <userinput>quit</userinput>
-[...]
-</screen>
-
-Trust in the key's owner and the key's validity are indicated to the
-right when the key is displayed.
-Trust in the owner is displayed first and the key's validity is
-<!-- HERE, need to fix quotation marks -->
-second<footnote>
-<para>
-&Gnupg; overloads the word "trust" by using it to mean
-trust in an owner and trust in a key.
-This can be confusing.
-Sometimes trust in an owner is referred to as
-<firstterm>owner-trust</firstterm> to
-distinguish it from trust in a key.
-<!-- HERE, need to fix quotation marks -->
-Throughout this manual, however, "trust" is used to
-mean trust in a key's
-<!-- HERE, need to fix quotation marks -->
-owner, and "validity" is used to mean trust that a key
-belongs to the human associated with the key ID.
-</para>
-</footnote>.
-The four trust/validity levels are abbreviated: unknown (<literal>q</literal>),
-none (<literal>n</literal>), marginal (<literal>m</literal>), and
-full (<literal>f</literal>).
-In this case, Blake's key is fully valid since Alice signed it herself.
-She initially has an unknown trust in Blake to properly sign other keys
-but decides to trust him marginally.
-</para>
-</sect2>
-
-<sect2>
-<title>
-Using trust to validate keys
-</title>
-
-<para>
-The web of trust allows a more elaborate algorithm to be used to
-validate a key.
-Formerly, a key was considered valid only if you signed it personally.
-<!-- HERE, math -->
-A more flexible algorithm can now be used: a key <emphasis>K</emphasis> is considered valid
-if it meets two conditions:
-<orderedlist spacing="compact">
-<listitem>
-<para>
-it is signed by enough valid keys, meaning
-<itemizedlist spacing="compact">
-<listitem>
-<para>
-you have signed it personally,
-</para>
-</listitem>
-<listitem>
-<para>
-it has been signed by one fully trusted key, or
-</para>
-</listitem>
-<listitem>
-<para>
-it has been signed by three marginally trusted keys; and
-</para>
-</listitem>
-</itemizedlist>
-</para>
-</listitem>
-<listitem>
-<para>
-<!-- HERE, math -->
-the path of signed keys leading from <emphasis>K</emphasis> back
-to your own key is five steps or shorter.
-</para>
-</listitem>
-</orderedlist>
-
-The path length, number of marginally trusted keys required, and number
-of fully trusted keys required may be adjusted.
-The numbers given above are the default values used by &gnupg;.
-</para>
-
-<para>
-<xref linkend="wot-examples"> shows a web of trust rooted at Alice.
-The graph illustrates who has signed who's keys.
-The table shows which keys Alice considers valid based on her
-trust in the other members of the web.
-<comment>Potential bug: <option>--completes-needed</option> on command
-line seems to be ignored when combined with <option>--update-trustdb</option>.
-Value is taken correctly if put in options file, however.</comment>
-This example assumes that two marginally-trusted keys or one
-fully-trusted key is needed to validate another key.
-The maximum path length is three.
-</para>
-
-<para>
-When computing valid keys in the example, Blake and Dharma's are
-always considered fully valid since they were signed directly
-by Alice.
-The validity of the other keys depends on trust.
-In the first case, Dharma is trusted fully, which implies
-that Chloe's and Francis's keys will be considered valid.
-In the second example, Blake and Dharma are trusted marginally.
-Since two marginally trusted keys are needed to fully validate a
-key, Chloe's key will be considered fully valid, but Francis's
-key will be considered only marginally valid.
-In the case where Chloe and Dharma are marginally trusted,
-Chloe's key will be marginally valid since Dharma's key is
-fully valid.
-Francis's key, however, will also be considered marginally
-valid since only a fully valid key can be used to validate
-other keys, and Dharma's key is the only fully valid key
-that has been used to sign Francis's key.
-When marginal trust in Blake is added, Chloe's key becomes
-fully valid and can then be used to fully validate Francis's
-key and marginally validate Elena's key.
-Lastly, when Blake, Chloe, and Elena are fully trusted, this is
-still insufficient to validate Geoff's key since the maximum
-certification path is three, but the path length from Geoff
-back to Alice is four.
-</para>
-
-<para>
-The web of trust model is a flexible approach to the problem of safe
-public key exchange.
-It permits you to tune &gnupg; to reflect how you use it.
-At one extreme you may insist on multiple, short paths from your
-<!-- HERE, math -->
-key to another key <emphasis>K</emphasis> in order to trust it.
-On the other hand, you may be satisfied with longer paths and
-<!-- HERE, math -->
-perhaps as little as one path from your key to the other
-key <emphasis>K</emphasis>.
-<!-- HERE, math -->
-Requiring multiple, short paths is a strong guarantee
-that <emphasis>K</emphasis> belongs to whom your think it does.
-The price, of course, is that it is more difficult to validate keys
-since you must personally sign more keys than if you accepted fewer
-and longer paths.
-</para>
-
-<figure id="wot-examples" float=1>
-<title>
-A hypothetical web of trust
-</title>
-<!--
-The graph indicates who has signed who's keys.
-The table, in which names have been abbreviated, shows which keys are
-valid depending on how Alice trusts other members in the web.
-Alice considers different keys valid depending on how she trusts
-the members of the web.
--->
-
-<graphic fileref="signatures.jpg"></graphic>
-
-<informaltable frame="all">
-<tgroup cols="4" rowsep="1" colsep="1">
-<colspec colname="one" colnum="1">
-<colspec colname="two" colnum="2">
-<colspec colname="three" colnum="3">
-<colspec colname="four" colnum="4">
-<spanspec spanname="lefthalf" namest="one" nameend="two" align="center">
-<spanspec spanname="righthalf" namest="three" nameend="four" align="center">
-
-<thead>
-<colspec
-<row>
-<entry spanname="lefthalf">trust</entry>
-<entry spanname="righthalf">validity</entry>
-</row>
-<row>
-<entry align="center">marginal</entry>
-<entry align="center">full</entry>
-<entry align="center">marginal</entry>
-<entry align="center">full</entry>
-</row>
-</thead>
-<tbody>
-<row>
-<entry></entry>
-<entry>Dharma</entry>
-<entry></entry>
-<entry>Blake, Chloe, Dharma, Francis</entry>
-</row>
-
-<row>
-<entry>Blake, Dharma</entry>
-<entry></entry>
-<entry>Francis</entry>
-<entry>Blake, Chloe, Dharma</entry>
-</row>
-
-<row>
-<entry>Chloe, Dharma</entry>
-<entry></entry>
-<entry>Chloe, Francis</entry>
-<entry>Blake, Dharma</entry>
-</row>
-
-<row>
-<entry>Blake, Chloe, Dharma</entry>
-<entry></entry>
-<entry>Elena</entry>
-<entry>Blake, Chloe, Dharma, Francis</entry>
-</row>
-
-<row>
-<entry></entry>
-<entry>Blake, Chloe, Elena</entry>
-<entry></entry>
-<entry>Blake, Chloe, Elena, Francis</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-</sect2>
-</sect1>
-
-<sect1>
-<title>
-Distributing keys
-</title>
-
-<para>
-Ideally, you distribute your key by personally giving it to your
-correspondents.
-In practice, however, keys are often distributed by email or some
-other electronic communication medium.
-Distribution by email is good practice when you have only a few
-correspondents, and even if you have many correspondents, you can use
-an alternative means such as posting your public key on your World Wide
-Web homepage.
-This is unacceptable, however, if people who need your public key do
-not know where to find it on the Web.
-</para>
-
-<para>
-To solve this problem public key servers are used to collect
-and distribute public keys.
-A public key received by the server is either added to the server's
-database or merged with the existing key if already present.
-When a key request comes to the server, the server consults its
-database and returns the requested public key if found.
-</para>
-
-<para>
-A keyserver is also valuable when many people are frequently signing other
-people's keys.
-Without a keyserver, when Blake sign's Alice's key then Blake would send
-Alice a copy of her public key signed by him so that Alice could
-add the updated key to her ring as well as distribute it to all of her
-correspondents.
-Going through this effort fulfills Alice's and Blake's responsibility
-to the community at large in building tight webs of trust and thus
-improving the security of PGP.
-It is nevertheless a nuisance if key signing is frequent.
-</para>
-
-<para>
-Using a keyserver makes the process somewhat easier.
-When Blake signs Alice's key he sends the signed key to the key server.
-The key server adds Blake's signature to its copy of Alice's key.
-Individuals interested in updating their copy of Alice's key then consult
-the keyserver on their own initiative to retrieve the updated key.
-Alice need never be involved with distribution and can retrieve signatures
-on her key simply by querying a keyserver.
-<comment><option>--keyserver</option> must come before
-<option>--send-key</option> or <option>--recv-key</option>.
-This appears to be a bug.</comment>
-</para>
-
-<para>
-One or more keys may be sent to a keyserver using the command-line
-option <link linkend="send-keys"><option>--send-keys</option></link>.
-The option takes one or more key specifiers and sends the specified
-keys to the key server.
-The key server to which to send the keys is specified with the
-command-line option <link linkend="keyserver"><option>--keyserver</option></link>.
-Similarly, the option
-<link linkend="recv-keys"><option>--recv-keys</option></link> is used
-to retrieve keys from a keyserver, but the option <option>--recv-keys</option>
-requires a key ID be used to specify the key.
-In the following example Alice sends her public key to the keyserver
-<parameter>certserver.pgp.com</parameter> and then updates her copy
-of Blake's key from the same keyserver.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --keyserver certserver.pgp.com --recv-key 0xBB7576AC</userinput>
-gpg: requesting key BB7576AC from certserver.pgp.com ...
-gpg: key BB7576AC: 1 new signature
-
-gpg: Total number processed: 1
-gpg: new signatures: 1
-<prompt>alice%</prompt> <userinput>gpg --keyserver certserver.pgp.com --send-key blake@cyb.org</userinput>
-gpg: success sending to 'certserver.pgp.com' (status=200)
-</screen>
-
-There are several popular keyservers in use around the world.
-The major keyservers synchronize themselves, so it is fine to
-pick a keyserver close to you on the Internet and then use it
-regularly for sending and receiving keys.
-</para>
-</sect1>
-
-</chapter>
-
diff --git a/doc/gph/c4.sgml b/doc/gph/c4.sgml
deleted file mode 100644
index 1932da7ae..000000000
--- a/doc/gph/c4.sgml
+++ /dev/null
@@ -1,433 +0,0 @@
-<chapter id="wise" xreflabel="4">
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Daily use of &Gnupg;
-</title>
-
-<para>
-&Gnupg; is a complex tool with technical, social, and legal issues
-surrounding it.
-Technically, it has been designed to be used in situations having
-drastically different security needs.
-This complicates key management.
-Socially, using &gnupg; is not strictly a personal decision.
-To use &gnupg effectively both parties communicating must use it.
-Finally, as of 1999, laws regarding digital encryption, and in particular
-whether or not using &gnupg; is legal, vary from country to country and
-is currently being debated by many national governments.
-</para>
-
-<para>
-This chapter addresses these issues.
-It gives practical advice on how to use &gnupg; to meet your security needs.
-It also suggests ways to promote the use of &gnupg; for secure
-communication between yourself and your colleagues when your colleagues
-are not currently using &gnupg;.
-Finally, the legal status of &gnupg; is outlined given the current status
-of encryption laws in the world.
-</para>
-
-<sect1>
-<title>
-Defining your security needs
-</title>
-
-<para>
-&Gnupg; is a tool you use to protect your privacy.
-Your privacy is protected if you can correspond with others without
-eavesdroppers reading those messages.
-</para>
-
-<para>
-How you should use &gnupg; depends on the determination and resourcefulness
-of those who might want to read your encrypted messages.
-An eavesdropper may be an unscrupulous system administrator casually
-scanning your mail, it might be an industrial spy trying to collect
-your company's secrets, or it might be a law enforcement agency trying
-to prosecute you.
-Using &gnupg; to protect against casual eavesdropping is going to be
-different than using &gnupg; to protect against a determined adversary.
-Your goal, ultimately, is to make it more expensive to recover the
-unencrypted data than that data is worth.
-</para>
-
-<para>
-Customizing your use of &gnupg; revolves around three issues:
-<itemizedlist spacing="compact">
-<listitem>
-<para>
-the key size of your public/private keypair,
-</para>
-</listitem>
-
-<listitem>
-<para>
-protecting your private key, and
-</para>
-</listitem>
-
-<listitem>
-<para>
-managing your web of trust.
-</para>
-</listitem>
-</itemizedlist>
-
-A well-chosen key size protects you against brute-force attacks on
-encrypted messages.
-Protecting your private key prevents an attacker from simply using your
-private key to decrypt encrypted messages and sign messages in your name.
-Correctly managing your web of trust prevents attackers from masquarading
-as people with whom you communicate.
-Ultimately, addressing these issues with respect to your own security
-needs is how you balance the extra work required to use &gnupg; with
-the privacy it gives you.
-</para>
-
-<sect2>
-<title>
-Choosing a key size
-</title>
-
-<para>
-Selecting a key size depends on the key.
-In OpenPGP, a public/private keypair usually has multiple keys.
-At the least it has a master signing key, and it probably has one or
-more additional subkeys for encryption.
-Using default key generation parameters with &gnupg;, the master
-key will be a DSA key, and the subkeys will be ElGamal keys.
-</para>
-
-<para>
-DSA allows a key size up to 1024 bits.
-This is not especially good given today's factoring technology, but
-that is what the standard specifies.
-Without question, you should use 1024 bit DSA keys.
-</para>
-
-<para>
-ElGamal keys, on the other hand, may be of any size.
-Since &gnupg; is a hybrid public-key system, the public key is used
-to encrypt a 128-bit session key, and the private key is used to
-decrypt it.
-Key size nevertheless affects encryption and decryption speed
-since the cost of these algorithms is exponential in the size of
-the key.
-Larger keys also take more time to generate and take more space
-to store.
-Ultimately, there are diminishing returns on the extra security
-a large key provides you.
-After all, if the key is large enough to resist a brute-force
-attack, an eavesdropper will merely switch to some other method for
-obtaining your plaintext data.
-Examples of other methods include robbing your home or office
-and mugging you.
-1024 bits is thus the recommended key size.
-If you genuinely need a larger key size then you probably already
-know this and should be consulting an expert in data security.
-</para>
-</sect2>
-
-<sect2>
-<title>
-Protecting your private key
-</title>
-
-<para>
-Protecting your private key is the most important job you have to
-use &gnupg; correctly.
-If someone obtains your private key, then all data encrypted to
-the private key can be decrypted and signatures can be made in your name.
-If you lose your private key, then you will no longer be able to
-decrypt documents encrypted to you in the future or in the past,
-and you will not be able to make signatures.
-Losing sole possession of your private key is catastrophic.
-</para>
-
-<para>
-Regardless of how you use &gnupg; you should store the public
-key's <link linkend="revocation">revocation certificate</link>
-and a backup of your private key on write-protected media in a safe place.
-For example, you could burn them on a CD-ROM and store them in your
-safe deposit box at the bank in a sealed envelope.
-Alternatively, you could store them on a floppy and hide it in your
-house.
-Whatever you do, they should be put on media that is safe to store
-for as long as you expect to keep the key, and you should store
-them more carefully than the copy of your private key you use daily.
-</para>
-
-<para>
-To help safeguard your key, &Gnupg; does not store your raw
-private key on disk.
-Instead it encrypts it using a symmetric encryption algorithm.
-That is why you need a passphrase to access the key.
-Thus there are two barriers an attacker must cross to access your private
-key: (1) he must actually acquire the key, and (2) he must get past
-the encryption.
-</para>
-
-<para>
-Safely storing your private key is important, but there is a cost.
-Ideally, you would keep the private key on a removable, write-protected disk
-such as a floppy disk, and you would use it on a single-user machine
-not connected to a network.
-This may be inconvenient or impossible for you to do.
-For example, you may not own your own machine and must use a computer
-at work or school, or it may mean you have to physically disconnect
-your computer from your cable modem every time you want to use &gnupg;
-</para>
-
-<para>
-This does not mean you cannot or should not use &gnupg;.
-It means only that you have decided that the data you are protecting is
-important enough to encrypt but not so important as to take extra
-steps to make the first barrier stronger.
-It is your choice.
-</para>
-
-<para>
-A good passphrase is absolutely critical when using &gnupg;.
-Any attacker who gains access to your private key must bypass the
-encryption on the private key.
-Instead of brute-force guessing the key, an attacker will almost
-certainly instead try to guess the passphrase.
-</para>
-
-<para>
-The motivation for trying passphrases is that most people choose
-a passphrase that is easier to guess than a random 128-bit key.
-If the passphrase is a word, it is much cheaper to try all the
-words in the dictionaries of the world's languages.
-Even if the word is permuted, &eg, k3wldood, it is still easier
-to try dictionary words with a catalog of permutations.
-The same problem applies to quotations.
-In general, passphrases based on natural-language utterances
-are poor passphrases since there is little randomness and lots
-of redundancy in natural language.
-You should avoid natural language passphrases if you can.
-</para>
-
-<para>
-A good passphrase is one that you can remember but is hard for
-someone to guess.
-It should include characters from the whole range of printable characters
-on your keyboard.
-This includes uppercase alphabetics characters, numbers, and special
-characters such as <literal>}</literal> and <literal>|</literal>.
-Be creative and spend a little time considering your passphrase; a
-good choice is important to ensure your privacy.
-</para>
-</sect2>
-
-<!--
-<sect2>
-<title>
-Reacting to a compromised private key
-</title>
-
-<para>
-Despite your precautions you may lose sole access to your private key.
-For example, you may forget the passphrase, or someone who you think
-can bypass the encryption gets access to it.
-In that case then you need to spread the word that your key is no
-longer valid.
-To do that you use the key revocation certificate you should have generated
-when you created the key.
-Importing it onto your public keyring will revoke the public key
-of the keypair you no longer wish to use.
-It is then up to you to distribute the revoked public key to all
-those who may encrypt documents to you.
-</para>
-
-<para>
-A revoked public key only prevents future use of the private key.
-Others will neither be able to encrypt documents to the key nor will
-they be able to check signatures made with the private key.
-Documents signed in the past can still be checked, however, and
-documents encrypted in the past can still be decrypted.
-</para>
-
-<para>
-It is important that you protect the revocation certificate carefully.
-Anybody can add the certificate to your public key and distribute it,
-and there is no way to revoke a revocation certificate.
-Therefore, you should store the revocation certificate in a safe
-place such as with the backup of your private key.
-</para>
-</sect2>
--->
-
-<sect2>
-<title>
-Managing your web of trust
-</title>
-
-<para>
-As with protecting your private key, managing your web of trust is
-another aspect of using &gnupg; that requires balancing security against
-ease of use.
-If you are using &gnupg; to protect against casual eavesdropping and
-forgeries then you can afford to be relatively trusting of other
-people's signatures.
-On the other hand, if you are concerned that there may be a determined
-attacker interested in invading your privacy, then
-you should be much less trusting of other signatures and spend more time
-personally verifying signatures.
-</para>
-
-<para>
-Regardless of your own security needs, through, you should
-<emphasis>always be careful</emphasis> when signing other keys.
-It is selfish to sign a key with just enough confidence in the key's
-validity to satisfy your own security needs.
-Others, with more stringent security needs, may want to depend on
-your signature.
-If they cannot depend on you then that weakens the web of trust
-and makes it more difficult for all &gnupg; users to communicate.
-Use the same care in signing keys that you would like others to use when
-you depend on their signatures.
-</para>
-
-<para>
-In practice, managing your web of trust reduces to assigning trust to
-others and tuning the options
-<link linkend="marginals-needed"><option>--marginals-needed</option></link>
-and
-<link linkend="completes-needed"><option>--completes-needed</option></link>.
-Any key you personally sign will be considered valid, but except for small
-groups, it will not be practical to personally sign the key of every person
-with whom you communicate.
-You will therefore have to assign trust to others.
-</para>
-
-<para>
-It is probably wise to be accurate when assigning trust and then
-use the options to tune how careful &gnupg; is with key validation.
-As a concrete example, you may fully trust a few close friends that
-you know are careful with key signing and then marginally
-trust all others on your keyring.
-From there, you may set <option>--completes-needed</option> to
-<literal>1</literal> and <option>--marginals-needed</option> to
-<literal>2</literal>.
-If you are more concerned with security you might choose values of
-<literal>1</literal> and <literal>3</literal> or <literal>2</literal>
-and <literal>3</literal> respectively.
-If you are less concerned with privacy attacks and just want some
-reasonable confidence about validity, set the values to <literal>1</literal>
-and <literal>1</literal>.
-In general, higher numbers for these options imply that more people
-would be needed to conspire against you in order to have a key validated
-that does not actually belong to the person whom you think it does.
-</para>
-</sect2>
-</sect1>
-
-<sect1>
-<title>
-Building your web of trust
-</title>
-
-<para>
-Wanting to use &gnupg; yourself is not enough.
-In order to use to communicate securely with others you must have
-a web of trust.
-At first glance, however, building a web of trust is a daunting task.
-The people with whom you communicate need to use
-&gnupg;<footnote><para>In this section, &gnupg; refers to the
-&gnupg; implementation of OpenPGP as well as other implementations
-such as NAI's PGP product.</para></footnote>, and there needs to be enough
-key signing so that keys can be considered valid.
-These are not technical problems; they are social problems.
-Nevertheless, you must overcome these problems if you want to
-use &gnupg;.
-</para>
-
-<para>
-When getting started using &gnupg; it is important to realize that you
-need not securely communicate with every one of your correspondents.
-Start with a small circle of people, perhaps just yourself and
-one or two others who also want to exercise their right
-to privacy.
-Generate your keys and sign each other's public keys.
-This is your initial web of trust.
-By doing this you will appreciate the value of a small, robust
-web of trust and will be more cautious as you grow your web
-in the future.
-</para>
-
-<para>
-In addition to those in your initial web of trust, you may want to
-communicate securely with others who are also using &gnupg;.
-Doing so, however, can be awkward for two reasons:
-(1) you do not always know when someone uses or is willing to use
-&gnupg;, and (2) if you do know of someone who uses it, you may still have
-trouble validating their key.
-The first reason occurs because people do not always advertise that
-they use &gnupg;.
-The way to change this behavior is to set the example and advertise
-that you use &gnupg;.
-There are at least three ways to do this: you can sign messages you mail
-to others or post to message boards, you can put your public key on your
-web page, or, if you put your key on a keyserver, you can put your key
-ID in your email signature.
-If you advertise your key then you make it that much more acceptable
-for others to advertise their keys.
-Furthermore, you make it easier for others to start communicating
-with you securely since you have taken the initiative and made it clear
-that you use &gnupg;.
-</para>
-
-<para>
-Key validation is more difficult.
-If you do not personally know the person whose key you want to sign,
-then it is not possible to sign the key yourself.
-You must rely on the signatures of others and hope to find a chain
-of signatures leading from the key in question back to your own.
-To have any chance of finding a chain, you must take the intitive
-and get your key signed by others outside of your intitial web of trust.
-An effective way to accomplish this is to participate in key
-signing parties.
-If you are going to a conference look ahead of time for a key
-signing party, and if you do not see one being held, offer to
-<ulink url="http://www.herrons.com/kb2nsx/keysign.html">hold one</ulink>.
-You can also be more passive and carry your fingerprint with you
-for impromptu key exchanges.
-In such a situation the person to whom you gave the fingerprint
-would verify it and sign your public key once he returned home.
-</para>
-
-<para>
-Keep in mind, though, that this is optional.
-You have no obligation to either publically advertise your key or
-sign other people's keys.
-The power of &gnupg; is that it is flexible enough to adapt to your
-security needs whatever they may be.
-The social reality, however, is that you will need to take the initiative
-if you want to grow your web of trust and use &gnupg; for as much of
-your communication as possible.
-</para>
-</sect1>
-
-<sect1>
-<title>
-Using &Gnupg; legally
-</title>
-
-<para>
-The legal status of encryption software varies from country to country,
-and law regarding encryption software is rapidly evolving.
-<ulink url="http://cwis.kub.nl/~frw/people/koops/bertjaap.htm">Bert-Japp
-Koops</ulink> has an excellent
-<ulink url="http://cwis.kub.nl/~frw/people/koops/lawsurvy.htm">Crypto
-Law Survey</ulink> to which you should refer for the legal status of
-encryption software in your country.
-</para>
-
-</sect1>
-</chapter>
-
diff --git a/doc/gph/c5.sgml b/doc/gph/c5.sgml
deleted file mode 100644
index b847e5853..000000000
--- a/doc/gph/c5.sgml
+++ /dev/null
@@ -1,38 +0,0 @@
-<chapter id="Modules" xreflabel="5">
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Programming with &Gnupg;
-</title>
-
-<para>...</para>
-
-<sect1>
-<title>
-Using &gpg in batch mode
-</title>
-
-<para>...</para>
-
-<sect2>
-<title>
-Invoking &gpg from mail clients
-</title>
-
-<para>...</para>
-</sect2>
-</sect1>
-
-<sect1>
-<title>
-Writing extension modules
-</title>
-
-<para>...</para>
-</sect1>
-
-</chapter>
-
diff --git a/doc/gph/c6.sgml b/doc/gph/c6.sgml
deleted file mode 100644
index 1b82a8c9a..000000000
--- a/doc/gph/c6.sgml
+++ /dev/null
@@ -1,804 +0,0 @@
-<reference>
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Command Reference
-</title>
-
-<partintro>
-<sect1>
-<title>
-Key specifiers
-</title>
-
-<para>
-Many commands and options require a <firstterm>key specifier</firstterm>.
-A key specifier is the key ID or any portion of ther user ID of
-a key.
-Consider the following example.
-
-<screen width="80">
-<prompt>alice%</prompt> <userinput>gpg --list-keys chloe</userinput>
-pub 1024D/B87DBA93 1999-06-28 Chloe (Jester) &lt;chloe@cyb.org>
-uid Chloe (Plebian) &lt;chloe@tel.net>
-sub 2048g/B7934539 1999-06-28
-</screen>
-
-For this key, <literal>0xB87DBA93</literal>,
-<literal>Chloe</literal>,
-<literal>Plebian</literal>, and
-<literal>oe@tel</literal>
-are all examples of key specifiers that match the above key.
-</para>
-</sect1>
-</partintro>
-
-<refentry id="send-keys">
-<refnamediv>
-<refname>
-send-keys
-</refname>
-<refpurpose>
-send keys to a key server
-</refpurpose>
-
-
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-send-keys <replaceable class="parameter">key</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command sends a public key to a keyserver.
-The parameter <replaceable class="parameter">key</replaceable> specifies
-the public key that should be uploaded.
-The command requires the option
-<link linkend="keyserver"><option>keyserver</option></link> to specify
-to which keyserver &gpg; should send the keys.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="recv-keys">
-<refnamediv>
-<refname>
-recv-keys
-</refname>
-<refpurpose>
-retrieve keys from a key server
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>recv-keys</option> <replaceable class="parameter">key-id key-id ...</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command downloads one or more public keys from a keyserver.
-Each <replaceable class="parameter">key-id</replaceable> is a key ID.
-The command requires the option
-<link linkend="keyserver"><option>keyserver</option></link> to
-specify from which keyserver &gpg; should download the keys.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="encrypt">
-<refnamediv>
-<refname>
-encrypt
-</refname>
-<refpurpose>
-encrypt a document
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>encrypt</option> <replaceable class="parameter">filename</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command encrypts the document
-<replaceable class="parameter">filename</replaceable> to
-recipients specified using the
-option <link linkend="recipient"><option>recipient</option></link>.
-If the parameter <replaceable class="parameter">filename</replaceable>
-is omitted, then the document to encrypt is taken from standard input.
-If the option <option>recipient</option> is omitted,
-&gpg; will prompt for a recipient.
-If the option <link linkend="output"><option>output</option></link> is used,
-&gpg; will output the encrypted information to the specified file.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="decrypt">
-<refnamediv>
-<refname>
-decrypt
-</refname>
-<refpurpose>
-decrypt an encrypted document
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>decrypt</option> <replaceable class="parameter">filename</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command decrypts <replaceable class="parameter">filename</replaceable>
-and puts the result on standard output.
-If the parameter <replaceable class="parameter">filename</replaceable>
-is omitted, then the document to decrypt is taken from standard input.
-Use the option <link linkend="output"><option>output</option></link>
-to output the decrypted message to a file instead.
-</para>
-</refsect1>
-</refentry>
-
-
-<refentry id="clearsign">
-<refnamediv>
-<refname>
-clearsign
-</refname>
-<refpurpose>
-make a cleartext signature
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>clearsign</option> <replaceable class="parameter">filename</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command signs a message that can be verified to ensure that the
-original message has not been changed.
-Verification of the signed message is done using the command
-<link linkend="verify"><option>verify</option></link>.
-
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="fingerprint">
-<refnamediv>
-<refname>
-fingerprint
-</refname>
-<refpurpose>
-display key fingerprints
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>fingerprint</option> <replaceable class="parameter">name ...</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command prints the fingerprints of the specified public keys.
-The parameter <replaceable class="parameter">name</replaceable> is a
-key specifier.
-If no parameter <replaceable class="parameter">name</replaceable> is
-provided, &gpg; will print the fingerprints of all the keys on
-your public keyring.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="detach-sig">
-<refnamediv>
-<refname>
-detach-sig
-</refname>
-<refpurpose>
-make a detached signature
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>detach-sig</option> <replaceable class="parameter">filename</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command creates a signature file that can be used
-to verify that the orginal file
-<replaceable class="parameter">filename</replaceable> has not
-been changed.
-Verification of the file using a detached signature is done using the
-command <link linkend="verify"><option>verify</option></link>.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="gen-key">
-<refnamediv>
-<refname>
-gen-key
-</refname>
-<refpurpose>
-generate a new keypair
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>gen-key</option>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command generates a private/public key pair for use in encrypting,
-decrypting, and signing of messages.
-You will br prompted for the kind of key you wish to create, the key
-size, and the key's expiration date.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="symmetric">
-<refnamediv>
-<refname>
-symmetric
-</refname>
-<refpurpose>
-encrypt a document using only a symmetric encryption algorithm
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>symmetric</option> <replaceable class="parameter">filename</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command encrypts a document using a symmetric algorithm with
-a key derived from a passphrase supplied by you during execution.
-The key should be selected to make it difficult to randomly guess the key.
-To decrypt a document encrypted in this manner use the command.
-<link linkend="decrypt"><option>decrypt</option></link>.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="list-keys">
-<refnamediv>
-<refname>
-list-keys
-</refname>
-<refpurpose>
-list information about the specified keys
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>list-keys</option> <replaceable class="parameter">key ...</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command lists the public key specified by the key specifiers on the
-command line.
-If no key specifier is given, &gpg; will print all of the keys on the
-public keyring.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="import">
-<refnamediv>
-<refname>
-import
-</refname>
-<refpurpose>
-import keys to a local keyring
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>import</option> <replaceable class="parameter">filename</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command imports one or more public keys onto the user's public
-keyring from the file <replaceable class="parameter">filename</replaceable>.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="verify">
-<refnamediv>
-<refname>
-verify
-</refname>
-<refpurpose>
-verify a signed document
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>verify</option> <replaceable class="parameter">signature document</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command verifies a document against a signature
-to ensure that the document has not been altered since the signature
-was created.
-If <replaceable class="parameter">signature</replaceable> is omitted,
-&gpg; will look in <replaceable class="parameter">document</replaceable>
-for a clearsign signature.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="gen-revoke">
-<refnamediv>
-<refname>
-gen-revoke
-</refname>
-<refpurpose>
-generate a revocation certificate for a public/private keypair
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>gen-revoke</option> <replaceable class="parameter">key</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command generates a revocation certificate for a public/private
-key pair.
-The parameter <replaceable class="parameter">key</replaceable> is
-a key specifier.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="export">
-<refnamediv>
-<refname>
-export
-</refname>
-<refpurpose>
-export keys from a local keyring
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>export</option> <replaceable class="parameter">key key ...</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command exports the public keys components of the keys specified
-by the key specifiers <replaceable class="parameter">key key ...</replaceable>.
-The export command by default sends its output to standard output.
-This key file can later be imported into another keyring using the command
-<link linkend="import"><option>import</option></link>.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="edit-key">
-<refnamediv>
-<refname>
-edit-key
-</refname>
-<refpurpose>
-presents a menu for operating on keys
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>edit-key</option> <replaceable class="parameter">key</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This command presents a menu which enables you to perform
-key-related taskes.
-The key specifier <replaceable class="parameter">key</replaceable>
-specifies the key pair to be edited.
-If the specifier matches more than one key pair, &gpg; issues
-an error and exits.
-</para>
-
-<para>
-Key listings displayed during key editing show the key with its
-secondary keys and all user ids.
-Selected keys or user ids are indicated by an asterisk.
-The trust and validity values are displayed with the primary key:
-the first is the assigned trust and the second is the
-calculated validity.
-Letters are used for the values:
-
-<informaltable>
-<tgroup cols="2" rowsep="1" colsep="1">
-<thead>
-<row>
-<entry>Letter</entry>
-<entry>Meaning</entry>
-</row>
-</thead>
-<tbody>
-<row>
-<entry>
--
-</entry>
-<entry>
-No ownertrust assigned / not yet calculated.
-</entry>
-</row>
-<row>
-<entry>
-e
-</entry>
-<entry>
-Trust calculation has failed.
-</entry>
-</row>
-
-<row>
-<entry>
-q
-</entry>
-<entry>
-Not enough information for calculation.
-</entry>
-</row>
-
-<row>
-<entry>
-n
-</entry>
-<entry>
-Never trust this key.
-</entry>
-</row>
-
-<row>
-<entry>
-m
-</entry>
-<entry>
-Marginally trusted.
-</entry>
-</row>
-
-<row>
-<entry>
-f
-</entry>
-<entry>
-Fully trusted.
-</entry>
-</row>
-
-<row>
-<entry>
-u
-</entry>
-<entry>
-Ultimately trusted.
-</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</para>
-
-<para>
-The following lists each key editing command and a description
-of its behavior.
-</para>
-
-<refsect2 id="sign">
-<title>
-sign
-</title>
-
-<para>
-Makes a signature on the current key.
-If th key is not yet signed by the default user or the user
-given with the option
-<link linkend="local-user"><option>local-user</option></link>,
-the program displays the information of the key again, together with
-its fingerprint and asks whether it should be signed.
-This question is repeated for all users specified with the option
-<option>local-user</option>.
-</para>
-</refsect2>
-
-<refsect2 id="lsign">
-<title>
-lsign
-</title>
-
-<para>
-Same as <link linkend="sign">sign</link>, but the signature is
-marked as non-exportable and will therefore never be used by others.
-This may be used to make keys valid only in the local environment.
-</para>
-</refsect2>
-
-<refsect2 id="revsig">
-<title>
-revsig
-</title>
-
-<para>
-Revoke a signature.
-Asks for each signature makde by a one of the private keys whether
-a revocation certificate should be generated.
-</para>
-</refsect2>
-
-<refsect2 id="trust">
-<title>
-trust
-</title>
-
-<para>
-Change the owner trust value.
-This updates the trust database immediately and no save is required.
-</para>
-</refsect2>
-
-<refsect2 id="disable">
-<title>
-disable
-</title>
-
-<para>
-Disable the key.
-A disabled key cannot normally be used for encryption.
-</para>
-</refsect2>
-
-<refsect2 id="enable">
-<title>
-enable
-</title>
-
-<para>
-Enable a key that has been previously
-<link linkend="disable">disabled</link>.
-</para>
-</refsect2>
-
-<refsect2 id="adduid">
-<title>
-adduid
-</title>
-
-<para>
-Add a new user id to the current key.
-</para>
-</refsect2>
-
-<refsect2 id="deluid">
-<title>
-deluid
-</title>
-
-<para>
-Delete a user id from the current key.
-</para>
-</refsect2>
-
-<refsect2 id="addkey">
-<title>
-addkey
-</title>
-
-<para>
-Add a new subkey to the current key.
-</para>
-</refsect2>
-
-<refsect2 id="delkey">
-<title>
-delkey
-</title>
-
-<para>
-Delete a subkey from the current key.
-</para>
-</refsect2>
-
-<refsect2 id="revkey">
-<title>
-revkey
-</title>
-
-<para>
-Revoke a subkey of the current key.
-</para>
-</refsect2>
-
-<refsect2 id="expire">
-<title>
-expire
-</title>
-
-<para>
-Change a key expiration time.
-If a subkey is selected, the time of that key will be changed.
-With no selection the expiration time of the current primary key is changed.
-</para>
-</refsect2>
-
-<refsect2 id="key">
-<title>
-key n
-</title>
-
-<para>
-Toggle selection of subkey with index n.
-Use 0 to deselect all.
-</para>
-</refsect2>
-
-<refsect2 id="uid">
-<title>
-uid n
-</title>
-
-<para>
-Toggle selection of user id with index n.
-Use 0 to deselect all.
-</para>
-</refsect2>
-
-<refsect2 id="passwd">
-<title>
-toggle
-</title>
-
-<para>
-Change the passphrase of the private key of the selected key pair.
-</para>
-</refsect2>
-
-<refsect2 id="toggle">
-<title>
-toggle
-</title>
-
-<para>
-Toggle between public and private key listings.
-</para>
-</refsect2>
-
-<refsect2 id="check">
-<title>
-check
-</title>
-
-<para>
-Check all selected user ids.
-</para>
-</refsect2>
-
-<refsect2 id="pref">
-<title>
-pref
-</title>
-
-<para>
-List preferences.
-</para>
-</refsect2>
-
-<refsect2 id="save">
-<title>
-save
-</title>
-
-<para>
-Save all changes to the current key and quit.
-</para>
-</refsect2>
-
-<refsect2 id="quit">
-<title>
-save
-</title>
-
-<para>
-Quit without updating the current key.
-</para>
-</refsect2>
-
-</refsect1>
-</refentry>
-</reference>
diff --git a/doc/gph/c7.sgml b/doc/gph/c7.sgml
deleted file mode 100644
index 17f3186f1..000000000
--- a/doc/gph/c7.sgml
+++ /dev/null
@@ -1,251 +0,0 @@
-<reference>
-<docinfo>
-<date>
-$Id$
-</date>
-</docinfo>
-<title>
-Options Reference
-</title>
-
-<partintro>
-<sect1 id="optionsfile">
-<title>
-Setting options
-</title>
-
-<para>
-Options may be specified on the command line or in an options file.
-The default location of the options file is
-<literal>~/.gnupg/options</literal>.
-When specifying options in the options file, omit the leading two
-dashes and instead use simply the option name followed by any
-arguments.
-Lines in the file with a hash (<literal>#</literal>) as the
-first non-white-space character are ignored.
-</para>
-</sect1>
-</partintro>
-
-<refentry id="keyserver">
-<refnamediv>
-<refname>
-keyserver
-</refname>
-<refpurpose>
-specify the keyserver to use to locate keys
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>keyserver</option> <replaceable class="parameter">server-name</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This option is used in conjunction with either
-<link linkend="recv-keys"><option>recv-keys</option></link> or
-<link linkend="send-keys"><option>send-keys</option></link> to specify a
-keyserver to manage public key distribution.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="output">
-<refnamediv>
-<refname>
-output
-</refname>
-<refpurpose>
-specify the file in which to place output
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>output</option> <replaceable class="parameter">file-name</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This is a description.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="recipient">
-<refnamediv>
-<refname>
-recipient
-</refname>
-<refpurpose>
-specify the recipient of a public-key encrypted document
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This is a description.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="armor">
-<refnamediv>
-<refname>
-armor
-</refname>
-<refpurpose>
-ASCII-armor encrypted or signed output
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This is a description.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="no-greeting">
-<refnamediv>
-<refname>
-no-greeting
-</refname>
-<refpurpose>
-suppress the opening copyright notice but do not enter batch mode
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-This is a description.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="local-user">
-<refnamediv>
-<refname>
-local-user
-</refname>
-<refpurpose>
-specifies a user id to use for signing
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>localuser</option> <replaceable class="parameter">name</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-Use <replaceable class="parameter">name</replaceable> as the user ID to sign.
-This option is silently ignored for the list commands, so that it can be
-used in an options file.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="completes-needed">
-<refnamediv>
-<refname>
-completes-needed
-</refname>
-<refpurpose>
-specifies the number of fully-trusted people needed to validate a new key.
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>completes-needed</option> <replaceable class="parameter">n</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-A public key on your keyring is validated using those signatures on
-the key that were made by other valid keys on your keyring.
-The option specifies the number of signatures needed if you fully
-trust the owners of the keys that made the signatures.
-Your trust in a key's owner is set with the command
-<link linkend="edit-key"><option>edit-key</option></link>.
-</para>
-</refsect1>
-</refentry>
-
-<refentry id="marginals-needed">
-<refnamediv>
-<refname>
-marginals-needed
-</refname>
-<refpurpose>
-specifies the number of marginally-trusted people needed to validate
-a new key.
-</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
-<option>marginals-needed</option> <replaceable class="parameter">n</replaceable>
-</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title>
-Description
-</title>
-
-<para>
-A public key on your keyring is validated using those signatures on
-the key that were made by other valid keys on your keyring.
-The option specifies the number of signatures needed if you marginally
-trust the owners of the keys that made the signatures.
-Your trust in a key's owner is set with the command
-<link linkend="edit-key"><option>edit-key</option></link>.
-</para>
-</refsect1>
-</refentry>
-</reference>
-
diff --git a/doc/gph/manual.sgml b/doc/gph/manual.sgml
deleted file mode 100644
index f573bfd4f..000000000
--- a/doc/gph/manual.sgml
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--
- ToDo
- - acknowledge Joergen Grahn for his xfig version of Figure 3.1
- - 'inlineequation' marks places where formatting is ok now but not
- semantically correct.
- - need some story for formatting math
- From Tom Goulet (tomg@iaw.on.ca):
- > and the <SUP> tag doesn't seem to do much under Lynx, consider just
- > using a ^ to show powers.
- -->
-
-<!DOCTYPE BOOK PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
-<!--ArborText, Inc., 1988-1995, v.4001-->
-<!NOTATION drw SYSTEM "DRW">
-<!ENTITY gpg "<application>gpg</application>">
-<!ENTITY gnupg "GnuPG">
-<!ENTITY Gnupg "GnuPG">
-<!ENTITY eg "e.g.">
-<!ENTITY ie "i.e.">
-<!ENTITY chapter1 SYSTEM "c1.sgml">
-<!ENTITY chapter2 SYSTEM "c2.sgml">
-<!ENTITY chapter3 SYSTEM "c3.sgml">
-<!ENTITY chapter4 SYSTEM "c4.sgml">
-<!ENTITY chapter5 SYSTEM "c5.sgml">
-<!ENTITY chapter6 SYSTEM "c6.sgml">
-<!ENTITY chapter7 SYSTEM "c7.sgml">
-]>
-<book>
-<bookinfo>
-<title>The GNU Privacy Handbook</title>
-<date>
-August 25, 1999
-</date>
-<copyright>
-<year>1999</year>
-<holder>Free Software Foundation</holder>
-</copyright>
-<abstract>
-<para>
-Please direct questions, bug reports, or suggesstions concerning
-this manual to the maintainer, Mike Ashley (<email>jashley@acm.org</email>).
-Contributors to this manual also include Matthew Copeland and
-Joergen Grahn.
-</para>
-
-<para>
-This manual may be redistributed under the terms of the
-<ulink url="http://www.gnu.org/copyleft/gpl.html">GNU General Public
-License</ulink>.
-</para>
-<para> <!-- I have added this note (wk 06.09.99) -->
-PLEASE NOTE, THAT THIS IS A DRAFT VERSION OF THE MANUAL AND NOT A COMPLETE
-AND CORRECT MANUAL. CONSIDER IT AS WORK IN PROGRESS. The latest draft of
-the manual should be available online;
-<ulink url="http://www.gnupg.org/docs.html">www.gnupg.org</ulink> has a link
-to it.
-</para>
-</abstract>
-</bookinfo>
-
-<toc></toc>
-
-&chapter1
-&chapter2
-&chapter3
-&chapter4
-&chapter5
-&chapter6
-&chapter7
-</book>
-
diff --git a/doc/gph/signatures.fig b/doc/gph/signatures.fig
deleted file mode 100644
index 57fdfe6f6..000000000
--- a/doc/gph/signatures.fig
+++ /dev/null
@@ -1,44 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Inches
-Letter
-100.00
-Single
--2
-1200 2
-6 600 300 9450 2625
-6 1500 300 9450 2625
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 1575 1050 2475 1950
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 3675 1950 4575 1050
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 5775 1050 6675 1050
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 7875 1050 8475 1050
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 3600 525 4500 1050
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 3675 1950 5100 2550
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 5175 1200 5625 2325
-4 0 0 100 0 14 18 0.0000 4 180 825 6825 1125 Elena\001
-4 0 0 100 0 14 18 0.0000 4 180 825 8625 1125 Geoff\001
-4 0 0 100 0 14 18 0.0000 4 180 825 4725 1125 Chloe\001
-4 0 0 100 0 14 18 0.0000 4 180 825 2625 525 Blake\001
-4 0 0 100 0 14 18 0.0000 4 180 990 2550 2025 Dharma\001
-4 0 0 100 0 14 18 0.0000 4 180 1155 5175 2625 Francis\001
--6
-2 1 0 3 0 7 100 0 -1 0.000 0 0 -1 1 0 2
- 1 1 3.00 90.00 180.00
- 1575 1050 2475 450
-4 0 0 100 0 14 18 0.0000 4 180 825 600 1125 Alice\001
--6
diff --git a/doc/gph/signatures.jpg.asc b/doc/gph/signatures.jpg.asc
deleted file mode 100644
index 99f04e394..000000000
--- a/doc/gph/signatures.jpg.asc
+++ /dev/null
@@ -1,232 +0,0 @@
------BEGIN PGP ARMORED FILE-----
-Version: GnuPG v0.9.11 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-Comment: Use "gpg --dearmor" for unpacking
-
-/9j/4AAQSkZJRgABAQEAUABQAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkS
-Ew8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJ
-CQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
-MjIyMjIyMjIyMjIyMjL/wAARCACxAogDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
-AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
-MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
-Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
-mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx
-8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
-AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
-YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
-anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
-xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3
-+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiub8Z+MrbwRpaan
-f6bqV1Zl9kktlGjiEnG3fudSAScA8jPBwSM5+i/Emx1bxBa6LcaH4g0i7vEka1/t
-Sx8lZig3MqnceQvPpx1yQCAdpRXH6V4y1G7+Id74U1HQPsHk2kl7b3X2xZftEIlE
-atsC/Lu5OCcjGMV0Gp67o+ieV/a2q2Nh52fL+13CRb8YzjcRnGR09RQBoUVyfi7x
-NfWfgO78Q+EhpuqmBDN5jT7ovKQnzGUqcOQFPG4dDySNpuaF4x0fW7XTF/tCxh1O
-+tIrn+zvtaNMm+ISbdvDHCnOcDjmgDoKKy9S8S6Do1wtvqmt6bYzsgdY7q6SJiuS
-MgMQcZBGfY1qUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
-FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
-FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
-FFABRRRQAVz/AIk8ceGvCPljXNXgtJJMFYcNJIQc4bYgLbflI3YxkYzmjxZ400Lw
-Vpy3mtXflebuEEKKXkmZRkhVH4DJwoJGSMivnTxl4Z8X/EB5/Htr4TktLS6SDZbw
-ytNPOu3YJQnUj5V6KvylSAw3PQB29/8AHy+1zVLPSfAnh2S5vLhwoOoDlj82VCI2
-AAMNvL4ADZAAzXsmh2+o2mh2UGr3v23UliX7TOAoDyHltoVVG0HIHAOAM85Ncn8M
-/hnY+ANLLuY7nWrhALq7A4A6+XHnkID36sRk9AF7ygDzf41zXlx4EuNDsNF1XUbr
-Utux7G1MyReXLG58wjlcjOODnBrj/B2j6jL8XNI1a1s/GUlnFaTR3lx4qtlLxLtb
-b5Up9WYDaoDD5uSrNj3iigDxf/hMLz/haf8AwlH/AAg/jL7D/Yn9n+X/AGSfM8zz
-/MzjdjbjvnOe1SfFZtc1PWdHNrpF3Popsmljnh8ORalOJmYZR45sGIbQh6Kc5BBx
-8vslFAHgfhNtS0n4UeNtKufDfiD7Xe3E4tUXRmiM32iLYpEacIF2EsB8qgqASSBR
-4A0G58I+ILCDxD4Ru9bfUreyuLbVhYPLJpr4VRDJv4iEeOqkEBVyDwE98ooA+ZNZ
-8JeKbbVNYg16DWdQnvLiVhfWvhi21EzxH5FcSl90JwvEYI2DGMZr2/4aWs1j8PNI
-tJ21IvCkiD+0rcwThRIwUNGWbaAuAoyflA6dB1lFAGXrniPSPDVvbXGs30dnBcXC
-20ckgO3zGBIBIGFGFJ3HAGOSK0IJ4bq3iuLeWOaCVA8ckbBldSMggjggjnNU9Z0P
-S/EOnPYavYQXtq2TsmTO0kEblPVWwThhgjPBryufwV43+G1vLd+BdZk1bSYULtou
-oqZGAA/5Z7cZO5nchPLJwB854oA9korh/B3xS0Lxdef2UVn0zXU3LLpt4hVwyAbw
-p6Ng7hg4b5WJUAV3FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
-FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
-FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVz/izx
-poXgrTlvNau/K83cIIUUvJMyjJCqPwGThQSMkZFAHQV5P4i+LFxq2oyeGvhxZ/2z
-q7xSFr1SBDalTgsC4Cv3wxITJTBfO2stNN8afGZEm1dpPDfg6ZIporOMrJLd4bOS
-2AcHkgsNv+rIRvvV6xoHhzSPC2lrpui2MdpaBy+xSWLMepZmJLHoMkngAdAKAOL8
-J/Ce307WG8S+Kbz+3fEskq3H2iQERwOFxhFzhsHoSBgKm1UxXpFFFABRRRQAUUUU
-AFFFFABRRRQAUUUUAFFFFAHJ+M/hz4c8dIjavbSLdxJsivLd9kqLuBxnBDDrwwON
-zYwTmuHGpeP/AIWXDrrC3fi/wuqKft0Y/wBItuS0jMCWYgAN94lcbPnTla9kooAw
-/C/i7RfGOlpf6PexzAorSwFgJYCcjbImcqcq3scZBI5rcrzPxR8G9IvnfVfC0knh
-3Xo0YwTWMhhiLbQuGVfuAqCMpj7xJDdDn2fxQ1rwdqkGi/EzTo7QSI/kazaAvFOE
-wMlFBOSQScYI3plFBzQB65RXPt458LLqOmWA16xkuNT3fYxFKHWXBK/eXKjLAqMk
-ZYEDJGK6CgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
-KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA
-KKKKACiiigAqnqt+2maXcXyWN3fGBN/2e0VWlcd9oYgE45xnJxgZOAblcf8AE7Vd
-Y0vwNe/2BYX15qd1/osP2KF5Hh3A7pPkIZcKGww6MVoAj8D/ABP0Hx9cXlvpcd3B
-PaortHdhFZ1JIyoV2JAIAJ7bl9aku/GWo2PxH07wxc6BssdS837JqX2xT5nlw+Y/
-7oLkYJ28kZ6ivLLHTPEfw88S+FdYtLfWdetH0z7Pc2dtoP2d7W1Y71Rtu5TLvZnI
-yGymGbDZro/FfiW8k+Jnh3UYfB3iua10CW+iuJItMLCbzEEatEQcMuRnJxwRQB6Z
-4h1y28PaNPf3E1ojqjCCO6ukt1nl2krGHc4BbHXtye1WNJvW1LRrG/eKOJ7m3jma
-OOZZlUsoOA68OBn7w4PUVwfxB1q31fwCsR8H65qU2p2k5tov7JLvYzhCqtKrcxsC
-5wwBzhiCRgk8J6pf618PG8MW+k65omr2uiLaxXOoWclvGZRF5e5JBnGGwezYOQDg
-4AOsn8aeFbW4lt7jxLo0M8TlJI5L+JWRgcEEFsgg8Yq5qeu6Ponlf2tqtjYedny/
-tdwkW/GM43EZxkdPUV4fYabo48IW3hnUPhLrjazFshluILJAk8ySA5N4eVjcj5mH
-CqxCnABpnjbw34ph8eavqF/FqWo2d26iwmt/DttqoWJRny9jtmEKX25wPMIZjzQB
-7/BPDdW8VxbyxzQSoHjkjYMrqRkEEcEEc5qSvO/gxpk2j+CprKX+2Qkd7IYk1axN
-o6KVQ4RN7/JuLHIIyS3Hc7nxC8LXHjPwXfaJa332Oaba6sygpIVIYI/BIUkDleRg
-HkZUgHH+IvixcatqMnhr4cWf9s6u8Uha9UgQ2pU4LAuAr98MSEyUwXztrQ8J/Ce3
-07WG8S+Kbz+3fEskq3H2iQERwOFxhFzhsHoSBgKm1UxWX8G/EVjptvJ4C1DS49E8
-Q2DsZID/AMvhxkyAknc+3BIyQVAK/LwvrlABRRRQAUUUUAFFFFABRRRQAUUUUAFF
-FFABRRRQAUUUUAFFFFABVe+sLPU7OSzv7SC7tZMb4Z4xIjYIIyp4OCAfwqxRQB8c
-eMPh54p0u8uNRfwdPpmmvvkSG1lN2lvGgGd8gZiOOSzYB5wABger/B74w/2r9n8M
-+Jrn/iYcR2V9I3/Hz6RyH/np6N/F0Pzff9wrj/H9h4G/sd9R8aWlj9n+SAXMsZ87
-725URk/edcnC9t2eM0AdhRXl/gXx1qnjrxGBotlPZeEdNiCvc3i+ZPdS7MCIuXOM
-bg5I3N8g3MPMxXqFAHn9/wDFjTv9JXw9oeueJPJ3x/aNMsmktvOGf3Zl/wC+TuUM
-MMCM1n3/AMVrhYPCev2OnQJ4V1i7NpdXN9MI5oH3sgJAJVVGxnzlsgEHZwTn+Dtc
-134caDB4V1rwVrl59i3mC90eIXcdwrSyMScbdnUYBO4jkheMx+Pr6bVPD/hC2XwR
-rPkQ6nDfzabDpxmWKzjLosbhRsDshB8r+HkNjjIB6xpurabrNu1xpeoWl9ArlGkt
-ZllUNgHBKkjOCDj3Fc34N8Zaj4j1jW9J1bQP7GvtJ8jzIvti3G7zVZhyqgDgA8E9
-e2K5PwncL4a+IfjloPCWs2mmzpG1kttpTLFKbaNw6ptG3LnJToGz1BIBr+G/FlzZ
-fEPxPrF14N8XRWetPZLC50hyYRFGUdpACTjJz8u44HTPFAHqmp67o+ieV/a2q2Nh
-52fL+13CRb8YzjcRnGR09RVj7fZ/2d/aP2uD7D5Xn/afMHl+Xjdv3dNuOc9MV5P4
-j07+yfihqes+IPBl94p0y/tIo9Pe0tvtv2PYAHjMTfKu5stu+uM7nxzk/gnxoPhl
-ZpaW93aWJ1iTUG0JQt08FmQrorJKR5hRkY+TzvMgLAMCAAe56Zruj635v9k6rY3/
-AJOPM+yXCS7M5xnaTjOD19DWhXz/APDvRL23+Jmm6lJbeI7X91LDIH8Lx6bbOmxy
-BI0Um372CMqckKOwx9AUAFFZ+t6V/bejz6d9vvrDztv+k2E3lTJhg3ytg4zjB9ia
-4/8A4VZ/1Pvjn/wcf/YUAegUV5//AMKs/wCp98c/+Dj/AOwo/wCFWf8AU++Of/Bx
-/wDYUAegUV5//wAKs/6n3xz/AODj/wCwo/4VZ/1Pvjn/AMHH/wBhQBqJ8TfBbazd
-6S/iC0t7y0d0mW63QKrI21gHcBSc9gTnkjgV1EE8N1bxXFvLHNBKgeOSNgyupGQQ
-RwQRzmvli6+CfjTVvFWofZ7WQWD3twI9R1O5XdIquwDuBlyWxnOzncD0Oa7fwl8A
-dS0a4ivbvxhd2M7IyXEejFomK54AmJBxkISCnbHoaAPdK5vxn4ytvBGlpqd/pupX
-VmX2SS2UaOIScbd+51IBJwDyM8HBIzsaVYNpml29i99d3xgTZ9ou2VpXHbcVABOO
-M4ycZOTkng/jXNeXHgS40Ow0XVdRutS27HsbUzJF5csbnzCOVyM44OcGgC5ofxV0
-3XPEFhow0LxBYT3zzJBJf2ixRs0IYyDO8nKlSpABweDirmleMtRu/iHe+FNR0D7B
-5NpJe2919sWX7RCJRGrbAvy7uTgnIxjFcH8OJtS0fxPa6XaeH/ED2d9e3t1eapr2
-lNFPErxoVQShyCWaEb2IG47eAak/4TC8/wCFp/8ACUf8IP4y+w/2J/Z/l/2SfM8z
-z/MzjdjbjvnOe1AHrmpatpujW63GqahaWMDOEWS6mWJS2CcAsQM4BOPY1H/buj/2
-P/a/9q2P9mf8/v2hPJ+9t+/nb97jr14rxv4l6J4kv/GMOuompX2gy2SLaRRaFDft
-au2CyG2mYFSdm4yFQRkIelUPD+lzaX8PvHFpNpHie9Opoot7G48PG3UXDiTDxRI7
-qApCMSAoXYgGTtFAHt+m+JdB1m4a30vW9Nvp1Qu0drdJKwXIGSFJOMkDPuKjvvFn
-hvTLySzv/EGlWl1HjfDPexxuuQCMqTkZBB/GvH9Esv7P8R/DK6tPBGq2cltaSRap
-PHpXlkyOn2cNKw9GVnJbkI4bqSKyPHlh4n1PxH4k+1aDfGR5ZIrQ2XhSC7SaEIFi
-Y3RPmKxGMkZKdsEbQAfR9Fc38P3mb4faAlxZXdlPBZR28kF3EY5FaMeWSVPIBK5H
-qCDXSUAFFcfrfgD+29Yn1H/hLfFdh523/RrDUvKhTChflXacZxk+5NZ//CrP+p98
-c/8Ag4/+woA9Ark0+JvgttZu9JfxBaW95aO6TLdboFVkbawDuApOewJzyRwKy/8A
-hVn/AFPvjn/wcf8A2FeKXXwT8aat4q1D7PayCwe9uBHqOp3K7pFV2AdwMuS2M52c
-7gehzQB9TwTw3VvFcW8sc0EqB45I2DK6kZBBHBBHOakrwvwl8AdS0a4ivbvxhd2M
-7IyXEejFomK54AmJBxkISCnbHoa9o0qwbTNLt7F767vjAmz7RdsrSuO24qACccZx
-k4ycnJIBl+K/GOl+D7O3lv8Az57i6lENrZWieZPcOSBhEyM4yM89wOpAOHpHxPh1
-PxZZaDceGfEGlvfoxtZtRtRCJGRWeQYJ6BQuCM5LcgYBJ48sNXi8T+FfFOm6ZJqc
-Givdfa7WBwJzHLGFLRqeHICn5Qck7QOpI5PTtV+IfiTxp9msr7xHpekT/aZXfUfD
-9vbizXB8lVZt3m4YqCOGIBPqVAPVJvEug22qDS59b02LUC6oLR7pFlLNjaNhOcnI
-wMc5FWNS1bTdGt1uNU1C0sYGcIsl1MsSlsE4BYgZwCcexr5gn8H+IVsJdM17TPEB
-vHcvcy2nha3vmZmffkXgkDuTkZOeMlegr0PXNKvLfWPCGv614d1XxTo0OiJaSWrQ
-GW5guiu4zS2zEgswwrZJwRycqmQD1yHVtNudLOqQahaS6eEZzdpMrRBVzuO8HGBg
-5OeMGvN/DnxfvPFOs2drpvhu0NpdXBRHk123W4WIMQ0ht/v5CgttGeBwSOar+DdK
-Wx0vxjrGo+E7u28N6hcRzWXh17Vp5SUyGb7NghS7bCB0XaOQiq1U/hAlnplno2lX
-/gHVbTXY/P36xPo4jRcmRhmY/MMoQnTvjpQB0njP4pxeGfEqaDYafaaheLb/AGi4
-NxqsNkkIJAVd0nBcj5tvBwVIyCcdh4c1O71nw/Z6je2MdjPcIX8iO6S5ULk7SJE+
-Vgy4bI9a8j1yPS7b4v3upS/DrVdU0kae1tJ5Gg+Yk12Zt7TAMAG4JXf1PbIIJ9k0
-l4ZNGsXt7KSxga3jMdpJEImgXaMIUHClRxjtjFAFyiiigAooooAKKKKACiiigAoo
-ooAKKKKACiiigAooooA4f4ifDu38a2cV3aTfYPENjh7G/QlSpB3BGI5255BHKnkd
-w2f8O/iJcaveS+FPFcP2DxZY5SSNwFF2AM71xxuxyQOCPmX5chfSK4f4ifDu38a2
-cV3aTfYPENjh7G/QlSpB3BGI5255BHKnkdwwB3FFeb/Dv4iXGr3kvhTxXD9g8WWO
-UkjcBRdgDO9ccbsckDgj5l+XIX0igAooooAKKKKACiiigAooooAKKKKACiiigAoo
-ooAKKKKACiio554bW3luLiWOGCJC8kkjBVRQMkkngADnNAEd/N9n065n+0wWvlxO
-/n3AzHFgE7nGV+UdTyOB1HWviTUrvWvF3ipYrjUZNY1C5uBbQSs5CyFnO0JvC7EL
-NkDCgZ6Cvc76+1T4465JpWlST2HgWxlAu7wLte9cYIVQfwIU/d4dhnYg9csPDei6
-Xb6dBZ6XaRJpqMlmfKBaAMMNtY8gt/Ec5bvmgCn4L8J2fgrwva6LZv5vlZeacoEa
-aRjlmIH4AZyQoUZOM10FFFABRRRQAVy/j/xZceCfC765BpX9pRwyok6faBD5aMcB
-8kHPzFRgD+LPQGuoqnq2mw6zo19pdw0iwXtvJbyNGQGCupUkZBGcH0NAElhfW+p6
-dbX9nJ5lrdRJNC+0jcjAFTg8jII61Yryv4H6lNDomreD7tYzd+G72S3aSEHY6s7n
-IJOSd6ydhxt75r1SgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
-gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
-gAooooAKKKKACiiigAooooAKKKKAOH+Inw7t/GtnFd2k32DxDY4exv0JUqQdwRiO
-dueQRyp5HcNn/Dv4iXGr3kvhTxXD9g8WWOUkjcBRdgDO9ccbsckDgj5l+XIX0iuH
-+Inw7t/GtnFd2k32DxDY4exv0JUqQdwRiOdueQRyp5HcMAdxRXm/w7+Ilxq95L4U
-8Vw/YPFljlJI3AUXYAzvXHG7HJA4I+ZflyF9IoAKKKKACiiigAooooAKKKKACiii
-gAooooAKKKjnnhtbeW4uJY4YIkLySSMFVFAySSeAAOc0AE88Nrby3FxLHDBEheSS
-RgqooGSSTwABzmvE76+1T4465JpWlST2HgWxlAu7wLte9cYIVQfwIU/d4dhnYgL6
-+1T4465JpWlST2HgWxlAu7wLte9cYIVQfwIU/d4dhnYg9k0rSrHQ9Lt9M0y2jtrO
-3TZFEnRR/MknJJPJJJOSaADStKsdD0u30zTLaO2s7dNkUSdFH8ySckk8kkk5Jq5R
-RQAUUUUAFFFFABRRRQB4/wCLv+KI+NuieLW/caRrMX9n6jMOQJMYUuz/ACxrxCcg
-g4ic4659gri/ir4XXxZ8PtRtFjke7tkN5aCNGdjLGCQoUEbiylk7/ezgkCrHw28U
-N4v8B6bqs8kbXmww3e11J81DtJYAAKWAD7cDAcdsGgDrKKKKACiiigAooooAKKKK
-ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK
-ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4f4i
-fDu38a2cV3aTfYPENjh7G/QlSpB3BGI5255BHKnkdw2f8O/iJcaveS+FPFcP2DxZ
-Y5SSNwFF2AM71xxuxyQOCPmX5chfSK8H/aH0XVNR+wXtl4b8+1tIi0+qw/PIo+Ym
-NlU5EahSxZgQC3BXncAe4WN/Z6nZx3lhdwXdrJnZNBIJEbBIOGHBwQR+FWK+aPgD
-46TR9Yk8K3xxa6nL5lrIWVVjn24IOcE7wqqOT8yqAPmJH0vQAUUVX+32f9o/2d9r
-g+3eV5/2bzB5nl5279vXbnjPTNAFiiiigAooooAKKKKACiio554bW3luLiWOGCJC
-8kkjBVRQMkkngADnNABPPDa28txcSxwwRIXkkkYKqKBkkk8AAc5rxO+vtU+OOuSa
-VpUk9h4FsZQLu8C7XvXGCFUH8CFP3eHYZ2IC+vtU+OOuSaVpUk9h4FsZQLu8C7Xv
-XGCFUH8CFP3eHYZ2IPZNK0qx0PS7fTNMto7azt02RRJ0UfzJJySTySSTkmgA0rSr
-HQ9Lt9M0y2jtrO3TZFEnRR/MknJJPJJJOSauUUUAFFFFABRRRQAUUUUAFFFFABXj
-/gr/AIoX4w6/4Qn+Sx1r/iZaWqfLGv3iyLGuQvAZcnbkQDjlQPYK8n+NtjcaXZ6P
-460mPbqeh3aCSQMFDQOcbXxhmXeVXaD0lfjkkAHrFFV7C+t9T062v7OTzLW6iSaF
-9pG5GAKnB5GQR1qxQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
-QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
-QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5X4z+CWkaw6al4YaPw/rEL+aj26lYn
-ZVGz5VI8shlU7kHGWJDEjHcaXbavf+DlsdekktdUe3e2ubizmG4sMp50bBQFLACQ
-cDbuAxxW5Ve/tft2nXNn9ont/PieLzrd9kke4EbkbswzkHsaAPC/D+ja1ffB/wD4
-TZPHHiePVre3uLxY5L4y25MEj/KY26grHjkkZPII4NzXEv7/AMY/DXxPoVnpUHib
-WdPmlne5EiwSEWyH5gpLcK7gHr90EkAY6SD4JaLDYRaY/iHxPPpKOGbTZNQAt3Af
-ftKKg4Lc8YOeQQea3L/4d2F/4o0rXf7V1W2bSdgsbK1ljitoEUAFFQJnawGG55HG
-cAAAGfonjq/ufA3iTUtaOlWGpaJd3VjJNuk+yNLGBtbH39pZlXAyx7ckKOb8FfFz
-VNd8b6doV3ceH9QgvkmHmaXFdRNAyIXBbz1AYEKRgfXIxg9JZfCPR7XR9a0mbWNc
-vbHWPnuoru5Rv324MJgQgIkyAckkNgbg2BgtvhPZwa5purzeKvFd7dadL5tv9r1A
-SAZxuXlM7WAwwBGRxQBl6r4t+I1t4/uPC2naV4fvHlt/tlpLvkQQW5n2B5ssNxCg
-5VBnLAjOCpk1nxJ8R9M1zw1oaR+FGv8AV4rjc5W4MSyRbnODnIUxmPHBO7d0GK0L
-/wCE9nfeIbnXP+Eq8V299PvXfb6gE8uNnL+Uh2ZEYJ4XOBWpqfgK21bxLomvXWta
-z9s0hFWERzoiSEHLs6hMZcfK+3aCABgCgDg/Cvxe1vUrG+l1xNDslbRJdUsrkeas
-cZSZoAsq5YtucDAQ5xgDJbAk8FfFzVNd8b6doV3ceH9QgvkmHmaXFdRNAyIXBbz1
-AYEKRgfXIxg6i/Arw35EdvLquuS28Vo9msRuI0Xy2dpADsjBbEjeYNxI3BcggYrQ
-tvhPZwa5purzeKvFd7dadL5tv9r1ASAZxuXlM7WAwwBGRxQB6BXz/wDEfxV/wlHx
-FHgXWtT/AOEc8O2sqfapHOXvGO1lyVyqqdwI3EKv3m5AQfQFZ+s6HpfiHTnsNXsI
-L21bJ2TJnaSCNynqrYJwwwRng0AGh2Ol6dodla6JHBHpiRKbYQNuQoeQwbndnOd2
-TnOcnNaFeT3Pwj1Tw9uufh74rvtKk815fsF5J5toxbC9MHGFzyyuTheQRmo4Pit4
-j8L3EUHxH8KyadBO4Eeo2A8yBNxwFYBmGQFkY4YtgDCd6APXKKx/D3irQvFdmbrQ
-9TgvY1++EJDx5JA3IcMudpxkDOMjitigAooooAKKKKACiiigAooooAKp6tpsOs6N
-faXcNIsF7byW8jRkBgrqVJGQRnB9DVyigDyv4H6lNDomreD7tYzd+G72S3aSEHY6
-s7nIJOSd6ydhxt75r1SvF/G99b/D3426N4rnk8jTNYtHtdQMamR2KADcVPRRm3Py
-c/u24Ofm9Y0TW9O8R6PBq2k3H2ixn3eXLsZN21ip4YAjkEcigDQooooAKKKKACii
-igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
-igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
-igAooooAKKKKACiiigAooooAKKKKACiiigAooooA871v4N+HL6//ALU0WS78Oaoi
-OI7jSpPKUMU2glBwAB1CFN25snnNYf8AaHxa8C/ubrToPGGkQdLmAlbtk+4ikD5i
-wwrMdkn3jlz1HsFFAHD+GPi34O8VSw21rqf2W+m4W0vV8pyd20KDyjMSRhVYk56c
-HHcVzfivwH4c8Z25TWdOjknCbY7uP5J4+GxhxyQCxO05XPJBrh5vBfj/AMDuJ/BP
-iCTWtPRFQaPrD7iqqoVQjEgADczYUx8Ko+bpQB65RXlem/Gi00+4bS/HmlXfhzVI
-kJZmieSCbBC7k2gtgsHxgMuF++a9Msb+z1OzjvLC7gu7WTOyaCQSI2CQcMODggj8
-KALFFFFABRRRQAUUUUAfP/7QPgD/AJnTTo/7sephpf8AdSJ1U/gpwf7px941ufs3
-zwt4F1O3WWMzpqbO8YYblVoowpI6gEqwB77T6V7BPBDdW8tvcRRzQSoUkjkUMrqR
-ggg8EEcYrzf4deCz4E8a+KbCJJDp9+kF1YusMmxIw0oMTOcjeu5RgsSwIb1AAPTK
-KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
-KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
-KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAr
-31hZ6nZyWd/aQXdrJjfDPGJEbBBGVPBwQD+FeZ3nwaXSXnvvAniDUvD94zpILfz2
-ktZCinarg/MQW5JYuACw2kHFeqUUAeP/APCxPHPgj/kffDH2nTE/d/2rpWG+78u9
-1ztG9imM+V1OAfuiSP8AaC8LnxZNp0qSLo4TMWrLvYM20HDRbA6jO5cjPIHGDkeu
-V88az+zjrEu+6s/FMF/fTSl5jfQPFuzksxcM5LZx1HOSc+oB9BwTw3VvFcW8sc0E
-qB45I2DK6kZBBHBBHOakrw/wj4S+KPw22/ZvsPiHTGzG2lR37J5edzB0aVVVPmPO
-M7t3I6MvsF9Zf25oclrM99p7XMQyYJ/KngY4PDoSAwPoSpxjkHkA0KK+YPAq+JPG
-9wNLi8WeK7O/fTxeLdT6jIIDtuvLkKJ1kXyyMfMv7xGBODx6n408W+OtA8Z2OlaP
-pWjalb6qkw0+Eu6T7o4gzGRmYIAGbOB1UYyCc0AemUVwer+I/EvhbwHe6l4kvvDF
-pqwuFS1dRcNaspK8MoBkZ8eYcKDwAegNY/w2+J2oeLfFV3ot7Jo12iWX2uO60tLi
-NVIcIUZZgCT8wORgDHfPAB6pRXibfEn4g2Wia1r15Z+GJdP0PUzp97DD9oSWVldE
-byySQAd4wT7/AC9j2ninxT4gj8W2XhTwpY2MupyWhv7i51JmEEUAYoOEO4sXAHHT
-I4OSVAO4org9Kv8A4lXNv4gtb2x8Pw6haPAmn3AWcWs5YBpc5O8hVIAIAG7I5wcS
-fCC4iu/hbo08NlBZRt5+IIC5RMTyDguzNz15J6+nFAHcUV4f4q+LnivRvEOo2EVr
-odj5V2YLK01OG5Sa5j37BMJPlhEbHccllAAPJxk+4UAFFFFABRRRQAUUUUAFFFFA
-BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
-BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
-BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVn63pX9t6PPp32++sPO2/6TYTe
-VMmGDfK2DjOMH2JrQooA5PwZ4CtvA6PBp+tazc2bJtWzvZ0kijO4tuQBAVOS2cHB
-zyCQCKfiH4ZWfiPxGNcm8R+I7S6j/wCPdLO+EaW2UCN5QKEpuA+bB5ya7iigDl9V
-8D2et+F7LRNR1TVZmsZY57fUftAW7SRCdr7woBYAkZKk9/vfNWXpfwuttK8QLrie
-KfE9xqCW72yy3d6k3yMDwd0fIVjvAORuAJBrvKKAPN/+FM6O2h6hpEniDxHJa6hd
-peXO+8QmSRd2SfkwdxYFsgklEOflrY1r4c6XrkWkyS3+q22p6ZEIYdWtbnZeOm0q
-Q8mDuzkk8dScY3MD2FFAHDp8M7ePTprdfFPisXU0sbyah/aZ+0siBwsW7bjywZHb
-GOp68CpPCXw4tvBlxE2neIfEEtpGjILC6uke3wxycJsG07ucrg5z2JB7SigDzf8A
-4UtoXkfYf7b8R/2N5vmf2R/aJ+ybd+/Zt2525993fOea9IoooAKKKKACiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==
-=ao7I
------END PGP ARMORED FILE-----
diff --git a/doc/samplekeys.asc b/doc/samplekeys.asc
deleted file mode 100644
index 04599e895..000000000
--- a/doc/samplekeys.asc
+++ /dev/null
@@ -1,624 +0,0 @@
-
- pub 1024D/621CC013 1998-07-07 Werner Koch <wk@gnupg.org>
- uid Werner Koch <werner.koch@guug.de>
- sub 1536g/ADF6A6E1 1999-02-20 [expires: 2002-11-01]
-
- pub 1024D/5B0358A2 1999-03-15 Werner Koch <wk@gnupg.org>
-
- pub 4096R/99242560 2002-01-28 David M. Shaw <dshaw@jabberwocky.com>
- sub 2048g/1643B926 2002-01-28 [expires: 2012-01-26]
-
- pub 1024D/B2D7795E 2001-01-04
- uid Philip R. Zimmermann <prz@mit.edu>
- uid Philip R. Zimmermann <prz@acm.org>
- uid [image of size 3457]
- sub 3072g/A8E92834 2001-01-04
-
- pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>
-
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.0.6e-cvs (GNU/Linux)
-
-mQGiBDWiIPMRBAC2D3tFzbD48fop00PiM8+du2SZ6HOgYVopP+Gtm2WBDUjkFwDC
-kw0DL9pS3iNIunHgfeuzDbm4R3lXTXjlmBxUjNVBkX4ZmRESEoaN26fsFWb1RvBg
-VcKcN+DyY4GFP9LQ8JyWifAc1+o9HnE0k40D52lBLXSf7v4JhvY9NtfE8wCg4oXT
-aCiRFPSClIko3RqJkrnpv1cEAKx32rnEog5mPPs8mW1Sy5yulCTKrbCL9S7wINtM
-cF6FJNm2PB97Vy+FGfGHKEl2KM8AC6t3CKOVGSdKvTn+9ZiPFiytohUmFaZaU19F
-jApQHZBrdx4FW+8bToRrdZhCnkUIzWdi7XlEK0Qw/TE0Pl8XLxDdCKQI+JASXvW0
-eh8wA/4nnAphsEpR1GWa4Kls7+/KO/V8Q3XLi3ZeItny+5MBDn/Y7A3u4RrNu8q3
-SRJgBvUBfUzhfSyRZhNQqpIFvhKSsbGNNVo5tARSQdUe4j1GlLRUWcWKn4F2q5j4
-6pdogYvnFYy8xrvuAUqI1QD4D/4YXJyKMH+DOHnT4iAjD9RlY7QaV2VybmVyIEtv
-Y2ggPHdrQGdudXBnLm9yZz6IRgQQEQIABgUCOdeQqgAKCRBd4kmWWwNYouphAKDJ
-YHGt9SdQTwe0FODk/1aOJap13QCdF/Y83Ku5blk0l7p9H8cicg+JPySIVwQTEQIA
-FwUCOhpQtgULBwoDBAMVAwIDFgIBAheAAAoJEGx+4bhiHMATm7kAoMBBag8scWbt
-Xcs7lhrjQOIzd2onAJ4oIuIPWnArE+6EOQBk8vceoMb/lbQhV2VybmVyIEtvY2gg
-PHdlcm5lci5rb2NoQGd1dWcuZGU+iQFfAwUQNaInDgNvEbj/PqoLEAMH3AUfSLqa
-afqtZgoV6kmFfKETjBapE8kCe9+iJZSe0OnhohDKzqU5GKBVchajiThIr8Ufn1if
-MXvnvyqtNlb9FwDRsiomrOpqqw51NgQVrj1wKO8ucFbg55smUtNSz+eeZTQVYpbw
-7DAv6kK7x3t8tJKeCAGytRDBt6m7DRwmhy0U8DPlPWdAmJ5ApWwdoI3AvZ27Rd58
-6AXm6MHWMrWrenhTKwX2ERwFH2W0TdMev6K/iO1leYLU/hq31bksVaxi7CvRTfIl
-xopIqnS//AYRZ7Yn+AVBnSEHX7flGsJk+CJawS/zsIdobpe1D7ceGKsEImxiGY6K
-RUqgRqfo+FRVHWqVcTK2kC3fz1MGe/Jx4BfyFwc4Td2K4a8gsSBh6zeDDezlmYzt
-tRfeObYGtfxZyF7FQVRAi4pbZwvfv0wVdHxNvGlXGuxFgT/iMdkFiQB1AwUQNaN3
-FB0Z9MEMmFelAQE98wL/RzGj7jFhUCmUU7SchjKNCA/sPw7S5/M+wjAXeS9vtvkU
-02N+n4MCE3obQc4iCQvcaxa0J8flQdqWL6a00UgoOlO2v4X+U+lk/c4/POwtlLiF
-hOqYyzU78AKrxrEqACKViEYEEBECAAYFAjvjfbkACgkQH+0kqpJl+vsaiQCdF17S
-Tq6vDmL904W0mD0m3m66ZOkAnjXUF+7U4s14zHRn+oR/DTG+yKI8iEYEEBECAAYF
-AjnPUbEACgkQNfZhfFE679kjigCfcLUFU4HwC2iqbCUxcIHoCg2xFPcAn2x8nlUi
-2uXjwgT2OA5sifc3XQq2iEYEEBECAAYFAjlqZ8EACgkQRxYpGYKVe2ahiACdHELx
-vEtYuKiUAuP7N2p6PB+s6R8AniXxK1c1qIsyN8S3D4hv5ygXQApOiEYEEBECAAYF
-Ajiy8lYACgkQSBf5O8XogRIOMACgpDCmckpZHGgzyzgdGb/q+YrAtPEAnjDbzLSt
-tKJxIQDqVQwZf/qZOF9HiEYEEBECAAYFAjbtTgsACgkQXeJJllsDWKJ8mgCgsSwb
-LXqFX8J+YOS7oPUIFQjFe+kAn0YECl0L/c5eKDuwGtUJY5vcxDNwiD8DBRA3blnc
-ZKpl/bHMA6oRAulaAJ9dQ/nN1j/mr7DdbZiVjg70OC1cSwCgsn1NrNKqoCoCU3TP
-mcjvDFxoWS+IWwQTEQIAGwUCNs8JNwUJCCCxRAMLCgMDFQMCAxYCAQIXgAAKCRBs
-fuG4YhzAE2kgAJ92JKU+YcYHoRhX51+4s3fnPIyNEgCfaiWeoyb15xgdO6etGiD2
-MYCWy5m5AY0ENs8HCBAGAPc1hCpuXmaTDAUbIqS9CFHkihMnilIwAV+L2Dbq5eOP
-toemPKx5+6xtZfzzY9/VCVwZCxY9Y5PEN9r/twUA478L/FOXv5E4BpX+4R91klt/
-EZGcNfDl2Ar56FpGJ3iLg4+vxx9m1TV5k2nNOUZAVD1L+MoapWhaZFXLMChrhDUc
-bo7/1Fr1Rfv9j/LkkIJJhqf3G8HzE5AvCQVSywUayYZdbmqdiY2bklZJVFAXs1X9
-zSTGoFc8eOxz6i1ZeMq+GwADBgX/T7o5R+SOTlJ72ac/g121f1kFX1dbRkQq2pCI
-95qTehp1AxdSwG3ur2slFCfi8ZDNUqkFXJrsv5mh1yfqq7zS5T6lGT5lOXCDZbAO
-2wqNZY1VKeeCdcvD2VMeh8XxJfy8y1ZK/iE1p8qnokYpA3nFH+JIsdrXk5ceiN3n
-Kk+aDamUkV1sJzeEm5F7QHe60oBKbVGIUF4EhGq6daVyeCeK4KhWuPYyiEgyaq5/
-xJZbR3uRcdW6X5AiGJWJOOQoGvWziEwEGBECAAwFAjbPBwgFCQbzyQAACgkQbH7h
-uGIcwBN5FQCggakIOYzLX3lNq2WWgcAkSNm7kpoAnA69b3z2E5vxyD3bhggVUDX7
-j8hrmQGiBDbtSOkRBACURhKnGIFyXIeX61GAY9hJA5FgG4UalV55ohdz4whBgDzD
-GLE3XYlO8HCn4ggKilll6MOwY0yZeg6PEU9Y3SqTzpQSV6qj2M7MgcS8xOpi6bNC
-u0iyZUik0KklUXMdI8e/CVmBpQJT9CofbD1dsP6z4dC6z3jil0+5Wbfw6yIXzwCg
-y/7Fagq5mN0H760/JEiiXILS1n0D/3H26lTaxo1vGput9Td1FQN7Vn6YDP0/To5i
-psOODROV3zyUwF5QleY+8zTFJA3qD5KxRfA726WELOF1mB6Mw44UdkPniOoGdMH5
-oSx6qnNnlVZBBu3U+e1qfQwLQjHu0WX4Z2q00DKpWLThGv7Loh5NKi6OfTbMhfHo
-evCAzQnmA/wKc6J8GqthENThKXxZaei3Ep0t+PlBmbUzuAYCXZhI6/0KyD6emyQ7
-LYIaPv9qEfMkMLhxicG0v/AAwOCBRKS3bkqc6wAYaO0bjUHJvem3HkWPux82t83+
-6YPyRnVjm/mwt0uEyKSvt7Md2DVrO3lEcKRkRHiYuf0nonPhl5Rs5bQaV2VybmVy
-IEtvY2ggPHdrQGdudXBnLm9yZz6IWwQTEQIAGwUCNxrPkAUJDMl8gAMLCgMDFQMC
-AxYCAQIXgAAKCRBd4kmWWwNYol3CAJ47+zjeQIsMwiwcJvYfcsLn1yULlQCfUTKu
-paT6pw5culAis/pBrdBKZciIRgQQEQIABgUCNxrRPQAKCRBsfuG4YhzAE4X0AJ43
-A7wbYbR6LTfPSD+fdBkimNvO8QCdFoSpfY+4FsKVagg/qH3KtGUARtSJAHUDBRA3
-GtFjHRn0wQyYV6UBAdGuAv9AM0o9XkmBbOLLNse8Qp9MjD8TC/oSXYxp1W9AjyRs
-83iqQ+vaZlbA/O5z2ud4I9DV4vwA50Lz5nLFbPHa+yuT8VxTl2icw5u9rZy3iSok
-3rGXzGOzENMmEFIVFqIEmPGIRgQQEQIABgUCNxrRowAKCRBot6uJV1SNzS34AKCE
-rfsfa9Nh5deJ40nxpmSI8lK17gCfRYcU6i1B1Nbg2Zkkr5SqTnBtaWCIRgQQEQIA
-BgUCN08fXQAKCRD27t8gGEvE2S2+AJ4udDl47EAnP4K+RvsWcv8qjqpzlgCeOFZZ
-blzWjeie8oQfYl7bBBrxPqKIRgQQEQIABgUCN6cm/gAKCRCYNGXbIUOUIn7JAJ9L
-LXMt+0R8u4gdmxQeKz1TQyWoswCfYQh/tMjUzk4rKxBy4UtELnwJ9x+IRQQQEQIA
-BgUCN+FBMwAKCRA2Z2DxfS7XiHnnAJ93k5kJXcvwCGLhBb8mhdRT5kHQzQCY97a7
-DtZgMs7O/jwfvq2bpzL3nohGBBARAgAGBQI4KmIPAAoJEOPyWFQSjw55Gx0An0Ue
-6lGJsE8ba3/hcOoX7GIwsv/wAJ9XkXZJHQhMTiT8L6xxLWcnUplQNYhGBBARAgAG
-BQI4PoQFAAoJEDy4klAvo7wt7aQAn0CBYasE7gZZZ7lDpIDGuq7pV/v2AKCpZLWB
-dON2nqkq1MOIkvxNo+I8BIhGBBARAgAGBQI46dJKAAoJEE3WcVrMxTeC+m8AoMKb
-rmutaoALaWkjmB1+31rex+O5AKCp/Ki0pDcTZBmCDd3jd9cE6u0qjIhGBBARAgAG
-BQI5Kja7AAoJEIG908QOH5t5ZekAn2uNClagsId37o8FesrYI0S8x+gNAJ93DOXd
-KR8kjoD7ft0rs04pj9rlE4hGBBARAgAGBQI5KnG3AAoJED4gT8kqkIcsTW8AoNSH
-nitUbZpwTUzEHSxC+nfZRvIGAJ9bPJqRoloYIvsBZWiN5Log3A4zH4hGBBARAgAG
-BQI5LjG8AAoJED2K8bIJrApqqE0AoL3BDQMJ3/ZQwwQq3I4qZvlGOFYcAJwNEQDy
-LsZGAt3GHJeBpJGwAxm+v4g/AwUQOS4q0J6y5PNpFshzEQLgTACgilmE66iRYTSJ
-nkJZPl+W9cXNaGsAmgM6Uf8sn9EnYbnThlMHgGx5E6KfiEYEEBECAAYFAjksKEYA
-CgkQs+2ENZ0bx8g7MwCfX/8HTK842/fulLtfElcW0RW9a8wAn18MUa7KTA79a6EV
-Krqa3qNLt2v1iQEcBBABAQAGBQI5Kv6BAAoJEAWcfuLwhsu1Iz8H/3KXi/WE7Oe1
-Huw2h0A1JGyl+zKI23po+RenuSKC1NX821NRyrIN1U6CKzyBdMKeiWd4/bNaD9vQ
-Ft3SKK4CgjRqs694TV1ue1c5+iY3TtjTSR2vAyxACScl6csIm4TAJXuSMDSeuE17
-1QsXSJa5CEXBSnHTOPd5B+47hAr+0G16fgWFH9WLjZNA8s3JBZNg69hQSDiZC1FI
-oP0SuBUJk47hmZpjIzNGKGRxWzfK82tAk3eS1smnq+V1LvDLWJXkG/XVJeX5SsT6
-WyIBcXsq9eMk/t8mDyVxE5SbCFu7TNIMEL8f49bEQk77xf+t/5nzDOY1iA/q2H1l
-o/0ncauofCyJARUDBRA5Lpn1EcKB1QApK4EBARqvB/9Nk6Edg2z5stFyag8CqlOc
-iVURGdZpH/kR/OtlZkIHva4fgF9chC2F/wd2rMfoG/Begl1jvt4aOAR2Eq/qECHl
-kWeMIMr4yWVJqhYg7WT+dir2MsZOcS5FRpzMyVDuauY/KmBQKE7Eg1J7mVI9CgRZ
-TvkkQusDh85pUhOla7b2n4QLCrbicLpC/MBlHE1nfcxDEiYxwA+rJSTnLg8wI+7q
-OX6fqjd3zV3LgKd9HwFZ7ws8Hgaog35HJpIFfev/cOpcFMOl42cQxZII45wcQT4j
-I32lwSjAOMWYMbAUSIEjDs1Sfowkcu0cvtTZTDly0UvTJjQ+OjDe0+oJOofrmKuf
-iQCVAwUQOUX4pCt4HizjmvPpAQE86gP/Yf56qY6Qe5nCOa1ex73/ZMPvOELl7yKT
-ohPZRxPWHsy63Ff/CyC6A6dPZfNiUdfxYO4BsitGh76unRmeFjf/awwWjfOqvx62
-bYpWMb7E4QQt2KesNjgK/yNaVHPGtsKa4E2gWo/+rWQHgfq14igx8w+KOoyqRhUZ
-N019GyLMN+qJAJUDBRA5LpoJe390GVLRyrEBAUxgA/0dWRrv3KBVNJXHtYjDlHH1
-zBh+x7i8TI2aAPEN2bz3zWI9XWiknNudVm7xtsp61iMJ/xXvlD0Jasxhk8/JHRPa
-wNO8kWR3UfKYsnIR7WBxrlNNBic3MTMrUCyRszLqGA2d8nJqHQ5HBNkhT3sZJFzm
-0EshmypsmN5bbkTquvTYiYhGBBARAgAGBQI5Mb/DAAoJEL1YtpICkSxThskAoKv3
-X28MpPW09UhfjuQ9rexmubuRAJ9EJLu2mUpM7BdXKi10HmC0ui4m/ohMBBARAgAM
-BQI5Ln4fBQMJZ1MAAAoJENeMvOVmp0sxywsAoLtChkYFfkT2YJGGmfrW24orSShr
-AJ97CvRlJ3C5VFlnME/r3feAmv4Di4hGBBARAgAGBQI5So3XAAoJEFy3t/Kgqlwe
-CicAoO+D5CGVRJIto2n33aXYU1yuxhiEAKC++kE+wyq5BAbi8YX0BAUxfRXtmokA
-lQMFEDljXQjvbYJB8IEZXQEB1d0D/iNMwOG2MJMrziMiIokV6UvbgqtG3AEltb5E
-8CGTS3wO8cbqrx+yIv3ZKLn3HAR8vt5KRkQe7qxi/hFaIpPuMXky85TrbXyZGvib
-Y0siHFyrAem/jP/EVU04Bl59nLbBRF3vU6nQP8MRn6v49p66oDtAAPNRQcmFjz+s
-XGMZfFBAiEYEEBECAAYFAjlqA18ACgkQh9ag3dpKERaGCQCguc0ldTZL7+j6Avlp
-5VIV1Cn+DC0AoI6PBkWkwmfFeNbWPgRZxOuQ+uZoiEYEEBECAAYFAjnKOwoACgkQ
-K7tDpvCerwpRBACdF1rqU4MpphmY3GWtamI9yWKCEs0An2weHB1LSl/xnAeK+Lfs
-mOobg2vKiEYEEBECAAYFAjnL/fEACgkQMsNbgEe6k1dzowCfQuX1VDigeNBsCcxK
-vdmPU54QyhwAoKqychYr/hLHqQgfVU2sETcOY/YTiEYEEBECAAYFAjnKnW8ACgkQ
-NfZhfFE679nDAQCcD20GISMXSvMu1f95S7nZipLmUbEAn3LITRjm7w/b3uqAgmgj
-KeAQqH9OiEYEEBECAAYFAjnLMiYACgkQUaz2rXW+gJep8gCgvcTvQjtCjp2vPCQ+
-9LvriWkgryYAoLWJ/1lhi6jPLY6Nlm4NVrFG+WzviEYEEBECAAYFAjnM3EcACgkQ
-3nqvbpTAnH+xDgCfU3V2BpK9VFMI8d0P/RQ7qDPU5a0AniMxEJFV0F7OySIez+aX
-KlFLHYIFiEYEEBECAAYFAjnPDvUACgkQC2MP3CMjttIBqACfc9B562R+9fgL+PV+
-VGjASJzP85MAn1rJQVVVQSLrP6SdHHbxtbPr41HGiEYEEBECAAYFAjnPykwACgkQ
-E9QuGvaKeLzbXQCgokt9SjQxh7tIOg9oJ+LckPQ6ua0An0cbFCxj+1YPvMXEG2Sb
-wMe7XmeuiEYEEBECAAYFAjnKizMACgkQF6ZBbfeUj9otwQCfUxI+VUJNs6D4216e
-mqnxhvYn3N4AoJFV214unHmOO+IieX463D7tMG0niQEVAwUQOcqYWBpPhku+30gx
-AQEmKQgAmnTtDlJoTHIJVpMR3WXl5aiRmy+FOlUvrXjrtWhYM9YZS91t4QIgnMB2
-AptITQYBcQ4FJ7jYRbpk8zig0i0GyYDjD3lmrE2+XgluhxO9qSAGuXsOUQsuq6/f
-Q0WqbnBtUQZ/CJW0CydpFfE5x8uA1TC8wrGCfPRcmfVrc8e93UtKSwWWgo4xOkiJ
-QXT0s5V/iR09pUduScTpgjLjZonAzR2NKojay2Php27GHBO/HU6Rb2ZGOVZfIsdd
-Fj9M9YNwO8L/qjnUNv48igA1yxYxybO/iDaK/6M0LjKWckPOJhUI2bDU12jpe7jA
-ui2/FwdRBLCZK9L86AcKigUfSSGXiohGBBARAgAGBQI5zFCsAAoJECDmcbCsS9oo
-iBoAmweFLJPySJaIGv2aMspXbPlppl2aAJ9faAb7oaICLW2zdvqraYpRo+09BohG
-BBARAgAGBQI50N/bAAoJEG8ji8JP2loMxJMAnRXmIq/pekWpI5w7hJg9NU6yUCrg
-AJ0XyfLgd6v6nGyRwQpx6Aza7iuIfIhGBBARAgAGBQI50gqvAAoJEL/hIGVrIUia
-opoAnjLR00eLkd2TWTNleRoUY6qQTgRsAKCQoNcdBZYYtsfF+uGIjkNwuDXQhYhG
-BBARAgAGBQI5zndTAAoJEOFd2FexXDfRWIIAn2Jx1qya4qH5U6r8drlhAPhXAOh3
-AJ9i0WYu9oGWjEAcmN7qVtzqamIKOohGBBARAgAGBQI5yjg1AAoJEPC/nJckksmN
-3fcAn07g5lMJoyO8DmpDm8oTuasN5YZCAJ0UnrVLSJw4GM71RFkRKixzIObuj4hG
-BBARAgAGBQI51EpUAAoJECnvS20UZCjxm9wAn24zywUnORPNEQlnivNU4un91BQW
-AJ4u7ej3KRtOXR6QfKTeN5ZY4Cm4lYhGBBARAgAGBQI51EpaAAoJEH6Lq0fkCp16
-ShoAnj9kolr8EMCMutP7vkv8MS/wsiH7AKCzbC4C1+igyQ0Lm3I9FyCl0VVbxYhG
-BBARAgAGBQI51EpYAAoJEPz0IFPX+kUSTLcAoIGt9RQkhVgz3lEUA1zn5D9W0cYt
-AJ9iyirYXCX63tNY3cqMg6gWQA0+cYhGBBARAgAGBQI54GWRAAoJEJ/Oxj5lCIC0
-w4IAnjVo0u/3WFb53v2pVwetMugjH9qeAJ4u1VsvgSUTtkS/8o6+Bx7sDjs5dohG
-BBARAgAGBQI5z6dKAAoJEJFazEWo9ML9kc4AniStFstXJoQolnooDIMzDzS+ADr3
-AKCkE4tq6WjxfLSV0MHIFLvXg7If2YhGBBARAgAGBQI52lYiAAoJECYzIbZBaZVr
-nfEAoPSPjJ2qNNhaTN5bz2omXssehuDrAJ4x3M0HsV3vg3YI6xToTg8bTiuBBohG
-BBARAgAGBQI5zvUmAAoJEHMKa4Nqhe7d53MAoLQ4MuRp2VN91lOciN2/oIppP/P4
-AKDDSwJvp04Dml0S4+9D/xcBwqKVY4kAlQMFEDnQ+N2248PGUGh5LQEBw1cD/0XW
-PC0AvGn5xQpjCUFSYvpx4EuUnnOMukKEYnqzFs2wtKCO8Pbb3IyHJ6VGUftYCemM
-L1OL8NQgw6AdiHqWm/lKXhbe1vbO+3+EoHbDyIdne4RFK4mulRBUFx/yovwkg9z5
-EWJVsrzS/fUuAg5kX/c+hdRtdDi8QYQjPSIwLWrkiEYEEBECAAYFAjgUDgoACgkQ
-YAeQgHPH80+3bgCfWl/hh0/ZW4u4OEW1KtIOiU7OjosAnRIisuZdS0ht51jdjrbI
-Uq7lRXDhiEYEEBECAAYFAjrBCNIACgkQt1anjIgqbEvnSACbBze4BqULiimEcIUM
-4lkErCnDocwAn18tJqdhoZgyD0B0ouLbfgJCJplKiEYEEBECAAYFAjrB0SMACgkQ
-0vCiU5+ISsi/SgCfar7RT9JPw/V1MO0rREx2SfDSIfoAoNcgtmpLWgU3kbf8wb4A
-ESQIu30xiQEVAwUQOS2iwwFVuuKglNolAQH1NggAjNw4Cg/0z+6FqCv5b/opI0E3
-oc2Z1wh+ovL6jsA9hKiq2MiQ0bdd2GmjgiojVNE5wYYm1DYjAnLVUMgKuMNQDCSn
-pFe7jghGHJZgnyT3CG2X0TdiN1FNGt1MQwyetIUH/KSIHWPf70OHQvw9BRvkHZa0
-9bk9N+WTrDzyhKuZmbLBN2O+wC19O4s64bk39+SsZZ8iDUuMONCg8HTJ2JF1aRH2
-i1wpXoWpQ6UXnVPXIWmA31PdzsJ6j/mDgnlVbH0rL24po9kB3ig2IA16rKrMC8H5
-mKnM9lvA2VDBr/0WX7LGlscRKD9NXlNjoL7a+CSO7TxLnAdq3+Yi+sQJPINro4kB
-GQQQAQEABgUCOS2T2gAKCRCVYGGm3ZNBOfDAB+MGwzHvzV0zSoFSWevq9l+prNU0
-yHKdv39AAONHvo8e/AsNTltPk3LKiXdkKxkGl6e7UkHawJoOgd+8DCmUStVv3Srd
-POSovqqce6KC9UfsmbLOf18mx7bP5OYpeTleF1fvBMvFhW9jrmTKFpO22uLScpmo
-qXmz0J4/dOnrPmPP71gi4Y04AZE8DYtnARVUScEYiZCiLP00+QocjtkIJRLhNTYM
-NW91oAW4KYz5Sz1wxyczyfSq03mLBBan9vr3G9WGzUCWpBDic45dpoX2osgImPjn
-bRf/yQJ6+GKRT7UlMRFI5rWbK3JSBXOGvjNZlKQcG5uA5OM8zEpW0xbwiEYEEBEC
-AAYFAjr1eYkACgkQ7A6vcTZ3gCW+HQCeM7uVjDTOpJequ0Z3BVeKA9V3OFcAnRZV
-ML+f+ZmH5tx+BV1TgSlXOA2TiEYEEBECAAYFAjr1mvgACgkQLBigKrTF83/VqACe
-M0Aik+REDgVsgu0cyR+2oXw808EAoJM0ojjxIgtWFWsCJUh/nyHQsleJiEYEEBEC
-AAYFAjssp/UACgkQlTDIHyPR99S8oQCfdIzgvLTu4E2h5iZ6eSzt99ASFP4AnieH
-MW2mdukyzJuddTiu1II1NksPiQEVAwUQO0HCUNImKUTOasbBAQFLZwgAkgMC/xim
-skOjL/CxghgdkSWkDFdpEr3XYhzUdLesWgN4AM28mGZZKA9la7dXXRrKYkxhX8mp
-L4C3Q9LnrafP+Zn1c8mTuNIxX86j7iZAIksoZ4D2csN8NSMYT9pKK6jZP1IOckCF
-BBI0W/yMGUGulDitWj4TwIArf2xQkV73zMKYJFhW5mSjWDx//F1zrn+x1B0pNoZW
-CPQ0gDLdEtnWO2x/aiocqkEorHwNfkWusHvEmx4MkarXPDZuLqumEWOpW6v4xOl4
-49Z9au384FST6xf9c6QjXngaSQAc3VcwC6AuTjbmiQ6+H6WGwjss5GzRNRg/LD8L
-uqaKb12tkfrZmIhGBBARAgAGBQI7RW00AAoJEOd14yTbQbOHdAsAmwXs1mCo2SJL
-911EsKPE7/sgZJw4AJwO96IG44Gh+XlQnsqM0J2GnD8qp4hGBBARAgAGBQI7SxcH
-AAoJEA6nVrUUSEP1OCcAn3HchOcEeuCeLzCYi1U7JwjsC9iEAKCoelaC999gohQn
-O/x50vgUsskGJ4hGBBARAgAGBQI7Rdj9AAoJECP6tfsIFswbylQAnR3Ea24SlXoM
-JbSnEOamFTuesu+CAJ0XOHaDol1jnHssyX917HZ8bZ94NohGBBARAgAGBQI7RfEO
-AAoJECeGwkR/ikAX5soAn1tP8xYpXSQTPrTrcwaXK3m7wqLZAJ9G3yh6wapy2NZL
-D5ZgeEPwDrGggohGBBARAgAGBQI7ScGaAAoJEFCP02O8k2g5qqQAnjyt7fxDX7sa
-l/ppjksajqFlOCmBAKDHqKC5h3R0jNUR95ZhwwVrynKFJYhGBBARAgAGBQI7TBe1
-AAoJENcNX1hgPNB4c0wAn0/S027VD6x7S2FBGyiD3GP4FC+iAJwNtcPDbyiugiNn
-SDQnSmSxSBbubYhGBBARAgAGBQI7SCdaAAoJENdZXTdLcpYlWi8AnRLlddW/rueL
-z6igUbjJq5ATAX1kAJ4l9Ej4Mw3WpASDoEQS8SNMpaj1AYhGBBARAgAGBQI7ShVN
-AAoJEJYkg+FWYsc0dG4AnRx0d9Ti17jNFMLeigC/MCr+QSviAJ9kb2IuGhw1bUi1
-KINM8q2bQQAaqohGBBARAgAGBQI7UblhAAoJEOQ7FTzLRn4nHrgAn2fkDVwZqjcN
-olNGNE5LjdblbNXEAJ9Vy61tZ/s0H/l7mZOigbreJDIhGYhGBBARAgAGBQI7V0Jb
-AAoJEHkWLzb39qrZbrEAoKFjjHUPomPUu1gAnuk2qqm1p3CZAKDtB/PvqBb2C0rV
-mmfpg1pXj/nU2IhGBBARAgAGBQI7ZzpQAAoJEMALDTYh5T69uBEAnjTka8BHWuhK
-MmPW52PQJ7cmJ9tUAJ9zGIqA/3/nk1ZS0pgyLfnKPJvRQYhGBBARAgAGBQI7SZO8
-AAoJEHgz7PG1REgVUUkAn35FdEAplXfFwa+ENMPRNagzdA8LAKCFTXbGeSjirdjM
-21dFNIToh8S7NYkAlQMFEDwGr3MXPHHnE9mHPQEBv60D/iZt13tGPf3PqtZDQqqB
-Ej7TlHtqmRWJ41qETo5ix0CHCw0OsDF1Y1kzjwfax5Fte49YLGVlcfYhldAQ+D3q
-ha0MceKQPtVFg0rcBij72QcMznYXSDtEYD7TAlNtcAPCr/VjHQBziBN6dAok2Tt8
-sztsdcwJfk+9LANB2vX2qaJNiEYEEBECAAYFAjxw4+EACgkQGM0lpSLzivOYuACe
-IyfkTvjVxQnVP21FOVKscS3n/Q0Ani/K4IFki5Uqe9zk5MYN3TI8mj2jiEYEEBEC
-AAYFAjwlvGUACgkQLbySPj3b3eohlACfXuiyTRw8ObbNLCLAPQrAJGVjclQAn20M
-uHHrNq77H1SgBw/Xn7fadKKwiEYEEBECAAYFAjtSxDgACgkQO/YJxouvzb1SXgCe
-IKzHXwuDNHmz56JZApYo2QOFFUoAoLDQT7AFQT/vlXq1GkO+hKtzeuXfiEYEEBEC
-AAYFAjwjtU4ACgkQRHJT9Ar9DKjy/QCffSBJW6EJF7eqTae4LxD8zPet6iEAoIWI
-REsh6zjEbITlfWWGhWSrs5yYiQCVAwUQO4Hbo1Ks6y7TpCxhAQFTLwP/ZOBttIDu
-MJPRxSNnJvNoSlstaYxqH42+33XtwxvUai2LCVIKHC8kgavSqn5psK+j9sVLqibn
-PebK2QN8Xwid9ZG6FGF6c46T1STOhrhJyYcj4la7WBg1ggd70Q1gOn9OmzWtmYDu
-7VoxTYhwG51IGrasgEOFzJrvb0hV5bzGc6iIRgQQEQIABgUCOomB3AAKCRBiiATb
-IPxs9iv7AKCaonJLi5A4q952Lf1IAZSWbvaV6wCgpq1Iw+gUkhgr2UX/7dKrBA/2
-hseIRgQQEQIABgUCPAgRzwAKCRBqWILfhEBGApEcAJ9RIFv5APNz7Z0xfXWl/fVH
-PnUyrACfamdeFPVrHL101BILgIFOEUNbGXyIRgQQEQIABgUCPA6XmgAKCRCLup94
-YAy/5zEQAJ9W0yasRJlv6ClDJffKiJfQMyFQlgCeI1wR3sdVisKpHVpclKui+3cK
-SECIRgQQEQIABgUCO5hEjgAKCRCQLb2RjDipCsToAJ0YYpBpdCpAuxlvsOCVqJFD
-ha2mjgCeIVf0M4eRHrZSjzUNPegY0c31fOCIRgQQEQIABgUCPAui2wAKCRCqz7OG
-IRtu7wv+AJwOBT2jCTvg4DmCK6ia3Ch+4RAwIgCghK9NjNrz+yqCYR0BBtLmrFwU
-cHGIRgQQEQIABgUCPAf7VwAKCRDa0rBdXzwxhQUdAKCzI6mRsmewgoxBtCiMO2yw
-DI0X/QCgqJLsS94ezwllI7uvWix2qO1qt0CIRgQQEQIABgUCPF2rOgAKCRDu8Ns0
-syEmAwy4AJ48w1kK9bn3eclkd3PEJ6DuHJsDTwCeNEq79cwbEEzUGX1mySe4QuPq
-qwOIRgQQEQIABgUCPHFBegAKCRA6GqY1kJpUBuDEAJ4wQq/nnv52HnpLeS/Y/g0w
-cp6+zQCdH5DVjozROk45axTNDiJrI+sTpZyIRgQQEQIABgUCPHN4gQAKCRCj4LnS
-ejT63p/YAKCc9dxuOjoejjPjv4/bJBfE9Bb3AACeLS91AYIJCSvYhT7BI/FsNpim
-WEyJARwEEAEBAAYFAjyFr5YACgkQEq14jk8L6rswwAgAmYoP9jbj4yzxZiLRwaT0
-v1di1Zz5ip862ETNkr8JQGu0F57+aSlECj3BPnc/A93AnEHvw12Xryb1bAZxgKNS
-t5GowTTKCm0zUvwY+6HQ+T7R3VIOGzfkzV867tt7pO2QsS+4yYwvo9gVHczV9PSF
-OeCGjme1Q3yoEp1/r6VvH0fi1JgkYoKFLw0UBuu+gv2XdeXY9FWXKHm/u88nsBSc
-8PJ+B6I3u0/E7B2Pu29u8apY4VCtY4BUwoALBBjUYLFzEh/xJTi7qPD5NLZQSFog
-6Z3aju+0MqYsrBiQpZpSiWBgPqxQwz/DZdUH0Y/wMNU19gsjkpy2+L6uAEQYfSIW
-0IhGBBARAgAGBQI8tzrnAAoJEGNFXT5qgEC9YbsAoPZcSYh+baeE+o46yDhhBV5W
-4VynAKCiJAby2fHjNyOANqOs+AbJ366jhYhGBBARAgAGBQI8f3SNAAoJEG3yVZ9B
-pWcPTCAAoNRGmdH4SpTKSGMu22mHq5O5B4PMAJ9q8l/Td+8yLzQZKJV7DCD2o4+F
-rIhGBBARAgAGBQI8lzY1AAoJEINou1lm+8GMz1UAn1e3vrSf7b0HHMO3NgHD4Zfx
-2vbiAJ0bg3QKT2sa2j6RDsQ2SOjirPZunYhGBBARAgAGBQI8foHxAAoJEI47c57d
-K8ydixoAnjC8sjBGNb/0bckMNegrZUgNFBXXAJsHnBic+JYFJxX5cAM0d3YVEM4Y
-LIhGBBARAgAGBQI8lzQ5AAoJEKHoAnDadDOW1DQAn3Pb1VX9+0CLtOOHaAQX3weS
-BT2cAJ4+TXEmmOpYYGzgT8pXZsjGyw42fIhGBBARAgAGBQI8gGO+AAoJENeDa2wM
-2SDnmrUAn0WufO0MQO/wKk0PMZsgz3gq3GkjAKDGHpOyOl0Sr5L6UwmufJHmsTju
-dokAlQMFEDyCLHLlFSglMxzaXQEBOCoD/1duqEnfsCjE+0B2pzKh9h3/IPi4dIaC
-qlCTjDZ/tWU4xVGmaMfU1I6TVRDUtPBOt9XW4xdew+ntJNHd8E7g2fVjRSyQYLwZ
-EQ/jG2jjowfAEUMJzQSPm2C6E8uIxuvD4gP4N3/mj4l1WHp8aexGhbeSqF9BbHYu
-7ri93Tz3TdJ0iEYEExECAAYFAjyvU4gACgkQ6pxm6rn41tlvcACgjPRZmULJnaVf
-apXamMzoPhtFAIkAnAuIhaMOKBqsiGzpWxkAkCUh1qJ+iEYEEBECAAYFAjyxOCwA
-CgkQJXt5TsZsoD0UnACePAR8wWLkY8ZdEVwJyHOztnk91oMAnA1OZbHhmMwN+bYj
-mazn9dYOddvqiEYEEBECAAYFAjyxjiwACgkQocWSfM5dzg6zaACfQky2IN8wQyZA
-DGCZ384YlBgRzDEAn1Ivzmi/vBUfmlAUrk91d9q1EgUxiEYEEBECAAYFAjyxgtgA
-CgkQeuuK7Uc6ScmBaQCfZ9ogU30ZhDBB0JZzo7dJBqq1pu0An2aNVIoZ9KKjEiLD
-+HaKMha1Q8bPiEYEEBECAAYFAjyyhzcACgkQVlEzpFDUq7kRIACg3C8msuOW4fDW
-M7McRIFT5AY/084AoKUUviYD6wezVBn4NUIOKMxM6Ay4iEYEEBECAAYFAjyz7a8A
-CgkQJltdGckHlEx4bgCgzog5Mv7LJUDZziSGgv+hzyvkCR0Anic4FduBfWg/zuyB
-kgOhT8QzyUmCmQILBDxUyXkBEACgg6vxNPigg9FQz14CkPtR/dEq3sCjK1r4+2oy
-eoRno+pqZ6Z7ZfphgA/q5woweFAGOg17KD2WXegoQ5pXbFvP+w9j9zm3g59XzTRS
-zZgScelTibPnKy6g8r8GDAY6IQraR6pxe4297/NznqvRvKpTt5g1XP5LyjVBsEv9
-HAYJE1vyy10qSQRtEz3QunUzfELNC4kiYNMZOnmgaFeW4APIIhWDtrrxqW3Ofjp1
-K4DAhqcnayrfvYbOtqh0sxJ246kvVc3Bc9pH6wDw/yub2deuPq6BZBLBJwrtu/20
-qD0nsZ9is/5j0aL1MZuVmr7xKYqeehyzJ1WdpJK52qng9natYedS+GefKDIw1Jq7
-ppQNWfVduTNITFTF0JswggjQuPqKT8Td5GCywQWN/kGHbp6EdybiUXZ+9fp4eek0
-UB5M+srSwbkF4hQ0mBrqlsaoji4CuXjc0c+Zx1D0pGfqqBCmvEV1tLul3U8h0TzR
-4opUA8mLKegQp5cjh/dHz7zTPDxVgSr3blJ9FxI1Z69th/+jJj3q6joo3uW/5y8q
-QCrzdSCzs+TDEWwucZtJIuIhTct8AMPY/Ayt+Pf9jXfI+xSQgz3r7Eu5o+rEu02/
-cthaOc4b3KYDtNkjLKszgiext1BYOq06R+Yyh2qgsg9azzkfudvvpwhCpJ7EOxcd
-aP3bxwAGKbQlRGF2aWQgTS4gU2hhdyA8ZHNoYXdAamFiYmVyd29ja3kuY29tPokC
-NAQTAQIAHgUCPFTJeQIbAwYLBwoDBAIDFQMCAxYCAQIeAQIXgAAKCRDbaY1xmSQl
-YH7aD/wMq9ksbvAf9drjVP2u4rjZhLkHyc1zCp7rMXc5CdNgDNVyhl7+co/qMeQB
-wk8SYEVedrZZ5Q7qjygjkKWp3qrLlw5PSydwCHaf5mlVg5E+5gt+RTkOi6FXdE/5
-c0IrIB+MNI3jt3IeOqEhITWcnjDk4gIxm4z43tvXvf/fY33ohrQknApN9uYISoEl
-zYGgnEZqX6P3p/8FB2+27A3t/Eshr6lLvVNEMgOlBY8te9TFvMJTMeSJXIQVpvbz
-/LMF8uEboWVzRC77y7RcD8p+JP9V97qZGsiOYB+2MPGEvAhEPHxQZAbaBF+eBFLz
-ev+xmI36fHlFnAFiWikp0tYVLROgBhVGJUOJlDK+olfpxUqF+N8MfjeS01aHLy+Y
-6rkzC26AC/9j+Adka9mBXEiiA1vQcBfO4U45QhgDAl00yUW1gV4oNGZ9YqslOhS/
-VHB61CjWwjnV3Jwkhscxux3rjj6TAwn5QmoO9kr3CqH1rzQXxTVruCJuwyuI6aNe
-ywINoubgDhqhOCPfqyzgdxfp5UAhy54ge9dqjfgHI2Q3WxxhD3mCdYgN89GZNpuH
-2lJkJZrRl7BimjqDeTlKYscZ1anrRgRpSoFDdUcMncySzW6cB1WSImj1aNWpq58F
-xoJWcTy6lNesINeRjZ/r1eJBeN55P8+7DKGIsGkpftsqgXAqVYhGBBARAgAGBQI8
-WhCrAAoJEM3PhoWgyT97OYoAnRFHu9zcFMaNxojhWfZSlc32F8P3AJ4wp9uyTSnJ
-pCDW7b4lcyUEX+fMiYkBFQMFEDxaMf7/7ryp5VOhtwEBMsMH/1O0rOOp5nFiivB6
-9+IbPSc0lxeLjPfmb/wQArJXWXZsWDbBuby3yL5+wwwMFyLLDGV/kPiC6qPHfC21
-oI7sui/TgBe5XblSkx19wAUgyuHrAw/YJTgqhXKmaZFgkcVKhFcc81HU1w7HiGvM
-oWA+4VMFHdqKmGsqYkegvfroYWsxbDxbQ1OQ4GHVwJ8pHYVdfWX5xKTRjuKTC1GH
-esfA4lorrs/zC/clQuJHMV/TrE9OyvP39vq5zBbG5iOerU/VO4w96yxiHoA2J4YD
-SSmEZaCTqjleH1u6Jt/YrL41RaRBayNOoyF/AM6rrmai7agTlutY5kjMjWyZ4YNp
-za3E4Q+IRgQQEQIABgUCPF2uXwAKCRC98g3l6mjvU3yBAJ92Uc/XTOt69hteH6JT
-CvcFJE3NEACdG1gNdn1xkCU4cIjx4NZJty4vFF+IRgQQEQIABgUCPFyBgwAKCRDq
-vxOyCxdw2+H+AJ4/oSxuFQVqj1SS3Z6nufW+4UKpxgCfUFd5h+48RyHC4prnHd2X
-wTwDFYaIRgQQEQIABgUCPF7gdAAKCRCc69apC10naM32AKCypWJPQ+Y7y8odeJfa
-MsjZgrN+XgCff6aipzB501CUUc/PlaKhL3KanVWIRgQQEQIABgUCPGBsXgAKCRDa
-2nnNeIo/TL/wAJ9fXFgw4gF89C0G22XZBFgddadIJACeP8RBT6kShayJrX1TK6SG
-o3aw3GaIRgQQEQIABgUCPH0qxgAKCRDWFJDobGH8qhA3AJ9QBuhppkcU1dO+qUDE
-FDmeKGlJeQCeNIHejRJbsqRlsJjWKhU0xDW6TKaIRgQQEQIABgUCPJfc9wAKCRAH
-lNKuLBMRcSkdAKCKG/h17odvnPFMdJD2/MofAmLt/wCePQBItnFwcWsaoECtHVhA
-Xkor806IRgQQEQIABgUCPJ9y1AAKCRCDaLtZZvvBjN43AKCazWmPGOA8Q0oUrjF4
-QvOUFM/bDACdHDw6m42VYtjIGqZGudhZiam3PBuIRgQQEQIABgUCPL9PngAKCRBE
-slvUW9U99zyHAJ45DoDcb7HPXjgOAv00OHNIvDheMwCgsd3fo9m9BHyyxWz8QrCT
-0aLAcv2IRgQQEQIABgUCPF4i7wAKCRAIBXUxEzAHMTr/AJ44sNlp+qn9bVY56sXE
-3/iTZ+bTIgCeM16g9RACeNezFD2z+1EzCg852Oq5Ag0EPFTLBBAIAO5SrjR8+omG
-/tqQGW8a46eQB1fOqW7VSUAVqRlpBixERm+sNoWEy/GF6+yYLXgZstWv/peWWI52
-RUPOtN3mUQtYPv5K67lpn4icRPx7R1XFUg1MVzSYhOuw6UnRj3/InCMd3PdV5Lov
-Yn0t1TEo9Xs1i5ufzmBdbrU0OUIsK7807mgrPI1g1M8SO+xXM0GEBC7g5h3r3XuC
-nuujHlgiWm7PTkOoutb7qya49VkEPab1zs3G3aEBbQBf7xivNq569KeXA8nrN0uZ
-QiguJyIb6JB6LQn+t2FFOmnxvTi6fwEpXKdodtb5rQ6e8UoOg+yL5+XB7R5wbwoR
-ur40PSDuYHcAAwUIAJzRe8+VXFdNC22EMTdb1++4isCdWhGVUmDKyZ77YbSTzOWp
-QLDkEUXvOaYGbAX3dsYCmw2RbEGj3ovp+fZzD08ZevGLK2DlmgXvSEZxCgWCB0lc
-AwBrBHccjioKYTTu3ECnKUVnXqovRUNdXFlS2a0qgoZk/WermBiw2mysAIWJek6x
-ENifTszOfOiwEWR2/JtjDnBq5Wvl2WWp54xFX2nouaJ/CLoTi2pcf78e+Atai4vQ
-dXyPycgrCZTELo5A66c/NIcCMmr7rSwfU3UGZ/E7jai/5u3KVNWDGzSGv9TsNgoq
-O864a/xb01+CoDGhqurpMe6lgw2zBPegReeyDLSJAiIEGAECAAwFAjxUywQFCRLM
-AwAACgkQ22mNcZkkJWDxrA/+NILMckL+DPARXz4JzxDmJUhAcKYm6/l0Xau6vfJ9
-xfWZV4yR6u+EYV+mqLS9dMKXjG+n3BSoZmjLvDYceD1D/foddSOxMJjHi59qaxv7
-Em7IAmOLbBFtPDWw83F3Y+vir3pKROpWJjmuDkUExDg8fNXfUfA8XKlAmB2J/omD
-GxA5wWZh4D3OYZBrwTY9hfnRrOJ9Igb8RUgaE0sx2/V5LBt/3KvA3VufTHCcNf50
-8jdpCyLxozaknlftj9qHoeTUSQB7PV+VvmWq/rKr5Rw2tXtI6tkqzIVnTg9aoE19
-wcxcroVltyCS3XMhRKejbAvy9niXZFsHJU9cYRL5vCxLAdtZ3RNlDaSIzlHHRbxJ
-2GvOA4vGaSLxL54BuqvbZuSteA12WEHM7Dfq6zl4E2H8WxLgs6RQoNQ2WkUJlpF3
-MsM6OxdmFIMNZxXvU5SKyyYF2XI4PoaN1DZqrla/qjVdSM2ApBOiO9Cf0N37lzn1
-XTNldCUE2lnwTlBaMMFTcsyOV0pfE08LJbBjfK6BABgUd9ycIQcuk5XYRK50daby
-DlbdJJBl2xKiCGDjb37HXdiyBWVH8noIfKBQiTQ5ijmyp7lcmR+d0N24E59Og+U3
-QWgivbrFalHviWdSuFS8vttJEogami5Hpd+Ne6Pm6naS91LvIF8tW7DocqPZu/bo
-PKKZAaIEOlToJxEEAMJP+0akG7QQemN3cbXVC2RNZieKFkMF16eNhXYS+i2BFkCP
-mHh7CmurW7/OrMYFimJgv/2P7lcMVyhYXbhvOxSYdexsNKK/5cTJA0PUZR3HjBVw
-Rjms2OQCtfTpe5nM5u9cVc6+pGPouyR4+3DfEt/m6PyM83Q1/pgqeF8YgdFZAKD/
-RQCveEwrrNwD96C9ZEayb10l5wP/XxdZ6TO3kkl4rd95sk7/czB7jc7pU07GYykZ
-Y5hOuGK/I5v9kuAt52pf4x5ccZ0augBFn6TFir9r3LmM1yK8P4TI34iI0M8PriuX
-TQU1mSzHt2KMPz09shQsMK1SmmzYnSCTmKdH7LOKd/6MPIWeflQQcjas8UtRtdYc
-lclynRQEAIGTMN16w+MRVdl1NFMuTSx+JYR1wEz/kak2zAyUrgDsDqKomhI0nik7
-lCro9g7AMWoaKvX1YR+hPIdbSTGKmdVu+rira8CFIgo6o0QkbGDgNMQp5x/fEJ0n
-SRbx1VKiAcMf9z5Dj5EVCr/fVp6/ccPLbRhrLEAT3gFYiwqSFozKiGEEHxECACEF
-AjpU8FsCBwAXDIARP8cyBB0j6epm3bUAnJ28Id903GEACgkQx0Y2ObLXeV5XuACg
-odXarRcQ/wYmTKnT9XmWBvAGYEwAn1O1V/DaSGhpncs1Xa0g1KOPQCWntCJQaGls
-aXAgUi4gWmltbWVybWFubiA8cHJ6QG1pdC5lZHU+iFUEEBECABUFAjpU6CcFCwkI
-BwMCGQEFGwMAAAAACgkQx0Y2ObLXeV5WUQCfWWfTDHzSezrDawgN2Z4Qb7dHKooA
-oJyVnm61utdRsdLr2e6QnV5Z0yjjiEYEEBECAAYFAjpU6RIACgkQY8tpHfrr1fwk
-9wCeKbj4dzSi15Bms1R64xK6Ks1VSvsAoLVZckjuDAyrQCDPTuFCz7484kEyiEYE
-EBECAAYFAjpXKG0ACgkQ14y85WanSzFQbQCg2uVT3G+jVR+rVXhAyVL/rQY6eqAA
-ni6DbX27Nq7yZICgx1hCA5iXYMthiD8DBRA6WP4Y8CBzV/QUlSsRAkmdAKC3TfkS
-Seh+poPFnMfW+LRuQJm8hgCdGacEslDd1xCQSYyYcSVbJEVFo0qIRgQQEQIABgUC
-OlrmsgAKCRBnkE+tCnkWEPSUAKDpWL9v2omScHt8go1AkjlpBG0ZawCdE0H8UBXf
-KW4QVCZHAoM8Ms1J4tiIRgQQEQIABgUCOleFogAKCRCsuxZLz3PsTI1gAJ0ZT2DR
-scaui0RLxHsTRdhjQED8xgCgpx/V/+LCiztzXI1f0hGVIROAKV+IRgQQEQIABgUC
-Oz6yWAAKCRAToEwwnJOdb4xJAJ91WRvsYFJrpNYIIRIUxvzJrTghPgCdHazYP0SQ
-h4c5PNtAW1YHA5RkOPqIRgQQEQIABgUCO9lQJgAKCRAn/j6KBbyBDt7xAJ9IFWcl
-fzF6xnhv1GpDKMCKeI4CQQCeLd0VBn/44vdt3H/8zzgKy5JlRS6IRgQQEQIABgUC
-PFnfQQAKCRAqK7rFw91p1ajHAJ9w3XdBtInEbKaiJhIqe3lW1jNNVwCfevWYQ7j0
-B2t2N617SBsbbGkDg2+JARwEEAEBAAYFAjwuoDwACgkQLRPpBcN2PZPEKQf/R58v
-HmZBgp7V8mgEKCJfX8TCOqJrNYJ8Xt81IH0bXv1k4gGXVwIaavHLHPcf31Hau2sQ
-/hJm9KI71budHSBbWt4tnwNMFapI55xWWKPirM2TKnfoj+4kOOK4WuDjsTsjY0m4
-v9RE8XmocZHR53YkSyryPy2b/Ti3nQKsloUpC/kezmU8XBtP3cQfaZEEbnWKHQ+Y
-mkc3nrbIraEINULNu5kP2T4scMRPe7D97vQR+6K2Vc5o20n942Pzb8u7BAgN43Bw
-GAVS1KcoXT+lZrch5bLgF1u5liSsn6FsHLTpOL3SecqF88tiiM+4V+bklXjZuXbr
-DU4Dl6gz/M4jF8TRiohGBBARAgAGBQI8O2hdAAoJEC27dr+t1MkzaFIAnRrW4uU4
-nwxzc2VHICu7nanqvIAAAJ9G4MFHT4y6ZR3prjQWjpWeQX3YYohGBBARAgAGBQI7
-hGqgAAoJEDDVfYbZ1NUsLgcAn1JmhZaKQYAe7Ah59k6xNPUpZRnvAJ4/uM3HHFiR
-VhArbe1vx2BjqadO/ohKBBARAgAKBQI7ty0LAwUIeAAKCRA2ttlJOTQkckVDAJ9s
-mqnAjJE/VqWMhmvWVcFKdeG0cACg29PJ3V37M+lx6Z1NWsUBaC5qhZmIRgQQEQIA
-BgUCPCu1uQAKCRA/sA/yl51MG59IAJsGzjndfoJFTA2uzbQCMcWeLUFnWQCgtXP+
-MIuRVK6bCGdbN1WVg0wlGHSIRgQQEQIABgUCO7+BdwAKCRA/zigQ4zaxBsdMAJ9n
-/toag3d/RKUMBrkYM5CahuSHwQCdEDx8+v9R85EdIXWIua+NAIxDJkSIRgQQEQIA
-BgUCPCIDJwAKCRBH07jLEUv/CMmjAKDFe/lsmnnnNQzsAg732GEGBOkgxwCfdcvt
-9mtxU64JWSdB7GGOGDyMSiyIRgQQEQIABgUCO8Nu2gAKCRBI1eMI/ua3cshMAJ9f
-LUz4VSTpfEhJsNulV4FxsCWnkACgtKDn6Br3ncYiMCv0I1wKohwY9ciIRgQQEQIA
-BgUCPESMCgAKCRBU3b7cPKNJbJ+fAJ9ith4zBy4mGX8PN2OSBxuHMBBYpwCeJSc1
-wP6OgatNXzZfgERyC5tG1JGIRgQQEQIABgUCPJq0qgAKCRBh+N6vwPlo3JqPAKCj
-J+WVShKpcHEv42g7TIFRx19DJgCeJaEC5PHJEpAEpJ1R135pcuMUNoSIRgQQEQIA
-BgUCO6bRVAAKCRBiGZ/lFRHt+Bj5AKCx28nM8btX06i1M+M0sl7rE1g30ACfbv5n
-ZYUnvB/ltVlq4Upd+suWX+uIRgQQEQIABgUCO8vVQgAKCRBj+Xyfj9I1PDMIAJ4j
-6Ysm4A7vidqast/lbQ82WEy68gCeN6Edwm8GttOsqHbI98LYMQ9aIAOIRgQQEQIA
-BgUCO7EVnwAKCRBn2bOMCRwxhzkeAJ0aRutcMPoywIRtM+cSDgBFtpyP7ACgz/Q7
-VDZq9tNtnUVODuzQ9BbNFZGIRgQQEQIABgUCO/Hq/wAKCRBojqAxWqujDBYMAJ9e
-4nWFjVYSK3NXt+XYG5ByewNKPACePp/Yd8ui91ViuNSbhHiwCAyYli6IRgQQEQIA
-BgUCPB8wXQAKCRBqRzoxcSFero3PAKDzhIRGCfFfnuvcPTJs63q2rTiYmgCfS6Ct
-YOMQyaYbjsCA2uNKod1h8wmIRgQQEQIABgUCO/MZBgAKCRB8MVegZEc1dpe6AJ9o
-nHdaU9zxdk10LVzDS8iQfJIl3wCgkQ3PHxJACbWq550Nuu6GLcyB6JOIRgQQEQIA
-BgUCPHSv2gAKCRCMnNnnGBSTGUrmAJwOG7kZGIUFwcEnd3RtUE6QXy/eUwCgluH6
-J77g/pyyki767QxcWkSEXOmIRgQQEQIABgUCOyiObQAKCRCPrQIss6QEWVYBAKDO
-++09sRU/5u3rlpMuUo9F4bzKbgCePw6JPtErRjAt8zfk8maUM0inwheIRgQQEQIA
-BgUCPC6hGwAKCRCQ3qzudismmon3AJ0RJDe8fCYq0Sv4Q+23UZqFBkSwRgCgx/Mc
-nOoHqTP5NdOWpZiekDuO2kKJASAEEAEBAAoFAjqkA6MDBQF4AAoJEJ7v5Ejutjqx
-+WYH/RIGqKU1KjIonGFv6l6f+YLuiP83imKXSOHVd5r/Wu1fOhodGOkbIvCPhwgq
-+xwnjNsbFNTC8KshWIaTjtz77Sgu4qp0aQzQt5ebmJliB6YN45Tq/7SdZZKP1OTk
-GUFcyl2GafjRp71uHvD+eqtXTxTKfee5Dlh6vi+ha6ouBybMdB9B0OYzhU2Xi0Dm
-GqtcnDDavGostWCvtzFtKEtg4yzu2tR8nUgV5kMCz3osglgr7d8WQ+aZxgMOblFf
-gcCRELeBWh4zjEh9wrH/7KMcr6REiXgp0YTpm18JH+UKbvsL05sJgvnJEoDncP8P
-G4IkMR0JN8KRcYhZ8E2SNV6Rn/mISgQQEQIACgUCO8+CVwMFAXgACgkQp22qG2je
-6vanXQCg+p5+GfFkymKzjUML9zip1f2dVEUAni4ysdlyH3A3oxKV7RWyXj1PgCGO
-iEUEEBECAAYFAjtUcBcACgkQp4aCct/T12ngEACXYfv/a7NuPFA3zpRUc0QpWCv3
-LQCfd/aNbpLY3QNAGdWIrLsKTKF9IEmIRQQQEQIABgUCOt/u9QAKCRCsdttzJR81
-wWSNAKDFrGzAtuKoODKe6DDKx+sOoBL/MgCYi3X66YcHE5oExf+99xwTmzMsEIhG
-BBARAgAGBQI8C8rhAAoJELSC37AZpFlD+bUAoPXlGhIUXF6mARtpxetRaG7fO8Vm
-AJ96IIXSJfps2fO3AUS38An/8PdmLIhGBBARAgAGBQI7zcfhAAoJEL01r7GgoJ3c
-vXkAoN5CbbjJXjI5byD1iis9G+H0cCMFAJ9Mqk1scRTGFajVipyjoC61eLoEJ4hG
-BBARAgAGBQI7FfJNAAoJEMR6qYKMZW0Ott4An1qoDfLV3fUHFeDlpP9OtxYLXV2c
-AKCNMkaY04vqNNIvJy0c/nnsrog7GIhGBBARAgAGBQI7ztdAAAoJEMS3xe6ePjec
-bb8AnA6N6qCXWvfqxZTWW8i31bnm5gMYAJwLDIRUW00lahMf3L/84nrZmHx5HIhG
-BBARAgAGBQI7wo3iAAoJEMZN/hnNBj2mK0MAoONXqgCWmOwY1kuCKmMYcpXHCjgw
-AKC0hG5DBo0EcCSQ9xuXN2OySrGyGYhMBBARAgAMBQI7yJIHBQMB4TOAAAoJEMtT
-PRy1z8BdctkAoKLJRxjLZ02ddy73NoMS3PwTU8HEAJ9xPD9OTf3NctADtorKsf0y
-dCyvcYhGBBARAgAGBQI76umKAAoJENDQZPuFwYBQPikAoMzuIMloKscZ6GTuEx83
-WSozA7KIAKCDgWXCiaxSEhsJOvOLdu1C525f6IhGBBARAgAGBQI8BunhAAoJENEG
-RJeBUhtCpPEAnRqnpqhWbQUGExxxlJqawSqPqA1cAJ4pRGh/F+3ALSFrH3SYv84u
-MmcuHIicBBABAQAGBQI6ektkAAoJENEdYC5Hk8UppFYEAJI0VWk6aMSh4r1vT4sQ
-ZZNnszlsPiXq9HFts1o0GK0BBNgN7PRcVxQYXroDajSlUGhr3pBmx8LzIS1VQcIk
-GS5aMHed+UifhhdIbWDrPz4driXOQnAcB+isMeRfw1tf+5Quyp1BhrYyzSerwN3D
-wZC80Uq066Bhok9bQw/Onwr2iEYEEBECAAYFAjuzGgEACgkQ1LqD795zV/I43ACg
-xwwecFuPr1I4wAawRXPTvz+2iLcAnjqju6l6jGS42flmgIQhYR8IbbpOiEYEEBEC
-AAYFAjuzZNQACgkQ5hUbwVnPhdbNIwCgiR88Ff9WiqZu03JUD8xg1eABomMAoMrm
-WytXRamVMAgfKd/hIFBY76DEiEYEEBECAAYFAjqqoAMACgkQ7tDfcL9n0utnlACe
-IB7BHKg9ajYIyf61OCLETHioqAsAmwXzodEuj1Vmkanes5VwctoPzUM7iEYEEBEC
-AAYFAjvaGf0ACgkQ+8k1yjhw7+0uAgCaAztlqJo9gtpS9BfZnuQb/bK5IKUAnjLo
-TJE+INlQq0PbMPFGvhS1aGn0tCJQaGlsaXAgUi4gWmltbWVybWFubiA8cHJ6QGFj
-bS5vcmc+iEYEEBECAAYFAjpU6LcACgkQx0Y2ObLXeV4TyQCg5ii9gHqOjlsHGSsq
-kliw+Ha0MX4AoLie5O1xLkK/rS9J3aIp9EUkE5AhiEYEEBECAAYFAjpU6WkACgkQ
-Y8tpHfrr1fykfgCeLP0tqVZ8D9lU2EVrKZkdauwst50AoIQsSo6PBhfNwwb5zDLK
-O/PGftGhiEYEEBECAAYFAjpXKUkACgkQ14y85WanSzGqnQCePrJJrLngH0MDYrDU
-qrK1ju2/BHUAnieEItKJUoN9FXzacVsEFW1D0UwQiD8DBRA6WP4q8CBzV/QUlSsR
-Ap0RAJwPSxTAIb6M1TM8LSNgnvYigYZXwwCfZzVNckHKo7WtpZ1lWN+4W80eKJyI
-RgQQEQIABgUCOlrmuwAKCRBnkE+tCnkWEOpjAKDeibXDKCIMiNZafH0nzDD/CRU+
-pACglr+BhEKX68HeW4QnooPxoFwlviKIRgQQEQIABgUCOleFogAKCRCsuxZLz3Ps
-TDo9AJ97srZSNDeiQUHoiGsETRMKG6Uf+ACgwsiJIzN2rVgvAgCfq89g/efv8hTR
-zNf/AAANkgEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD
-AAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEEx
-NDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7
-Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCACPAHUD
-ASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
-AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAk
-M2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq
-c3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
-x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEB
-AQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
-BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5
-OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaX
-mJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq
-8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiiigAooooAKyNb8S6boUZN1Lulx8sS/
-eP8Ah+NZXjbxcdCt/sdjh7+UdcjES+p968fvLyW6leaa4mmlY5kkL4AP1qXLsaQh
-fVnc6l8TdSncrYRRW6Zx03t/L+lYsvjjXnA8zUZY8nI2kr/QVzlu0b8+S2R/HvJN
-WFgAYuwDFuvJ/lzms2/M2UbdDrLPxlrETK51CRxn7sm1gfzrs9F8b2d8ix3v+jyn
-+Ij5T/hXkQj8gZX5hnlCMZq9YShm8vzDt7HuDQm0KUUz3ZHWRQ6MGU9CDkGnV5VZ
-6xf6FJ5qTlY8/Mh5Vh9K77QNfi1uEkJskUZI7EeorRSuYyjY16KKKogKKKKACiii
-gArO17VU0XR575sFkXCKf4mPQVo1wHxXvfJ0yztw+N8hdh3IHA/nSew4q7PNdT1G
-a9vpLi4kaaaRyWY8KDRYWCXkuG5Qc+gzWe8mWAUYz19TW9pbGJAScZ6msJuyO2nG
-7NOPTrcxhAMdOmOKp3eg36OWsw0qY4x2rVgkynIyfrite0bKDBrBNo3aOOtvDWr3
-dwPPjEKDOS1dJbeFJYY/3UqKxGC5TJ/Wt+Fdx4HNaMUSlM9yK1TbMJ2RwWo+GtXe
-MiaZLlByCo2mpvCOpTaDrKpdEmA/KxIwVz612rR4PPWue13T4RcwXBUBWYI5A6Z6
-GmpNMmyasejghgCDkHkGlrD8J3ck+lfZ5m3SWreXu/vL/Cfy/lW5XQnc5GrMKKKK
-YgooooAK8j+LF4ZNchtmACQQjGDySefy6V6jqeowaVp099cnEcK7j7+grwXxjq1x
-r2ovqYRUV8DaCTtA7VMmtjWnBv3jMgjM0wAUnFbcCtHGFHOevtUek2RisUmkwS3O
-4HIqeWTaP3e0HPzMemfwrmk7s7oWSuatk7BQG71v28OFUpjHt2rj7XWreH91NLGW
-PQ7W/qK6bTdYs5IgFuI8njGajlsPmubtrmMGVuAo5q7GxWMcZBH51nmVDaIqMpEr
-DJB7VcWf98Y+wXg9jVowlqTtIpGP6Vj+KNv/AAj1y4xuUAr9cjFajHnHWsvxG6DS
-ij8h3H6c0yUW/Aju/n7xg7Rn6gkV2Fc14Lg22MszD53IBPf1rpa6I7HNLcKKKKok
-KKKKAOQ+JchHhuOIMR5twufoATXkjOkjqqAHLYAzxXq3xLikl0uzKAkCYg49SvFe
-YR2htbqKJyN3JODnNc837zO6l/DSNOLeijyuy7cEZzVG50jUbsmWKTamTny1GRzV
-4TAPtUZ+la2nyJbBWmZogScBhgfnWN7G9jmrfR7/AM7ZJdq8GDw8Suf6VRtXubfU
-FjMZR8jATjP0r0jfbMM7ULHvgVyl3BFPreICruTglTwvPr60+buKK1NeKe5S3W5l
-iaNmHBTgKfU//WpJ/E13bYVJxM+MnEYyK25LKNtPtkPCK4U/TNYF94IinuWfcUVj
-uDxnBBpITa7GppvitLnalxZzRseN6pkE/TtUviOVbmC0jhdSGk+b26VlGz1PSpkE
-Vz9sthgGN/vr7hq6PT7Qajq9os4ZI0BfYB1AOcH/AD3rSOrsYzVlc6bQrZrXR4Ed
-drldzD3P+RWjRRXUcQUUUUAFFFFAGN4r06bU9Blhtl3TIQ6qOrY7D8K8fvraW31J
-VmR0ZQPlYYI/Cvea8q+IVi0PiFrgnImjBUY/P+VZTj1OijP7JyP2n/SMnPB9eldX
-pV/5kIRsbfQ9K4yTMbhmyMnvUg1FoGYyI4THAXoPT+dYONztckkb2v69ZwSJa29q
-gLf6ybYPlHt7+9Q6JdWA1NWgYBMdBXOzTf2id0aFg3anW+l3Fkv2tmcL1A/wo5VY
-Sl9x6+ghnswgcEOOcdvemWs7zQHgSMjFGK+oNcZpd/Kl5Ct1JMIVAOA+M/WtGzu1
-0nXHWObdbXZ8xCT3PVTSuRyHTymN1QeUSwYcba1dHt1W5Z2xvVOg9z/9YVmC583G
-OM9BWtoTectzN/CZNi+4H/661p2uc9S6ia1FFFdBzBRRRQAUUVi6x4v0HQwft2ox
-K4/5ZodzfkOn40AbVcX8SrHdo6akg+e2ba2P7p/+v/OsDVvjhYws0elaZLO3Z5m2
-g/gM/wA6525+I+t+IQ+n3ywQ290rDy0jwQMZHJOetS9jSKdzm7i+USAlhkZ56Dr1
-rd0vy5o9r4cuvzcg54rjLzNvcFMY55xW3od8FKx4GR8zMemazlG6N4zfMap02KC6
-bEcTJ6Nx+tbumPYyRrb/AL+Jc/dBEig+wYcU20FtqSguuMcZ7mtCx8PrDMZGkJVG
-yB/Kuf1Oly7Ej6XcyebgQ3IZTtdl2OD26cViw2lxeSrayYTyzklTnbg9veun1LUU
-021IDb5Dwi+vvXOaVfIJZJN4LF8YHuadmTzHTqZEt/3eTIFwg7lu1dnpdn9g06K3
-7gZb6nrXn0mvWujeVqOoI8ltG6/LHyS3b/Gu20TxRo3iCMNp16kj4yYm+Vx/wE10
-U1ZHJWd3oa9FFFamAUUUUAeF+KPijqurI0Fq32K3PaJvmP1avPbi5kuZCWJOTyfW
-mzOzNinwxBRuPXtSNCe3hSIBiMv/ACp1vcbdThkbp5gz9KYzEL9agcE7vXND1Hex
-s6raecSVA3jkZ71nWdy1qWjkG3sQRWlBdi8tQ+cuvyuPcVFMsc3yyrz2P/16yi2t
-GdE4p+8jWsfEMNsU3H7vf+92rdt/FyiI4Zcnt6GvPmsyv3HB46k4zUiQTRKF3gAH
-Od3ehwi9SVOSVrHT6nrjzSYMgJUjknOKgsZnS4MrMVRerY/zk1mafAly2W3SAclg
-NoNWPNaW+kUDbFF8qovQHufr/hVqFkTzXNG+v3v5T5oxGq4WM9AKxlMlheCS1leN
-kO5CrYI59a0XOPvAfX1rN1OPPIB5TB+lUSekeF/ipNEqWutKbhBwJ1Hzj6jv/nrX
-pWnaxp2rRCSxu4pwRnCtyPqOor5ht5G3Dca2bW+mtXEkEzxsDkMuQaCeVM+kqK8W
-sPiPr1rB5bXImx0MqbiPxoouTyM80jh8xyxHyg1KVx1qxEEeNfK5FI6euKZViq5I
-FJDGZA+Occ0sik9BVaYMqZUkFecjjFIksQtJZT7+iEjcPSt63W1mUNIRjFc9ZXhu
-D5FwQSwwre/oa3raW3+xlGwWPr1FRUj1RtSl0GmW1jdlWCNz2Y/40yCBNQZijq0a
-NtKp/X/P51nXk4RJdqYBPJJHJq74a2x6XM4I3NJyM46f5NaQgkyZVG9DRv7hNPsW
-8pQP4VA7k/8A66g06Hy7dcnJbkk9yetU9TZpr+KHnKfO2fXoK0LYqYh1x6ZqpPUm
-JKy45z+XaqV8AUQ89x06VeccHA6896rXSbrZj3Ug1JRjYKsQfXrVxX+Xg+4qCVQQ
-D0NOhJYcdTSEtGWVkIyFU/gtFJGEywbA568c0UFmUomil/dAtk9B3q/nzBjHTqKW
-BVjIPU45NMPDn3pkLQY6jBwRxTIoxJIE7HjmpW4/OmQcXC+maBdTG2FHdckFDxWp
-p7yyyu+eMcD/AGj3qpdLsvpAMdTWxpkQjsVfpn5j+NVFXZCIL6N5YhG5GeWA6laT
-w/c+TJLYy4Al5TI/iHb8v5VYlwblAW6qMZ9c1mztgSleCzAKR26c1T0dwL1sDNPN
-Oed7HafYcCr8MnlSAZwrdSfWobSLZCij0xRLlXHHDVBojSLZGSTz29KYFDK6nncM
-VHbTCSMqx+739RUJvWz+5A4/jbp+VIZSnGFOAOKbC3zZzjr0pbjvnkk9qihyZAB3
-4oFfU0IEO05BH9f0oq1hIkXIySKKBn//2YhGBBARAgAGBQI8ZiQyAAoJEMdGNjmy
-13leJSIAoIx0Ql/m4Gf4ZZeFQ1Of+zq6499DAKCHBzmIEtE740kuUl5HGNvCJ4Qb
-MIhGBBARAgAGBQI8ZiXuAAoJEGPLaR3669X8OzwAoKHGtOZfI1nc4NEGzRLorYzu
-HN2YAKC6koYnTdhlsiEOJxiaUxTGi+Vv4rkDDQQ6VOgnEAwAzB13VyQ4SuLE8OiO
-E2eXTpITYfbb6yUOF/32mPfIfHmwch04dfv2wXPEgxEmK0Ngw+Po1gr9oSgmC66p
-rrNlD6IAUwGgfNaroxIe+g8qzh90hE/K8xfzpEDp19J3tkItAjbBJstoXp18mAkK
-jX4t7eRdefXUkk+bGI78KqdLfDL2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4
-INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3b
-zpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9G
-AFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67
-VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM
-2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpTDJvAAICDACNUV4K2PS6
-h574Z3NaBsIQe5jkVO48MSohjC6s29CjPhlU79cQIYWmBpuNfwroZ6zltyz6Y2Fm
-65V0IfvVicR7zvFFCOhahMuk1cr+Qp936OMEq9sLZGxTjClgwrHGS7YpMSZrEC7b
-pOmERjo4F/n5YmCHJCH8QzCOc9+80gjVEsHiJVABrC8yykjKL5x1V/PSArE4QtML
-bkBPGmQYOw8bx6jCHoO43QjUzbqRfBMHZqWVJyoIIZCp+n13XM4+NO/cDVsZ8bjc
-h0LIOyMrT85n24yfXRlP0s7BFjLm59Jjhf4djuJWikJawWETlypAy86OYRRuwCbI
-yNauBeTKy+avZvF2oLvpwH4UnudpC06/O0jkj2lQpn9EEUw11RwO6sq9zYTwAUyK
-erN00cbCfyiZl01CIo0btcTO6hQK3c67PaloJ9lVH8/mH7LuqkMLDH5ugkpzmed/
-8SorfqVkakne6b4mRySFCBXaVZoKmDHzcH2oSSMhM9exyh6dzi1bGu6ITAQYEQIA
-DAUCOlToJwUbDAAAAAAKCRDHRjY5std5XuVtAKD4358jdvOoX358HnQnmwUdUczu
-FgCfT70B8OXmdyevgPtF4wOVighnBFGZAaIENaIeHhEEAP6XSuDmn2tbgzewq+Z7
-LOGzaYPGFEoNNVVSdPCkwhHaQgD2lPjc2j9yg9qMO+FlNoMz+9LPbkhkNlYnuAS7
-zpGmgR22v94rwa4NyCxa8Wzn5ikIPBYbZ3Hf0wTsM35JG8QTXFSbgT0bY2d3ZQ20
-uCDzbCCL9krgiH0JgPKjRr1rAKCKyfdG9n8xEQmZCrX5KMmAPH5zawQA4SfEZiKy
-ogpw5N085NOJ7ujvH6d6ba5pzu45brw37BFbGEY8jGw5254whrtT3haD9h2fh/Za
-eAmkG8o1odiZbyPVDnO9ldekhZFdK/JNHrjUFx4Yc11iJH8+IMEmwZDdpzufunCF
-Xip7HchWJEMlbPkPOvzzH46O7rcq3Fi6tQgEAKLt3WtSUeviiTuIFGVYdhdTaGlQ
-hDwL5Q4TVddP4cHuZktJE41CdYzJeepsABb4RRRfbGlvngJ68CDh46KW3R6zwZky
-ZTpzTB1SycxZao4ocEUWUMi/Ijbtpn2q5/TK9vLreQUJqdApzRCeoZdArO5dsWoF
-hbZRCtiCNeOLyt3xtCdXZXJuZXIgS29jaCAoZ251cGcgc2lnKSA8ZGQ5am5AZ251
-Lm9yZz6IXQQTEQIAHQUCNlWgpgUJCG0MiAMLBAMFFQMCBgEDFgIBAheAAAoJEGi3
-q4lXVI3NLj4AoId15gcyYpBX2YLtEQTlXPp3mtEGAJ9UxzJE/t3EHCHK2bAIOkBw
-IW8ItIkBXwMFEDWiHkMDbxG4/z6qCxADYzIFHR6I9Si9gzPQNRcFs2znrTp5pV5M
-k6f1aqRgZxL3E4qUZ3xePQhwAo3fSy3kCwLmFGqvzautSMHn8K5V1u+T5CSHqLFY
-Kqj5FGtuB/xwoKDXH6UOP0+l5IP8H1RTjme3Fhqahec+zPG3NT57vc2Ru2t6PmuA
-wry2BMuSFMBs7wzXkyC3DbI54MV+IKPjHMORivK8uI8jmna9hdNVyBifCk1GcxkH
-BSCFvU8xJePsA/Q//zCelvrnrIiMfY4CQTmKzke9MSzbAZQIRddgrGAsiX1tE8Z3
-YMd8lDpuujHLVEdWZo6s54OJuynHrtFFObdapu0uIrT+dEXSASMUbEuNCLL3aCnr
-EtGJCwxB2TPQvCCvR2BKzol6MGWxA+nmddeQib2r+GXoKXLdnHcpsAjA7lkXk3IF
-yJ7MLFK6uDrjGbGJs2FKSduUjS/Ib4hGBBARAgAGBQI1oic8AAoJEGx+4bhiHMAT
-ftYAn1fOaKDUOt+dS38rB+CJ2Q+iElWJAKDRPpp8q5GylbM8DPlMpClWN3TYqYhG
-BBARAgAGBQI27U5sAAoJEF3iSZZbA1iiarYAn35qU3ZOlVECELE/3V6q98Q30eAa
-AKCtO+lacH0Qq1E6v4BP/9y6MoLIhohGBBARAgAGBQI5TM2WAAoJEAJx6COq/B+4
-jTYAnjOMlKc5tuqspHgAUgAVmBda5XNGAKCIqZ3Fu33suLyRABGZ+tN3tJ1QZ4hG
-BBARAgAGBQI1pysWAAoJEAQ1xdJF3KZpeMoAmwZEvOS95jEKj/HnbFBDDp5C4dw0
-AJ4nsZgDnGDAG7FCEJI6+LoIIUit44hGBBARAgAGBQI26PrdAAoJEAcDKpaJBMji
-EpgAoM3IisrN7XXdhnP9lmx0UJKE7SsFAJwMWIBnGK93ojuWXh9YgDRySZKZqIhG
-BBARAgAGBQI7JUB0AAoJEB3TgN9DaBQASVsAn28snlWv8ljqxPsS2e7xqJxzND3G
-AKCsObLMGdGyED2YKlu0sSa4E7cE+4hGBBARAgAGBQI6xKZNAAoJECAsPjFYbhLl
-DsgAn0tfgJSaxWUd5s0ZGmKob7b84onEAKC15V+DRTrE1tArKxy/itSNiMtQG4hG
-BDARAgAGBQI4no7wAAoJECShvswraT6/w8oAn0XLPn0F4s9wQ4pGXNPCm7MJ6E5z
-AJ9CbanRlaKAXoD1LP5bmADGkRBqfYhGBBARAgAGBQI4vt9pAAoJEC5ArMtkcKsm
-HDkAoL3TIizomIuEKO6vwHMFcFndsaAaAKCJAkq+I2mjYimFE7ajlaL0jyecGohM
-BBARAgAMBQI6IYGCBQMD7eiAAAoJEDJKcxqmfO/9aXgAoOumahVFuBTuZsv5ma2x
-G3dVPZczAKC1viEIhAakthEb+Pi0SRyeK7cqqYhGBBARAgAGBQI5zA88AAoJEDLD
-W4BHupNX9vwAn1ZRUYyIWV5XoRUIq7Epz1id+hDVAKDMZSo15h9vfGAjrytpxOs5
-clW+G4hGBBARAgAGBQI5bedgAAoJEDLGkzuo7SAfxjMAn2I7CSRyEz8mkaD3emaM
-1WYxvbb5AKCFOlNjoxNmu3SSWfgrW1EESYPQY4hGBBARAgAGBQI4q/0WAAoJEDW6
-YX9GCEVakzQAmgNaF00/D/eOgHmtLEjE0IH1H2yUAJ9EKs47I9s8U7IYJOGoQRy7
-LD1JRYhGBBARAgAGBQI7ScU3AAoJEDeckqFodBLoiG0AoItVFw4742i3VVL75rHp
-S/iRTyXXAJ46OJxgMvJ9knQ0l4so5JiBotS/8IkAdQMFMDifLTk7IqtjPG8o8QEB
-gOEDAJEaFnJ11GJlMpSIkxT4kU1DpXJGc+w5vhX8xjqjTlkbCS1AeryM2FGz/wPK
-DjHtG97Ybptmeigrx5ZZ9O/wp96sTYpKiKk93YRyzPOtJ4GhahMR48LBu6YnHppJ
-nxCyg4hGBBARAgAGBQI4XUq+AAoJEEPM0G/dqdt2qekAoN1HvYZQ6AxvNVLx3M06
-s/ytk21NAKDNn0RgGyCBiyQeLuV3Gkuqxke7kIhGBBARAgAGBQI5Zs0MAAoJEEcW
-KRmClXtmuPEAoJe7siEXNYVflP+Glf71M2xvkSa3AKCerd0dwvhmi4Ao4ujBnuZI
-4YUIhIkBFQMFEDfZA2RNwxExOP7mwwEByhEH/2zbTPiXuaff02Xj7QqSIwjo0O47
-sgxNHbuUMJB7pvD0q8g/T+jX0ux6Ci16m42aOUjp254G33RN679BdjiHG47DOric
-TvdLq9uWtqg+irQosJen+e0pIsFTfmj1zA1G8rrbADqVCEz4SpibDLB5wXDhVdqa
-R3sAteIAZti1xoTiFc12KrarkLn+BaWUtvBbi93bsD+ySTE/kIeeCGLW9IEHok8d
-id1QMWXNM2VuzSdKSoxaiuJOkuZ2Aui0HAdEycY5fhOqIo4B/rtxGpdBXBBCxNi+
-VRaq0CWn13BiII2BvNOmCn879R89qMxuj10X3RnRQIHgj4mg/X7zni684FOIRgQQ
-EQIABgUCOQ0ojwAKCRBS/u9nIH5xmceVAJ9VIlMfbC6Gni3jLXZs7VEX5NWQCQCg
-id47hulygTIy5ePkpgjOO1ZDP/aIRgQQEQIABgUCO1X9UgAKCRBW05T8JNULxIz6
-AJ9tUSb17Etq+1C6V7YiiHCt//vY2ACgt6hl1q6z2ZhSgJLBV6N6wss0GWGIRgQQ
-EQIABgUCOJj9UAAKCRBl3EK31OWAJovMAJ4oWYv+ThvQp8zMdVCnbQQL77eLdgCf
-ZV/ownqDt0xfEMpHTF0hSHQxy96IRgQQEQIABgUCOpP0TgAKCRBpwYMr+Tra7NWk
-AKDQEafW/9gKnUNFINJqEkYUXsYlLgCZAcGWOePrrM7PEOz/h03kqllYt86IRgQQ
-EQIABgUCOFjPGgAKCRBxLQsX0D2KT22cAJ0a+519NvXqtRND7/RcEK4LN2bvpwCe
-LNuUSotPPf2r7FVap5vO3oAMwdmIRgQQEQIABgUCOGDD6AAKCRBxRvDjMHApSKW9
-AJ9R/bMcCRef9myi9B2bC1zuN2qtbACfc+1NHDhmDSK0TaR5Seu2TyV9LceIRgQQ
-EQIABgUCOUbNKQAKCRB/4u1e9RQ7Ki5KAJ4r4dNSN7kLq1nOW52+309RiDpn8gCc
-DhPygqyVfPUZKOtVwvttHZcysxqIRgQQEQIABgUCOPN6JwAKCRCEP1fXrLWNT4SW
-AJ9IRICEmPNdhoYWUc7hP7HOUVhHfgCfUsR4bR9KCTaynBmKvAKA/ciTBh6IRgQQ
-EQIABgUCNacrcQAKCRCE5PiUAeWZaBjoAJ41XKqKVxMjGBGXxffEkyprrSj4igCf
-cR5sWVtyrVUk0X/yE0jUrP9IApSIRgQQEQIABgUCOnNH4AAKCRCI98SPIjWV9R3S
-AJwLoPyJ8dzW1f2ubzYBEkkHN41p9QCeKbvAZQNRcsMKTJCAuhlwFnh7KGqJARUD
-BRA21moYjl8DByup3WkBAZ0tB/9v5kOKdh7rwDaPHFLxvG7flsD8XOvMM/LH0uAx
-smUebXYwIRWDziZqDmFHpnzTt5LM7nyaPJjggfSCmlLKtx5ZgIgXM9D7WrwPRgcX
-g3SHbuKbXTeiSQRP8goMeADlQFd+sX8l40mwKF9klQXR7/02CT+LM5A/KnXM4mqQ
-1cjFLiCwhx2G+Rsx4PEDTDoBL3W6ME/pxIzn0NJuhp9oDVvKuWmKtwKPWSHRj8CR
-56OBxeZG+sPK3UySM/ZEdEL0iEZvgYRwpf/t8vnS8/Li/M6pem6FnwLalQwv/vMF
-FQvBiHJqRJ1VxsdHVDMbap1LO7A2QGghPkeDnAN4jyCsqXVtiEYEEBECAAYFAjt4
-2yAACgkQj8C3jQmzMQbrmgCfeBACKTFlOsTcbhhlvIjZJ9ZUT10An0NHUHnoktA4
-GMdxW5vR+t1uhGcWiEYEEBECAAYFAjbWagEACgkQkrJ6leQEE6q4FwCg2WMRtIdc
-wsfnj8ngeK0CyIjXxqYAoOsMufELOYL7yb85M27iZlqZ48/eiEYEEBECAAYFAjnK
-lgsACgkQnznd8F4pxsIVuACfc+MHLblJgJcI5Z42D4d5ufs+LsYAoMq1/GdeKCtx
-028BGZm1Yc0zO8cwiEYEEBECAAYFAjnPNIIACgkQpll1bT9NtmnSywCfWpns8kIg
-d/oStQbXXVzltaMJtbcAoL/cJ/9k1kraYpk6Z8IJGf2wEGVFiEYEEBECAAYFAjqW
-fQEACgkQq79czSEmG4giGACg/qNL4huhd12Jyya3qTJeFYFgMm0AoOWNXs1CepYM
-GZ1HNhbcJiH+G8/IiEYEEBECAAYFAjoZ9rYACgkQvhpT6zI73uZHuQCeNJfhA/uB
-HrHUFhMILz27aBJcBC0An2dF4AKA1T8P5MuqKaUxL1OqdPJkiEYEEBECAAYFAjmS
-plwACgkQx+D2lKJNi05V5QCgxOAE1SMP4BhATMhTXNiSJbU2BmEAoNbcbOwM+rOz
-ecX6aQyeCBg8WcSeiEYEEBECAAYFAjfZA0MACgkQzTbgIX48jquOOQCgqjyYGNri
-U4Zb6aKW4GHcuJNoM0kAoNCupziSR9pBxWVeMNVhVp6XvigmiEYEEBECAAYFAjm0
-32EACgkQ0Y4PDnuqkPpwSQCgubij+epzZINnZ4qvmFgNNR9YGUIAn2Dwom8wzr7/
-W0Q9qiUz+FVYoHHqiEYEEBECAAYFAjgmg+4ACgkQ1eiHQ5R2ErMIAwCdF+TWZ/T7
-KJR0y5IQ2EoxfLKxnawAoK8xJ0QSYaiZYKCxB8tYzMItHv7liEYEEBECAAYFAjfX
-jLIACgkQ1rb6S4yOnyPYrACgr35M5uneN/5PCc9Uh9caSYdJtwwAoOjzOz6KwrKd
-c4wXaDnRJNnBpZMdiEYEEBECAAYFAjpCNWEACgkQ30kDp8mywsCuGACgw405ZqhW
-MrgNewU0gPllz+S9V68AoLer9gdEcr3aHhxZxmZpjsRy4w/tiEYEEBECAAYFAjrO
-IywACgkQ4HkONspwutzZoQCdHVZOvgnh2kW4229FOwRdtVybZGUAoOhlsIEL0j5W
-4YJCGQrhd7vxuo0viEYEEBECAAYFAjnzJCIACgkQ5jU8OLhSiwGGrwCg304/n0hg
-n41Bgmal2jI8WAmK098Ani2W7uoOHSWlBQEkoisKMbSh3jIhiEYEEBECAAYFAjqQ
-EYkACgkQ86QzvnxWxe/4rwCfSXD8N6MhMzfKqZ6b6X/kag/dS/QAn2QM9U4dCrUl
-8kOTdZbP+NC+Hcx0iEYEEBECAAYFAjnND5cACgkQ93111w6M5IHPxgCfZrmMKTTn
-ZT5+uv6wVFDUyoqavEoAn0nvU51E1kt5+QPuKEnZiZyjwayniEYEEBECAAYFAjqe
-VPUACgkQ+qVJWkKzL8lzvACfXa4hgEv1Z+GZLZKHQ76Yg7aPnzQAn2cm8G7PirTu
-WSANQVUlCWu4PUh8
-=9VIS
------END PGP PUBLIC KEY BLOCK-----
diff --git a/g10/ChangeLog b/g10/ChangeLog
deleted file mode 100644
index d4221d1c3..000000000
--- a/g10/ChangeLog
+++ /dev/null
@@ -1,7014 +0,0 @@
-2002-10-17 Werner Koch <wk@gnupg.org>
-
- * pkclist.c (do_edit_ownertrust): Show all user IDs. This should
- be enhanced to also show the current trust level. Suggested by
- Florian Weimer.
-
-2002-10-17 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main): Handle --strict and --no-strict from the command
- line before the options file is loaded.
-
-2002-10-15 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main): Disable --textmode when encrypting (symmetric or
- pk) in --pgp2 mode as PGP 2 can't handle the unknown length
- literal packet. Reported by Michael Richardson.
-
-2002-10-14 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver-internal.h, keyserver.c (print_keyrec, parse_keyrec,
- show_prompt, keyserver_search_prompt, keyserver_spawn): Go to
- version 1 of the keyserver protocol. This is a better design,
- similar to --with-colons, that allows for keys with multiple user
- IDs rather than using multiple keys. It also matches the machine
- readable pksd format. Also use a prettier --search-keys listing
- format that can fill different size windows (currently set at 24
- lines).
-
-2002-10-12 Werner Koch <wk@gnupg.org>
-
- * keygen.c (print_status_key_created): New.
- (do_generate_keypair): Use it to print the fingerprint.
- (generate_subkeypair): Likewise.
-
-2002-10-11 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (menu_addrevoker): Properly back out if the signature
- fails. Also, do not allow appointing the same revoker twice, and
- report ALREADY_SIGNED if the user tries it.
-
-2002-10-07 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (import_keys_internal): Missed one s/inp/inp2/.
-
- * keylist.c (print_capabilities): Properly indicate per-key
- capabilities of sign&encrypt primary keys that have
- secret-parts-missing (i.e. no capabilities at all)
-
- * mainproc.c (symkey_decrypt_sesskey): Fix compiler warning.
-
-2002-10-04 David Shaw <dshaw@jabberwocky.com>
-
- * getkey.c (get_pubkey_direct): Don't cache keys retrieved via
- this function as they may not have all their fields filled in.
-
- * sig-check.c (signature_check2): Use new is_primary flag to check
- rather than comparing main_keyid with keyid as this still works in
- the case of a not fully filled in pk.
-
-2002-10-04 Werner Koch <wk@gnupg.org>
-
- * import.c (import_keys_internal): s/inp/inp2/ to avoid shadowing
- warning.
-
- * passphrase.c (agent_get_passphrase): Fixed signed/unsigned char
- problem in %-escaping. Noted by Ingo Klöcker.
-
-2002-10-03 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c (main): Add --strict and --no-strict to switch
- the log_warning severity level from info to error.
-
- * keylist.c (print_capabilities): Secret-parts-missing keys should
- show that fact in the capabilities, and only primary signing keys
- can certify other keys.
-
- * packet.h, parse_packet.c (parse_key): Add is_primary flag for
- public keys (it already exists for secret keys).
-
-2002-10-02 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (import_secret_one): Check for an illegal (>110)
- protection cipher when importing a secret key.
-
- * keylist.c (list_keyblock_print): Show a '#' for a
- secret-parts-missing key.
-
- * parse_packet.c (parse_key): Some comments.
-
- * revoke.c (gen_revoke): Remove some debugging code.
-
- * trustdb.c (verify_own_keys): Make trusted-key a non-deprecated
- option again.
-
- * seckey-cert.c (do_check): Don't give the IDEA warning unless the
- cipher in question is in fact IDEA.
-
-2002-10-01 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (import_one): Make sure that a newly imported key
- starts with a clean ownertrust.
-
-2002-10-01 Werner Koch <wk@gnupg.org>
-
- * getkey.c (get_pubkey_direct): New.
- (merge_selfsigs_main): Use it here to look for an ultimately
- trusted key. Using the full get_pubkey might lead to an
- infinitive recursion.
-
-2002-09-29 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (parse_keyserver_uri): Force the keyserver URI
- scheme to lowercase to be case-insensitive.
-
-2002-09-28 David Shaw <dshaw@jabberwocky.com>
-
- * export.c (do_export_stream): Comment.
-
- * sig-check.c (check_key_signature2): Properly handle a
- non-designated revocation import.
-
-2002-09-26 Werner Koch <wk@gnupg.org>
-
- * g10.c (set_homedir): New. Changed all direct assignments to use
- this.
- * gpgv.c (set_homedir): Ditto.
-
-2002-09-25 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: Link gpg with EGDLIBS (i.e. NETLIBS) as EGD uses
- sockets. Remove the old NETLIBS variable since the keyserver
- stuff is no longer internal.
-
-2002-09-24 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (import_keys_stream): Fix compiler type warning.
-
- * keyring.c (keyring_rebuild_cache), sig-check.c
- (check_key_signature2), import.c (import, chk_self_sigs): Minor
- language cleanups.
-
-2002-09-23 Stefan Bellon <sbellon@sbellon.de>
-
- * main.h: Introduced fast-import as import option. Removed
- fast as separate option from prototypes.
- * import.c (parse_import_options): Added fast-import option.
- (import_*): Removed fast as separate option.
- * g10.c (main): Added option fast-import, removed old fast
- as separate argument.
- * keyserver.c (keyserver_spawn): Removed old fast as separate
- argument.
-
-2002-09-22 Stefan Bellon <sbellon@sbellon.de>
-
- * import.c (import_keys, import_keys_stream,
- import_keys_internal): Added trustdb update/check to key import if
- not fast-import and interactive set/no-auto-check-trustdb unset.
- Avoided function clone by introducing import_keys_internal.
-
-2002-09-19 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_spawn): Properly handle line truncation.
- Don't leak memory (~10-20 bytes) on searches.
- (keyserver_search_prompt): Cleanup.
-
- * keylist.c (list_keyblock_colon): Show 1F direct key signatures
- in --with-colons listing.
-
-2002-09-16 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (menu_addrevoker): The direct key signature for
- revocation keys must be at least v4 to carry the revocation key
- subpacket. Add a PGP 2.x warning for revocation keys.
-
-2002-09-14 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (check_permissions): Rearrange strings to make translating
- easier (don't incorporate string parts).
-
- * keyedit.c (sign_uids): Make strings translatable.
-
- * sig-check.c (check_key_signature2): Make string translatable.
-
-2002-09-13 David Shaw <dshaw@jabberwocky.com>
-
- * getkey.c (check_revocation_keys): Move....
- * main.h, sig-check.c (check_revocation_keys): to here. Also
- return the signature_check error code rather than 0/1 and cache
- the sig result.
-
- * sig-check.c (check_key_signature2): Divert to
- check_revocation_keys if a revocation sig is made by someone other
- than the pk owner.
-
- * getkey.c (merge_selfsigs_main): Tidy.
-
-2002-09-13 Werner Koch <wk@gnupg.org>
-
- * g10.c (main) [__MINGW32__]: Activate oLoadExtension.
-
-2002-09-12 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am, hkp.c, hkp.h, keyserver.c (keyserver_work): Remove
- internal HKP support.
-
- * keyserver.c (keyserver_spawn): Remove whitespace after keyserver
- commands.
-
-2002-09-10 David Shaw <dshaw@jabberwocky.com>
-
- * exec.c (expand_args): Remove loop left over from earlier
- implementation.
- (exec_write): Missed one tick.
-
-2002-09-10 Werner Koch <wk@gnupg.org>
-
- * g10.c, options.h: Removed option --emulate-checksum-bug.
- * misc.c (checksum_u16_nobug): Removed.
- (checksum_u16): Removed the bug emulation.
- (checksum_mpi): Ditto.
- (checksum_mpi_counted_nbits): Removed and replaced all calls
- with checksum_mpi.
-
- * parse-packet.c (read_protected_v3_mpi): New.
- (parse_key): Use it here to store it as an opaque MPI.
- * seckey-cert.c (do_check): Changed the v3 unprotection to the new
- why to store these keys.
- (protect_secret_key): Likewise.
- * build-packet.c (do_secret_key): And changed the writing.
-
- * tdbio.c (tdbio_set_dbname, open_db): Use new macro MY_O_BINARY
- to avoid silly ifdefs.
- (open_db): Fallback to RDONLY so that gpg may be used from a
- RO-medium.
-
- * encode.c (encode_simple): Make sure we don't use an ESK packet
- when we don't have a salt in the S2K.
-
- * misc.c (pct_expando) <case f>: Make sure that LEN is initialized.
-
- * exec.c (exec_finish): Use ticks to denote filenames in messages.
- (make_tempdir, exec_write): Changed format of messages.
-
- * keyserver.c (print_keyinfo): Release USERID in on error.
- (keyserver_work) [!DISABLE_KEYSERVER_HELPERS]: Exclude the unused
- code.
-
-2002-09-09 Werner Koch <wk@gnupg.org>
-
- * parse-packet.c (make_attribute_uidname): Add new ar MAX_NAMELEN
- for sanity checks. Changed both callers. Limit the size of an %s.
-
- * options.skel: Comment lock-once out, so that this file does not
- change anything when copied to a new home directory.
- * openfile.c (try_make_homedir): Don't exit after copying the
- option skeleton.
-
- * options.h: Don't use a comma when declaring variables over more
- than one line.
-
- * mainproc.c (symkey_decrypt_sesskey): Check length of the session
- key.
-
- * hkp.c (dehtmlize): Use ascii_tolower to protect against weird
- locales. Cast the argument for isspace for the sake of broken
- HP/UXes.
- (parse_hkp_index): s/ascii_memcasecmp/ascii_strncasecmp/.
-
- * g10.c: Removed option --emulate-3des-s2k-bug.
-
- * passphrase.c (hash_passphrase): Was used here.
-
- * export.c (parse_export_options)
- * keyserver.c (parse_keyserver_options)
- * import.c (parse_import_options)
- * g10.c (check_permissions): s/ascii_memcasecmp/ascii_strncasecmp/.
-
-2002-09-09 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (add_group): Use '=' to separate group name from group
- members. Use a better error message for when no = is found.
-
- * hkp.c (hkp_export): Use CRLF in headers.
-
-2002-09-03 David Shaw <dshaw@jabberwocky.com>
-
- * mainproc.c (print_pkenc_list): Don't increment the error counter
- when printing the list of keys a message was encrypted to. This
- would make gpg give a non-zero exit code even for completely valid
- messages if the message was encrypted to more than one key that
- the user owned.
-
-2002-09-02 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Try to set a default character set. Print the
- used one in verbosity level 3.
- * gpgv.c (main): Try to set a default character set.
-
- * status.c, status.h (STATUS_IMPORT_OK): New.
- * import.c (import_one,import_secret_one): Print new status.
-
-2002-08-30 David Shaw <dshaw@jabberwocky.com>
-
- * pkclist.c (build_pk_list): Add new status code to indicate an
- untrusted user. This (or a disabled key) fail with "unavailable
- pubkey" (G10ERR_UNU_PUBKEY).
-
- * pkclist.c (build_pk_list): Fail if any recipient keys are
- unusable.
-
- * options.skel: The PGP LDAP keyserver is back. Use MIT keyserver
- as a sample rather than cryptnet as cryptnet does not support
- searching yet.
-
- * keyedit.c (show_key_with_all_names): Fix error message
- (preferences are userid/selfsig and not key specific).
-
-2002-08-30 Werner Koch <wk@gnupg.org>
-
- * pkclist.c (do_we_trust_pre): Changed the wording of a warning.
-
- * encode.c (encode_simple,encode_crypt): Use new style CTB for
- compressssed packets when using MDC. We need to do this so that
- concatenated messages are properly decrypted. Old style
- compression assumes that it is the last packet; given that we
- can't determine the length in advance, the uncompressor does not
- know where to start. Actually we should use the new CTB always
- but this would break PGP 2 compatibility.
-
- * parse-packet.c (parse): Special treatment for new style CTB
- compressed packets.
-
- * build-packet.c (do_mdc): Removed. Was not used.
- (do_encrypted_mdc): Count in the version number and the MDC packet.
-
-2002-08-28 David Shaw <dshaw@jabberwocky.com>
-
- * sig-check.c (do_check_messages, do_check): Show keyid in error
- messages.
-
- * keyserver.c (print_keyinfo): More readable key listings for
- --search-keys responses.
-
-2002-08-26 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (parse_hkp_index, dehtmlize): Move HTML functionality into
- new "dehtmlize" function. Remove HTML before trying to parse each
- line from the keyserver. If the keyserver provides key type
- information in the listing, use it.
-
-2002-08-23 David Shaw <dshaw@jabberwocky.com>
-
- * sig-check.c (do_check, do_check_messages): Emit the usual sig
- warnings even for cached sigs. This also serves to protect
- against missing a sig expiring while cached.
-
- * getkey.c (merge_selfsigs_main): Don't check UID self-sigs twice.
-
-2002-08-22 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (clean_subkeys, chk_self_sigs): Merge clean_subkeys
- into chk_self_sigs. This improves efficiency as the same
- signatures are not checked multiple times. Clarify when a subkey
- is revoked (any revocation signature, even if it is dated before
- the binding signature).
-
- * getkey.c (merge_selfsigs_subkey): Subkey revocation comments.
-
- * keylist.c (list_one): Stats are only for public key listings.
-
- * g10.c (main), options.skel: Default should be include-revoked
- for keyserver operations.
-
-2002-08-21 Werner Koch <wk@gnupg.org>
-
- * import.c (import_print_stats): Print new non_imported counter
- which is currently not used because we terminate on errors.
-
-2002-08-20 David Shaw <dshaw@jabberwocky.com>
-
- * options.skel: Document no-include-attributes for
- keyserver-options.
-
- * keylist.c, keyedit.c, keyserver.c, sign.c: Some TODOs and
- comments.
-
- * export.c (do_export_stream): Fix noop bug in exporting sensitive
- revocation keys.
-
- * pkclist.c (do_edit_ownertrust): Comment out the option for
- showing trust paths until it can be implemented.
-
-2002-08-19 Werner Koch <wk@gnupg.org>
-
- * getkey.c (get_user_id_native): Renamed to ..
- (get_user_id_printable): this. Filter out all dangerous
- characters. Checked all usages.
- (get_user_id_string_native): Renamed to..
- (get_user_id_string_printable): this. Filter out all dangerous
- characters. Checked all usages.
- * keyedit.c (show_basic_key_info): New.
- * keylist.c (print_fingerprint): New mode 3.
- * import.c (import_one): Use new function to display the user ID.
-
-2002-08-16 Timo Schulz <ts@winpt.org>
-
- * g10.c (main): Enable opt.interactive.
-
- * import.c (import_one): Ask the user if the key shall be
- imported when the interactive mode is used. Useful to extract
- selected keys from a file.
-
-2002-08-16 Werner Koch <wk@gnupg.org>
-
- * seckey-cert.c: Workaround to allow decryption of v3 keys created
- with a bug in the mpi_get_secure_buffer.
-
-2002-08-14 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (parse_hkp_index): Properly handle really large keys
- (5 digit key length) in HKP searches.
-
-2002-08-13 David Shaw <dshaw@jabberwocky.com>
-
- * encode.c (encode_simple): Fix problem with using compression
- algo 2 and symmetric compressed files.
-
- * encode.c (encode_simple, encode_crypt): If we are not using a
- MDC, compress even if a file is already compressed. This is to
- help against the chosen ciphertext attack.
-
- * pkclist.c (select_algo_from_prefs): Fix requested algorithm bug
- so the request succeeds even if the requested algorithm is not the
- first found.
-
- * cipher.c (write_header), encode.c (use_mdc, encode_simple,
- encode_crypt, encrypt_filter), g10.c (main): Be more eager to use
- a MDC. We use a MDC if the keys directly support it, if the keys
- list AES (any) or TWOFISH anywhere in the prefs, or if the cipher
- chosen does not have a 64 bit blocksize.
-
-2002-08-08 David Shaw <dshaw@jabberwocky.com>
-
- * options.skel: Some language tweaks, and remove the
- load-extension section for random gatherers.
-
- * keyring.c (create_tmp_file, rename_tmp_file): Create tmp files
- with user-only permissions, but restore the original permissions
- if the user has something special set.
-
- * openfile.c (copy_options_file): Create new options file
- (gpg.conf) with user-only permissions.
-
- * keydb.c (keydb_add_resource): Create new keyrings with user-only
- permissions.
-
- * tdbio.c (tdbio_set_dbname): Create new trustdbs with user-only
- permissions.
-
-2002-08-07 David Shaw <dshaw@jabberwocky.com>
-
- * sig-check.c (signature_check2): Sanity check that the md has a
- context for the hash that the sig is expecting. This can happen
- if a onepass sig header does not match the actual sig, and also if
- the clearsign "Hash:" header is missing or does not match the
- actual sig.
-
- * keyedit.c (menu_revsig): Properly show a uid is revoked without
- restarting gpg. This is Debian bug 124219, though their supplied
- patch will not do the right thing.
-
- * main.h, tdbio.c (tdbio_set_dbname), misc.c (removed
- check_permissions), keydb.c (keydb_add_resource), g10.c (main,
- check_permissions): Significant reworking of the permission check
- mechanism. The new behavior is to check everything in the homedir
- by checking the homedir itself. If the user wants to put
- (possibly shared) keyrings outside the homedir, they are not
- checked. The options file and any extension files are checked
- wherever they are, as well as their enclosing directories. This
- is Debian bug 147760.
-
-2002-08-06 Stefan Bellon <sbellon@sbellon.de>
-
- * g10.c (main): Use of EXTSEP_S in new gpg.conf string.
- * openfile.c (copy_options_file): Ditto.
-
-2002-08-06 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c (main), mainproc.c (proc_encrypted):
- --ignore-mdc-error option to turn a MDC check error into a
- warning.
-
- * encode.c (encode_crypt), g10.c (main), sign.c (sign_file,
- clearsign_file): Use the same --pgpX warning string everywhere to
- ease translations.
-
- * encode.c (write_pubkey_enc_from_list): Warn when using
- --throw-keyid with --pgpX. Noted by Vedaal Nistar.
-
- * revoke.c (export_minimal_pk, gen_desig_revoke, gen_revoke):
- Export a minimal pk along with the revocation cert when in --pgpX
- mode so that PGP can import it.
-
-2002-08-06 Werner Koch <wk@gnupg.org>
-
- * options.skel: Changed comments.
-
- * g10.c (main): Try to use "gpg.conf" as default option file.
- * openfile.c (copy_options_file): Changed name of created file.
-
-2002-08-02 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (LDFLAGS): Removed DYNLINK_LDFLAGS.
-
-2002-07-30 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c (main), mainproc.c (proc_encrypted): Return a
- decryption failed error if a MDC does not verify. Warn if a MDC
- is not present (can disable via --no-mdc-warning).
-
- * exec.c (exec_write), g10.c (main), keyserver.c
- (keyserver_spawn): Use new DISABLE_KEYSERVER_PATH rather than
- FIXED_EXEC_PATH.
-
-2002-07-28 David Shaw <dshaw@jabberwocky.com>
-
- * sig-check.c (do_check): Properly validate v4 sigs with no hashed
- section at all.
-
-2002-07-25 Werner Koch <wk@gnupg.org>
-
- * delkey.c (do_delete_key): Always allow to delete a key in batch mode
- when specified by fingerprint. Suggested by Enzo Michelangeli.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (menu_revsig): Change "revsig" to honor selected uids
- so the user can revoke sigs from particular uids only.
-
- * keylist.c (list_keyblock_print): Don't display expired uids in
- --list-keys unless -v and not --list-sigs (just like revoked
- uids).
-
- * exec.c, export.c, import.c, keyedit.c, keyserver.c, misc.c:
- "Warning" -> "WARNING"
-
-2002-07-24 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, import.c (parse_import_options, fix_hkp_corruption,
- import_one, delete_inv_parts), g10.c (main): New import-option
- "repair-hkp-subkey-bug", which repairs as much as possible the HKP
- mangling multiple subkeys bug. It is on by default for keyserver
- receives, and off by default for regular --import.
-
- * main.h, import.c (import, import_one, delete_inv_parts), hkp.c
- (hkp_ask_import), keyserver.c (keyserver_spawn): Use keyserver
- import options when doing keyserver receives.
-
- * options.h, exec.h, exec.c (set_exec_path, exec_write), g10.c
- (main), keyserver.c (keyserver_spawn): If the user does not use
- "exec-path", completely replace $PATH with GNUPG_LIBEXECDIR before
- calling the keyserver helper. If the user does use "exec-path",
- append GNUPG_LIBEXECDIR after the specified path.
-
-2002-07-23 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (parse_import_options), export.c
- (parse_export_options): Fix offset problem with reversed ("no-")
- meanings.
-
- * import.c (delete_inv_parts): Discard subkey signatures (0x18 and
- 0x28) if found in the userid section of the key.
-
- * sig-check.c (signature_check2): Signatures made by invalid
- subkeys (bad/missing binding sig) are also invalid.
-
- * keylist.c (print_fingerprint): Show the primary as well as the
- secondary key fingerprint in modes 1 & 2.
-
-2002-07-22 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, main.h, g10.c (main), import.c
- (parse_import_options, delete_inv_parts), keyserver.c
- (parse_keyserver_options): add new --import-options option. The
- only current flag is "allow-local-sigs".
-
- * g10.c (main): Don't disable MDC in pgp7 mode.
-
- * options.h, g10.c (main), keyserver.c (parse_keyserver_options):
- Remove old keyserver-option include-attributes now that there is
- an export-option for the same thing.
-
- * options.h, main.h, export.c (parse_export_options,
- do_export_stream), g10.c (main): add new --export-options option.
- Current flags are "include-non-rfc", "include-local-sigs",
- "include-attributes", and "include-sensitive-revkeys".
-
- * options.h, hkp.c (hkp_export), keyserver.c
- (parse_keyserver_options, keyserver_spawn): try passing unknown
- keyserver options to export options, and if successful, use them
- when doing a keyserver --send-key.
-
- * build-packet.c (build_sig_subpkt): We do not generate
- SIGSUBPKT_PRIV_VERIFY_CACHE anymore.
-
- * revoke.c (gen_desig_revoke): Lots more comments about including
- sensitive revkeys along with the revocation sig itself.
-
- * keyserver.c (parse_keyserver_options): Simpler implementation
- that can skip one pass over the options.
-
-2002-07-18 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (keyedit_menu, menu_addrevoker): Allow specifying
- "sensitive" as an argument to an addrevoker command. This sets
- the 0x40 sensitive revoker flag.
-
- * revoke.c (gen_desig_revoke): When generating a designated
- revocation, include the direct key sig that contains the
- designated revoker subpacket. This allows sensitive designated
- revocation subpackets to be exported. Also indicate which
- revokers are sensitive in the first place.
-
-2002-07-17 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (show_key_with_all_names_colon): The 0x40 class bit in
- a designated revoker means "sensitive", not "local". It's
- exportable under the right circumstances.
-
- * main.h, options.h, export.c (do_export_stream), g10.c (main),
- hkp.c (hkp_export), keyserver.c (keyserver_spawn: Add a flag to
- skip attribute packets and their signatures while exporting. This
- is to accomodate keyservers (pksd again) that choke on attributes.
- Use keyserver-option "include-attributes" to control it. This
- defaults to ON (i.e. don't skip).
-
-2002-07-09 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, keyserver.c (parse_keyserver_uri, keyserver_spawn,
- keyserver_work), hkp.c (hkp_ask_import, hkp_export, hkp_search):
- Use a much more strict reading of RFC-2396 for the keyserver URIs.
- Specifically, don't try and be smart about checking the value of
- ":port" so long as it is all digits, and properly handle opaque
- data (those scheme specific parts that do not start with "//").
-
-2002-07-04 David Shaw <dshaw@jabberwocky.com>
-
- * photoid.c (get_default_photo_command, show_photos): Honor
- FIXED_PHOTO_VIEWER and DISABLE_PHOTO_VIEWER.
-
- * mainproc.c (check_sig_and_print): Use --show-photos to show
- photos when verifying a sig made by a key with a photo.
-
- * keyserver.c (parse_keyserver_uri): Properly parse a URI with no
- :port section and an empty file path, but with a terminating '/'.
- (keyserver_work): Honor DISABLE_KEYSERVER_HELPERS.
-
- * hkp.c (hkp_ask_import): Display keyserver URI as a URI, but only
- if verbose.
-
- * exec.c, g10.c: USE_EXEC_PATH -> FIXED_EXEC_PATH
-
-2002-07-03 David Shaw <dshaw@jabberwocky.com>
-
- * exec.h, exec.c (set_exec_path, exec_write), g10.c (main): If
- USE_EXEC_PATH is defined at compile time, use it to lock the
- exec-path and not allow the user to change it.
-
-2002-07-02 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c (main), keyserver.c (keyserver_refresh):
- Maintain and use the original keyserver URI for cosmetics rather
- than trying to recreate it when needed.
-
- * mainproc.c (check_sig_and_print): Properly disregard expired
- uids. Make sure that the first uid listed is a real uid and not
- an attribute (attributes should only be listed in the "aka"
- section). When there are no valid textual userids, try for an
- invalid textual userid before using any attribute uid.
-
-2002-07-01 David Shaw <dshaw@jabberwocky.com>
-
- * options.skel: Fix a few typos, clarify "group", and remove
- sample photo viewers for Win32 since they are the defaults now.
-
- * parse-packet.c (make_attribute_uidname), keylist.c
- (dump_attribs): Fix two typecast warnings.
-
- * packet.h, build-packet.c (build_attribute_subpkt), exec.c
- (expand_args), mkdtemp.c (mkdtemp), photoid.c
- (parse_image_header): Fix some signedness compiler warnings.
-
-2002-07-01 Werner Koch <wk@gnupg.org>
-
- * photoid.c (get_default_photo_command): Also use __MINGW32__
- instead of HAVE_DOSISH_SYSTEM.
-
- * encode.c (encode_symmetric): Do not use the new encryption code.
-
-2002-06-30 Werner Koch <wk@gnupg.org>
-
- * photoid.c: Use __MINGW32__ to include windows because
- HAVE_DOSISH_SYSTEM is also set for OS/2 and plain DOS. Provide
- constant missing in older mingw installations.
-
-2002-06-21 Stefan Bellon <sbellon@sbellon.de>
-
- * g10.c [__riscos__]: Moved RISC OS specific stuff to util/riscos.c
- and include/util.h.
-
- * gpgv.c [__riscos__]: Likewise.
-
-2002-06-20 David Shaw <dshaw@jabberwocky.com>
-
- * keydb.h, pkclist.c (select_algo_from_prefs): Allow passing a
- suggested algorithm which will be used if available.
-
- * encode.c (encode_crypt, encrypt_filter), sign.c (sign_file): Use
- new select_algo_from_prefs feature to check if forcing an
- algorithm would violate the recipient preferences.
-
- * photoid.c (get_default_photo_command, show_photos): Use
- different default viewers on different platforms. Currently we
- have Win 9x, Win NT (2k, xp), Mac OSX, RISC OS, and "everybody
- else". These are #ifdefs as much as possible to avoid clutter.
-
- * g10.c (strusage, build_list), keyedit.c (show_prefs), main.h,
- misc.c (compress_algo_to_string, check_compress_algo), pkclist.c
- (algo_available), keygen.c (keygen_set_std_prefs): New
- algo_to_string and check functions for compress algorithms.
-
-2002-06-20 Werner Koch <wk@gnupg.org>
-
- * misc.c (setsysinfo): Removed a #warning for Alpha's uniligedn
- trap disabling - it is quite possible that this is a debug relict.
-
-2002-06-20 Stefan Bellon <sbellon@sbellon.de>
-
- * g10.c [__riscos__]: Added image file system feature.
-
- * gpgv.c [__riscos__]: Added image file system feature.
-
- * photoid.c (show_photos) [__riscos__]: Set RISC OS filetype of
- photo id according to MIME type.
-
-2002-06-19 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (parse_hkp_index): Don't leak memory when failing out of a
- bad HKP keyserver.
-
- * g10.c (add_notation_data): Relax slightly the rules as to what
- can go into a notation name - 2440 allows "@", for example.
-
-2002-06-17 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (clean_subkeys, import_one): Only allow at most 1
- binding sig and at most 1 revocation sig on a subkey, as per
- 2440:11.1.
-
- * hkp.c (parse_hkp_index, hkp_search): Error if the keyserver
- returns an unparseable HKP response.
-
-2002-06-15 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (show_key_with_all_names), keylist.c
- (list_keyblock_print): Show "[expired]" before expired uids.
-
- * keyedit.c (show_key_with_all_names_colon), mainproc.c
- (list_node), keylist.c (list_keyblock_colon): Show flag 'e' for
- expired user ids. Use "uat" for user attribute packets instead of
- "uid". Also use '<count> <length>' rather than the fake user id
- string on attributes.
-
- * keygen.c (keygen_add_revkey): Remove unused code.
-
- * misc.c (check_permissions): Check directory permissions
- properly - they are not special files.
-
- * pkclist.c (expand_id, expand_group, build_pk_list): When
- expanding groups before building a pk list, inherit flags from the
- original pre-expanded string.
-
- * pubkey-enc.c (is_algo_in_prefs): Don't use prefs from expired
- uids.
-
-2002-06-14 David Shaw <dshaw@jabberwocky.com>
-
- * free-packet.c (copy_signature): Properly copy a signature that
- carries a revocation key on it.
-
- * pkclist.c (expand_id, expand_group, build_pk_list): Groups now
- work properly when used in the "Enter the user ID" prompt.
-
-2002-06-14 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (show_key_with_all_names): Display warning if a user
- tries to show prefs on a v3 key with a v3 selfsig.
-
- * kbnode.c (dump_kbnode): Show if a uid is expired.
-
- * import.c (merge_blocks, import_revoke_cert): Show user ID
- receiving a revocation certificate.
-
- * free-packet.c (cmp_user_ids): Properly compare attribute ids.
-
- * pkclist.c (expand_groups): Maintain the strlist flags while
- expanding. Members of an expansion inherit their flags from the
- expansion key.
-
- * options.h, cipher.c (write_header), g10.c (main), keygen.c
- (keygen_set_std_prefs): remove the personal_mdc flag. It no
- longer serves a purpose now that the personal preference lists are
- split into cipher/digest/zip.
-
-2002-06-14 Timo Schulz <ts@winpt.org>
-
- * skclist.c (is_insecure): Implemented.
-
-2002-06-12 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_spawn): Properly handle PROGRAM responses
- when they have a CRLF ending. Noted by Keith Ray.
-
- * keyserver.c (keyserver_spawn): Handle CRLF endings from
- keyserver helpers. Also don't leak the last line worth of memory
- from the keyserver response.
-
- * main.h, misc.c (deprecated_warning): New function to warn about
- deprecated options and commands.
-
- * g10.c (main), keyserver-internal.h, keyserver.c
- (parse_keyserver_uri): Use new deprecated function to warn about
- honor-http-proxy, auto-key-retrieve, and x-broken-hkp.
-
-2002-06-11 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: link gpg with NETLIBS for the built-in HKP access.
-
-2002-06-10 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, keyserver.c (keyserver_opts), g10.c (main): New
- keyserver option "include-subkeys". This feature already existed,
- but now can be turned off. It defaults to on.
-
- * options.h, keyserver.c (parse_keyserver_options,
- keyserver_spawn): There are now enough options to justify making a
- structure for the keyserver options rather than a page of
- if-then-else-if-then-etc.
-
- * getkey.c (merge_keys_and_selfsig, merge_selfsigs_main): Fix bug
- in calculating key expiration dates.
-
-2002-06-09 David Shaw <dshaw@jabberwocky.com>
-
- * keydb.h, getkey.c (get_user_id_native), import.c (import_one):
- Display user ID while importing a key. Note this applies to both
- --import and keyserver --recv-keys.
-
- * exec.c (exec_finish): Log unnatural exit (core dump, killed
- manually, etc) for fork/exec/pipe child processes.
-
-2002-06-08 Timo Schulz <ts@winpt.org>
-
- * encode.c (encode_symmetric): Disable the compat flag
- when the expert mode is enabled.
-
-2002-06-07 David Shaw <dshaw@jabberwocky.com>
-
- * options.skel, options.h, main.h, keydb.h, pkclist.c
- (build_pk_list, expand_groups), g10.c (main, add_group): Add new
- "group" command to allow one name to expand into multiple keys.
- For simplicity, and to avoid potential loops, we only expand once
- - you can't make an alias that points to an alias.
-
- * main.h, g10.c (main), keygen.c (build_personal_digest_list):
- Simplify the default digest list - there is really no need for the
- other hashes since they will never be used after SHA-1 in the
- list.
-
- * options.skel, options.h, g10.c (main), hkp.c (hkp_ask_import,
- hkp_export, hkp_search), keyserver.c (parse_keyserver_options,
- parse_keyserver_uri, keyserver_work, keyserver_refresh): Make the
- "x-broken-hkp" keyserver scheme into keyserver-option
- "broken-http-proxy". Move honor_http_proxy into
- keyserver_options. Canonicalize the three variations of "hkp",
- "x-hkp", and "x-broken-hkp" into "hkp".
-
-2002-06-07 Stefan Bellon <sbellon@sbellon.de>
-
- * g10.c [__riscos__]: Added --attribute-file to do the same as
- --attribute-fd, but with a filename not a fd as argument.
- Added magic symbol for RISC OS to use different memory management.
-
- * gpgv.c [__riscos__]: Added magic symbol for RISC OS to use
- different memory management.
-
-2002-06-06 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, g10.c (main), keygen.c (build_personal_digest_list): Put
- in a default digest preference list consisting of SHA-1, followed
- by every other installed digest except MD5. Note this is the same
- as having no digest preference at all except for SHA-1 being
- favored.
-
- * options.h, g10.c (main), keygen.c (keygen_set_std_prefs),
- pkclist.c (select_algo_from_prefs): Split
- --personal-preference-list into three:
- --personal-{cipher|digest|compress}-preferences. This allows a
- user to set one without affecting another (i.e. setting only a
- digest pref doesn't imply an empty cipher pref).
-
- * exec.c (exec_read): This is a safer way of guessing the return
- value of system(). Noted by Stefan Bellon.
-
-2002-06-05 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (parse_hkp_index): Be more robust with keyservers
- returning very unparseable responses.
-
- * exec.c (exec_read): Catch and display an error when the remote
- process exits unnaturally (i.e. segfault) so the user knows what
- happened. Also fix exec_write stub which has a different number
- of arguments now.
-
-2002-06-05 Timo Schulz <ts@winpt.org>
-
- * encode.c (encode_simple): Ignore the new mode for RFC1991.
- * mainproc.c (symkey_decrypt_sesskey): Better check for weird
- keysizes.
-
-2002-06-05 Timo Schulz <ts@winpt.org>
-
- * encode.c (encode_sesskey): New.
- (encode_simple): Use it here. But by default we use the compat
- mode which supress to generate encrypted session keys.
-
-2002-06-05 Timo Schulz <ts@winpt.org>
-
- * mainproc.c (symkey_decrypt_sesskey): New.
- (proc_symkey_enc): Support for encrypted session keys.
-
-2002-06-04 David Shaw <dshaw@jabberwocky.com>
-
- * sign.c (hash_for, sign_file): When encrypting and signing at the
- same time, consult the various hash prefs to pick a hash algorithm
- to use. Pass in a 160-bit hint if any of the signing keys are
- DSA.
-
- * keydb.h, pkclist.c (select_algo_from_prefs, algo_available):
- Pass a "hints" opaque pointer in to let the caller give hints as
- to what algorithms would be acceptable. The only current hint is
- for PREFTYPE_HASH to require a 160-bit hash for DSA. Change all
- callers in encode.c (encode_crypt, encrypt_filter) and sign.c
- (sign_file). If we settle on MD5 as the best algorithm based
- solely on recepient keys and SHA1 is also a possibility, use SHA1
- unless the user intentionally chose MD5. This is as per 2440:13.
-
- * exec.c (make_tempdir): Fix duplicated filename problem.
-
-2002-06-03 David Shaw <dshaw@jabberwocky.com>
-
- * packet.h, parse-packet.c (enum_sig_subpkt): Report back from
- enum_sig_subpkt when a subpacket is critical and change all
- callers in keylist.c (show_policy_url, show_notation), mainproc.c
- (print_notation_data), and pkclist.c (do_show_revocation_reason).
-
- * keylist.c (show_policy_url, show_notation): Display if the
- policy or notation is critical.
-
-2002-06-03 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, g10.c (main), keylist.c (dump_attribs, set_attrib_fd,
- list_keyblock_print, list_keyblock_colon), status.h, status.c
- (get_status_string): New --attribute-fd feature to dump the
- contents of attribute subpackets for frontends. If --status-fd is
- also used, then a new status tag ATTRIBUTE is provided for each
- subpacket.
-
- * packet.h, getkey.c (fixup_uidnode, merge_selfsigs_main,
- merge_selfsigs_subkey), parse-packet.c (setup_user_id): Keep track
- of the expiration time of a user ID, and while we're at it, use
- the expired flag from the selfsig rather than reparsing the
- SIG_EXPIRE subpacket.
-
- * photoid.c (generate_photo_id): When adding a new photo ID,
- showing the photo for confirmation is not safe when noninteractive
- since the "user" may not be able to dismiss a viewer window.
- Noted by Timo Schulz.
-
-2002-06-03 David Shaw <dshaw@jabberwocky.com>
-
- * options.skel: Sample photo viewers for Win32.
-
- * misc.c (pct_expando): Use the seckey for %k/%K if the pubkey is
- not available.
-
- * photoid.h, photoid.c (show_photos): Include the seckey in case a
- user tries to view a photo on a secret key, and change all callers
- in keyedit.c (menu_showphoto), keylist.c (list_keyblock_print),
- and photoid.c (generate_photo_id).
-
-2002-06-02 David Shaw <dshaw@jabberwocky.com>
-
- * photoid.c (show_photos): Work properly when not called with a
- public key.
-
-2002-05-31 David Shaw <dshaw@jabberwocky.com>
-
- * sign.c (mk_notation_and_policy): Free unneeded buffer.
-
- * hkp.c (parse_hkp_index): Properly handle the '&' character
- (i.e. "&amp;") in HKP responses.
-
- * getkey.c (merge_selfsigs_main): Fix reversed expiration time
- check with self-sigs.
-
- * keyedit.c (sign_uids): When making a new self-sig on a v3 key,
- make a v3 self-sig unless it is currently a v3 self-sig being
- promoted to v4.
-
-2002-05-31 Timo Schulz <ts@winpt.org>
-
- * pkclist.c (do_show_revocation_reason): Don't use capital
- letters for non-interactive output.
- (show_revocation_reason): Now it is global.
- * pubkey-enc.c (get_it): Show if the key has been revoked.
-
-2002-05-30 David Shaw <dshaw@jabberwocky.com>
-
- * sign.c (write_signature_packets, sign_file, clearsign_file,
- sign_symencrypt_file): Make a v4 signature if a policy URL or
- notation is set, unless v3 sigs are forced via rfc1991 or
- force-v3-sigs. Also remove some doubled code and clarify an error
- message (we don't sign in PGP2 mode - just detach-sign).
-
- * parse-packet.c (parse_one_sig_subpkt): Add KS_FLAGS to the "any
- size" section.
-
-2002-05-29 David Shaw <dshaw@jabberwocky.com>
-
- * keygen.c (keygen_set_std_prefs, add_feature_mdc): Use "mdc" and
- "no-mdc" in the prefs string to allow switching on and off the MDC
- feature. This is needed to properly export a key from GnuPG for
- use on PGP which does not support MDC - without this, MDC-capable
- implementations will still try and generate MDCs which will break
- PGP.
-
- * keygen.c (keygen_get_std_prefs): Show "[mdc]" in prefs string if
- it is enabled.
-
- * options.h, g10.c (main), cipher.c (write_header), keygen.c
- (keygen_set_std_prefs): For consistency, allow the user to specify
- mdc/no-mdc in the --personal-preference-list. If disabled, it
- acts just like --disable-mdc.
-
-2002-05-29 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, exec.c: Add some debugging info, using the 1024 debug
- flag.
-
- * exec.c (win_system): New system()-like function for win32 that
- does not return until the child process terminates. Of course,
- this doesn't help if the process itself exits before it is
- finished.
-
-2002-05-29 Werner Koch <wk@gnupg.org>
-
- * encode.c (encode_simple): Intialize PKT when --no-literal is used.
-
- * keyedit.c (show_key_with_all_names_colon): Renamed the record
- for revocation keys to "rvk".
-
-2002-05-27 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (show_key_with_all_names_colon): New.
- (show_key_with_all_names): Divert to new function when required.
- Sanitize printing of revoker name.
-
-2002-05-27 David Shaw <dshaw@jabberwocky.com>
-
- * build-packet.c (build_sig_subpkt): Handle setting sig flags for
- certain subpacket types (notation, policy url, exportable,
- revocable). keyedit.c (sign_mk_attrib): Flags no longer need to
- be set here.
-
- * packet.h, parse-packet.c (parse_one_sig_subpkt), build-packet.c
- (build_sig_subpkt): Call parse_one_sig_subpkt to sanity check
- buffer lengths before building a sig subpacket.
-
-2002-05-26 David Shaw <dshaw@jabberwocky.com>
-
- * sign.c (mk_notation_and_policy): Include secret key to enable %s
- expandos, and pass notations through pct_expando as well.
-
- * main.h, misc.c (pct_expando): Add %s and %S expandos for
- signer's keyid.
-
-2002-05-25 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (strusage, build_list): Add compress algorithms to
- --version list. Show algorithm numbers when --verbose --version
- is done.
-
-2002-05-22 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, main.h, keygen.c (keygen_set_set_prefs,
- keygen_get_std_prefs, keygen_upd_std_prefs), keyedit.c
- (keyedit_menu), g10.c (main), pkclist.c (select_algo_from_prefs):
- Add --personal-preference-list which allows the user to factor in
- their own preferred algorithms when the preference lists are
- consulted. Obviously, this does not let the user violate a
- recepient's preferences (and the RFC) - this only influences the
- ranking of the agreed-on (and available) algorithms from the
- recepients. Suggested by David Hollenberg.
-
- * options.h, keygen.c (keygen_set_std_prefs), g10.c (main): Rename
- --preference-list to --default-preference-list (as that is what it
- really is), and make it a true default in that if the user selects
- "default" they get this list and not the compiled-in list.
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Add missing LF in a info printout and made it
- translatable. Noted by Michael Tokarev.
-
-2002-05-21 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Removed the undef of USE_SHM_COPROCESSING which
- was erroneously introduced on 2002-01-09.
-
- * signal.c (got_fatal_signal): Don't write the Nul to stderr.
- Reported by David Hollenberg.
-
-2002-05-18 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, g10.c (main), revoke.c (gen_desig_revoke): Generate a
- designated revocation via --desig-revoke
-
- * keyedit.c (keyedit_menu, menu_addrevoker): New "addrevoker"
- command to add a designated revoker to a key.
-
-2002-05-17 David Shaw <dshaw@jabberwocky.com>
-
- * gpgv.c: Add stub for get_ownertrust().
-
- * g10.c (main): --allow-freeform-uid should be implied by
- OpenPGP. Add --no-allow-freeform-uid.
-
- * keyedit.c (sign_uids): Issue a warning when signing a
- non-selfsigned uid.
-
- * getkey.c (merge_selfsigs_main): If a key has no selfsigs, and
- allow-non-selfsigned-uid is not set, still try and make the key
- valid by checking all uids for a signature from an ultimately
- trusted key.
-
-2002-05-16 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, keygen.c (keygen_add_revkey): Add revocation key
- subpackets to a signature (callable by
- make_keysig_packet). (write_direct_sig): Write a 1F direct key
- signature. (parse_revocation_key): Parse a string in
- algo:fpr:sensitive format into a revocation
- key. (get_parameter_revkey, do_generate_keypair): Call above
- functions when prompted from a batch key generation file.
-
- * build-packet.c (build_sig_subpkt): Allow multiple revocation key
- subpackets in a single sig.
-
- * keydb.h, getkey.c (get_seckey_byfprint): Same as
- get_pubkey_byfprint, except for secret keys. We only know the
- fingerprint of a revocation key, so this is needed to retrieve the
- secret key needed to issue a revokation.
-
- * packet.h, parse-packet.c (parse_signature, parse_revkeys): Split
- revkey parsing off into a new function that can be used to reparse
- after manipulating the revkey list.
-
- * sign.c (make_keysig_packet): Ability to make 1F direct key
- signatures.
-
-2002-05-15 David Shaw <dshaw@jabberwocky.com>
-
- * options.skel: keyserver.pgp.com is gone, so list pgp.surfnet.nl
- as a sample LDAP server instead.
-
- * getkey.c (merge_selfsigs_main): Properly handle multiple
- revocation keys in a single packet. Properly handle revocation
- keys that are in out-of-order packets. Remove duplicates in
- revocation key list.
-
-2002-05-14 Timo Schulz <ts@winpt.org>
-
- * exec.c (make_tempdir) [MINGW32]: Added missing '\'.
-
-2002-05-14 Stefan Bellon <sbellon@sbellon.de>
-
- * exec.c (make_tempdir): Make use of EXTSEP_S instead of hardcoded
- dot as extension separator.
-
-2002-05-13 David Shaw <dshaw@jabberwocky.com>
-
- * photoid.c (show_photos): Use the long keyid as the filename for
- the photo. Use the short keyid as the filename on 8.3 systems.
-
- * exec.h, exec.c (make_tempdir, exec_write, exec_finish): Allow
- caller to specify filename. This should make things easier on
- windows and macs where the file extension is required, but a whole
- filename is even better.
-
- * keyedit.c (show_key_with_all_names, show_prefs): Show proper
- prefs for a v4 key uid with no selfsig at all.
-
- * misc.c (check_permissions): Don't check permissions on
- non-normal files (pipes, character devices, etc.)
-
-2002-05-11 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (proc_symkey_enc): Avoid segv in case the parser
- encountered an invalid packet.
-
- * keyserver.c (keyserver_export): Get confirmation before sending
- all keys.
-
-2002-05-10 Stefan Bellon <sbellon@sbellon.de>
-
- * g10.c, hkp.c, keyedit.c, keyserver.c: Replaced all occurrances
- of strcasecmp with ascii_strcasecmp and all occurrances of
- strncasecmp with ascii_memcasecmp.
-
-2002-05-10 David Shaw <dshaw@jabberwocky.com>
-
- * packet.h, getkey.c (fixup_uidnode), keyedit.c (show_prefs): Show
- assumed prefs for hash and compression as well as the cipher pref.
- Show assumed prefs if there are no prefs at all on a v4
- self-signed key.
-
- * options.h, g10.c (main), sign.c (make_keysig_packet): New
- --cert-digest-algo function to override the default key signing
- hash algorithm.
-
-2002-05-09 David Shaw <dshaw@jabberwocky.com>
-
- * getkey.c (merge_selfsigs_main): Make sure the revocation key
- list starts clean as this function may be called more than once
- (e.g. from functions in --edit).
-
- * g10.c, encode.c (encode_crypt), sign.c (sign_file,
- sign_symencrypt_file): Make --compress-algo work like the
- documentation says. It should be like --cipher-algo and
- --digest-algo in that it can override the preferences calculation
- and impose the setting the user wants. No --compress-algo setting
- allows the usual preferences calculation to take place.
-
- * main.h, compress.c (compress_filter): use new
- DEFAULT_COMPRESS_ALGO define, and add a sanity check for compress
- algo value.
-
-2002-05-08 David Shaw <dshaw@jabberwocky.com>
-
- * pkclist.c (select_algo_from_prefs): There is an assumed
- compression preference for uncompressed data.
-
-2002-05-07 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c (main), getkey.c (finish_lookup), pkclist.c
- (algo_available): --pgp7, identical to --pgp6 except that it
- permits a few algorithms that PGP 7 added: AES128, AES192, AES256,
- and TWOFISH. Any more of these --pgpX flags, and it'll be time to
- start looking at a generic --emulate-pgp X option.
-
- * export.c (do_export_stream): Warn the user when exporting a
- secret key if it or any of its secret subkeys are protected with
- SHA1 while simple_sk_checksum is set.
-
- * parse-packet.c (parse_key): Show when the SHA1 protection is
- used in --list-packets.
-
- * options.h, build-packet.c (do_comment), g10.c (main): Rename
- --no-comment as --sk-comments/--no-sk-comments (--no-comment still
- works) and make the default be --no-sk-comments.
-
-2002-05-07 Werner Koch <wk@gnupg.org>
-
- * keygen.c (get_parameter_algo): Never allow generation of the
- deprecated RSA-E or RSA-S flavors of PGP RSA.
- (ask_algo): Allow generation of RSA sign and encrypt in expert
- mode. Don't allow ElGamal S+E unless in expert mode.
- * helptext.c: Added entry keygen.algo.rsa_se.
-
-2002-05-07 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (sign_uids): If --expert is set, allow re-signing a
- uid to promote a v3 self-sig to a v4 one. This essentially
- deletes the old v3 self-sig and replaces it with a v4 one.
-
- * packet.h, parse-packet.c (parse_key), getkey.c
- (merge_keys_and_selfsig, merge_selfsigs_main): a v3 key with a v4
- self-sig must never let the v4 self-sig express a key expiration
- time that extends beyond the original v3 expiration time.
-
-2002-05-06 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (sign_uids): When making a self-signature via "sign"
- don't ask about sig level or expiration, and include the usual
- preferences and such for v4 self-sigs. (menu_set_preferences):
- Convert uids from UTF8 to native before printing.
-
- * keyedit.c (sign_uids): Convert uids from UTF8 to native before
- printing. (menu_set_primary_uid): Show error if the user tries to
- make a uid with a v3 self-sig primary.
-
-2002-05-05 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (import_one): When merging with a key we already have,
- don't let a key conflict (same keyid but different key) stop the
- import: just skip the bad key and continue.
-
- * exec.c (make_tempdir): Under Win32, don't try environment
- variables for temp directories - GetTempDir tries environment
- variables internally, and it's better not to second-guess it in
- case MS adds some sort of temp dir handling to Windows at some
- point.
-
-2002-05-05 Timo Schulz <ts@winpt.org>
-
- * mainproc.c (proc_symkey_enc): Don't ask for a passphrase
- in the list only mode.
-
-2002-05-05 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_refresh): --refresh-keys implies
- --merge-only so as not to import keys with keyids that match the
- ones being refreshed. Noted by Florian Weimer.
-
-2002-05-04 Stefan Bellon <sbellon@sbellon.de>
-
- * free-packet.c (copy_public_key): Don't call m_alloc(0), therefore
- added consistency check for revkey and numrefkeys.
-
- * getkey.c (check_revocation_keys): Added consistency check for
- revkey and numrefkeys.
-
- * keyedit.c (show_key_with_all_names): Likewise.
-
-2002-05-03 David Shaw <dshaw@jabberwocky.com>
-
- * photoid.c: Provide default image viewer for Win32.
-
- * misc.c (pct_expando): %t means extension, not name ("jpg", not
- "jpeg").
-
- * keyserver.c (keyserver_spawn), photoid.c (show_photos), exec.h,
- exec.c: Allow the caller to determine the temp file extension when
- starting an exec_write and change all callers.
-
- * keyedit.c (sign_uids): Nonrevocable key signatures cause an
- automatic promotion to v4.
-
- * exec.c: Provide stubs for exec_ functions when NO_EXEC is
- defined.
-
-2002-05-02 David Shaw <dshaw@jabberwocky.com>
-
- * photoid.h, photoid.c (parse_image_header, image_type_to_string):
- Useful functions to return data about an image.
-
- * packet.h, parse-packet.c (make_attribute_uidname,
- parse_attribute_subpkts, parse_attribute), photoid.h, photoid.c
- (show_photos): Handle multiple images in a single attribute
- packet.
-
- * main.h, misc.c (pct_expando), sign.c (mk_notation_and_policy),
- photoid.c (show_photos): Simpler expando code that does not
- require using compile-time string sizes. Call
- image_type_to_string to get image strings (i.e. "jpg",
- "image/jpeg"). Change all callers.
-
- * keyedit.c (menu_showphoto), keylist.c (list_keyblock_print):
- Allow viewing multiple images within a single attribute packet.
-
- * gpgv.c: Various stubs for link happiness.
-
-2002-05-02 David Shaw <dshaw@jabberwocky.com>
-
- * build-packet.c (build_sig_subpkt), keyedit.c (sign_uids),
- options.h, sign.c (mk_notation_and_policy), g10.c (main,
- add_notation_data, add_policy_url (new), check_policy_url
- (removed)): Allow multiple policy URLs on a given signature.
- Split "--notation-data" into "--cert-notation" and
- "--sig-notation" so the user can set different policies for key
- and data signing. For backwards compatibility, "--notation-data"
- sets both, as before.
-
-2002-05-02 Werner Koch <wk@gnupg.org>
-
- * options.skel: Removed the comment on trusted-keys because this
- option is now deprecated.
-
-2002-05-01 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (menu_adduid): 2440bis04 says that multiple attribute
- packets on a given key are legal.
-
- * keyserver.c (keyserver_refresh): the fake v3 keyid hack applies
- to "mailto" URLs as well since they are also served by pksd.
-
-2002-04-29 Werner Koch <wk@gnupg.org>
-
- Added a copyright year for files changed this year.
-
-2002-04-25 Werner Koch <wk@gnupg.org>
-
- * g10.c, options.h: New options --display, --ttyname, --ttytype,
- --lc-ctype, --lc-messages to be used with future versions of the
- gpg-agent.
- * passphrase.c (agent_send_option,agent_send_all_options): New.
- (agent_open): Send options to the agent.
-
- * trustdb.c (update_ownertrust, clear_ownertrust): Do an explicit
- do_sync because revalidation_mark does it only if when the
- timestamp actually changes.
-
-2002-04-23 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, keygen.c (do_generate_keypair), keylist.c
- (print_signature_stats, list_all, list_one, list_keyblock,
- list_keyblock_print, list_keyblock_colon): After generating a new
- key, show the key information (name, keyid, fingerprint, etc.)
- Also do not print uncheckable signatures (missing key..) in
- --check-sigs. Print statistics (N missing keys, etc.) after
- --check-sigs.
-
- * keyedit.c (sign_uids): When signing a key with an expiration
- date on it, the "Do you want your signature to expire at the same
- time?" question should default to YES.
-
-2002-04-22 David Shaw <dshaw@jabberwocky.com>
-
- * parse-packet.c (parse_plaintext), packet.h, plaintext.c
- (handle_plaintext): Fix bug in handling literal packets with
- zero-length data (no data was being confused with partial body
- length).
-
- * misc.c (pct_expando), options.skel: %t means extension ("jpg").
- %T means MIME type ("image/jpeg").
-
- * import.c (import_one): Only trigger trust update if the keyring
- is actually changed.
-
- * export.c (do_export_stream): Missing a m_free.
-
-2002-04-22 Stefan Bellon <sbellon@sbellon.de>
-
- * keyid.c (expirestr_from_sk, expirestr_from_sig): Added _() to
- string constant.
-
- * exec.c (make_tempdir) [__riscos__]: Better placement of
- temporary file.
-
-2002-04-20 David Shaw <dshaw@jabberwocky.com>
-
- * keygen.c (generate_subkeypair): 2440bis04 adds that creating
- subkeys on v3 keys is a MUST NOT.
-
- * getkey.c (finish_lookup): The --pgp6 "use the primary key"
- behavior should only apply while data signing and not encryption.
- Noted by Roger Sondermann.
-
-2002-04-19 Werner Koch <wk@gnupg.org>
-
- * keygen.c (keygen_set_std_prefs): Put back 3DES because the RFC
- says it is good form to do so.
-
-2002-04-19 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (menu_deluid): Only cause a trust update if we delete
- a non-revoked user id.
-
- * hkp.c (hkp_ask_import), keyserver.c (parse_keyserver_options,
- keyserver_spawn), options.h: Remove fast-import keyserver option
- (no longer meaningful).
-
- * g10.c (main), keyedit.c (sign_uids), options.h: Change
- --default-check-level to --default-cert-check-level as it makes
- clear what it operates on.
-
- * g10.c (main): --pgp6 also implies --no-ask-sig-expire.
-
- * delkey.c (do_delete_key): Comment.
-
- * keyedit.c (sign_uids, keyedit_menu, menu_deluid, menu_delsig,
- menu_expire, menu_revsig, menu_revkey): Only force a trustdb check
- if we did something that changes it.
-
- * g10.c: add "--auto-check-trustdb" to override a
- "--no-auto-check-trustdb"
-
-2002-04-19 Werner Koch <wk@gnupg.org>
-
- * tdbio.c (tdbio_write_nextcheck): Return a status whether the
- stamp was actually changed.
- * trustdb.c (revalidation_mark): Sync the changes. Removed the
- sync operation done by its callers.
- (get_validity): Add logic for maintaining a pending_check flag.
- (clear_ownertrust): New.
-
- * keyedit.c (sign_uids): Don't call revalidation_mark depending on
- primary_pk.
- (keyedit_menu): Call revalidation_mark after "trust".
- (show_key_with_all_names): Print a warning on the wrong listed key
- validity.
-
- * delkey.c (do_delete_key): Clear the owenertrust information when
- deleting a public key.
-
-2002-04-18 Werner Koch <wk@gnupg.org>
-
- * seskey.c (encode_md_value): Print an error message if a wrong
- digest algorithm is used with DSA. Changed all callers to cope
- with a NULL return. Problem noted by Imad R. Faiad.
-
-2002-04-18 David Shaw <dshaw@jabberwocky.com>
-
- * trustdb.c (mark_usable_uid_certs): Properly handle nonrevocable
- signatures that can expire. In short, the only thing that can
- override an unexpired nonrevocable signature is another unexpired
- nonrevocable signature.
-
- * getkey.c (finish_lookup): Always use primary signing key for
- signatures when --pgp6 is on since pgp6 and 7 do not understand
- signatures made by signing subkeys.
-
-2002-04-18 Werner Koch <wk@gnupg.org>
-
- * trustdb.c (validate_keys): Never schedule a nextcheck into the
- past.
- (validate_key_list): New arg curtime use it to set next_expire.
- (validate_one_keyblock): Take the current time from the caller.
- (clear_validity, reset_unconnected_keys): New.
- (validate_keys): Reset all unconnected keys.
-
- * getkey.c (premerge_public_with_secret): Fixed 0x12345678! syntax
- for use with secret keys.
- (lookup): Advance the searchmode after a search FIRST.
-
- * seckey-cert.c (do_check): Always calculate the old checksum for
- use after unprotection.
-
- * g10.c, options.skel: New option --no-escape-from. Made
- --escape-from and --force-v3-sigs the default and removed them
- from the options skeleton.
-
-2002-04-16 Werner Koch <wk@gnupg.org>
-
- * parse-packet.c (parse_key): Support a SHA1 checksum as per
- draft-rfc2440-bis04.
- * packet.h (PKT_secret_key): Add field sha1chk.
- * seckey-cert.c (do_check): Check the SHA1 checksum
- (protect_secret_key): And create it.
- * build-packet.c (do_secret_key): Mark it as sha-1 protected.
- * g10.c, options.h: New option --simple-sk-checksum.
-
-2002-04-13 David Shaw <dshaw@jabberwocky.com>
-
- * parse-packet.c (parse_signature): Minor fix - signatures should
- expire at their expiration time and not one second later.
-
- * keygen.c (proc_parameter_file): Allow specifying preferences
- string (i.e. "s5 s2 z1 z2", etc) in a batchmode key generation
- file.
-
- * keyedit.c (keyedit_menu): Print standard error message when
- signing a revoked key (no new translation).
-
- * getkey.c (merge_selfsigs): Get the default set of key prefs from
- the real (not attribute) primary uid.
-
-2002-04-12 David Shaw <dshaw@jabberwocky.com>
-
- * pkclist.c (build_pk_list): Fix bug that allowed a key to be
- selected twice in batch mode if one instance was the default
- recipient and the other was an encrypt-to. Noted by Stefan
- Bellon.
-
- * parse-packet.c (dump_sig_subpkt): Show data in trust and regexp
- sig subpackets.
-
- * keyedit.c (keyedit_menu): Use new function real_uids_left to
- prevent deleting the last real (i.e. non-attribute) uid. Again,
- according to the attribute draft. (menu_showphoto): Make another
- string translatable.
-
-2002-04-11 David Shaw <dshaw@jabberwocky.com>
-
- * build-packet.c (build_sig_subpkt): Delete subpackets from both
- hashed and unhashed area on update. (find_subpkt): No longer
- needed.
-
- * keyedit.c (sign_uids): With --pgp2 on, refuse to sign a v3 key
- with a v4 signature. As usual, --expert overrides. Try to tweak
- some strings to a closer match so they can all be translated in
- one place. Use different helptext keys to allow different help
- text for different questions.
-
- * keygen.c (keygen_upd_std_prefs): Remove preferences from both
- hashed and unhashed areas if they are not going to be used.
-
-2002-04-10 David Shaw <dshaw@jabberwocky.com>
-
- * misc.c (pct_expando), options.skel: Use %t to indicate type of a
- photo ID (in this version, it's always "jpeg"). Also tweak string
- expansion loop to minimize reallocs.
-
- * mainproc.c (do_check_sig): Variable type fix.
-
- * keyedit.c (menu_set_primary_uid): Differentiate between true
- user IDs and attribute user IDs when making one of them primary.
- That is, if we are making a user ID primary, we alter user IDs.
- If we are making an attribute packet primary, we alter attribute
- packets. This matches the language in the latest attribute packet
- draft.
-
- * keyedit.c (sign_uids): No need for the empty string hack.
-
- * getkey.c (fixup_uidnode): Only accept preferences from the
- hashed segment of the self-sig.
-
-2002-04-10 Werner Koch <wk@gnupg.org>
-
- * tdbio.c (migrate_from_v2): Fixed the offset to read the old
- ownertrust value and only add entries to the table if we really
- have a value.
-
-2002-04-08 David Shaw <dshaw@jabberwocky.com>
-
- * status.h, status.c (get_status_string): Add KEYEXPIRED, EXPSIG,
- and EXPKEYSIG. Add "deprecated-use-keyexpired-instead" to
- SIGEXPIRED.
-
- * sig-check.c (do_check): Start transition from SIGEXPIRED to
- KEYEXPIRED, since the actual event is signature verification by an
- expired key and not an expired signature. (do_signature_check,
- packet.h): Rename as signature_check2, make public, and change all
- callers.
-
- * mainproc.c (check_sig_and_print, do_check_sig): Use status
- EXPSIG for an expired, but good, signature. Add the expiration
- time (or 0) to the VALIDSIG status line. Use status KEYEXPSIG for
- a good signature from an expired key.
-
- * g10.c (main): remove checks for no arguments now that argparse
- does it.
-
-2002-04-06 Werner Koch <wk@gnupg.org>
-
- * keyring.c (keyring_get_keyblock): Disable the keylist mode here.
-
- * encode.c (encode_simple, encode_crypt): Only test on compressed
- files if a compress level was not explicity set.
-
- * keygen.c (keygen_set_std_prefs): Removed Blowfish and Twofish
- from the list of default preferences, swapped the preferences of
- RMD160 and SHA1. Don't include a preference to 3DES unless the
- IDEA kludge gets used.
-
- * free-packet.c (free_packet): call free_encrypted also for
- PKT_ENCRYPTED_MDC.
-
- * compress.c (release_context): New.
- (handle_compressed): Allocate the context and setup a closure to
- release the context. This is required because there is no
- guarabntee that the filter gets popped from the chain at the end
- of the function. Problem noted by Timo and probably also the
- cause for a couple of other reports.
- (compress_filter): Use the release function if set.
-
- * tdbio.c [__CYGWIN32__]: Don't rename ftruncate. Noted by
- Disastry.
-
- * parse-packet.c (parse_signature): Put parens around a bit test.
-
- * exec.c (make_tempdir): Double backslash for TMP directory
- creation under Windows. Better strlen the DIRSEP_S constants for
- allocation measurements.
-
- * decrypt.c (decrypt_messages): Release the passphrase aquired
- by get_last_passphrase.
-
-2002-04-02 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (EXTRA_DIST): Removed OPTIONS an pubring.asc - they
- are no longer of any use.
-
-2002-04-03 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (parse_keyserver_options): fix auto-key-retrieve to
- actually work as a keyserver-option (noted by Roger Sondermann).
-
- * keylist.c (reorder_keyblock): do not reorder the primary
- attribute packet - the first user ID must be a genuine one.
-
-2002-03-31 David Shaw <dshaw@jabberwocky.com>
-
- * keylist.c (list_keyblock_colon): Fix ownertrust display with
- --with-colons.
-
- * keygen.c (generate_user_id), photoid.c (generate_photo_id):
- Properly initialize the user ID refcount. A few more "y/n" ->
- "y/N" in photoid.c.
-
- * keyedit.c (ask_revoke_sig): Warn the user if they are about to
- revoke an expired sig (not a problem, but they should know). Also
- tweak a few prompts to change "y/n" to "y/N", which is how most
- other prompts are written.
-
- * keyserver.c (keyserver_search_prompt): Control-d escapes the
- keyserver search prompt.
-
- * pkclist.c (show_revocation_reason & callers): If a subkey is
- considered revoked solely because the parent key is revoked, print
- the revocation reason from the parent key.
-
- * trustdb.c (get_validity): Allow revocation/expiration to apply
- to a uid/key with no entry in the trustdb.
-
-2002-03-29 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (printunquoted): unquote backslashes from keyserver
- searches
-
- * hkp.c (write_quoted): quote backslashes from keyserver searches
-
-2002-03-26 Werner Koch <wk@gnupg.org>
-
- * keygen.c (ask_keysize): Removed the warning for key sizes > 1536.
-
-2002-03-25 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (sign_uids): Use 2 strings and not a %s so that
- translations can be done the right way.
- * helptext.c: Fixed small typo.
-
-2002-03-23 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (append_uid, merge_sigs): it is okay to import
- completely non-signed uids now (with --allow-non-selfsigned-uid).
-
- * getkey.c (get_primary_uid, merge_selfsigs_main): do not choose
- an attribute packet (i.e. photo) as primary uid. This prevents
- oddities like "Good signature from [image of size 2671]". This is
- still not perfect (one can still select an attribute packet as
- primary in --edit), but is closer to the way the draft is going.
-
- * g10.c (build_list): algorithms should include 110.
-
- * g10.c (main): --pgp2 implies --no-ask-sig-expire and
- --no-ask-cert-expire as those would cause a v4 sig/cert.
-
- * armor.c (is_armor_header): be more lenient in what constitutes a
- valid armor header (i.e. -----BEGIN blah blah-----) as some
- Windows programs seem to add spaces at the end. --openpgp makes
- it strict again.
-
-2002-03-18 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_search_prompt): Properly handle a "no
- keys found" case from the internal HKP code (external HKP is ok).
- Also, make a COUNT -1 (i.e. streamed) keyserver response a little
- more efficient.
-
- * g10.c (main): Add --no-allow-non-selfsigned-uid
-
-2002-03-17 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main): --openpgp implies --allow-non-selfsigned-uid.
-
- * getkey.c (merge_selfsigs_main): If none of the uids are primary
- (because none are valid) then pick the first to be primary (but
- still invalid). This is for cosmetics in case some display needs
- to print a user ID from a non-selfsigned key. Also use
- --allow-non-selfsigned-uid to make such a key valid and not
- --always-trust. The key is *not* automatically trusted via
- --allow-non-selfsigned-uid.
-
- * mainproc.c (check_sig_and_print): Make sure non-selfsigned uids
- print [uncertain] on verification even though one is primary now.
-
- * getkey.c (merge_selfsigs): If the main key is not valid, then
- neither are the subkeys.
-
- * import.c (import_one): Allow --allow-non-selfsigned-uid to work
- on completely unsigned keys. Print the uids in UTF8. Remove
- mark_non_selfsigned_uids_valid().
-
- * keyedit.c (show_key_with_all_names): Show revocation key as
- UTF8.
-
- * sign.c (clearsign_file): Allow --not-dash-escaped to work with
- v3 keys.
-
-2002-03-14 Werner Koch <wk@gnupg.org>
-
- * main.h: Changed the default algorithms to CAST5 and SHA1.
-
-2002-03-13 David Shaw <dshaw@jabberwocky.com>
-
- * import.c (chk_self_sigs): Show which user ID a bad self-sig
- (invald sig or unsupported public key algorithm) resides on.
-
- * import.c (chk_self_sigs): any valid self-sig should mark a user
- ID or subkey as valid - otherwise, an attacker could DoS the user
- by inventing a bogus invalid self-signature.
-
-2002-03-07 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main): make a few more strings translatable.
-
- * options.h, options.skel, g10.c (main), gpgv.c, mainproc.c
- (check_sig_and_print), keyserver.c (parse_keyserver_options):
- --auto-key-retrieve should really be a keyserver-option variable.
-
- * import.c (revocation_present): new function to print a warning
- if a key is imported that has been revoked by designated revoker,
- but the designated revoker is not present to verify the
- revocation. If keyserver-options auto-key-retrieve is set, try
- and fetch the designated revoker from the keyserver.
-
- * import.c (import_one): call revocation_present after importing a
- new key. Note that this applies to --import, --recv-keys, and
- --search-keys.
-
- * keyserver-internal.h, keyserver.c (keyserver_import_fprint):
- import via fingerprint (for revocation keys).
-
- * keyserver.c (keyserver_import_keyid): much simpler
- implementation now that we're using KEYDB_SEARCH_DESC internally.
-
-2002-03-04 David Shaw <dshaw@jabberwocky.com>
-
- * revoke.c (gen_revoke): do not prompt for revocation reason for
- v3 revocations (unless force-v4-certs is on) since they wouldn't
- be used anyway.
-
- * keyedit.c (menu_revsig): show the status of the sigs
- (exportable? revocable?) to the user before prompting for which
- sig to revoke. Also, make sure that local signatures get local
- revocations.
-
- * keyedit.c (ask_revoke_sig): remind the user which sigs are
- local.
-
- * g10.c (main): Add "exec-path" variable to override PATH for
- execing programs.
-
- * export.c (do_export_stream): properly check return code from
- classify_user_id to catch unclassifiable keys.
-
-2002-03-03 David Shaw <dshaw@jabberwocky.com>
-
- * parse-packet.c (parse_signature): variable type tweak for RISC
- OS (from Stefan)
-
-2002-02-28 David Shaw <dshaw@jabberwocky.com>
-
- * getkey.c (check_revocation_keys): New function to check a
- revocation against a list of potential revocation keys. Note the
- loop-breaking code here. This is to prevent blowing up if A is
- B's revocation key, while B is also A's. Note also that this is
- written so that a revoked revoker can still issue revocations:
- i.e. If A revokes B, but A is revoked, B is still revoked. I'm
- not completely convinced this is the proper behavior, but it
- matches how PGP does it. It does at least have the advantage of
- much simpler code - my first version of this had lots of loop
- maintaining code so you could chain revokers many levels deep and
- if D was revoked, C was not, which meant that B was, and so on.
- It was sort of scary, actually.
-
- * getkey.c (merge_selfsigs_main): Add any revocation keys onto the
- pk. This is particularly interesting since we normally only get
- data from the most recent 1F signature, but you need multiple 1F
- sigs to properly handle revocation keys (PGP does it this way, and
- a revocation key could be marked "sensitive" and hence in a
- different signature). Also, if a pk has a revocation key set,
- check for revocation sigs that were not made by us - if made by a
- valid revocation key, mark the pk revoked.
-
- * packet.h, getkey.c (cache_public_key): do not cache key if
- "dont_cache" is set. This allows the revocation key code to look
- up a key and return information that may be inaccurate to prevent
- loops without caching the fake data.
-
- * packet.h, sig-check.c (do_signature_check): Record if a
- signature was made by a revoked pk.
-
- * packet.h, parse-packet.c (parse_one_sig_subpkt,
- can_handle_critical, parse_signature): Get revocation key
- information out of direct sigs.
-
- * keylist.c (list_keyblock_print): don't assume that the presence
- of a 0x20 signature means the key is revoked. With revocation
- keys, this may not be true if the revocation key is not around to
- verify it or if verification failed. Also, 0x1F should get listed
- as "sig", and not "unexpected signature class".
-
- * keyedit.c (show_key_with_all_names): Add a flag for printing
- revoker information and change all callers.
-
- * import.c (merge_blocks): merge in any new direct key (0x1F)
- sigs.
-
- * import.c (import_revoke_cert): don't keep processing after a
- revocation is rejected.
-
- * import.c (delete_inv_parts): Allow importing a revocation
- signature even if it was not issued by the key. This allows a
- revocation key to issue it. Of course, the sig still needs to be
- checked before we trust it.
-
- * free-packet.c (copy_public_key): Include a new copy of the
- revocation keys when duping a pk.
-
- * free-packet.c (free_seckey_enc, release_public_key_parts): Free
- any revocation keys that are attached to a sig or pk.
-
- * export.c (do_export_stream): Do not export signatures with
- "sensitive" revocation keys in them.
-
-2002-02-27 David Shaw <dshaw@jabberwocky.com>
-
- * export.c (do_export_stream): Do not include v3 keys in a
- --export-secret-subkeys export.
-
- * getkey.c (merge_selfsigs_main): If a key isn't valid (say,
- because of no self-signature), allow --always-trust to force it
- valid so it can be trusted.
-
-2002-02-25 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (hkp_ask_import), hkp.h, keyserver.c (all): treat key
- lists internally as fingerprints when possible. All this is via
- KEYDB_SEARCH_DESC - no point in reinventing the wheel. This allows
- the helper program to search the keyserver by fingerprint if
- desired (and the keyserver supports it). Note that automatic
- fingerprint promotion during refresh only applies to v4 keys as a
- v4 fingerprint can be easily changed into a long or short key id,
- and a v3 cannot.
-
- * pubkey-enc.c, getkey.c, misc.c, main.h: Take two copies of
- hextobyte() from pubkey-enc.c and getkey.c and make them into one
- copy in misc.c.
-
-2002-02-22 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_search_prompt): Detect a "no keys found"
- case even if the helper program does not explicitly say how many
- keys were found.
-
- * hkp.c (parse_hkp_index): Bug fix - don't report non-revoked keys
- as revoked in HKP key searches.
-
-2002-02-19 Werner Koch <wk@gnupg.org>
-
- * parse-packet.c (parse_trust): Made parsing more robust.
-
-2002-02-19 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (parse_hkp_index): Catch corruption in HKP index lines
- (can be caused by broken or malicious keyservers).
-
- * keyserver.c (keyserver_work): Add KEYSERVER_NOT_SUPPORTED for
- unsupported actions (say, a keyserver that has no way to search,
- or a readonly keyserver that has no way to add). Also add a
- USE_EXTERNAL_HKP define to disable the internal HKP keyserver
- code.
-
-2002-02-14 Werner Koch <wk@gnupg.org>
-
- * g10.c: New option --no-use-agent.
-
- * pkclist.c (check_signatures_trust): Always print the warning for
- unknown and undefined trust. Removed the did_add cruft. Reported
- by Janusz A. Urbanowicz.
-
-2002-02-11 David Shaw <dshaw@jabberwocky.com>
-
- * hkp.c (parse_hkp_index): Bug fix - properly handle user IDs with
- colons (":") in them while HKP searching.
-
-2002-02-09 David Shaw <dshaw@jabberwocky.com>
-
- * misc.c (pct_expando): More comments.
-
- * keydb.h, sign.c (mk_notation_and_policy): Clarify what is a sig
- and what is a cert. A sig has sigclass 0x00, 0x01, 0x02, or 0x40,
- and everything else is a cert.
-
- * g10.c (main), keyedit.c (keyedit_menu): Add a "nrlsign" for
- nonrevocable and local key signatures.
-
- * g10.c (main): Add a --no-force-mdc to undo --force-mdc.
-
- * options.h, g10.c (main), cipher.c (write_header): Add a knob to
- --disable-mdc/--no-disable-mdc. Off by default, of course, but is
- used in --pgp2 and --pgp6 modes.
-
- * pkclist.c (build_pk_list): Allow specifying multiple users in
- the "Enter the user ID" loop. Enter a blank line to stop. Show
- each key+id as it is added.
-
- * keylist.c (show_policy_url), mainproc.c (print_notation_data):
- It is not illegal (though possibly silly) to have multiple policy
- URLs in a given signature, so print all that are present.
-
- * hkp.c (hkp_search): More efficient implementation of URL-ifying
- code.
-
-2002-02-04 David Shaw <dshaw@jabberwocky.com>
-
- * main.h, misc.c (pct_expando): New function to generalize
- %-expando processing in any arbitrary string.
-
- * photoid.c (show_photo): Call the new pct_expando function rather
- than expand strings internally.
-
- * sign.c (mk_notation_and_policy): Show policy URLs and notations
- when making a signature if show-policy/show-notation is on.
- %-expand policy URLs during generation. This lets the user have
- policy URLs of the form "http://notary.jabberwocky.com/keysign/%K"
- which will generate a per-signature policy URL.
-
- * main.h, keylist.c (show_policy_url, show_notation): Add amount
- to indent so the same function can be used in key listings as well
- as during sig generation. Change all callers.
-
-2002-02-04 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c, options.h (parse_keyserver_options, keyidlist):
- Workaround for the pksd and OKS keyserver bug that calculates v4
- RSA keyids as if they were v3. The workaround/hack is to fetch
- both the v4 (e.g. 99242560) and v3 (e.g. 68FDDBC7) keyids. This
- only happens for key refresh while using the HKP scheme and the
- refresh-add-fake-v3-keyids keyserver option must be set. This
- should stay off by default.
-
-2002-02-03 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_spawn): Bug fix - do not append keys to
- each other when --sending more than one.
-
-2002-02-02 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c (main), keyedit.c (sign_uids), sign.c
- (mk_notation_and_policy): Split "--set-policy-url" into
- "--cert-policy-url" and "--sig-policy-url" so the user can set
- different policies for key and data signing. For backwards
- compatibility, "--set-policy-url" sets both, as before.
-
-2002-01-30 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): --gen-random --armor does now output a base64
- encoded string.
-
-2002-01-28 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main), options.h, pkclist.c (algo_available): --pgp6
- flag. This is not nearly as involved as --pgp2. In short, it
- turns off force_mdc, turns on no_comment, escape_from, and
- force_v3_sigs, and sets compression to 1. It also restricts the
- user to IDEA (if present), 3DES, CAST5, MD5, SHA1, and RIPEMD160.
- See the comments above algo_available() for lots of discussion on
- why you would want to do this.
-
-2002-01-27 David Shaw <dshaw@jabberwocky.com>
-
- * keygen.c (keygen_set_std_prefs): Comment
-
- * keyedit.c (sign_uids): Bug fix - when signing with multiple
- secret keys at the same time, make sure each key gets the sigclass
- prompt.
-
- * exec.c (exec_finish): Close the iobuf and FILE before trying to
- waitpid, so the remote process will get a SIGPIPE and exit. This
- is only a factor when using a pipe to communicate.
-
- * exec.c (exec_write): Disable cache-on-close of the fd iobuf (is
- this right? Why is a fd iobuf cached at all?)
-
-2002-01-26 Werner Koch <wk@gnupg.org>
-
- * g10.c, options.h: New option --gpg-agent-info
- * passphrase.c (agent_open): Let it override the environment info.
- * seckey-cert.c (check_secret_key): Always try 3 times when the
- agent is enabled.
- * options.skel: Describe --use-agent.
-
-2002-01-24 David Shaw <dshaw@jabberwocky.com>
-
- * pubkey-enc.c (is_algo_in_prefs, get_it): Only check preferences
- against keys with v4 self sigs - there is really little point in
- warning for every single non-IDEA message encrypted to an old key.
-
- * pkclist.c (select_algo_from_prefs): Only put in the fake IDEA
- preference if --pgp2 is on.
-
- * mainproc.c (check_sig_and_print): Print "Expired" for expired
- but good signatures (this still prints "BAD" for expired but bad
- signatures).
-
-2002-01-23 David Shaw <dshaw@jabberwocky.com>
-
- * keygen.c (ask_keysize): Cosmetic: don't present a RSA signing
- key as a "keypair" which can be 768 bits long (as RSA minimum is
- 1024).
-
- * pubkey-enc.c (is_algo_in_prefs): Allow IDEA as a fake preference
- for v3 keys with v3 selfsigs.
-
-2002-01-22 David Shaw <dshaw@jabberwocky.com>
-
- * packet.h, getkey.c (merge_selfsigs_main), pkclist.c
- (select_algo_from_prefs): Implement the fake IDEA preference as
- per RFC2440:12.1. This doesn't mean that IDEA will be used (the
- plugin may not be present), but it does mean that a v3 key with a
- v3 selfsig has an implicit IDEA preference instead of 3DES. v3
- keys with v4 selfsigs use preferences as normal.
-
- * encode.c (encode_crypt): if select_algo_from_prefs fails, this
- means that we could not find a cipher that both keys like. Since
- all v4 keys have an implicit 3DES preference, this means there is
- a v3 key with a v3 selfsig in the list. Use 3DES in this case as
- it is the safest option (we know the v4 key can handle it, and
- we'll just hope the v3 key is being used in an implementation that
- can handle it). If --pgp2 is on, warn the user what we're doing
- since it'll probably break PGP2 compatibility.
-
- * g10.c (main): Do not force using IDEA for encrypted files in
- --pgp2 mode - let the fake IDEA preference choose this for us for
- better compatibility when encrypting to multiple keys, only some
- of which are v3.
-
- * keygen.c (keygen_set_std_prefs): Put 3DES on the end of the
- default cipher pref list (RFC2440: "...it is good form to place it
- there explicitly."). If the user has the IDEA plugin installed,
- put a preference for IDEA *after* 3DES to effectively disable its
- use for everything except encrypting along with v3 keys.
-
- * encode.c, g10.c, sign.c: Change the PGP2 warning line from
- "... will not be usable ..." to "... may not be usable ..." as the
- user could be using one of the enhanced PGP2 variations.
-
- * helptext.c: Revise the sign_uid.class help text as suggested by
- Stefan.
-
-2002-01-20 Werner Koch <wk@gnupg.org>
-
- * passphrase.c (passphrase_to_dek): Add tryagain_text arg to be
- used with the agent. Changed all callers.
- (agent_get_passphrase): Likewise and send it to the agent
- * seckey-cert.c (do_check): New arg tryagain_text.
- (check_secret_key): Pass the string to do_check.
- * keygen.c (ask_passphrase): Set the error text is required.
- * keyedit.c (change_passphrase): Ditto.
-
- * passphrase.c (agent_open): Disable opt.use_agent in case of a
- problem with the agent.
- (agent_get_passphrase): Ditto.
- (passphrase_clear_cache): Ditto.
-
-2002-01-19 Werner Koch <wk@gnupg.org>
-
- * passphrase.c (agent_open): Add support for the new Assuan based
- gpg-agent. New arg to return the used protocol version.
- (agent_get_passphrase): Implemented new protocol here.
- (passphrase_clear_cache): Ditto.
- (readline): New.
-
-2002-01-15 Timo Schulz <ts@winpt.org>
-
- * encode.c (encode_crypt_files): Fail if --output is used.
-
- * g10.c: New command --decrypt-files.
-
- * decrypt.c (decrypt_messages): New.
-
-2002-01-09 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c, misc.c, gpgv.c: move idea_cipher_warn to misc.c so gpgv.c
- doesn't need a stub for it any longer.
-
- * g10.c (get_temp_dir), main.h: no longer used (it's in exec.c now)
-
- * g10.c (main), delkey.c (delete_keys), main.h : Allow
- --delete-key (now --delete-keys, though --delete-key still works,
- of course) to delete multiple keys in one go. This applies to
- --delete-secret-key(s) and --delete-secret-and-public-key(s) as
- well.
-
-2002-01-09 Timo Schulz <ts@winpt.org>
-
- * encode.c (encode_crypt_files): Now it behaves like verify_files.
-
- * g10.c (main): We don't need to check argc for encode_crypt_files
- any longer.
-
-2002-01-09 Timo Schulz <ts@winpt.org>
-
- * exec.c: Include windows.h for dosish systems.
-
-2002-01-08 Timo Schulz <ts@winpt.org>
-
- * g10.c (main): New description for --encrypt-files.
-
-2002-01-08 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Must register the secring for encryption because
- it is needed to figure out the default recipient. Reported by
- Roger Sondermann.
-
-2002-01-05 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (menu_adduid): Require --expert before adding a photo
- ID to a v3 key, and before adding a second photo ID to any key.
-
- * keyedit.c (keyedit_menu): Don't allow adding photo IDs in
- rfc1991 or pgp2 mode.
-
- * getkey.c (merge_selfsigs_subkey): Permit v3 subkeys. Believe it
- or not, this is allowed by rfc 2440, and both PGP 6 and PGP 7 work
- fine with them.
-
- * g10.c, options.h, keyedit.c, sign.c: Move the "ask for
- expiration" switch off of --expert, which was getting quite
- overloaded, and onto ask-sig-expire and ask-cert-expire. Both
- default to off.
-
- * g10.c (main): Change the default compression algo to 1, to be
- more OpenPGP compliant (PGP also uses this, so it'll help with
- interoperability problems as well).
-
- * encode.c (encode_crypt): Handle compression algo 2, since the
- default is now 1.
-
- * build-packet.c (build_attribute_subpkt): Fix off-by-one error.
-
-2002-01-05 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Do not register the secret keyrings for certain
- commands.
-
- * keydb.c (keydb_add_resource): Use access to test for keyring
- existence. This avoids cached opened files which are bad under
- RISC OS.
-
-2002-01-04 David Shaw <dshaw@jabberwocky.com>
-
- * sign.c (sign_file, sign_symencrypt_file): always use one-pass
- packets unless rfc1991 is enabled. This allows a signature made
- with a v3 key to work in PGP 6 and 7. Signatures made with v4
- keys are unchanged.
-
- * g10.c (main): Disallow non-detached signatures in PGP2 mode.
- Move the "you must use files and not pipes" PGP2 warning up so all
- the PGP2 stuff is together.
-
- * encode.c (encode_simple): Use the actual filesize instead of
- partial length packets in the internal literal packet from a
- symmetric message. This breaks PGP5(?), but fixes PGP2, 6, and 7.
- It's a decent tradeoff. Note there was only an issue with
- old-style RFC1991 symmetric messages. 2440-style messages in 6
- and 7 work with or without partial length packets.
-
-2002-01-03 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main): Removed --no-default-check-level option, as it is
- not consistent with other "default" options. Plus, it is the same
- as saying --default-check-level 0.
-
- * exec.c (exec_read): Disallow caching tempfile from child
- process, as this keeps the file handle open and can cause unlink
- problems on some platforms.
-
- * keyserver.c (keyserver_search_prompt): Minor tweak - don't
- bother to transform keyids into textual form if they're just going
- to be transformed back to numbers.
-
-2002-01-03 Timo Schulz <ts@winpt.org>
-
- * g10.c: New command --encrypt-files.
-
- * verify.c (print_file_status): Removed the static because
- encode_crypt_files also uses this function.
-
- * main.h (print_files_status): New.
- (encode_crypt_files): New.
-
- * encode.c (encode_crypt_files): New.
-
-2002-01-02 Stefan Bellon <sbellon@sbellon.de>
-
- * keyserver.c: Moved util.h include down in order to avoid
- redefinition problems on RISC OS.
-
- * keyring.c (keyring_lock): Only lock keyrings that are writable.
-
- * keyring.c (keyring_update_keyblock): Close unused iobuf.
-
- * hkp.c (parse_hkp_index, hkp_search) [__riscos__]: Changed
- unsigned char* to char* because of compiler issues.
-
- * exec.c (exec_finish) [__riscos__]: Invalidate close cache so
- that file can be unlinked.
-
-2001-12-28 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (main): Use a different strlist to check extensions since
- they need to be handled seperately now.
-
- * misc.c,main.h (check_permissions): Properly handle permission
- and ownership checks on files in the lib directory
- (e.g. /usr/local/lib/gnupg), which are owned by root and are
- world-readable, and change all callers to specify extension or
- per-user file.
-
- * photoid.c (show_photo), keyserver.c (keyserver_spawn): Bug fix -
- don't call exec_finish if exec_write fails.
-
- * keyserver.c (keyserver_spawn): Look for OPTIONS from the
- keyserver helper - specifically, a "OUTOFBAND" option for the
- email keyserver.
-
- * mainproc.c (list_node), keylist.c (list_keyblock_colon),
- import.c (delete_inv_parts), export.c (do_export_stream): Use
- signature flags for exportability check rather than re-parsing the
- subpacket.
-
- * keyid.c, keydb.h (get_lsign_letter): No longer needed.
-
-2001-12-27 David Shaw <dshaw@jabberwocky.com>
-
- * exec.c (exec_finish): Show errors when temp files cannot be
- deleted for whatever reason.
-
- * exec.c (exec_read): Don't rely on WEXITSTATUS being present.
-
- * exec.c (make_tempdir): Add temp file creator for win32. Don't
- create an incoming temp file if the exec is write-only.
-
- * keyserver.c (keyserver_spawn): Clean up error handling, for when
- the spawn fails.
-
- * photoid.c (show_photo): Clean up error handling.
-
- * misc.c (check_permissions): Neaten.
-
-2001-12-25 David Shaw <dshaw@jabberwocky.com>
-
- * mkdtemp.c (mkdtemp): Add copyleft info and tweak the 'X' counter
- to be a bit simpler.
-
- * keyserver.c, photoid.c: Remove unused headers left over from
- when the exec functions lived there.
-
-2001-12-23 Timo Schulz <ts@winpt.org>
-
- * misc.c (check_permissions): Do not use it for W32 systems.
-
- * tdbio.c (migrate_from_v2): Define ftruncate as chsize() for W32.
-
- * mkdtemp.c: W32 support.
-
- * photoid.c: Ditto.
-
- * exec.c: Ditto.
-
-2001-12-22 David Shaw <dshaw@jabberwocky.com>
-
- * exec.c (make_tempdir): avoid compiler warning with const
-
- * mkdtemp.c (mkdtemp): catch the empty ("") string case in case
- someone repurposes mkdtemp at some point.
-
- * photoid.c (generate_photo_id, show_photo): some type changes
- from Stefan Bellon.
-
- * exec.c (make_tempdir): handle Win32 systems, suggested by Timo
- Schulz.
-
-2001-12-22 Werner Koch <wk@gnupg.org>
-
- * encode.c (encode_simple, encode_crypt): i18n 2 strings.
-
-2001-12-22 Timo Schulz <ts@winpt.org>
-
- * encode.c (encode_simple, encode_crypt): Use is_file_compressed
- to avoid to compress compressed files.
-
-2001-12-22 Werner Koch <wk@gnupg.org>
-
- * keyserver.c (keyserver_spawn): Removed some variables
- declaration due to shadowing warnings.
-
- * build-packet.c (build_attribute_subpkt): s/index/idx/ to avoid
- compiler warnig due to index(3).
-
- * getkey.c (get_ctx_handle): Use KEYDB_HANDLE as return value.
- * keylist.c (list_one): Made resname const.
-
- * keyedit.c (keyedit_menu): Allow "addphoto" only when --openpgp is
- not used.
-
- * options.skel: Changed one example photo viewer to qiv.
-
-2001-12-21 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: add exec.c, exec.h, photoid.c, and photoid.h
-
- * build-packet.c (build_attribute_subpkt): new function to build
- the raw attribute subpacket. Note that attribute subpackets have
- the same format as signature subpackets.
-
- * exec.c: new file with generic exec-a-program functionality.
- Used by both photo IDs and keyserver helpers. This is pretty much
- the same code that used to be keyserver specific, with some
- changes to be usable generically.
-
- * free-packet.c (free_attributes (new)): function to free an
- attribute packet.
-
- * gpgv.c: added stub show_photo
-
- * keyedit.c (keyedit_menu, menu_adduid, menu_showphoto): can add a
- photo (calls generate_photo_id), or display a photo (calls
- show_photo) from the --edit menu. New commands are "addphoto",
- and "delphoto" (same as "deluid").
-
- * keylist.c (list_keyblock_print): show photos during key list if
- --show-photos enabled.
-
- * keyserver.c (keyserver_spawn): use the generic exec_xxx
- functions to call keyserver helper.
-
- * g10.c, options.h: three new options - --{no-}show-photos, and
- --photo-viewer to give the command line to display a picture.
-
- * options.skel: instructions for the photo viewer
-
- * parse-packet.c (parse_user_id, setup_user_id (new)): common code
- for both user IDs and attribute IDs moved to setup_user_id.
-
- * parse-packet.c (make_attribute_uidname (new)): constructs a fake
- "name" for attribute packets (e.g. "[image of size ...]")
-
- * parse-packet.c (parse_attribute (replaces parse_photo_id),
- parse_attribute_subpkts): Builds an array of individual
- attributes. Currently only handles attribute image / type jpeg
- subpackets.
-
- * sign.c (hash_uid): Fix bug in signing attribute (formerly
- photo_id) packets.
-
- * packet.h, and callers: globally change "photo_id" to "attribute"
- and add structures for attributes. The packet format is generic
- attributes, even though the only attribute type thus far defined
- is jpeg.
-
-2001-12-21 David Shaw <dshaw@jabberwocky.com>
-
- * parse-packet.c (can_handle_critical): Can handle critical
- revocation subpackets now.
-
- * trustdb.c (mark_usable_uid_certs): Disregard revocations for
- nonrevocable sigs. Note that this allows a newer revocable
- signature to override an older nonrevocable signature.
-
- * sign.c (make_keysig_packet): add a duration field and change all
- callers. This makes make_keysig_packet closer to
- write_signature_packets and removes some duplicated expiration
- code.
-
- * keyedit.c (keyedit_menu, menu_revsig, sign_uids,
- sign_mk_attrib): Add nrsign command, don't allow revoking a
- nonrevocable signature,
-
- * g10.c (main): Add --nrsign option to nonrevocably sign a key
- from the command line.
-
- * build-packet.c (build_sig_subpkt_from_sig): Comment to explain
- the use of CRITICAL.
-
-2001-12-21 Werner Koch <wk@gnupg.org>
-
- * g10.c. options.h : New option --show-keyring
- * getkey.c (get_ctx_handle): New.
- * keylist.c (list_one): Implement option here. By David Champion.
-
-2001-12-20 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (keyserver_spawn): Use mkdtemp() to make temp
- directory.
-
- * mkdtemp.c: replacement function for those platforms that don't
- have mkdtemp (make a temp directory securely).
-
-2001-12-19 David Shaw <dshaw@jabberwocky.com>
-
- * misc.c (check_permissions): New function to stat() and ensure
- the permissions of GNUPGHOME and the files have safe permissions.
-
- * keydb.c (keydb_add_resource): Check keyring permissions.
-
- * tdbio.c (tdbio_set_dbname): Check permissions of trustdb.gpg
-
- * keyserver.c (keyserver_spawn): Disable keyserver schemes that
- involve running external programs if the options file has unsafe
- permissions or ownership.
-
- * g10.c, options.h: New option --no-permission-warning to disable
- the permission warning message(s). This also permits use of the
- keyserver if it had been disabled (see above). Also check the
- permissions/ownership of random_seed.
-
- * keyserver.c (keyserver_spawn): The new glibc prints a warning
- when using mktemp() (the code was already secure, but the warning
- was bound to cause confusion). Use a different implementation
- based on get_random_bits() instead. Also try a few times to get
- the temp dir before giving up.
-
-2001-12-19 Werner Koch <wk@gnupg.org>
-
- * g10.c, passphrase.c [CYGWIN32]: Allow this as an alias for MINGW32.
-
-2001-12-18 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c (idea_cipher_warn): Add a flag to show the warning always
- or once per session and change all callers (show always except for
- the secret key protection and unknown cipher from an encrypted
- message errors). Also make the strings translatable.
-
- * pubkey-enc.c (get_it): Add the IDEA cipher warning if the user
- tries to decrypt an IDEA encrypted message without the IDEA
- plugin.
-
- * keyserver.c (parse_keyserver_uri): More strict checking of the
- keyserver URI. Specifically, fail if the ":port" section is
- anything except a number between 1 and 65535.
-
-2001-12-17 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.c (print_keyinfo): No need to check for
- control/illegal characters, as utf8_to_native does this for us.
-
- * mainproc.c (proc_encrypted): Use generic IDEA warning.
-
- * gpgv.c: add stub for idea_cipher_warn
-
- * g10.c, hkp.c, keyserver.c: Fix capitalization and plural issues.
-
- * encode.c (encode_crypt), sign.c (sign_file, clearsign_file):
- disable pgp2 mode after the message is no longer pgp2 compatible.
-
- * g10.c (main): Tweak the PGP2.x IDEA warning to use the generic
- warning, and not merely fail if the IDEA plugin isn't there.
-
- * g10.c (main, idea_cipher_warn), keygen.c (set_one_pref),
- seckey-cert.c (do_check): Add a generic IDEA warning for when the
- IDEA plugin is not present. This pops up when the user uses
- "--cipher-algo idea", when setpref is used to set a "S1"
- preference, and when a secret key protected with IDEA is used.
-
-2001-12-15 Werner Koch <wk@gnupg.org>
-
- * keyserver.c (keyserver_spawn): Assert that we have dropped privs.
-
-2001-12-13 Werner Koch <wk@gnupg.org>
-
- * pubkey-enc.c (get_session_key): Check that the public key
- algorithm is indeed usable for en/decryption. This avoid a
- strange error message from pubkey_decrypt if for some reasons a
- bad algorithm indentifier is passed.
-
-2001-12-12 David Shaw <dshaw@jabberwocky.com>
-
- * Fixed some types for portability. Noted by Stefan Bellon.
-
-2001-12-11 Werner Koch <wk@gnupg.org>
-
- * hkp.c (hkp_export): Do not print possible control characters
- from a keyserver response.
- (parse_hkp_index): Made uid an unsigned char* because it is passed to
- isspace().
- (hkp_search): Ditto for the char* vars.
-
- * g10.c (main): Print the IDEA warning also for -c and -se.
-
- * g10.c (get_temp_dir): Assert that we have dropped privs
-
- * encode.c (encode_crypt): Include the first key into the --pgp2
- check.
-
-2001-12-07 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c, options.h: New option --pgp2. This is identical to
- "--rfc1991 --cipher-algo idea --compress-algo 1 --digest-algo md5
- --force_v3_sigs" with the addition of an warning to advise the
- user not to use a pipe (which would break pgp2 compatibility).
-
- * encode.c (encode_crypt): warn if the user tries to encrypt to
- any key that is not RSA and <= 2048 bits when the --pgp2 option is
- used.
-
- * sign.c (sign_file, clearsign_file): When using --pgp2, make a v3
- sig, and warn if the signature is made with a non-v3 key.
-
-2001-12-05 David Shaw <dshaw@jabberwocky.com>
-
- * sign.c (sign_file, clearsign_file, sign_symencrypt_file): Prompt
- for sig expiration if --expert is set and --force-v3-sigs is not
- set (v3 sigs cannot expire).
-
- * mainproc.c (check_sig_and_print): After checking a sig, print
- expiration status. This causes a error return if the sig is
- expired.
-
- * build-packet.c (build_sig_subpkt_from_sig): Include a critical
- sig expiration subpacket if the sig is to expire.
-
- * keyedit.c (sign_uids): Do not sign an expired key unless
- --expert is set, in which case prompt. Also, offer to expire a
- signature when the key the user is signing expires.
-
- * keygen.c (ask_expire_interval): Add a value to determine whether
- to prompt for a key or sig expiration and change all callers.
-
- * keyid.c: New functions: expirestr_from_sig and
- colon_expirestr_from_sig.
-
- * keylist.c (list_keyblock_colon): Show sig expiration date in the
- --with-colons listing.
-
- * sign.c (make_keysig_packet, write_signature_packets): Pass in an
- optional timestamp for the signature packet, and change all
- callers.
-
- * keyedit.c (sign_mk_attrib): Include a critical expiration
- subpacket in the signature if an expiration date is given.
-
-2001-12-04 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (sign_uids): If the user tries to sign a
- locally-signed key, allow the cert to be promoted to a full
- exportable signature. This essentially deletes the old
- non-exportable sig, and replaces it with a new exportable one.
-
-2001-12-04 David Shaw <dshaw@jabberwocky.com>
-
- * keyedit.c (keyedit_menu): Do not allow signing a revoked key
- unless --expert is set, and ask even then.
-
- * keyedit.c (sign_uids): Do not allow signing a revoked UID unless
- --expert is set, and ask even then.
-
- * g10.c, options.h : New option --expert
-
-2001-11-16 David Shaw <dshaw@jabberwocky.com>
-
- * Allow the user to select no compression via "--compress-algo 0"
- on the command line.
-
- * keyedit.c (show_prefs): Show compression preferences in the
- long-form "showpref" style.
-
- * keygen.c (set_one_pref): Permit setting a no-compression ("Z0")
- preference.
-
- * getkey.c (fixup_uidnode): Fix compression preference corruption
- bug.
-
-2001-12-02 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c: Add advisory --for-your-eyes-only option as per section
- 5.9 of 2440.
-
-2001-12-05 David Shaw <dshaw@jabberwocky.com>
-
- * Force a V4 sig if the user has a notation or policy URL set.
-
-2001-12-04 David Shaw <dshaw@jabberwocky.com>
-
- * g10.c: Add options --keyserver-options, --temp-directory, and
- auto-key-retrieve (the opposite of no-auto-key-retrieve).
-
- * hkp.c (hkp_search): New function to handle searching a HKP
- keyserver for a key
-
- * hkp.c (hkp_ask_import, hkp_export): Pretty large changes to make
- them communicate via the generic functions in keyserver.c
-
- * keyserver.c: new file with generic keyserver routines for
- getting keys from a keyserver, sending keys to a keyserver, and
- searching for keys on a keyserver. Calls the internal HKP stuff
- in hkp.c for HKP keyserver functions. Other calls are handled by
- an external program which is spawned and written to and read from
- via pipes. Platforms that don't have pipes use temp files.
-
-2001-11-20 David Shaw <dshaw@jabberwocky.com>
-
- * options.h, g10.c: New options show-notation, no-show-notation,
- default-check-level, no-default-check-level, show-policy-url,
- no-show-policy-url.
-
- * packet.h, sign.c (make_keysig_packet), parse-packet.c
- (parse_signature), free-packet.c (free_seckey_enc): Fill in
- structures for notation, policy, sig class, exportability, etc.
-
- * keyedit.c, keylist.c (print_and_check_one_sig,
- list_keyblock_print): Show flags in signature display for cert
- details (class, local, notation, policy, revocable). If selected,
- show the notation and policy url.
-
- * keyedit.c (sign_uids): Prompt for and use different key sig
- classes.
-
- * helptext.c (helptexts): Add help text to explain different
- key signature classes
-
-2001-11-26 David Shaw <dshaw@jabberwocky.com>
-
- * trustdb.c (mark_usable_uid_certs): Fix segfault from bad
- initialization and fix reversed key signature expiration check.
-
-2001-11-09 Werner Koch <wk@gnupg.org>
-
- * export.c (do_export_stream): Put all given names into a search
- description and change the loop so that all matching names are
- returned.
-
-2001-11-08 Werner Koch <wk@gnupg.org>
-
- * pubkey-enc.c (get_it): To reduce the number of questions on the
- MLs print the the name of cipher algorithm 1 with the error message.
-
- * mainproc.c: Changed the way old rfc1991 encryption cipher is
- selected. Based on a patch by W Lewis.
-
- * pkclist.c (do_edit_ownertrust): Allow to skip over keys, the non
- working "show info" is now assigned to "i"
- * trustdb.c (ask_ownertrust, validate_keys): Implement a real quit
- here. Both are by David Shaw.
-
- * trustdb.c (validate_keys): Make sure next_exipire is initialized.
-
- * sign.c (make_keysig_packet): Use SHA-1 with v4 RSA keys.
-
- * g10.c, options.h : New option --[no-]froce-v4-certs.
- * sign.c (make_keysig_packet): Create v4 sigs on v4 keys even with
- a v3 key. Use that new option. By David Shaw
-
- * revoke.c (ask_revocation_reason): Allow to select "no reason".
- By David Shaw.
-
- * keyid.c (fingerprint_from_sk): Calculation of an v3 fpr was
- plain wrong - nearly the same code in fingerprint_from_pk is correct.
-
- * build-packet.c (do_secret_key): Added a few comments to the code.
-
-2001-11-07 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Print a warning when -r is used w/o encryption.
- Suggested by Pascal Scheffers.
-
-2001-10-23 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (keyedit_menu): Changed helptext for showpref
- command. Suggested by Reinhard Wobst.
-
- * keyring.c (keyring_search): When marking the offtbl ready, take
- into account that we may have more than one keyring.
-
-2001-10-22 Werner Koch <wk@gnupg.org>
-
- * Makefile.am: Do not use OMIT_DEPENDENCIES
-
- * build-packet.c (build_sig_subpkt): Default is now to put all
- types of subpackets into the hashed area and only list those which
- should go into the unhashed area.
-
-2001-10-18 Werner Koch <wk@gnupg.org>
-
- * keydb.c (keydb_add_resource): Rearranged the way we keep track
- of the resource. There will now be an entry for each keyring here
- and not in keyring.c itself. Store a token to allow creation of a
- keyring handle. Changed all functions to utilize this new design.
- (keydb_locate_writable): Make a real implementation.
- * keyring.c (next_kr): Removed and changed all callers to set the
- resource directly from the one given with the handle.
- (keyring_is_writable): New.
- (keyring_rebuild_cache): Add an arg to pass the token from keydb.
-
-2001-10-17 Werner Koch <wk@gnupg.org>
-
- * keyring.c (keyring_search): Enabled word search mode but print a
- warning that it is buggy.
-
-2001-10-11 Werner Koch <wk@gnupg.org>
-
- * hkp.c (hkp_ask_import): No more need to set the port number for
- the x-hkp scheme.
- (hkp_export): Ditto.
-
-2001-10-06 Stefan Bellon <sbellon@sbellon.de>
-
- * passphrase.c [__riscos__]: Disabled agent specific stuff.
- * g10.c: New option --no-force-v3-sigs.
-
-2001-10-04 Werner Koch <wk@gnupg.org>
-
- * export.c (do_export_stream): Do not push the compress filter
- here because the context would run out of scope due to the
- iobuf_close done by the caller.
- (do_export): Do it here instead.
-
-2001-09-28 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (sign_uids): Always use the primary key to sign keys.
- * getkey.c (finish_lookup): Hack to return only the primary key if
- a certification key has been requested.
-
- * trustdb.c (cmp_kid_for_make_key_array): Renamed to
- (validate_one_keyblock): this and changed arg for direct calling.
- (make_key_array): Renamed to
- (validate_one_keyblock): this and changed args for direct calling.
- (mark_usable_uid_certs, validate_one_keyblock)
- (validate_key_list): Add next_expire arg to keep track of
- expiration times.
- (validate_keys): Ditto for UTKs and write the stamp.
-
- * tdbio.c (migrate_from_v2): Check return code of tbdio_sync.
-
- * tdbdump.c (import_ownertrust): Do a tdbio_sync().
-
- * keyring.c: Made the offtbl an global object.
-
-2001-09-27 Werner Koch <wk@gnupg.org>
-
- * pkclist.c (do_edit_ownertrust): Allow settin of ultimate trust.
-
- * trustdb.c (mark_keyblock_seen): New.
- (make_key_array): Use it to mark the subkeys too.
- (validate_keys): Store validity for ultimatly trusted keys.
-
-2001-09-26 Werner Koch <wk@gnupg.org>
-
- * pkclist.c (check_signatures_trust, do_we_trust): Removed the
- invocation of add_ownertrust. Minor changes to the wording.
- (add_ownertrust, add_ownertrust_cb): Removed.
-
- * trustdb.c (get_validity): Allow to lookup the validity using a
- subkey.
-
- * trustdb.c (new_key_hash_table): Increased the table size to 1024
- and changed the masks accordingly.
- (validate): Changed stats printing.
- (mark_usable_uid_certs): New.
- (cmp_kid_for_make_key_array): Does now check the signatures and
- figures out a usable one.
-
-2001-09-25 Werner Koch <wk@gnupg.org>
-
- * keyring.c (new_offset_item,release_offset_items)
- (new_offset_hash_table, lookup_offset_hash_table)
- (update_offset_hash_table, update_offset_hash_table_from_kb): New.
- (keyring_search): Use a offset table to optimize search for
- unknown keys.
- (keyring_update_keyblock, keyring_insert_keyblock): Insert new
- offsets.
- * getkey.c (MAX_UNK_CACHE_ENTRIES): Removed the unknown keys
- caching code.
-
- * g10.c, options.h, import.c: Removed the entire
- allow-secret-key-import stuff because the validity is now
- controlled by other means.
-
- * g10.c: New command --rebuild-keydb-caches.
- * keydb.c (keydb_rebuild_caches): New.
- * keyring.c (do_copy): Moved some code to
- (create_tmp_file, rename_tmp_file, write_keyblock): new functions.
- (keyring_rebuild_cache): New.
-
- * packet.h (PKT_ring_trust): Add sigcache field.
- * parse-packet.c (parse_trust): Parse sigcache.
- * keyring.c (do_copy): Always insert a sigcache packet.
- (keyring_get_keyblock): Copy the sigcache packet to the signature.
- * sig-check.c (cache_sig_result): Renamed from
- cache_selfsig_result. Changed implementation to use the flag bits
- and changed all callers.
- (mdc_kludge_check): Removed this unused code.
- (do_check): Do not set the sig flags here.
-
- * import.c (read_block): Make sure that ring_trust packets are
- never imported.
- * export.c (do_export_stream): and never export them.
-
- * trustdb.c (make_key_array): Skip revoked and expired keys.
-
-2001-09-24 Werner Koch <wk@gnupg.org>
-
- * g10.c, options.h: New option --no-auto-check-trustdb.
-
- * keygen.c (do_generate_keypair): Set newly created keys to
- ultimately trusted.
-
- * tdbio.h, tdbio.c: Removed all support for records DIR, KEY, UID,
- PREF, SIG, SDIR and CACH. Changed migration function to work
- direct on the file.
- (tdbio_read_nextcheck): New.
- (tdbio_write_nextcheck): New.
-
-2001-09-21 Werner Koch <wk@gnupg.org>
-
- Revamped the entire key validation system.
- * trustdb.c: Complete rewrite. No more validation on demand,
- removed some functions, adjusted to all callers to use the new
- and much simpler interface. Does not use the LID anymore.
- * tdbio.c, tdbio.h: Add new record types trust and valid. Wrote a
- migration function to convert to the new trustdb layout.
- * getkey.c (classify_user_id2): Do not allow the use of the "#"
- prefix.
- * keydb.h: Removed the TDBIDX mode add a skipfnc to the
- descriptor.
- * keyring.c (keyring_search): Implemented skipfnc.
-
- * passphrase.c (agent_open): Add missing bracket. Include windows.h.
-
-2001-09-19 Werner Koch <wk@gnupg.org>
-
- * keylist.c (print_fingerprint): Renamed from fingerprint, made
- global available. Added new arg to control the print style.
- * mainproc.c (print_fingerprint): Removed.
- * pkclist.c (print_fpr, fpr_info): Removed and changed callers to
- use print_fingerprint.
- * keyedit.c (show_fingerprint): Ditto.
-
- * passphrase.c (writen, readn)
- (agent_open, agent_close)
- (agent_get_passphrase)
- (passphrase_clear_cache): Support for W32. Contributed by Timo.
-
- * import.c (import_one): Release keydb handles at 2 more places.
-
- * keyring.c (keyring_release): Close the iobuf.
- (keyring_get_keyblock): Init ret_kb to NULL and store error contidion.
-
- * import.c (import_new_stats_handle): New.
- (import_release_stats_handle): New.
- (import_print_stats): Renamed from static fnc print_stats.
- (import_keys, import_keys_stream): Add an optional status handle
- arg and changed all callers.
- * hkp.c (hkp_ask_import): Add an stats_handle arg and changed all
- callers.
-
- * mainproc.c (print_pkenc_list): Use print_utf8_string2().
-
-2001-09-18 Werner Koch <wk@gnupg.org>
-
- * g10.c: New command --refresh-keys.
- * hkp.c (hkp_refresh_keys): New. Contributed by Timo Schulz.
-
- * parse-packet.c (parse): Stop on impossible packet lengths.
-
-2001-09-17 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (print_notation_data): Wrap notation data status lines
- after 50 chars.
-
- * mainproc.c (proc_pubkey_enc): Make option try-all-secrets work.
- By disastry@saiknes.lv.
-
-2001-09-14 Werner Koch <wk@gnupg.org>
-
- * parse-packet.c (dump_sig_subpkt): List key server preferences
- and show the revocable flag correctly. Contributed by David Shaw.
-
-2001-09-09 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (keyedit_menu): No need to define another p.
-
- * keylist.c (print_capabilities): s/used/use/ so that it
- does not shadow a global.
- * sign.c (sign_file): Renamed arg encrypt to encryptflag
- * keygen.c: Replaced all "usage" by "use".
- * misc.c (openpgp_pk_algo_usage): Ditto.
-
- * pubkey-enc.c (get_it): Renamed arg k to enc so that the later
- defined k does not shadow it.
-
- * parse-packet.c (parse_gpg_control): No need to define another i.
-
- * getkey.c (get_pubkey_byfprint): Must use the enum values and not
- the fprint_len.
- * keyring.c (keyring_search): Removed a non-sense break. Both
- bugs pointed out by Stefan.
-
-2001-09-07 Werner Koch <wk@gnupg.org>
-
- * status.c, status.h: Added NO_RECP and ALREADY_SIGNED.
- * pkclist.c (build_pk_list): Issue NO_RECP.
- * keyedit.c (sign_uids): Added experimental ALREADY_SIGNED
-
- * hkp.c (hkp_import): Use log_error. Bug reported by Neal H
- Walfield.
-
- * getkey.c (classify_user_id2): Change args to take the desc union
- direct. It was a stupid idea to pass the individual fields of an
- union to this function. Changed all callers.
- (classify_user_id): Ditto and allow to pass NULL as the description.
-
-2001-09-06 Werner Koch <wk@gnupg.org>
-
- * getkey.c (fixup_uidnode): Features flag is now a bit vector.
- * keygen.c (add_feature_mdc): Ditto.
-
- Revamped the entire key I/O code to be prepared for other ways of
- key storages and to get rid of the existing shit. GDBM support has
- gone.
- * keydb.c: New
- * keyring.c, keyring.h: New.
- * ringedit.c: Removed. Moved some stuff to keyring.c
- * getkey.c: Changed everything related to the key retrieving
- functions which are now using the keydb_ functions.
- (prepare_search, word_match_chars, word_match)
- (prepare_word_match, compare_name): Moved to keyring.c
- (get_pubkey_byname): Removed ctx arg and add ret_kdbhd
- arg. Changed all callers.
- (key_byname): Use get_pubkey_end to release the context and take
- new ret_kbdhd arg. Changed all callers.
- (classify_user_id2): Fill the 16 byte fingerprint up with 4 null
- bytes not with zero bytes of value 4, tsss.
- * import.c (import_one): Updated to use the new keydb interface.
- (import_secret_one): Ditto.
- (import_revoke_cert): Ditto.
- * delkey.c (do_delete_key): Ditto.
- * keyedit.c (keyedit_menu): Ditto.
- (get_keyblock_byname): Removed.
- * revoke.c (gen_revoke): Ditto.
- * export.c (do_export_stream): Ditto.
- * trustdb.c (update_trustdb): Ditto.
- * g10.c, gpgv.c (main): Renamed add_keyblock_resource to
- keydb_add_resource.
- * Makefile.am: Added and removed files.
-
- * keydb.h: Moved KBNODE typedef and MAX_FINGERPRINT_LEN to
- * global.h: this new header.
-
-2001-09-03 Werner Koch <wk@gnupg.org>
-
- * passphrase.c (agent_get_passphrase): Changed nread to size_t.
- (passphrase_clear_cache): Ditto.
-
- * keyid.c (mk_datestr): Avoid trigraphs.
- (fingerprint_from_pk): Cache the keyid in the pk.
-
- * options.h: Add opt.with_fingerprint so that we know whether the
- corresponding options was used.
- * g10.c (main): Set it here.
- * pkclist.c (check_signatures_trust): Always print fingerprint
- when this option is used. Mixed a minor memory leak.
-
- * status.c, status.h: New status INV_RECP.
- * pkclist.c (build_pk_list): Issue this status.
-
-2001-08-31 Werner Koch <wk@gnupg.org>
-
- * parse-packet.c (parse_key,parse_pubkeyenc)
- (parse_signature): Return error on reading bad MPIs.
-
- * mainproc.c (check_sig_and_print): Always print the user ID even
- if it is not bound by a signature. Use the primary UID in the
- status messages and encode them in UTF-8
- * status.c (write_status_text_and_buffer): New.
-
-2001-08-30 Werner Koch <wk@gnupg.org>
-
- * packet.h (sigsubpkttype_t): Add SIGSUBPKT_FEATURES.
- (PKT_public_key, PKT_user_id): Add a flag for it.
- * parse-packet.c, build-packet.c: Add support for them.
- * getkey.c (fixup_uidnode, merge_selfsigs): Set the MDC flags.
- * keygen.c (add_feature_mdc): New.
- (keygen_upd_std_prefs): Always set the MDC feature.
- * keyedit.c (show_prefs): List the MDC flag
- * pkclist.c (select_mdc_from_pklist): New.
- * encode.c (encode_crypt, encrypt_filter): Test whether MDC
- should be used.
- * cipher.c (write_header): Set MDC use depending on the above test.
- Print more status info.
-
- * delkey.c (do_delete_key): Kludge to delete a secret key with no
- public key available.
-
- * ringedit.c (find_secret_keyblock_direct): New.
- * getkey.c (seckey_available): Simplified.
-
- * ringedit.c (cmp_seckey): Now compares the secret key against the
- public key while ignoring all secret parts.
- (keyring_search): Use a public key packet as arg. Allow to search
- for subnkeys
- (search): Likewise. Changed all callers.
- (find_secret_keyblock_bypk): New.
- (find_secret_keyblock_byname): First locate the pubkey and then
- find the correponding secret key.
- * parse-packet.c (parse): Renamed pkttype arg to onlykeypkts and
- changed code accordingly. Changed all callers.
- (search_packet): Removed pkttype arg.
- * keyedit.c (keyedit_menu): First locate the public key and then
- try to locate a secret key.
-
- * ringedit.c (locate_keyblock_by_fpr): Removed.
- (locate_keyblock_by_keyid): Removed.
- (find_keyblock_bysk): Removed.
-
- * sig-check.c (check_key_signature2): Print the keyid along with
- the wrong sig class errors.
-
-2001-08-24 Werner Koch <wk@gnupg.org>
-
- * sign.c (sign_file): Stripped the disabled comment packet code.
- (sign_file, sign_symencrypt_file): Moved common code to ..
- (write_onepass_sig_packets): .. this new function.
- (sign_file, clearsign_file, sign_symencrypt_file): Moved common
- code to
- (write_signature_packets): this new function.
- (write_signature_packets, make_keysig_packet)
- (update_keysig_packet): Moved common code to
- (hash_uid, hash_sigclass_to_magic): these new functions
- (sign_file, sign_symencrypt_file): Moved common code to
- (write_plaintext_packet): this new function.
-
-2001-08-21 Stefan Bellon <sbellon@sbellon.de>
-
- * trustdb.c (query_trust_info): Changed trustlevel to signed int.
- * g10.c [__riscos__]: Fixed handling of --use-agent --lock-multiple.
-
-2001-08-20 Werner Koch <wk@gnupg.org>
-
- * encr-data.c (decrypt_data): Keep track on whether we already
- printed information about the used algorithm.
- * mainproc.c (proc_encrypted): Removed the non-working IDEA hack
- and print a message about the assumed algorithm.
- * passphrase.c (passphrase_to_dek): Use the same algorithm as above.
- (proc_symkey_enc): Print the algorithm, so that the user knows it
- before entering the passphrase.
- (proc_pubkey_enc, proc_pubkey_enc): Zero the DEK out.
- * encode.c (encode_crypt, encrypt_filter): Ditto.
-
- * g10.c: Allow for --sign --symmetric.
- * sign.c (sign_and_symencrypt): New.
-
- Applied patches from Stefan Bellon <sbellon@sbellon.de> to support
- RISC OS. Nearly all of these patches are identified by the
- __riscos__ macro.
- * compress.c: Added a couple of casts.
- * g10.c [__riscos__]: Some patches and new options foo-file similar
- to all foo-fd options.
- * gpgv.c, openfile.c, ringedit.c, tdbio.c: Minor fixes. Mainly
- replaced hardcoded path separators with EXTSEP_S like macros.
- * passprase.c [__riscos__]: Disabled agent stuff
- * trustdb.c (check_trust): Changed r_trustlevel to signed int to
- avoid mismatch problems in pkclist.c
- * pkclist.c (add_ownertrust): Ditto.
- * plaintext.c (handle_plaintext) [__riscos__]: Print a note when
- file can't be created.
- * options.h [__riscos__]: Use an extern unless included from the
- main module.
- * signal.c (got_fatal_signal) [__riscos__]: Close all files.
-
-2001-08-14 Werner Koch <wk@gnupg.org>
-
- * keygen.c (ask_algo): New arg r_usage. Allow for RSA keys.
- (gen_rsa): Enabled the code.
- (do_create): Enabled RSA branch.
- (parse_parameter_usage): New.
- (proc_parameter_file): Handle usage parameter.
- (read_parameter_file): Ditto.
- (generate_keypair): Ditto.
- (generate_subkeypair): Ditto.
- (do_generate_keypair): Ditto.
- (do_add_key_flags): New.
- (keygen_add_std_prefs): Use the new function.
- (keygen_add_key_flags_and_expire): New.
- (write_selfsig, write_keybinding): Handle new usage arg.
- * build-packet.c (build_sig_subpkt): Make sure that key flags go
- into the hashed area.
-
- * keygen.c (write_uid): Initialize the reference cunter.
-
- * keyedit.c (keyedit_menu): No more need to update the trustdb for
- preferences. Added calls to merge keblock.
-
- * kbnode.c (dump_kbnode): Print some more flags.
-
-2001-08-10 Werner Koch <wk@gnupg.org>
-
- Revamped the preference handling.
-
- * packet.h (prefitem_t, preftype_t): New.
- (PKT_public_key): Added a uid field.
- (PKT_user_id): Added field to store preferences and a reference
- counter.
- * parse-packet.c (parse_user_id,parse_photo_id): Initialize them
- * free-packet.c (free_user_id): Free them.
- (copy_user_id): Removed.
- (scopy_user_id): New.
- (cmp_user_ids): Optimized for identical pointers.
- (release_public_key_parts): Release the uid.
- (copy_public_key_with_new_namehash): Removed.
- (copy_prefs): New.
- * keyedit.c (menu_adduid): Use the new shallow copy user id.
- (show_prefs): Adjusted implementation.
- (keyedit_menu): No more need to update the trustdb after changing
- preferences.
- * getkey.c (fixup_uidnode): Store preferences.
- (find_by_name): Return a user id packet and remove namehash stuff.
- (lookup): Removed the unused namehash stuff.
- (finish_lookup): Added foundu arg.
- (pk_from_block): Removed the namehash arg and changed all callers.
- (merge_selfsigs): Copy prefs to all keys.
- * trustdb.c (get_pref_data): Removed.
- (is_algo_in_prefs): Removed.
- (make_pref_record): Deleted and removed all class.
- * pkclist.c (select_algo_from_prefs): Adjusted for the new
- preference implementation.
- * pubkey-enc.c (is_algo_in_prefs): New.
- (get_it): Use that new function.
-
-2001-08-09 Werner Koch <wk@gnupg.org>
-
- * build-packet.c (build_sig_subpkt): Fixed calculation of
- newarea->size.
-
- * g10.c (main): New option "--preference-list"
- * keyedit.c (keyedit_menu): New commands "setpref" and "updpref".
- (menu_set_preferences): New.
- * keygen.c (keygen_set_std_prefs): New.
- (set_one_pref): New.
- (check_zip_algo): New.
- (keygen_get_std_prefs): New.
- (keygen_upd_std_prefs): New
- (keygen_add_std_prefs): Move the pref setting code into the above fnc.
- * build-packet.c (build_sig_subpkt): Updated the list of allowed
- to update subpackets.
-
-2001-08-08 Werner Koch <wk@gnupg.org>
-
- * packet.h (subpktarea_t): New.
- (PKT_signature): Use that type for hashed_data and unhashed_data and
- removed the _data prefix from those fields. Changed all users.
- * parse-packet.c (parse_signature): Changed allocation for that.
- (parse_sig_subpkt): Changed declaration
- (enum_sig_subpkt): Ditto and changed implementation accordingly.
- * free-packet.c (cp_subpktarea): Renamed from cp_data_block and
- adjusted implementation. Changed caller.
- * sig-check.c (mdc_kludge_check): Adjusted the hashing.
- (do_check): Ditto.
- * sign.c (sign_file, clearsign_file, make_keysig_packet,
- update_keysig_packet): Ditto.
- * build-packet.c (build_sig_subpkt): Partial rewrite.
- (find_subpkt): Adjusted and made static.
- (delete_sig_subpkt): Adjusted.
- (do_signature): Ditto.
-
- * keygen.c (ask_keysize): Do not print the notes about suggested
- key sizes if just a DSA key is generated.
-
- * trustdb.c (add_ultimate_key): s/log_error/log_info/ for
- duplicated inserted trusted keys.
-
-2001-08-07 Werner Koch <wk@gnupg.org>
-
- * sign.c (sleep): Redefine for W32.
-
- * g10.c, options.h: Set new flag opt.no_homedir_creation when
- --no-options is given.
- * openfile.c (try_make_homedir): Don't create the homedir in that case.
-
-2001-08-03 Werner Koch <wk@gnupg.org>
-
- * armor.c (armor_filter): Removed the default comment string
- because it could get us in trouble due to translations using non
- ascii characters.
-
-2001-08-01 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_keyblock_print): Do not list revoked UIDs unless
- in verbose mode and we do no signature listing.
-
- * getkey.c (finish_lookup): Skip subkeys which are not yet valid.
- * g10.c, options.h: New option --ignore-valid-from.
-
- * sign.c (make_keysig_packet): Added new sigversion argument to
- allow the caller to force generation of required signature
- version. Changed all callers. Suggested by Thomas Roessler.
-
- * keyedit.c (sign_uids): Force v4 signature generation for local
- sigs. Removed the check for local signature and pre-v4 keys.
-
-2001-07-27 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (sign_uids): Check that we are not trying to to a
- lsign with a pre-v4 key. Bug noticed by Thomas Roessler.
-
-2001-07-26 Werner Koch <wk@gnupg.org>
-
- * parse-packet.c (parse_photo_id): Reset all variables.
- * getkey.c (merge_selfsigs_main): Removed checks on PHOTO_ID
- because this is handled identically to a user ID.
-
-2001-07-06 Werner Koch <wk@gnupg.org>
-
- * cipher.c (write_header): Don't use MDC with --rfc1991. Suggested
- by disastry@saiknes.lv.
-
-2001-07-05 Werner Koch <wk@gnupg.org>
-
- * g10.c, options.h: New option --preserve-permissions.
- * ringedit.c (add_keyblock_resource): Use it here
- (keyring_copy): and here.
-
- * trustdb.c (verify_own_keys): Be more silent on --quiet.
- Suggested by Thomas Roessler.
- * sig-check.c (check_key_signature2): Ditto.
- * mainproc.c (proc_encrypted, proc_tree): Ditto
- * getkey.c (lookup): Ditto.
-
-2001-07-04 Werner Koch <wk@gnupg.org>
-
- * ringedit.c (add_keyblock_resource): Restore filename in case of error.
-
-2001-06-25 Werner Koch <wk@gnupg.org>
-
- * kbnode.c (dump_kbnode): Print the signature timestamp.
-
- * keyedit.c (keyedit_menu): New menu point "primary".
- (change_primary_uid_cb): New.
- (menu_set_primary_uid): New.
- * sign.c (update_keysig_packet): New.
- * build-packet.c (build_sig_subpkt): Put the primary UID flag into
- the hashed area. Allow update of some more packets.
-
-2001-06-15 Werner Koch <wk@gnupg.org>
-
- * getkey.c (merge_selfsigs): Exit gracefully when a secret key is
- encountered. May happen if a secret key is in public keyring.
- Reported by Francesco Potorti.
-
-2001-06-12 Werner Koch <wk@gnupg.org>
-
- * getkey.c (compare_name): Use ascii_memistr(), ascii_memcasecmp()
- * keyedit.c (keyedit_menu): Use ascii_strcasecmp().
- * armor.c (radix64_read): Use ascii_toupper().
- * ringedit.c (do_bm_search): Ditto.
- * keygen.c (read_parameter_file): Ditto.
- * openfile.c (CMP_FILENAME): Ditto.
- * g10.c (i18n_init): We can now use just LC_ALL.
-
-2001-05-29 Werner Koch <wk@gnupg.org>
-
- * keygen.c (generate_subkeypair): Print a warning if a subkey is
- created on a v3 key. Suggested by Brian M. Carlson.
-
-2001-05-27 Werner Koch <wk@gnupg.org>
-
- * keyid.c (get_lsign_letter): New.
- * keylist.c (list_keyblock_colon): Use it here.
- * mainproc.c (list_node): and here.
-
- * getkey.c, packet.h, free-packet.c: Removed that useless key
- created field; I dunno why I introducded this at all - the
- creation time is always bound to the key packet and subject to
- fingerprint calculation etc.
-
- * getkey.c (fixup_uidnode): Add keycreated arg and use this
- instead of the signature timestamp to calculate the
- help_key_expire. Bug reported by David R. Bergstein.
- (merge_selfsigs_main): Correct key expiration time calculation.
- (merge_selfsigs_subkey): Ditto.
-
-2001-05-25 Werner Koch <wk@gnupg.org>
-
- * revoke.c (gen_revoke): Add a cast to a tty_printf arg.
- * delkey.c (do_delete_key): Ditto.
- * keyedit.c (print_and_check_one_sig): Ditto.
- (ask_revoke_sig): Ditto.
- (menu_revsig): Ditto.
- (check_all_keysigs): Removed unused arg.
-
-2001-05-23 Werner Koch <wk@gnupg.org>
-
- * g10.c (opts): Typo fix by Robert C. Ames.
-
-2001-05-06 Werner Koch <wk@gnupg.org>
-
- * revoke.c: Small typo fix
-
-2001-05-04 Werner Koch <wk@gnupg.org>
-
- * passphrase.c (passphrase_clear_cache): Shortcut if agent usage
- is not enabled.
-
-2001-05-01 Werner Koch <wk@gnupg.org>
-
- * passphrase.c (writen): Replaced ssize_t by int. Thanks to
- to Robert Joop for reporting that SunOS 4.1.4 does not have it.
-
-2001-04-28 Werner Koch <wk@gnupg.org>
-
- * getkey.c (merge_public_with_secret): pkttype was not set to subkey.
-
-2001-04-27 Werner Koch <wk@gnupg.org>
-
- * skclist.c (build_sk_list): Changed one log_debug to log_info.
-
-2001-04-25 Werner Koch <wk@gnupg.org>
-
- * keyedit.c (show_prefs): Add a verbose mode.
- (show_key_with_all_names): Pass verbose flag for special value of
- with_pref.
- (keyedit_menu): New command "showpref"
- (show_key_with_all_names): Mark revoked uids and the primary key.
-
-2001-04-24 Werner Koch <wk@gnupg.org>
-
- * getkey.c (get_primary_uid): Return a different string in case of
- error and made it translatable.
-
- * build-packet.c (do_secret_key): Ugly, we wrote a zero
- instead of the computed ndays. Thanks to M Taylor for complaining
- about a secret key import problem.
-
-2001-04-23 Werner Koch <wk@gnupg.org>
-
- * hkp.c (hkp_ask_import): Allow to specify a port number for the
- keyserver. Add a kudge to set the no_shutdown flag.
- (hkp_export): Ditto.
- * options.skel: Document the changes
-
-2001-04-20 Werner Koch <wk@gnupg.org>
-
- * options.skel: Add some more comments.
-
-2001-04-19 Werner Koch <wk@gnupg.org>
-
- * keyid.c (mk_datestr): New. Handles negative times. We must do
- this because Windoze segvs on negative times passed to gmtime().
- Changed all datestr_from function to use this one.
-
- * keyid.c, keyid.h (colon_strtime): New. To implement the
- fixed-list-mode.
- (colon_datestr_from_pk): New.
- (colon_datestr_from_sk): New.
- (colon_datestr_from_sig): New.
- * keylist.c (list_keyblock_colon): Use these functions here.
- * mainproc.c (list_node): Ditto.
-
-2001-04-18 Werner Koch <wk@gnupg.org>
-
- * openfile.c (open_sigfile): Fixed the handling of ".sign".
- * mainproc.c (proc_tree): Use iobuf_get_real_fname.
- Both are by Vincent Broman.
-
-2001-04-14 Werner Koch <wk@gnupg.org>
-
- * getkey.c (fixup_uidnode): Removed check for !sig which is
- pointless here. Thanks to Jan Niehusmann.
-
-2001-04-10 Werner Koch <wk@gnupg.org>
-
- * sig-check.c (check_key_signature2): Use log_info instead of
- log_error so that messed up keys do not let gpg return an error.
- Suggested by Christian Kurz.
-
- * getkey.c (merge_selfsigs_main): Do a fixup_uidnode only if we
- have both, uid and sig. Thanks to M Taylor.
-
-2001-04-05 Werner Koch <wk@gnupg.org>
-
- * armor.c (unarmor_pump_new,unarmor_pump_release): New.
- (unarmor_pump): New.
- * pipemode.c (pipemode_filter): Use the unarmor_pump to handle
- armored or non-armored detached signatures. We can't use the
- regular armor_filter becuase this does only chack for armored
- signatures the very first time. In pipemode we may have a mix of
- armored and binary detached signatures.
- * mainproc.c (proc_tree): Do not print the "old style" notice when
- this is a pipemode processes detached signature.
- (proc_plaintext): Special handling of pipemode detached sigs.
-
- * packet.h (CTRLPKT_PLAINTEXT_MARK): New.
- * parse-packet.c (create_gpg_control): New.
- * kbnode.c (dump_kbnode): Support it here.
- * mainproc.c (check_sig_and_print): Fixed the check for bad
- sequences of multiple signatures.
- (proc_plaintext): Add the marker packet.
- (proc_tree): We can now check multiple detached signatures.
-
-2001-04-02 Werner Koch <wk@gnupg.org>
-
- The length of encrypted packets for blocksizes != 8 was not
- correct encoded. I think this is a minor problem, because we
- usually use partial length packets. Kudos to Kahil D. Jallad for
- pointing this out.
- * packet.h: Add extralen to PKT_encrypted.
- * cipher.c (write_header): Set extralen.
- * build-packet.c (do_encrypted): Use extralen instead of const 10.
- (do_encrypted_mdc): Ditto.
- * parse-packet.c (parse_encrypted): Set extralen to 0 because we
- don't know it here.
-
-2001-03-30 Werner Koch <wk@gnupg.org>
-
- * getkey.c (premerge_public_with_secret): Changed wording an add
- the keyID to the info message.
-
-2001-03-29 Werner Koch <wk@gnupg.org>
-
- * getkey.c (premerge_public_with_secret): Use log_info instead of
- log_error when no secret key was found for a public one.
- Fix the usage if the secret parts of a key are not available.
-
- * openfile.c (ask_outfile_name): Trim spaces.
- (open_outfile): Allow to enter an alternate filename. Thanks to
- Stefan Bellon.
- * plaintext.c (handle_plaintext): Ditto.
-
-2001-03-28 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (do_check_sig): Allow direct key and subkey
- revocation signature.
- * sig-check.c (check_key_signature2): Check direct key signatures.
- Print the signature class along with an error.
-
-2001-03-27 Werner Koch <wk@gnupg.org>
-
- * packet.h: Add a missing typedef to an enum. Thanks to Stefan Bellon.
-
- * g10.c: New option --no-sig-create-check.
- * sign.c (do_sign): Implement it here.
- * g10.c: New option --no-sig-cache.
- * sig-check.c (check_key_signature2): Implement it here.
- (cache_selfsig_result): and here.
-
- * keylist.c (list_keyblock): Removed debugging stuff.
-
- * getkey.c (cache_public_key): Made global.
- * keygen.c (write_selfsig, write_keybinding): Cache the new key.
-
- * getkey.c (key_byname): Add new arg secmode and changed all
- callers to request explicitly the mode. Deriving this information
- from the other supplied parameters does not work if neither pk nor
- sk are supplied.
-
-2001-03-25 Werner Koch <wk@gnupg.org>
-
- * packet.h (ctrlpkttype_t): New.
- * mainproc.c (add_gpg_control,proc_plaintext,proc_tree): Use the
- new enum values.
- * pipemode.c (make_control): Ditto.
- * armor.c (armor_filter): Ditto.
-
-2001-03-24 Werner Koch <wk@gnupg.org>
-
- * sign.c (do_sign): Verify the signature right after creation.
-
-2001-03-23 Werner Koch <wk@gnupg.org>
-
- * status.c, status.h (STATUS_UNEXPECTED): New.
- * mainproc.c (do_proc_packets): And emit it here.
-
-2001-03-21 Werner Koch <wk@gnupg.org>
-
- * status.c: Add sys/types.h so that it runs on Ultrix. Reported
- by Georg Schwarz.x
-
- * build-packet.c (build_sig_subpkt): Fixed generaton of packet
- length header in case where 2 bytes headers are needed. Thanks to
- Piotr Krukowiecki.
-
-2001-03-19 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): the default keyring is no always used unless
- --no-default-keyring is given.
-
- * ringedit.c (add_keyblock_resource): invalidate cache after file
- creation.
-
-2001-03-15 Werner Koch <wk@gnupg.org>
-
- * keygen.c (ask_algo): Changed the warning of the ElGamal S+E Algo.
-
- * keylist.c (print_capabilities): New.
- (list_keyblock_colon): and use it here.
-
-2001-03-13 Werner Koch <wk@gnupg.org>
-
- * main.c, options.h: New option --fixed_list_mode.
- * keylist.c (list_keyblock_colon): use it here.
-
- * getkey.c (merge_keys_and_selfsig): Divert merging of public keys
- to the function used in key selection..
- * keylist.c (is_uid_valid): Removed.
- (list_keyblock): Splitted into ..
- (list_keyblock_print, list_keyblock_colon): .. these.
- functions. Changed them to use the flags set in the key lookup code.
- (reorder_keyblock): New, so that primary user IDs are listed first.
-
- * ringedit.c (keyring_copy): flush the new iobuf chaces before
- rename or remove operations. This is mainly needed for W32.
-
- * hkp.c [HAVE_DOSISH_SYSTEM]: Removed the disabled code because we
- have now W32 socket support in ../util/http.c
-
- * skclist.c (key_present_in_sk_list): New.
- (is_duplicated_entry): New.
- (build_sk_list): Check for duplicates and do that before unlocking.
-
-2001-03-12 Werner Koch <wk@gnupg.org>
-
- * armor.c (parse_header_line): Removed double empty line check.
- (parse_header_line): Replaced trim_trailing_ws with a counting
- function so that we can adjust for the next read.
-
- * options.skel: Fixed 3 typos. By Thomas Klausner. Replaced the
- keyserver example by a better working server.
-
- * parse-packet.c (parse_symkeyenc): Return Invalid_Packet on error.
- (parse_pubkeyenc): Ditto.
- (parse_onepass_sig): Ditto.
- (parse_plaintext): Ditto.
- (parse_encrypted): Ditto.
- (parse_signature): Return error at other places too.
- (parse_key): Ditto.
- * g10.c (main): Set opt.list_packets to another value when invoked
- with the --list-packets command.
- * mainproc.c (do_proc_packets): Don's stop processing when running
- under --list-packets command.
-
- * signal.c (do_sigaction): Removed.
- (init_one_signal): New to replace the above. Needed to support
- systems without sigactions. Suggested by Dave Dykstra.
- (got_fatal_signal,init_signals): Use the above here.
- (do_block): Use sigset() if sigprocmask() is not available.
-
- * armor.c (parse_hash_header): Test on TIGER192, which is the
- correct value as per rfc2440. By Edwin Woudt.
-
-2001-03-08 Werner Koch <wk@gnupg.org>
-
- * misc.c: Include time.h. By James Troup.
-
- * getkey.c: Re-enabled the unknown user Id and PK caches and
- increased their sizes.
-
- * getkey.c (merge_selfsigs_main): Set expire date and continue
- processing even if we found a revoked key.
- (merge_selfsigs_subkeys): Ditto.
-
- * packet.h: Add an is_revoked flag to the user_id packet.
- * getkey.c (fixup_uidnode): Set that flag here.
- (merge_selfsigs_main): Fix so that the latest signature is used to
- find the self-signature for an UID.
- * parse-packet.c (parse_user_id): Zero out all fields.
- * mainproc.c (check_sig_and_print): Print the primary user ID
- according the the node flag and then all other non-revoked user IDs.
- (is_uid_revoked): Removed; it is now handled by the key selection code.
-
- Changed the year list of all copyright notices.
-
-2001-03-07 Werner Koch <wk@gnupg.org>
-
- * getkey.c (finish_lookup): Print an info message only in verbose mode.
-
-2001-03-05 Werner Koch <wk@gnupg.org>
-
- * packet.h: Replaced sigsubpkt_t value 101 by PRIV_VERIFY_CACHE.
- We have never used the old value, so we can do this without any harm.
- * parse-packet.c (dump_sig_subpkt): Ditto.
- (parse_one_sig_subpkt): Parse that new sub packet.
- * build-packet.c (build_sig_subpkt): Removed the old one from the
- hashed area.
- (delete_sig_subpkt): New.
- (build_sig_subpkt): Allow an update of that new subpkt.
- * sig-check.c (check_key_signature2): Add verification caching
- (cache_selfsig_result): New.
- * export.c (do_export_stream): Delete that sig subpkt before exporting.
- * import.c (remove_bad_stuff): New.
- (import): Apply that function to all imported data
-
-2001-03-03 Werner Koch <wk@gnupg.org>
-
- * getkey.c: Introduced a new lookup context flag "exact" and used
- it in all place where we once used primary.
- (classify_user_id2): Replaced the old function and add an extra
- argument to return whether an exact keyID has been requested.
- (key_byname): Removed the unused ctx.primary flag
- (get_seckey_byname2): Ditto.
- (finish_lookup): Changed debugging output.
-
-2001-03-02 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_one): Remove the merge key calls.
-
-2001-03-01 Werner Koch <wk@gnupg.org>
-
- * getkey.c (finish_lookup): Don't use it if we no specific usage
- has been requested.
- (merge_selfsigs_main): fix UID only if we have an signature.
- (lookup): Return UNU_PUBKEY etc. instead of NO_PUBKEY if we found
- a key but the requested usage does not allow this key.
- * import.c (import_one): Take UNU_PUBKEY into account.
- * mainproc.c (list_node): Ditto.
- * keylist.c (list_keyblock): Ditto.
- * keyedit.c (print_and_check_one_sig): Ditto.
-
-2001-02-09 Werner Koch <wk@gnupg.org>
-
- * delkey.c (delete_key): Removed that silly assert which rendered
- the whole new stuff meaningless.
-
-2001-02-08 Werner Koch <wk@gnupg.org>
-
- * getkey.c (key_byname): It can happen that we have both, sk and pk
- NULL, fix for that.
-
- * parse-packet.c (parse_one_sig_subpkt): Add support for
- primary_uid and key_flags.
- (can_handle_critical): Ditto
-
- * parse-packet.c (parse_encrypted): Fixed listing of pktlen for
- MDC packets.
-
- * getkey.c: Backported the version of this file from gpg 1.1. this
- involved some changes in other files too.
- * parse-packet.c (parse_key): Clear req_usage.
- * skclist.c (build_sk_list): Use req_usage to pass the usage
- information to the lookup function.
- * pkclist.c (build_pk_list): Ditto.
- * free-packet.c (copy_public_parts_to_secret_key): New.
- * keydb.h: Add IS_* macros to check the sig_class.
- * misc.c (openpgp_cipher_test_algo): New.
- (openpgp_pk_test_algo): New.
- (openpgp_pk_algo_usage): New.
- (openpgp_md_test_algo): New.
- * packet.h: Add a few fields to PKT_{public,secret}_key and
- PKT_user_id.
- * seckey-cert.c (do_check): Use the new main_keyid field.
-
-2001-02-04 Werner Koch <wk@gnupg.org>
-
- * encr-data.c (decrypt_data): Catch error when we had problems to
- parse the encrypted packet. By Timo.
-
-2001-01-29 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): --batch does now set nogreeting.
-
- * delkey.c (do_delete_key): Fixed delete-both functionality.
-
-2001-01-22 Werner Koch <wk@gnupg.org>
-
- * g10.c: New command --delete-secret-and-public-key.
- * delkey.c (delete_key): Add new arg allow_both.
- (do_delete_key): Move most stuff from above to this new function.
-
-2001-01-12 Werner Koch <wk@gnupg.org>
-
- * passphrase.c (passphrase_to_dek): Use MD5 when IDEA is installed
- and we have no S2K.
- * mainproc.c (proc_encrypted): Likewise
-
-2001-01-11 Werner Koch <wk@gnupg.org>
-
- * sig-check.c (do_check): Print the signature key expire message
- only in verbose mode and added the keyID.
-
-2001-01-09 Werner Koch <wk@gnupg.org>
-
- * status.c, status.h: New status USERID_HINT.
- (write_status_text): Replace LF and CR int text by C-escape sequence.
-
- * passphrase.c (passphrase_to_dek): Fixed the NEED_PASSPHRASE
- output. It does now always print 2 keyIDs. Emit the new
- USERID_HINT.
-
-2001-01-08 Werner Koch <wk@gnupg.org>
-
- * g10.c, options.h: New option --no-expensive-trust-checks.
- * keylist.c (list_keyblock): Act on this option.
-
-2001-01-04 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Set homedir only in the pre-parsing phase and
- replace backslashes in the W32 version.
-
-2001-01-03 Werner Koch <wk@gnupg.org>
-
- * status.c, status.h : New status KEY_CREATED
- * keygen.c (do_generate_keypair,generate_subkeypair): Emit it.
-
-2000-12-28 Werner Koch <wk@gnupg.org>
-
- * signal.c (got_fatal_signal): Remove lockfiles here because the
- atexit stuff does not work due to the use of raise. Suggested by
- Peter Fales.
- * gpgv.c (remove_lockfiles): New stub.
-
-2000-12-19 Werner Koch <wk@gnupg.org>
-
- * status.c, status.h (cpr_get_no_help): New.
- * keyedit.c (keyedit_menu): Use it here because we have our own
- help list here.
-
-2000-12-18 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (print_failed_pkenc): Don't print the sometimes
- confusing message about unavailabe secret key. Renamed ...
- (print_pkenc_list): ... to this and introduced failed arg.
- (proc_encrypted): Print the failed encryption keys and then
- the one to be used.
- (proc_pubkey_enc): Store also the key we are going to use.
-
- * mainproc.c (check_sig_and_print): Don't list revoked user IDs.
- (is_uid_revoked): New.
-
-2000-12-08 Werner Koch <wk@gnupg.org>
-
- * pipemode.c: Made the command work. Currently only for
- non-armored detached signatures.
- * mainproc.c (release_list): Reset the new pipemode vars.
- (add_gpg_control): Handle the control packets for pipemode
- * status.c, status.h: New stati {BEGIN,END}_STREAM.
-
-2000-12-07 Werner Koch <wk@gnupg.org>
-
- * g10.c: New option --allow-secret-key-import.
- * import.c (import_keys,import_keys_stream): Honor this option.
- (import): New arg allow_secret and pass that arg down to ...
- (import_secret_one): to this and print a warning if secret key
- importing is not allowed.
-
-2000-12-05 Werner Koch <wk@gnupg.org>
-
- * cipher.c (cipher_filter): Moved the end_encryption status ...
- * encode.c (encode_simple,encode_crypt): to here
- * sign.c (sign_file): and here.
-
- * status.c (mywrite): Removed.
- (get_status_string): Removed the LFs from the strings.
- (set_status_fd,is_status_enabed,write_status_text,
- write_status_buffer): Replaced all mywrite by stdio calls and use
- fdopen to create a strem. This is needed to make things smoother
- in the W32 version.
-
-2000-12-04 Werner Koch <wk@gnupg.org>
-
- * import.c (merge_blocks): Increment n_sigs for revocations.
-
-2000-11-30 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): Use iobuf_translate_file_handle for all options
- with filehandles as arguments. This is function does some magic
- for the W32 API.
-
- * verify.c (verify_signatures): Add a comment rant about the
- detached signature problem.
- * mainproc.c (proc_tree): Issue an error if a detached signature
- is assumed but a standard one was found.
- * plaintext.c (hash_datafiles): Don't fall back to read signature
- from stdin.
- * openfile.c (open_sigfile): Print verbose message only if the
- file could be accessed.
-
-2000-11-24 Werner Koch <wk@gnupg.org>
-
- * passphrase.c [HAVE_DOSISH_SYSTEM]: Disabled all the agent stuff.
-
-2000-11-16 Werner Koch <wk@gnupg.org>
-
- * g10.c: New option --use-agent
- * passphrase.c (agent_open,agent_close): New.
- (agent_get_passphrase,agent_clear_passphrase): New.
- (passphrase_clear_cache): New.
- (passphrase_to_dek): Use the agent here.
- * seckey-cert.c (do_check): Clear cached passphrases.
-
-2000-11-15 Werner Koch <wk@gnupg.org>
-
- * status.c (write_status_text): Moved the big switch to ...
- (get_status_string): ... new function.
- (write_status_buffer): New.
-
- * status.c (mywrite): New and replaced all write() by this.
-
- * status.c, status.h: Add 3 status lcodes for notaions and policy.
- * mainproc.c (print_notation_data): Do status output of notations.
-
-2000-11-13 Werner Koch <wk@gnupg.org>
-
- * sign.c (clearsign_file): Use LF macro to print linefeed.
-
-2000-11-11 Paul Eggert <eggert@twinsun.com>
-
- Clean up the places in the code that incorrectly use "long" or
- "unsigned long" for file offsets. The correct type to use is
- "off_t". The difference is important on large-file hosts,
- where "off_t" is longer than "long".
-
- * keydb.h (struct keyblock_pos_struct.offset):
- Use off_t, not ulong, for file offsets.
- * packet.h (dbg_search_packet, dbg_copy_some_packets,
- search_packet, copy_some_packets): Likewise.
- * parse-packet.c (parse, dbg_search_packet, search_packet,
- dbg_copy_some_packets, copy_some_packets): Likewise.
- * ringedit.c (keyring_search): Likewise.
-
- * parse-packet.c (parse): Do not use %lu to report file
- offsets in error diagnostics; it's not portable.
- * ringedit.c (keyring_search): Likewise.
-
-2000-11-09 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): New option --enable-special-filenames.
-
-2000-11-07 Werner Koch <wk@gnupg.org>
-
- * g10.c (main): New command --pipemode.
- * pipemode.c: New.
-
-2000-10-23 Werner Koch <wk@gnupg.org>
-
- * armor.c (armor_filter): Changed output of hdrlines, so that a CR
- is emitted for DOS systems.
-
- * keygen.c (read_parameter_file): Add a cast for isspace().
-
- * status.c (myread): Use SIGINT instead of SIGHUP for DOS.
-
-2000-10-19 Werner Koch <wk@gnupg.org>
-
- * g10.c: New option --ignore-crc-error
- * armor.c (invalid_crc): New.
- (radix64_read): Act on new option.
-
- * openfile.c (try_make_homedir): Klaus Singvogel fixed a stupid
- error introduced on Sep 6th.
-
-2000-10-18 Werner Koch <wk@gnupg.org>
-
- * misc.c (print_cipher_algo_note): Don't print the note for AES.
- Changed wording.
-
-2000-10-16 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (do_proc_packets): Hack to fix the problem that
- signatures are not detected when there is a MDC packet but no
- compression packet.
-
- * g10.c (print_hashline): New.
- (print_mds): Use above func with --with-colons.
-
- * mainproc.c (check_sig_and_print): Detect multiple signatures
- and don't verify them.
-
-2000-10-14 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (add_onepass_sig): There is an easier solution to the
- error fixed yesterday; just check that we only have onepass
- packets. However, the other solution provides an cleaner
- interface and opens the path to get access to other information
- from the armore headers.
- (release_list): Reset some more variables.
-
-2000-10-13 Werner Koch <wk@gnupg.org>
-
- * mainproc.c (add_gpg_control): New.
- (do_proc_packets): use it.
- (proc_plaintext): Changed logic to detect clearsigns.
- (proc_tree): Check the cleartext sig with some new code.
-
- * packet.h: New packet PKT_GPG_CONTROL.
- * parse-packet.c (parse_gpg_control): New.
- * misc.c (get_session_marker): New.
- * armor.c (armor_filter): Replaced the faked 1-pass packet by the
- new control packet.
-
- * keyedit.c (keyedit_menu): Allow batchmode with a command_fd.
- * status.c (my_read): New.
- (do_get_from_fd): use it.
-
-2000-10-12 Werner Koch <wk@gnupg.org>
-
- * keygen.c (keygen_add_std_prefs): Add Rijndael to the prefs.
-
-2000-10-07 Werner Koch <wk@gnupg.org>
-
- * gpgv.c: Add more stubs for ununsed code to make the binary smaller.
-
-Wed Oct 4 15:50:18 CEST 2000 Werner Koch <wk@openit.de>
-
- * sign.c (hash_for): New arg to take packet version in account, changed
- call callers.
-
- * gpgv.c: New.
- * Makefile.am: Rearranged source files so that gpgv can be build with
- at least files as possible.
-
-Mon Sep 18 12:13:52 CEST 2000 Werner Koch <wk@openit.de>
-
- * hkp.c (not_implemented): Print a notice for W32
-
-Fri Sep 15 18:40:36 CEST 2000 Werner Koch <wk@openit.de>
-
- * keygen.c (keygen_add_std_prefs): Changed order of preferences to
- twofish, cast5, blowfish.
-
- * pkclist.c (algo_available): Removed hack to disable Twofish.
-
-Thu Sep 14 17:45:11 CEST 2000 Werner Koch <wk@openit.de>
-
- * parse-packet.c (dump_sig_subpkt): Dump key flags. Print special
- warning in case of faked ARRs.
-
- * getkey.c (finsih_lookup): Hack so that for v4 RSA keys the subkey
- is used for encryption.
-
-Thu Sep 14 14:20:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c (main): Default S2K algorithms are now SHA1 and CAST5 - this
- should solve a lot of compatibility problems with other OpenPGP
- apps because those algorithms are SHOULD and not optional. The old
- way to force it was by using the --openpgp option whith the drawback
- that this would disable a couple of workarounds for PGP.
-
- * g10.c (main): Don't set --quite along with --no-tty. By Frank Tobin.
-
- * misc.c (disable_core_dump): Don't display a warning here but a return
- a status value and ...
- * g10.c (main): ...print warnining here. Suggested by Sam Roberts.
-
-Wed Sep 13 18:12:34 CEST 2000 Werner Koch <wk@openit.de>
-
- * keyedit.c (keyedit_menu): Allow to use "debug" on the secret key.
-
- * ringedit.c (cmp_seckey): Fix for v4 RSA keys.
- * seckey-cert.c (do_check): Workaround for PGP 7 bug.
-
-Wed Sep 6 17:55:47 CEST 2000 Werner Koch <wk@openit.de>
-
- * misc.c (print_pubkey_algo_note): Do not print the RSA notice.
- * sig-check.c (do_signature_check): Do not emit the RSA status message.
- * pubkey-enc.c (get_session_key): Ditto.
-
- * encode.c (encode_simple, encode_crypt): Fix for large files.
- * sign.c (sign_file): Ditto.
-
-Wed Sep 6 14:59:09 CEST 2000 Werner Koch <wk@openit.de>
-
- * passphrase.c (hash_passphrase): Removed funny assert. Reported by
- David Mathog.
-
- * openfile.c (try_make_homedir): Changes for non-Posix systems.
- * g10.c (main): Take the default homedir from macro.
-
- * g10.c: The --trusted-key option is back.
- * trustdb.c (verify_own_key): Handle this option.
- (add_ultimate_key): Moved stuff from verify_own_key to this new func.
- (register_trusted_key): New.
-
-Fri Aug 25 16:05:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * parse-packet.c (dump_sig_subpkt): Print info about the ARR.
-
- * openfile.c (overwrite_filep): Always return okay if the file is
- called /dev/null.
- (make_outfile_name): Add ".sign" to the list of know extensions.
- (open_sigfile): Ditto.
-
-Wed Aug 23 19:52:51 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c: New option --allow-freeform-uid. By Jeroen C. van Gelderen.
- * keygen.c (ask_user_id): Implemented here.
-
-Fri Aug 4 14:23:05 CEST 2000 Werner Koch <wk@openit.de>
-
- * status.c (do_get_from_fd): Ooops, we used fd instead of opt.command_fd.
- Thanks to Michael Tokarev.
-
-Tue Aug 1 20:06:23 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c: New opttion --try-all-secrets on suggestion from Matthias Urlichs.
- * pubkey-enc.c (get_session_key): Quite easy to implement here.
-
-Thu Jul 27 17:33:04 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c: New option --merge-only. Suggested by Brendan O'Dea.
- * import.c (import_one): Implemented it here
- (import_secret_one): Ditto.
- (print_stats): and give some stats.
-
-Thu Jul 27 12:01:00 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c: New options --show-session-key and --override-session-key
- * pubkey-enc.c (hextobyte): New.
- (get_override_session_key): New.
- * mainproc.c (proc_pubkey_enc): Add session-key stuff.
- * status.h, status.c (STATUS_SESSION_KEY): New.
-
-Thu Jul 27 10:02:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c (main): Use setmode(O_BINARY) for MSDOS while generating random bytes
- (print_mds): Likewise for stdin.
- * plaintext.c (handle_plaintext): Likewise for stdout.
-
-Mon Jul 24 10:30:17 CEST 2000 Werner Koch <wk@openit.de>
-
- * keyedit.c (menu_expire): expire date for primary key can be set again.
-
-Wed Jul 19 11:26:43 CEST 2000 Werner Koch <wk@openit.de>
-
- * keylist.c (is_uid_valid): New.
- (list_keyblock): Print validity information for all user IDs. Note, this
- has to be done at other places too; for now we have only minimal support.
-
-Wed Jul 12 13:32:06 CEST 2000 Werner Koch <wk@openit.de>
-
- * helptext.c, pkclist.c: s/superseeded/superseded/
-
-Mon Jul 10 16:08:57 CEST 2000 Werner Koch <wk@openit.de>
-
- * parse-packet.c (enum_sig_subpkt): Fixed testing on crtitical bit in case
- of a NULL buffer. Reported by Peter Marschall.
-
-Wed Jul 5 13:28:45 CEST 2000 Werner Koch <wk@openit.de>
-
- * keyedit.c, keyid.c: Add some _()
-
- * argparse.c: Changed the flag to suppress --version handling to also
- suppress --help.
-
-Wed Jun 28 11:54:44 CEST 2000 Werner Koch <wk@openit.de>
-
- * armor.c (armor_filter): Set sigclass to 0 in case of non-dash-escaped
- clearsig. This makes this mode work again.
-
- * mainproc.c (proc_tree): Fixed handling of one-pass-sig packets in textmode.
- Disabled the ugly workaround for PGP 5 - let's see whether thi breaks less
- cases. Found by Ted Cabeen.
-
- * options.h (DBG_HASHING): New. All commented md_start_debug are now
- controlled by this debug option.
-
- * sign.c (print_status_sig_created): New and called from 2 places.
-
- * keygen.c (gen_rsa): New, but commented.
- (ask_algo): Commented support for RSA.
-
- * seckey-cert.c (protect_secret_key): Started to fix the code for v4 RSA
- keys - it is not solved yet. However, we have time until, Sep 20th ;)
-
-Wed Jun 14 12:27:09 CEST 2000 Werner Koch <wk@openit.de>
-
- * status.c (init_shm_coprocessing): Changed the sequence of the get,attach
- to cope with the changes in newer Linux kernels. This bug has been found
- by <dmitri@advantrix.com> who also proposed this solution. Hopefully
- this does not break gpg on to many systems.
-
- * cipher.c (write_header): Protect the IV with the MDC too.
- * encr-data.c (decrypt_data): Likewise.
-
-Fri Jun 9 10:09:52 CEST 2000 Werner Koch <wk@openit.de>
-
- * g10.c: New options --no-auto-key-retrieve
- * options.h (auto_key_retrieve): New.
- * mainproc.c (check_sig_and_print): Implemented that.
-
-Wed Jun 7 19:19:09 CEST 2000 Werner Koch <wk@openit.de>
-
- * sig-check.c (do_check): Use EMULATE_MDENCODE also on v4 packets.
-
-Wed Jun 7 17:25:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * cipher.c (write_header): Use plain CFB mode for MDC encrypted packets.
- * encr-data.c (decrypt_data): Ditto.
-
-Mon Jun 5 23:41:54 CEST 2000 Werner Koch <wk@openit.de>
-
- * seskey.c (do_encode_md, encode_md_value): Add new arg v3compathack to work
- around a bug in old versions.
- * sig-check.c (do_check): use the aboved workaround when enabled.
- * g10.c: New option --emulate-md-decode-bug
-
-Mon Jun 5 12:37:43 CEST 2000 Werner Koch <wk@openit.de>
-
- * build-packet.c (do_mdc): New.
- (do_encrypted_mdc): Changed for the new proposal.
- * parse-packet.c (parse_mdc): New.
- (parse_encrypted): Fixed for the new proposal.
- * packet.h (PKT_MDC): New.
- * cipher.c (cipher_filter): Build the MDC packet here.
- * g10.c (main): Enable --force-mdc.
- * encr-data.c (mdc_decode_filter): Fixed for new MDC method
-
- * options.h(rfc2440): New.
- * g10.c (main): Changed the selected values for --openpgp to not include
- optional algorithms.
-
-Thu May 18 11:38:54 CEST 2000 Werner Koch <wk@openit.de>
-
- * keyedit.c (keyedit_menu): Add a keyword arg to the prompt.
-
- * status.c, status.h: Added 3 new status tokens.
- * status.c (do_get_from_fd): New.
- (cpr_enabled,cpr_get,cpr_get_hidden,cpr_kill_prompt,
- cpr_get_answer_is_yes,cpr_get_answer_yes_no_quit): Modified to work
- with the new function.
- * g10.c: Add new option --command-fd.
-
- * status.c (progress_cb): New.
- (set_status_fd): Register progress functions
-
-Fri May 12 14:01:20 CEST 2000 Werner Koch <wk@openit.de>
-
- * delkey.c (delete_key): Add 2 new status messages
- * status.c, status.h (STATUS_DELETE_PROBLEM): New.
-
- Fixed years of copyright in all source files.
-
-Mon May 1 17:08:14 CEST 2000 Werner Koch <wk@openit.de>
-
- * trustdb.c (propagate_validity): Fixed the bug that only one uid
- gets fully trusted even when all are signed by an ultimate key.
-
-Mon May 1 15:38:04 CEST 2000 Werner Koch <wk@openit.de>
-
- * getkey.c (key_byname): Always returned a defined context. Fixed
- a segv for invalid user id specifications. Reported by Walter Koch.
-
- * getkey.c (get_user_id): I18ned "no user id" string. By Walter.
-
- * pkclist.c (do_show_revocation_reason): Typo fixes.
- * helptext.c: Ditto.
-
- * armor.c (armor_filter): Fixed some CRLF issues. By Mike McEwan.
-
-Fri Apr 14 19:37:08 CEST 2000 Werner Koch <wk@openit.de>
-
- * pkclist.c (do_show_revocation_reason): New.
- (show_revocation_reason): New and called at various places.
-
- * g10.c (main): Fixed small typo.
-
- * pkclist.c (do_we_trust): Act on always_trust but not for revoked
- keys. Suggested by Chip Salzenberg.
-
- * g10.c: New option --lock-never.
-
- * ringedit.c (get_writable_keyblock_file): New.
- * keygen.c (do_generate_keypair): Use this instead of the hardwired one.
-
- * keygen.c (ask_user_id): Check that the email address is in the
- correct field. Suggested by Christian Kurz.
-
-Mon Apr 10 13:34:19 CEST 2000 Werner Koch <wk@openit.de>
-
- * keyedit.c (show_key_with_all_names): s/sbb/ssb/
-
-Tue Mar 28 14:26:58 CEST 2000 Werner Koch <wk@openit.de>
-
- * trustdb.c (verify_own_keys): Do not print warning about unprotected
- key when in quiet mode.
-
-Wed Mar 22 13:50:24 CET 2000 Werner Koch <wk@openit.de>
-
- * mainproc.c (print_userid): Do UTF8 conversion before printing.
- * import.c (import_one): Ditto.
- (import_secret_one): Ditto.
- (delete_inv_parts): Ditto.
-
-Thu Mar 16 16:20:23 CET 2000 Werner Koch <wk@openit.de>
-
- * keylist.c (print_key_data): Handle a NULL pk gracefully.
-
- * getkey.c (merge_one_pk_and_selfsig): Fixed silly code for
- getting the primary keys keyID but kept using the one from the
- subkey.
- * pubkey-enc.c (get_it): Print a note for expired subkeys.
-
- * getkey.c (has_expired): New.
- (subkeys_expiretime): New.
- (finish_lookup): Check for expired subkeys needed for encryption.
- (merge_keys_and_selfsig): Fixed expiration date merging for subkeys.
-
- * keylist.c (list_keyblock): Print expiration time for "sub".
- (list_one): Add missing merging for public keys.
- * mainproc.c (list_node): Ditto.
-
-2000-03-14 13:49:38 Werner Koch (wk@habibti.openit.de)
-
- * keygen.c (keyedit_menu): Do not allow to use certain commands
- while the secret key is selected.
-
-2000-03-09 12:53:09 Werner Koch (wk@habibti.openit.de)
-
- * keygen.c (ask_expire_interval): Movede parsig to ...
- (parse_expire_string): ... this new function. And some new control
- commands.
- (proc_parameter_file): Add expire date parsing.
- (do_generate_keypair): Allow the use of specified output files.
-
-2000-03-08 10:38:38 Werner Koch (wk@habibti.openit.de)
-
- * keygen.c (ask_algo): Removed is_v4 return value and the commented
- code to create Elg keys in a v3 packet. Removed the rounding
- of key sizes here.
- (do_create): Likewise removed arg v4_packet.
- (gen_elg): Likewise removed arg version. Now rounding keysizes here.
- (gen_dsa): Rounding keysize now here.
- (release_parameter_list): New
- (get_parameter*): New.
- (proc_parameter_file): New.
- (read_parameter_file): New.
- (generate_keypair): Splitted. Now uses read_parameter_file when in
- batch mode. Additional argument to specify a parameter file.
- (do_generate_keypair): Main bulk of above fucntion and uses the
- parameter list.
- (do_create): Don't print long notice in batch mode.
- * g10.c (main): Allow batched key generation.
-
-Thu Mar 2 15:37:46 CET 2000 Werner Koch <wk@gnupg.de>
-
- * pubkey-enc.c (get_it): Print a note about unknown cipher algos.
-
- * g10.c (opts): Add a note to the help listing about the man page
- and removed some options from the help listing.
-
- * keyedit.c (print_and_check_one_sig): Use a new function to truncate
- the output of the user ID. Suggested by Jan-Benedict Glaw.
-
-Wed Feb 23 10:07:57 CET 2000 Werner Koch <wk@gnupg.de>
-
- * helptext.c: typo fix.
-
-Thu Feb 17 13:39:32 CET 2000 Werner Koch <wk@gnupg.de>
-
- * revoke.c: Removed a bunch of commented code.
-
- * packet.h (SIGSUBPKT_REVOC_REASON): New.
- * build-packet.c (build_sig_subpkt): Support new sub packet.
- * parse-packet.c (parse_one_sig_subpkt): Ditto.
- (dump_sig_subpkt): Ditto.
- * revoke.c (ask_revocation_reason): New.
- (release_revocation_reason_info): New.
- (revocation_reason_build_cb): New.
- (gen_revoke): Ask for reason.
- * main.h (struct revocation_reason_info): Add declaration.
- * keyedit.c (menu_revsig): Add support for revocation reason.
- (menu_revkey): Ditto.
- (sign_uid_mk_attrib): Renamed to ...
- (sign_mk_attrib): ... this, made static and add support for reasons.
-
-Tue Feb 15 08:48:13 CET 2000 Werner Koch <wk@gnupg.de>
-
- * build-packet.c (build_packet): Fixed fixing of old comment packets.
-
- * import.c (import_keys): Fixed importing from stdin when called with
- nnames set to zero as it normally happens.
-
-Mon Feb 14 14:30:20 CET 2000 Werner Koch <wk@gnupg.de>
-
- * sig-check.c (check_key_signature2): Add new arg r_expired.
- (do_signature_check): New arg to pass it down to ...
- (do_check): New arg r-expire which is set when the signature
- has expired.
- * trustdb.c (check_sig_record): Set SIGF_EXPIRED flag and set
- the expiretime to zero so that thi signature will not be checked
- anymore.
-
-Fri Feb 11 17:44:40 CET 2000 Werner Koch <wk@gnupg.de>
-
- * g10.c (g10_exit): Update the random seed_file.
- (main): Set the random seed file. New option --no-random-seed-file.
-
-Thu Feb 10 17:39:44 CET 2000 Werner Koch <wk@gnupg.de>
-
- * keyedit.c (menu_expire): Fixed segv due to unitialized sub_pk.
- By Rémi.
-
-Thu Feb 10 11:39:41 CET 2000 Werner Koch <wk@gnupg.de>
-
- * keylist.c (list_keyblock): Don't print warnings in the middle of
- regulat output lines. By Rémi.
-
- * sig-check.c: Include options.h
-
-Wed Feb 9 15:33:44 CET 2000 Werner Koch <wk@gnupg.de>
-
- * gpg.c: New option --ignore-time-conflict
- * sig-check.c (do_check): Implemented this option.
- * trustdb.c (check_trust): Ditto.
- * sign.c (do_sign): Ditto.
- * keygen.c (generate_subkeypair): Ditto.
-
- * encode.c (encode_simple): use iobuf_cancel after open failure.
- Reported by Huy Le.
-
-Fri Jan 14 18:32:01 CET 2000 Werner Koch <wk@gnupg.de>
-
- * packet.h (STRING2KEY): Changed mode from byte to int.
- * parse-packet.c (parse_key): Add the special GNU protection stuff
- * build-packet.c (so_secret_key): Ditto.
- * seckey-cert.c (do_check): Ditto.
- * keyedit.c (change_passphrase): Ditto.
- * export.c (export_secsubkeys): New.
- (do_export_stream): Hack to export the primary key using mode 1001.
- * g10.c: New command --export-secret-subkeys
-
-Thu Jan 13 19:31:58 CET 2000 Werner Koch <wk@gnupg.de>
-
- * armor.c (is_armored): Check for 1-pass-sig packets. Reported by
- David Hallinan <hallinan@rtd.com>.
- (armor_filter): Replaced one LF by the LF macro. Reported by
- Wolfgang Redtenbacher.
-
-Wed Jan 5 11:51:17 CET 2000 Werner Koch <wk@gnupg.de>
-
- * g10.c (main): Reset new global flag opt.pgp2_workarounds
- when --openpgp is used.
- * mainproc.c (proc_plaintext): Do the PGP2,5 workarounds only
- when the global flag is set.
- (proc_tree): Ditto.
- * textfilter.c (copy_clearsig_text): Ditto.
- * armor.c (armor_filter): Ditto.
-
- * g10.c: New option --list-only
- * mainproc.c (proc_tree): Don't do it if opt.list_only is active.
- (proc_pubkey_enc): Implement option.
-
- * status.h, status.c ({BEGIN,END}_{EN,DE}CRYPTION): New.
- * cipher.c (cipher_filter): New status outputs.
- * mainproc.c (proc_encrypted): New status outputs.
-
-Fri Dec 31 14:08:15 CET 1999 Werner Koch <wk@gnupg.de>
-
- * armor.c (armor_filter): Made the "Comment:" header translatable.
-
- * hkp.c (hkp_import): Make sure that the program does not return
- success when there is a connection problem. Reported by Phillip Jones.
-
-Sun Dec 19 15:22:26 CET 1999 Werner Koch <wk@gnupg.de>
-
- * armor.c (LF): Use this new macro at all places where a line LF
- is needed. This way DOSish textfiles should be created when the
- input data is also in dos mode.
- * sign.c (LF): Ditto.
- * textfilter.c (LF): Ditto.
- (copy_clearsig_text): Disabled the forcing of CR,LF sequences
- for DOS systems.
-
- * plaintext.c (handle_plaintext): Fixes for line endings on DOS.
- and react on a LF in cleartext.
- * armor.c (fake_packet): Restore the original line ending after
- removing trailing spaces.
-
- * signal.c (got_fatal_signal): DOS fix.
-
-Thu Dec 16 10:07:58 CET 1999 Werner Koch <wk@gnupg.de>
-
- * mainproc.c (print_failed_pkenc): Fix for unknown algorithm.
- Found by fygrave@epr0.org.
-
-Thu Dec 9 10:31:05 CET 1999 Werner Koch <wk@gnupg.de>
-
- * hkp.c: i18n the strings.
-
-Sat Dec 4 15:32:20 CET 1999 Werner Koch <wk@gnupg.de>
-
- * trustdb.c (verify_key): Shortcut for ultimately trusted keys.
-
-Sat Dec 4 12:30:28 CET 1999 Werner Koch <wk@gnupg.de>
-
- * pkclist.c (build_pk_list): Validate the trust using the namehash
- if this one has been set by the key lookup.
-
- * g10.c: Add --delete-secret-key to the help page.
-
- * openfile.c (copy_options_file): Made static.
- (try_make_homedir): New.
- * ringedit.c (add_keyblock_resource): Use the try_make_hoemdir logic.
- * tdbio.c (tdbio_set_dbname): Likewise.
-
- * keygen.c (generate_user_id): Use m_alloc_clear() here. We should
- better use an allocation function specific to the user_id packet.
-
- * keygen.c (keygen_add_std_prefs): Changed symmetric preferences
- to include Blowfish again. This is due to it's better speed compared
- to CAST5.
-
- * g10.c (strusage): Print the home directory.
-
- * armor.c (armor_filter): Take action on the cancel control msg.
- * filter.h (armor_filter_context_t): Add cancel flag.
-
-Mon Nov 29 21:52:11 CET 1999 Werner Koch <wk@gnupg.de>
-
- * g10.c: New option --fast-list-mode ..
- * keylist.c (list_keyblock): .. and implemented.
- * mainproc.c (list_node): Ditto.
-
- * import.c (mark_non_selfsigned_uids_valid): Fixed the case that there
- is a uid without any packet following.
-
-Mon Nov 22 11:14:53 CET 1999 Werner Koch <wk@gnupg.de>
-
- * mainproc.c (proc_plaintext): Never enable the hash processing
- when skip_verify is active.
-
- * armor.c (parse_header_line): Stop parsing on a WS line too.
- Suggested by Aric Cyr.
-
- * tdbdump.c (HEXTOBIN): Changed the name of the argument, so that
- traditional cpp don't mess up the macros. Suggested by Jos Backus.
-
- * mainproc.c (list_node): Print the PK algo in the --with-colon mode.
- * keylist.c (list_keyblock): Ditto.
-
- * signal.c (got_fatal_signal): Found the reason why exit(8) did not
- work - it is better to set the disposition back to default before
- raising the signal. Print the notice on stderr always.
-
-Fri Nov 12 20:33:19 CET 1999 Werner Koch <wk@gnupg.de>
-
- * g10.c (make_username): Swapped the logic.
- * keylist.c (public_key_list): Now takes a STRLIST as arg and moved
- the creation ot this list to the caller, so that he can copy with
- UTF-conversion of user IDs. Changed all callers.
- (secret_key_list): Likewise.
-
- * getkey.c (get_user_id_string_native): New and ...
- * encode.c (write_pubkey_enc_from_list): ... use it here.
-
- * pubring.asc: Updated.
-
- * packet.h (PKT_PHOTO_ID): New.
- * parse-packet.c (parse_photo_id): New.
- * build-packet.c (do_user_id: Handle photo IDs.
- (build_packet): Change CTB for photo IDs
- * free-packet.c (free_user_id): Release memory used for photo IDs
- * sig-check.c (hash_uid_node): Handle photo IDs too.
- * trustdb.c (print_uid_from_keyblock): Hash photo ID.
- (make_uid_records): Ditto.
- * getkey.c (find_by_name): Ditto.
- * keyedit.c (show_prefs): Ditto.
- * keylist.c (list_keyblock): Ditto.
-
-Thu Oct 28 16:08:20 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * keygen.c (ask_expire_interval): Print a warning for systems
- with a signed 32 time_t if the exiration time is beyoind 2038.
-
-Fri Oct 8 20:40:50 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * ringedit.c (enum_keyblocks): The last fix way really stupid;
- reverted and set rt to Unknown.
-
-Fri Oct 8 20:32:01 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * ringedit.c (enum_keyblocks): Zero the entire kbpos out on open.
-
- * g10.c (oEntropyDLL): Removed option.
- (main): Made the warning on development versions more verbose.
-
- * g10.c (oHonorHttpProxy): New option.
- * hkp.c (hkp_ask_import,hkp_export): Implement this option.
- * options.skel: Enable this option for new installations
-
-Mon Oct 4 21:23:04 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * import.c (import_keys): Changed calling interface, adjusted caller.
- (import): Moved printing of stats out ...
- (print_stats): New. ... to here.
- (import_keys_stream): Call stats print here.
- (import_keys): Print stats as totals for all files.
-
- * tdbio.h (DIRF_NEWKEYS): New
- * tdbio.c (tdbio_dump_record): Print the new flag.
- * trustdb.c (check_trust_record): New arg sigs_only. Adapted all
- callers.
- (do_update_trust_record): Removed recheck arg and add a new sigs_only
- do we can later improve on the performance. Changed all callers too.
- (check_trustdb): Evalutate the new flag and add a status output.
- Do a check when the dir record has not been checked.
- (build_cert_tree): Evaluate the new flag.
- (check_trust): Ditto. Do a trust_record check, when the dir record
- is not marked as checked.
- (mark_fresh_keys): New.
- (clear_lid_table): New.
- (sync_trustdb): New.
- * import.c (import_keys): Call sync_trustdb() after processing.
- (import_keys_stream): Ditto.
- * tdbdump.c (import_ownertrust): Ditto.
-
- * import.c (import_revoke_cert): Notify the trust DB.
- (do_update_trust_record): Use |= to set the REVOKED bit and not &=;
- shame on me for this bad copy+paste introduced bug.
- (do_we_trust): Add trustmask to allow revoked key override to work.
- Chnaged are to allow return of a mofified trustlevel. Adapted the
- one caller.
-
- * g10.c: New options --emulate-3des-s2k-bug
- * passphrase.c (hash_passphrase): Implemented above.
-
- * mainproc.c (proc_tree): Check for standalone signatures.
- (do_check_sig): Print a notice for a standalone revocation
- (check_sig_and_print): Do not print an error for unchecked standalone
- revocations.
-
-Tue Sep 28 20:54:37 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * encode.c (encode_simple): Use new CTB when we don't have the
- length of the file. This is somewhat strange as the comment above
- indicates that this part is actually fixed for PGP 5 - maybe I simply
- lost the source line, tsss.
-
- * armor.c (armor_filter): Set a flag if no OpenPGP data has been found.
- * verify.c (verify_signatures): Add an error helptext.
-
-Thu Sep 23 19:24:30 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * openfile.c (open_outfile): Fixed the 8dot3 handling.
-
- * passphrase.c (passphrase_to_dek): Print uid using utf8 func.
- * delkey.c (delete_key): Ditto.
- * pkclist.c (show_paths,do_edit_ownertrust,do_we_trust): Ditto
- (do_we_trust_pre): Ditto.
- * trustdb.c (print_user_id,check_uidsigs): Ditto.
- * revoke.c (gen_revoke,ask_revoke_sig): Ditto.
-
-Thu Sep 23 09:52:58 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * verify.c (print_file_status): New.
- (verify_one_file): Moved status print to th new fnc. Add error status.
- * status.c, status.h (STATUS_FILE_ERROR): New
-
-Wed Sep 22 10:14:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * openfile.c (make_outfile_name): Use case-insenstive compare for
- DOS systems. Add ".pgp" to the list of know extensions.
- (open_outfile): For DOS systems try to replace the suffiy instead of
- appending it.
-
- * status.c, status.h: Add STATUS_FILE_{START,DONE}.
- * verify.c (verify_one_file): Emit these new stati.
-
- * sign.c (clearsign_file): Avoid duplicated Entries in the "Hash:"
- line. Those headers are now only _not_ printed when there are
- only old-style keys _and_ all hashs are MD5.
-
-Mon Sep 20 12:24:41 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * verify.c (verify_files, ferify_one_file): New.
- * g10.c: New command --verify-files
-
-Fri Sep 17 12:56:42 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c: Add UK spelling as alias for armor options ;-)
-
- * import.c (append_uid): Fixed a SEGV when there is no selfsig and
- no subkey.
- (merge_sigs): Ditto. Removed the assertion.
-
-Wed Sep 15 16:22:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c: New option --entropy-dll-name
-
-Mon Sep 13 10:51:29 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * signal.c (got_fatal_signal): Print message using write(2) and
- only for development versions.
-
-Mon Sep 6 19:59:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * tdbio.c (tdbio_set_dbname): Use mkdir macro
- * ringedit.c (add_keyblock_resource): Ditto.
-
-Fri Sep 3 10:04:45 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (build_pk_list): Skip keys set with --encrypt-to also
- when asking for a key.
-
- * plaintext.c (handle_plaintext): Make sure that we don't read a
- second EOF in the read loop for partial length packets.
-
- * mainproc.c (check_sig_and_print): print user ID as utf-8.
-
-Thu Sep 2 16:40:55 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * import.c (merge_blocks): First add new subkeys, then merge subkey
- certificates.
- (merge_sigs): Don't merge subkey signatures here.
-
-Wed Sep 1 15:30:44 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keygen.c (ask_expire_interval): Fixed bug related to cpr_xx (tnx
- Francis J. Lacoste).
-
-Tue Aug 31 17:20:44 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * plaintext.c (do_hash): Hash CR,LF for a single CR.
- (ask_for_detached_datafile): Changed arguments to be closer to
- those of hash_datafiles and cleanup the code a bit.
- * mainproc.c (proc_tree): Workaround for pgp5 textmode detached
- signatures. Changed behavior of asking for data file to be the same
- as with provided data files.
-
- * keylist.c (list_keyblock): Use UTF8 print functions.
-
-Mon Aug 30 20:38:33 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * import.c (chk_self_sigs): some s/log_error/log_info/ so that gpg
- does not return an error if a key has some invalid packets.
-
- * helptext.c: Fixed some typos and changed the way the
- translation works. The english text is now the keyword for gettext
- and not anymore the keyword supplied to the function. Done after
- some discussion with Walter who thinks this is much easier for the
- translators.
-
- * misc.c (disable_core_dumps): Don't do it for DOSish systems.
-
- * signal.c (signal_name): Bounds check on signum.
-
-Wed Aug 4 10:34:18 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pubring.asc: Updated.
-
- * pkclist.c (do_we_trust_pre,check_signatures_trust): Do not print
- the warning about --always_trust when --quiet is used.
-
- * pkclist.c (fpr_info): New and called at several places.
-
- * parse-packet.c (dump_sig_subpkt): List revocation key contents.
-
-Mon Jul 26 09:34:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (build_pk_list): Fixed typo in format string.
-
- * trustdb.c (create_shadow_dir): Don't translate the error string.
-
- * g10.c (main): Fixed spelling of user-id.
- * getkey.c (find_by_name_pk,find_by_name_sk,
- find_by_keyid,find_by_keyid_sk): Ditto and translate it.
- * import.c (mark_non_selfsigned_uids_valid,delete_inv_parts): Ditto.
-
-
-Mon Jul 26 01:01:39 CEST 1999 Michael Roth <mroth@nessie.de>
-
- * g10.c, options.h: New options --no-literal and --set-filesize
-
- * encode.c (encode_simple, encode_crypt): Support for the options
- --no-literal and --set-filesize.
-
- * sign.c (sign_file): ditto.
-
-Fri Jul 23 13:53:03 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * ringedit.c (enum_keyblocks): Removed annoying error message in cases
- when we have no keyring at all to enum.
-
- * getkey.c (classify_user_id): Rewrote to relax the recognition of
- keyIDs and fingerprints (Michael).
-
- * mainproc.c (check_sig_and_print): Print status NO_PUBKEY.
- (print_failed_pkenc): Print status NO_SECKEY.
-
- * import.c (mark_non_selfsigned_uids_valid): New.
- * g10.c: New option --allow-non-selfsigned-uid.
-
- * pkclist.c (print_fpr): New.
- (do_we_trust_pre): Print the fpr before asking whether to use the key
- anyway.
- (do_edit_ownertrust): Likewise.
-
-Thu Jul 22 20:03:03 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * ringedit.c (enum_keyblocks): Removed annoying error message in cases
- when we have no keyring at all to enum.
-
- * getkey.c (classify_user_id): Rewrote to relax the recognition of
- keyIDs and fingerprints (Michael).
-
- * mainproc.c (check_sig_and_print): Print status NO_PUBKEY.
- (print_failed_pkenc): Print status NO_SECKEY.
-
- * import.c (mark_non_selfsigned_uids_valid): New.
- * g10.c: New option --allow-non-selfsigned-uid.
-
-Thu Jul 15 10:15:35 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c: New options --disable-{cipher,pubkey}-algo.
-
-Wed Jul 14 19:42:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * status.h (STATUS_IMPORTED): New.
- * import.c (import): Print some status information (Holger Schurig).
-
- * g10.c (main): Make --no-greeting work again. Add a warning when
- --force-mds is used.
-
-Tue Jul 13 17:39:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (do_edit_ownertrust): Changed the way help works.
- (build_pk_list): Implemented default recipient stuff.
- * g10.c: New options --default-recipient[-self]
- (main): Suppress greeting in most cases, entering a passphrase or
- a missing value is not considered to be interactive use.
- Merged --print-md and --print-mds; the latter is now obsolete.
- Changed the way --gen-random works and documented it.
- Changed the way --gen-prime works and add a man entry.
- * g10.c (MAINTAINER_OPTIONS): Removed.
-
-Mon Jul 12 18:45:57 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keyedit.c (keyedit_menu): Add arg sign_mode and changed callers
- * g10.c (main): New command --lsign-key.
-
-Mon Jul 12 14:55:34 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mainproc.c (kidlist_item): New.
- (release_list): Release failed pk-enc-list.
- (print_failed_pkenc): New
- (proc_encrypted): Print info about failed PK enc.
-
- * openfile.c (make_outfile_name): s/error/info/
-
- * passphrase.c (passphrase_to_dek): Return an empty passphrase when
- in batch mode and don't make the warning message fatal
- * seckey-cert.c (check_secret_key): Try only once when in batch mode.
-
- * g10.c (make_username): New.
-
-Thu Jul 8 16:21:27 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * packet.h (PKT_ring_trust): New
- * parse-packet.c (parse_trust): Store trust value
- * build-packet (build_packet): Ignore ring trust packets.
- * mainproc.c (add_ring_trust): New.
- (list_node): Print "rtv" records.
- * g10.c: New option --with-fingerprint.
-
- * trustdb.c (verify_own_keys): Don't insert if we are dry running
- (check_trust): Ditto.
-
-Wed Jul 7 13:08:40 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Support for libtool.
-
- * keygen.c (ask_expire_interval): Hack to allow for an expire date.
-
- * trustdb.c (do_update_trust_record,update_trust_record): Splitted.
- (check_trust_record): New.
- (check_trust,build_cert_tree): Check the dir record as needed.
- (upd_pref_record): Removed.
- (make_pref_record): New.
- (propagate_validity): Stop as soon as we have enough validity.
-
- * tbdio.c (MAX_CACHE_ENTRIES_HARD): Increased the limit.
-
-
-Fri Jul 2 11:45:54 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c (g10_exit): Dump random stats.
-
- * sig-check.c (check_key_signature,check_key_signature2): Enhanced
- version and wrapper for old function.
- (do_signature_check,signature_check): Ditto.
-
-Thu Jul 1 12:47:31 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * keyedit.c (show_key_with_all_names): Print a notice for disabled keys.
- (enable_disable_keys): Add functionality
- * pkclist.c (edit_ownertrust): preserve disabled state.
- (build_pk_list): Skip disabled keys.
- * trustdb.c (upd_one_ownertrust): Ditto.
- (build_cert_tree): Mask the ownertrust.
- (trust_letter): Mask the value.
- (do_check): Take disabled flag into account.
-
- * passphrase.c (passphrase_to_dek): Add a pubkey_algo arg and changed
- all callers.
-
- * g10.c (utf8_strings): 2 new options.
-
- * trustdb.c (insert_trust_record_by_pk): New, replaces the next one.
- (insert_trust_record): Now takes a keyblock as arg. Changed all
- callers to use the appropritae function.
-
- * openfile.c (ask_outfile_name): New.
- * plaintext.c (handle_plaintext): Ask for filename if there is
- no valid syntax. Don't use fname varbatim but filter it.
-
-Tue Jun 29 21:44:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * trustdb.h (TRUST_FLAG_DISABLED): New.
-
- * status.c (USE_CAPABILITIES): Capabilities support (Remi).
-
- * tdbio.c : Added new fields to the DIR record.
- (tdbio_write_record): Fixed the update of the hash tables.
- (tdbio_delete_record): Drop the record from the hash tables.
- (drop_from_hashtbl): New.
-
- * status.c (cpr_get): Special online help mode.
- * helptext.c ("keyedit.cmd"): Removed.
- * keyedit.c (keyedit_menu): Use only help system.
- (enable_disable_key): New bit doies not yet work.
-
-Sat Jun 26 12:15:59 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * dearmor.c (enarmor_file): Fixed comment string.
- * tdbdump.c (export_ownertrust): Text fix.
- * tbio.c (tdbio_invalid): Ditto.
-
- * parse-packet.c (parse_key): Made temp buffer larger.
-
- * Makefile.am (install-data-local): Add missing backslashes
-
-Tue Jun 15 12:21:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c (main): Made iterated+salted the default S2K method.
-
- * Makefile.am (install-data-local): Use DESTDIR.
-
- * passphrase.c (passphrase_to_dek): Emit missing-passphrase while in
- batchmode.
-
- * parse-packet.c (parse_pubkeyenc): Fixed a SEGV.
-
-Mon Jun 14 21:18:54 CEST 1999 Michael Roth <mroth@nessie.de>
-
- * g10.c: New options --openpgp, --no-tty, --emit-version,
- --default-comment and --lock-multiple
-
-Thu Jun 10 14:18:23 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * free-packet.c (free_encrypted): Fixed EOF case (Remi).
- (free_plaintext): Ditto.
-
- * helptext.c (keyedit.delsig.unknown): New (Remi).
- * keyedit.c (print_and_check_one_sig): Add arg print_without_key and
- changed all callers to make use of it (Remi):
-
-Tue Jun 8 13:36:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keylist.c (print_key_data): New and called elsewhere.
- * g10.c: New option --with-key-data
-
-Wed Jun 2 14:17:19 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mainproc.c (proc_tree): Yet another bad hack to cope with
- broken pgp2 created detached messages in textmode.
-
-Tue Jun 1 16:01:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * openfile.c (make_outfile_name): New.
- * plaintext.c (handle_plaintext): Outputfile is now the inputfile
- without the suffix.
- * g10.c: New option --use-embedded-filename
-
-Mon May 31 19:41:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c (main): Fix for SHM init (Michael).
-
- * compress.c, encr-data.c, mdfilter.c,
- plaintext.c, free-packet.c: Speed patches (Rémi).
-
-Thu May 27 09:40:55 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * status.c (cpr_get_answer_yes_no_quit): New.
- * keyedit.c (menu_delsig): New.
- (check_all_keysigs): Splitted.
- (print_and_check_one_sig): New.
-
-Wed May 26 14:36:29 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * build-packet.c (build_sig_subpkt): Support large packets.
- * parse-packet.c (enum_sig_subpkt): Replaces parse_sig_subpkt.
- * mainproc.c (print_notation_data): Print all notation packets.
- * g10.c (add_notation_data): Add a way to specify the critical flag.
- (main): Add option --set-policy-url.
- (check_policy_url): Basic checks.
- * sign.c (mk_notation_and_policy): Replaces mk_notation.
-
- * parse-packet.c (can_handle_critical): Moved decision whether we can
- handle critical subpacket to an extra function.
-
-Tue May 25 19:50:32 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * sign.c (sign_file): Always use compression algo 1 for signed
- onyl file becuase we can´ be sure the the verifier supports other
- algorithms.
-
- * build-packet.c (build_sig_subpkt): Support for notation data.
- * sign.c (sign_file,clearsign_file,make_keysig_packet): Ditto.
- (mk_notation): New.
- * g10.c (add_notation_data): New and add option -N
- * mainproc.c (print_notation_data): New.
- (check_sig_and_print): Print any notation data of the signed text.
-
-Sun May 23 14:20:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (check_signatures_trust): Print a warning and return
- immediateley if opt.always_trust is true.
-
- * g10.c (main): Corrected handling of no-default-keyring
-
- * pkclist.c (algo_available): Disable Twofish until we have settled
- how to do the MDC.
-
- * hkp.c: Disable everything for mingw32
-
-Sat May 22 22:47:26 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mainproc.c (check_sig_and_print): Add sig creation time to the
- VALIDSIG status output. Add more info to the ERRSIG output.
- * sig-check.c (signature_check): Add sig time after epoch to SIG_ID.
-
- * import.c (import_one): Merge duplicate user IDs.
- (collapse_uids): New.
- * kbnode.c (move_kbnode): New.
- (remove_kbnode): New.
- * keyedit.c (keyedit_menu): Call collapse_uids.
-
- * g10.c: new option --logger-fd.
-
- * import.c: s/log_*_f/log_*/
-
-Thu May 20 14:04:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * misc.c (pull_in_libs): do the volatile only for gcc
-
- * sig-check (signature_check): Emit SIG_iD only for classes 0 and 1.
-
- * armor.c (armor_filter): Add detection of PGP2 created clearsigs.
- (fake_packet): A tab is not a WS for pgp2 - handle this.
- * textfilter.c (len_without_trailing_chars): New.
- (copy_clearsig_text): Add pgp2mode arg.
- * sign.c (clearsign_file): pass old_style to the above fnc.
-
-
-Wed May 19 16:04:30 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c: New option --interactive.
-
- * mainproc.c (proc_plaintext): Add workaround for pgp2 bug
- (do_check_sig): Ditto.
- (proc_tree): Ditto.
- * plaintext.c (do_hash): Ditto.
- (hash_datafiles): Ditto, add an arg, changed all callers.
- * mdfilter.c (md_filter): Add support for the alternate hash context.
-
-Mon May 17 21:54:43 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * parse-packet.c (parse_encrypted): Support for PKT_ENCRYPTED_MDC.
- * build-packet.c (do_encrypted_mdc): Ditto.
- * cipher.c (write_header): Add mdc hashing.
- (cipher_filter): write out the hash.
- * mainproc.c (do_proc_packets): Add PKT_ENCRYPTED_MDC.
- * encr-data.c (decrypt_data): Add mdc hashing.
- (mdc_decode_filter): New.
-
- * parse-packet.c (parse_sig_subpkt): Fixed stupid bug for subpkt
- length calculation
- (parse_signature): Fixed even more stupid bug.
-
-Sat May 8 19:28:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * build-packet.c (do_signature): Removed MDC hack.
- * encode.c (encode_crypt_mdc): Removed.
- * mainproc.c (do_check_sig): Removed MDC hack.
- (check_sig_and_print): Ditto.
- * parse-packet.c (parse_signature): Ditto.
- * sig-check.c (mdc_kludge_check): Ditto.
- * free-packte.c (copy_signature, free_seckey_enc): Ditto.
-
- * parse-packet.c (parse_signature,parse_key): Store data of
- unknown algorithms with mpi_set_opaque inseatd of the old
- faked data stuff.
- (read_rest): Removed.
- (read_rest2): Renamed to read_rest
- * build-packet.c (write_fake_data): Use mpi_get_opaque.
- * free-packet.c (cp_fake_data): Removed and cahnged all callers
- to use mpi_copy.
- (free_pubkey_enc,free_seckey_enc,release_public_key_parts,
- release_secret_key_parts): Use mpi_free for opaque data.
-
-Thu May 6 14:18:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * trustdb.c (check_trust): Check for revoked subkeys.
- * pkclist.c (do_we_trust): Handled revoked subkeys.
- (do_we_trust_pre): Ditto.
- (check_signatures_trust): Ditto.
-
- * build-packet.c (hash_public_key): Fix for ancient g10 keys.
-
- * mainproc.c (do_proc_packets): Return EOF if no data has been read.
- * g10.c (main): Catch errors for default operation.
-
-Thu Apr 29 12:29:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * sign.c (sign_file): Fixed hashing in case of no subpackets.
- (clearsign_file): Ditto.
- (make_keysig_packet): Ditto.
-
-Wed Apr 28 13:03:03 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keyedit.c (keyedit_menu): Add new command revkey.
- * (menu_revkey): New.
-
-
-Mon Apr 26 17:48:15 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * parse-packet.c (parse_signature): Add the MDC hack.
- * build-packet.c (do_signature): Ditto.
- * free-packet.c (free_seckey_enc,copy_signature,cmp_signatures): Ditto.
- * mainproc.c (do_check_sig): Ditto.
- * sig-check.c (mdc_kludge_check): New.
- * encode.c (encrypt_mdc_file): New.
-
- * keyedit.c (check_all_keysigs): List revocations.
- * (menu_revsig): New.
- * sign (make_keysig_packet): Support for class 0x30.
-
-Sun Apr 18 20:48:15 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (select_algo_from_prefs): Fixed the case that one key
- has no preferences (Remi Guyomarch).
-
- keylist.c (list_keyblock): ulti_hack to propagate trust to all uids.
-
-Sun Apr 18 10:11:28 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * seckey-cert.c (do_check): Use real IV instead of a 0 one, so that
- it works even if the length of the IV doesn't match the blocksize.
- Removed the save_iv stuff.
- (protect_secret_key): Likewise. Create the IV here.
- * packet.h (PKT_secret_key): Increased size of IV field and add a
- ivlen field.
- * parse-packet.c (parse_key): Use the len protect.ivlen.
- * build-packet.c (do_secret_key). Ditto.
-
- * getkey.c (key_byname): Close keyblocks.
-
- * Makefile.am (gpgm): Removed this
- * g10.c: Merged gpg and gpgm
-
- * import.c (import): Utilize option quiet.
- * tdbio.c (tdbio_set_dbname): Ditto.
- * ringedit.c (add_keyblock_resource,keyring_copy): Ditto.
-
- * keyedit.c (sign_uids): Add some batch support.
-
- * g10.c (main): add call to tty_batchmode.
-
-Fri Apr 9 12:26:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * status.c (write_status_text): Some more status codes.
- * passphrase_to_dek (passphrase_to_dek): add a status code.
- * seckey_cert.c (check_secret_key): Likewise.
-
- * encr-data.c (decrypt_data): Reverse the last changes
- * cipher.c (write_header): Ditto.
-
- * parse-packet.c (parse_key): Dropped kludge for ancient blowfish mode.
-
-Thu Apr 8 09:35:53 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mainproc.c (proc_encrypted): Add a new status output
- * passphrase.c (passphrase_to_dek): Ditto.
- * status.h status.c: Add new status tokens.
-
-Wed Apr 7 20:51:39 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * encr-data.c (decrypt_data): Fixes for 128 bit blocksize
- * cipher.c (write_header): Ditto.
- * seckey-cert.c (do_check): Ditto.
- (protect_secret_key). Ditto.
- * misc.c (print_cipher_algo_note): Twofish is now a standard algo.
-
- * keygen.c (do_create): Fixed spelling (Gaël Quéri)
- (ask_keysize): Only allow keysizes up to 4096
-
- * ringedit.c (add_keyblock_resource): chmod newly created secrings.
-
- * import.c (delete_inv_parts): Fixed accidently deleted subkeys.
-
-Tue Apr 6 19:58:12 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c: Removed duped include (John Bley)
- * mainproc.c: Ditto.
-
- * build-packet.c (hash_public_key): Fixed hashing of the header.
-
- * import.c (delete_inv_parts): Allow import of own non-exportable sigs.
-
-Sat Mar 20 13:59:47 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c (fake_packet): Fix for not not-dash-escaped
-
-Sat Mar 20 11:44:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c (main): Added command --recv-keys
- * hkp.c (hkp_import): New.
-
-Wed Mar 17 13:09:03 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * trustdb.c (check_trust): add new arg add_fnc and changed all callers.
- (do_check): Ditto.
- (verify_key): Ditto.
- (propagate_validity): Use the new add_fnc arg.
- (print_user_id): Add the FILE arg.
- (propagate_ownertrust): New.
- * pkclist.c (add_ownertrust_cb): New and changed the add_ownertrust
- logic.
-
- * getkey.c (get_keyblock_bylid): New.
- * trustdb.c (print_uid_from_keyblock): New.
- (dump_tn_tree_with_colons): New.
- (list_trust_path): Add colon print mode.
-
- * trustdb.c (insert_trust_record): Always use the primary key.
-
- * encode.c (encode_simple): Added text_mode filter (Rémi Guyomarch)
- (encode_crypt): Ditto.
-
- * mainproc.c (proc_pubkey_enc): Added status ENC_TO.
- * armor.c (armor_filter): Added status NODATA.
- * passphrase.c (passphrase_to_dek): Always print NEED_PASSPHRASE
- * seckey_cert.c (check_secret_key): Added BAD_PASS status.
-
- * g10.c (main): Set g10_opt_homedir.
-
-Sun Mar 14 19:34:36 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keygen.c (do_create): Changed wording of the note (Hugh Daniel)
-
-Thu Mar 11 16:39:46 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * tdbdump.c: New
-
- * trustdb.c (walk_sigrecs,do_list_sigs,list_sigs,
- list_records,list_trustdb,export_ownertrust,import_ownertrust): Moved
- to tdbdump.c
- (init_trustdb): renamed to setup_trustdb. Changed all callers.
- (do_init_trustdb): renamed to init_trustdb().
- * trustdb.c (die_invalid_db): replaced by tdbio_invalid.
- * tdbio.c (tdbio_invalid): New.
-
- * import.c (delete_inv_parts): Skip non exportable signatures.
- * keyedit.c (sign_uid_mk_attrib): New.
- (sign_uids): Add the local argument.
- (keyedit_menu): New "lsign" command.
- * trustdb.c (register_trusted_key): Removed this and all related stuff.
- * g10.c (oTrustedKey): Removed option.
-
- * tdbio.h (dir.valcheck): New trustdb field.
- * tdbio.c: Add support for this field
- (tdbio_read_modify_stamp): New.
- (tdbio_write_modify_stamp): New.
- * trustdb.c (do_check): Check against this field. Removed cache update.
- (verify_key): Add cache update.
- (upd_uid_record): Some functional changes.
- (upd_cert_record): Ditto
-
-Wed Mar 10 11:26:18 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keylist.c (list_keyblock): Fixed segv in uid. Print 'u' as
- validity of sks.
-
-Mon Mar 8 20:47:17 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * getkey.c (classify_user_id): Add new mode 12 (#<lid>).
-
- * seckey-cert.c (check_secret_key): replaced error by info.
-
- * trustdb.c (query_trust_info): Add another arg, changed all callers.
- (check_trust): Ditto.
- (do_check): Ditto.
- (verify_key): Handle namehash.
- * keylist.c (list_keyblock): print trust info for user ids.
-
- * sig-check.c (signature_check): Add sig-created to status output.
-
-Tue Mar 2 16:44:57 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * textfilter.c (copy_clearsig_text): New.
- (clearsign): Removed.
- * sign.c (clearsign_file): does not use textfiler anymore.
-
- * keygen.c (ask_user_id): print a note about the used charset.
-
-Tue Mar 2 10:38:42 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * sig-check.c (signature_check): sig-id now works for all algos.
-
- * armor.c (armor_filter): Fixed armor bypassing.
-
-Sun Feb 28 19:11:00 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keygen.c (ask_user_id): Don't change the case of email addresses.
- (has_invalid_email_chars): Adjusted.
-
- * keylist.c (list_one): Really list serect keys (Remi Guyomarch)
-
- * keyedit.c (menu_select_uid): Add some braces to make egcs happy.
- (menu_select_key): Ditto.
-
- * mainproc.c (do_proc_packets): List sym-enc packets (Remi Guyomarch)
-
-Fri Feb 26 17:55:41 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (build_pk_list): Return error if there are no recipients.
-
- * sig-check.c (signature_check): New signature id feature.
- * armor.c (make_radic64_string): New.
-
- * mainproc.c (proc_pubkey_enc): early check for seckey availability.
-
- * pkclist.c (do_we_trust_pre): print user id before asking.
-
- * ringedit.c (add_keyblock_resource,get_keyblock_handle): Cleaner
- handling of default resource.
-
-
-Thu Feb 25 18:47:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (algo_available): New.
- (select_algo_from_prefs): Check whether algo is available.
-
- * ringedit.c (keyring_copy): Take care of opt.dry_run.
- (do_gdbm_store): Ditto.
- * openfile.c (open_outfile). Ditto.
- (copy_options_file): Ditto.
- * trustdb.c (update_trustdb): Ditto.
- (clear_trust_checked_flag): Ditto.
- (update_trust_record): Ditto.
- (insert_trust_record): Ditto.
-
-Wed Feb 24 11:07:27 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * keylist.c (secret_key_list): Now really list the secret key.
-
- * trustdb.c (do_init_trustdb): New. Init is now deferred.
-
-Mon Feb 22 20:04:00 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * getkey.c (lookup_sk): Return G10ERR_NO_SECKEY and not x_PUBKEY.
-
-Fri Feb 19 15:49:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (select_algo_from_prefs): retrieve LID if not there.
-
- * armor.c (fake_packet): Replaced ugly lineending handling.
-
- * g10.c (oNoEncryptTo): New.
- * pkclist.c (build_pk_list): Implemented this option.
-
- * g10.c (main): Greeting is now printed to stderr and not to tty.
- Use add_to_strlist() instead of direct coding.
-
- * import.c (import): Use iobuf_push_filter2.
-
- * mainproc.c (check_sig_and_print): Print all user ids
- for good signatures.
- * getkey.c (get_pubkeyblock): New.
-
- * import.c (chk_self_sigs): Fixed SEGV for unbounded class 0x18 keys.
- (delete_inv_parts): Delete special marked packets.
-
-Tue Feb 16 14:10:02 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c (main): New option --encrypt-to
-
- * pkclist.c (build_pk_list): Implemented encrypt-to.
-
- * parse-packet.c (parse_user_id): Removed the hack to work with
- utf-8 strings.
-
- * g10.c (main): Install lockfile cleanup handler.
- * tdbio.c (cleanup): Removed: this is now handled by dotlock.
-
-Sat Feb 13 14:13:04 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * tdbio.c (tdbio_set_dbname): Init lockhandle for a new trustdb
-
-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
- lookup of multible user ids
- (get_pubkey_bynames): New.
- (get_seckey_bynames): New.
- (get_seckey_next): New.
- (get_seckey_end): New.
- * keylist.c (list_one): Use the new functions.
-
- * keylist.c (list_keyblock): add a newline for normal listings.
-
- * g10.c (--recipient): New option name to replace --remote-user
-
-
-Wed Jan 20 18:59:49 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * textfilter.c: Mostly rewritten
- * plaintext.c (handle_plaintext): Use now text_filter semantics.
-
-Tue Jan 19 19:34:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * export.c (export_pubkeys_stream): New.
- (do_export_stream): New.
- * g10.c (aSendKeys): New command.
- * hkp.c (hkp_export): New.
-
- * compress.c (do_uncompress): Hack for algo 1 and 1.1.3
-
-Sun Jan 17 11:04:33 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * textfilter.c (text_filter): Now uses iobuf_read_line().
- (read_line): Removed.
-
- * armor.c (trim_trailing_spaces): Removed and replaced
- by trim_trailing_ws from libutil
-
-Sat Jan 16 12:03:27 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * hkp.c (hkp_ask_import): Use only the short keyid
-
-Sat Jan 16 09:27:30 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * import.c (import_key_stream): New
- (import): New, moved most of import_keys here.
- * g10.c: New option --keyserver
- * mainproc.c (check_sig_and_print): Hook to import a pubkey.
-
- * pref.c pref.h : Removed
-
- * hkp.c hkp.h: New
-
-Wed Jan 13 14:10:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c (radix64_read): Print an error if a bad armor was detected.
-
-Wed Jan 13 12:49:36 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c (radix64_read): Now handles malformed armors produced
- by some buggy MUAs.
-
-Tue Jan 12 11:17:18 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * ringedit.c (find_keyblock_bysk): New.
-
- * skc_list.c (is_insecure): New.
- (build_sk_list): usage check for insecure keys.
-
- * import.c (chk_self_sigs): Add handling for subkeys.
- (delete_inv_parts): Skip unsigned subkeys
-
- * sig-check.c (do_check): Print info if the signature is older
- than the key.
- * keygen.c (generate_subkeypair): Fail on time warp.
- * sign.c (do_sign): Ditto.
-
-Sun Jan 10 15:10:02 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c (fake_packet): Fixed not-dash-escaped bug.
-
-Sat Jan 9 16:02:23 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * sig-check.c (do_check): Output time diff on error
-
- * status.c (STATUS_VALIDSIG): New.
- (is_status_enabled): New.
- * mainproc.c (check_sig_and_print): Issue that status message.
-
- * plaintext.c (special_md_putc): Removed
-
- * armor.c (armor_filter): print error for truncated lines.
-
- * free-packet.c (free_encrypted): Revomed call to set_block_mode.
- (free_plaintext): Ditto.
-
-Thu Jan 7 18:00:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (add_ownertrust): Fixed return value.
-
- * encr-data.c (decrypt_data): Disabled iobuf_set_limit and
- iobuf_pop_filter stuff.
- * compress.c (handle_compressed): Disabled iobuf_pop_filter.
-
- * packet.h (PKT_secret_key): Add is_primary flag.
- * parse-packet.c (parse_key): Set this flag.
- * passphrase.c (passphrase_to_dek): Kludge to print the primary
- keyid - changed the API: keyid must now hold 2 keyids.
- * getkey.c (get_primary_seckey): New.
- * seckey-cert.c (do_check): pass primary keyid to passphrase query
-
- * tbdio.c (open_db): removed the atexit
- (tdbio_set_dbname): and moved it to here.
-
- * armor.c: Rewrote large parts.
-
-Tue Dec 29 19:55:38 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * revoke.c (gen_revoke): Removed compression.
-
- * pkclist.c (do_we_trust_pre): special check for revoked keys
-
- * trustdb.c (update_trust_record): Fixed revoke flag.
-
-Tue Dec 29 14:41:47 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * misc.c (disable_core_dumps): Check for EINVAL (Atari)
-
- * getkey (merge_one_pk_and_selfsig): Fixed search of expiredate.
- (merge_keys_and_selfsig): Ditto.
-
- * free-packet.c (cmp_public_keys): cmp expire only for v3 packets
- (cmp_secret_keys): Ditto.
- (cmp_public_secret_key): Ditto.
-
-Wed Dec 23 17:12:24 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c (find_header): Reset not_dashed at every header
-
-Wed Dec 23 13:18:14 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * pkclist.c (add_ownertrust): Refresh validity values.
-
- * trustdb.c (enum_cert_paths_print): New arg refresh.
-
- * ringedit.c: Fixed problems fix keyrings
- * parse-packet.c (dbg_parse_packet): New debug functions.
-
- * getkey.c (getkey_disable_caches): New.
- * import.c (import_keys): Disable caches.
-
-Thu Dec 17 18:31:15 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * misc.c (trap_unaligned): Only for glibc 1
-
- * sign.c (write_dash_escaped): Now escapes "From " lines
- * g10.c: New option --escape-from-lines
-
- * trustdb.c (sort_tsl_list): New
- (list_trust_path): Now prints sorted list.
- (enum_cert_paths): Likewise.
- (enum_cert_paths_print): New.
- (print_paths): New printing format.
- * pkclist.c (add_ownertrust): New arg quit.
- (edit_ownertrust): New quit selection and does not query
- the recipients ownertrust anymore.
- (add_ownertrust): Print the ceritficate path.
-
-
-Mon Dec 14 21:18:49 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * parse-packet.c (parse_signature): Now checks for critical bit
- (parse_sig_subpkt): Splitted.
- (parse_one_sig_subpkt): New.
- * sig-check.c (do_check): handle critical bit.
-
-Sun Dec 13 14:10:56 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * pcklist.c (select_algo_from_prefs): Preferences should
- now work (lost the != ? )
-
-Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * ringedit.c (gdbm_store): Fix for inserts
-
- * g10.c (main): New option --export-all
- * export.c (export_pubkeys): New arg.
- (do_export): Now may skip old keys.
-
- * status.c: Minor patches for Sun's cc
-
- * keygen.c (ask_algo): Disabled v3 ElGamal choice, rearranged
- the numbers. Add a warning question when a sign+encrypt key
- is selected.
-
- * g10.c (do_not_use_RSA): Removed.
- * misc.c (print_pubkey_algo_note): New as replacement for the
- do_not_use_RSA() and chnaged all callers.
- (print_cipher_algo_note): New.
- (print_hash_algo_note): New.
-
- * cipher.c (write_header): Add a call to print_cipher_algo_note.
- * seckey-cert.c (protect_secret_key): Ditto
- * sign.c (do_sign): Add a call to print_digest_algo_note.
-
- * getkey.c (get_long_user_id_string): New.
- * mainproc.c (check_sig_and_print): Changed the format of the
- status output.
-
- * encrypt.c (write_pubkey_enc_from_list): print used symmetric cipher.
-
- * pkclist.c (do_we_trust): Changed a message.
-
-Wed Dec 9 13:41:06 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * misc.c (trap_unaligned) [ALPHA]: Only if UAC_SIGBUS is defined.
-
- * sign.c (write_dash_escaped): Add the forgotten patch by Brian Moore.
-
- * compress.c (do_uncompress): Fixed the inflating bug.
-
-
-Tue Dec 8 13:15:16 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * trustdb.c (upd_uid_record): Now uses the newest self-signature
- (insert_trust_record): Now calls update with recheck set to true.
- (register_trusted_key): New.
- (verify_own_keys): Enhanced by list of trusted keys.
-
- * g10.c (main): Print a warning when a devel version is used.
- (main): New option --trusted-key
-
- * import.c (merge_blocks): Fixed merging of new user ids and
- added merging of subkeys.
- (append_uid): Ditto.
- (merge_keysig): New.
- (append_key): New.
- * getkey.c (merge_one_pk_and_selfsig): Get the expiration time
- from the newest self-signature.
- (merge_keys_and_selfsig): Ditto.
-
- * free-packet.c (cmp_secret_key): New.
-
-
-Fri Nov 27 21:37:41 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10.c: New option --lock-once
- * tdbio.c (open_db): Add an atexit
- (cleanup): New.
- (tdbio_sync): Add locking.
- (tdbio_end_transaction): Ditto.
- (put_record_into_cache): Ditto.
- * ringedit.c (keyring_copy): Ditto.
- (cleanup): New.
- (add_keyblock_resource): Add an atexit.
-
-Fri Nov 27 15:30:24 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * armor.c (find_header): Another fix for clearsigs.
-
-Fri Nov 27 12:39:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * status.c (display_help): Removed.
- * helptext.c: New and removed the N_() from all cpr_gets.
-
-
-Fri Nov 20 16:54:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): New option --not-dash-escaped
- * sign.c (write_dashed_escaped): Ditto.
- * armor.c (find_header): Support for NotDashEscaped header.
-
- * getkey.c: print "disabled cache.." only if verbose is used.
-
-Thu Nov 19 07:17:31 1998 Werner Koch <werner.koch@guug.de>
-
- * parse-packet.c (dump_sig_subpkt): Fixed expire listing
- * getkey.c (merge_keys_and_selfsig): Fixed expire calculation.
- (merge_one_pk_and_selfsig): Ditto.
- * keyedit.c (menu_expire). Ditto.
- * keygen.c (keygen_add_key_expire): Ditto.
- (ask_expire_interval): New and changed all local function to use
- this instead.
- (keygen_add_key_expire): Opaque should now be a public key;
- changed all callers.
-
- * parse.packet.c (parse): use skip_rest to skip packets.
-
- * keyedit.c (keyedit_menu): New arg for cmdline cmds.
-
-Wed Nov 18 20:33:50 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (check_trustdb): Now rechecks all gived userids.
- (collect_paths): Some fixes.
- (upd_pref_records): Skips empty items, evaluate all items.
-
- * parse-packet.c (dump_sig_subpkt): Better listing of prefs.
- (skip_packet): Now knows about marker packet
-
- * g10.c: removed cmd "--edit-sig".
-
- * pubring.asc: Updated.
-
-Sat Nov 14 14:01:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Changed syntax of --list-trust-path
- * trustdb.c (list_trust_path): Replaced max_depth by
- opt.max_cert_depth
-
-Fri Nov 13 07:39:58 1998 Werner Koch <werner.koch@guug.de>
-
- * trustdb.c (collect_paths): Removed a warning message.
- (enum_trust_web): Removed.
- (enum_cert_paths): New.
- * pkclist.c (add_ownertrust): Changed to use enum_cert_paths.
- (edit_ownertrust): Now list ceritficates on request.
- (show_paths): New.
-
-Wed Nov 11 18:05:44 1998 Werner Koch <werner.koch@guug.de>
-
- * g10.c (main): New option --max-cert-depth
- * tdbio.h: add new fields to ver and dir record.
- * tdbio.c: read/write/dump of these fields.
- (tdbio_db_matches_options): New.
- * trustdb.c: replaced MAC_CERT_DEPTH by opt.max_cert_depth.
- (do_check): cache validity and changed other functions
- to reset the cached value.
-
- * keylist.c (list_one): Now lists the ownertrust.
- * mainproc.c (list_node): Ditto.
-
-Tue Nov 10 10:08:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (g10_exit): Now looks at the new g10_errors_seen.
- * mainproc.c (check_sig_and_print): Sets g10_errors_seen.
-
- * *.c : i18n many more strings.
-
- * ringedit.c (locate_keyblock_by_keyid): Add HAVE_LIBGDBM
- (locate_keyblock_by_fpr): Ditto.
-
- * g10.c (main): removed unsused "int errors".
- (main): Add new option --charset.
-
- * g10.c (main): special message for the unix newbie.
-
-Mon Nov 9 07:17:42 1998 Werner Koch <werner.koch@guug.de>
-
- * getkey.c (finish_lookup): Kludge to prefere algo 16.
-
- * trustdb.c (new_lid_table): Clear cached item.
-
- * status.c (cpr_get_utf8): New.
- * pkclist.c (build_pk_list): Uses this.
-
-Sun Nov 8 17:20:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mainproc.c (check_sig_and_print): Why did I use strlen()-1
- in the printf? - This truncated the TZ.
-
-Sat Nov 7 15:57:28 1998 me,,, (wk@tobold)
-
- * getkey.c (lookup): Changes to support a read_next.
- (get_pubkey): Fixed a memory leak.
-
- * keylist.c (list_one): Now lists all matching user IDs.
-
-Tue Nov 3 16:19:21 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (ask_user_id): Now converted to UTF-8
-
- * g10.c (main): Kludge for pgp clearsigs and textmode.
-
-Fri Oct 30 16:40:39 1998 me,,, (wk@tobold)
-
- * signal.c (block_all_signals): New.
- (unblock_all_signals): New
- * tdbio.c (tdbio_end_transaction): Now blocks all signals.
-
- * trustdb.c (new_lid_table): Changed the representation of the
- former local_lid_info stuff.
-
- * trustdb.c (update_trust_record): Reorganized the whole thing.
- * sig-check.c (check_key_signature): Now handles class 0x28
-
-
-Wed Oct 28 18:56:33 1998 me,,, (wk@tobold)
-
- * export.c (do_export): Takes care of the exportable sig flag.
-
-Tue Oct 27 14:53:04 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (update_trust_record): New "fast" parameter.
-
-Sun Oct 25 19:32:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * openfile.c (copy_options_File): New.
- * ringedit.c (add_keyblock_resource): Creates options file
- * tdbio.c (tdbio_set_dbname): Ditto.
-
-Sat Oct 24 14:10:53 1998 brian moore <bem@cmc.net>
-
- * mainproc.c (proc_pubkey_enc): Don't release the DEK
- (do_proc_packets): Ditto.
-
-Fri Oct 23 06:49:38 1998 me,,, (wk@tobold)
-
- * keyedit.c (keyedit_menu): Comments are now allowed
-
- * trustdb.c: Rewrote large parts.
-
-
-Thu Oct 22 15:56:45 1998 Michael Roth (mroth@nessie.de)
-
- * encode.c: (encode_simple): Only the plain filename without
- a given directory is stored in generated packets.
- (encode_crypt): Ditto.
-
- * sign.c: (sign_file) Ditto.
-
-
-Thu Oct 22 10:53:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (update_trust_record): Add new optional arg.
-
- * import.c (import_keys): Add statistics output
- * trustdb.c (update_trustdb): Ditto.
- (insert_trustdb): Ditto.
-
- * tdbio.c (tdbio_begin_transaction): New.
- (tdbio_end_transaction): New.
- (tdbio_cancel_transaction): New.
-
- * g10.c (main): New option --quit.
-
- * trustdb.c (check_hint_sig): No tests for user-id w/o sig.
- This caused an assert while checking the sigs.
-
- * trustdb.c (upd_sig_record): Splitted into several functions.
-
- * import.c (import_keys): New arg "fast".
- * g10.c (main): New command --fast-import.
-
-Wed Oct 21 18:19:36 1998 Michael Roth <mroth@nessie.de>
-
- * ringedit.c (add_keyblock_resource): Directory is now created.
- * tdbio.c (tdbio_set_dbname): New info message.
-
-Wed Oct 21 11:52:04 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (update_trustdb): released keyblock in loop.
-
- * keylist.c (list_block): New.
- (list_all): Changed to use list_block.
-
- * trustdb.c: Completed support for GDBM
-
- * sign.c (only_old_style): Changed the way force_v3 is handled
- (sign_file): Ditto.
- (clearsign_file): Ditto.
-
- * keygen.c (has_invalid_email_chars): Splitted into mailbox and
- host part.
-
- * keylist.c (list_one): Add a merge_keys_and_selfsig.
- * mainproc.c (proc_tree): Ditto.
-
-Sun Oct 18 11:49:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sign.c (only_old_style): Add option force_v3_sigs
- (sign_file): Fixed a bug in sig->version
- (clearsign_file): Ditto.
-
- * parse-packet.c (dump_sig_subpkt): New
-
- * keyedit.c (menu_expire): New.
- * free-packet.c (cmp_signatures): New
-
-
-Sat Oct 17 10:22:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c: changed output line length from 72 to 64.
-
- * keyedit.c (fix_keyblock): New.
-
-Fri Oct 16 10:24:47 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c: Rewrote most.
- * tdbio.c: Add cache and generalized hash tables.
-
- * options.h (ENABLE_COMMENT_PACKETS): New but undef'ed.
- * encode.c, sign.c, keygen.c: Disabled comment packets.
- * export.c (do_export): Comment packets are never exported,
- except for those in the secret keyring.
-
- * g10.c (main): Removed option do-no-export-rsa; should be
- be replaced by a secpial tool.
- * export.c (do_export): Removed the code for the above option.
-
- * armor.c (find_header): Support for new only_keyblocks.
- * import.c (import_keys): Only looks for keyblock armors.
-
- * packet.h: replaced valid_days by expiredate and changed all users.
- * build-packet.c (do_public_key): calculates valid-days
- (do_secret_key): Ditto.
- * parse-packet.c (parse_key): expiredate is calucated from the
- valid_period in v3 packets.
- * keyid.c (do_fingerprint_md): calculates valid_dates.
-
- * keygen.c (add_key_expire): fixed key expiration time for v4 packets.
-
- * armor.c (find_header): A LF in the first 28 bytes
- was skipped for non-armored data.
-
-Thu Oct 8 11:35:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (is_armored): Add test on old comment packets.
-
- * tdbio.c (tdbio_search_dir_bypk): fixed memory leak.
-
- * getkey.c: Changed the caching algorithms.
-
-Wed Oct 7 19:33:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * kbnodes.c (unused_nodes): New.
-
-Wed Oct 7 11:15:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keyedit.c (sign_uids): Fixed a problem with SK which could caused
- a save of an unprotected key.
- (menu_adduid): Ditto.
-
- * keyedit.c (keyedit_menu): Prefs are now correctly listed for
- new user ids.
-
- * trustdb.c (update_trust_record): New.
- (insert_trust_record): Now makes use of update_trust_record.
-
-Tue Oct 6 16:18:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (read_record): replaces most of the tdbio_read_records.
- (write_record): Ditto.
-
-Sat Oct 3 11:01:21 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (ask_alogo): enable ElGamal enc-only only for addmode.
-
-Wed Sep 30 10:15:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * import.c (import_one): Fixed update of wrong keyblock.
-
-Tue Sep 29 08:32:08 1998 me,,, (wk@tobold)
-
- * mainproc.c (proc_plaintext): Display note for special filename.
- * plaintext.c (handle_plaintext): Suppress output of special file.
-
-Mon Sep 28 12:57:12 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (verify_own_keys): Add warning if a key is not protected.
-
- * passphrase (hash_passphrase): Fixed iterated+salted mode and
- setup for keysizes > hashsize.
-
- * g10.c (main): New options: --s2k-{cipher,digest,mode}.
-
-Fri Sep 25 09:34:23 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c: Chnaged some help texts.
-
-Tue Sep 22 19:34:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * passphrase.c (read_passphrase_from_fd): fixed bug for long
- passphrases.
-
-Mon Sep 21 11:28:05 1998 Werner Koch (wk@(none))
-
- * getkey.c (lookup): Add code to use the sub key if the primary one
- does not match the usage.
-
- * armor.c (armor_filter): New error message: no valid data found.
- (radix64_read): Changes to support multiple messages.
- (i18n.h): New.
- * mainproc.c (add_onepass_sig): bug fix.
-
-Mon Sep 21 08:03:16 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * pkclist.c (do_we_trust): Add keyid to most messages.
-
- * passphrase.c (read_passphrase_from_fd): New.
- (have_static_passphrase): New
- (get_passphrase_fd): Removed.
- (set_passphrase_fd): Removed.
- * g10.c (main): passphrase is now read here.
-
- * keyedit.c (keyedit_menu): "help" texts should now translate fine.
-
-Mon Sep 21 06:40:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * encode.c (encode_simple): Now disables compression
- when --rfc1991 is used.
- (encode_crypt): Ditto.
-
-Fri Sep 18 16:50:32 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * getkey.c (merge_key_and_selfsig): New.
-
-Fri Sep 18 10:20:11 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * pkclist.c (select_algo_from_prefs): Removed 3DES kludge.
-
- * seskey.c (make_session_key): Fixed SERIOUS bug introduced
- by adding the weak key detection code.
-
- * sign.c (sign_file): Changed aremor header in certain cases.
-
-Tue Sep 15 17:52:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mainproc.c (check_sig_and_print): Replaced ascime by asctimestamp.
-
-Mon Sep 14 11:40:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seskey.c (make_session_key): Now detects weak keys.
-
- * trustdb (clear_trust_checked_flag): New.
-
- * plaintext.c (handle_plaintext): Does no anymore suppress CR from
- cleartext signed messages.
-
-Sun Sep 13 12:54:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (insert_trust_record): Fixed a stupid bug in the free
- liunked list loops.
-
-Sat Sep 12 15:49:16 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * status.c (remove_shmid): New.
- (init_shm_comprocess): Now sets permission to the real uid.
-
-Wed Sep 9 11:15:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h (PKT_pubkey_enc): New flah throw_keyid, and add logic to
- implement it.
- * g10.c (main): New Option --throw-keyid
-
- * getkey.c (enum_secret_keys): Add new ar and changed all callers.
-
-Tue Sep 8 20:04:09 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * delkey.c (delete_key): Moved from keyedit.c.
-
-Mon Sep 7 16:37:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * build-packet.c (calc_length_header): New arg new_ctb to correctly
- calculate the length of new style packets.
-
- * armor.c (is_armored): Checks for symkey_enc packets.
-
- * pkclist.c (select_algo_from_prefs): 3DEs substitute is now CAST5.
-
-Tue Aug 11 17:54:50 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * build-packet.c (do_secret_key): Fixed handling of old keys.
-
- * getkey.c (compare_name): Fixed exact and email matching
-
- * openfile.c (open_outfile): Changed arguments and all callers.
-
-Tue Aug 11 09:14:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * encode.c (encode_simple): Applied option set-filename and comment.
- (encode_crypt): Ditto.
- * sign.c (sign_file): Ditto.
- * armor.c (armor_filter): Applied option comment.
-
- * encode.c (encode_crypt): Moved init_packet to the begin.
- (encode_simple): add an init_packet().
-
- * comment (write_comment): Now enforces a hash sign as the 1st byte.
-
- * import.c (import_one): Add explanation for "no user ids".
-
- * compress.c (do_uncompress): Applied Brian Warner's patch to support
- zlib 1.1.3 etc.
-
- * trustdb.c (check_trust): Fixed a problem after inserting new keys.
-
- * getkey (lookup): do not return the primary key if usage is given
- (lookup_sk): Ditto and take usage into account.
-
- * status.c (cpr_get_answer_is_yes): add display_help.
-
-Mon Aug 10 10:11:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * getkey.c (lookup_sk): Now always returns the primary if arg
- primary is true.
- (lookup): Likewise.
- (get_pubkey_byname): Now returns the primary key
- (get_seckey_byname): Ditto.
-
-
-Mon Aug 10 08:34:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keyid.c (pubkey_letter): ELG_E is now a small g.
-
-Sat Aug 8 17:26:12 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * openfile (overwrite_filep): Changed semantics and all callers.
-
-Sat Aug 8 12:17:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * status.c (display_help): New.
-
-Thu Aug 6 16:30:41 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * seskey.c (encode_session_key): Now uses get_random_bits().
-
-Thu Aug 6 07:34:56 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * ringedit.c (keyring_copy): No more backupfiles for
- secret keyrings and add additional warning in case of
- a failed secret keyring operation.
-
-Wed Aug 5 11:54:37 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (check_opts): Moved to main. Changed def_cipher_algo
- semantics and chnaged all users.
-
- * pubkey-enc.c (get_sssion_key): New informational output
- about preferences.
-
- * parse-packet.c (parse_symkeyenc): Fixed salted+iterated S2K
- (parse_key): Ditto.
- * build-packet.c (do_secret_key): Ditto.
- (do_symkey_enc): Ditto.
-
-Tue Aug 4 08:59:10 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * getkey.c (enum_secret_keys): Now returns only primary keys.
-
- * getkey (lookup): Now sets the new namehash field.
-
- * parse-packet.c (parse_sig_subpkt2): New.
-
- * sign.c (sign_file): one-pass sigs are now emiited reverse.
- Preference data is considered when selecting the compress algo.
-
-Wed Jul 29 12:53:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * free-packet.c (copy_signature): New.
-
- * keygen.c (generate_subkeypair): rewritten
- * g10.c (aKeyadd): Removed option --add-key
-
-Mon Jul 27 10:37:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seckey-cert.c (do_check): Additional check on cipher blocksize.
- (protect_secret_key): Ditto.
- * encr-data.c: Support for other blocksizes.
- * cipher.c (write_header): Ditto.
-
-Fri Jul 24 16:47:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * kbnode.c (insert_kbnode): Changed semantics and all callers.
- * keyedit.c : More or less a complete rewrite
-
-Wed Jul 22 17:10:04 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * build-packet.c (write_sign_packet_header): New.
-
-Tue Jul 21 14:37:09 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * import.c (import_one): Now creates a trustdb record.
-
- * g10.c (main): New command --check-trustdb
-
-Mon Jul 20 11:15:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * genkey.c (generate_keypair): Default key is now DSA with
- encryption only ElGamal subkey.
-
-Thu Jul 16 10:58:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keyid.c (keyid_from_fingerprint): New.
- * getkey.c (get_pubkey_byfprint): New.
-
-Tue Jul 14 18:09:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keyid.c (fingerprint_from_pk): Add argument and changed all callers.
- (fingerprint_from_sk): Ditto.
-
-Tue Jul 14 10:10:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * plaintext.c (handle_plaintext): Now returns create error if
- the file could not be created or the user responded not to overwrite
- the file.
- * mainproc.c (proc_plaintext): Tries again if the file could not
- be created to check the signature without output.
-
- * misc.c (disable_core_dumps): New.
- * g10.c (main): disable coredumps for gpg
-
- * g10.c (MAINTAINER_OPTIONS): New to disable some options
-
-Mon Jul 13 16:47:54 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * plaintext.c (hash_datafiles): New arg for better support of
- detached sigs. Changed all callers.
- * mainproc.c (proc_signature_packets): Ditto.
-
- * g10.c (main): New option "compress-sigs"
- * sig.c (sign_file): detached signatures are not anymore compressed
- unless the option --compress-sigs is used.
-
-Thu Jul 9 19:54:54 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c: Fixes to allow zero length cleartext signatures
-
-Thu Jul 9 14:52:47 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (build_list): Now drops setuid.
- (main): Changed the way keyrings and algorithms are registered .
-
-Wed Jul 8 14:17:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h (PKT_public_key): Add field keyid.
- * parse-packet.c (parse_key): Reset the above field.
- * keyid.c (keyid_from_pk): Use above field as cache.
-
- * tdbio.c, tdbio.h: New
- * trustdb.c: Moved some functions to tdbio.c.
- (print_keyid): New.
-
- * pkclist.c (check_signatures_trust): New.
-
-Wed Jul 8 10:45:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * plaintext.c (special_md_putc): New.
- (handle_plaintext): add clearsig argument
- * mainproc.c (proc_plaintext): detection of clearsig
- * sign.c (write_dased_escaped): Changed clearsig format
-
-Tue Jul 7 18:56:19 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (find_header): Now makes sure that there is only one
- empty line for clearsigs, as this is what OP now says.
-
-Mon Jul 6 13:09:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): New option default-secret-key
- * getkey.c (get_seckey_byname): support for this option.
-
-Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * getkey.c (add_keyring): Keyrings are now added to end of the
- list of keyrings. The first added keyringwill be created.
- (add_secret_keyring): Likewise.
-
- * ringedit.c (add_keyblock_resource): Files are created here.
-
- * g10.c (aNOP): Removed
-
- * getkey.c (lookup): Add checking of usage for name lookups
- * packet.h (pubkey_usage): Add a field which may be used to store
- usage capabilities.
- * pkclist.c (build_pk_list): getkey now called with usage arg.
- * skclist.c (build_sk_list): Ditto.
-
- * sign.c (clearsign_file): Fixed "Hash:" headers
-
-Sat Jul 4 13:33:31 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (list_ownertrust): New.
- * g10.c (aListOwnerTrust): New.
-
- * g10.c (def_pubkey_algo): Removed.
-
- * trustdb.c (verify_private_data): Removed and also the call to it.
- (sign_private_data): Removed.
-
-Fri Jul 3 13:26:10 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (aEditKey): was aEditSig. Changed usage msg.
-
- * keyedit.c: Done some i18n stuff.
-
- * g10.c (do_not_use_RSA): New.
- * sign.c (do_sign): Add call to above function.
- * encode.c (write_pubkey_enc_from_list): Ditto.
-
-Thu Jul 2 21:01:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c: Now is able sto store data of unknown
- algorithms.
- * free-packet.c: Support for this.
- * build-packet.c: Can write data of packet with unknown algos.
-
-Thu Jul 2 11:46:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c (parse): fixed 4 byte length header
-
-Wed Jul 1 12:36:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h (new_ctb): New field for some packets
- * build-packet.c (build_packet): Support for new_ctb
- * parse-packet.c (parse): Ditto.
-
-Mon Jun 29 12:54:45 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h: changed all "_cert" to "_key", "subcert" to "subkey".
-
- * free-packet.c (free_packet): Removed memory leak for subkeys.
-
-Sun Jun 28 18:32:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * import.c (import_keys): Renamed from import_pubkeys.
- (import_secret_one): New.
-
- * g10.c (aExportSecret): New.
-
- * export.c (export_seckeys): New.
-
- * parse-packet.c (parse_certificate): Cleaned up.
- (parse_packet): Trust packets are now considered as unknown.
- (parse_pubkey_warning): New.
-
-Fri Jun 26 10:37:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (has_invalid_email_chars): New.
-
-Wed Jun 24 16:40:22 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (armor_filter): Now creates valid onepass_sig packets
- with all detected hash algorithms.
- * mainproc.c (proc_plaintext): Now uses the hash algos as specified
- in the onepass_sig packets (if there are any)
-
-Mon Jun 22 11:54:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * plaintext.c (handle_plaintext): add arg to disable outout
- * mainproc.c (proc_plaintext): disable output when in sigs_only mode.
-
-Thu Jun 18 13:17:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c: Removed all rsa packet stuff, chnaged defaults
- for key generation.
-
-Sun Jun 14 21:28:31 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c (checksum_u16): Fixed a stupid bug which caused a
- wrong checksum calculation for the secret key protection and
- add a backward compatibility option.
- * g10.c (main): Add option --emulate-checksum-bug.
-
-Thu Jun 11 13:26:44 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h: Major changes to the structure of public key material
- which is now stored in an array and not anaymore in a union of
- algorithm specific structures. These is needed to make the system
- more extendable and makes a lot of stuff much simpler. Changed
- all over the system.
-
- * dsa.c, rsa.c, elg.c: Removed.
-
-Wed Jun 10 07:22:02 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * g10.c ("load-extension"): New option.
-
-Mon Jun 8 22:23:37 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seckey-cert.c (do_check): Removed cipher constants
- (protect_secret_key): Ditto.
-
-Fri May 29 10:00:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (query_trust_info): New.
- * keylist.c (list_one): Add output of trust info
- * mainproc (list_node): ditto.
- * g10.c (main): full trustdb init if -with-colons and any of the
- key list modes.
-
-Thu May 28 10:34:42 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * status.c (STATUS_RSA_OR_IDEA): New.
- * sig-check.c (check_signature): Output special status message.
- * pubkey-enc.c (get_session_key): Ditto.
-
- * mainproc.c (check_sig_and_print): Changed format of output.
- * passpharse.c (passphrase_to_dek): Likewise.
-
-Wed May 27 13:46:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (aListSecretKeys): New option --list-secret-keys
- * keylist.c (std_key_list): Renamed to public_key_list.
- (secret_key_list): New
- (list_one, list_all): Add support for secret keys.
- * getkey.c (get_secret_keyring): New.
- * mainproc.c (list_node): Add option --with-colons for secret keys
-
- * sig-check.c (check_key_signature): detection of selfsigs
- * mainproc.c (list_node): fixed listing.
-
- * g10.c (aListSecretKeys): New option --always-trust
- * pkclist.c (do_we_trust): Override per option added
-
- * status.c (write_status_text): Add a prefix to every output line.
-
-Wed May 27 07:49:21 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10 (--compress-keys): New.
- * options.h (compress_keys): New.
- * export.c (export_pubkeys): Only compresses with the new option.
-
-Tue May 26 11:24:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * passphrase.c (get_last_passphrase): New
- (set_next_passphrase): New.
- (passphrase_to_dek): add support for the above functions.
- * keyedit.c (make_keysig_packet): Add sigclass 0x18,
- changed all callers due to a new argument.
- * keygen.c (write_keybinding): New
- (generate_subkeypair): Add functionality
- (ask_algo, ask_keysize, ask_valid_days): Broke out of generate_keypair
- (ask_user_id, ask_passphrase): Ditto.
-
-Thu May 21 11:26:13 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c,gpgd.c (main): Does now return an int, so that egcs does
- not complain.
-
- * armor.c (fake_packet): Removed erro message and add a noticed
- that this part should be fixed.
-
- * sign.c (sign_file): Compression now comes in front of encryption.
- * encode.c (encode_simple): Ditto.
- (encode_crypt): Ditto.
-
-Tue May 19 16:18:19 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (fake_packet): Changed assertion to log_error
-
-Sat May 16 16:02:06 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * build-packet.c (build_packet): Add SUBKEY packets.
-
-Fri May 15 17:57:23 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sign.c (hash_for): New and used in all places here.
- * main.h (DEFAULT_): new macros.
- * g10.c (opt.def_digest_algo): Now set to 0
-
- * compress.c (init_compress): Add support for algo 1
- * options.h (def_compress_algo): New
- * g10.c (main): New option --compress-algo
-
-Fri May 15 13:23:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (print_mds): New feature to print only one hash,
- chnaged formatting.
-
-Thu May 14 15:36:24 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c (trap_unaligned) [__alpha__]: New
- * g10.c (trap_unaligned): Add call to this to track down SIGBUS
- on Alphas (to avoid the slow emulation code).
-
-Wed May 13 11:48:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * build-packet.c (do_signature): Support for v4 pakets.
- * keyedit.c (make_keysig_packet): Ditto.
- * build-packet.c (build_sig_subpkt_from_sig): New.
- (build_sig_subpkt): New.
-
- * elg.c (g10_elg_sign): removed keyid_from_skc.
- * dsa.c (g10_dsa_sign): Ditto.
- * rsa.c (g10_rsa_sign): Ditto.
- * keyedit.c (make_keysig_packet): Add call to keyid_from_skc
-
- * sign.c (clearsign_file): Support for v4 signatures.
- (sign_file): Ditto.
-
-Wed May 6 09:31:24 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c (do_parse): add support for 5 byte length leader.
- (parse_subpkt): Ditto.
- * build-packet.c (write_new_header): Ditto.
-
- * packet.h (SIGSUBPKT_): New constants.
- * parse-packet.c (parse_sig_subpkt): Changed name, made global,
- and arg to return packet length, chnaged all callers
-
-
-Tue May 5 22:11:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (gen_dsa): New.
- * build_packet.c (do_secret_cert): Support for DSA
-
-Mon May 4 19:01:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * compress.c: doubled buffer sizes
- * parse-packet.c (do_plaintext): now uses iobuf_read/write.
-
-Mon May 4 09:35:53 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seskey.c (encode_md_value): Add optional argument hash_algo,
- changed all callers.
-
- * passphrase.c (make_dek_from_passphrase): Removed
- * (get_passhrase_hash): Changed name to passphrase_to_dek, add arg,
- changed all callers.
-
- * all: Introduced the new ELG identifier and added support for the
- encryption only one (which is okay to use by GNUPG for signatures).
-
-Sun May 3 17:50:26 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h (PKT_OLD_COMMENT): New name for type 16.
- * parse-packet.c (parse_comment): Now uses type 61
-
-Fri May 1 12:44:39 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * packet.h (count): Chnaged s2k count from byte to u32.
- * seckey-cert.c (do_check): Changed s2k algo 3 to 4, changed
- reading of count.
- * build-packet.c (do_secret_cert): ditto.
- * parse-packet.c (parse_certificate): ditto.
-
- * parse-packet.c (parse_symkeyenc): New.
- * build-packet.c (do_symkey_enc): New.
-
-Thu Apr 30 16:33:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sign.c (clearsign_file): Fixed "Hash: " armor line.
-
-Tue Apr 28 14:27:42 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c (parse_subpkt): Some new types.
-
-Mon Apr 27 12:53:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Add option --skip-verify.
- * mainproc.c (check_sig_and_print): Ditto.
-
- * g10.c (print_mds): Add output for Tiger.
-
- * sign.c (sign_file): Now uses partial length headers if used
- in canonical textmode (kludge to fix a bug).
-
- * parse-packet.c (parse_certificate): Changed BLOWFISH id.
- * pubkey-enc.c (get_session_key): Ditto.
- * seskey.c (make_session_key): Ditto.
- * seckey-cert.c (protect_secret_key,do_check): Add BLOWFISH160.
-
-Fri Apr 24 17:38:48 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * sig-check.c (check_key_signature): Add sig-class 0x14..0x17
- * keyedit.c (sign-key): Some changes to start with support of
- the above new sig-classes.
-
-Wed Apr 22 09:01:57 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * getkey.c (compare_name): add email matching
-
-Tue Apr 21 16:17:12 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * armor.c (armor_filter): fixed missing last LF before CSUM.
-
-Thu Apr 9 11:35:22 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seckey-cert.c (do_check): New; combines all the check functions
- into one.
-
- * sign.c: removed all key management functions
- * keyedit.c: New.
-
-Thu Apr 9 09:49:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * import.c (chk_self_sigs): Changed an error message.
-
-Wed Apr 8 16:19:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * packet.h: packet structs now uses structs from the pubkey,
- removed all copy operations from packet to pubkey structs.
-
-Wed Apr 8 13:40:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (verify_own_certs): Fixed "public key not found".
-
- * getkey.c (key_byname): New, combines public and secret key search.
-
- * pkclist.c (build_pkc_list): Add new arg usage, changed all callers.
- * skclist.c (build_skc_list): Likewise.
-
- * ringedit.c (find_keyblock, keyring_search2): Removed.
-
-Wed Apr 8 09:47:21 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sig-check.c (do_check): Applied small fix from Ulf Möller.
-
-Tue Apr 7 19:28:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c, encr-data.c, seckey-cert.c: Now uses cipher_xxxx
- functions instead of blowfish_xxx or cast_xxx
-
-Tue Apr 7 11:04:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (g10maint.o): Changed the way it is created.
-
-Mon Apr 6 11:17:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * misc.c: New.
- * keygen.c (checksum,checksum_u16,checksum_mpi): Moved to misc.c
- * seckey-cert.c: Kludge for wrong ELG checksum implementation.
-
-Sat Apr 4 20:07:01 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.c (cipher_filter): Support for CAST5
- * encr-data.c (decode_filter): Ditto.
- (decrypt_data): Ditto.
- * seskey.c (make_session_key): Ditto.
- * seckey-cert.c (check_elg, check_dsa): Ditto,
- (protect_secret_key): Ditto.
- * pubkey-enc.c (get_session_key): Ditto.
- * passphrase.c (hash_passphrase): Ditto.
-
-Thu Apr 2 20:22:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * gpgd.c: New
-
-Thu Apr 2 10:38:16 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (generate_keypair): Add valid_days stuff.
- * trustdb.c (check_trust): Add check for valid_days.
-
-Wed Apr 1 16:15:58 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (generate_keypair): Addional question whether the
- selected large keysize is really needed.
-
-Wed Apr 1 15:56:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * seckey-cert.c (protect_secret_key): merged protect_xxx to here.
-
-Wed Apr 1 10:34:46 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (g10maint.c): Changed creation rule, so that it works
- on FreeBSD (missing CFLAGS).
-
- * parse-packet.c (parse_subkey): Removed.
-
-Thu Mar 19 15:22:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ringedit.c (keyring_enum): Fixed problem with reading too
- many packets. Add support to read secret keyrings.
-
- * getkey.c (scan_keyring): Removed
- (lookup): New to replace scan_keyring.
- (scan_secret_keyring): Removed.
- (lookup_skc): New.
-
-Wed Mar 18 11:47:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ringedit.c (enum_keyblocks): New read mode 11.
-
- * keyid.c (elg_fingerprint_md): New and changed all other functions
- to call this if the packet version is 4 or above.
-
-Tue Mar 17 20:46:16 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c (parse_certificate): Add listing support for subkeys.
-
-Tue Mar 17 20:32:22 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (is_armored): Allow marker packet.
-
-Thu Mar 12 13:36:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (check_trust): Checks timestamp of pubkey.
- * sig-check. (do_check): Compares timestamps.
-
-Tue Mar 10 17:01:56 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Add call to init_signals.
- * signal.c: New.
-
-Mon Mar 9 12:43:42 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * dsa.c: New
- * packet.h, free-packet.c, parse-packet.c : Add support for DSA
- * sig-check.c, getkey.c, keyid.c, ringedit.c: Ditto.
- * seckey-cert.c: Ditto.
-
- * packet.h : Moved .digest_algo of signature packets to outer
- structure. Changed all references
-
-Sun Mar 8 13:06:42 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * openfile.c : Support for stdout filename "-".
-
- * mainproc.c (check_sig_and_print): Enhanced status output:
- * status.c (write_status_text): New.
-
-Fri Mar 6 16:10:54 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * kbnode.c (clone_kbnode): Fixed private_flag.
-
- * mainproc.c (list_node): Output of string "Revoked" as user-id.
-
-Fri Mar 6 14:26:39 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Add userids to "-kv" and cleaned up this stuff.
-
-Fri Mar 6 12:45:58 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Changed semantics of the list-... commands
- and added a new one. Removed option "-d"
-
- * decrypt.c: New.
-
- * trustdb.c (init_trustdb): Autocreate directory only if it ends
- in "/.gnupg".
-
-Thu Mar 5 12:12:11 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mainproc.c (do_proc_packets): New. Common part of proc_packet.
- (proc_signature_packets): special version to handle signature data.
- * verify.c: New.
- * g10.c (aVerify): New.
- * plaintext.c (hash_datafiles): New.
- * compress.c (handle_compressed): Add callback arg, changed caller.
-
-Thu Mar 5 10:20:06 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c: Is nom the common source for gpg and gpgm
- * g10maint.c: Removed
- * Makefile.am: Add rule to build g10maint.c
-
-Thu Mar 5 08:43:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Changed the way clear text sigs are faked.
-
-Wed Mar 4 19:47:37 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10maint.c (aMuttKeyList): New
- * keylist.c: New.
-
-Wed Mar 4 17:20:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * getkey.c (get_pubkey_byname): Kludge to allow 0x prefix.
-
-Tue Mar 3 13:46:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10maint.c (main): New option --gen-random.
-
-Tue Mar 3 09:50:08 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (aDeleteSecretKey): New.
- (aEditSig): Add option "--edit-key" as synonym for "--edit-sig".
- (aDeleteSecretKey): New.
- * getkey.c (seckey_available): New.
- * sign.c (delete_key): Enhanced to delete secret keys, changed all
- callers.
-
-Mon Mar 2 21:23:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * pkc_list.c (build_pkc_list): Add interactive input of user ID.
-
-Mon Mar 2 20:54:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * pkclist.c (do_we_trust_pre): New.
- (add_ownertrust): Add message.
- * trustdb.c (enum_trust_web): Quick fix.
-
-Mon Mar 2 13:50:53 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): New action aDeleteKey
- * sign.c (delete_key): New.
-
-Sun Mar 1 16:38:58 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (do_check): No returns TRUST_UNDEFINED instead of
- eof error.
-
-Fri Feb 27 18:14:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (find_header): Removed trailing CR on headers.
-
-Fri Feb 27 18:02:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ringedit.c (keyring_search) [MINGW32]: Open and close file here
- because rename does not work on open files. Chnaged callers.
-
-Fri Feb 27 16:43:11 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sig-check.c (do_check): Add an md_enable.
- * mainproc.c (do_check_sig): Use md_open in case of detached sig
- (proc_tree): Take detached sigs into account.
-
-Fri Feb 27 15:22:46 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): Make use of GNUPGHOME envvar.
- * g10main.c (main): Ditto.
-
-Wed Feb 25 11:40:04 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * plaintext.c (ask_for_detached_datafile): add opt.verbose to
- info output.
-
- * openfile.c (open_sigfile): Try also name ending in ".asc"
-
-Wed Feb 25 08:41:00 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * keygen.c (generate_keypair): Fixed memory overflow.
-
-Tue Feb 24 15:51:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c (parse_certificate): Support for S2K.
- * build-packet.c (do_secret_cert): Ditto.
- * keygen.c (gen_elg): Ditto.
- * seckey-cert.c (check_elg): Ditto
- (protect_elg): Ditto.
- * sign.c (chnage_passphrase): Ditto.
- * passphrase.c (get_passphrase_hash): Support for a salt and
- changed all callers.
- (make_dek_from_passphrase): Ditto.
-
-Tue Feb 24 12:30:56 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * build-packet.c (hash_public_cert): Disabled debug output.
-
-Fri Feb 20 17:22:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (init_trustdb) [MINGW32]: Removed 2nd mkdir arg.
- (keyring_copy) [MINGW32]: Add a remove prior to the renames.
-
-Wed Feb 18 18:39:02 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (OMIT_DEPENDENCIES): New.
-
- * rsa.c: Replaced log_bug by BUG.
-
-Wed Feb 18 13:35:58 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mainproc.c (do_check_sig): Now uses hash_public_cert.
- * parse-packet.c (parse_certificate): Removed hashing.
- * packet.h (public_cert): Removed hash variable.
- * free-packet.c (copy_public_cert, free_public_cert): Likewise.
-
- * sig-check.c (check_key_signatures): Changed semantics.
-
-Wed Feb 18 12:11:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * trustdb.c (do_check): Add handling for revocation certificates.
- (build_sigrecs): Ditto.
- (check_sigs): Ditto.
-
-Wed Feb 18 09:31:04 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (armor_filter): Add afx->hdrlines.
- * revoke.c (gen_revoke): Add comment line.
- * dearmor.c (enarmor_file): Ditto.
-
- * sig-check.c (check_key_signature): Add handling for class 0x20.
- * mainproc.c : Ditto.
-
-Tue Feb 17 21:24:17 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c : Add header lines "...ARMORED FILE .."
- * dearmor.c (enarmor_file): New.
- * g10maint.c (main): New option "--enarmor"
-
-Tue Feb 17 19:03:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mainproc.c : Changed a lot, because the packets are now stored
- a simple linlked list and not anymore in a complicatd tree structure.
-
-Tue Feb 17 10:14:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * free_packet.c (cmp_public_certs): New.
- (cmp_user_ids): New.
-
- * kbnode.c (clone_kbnode): New.
- (release_kbnode): Add clone support.
-
- * ringedit.c (find_keyblock_bypkc): New.
-
- * sign.c (remove_keysigs): Self signatures are now skipped,
- changed arguments and all callers.
-
- * import.c : Add functionality.
-
-Tue Feb 17 09:31:40 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * options.h (homedir): New option.
- * g10.c, g10maint.c, getkey.c, keygen.c, trustdb.c (opt.homedir): New.
-
- * trustdb.c (init_trustdb): mkdir for hoem directory
- (sign_private_data): Renamed "sig" to "g10.sig"
-
-Mon Feb 16 20:02:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * kbnode.c (commit_kbnode): New.
- (delete_kbnode): removed unused first arg. Changed all Callers.
-
- * ringedit.c (keyblock_resource_name): New.
- (get_keyblock_handle): NULL for filename returns default resource.
-
-Mon Feb 16 19:38:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * sig-check.s (check_key_signature): Now uses the supplied
- public key to check the signature and not any more the one
- from the getkey.c
- (do_check): New.
- (check_signature): Most work moved to do_check.
-
-Mon Feb 16 14:48:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (find_header): Fixed another bug.
-
-Mon Feb 16 12:18:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * getkey.c (scan_keyring): Add handling of compressed keyrings.
-
-Mon Feb 16 10:44:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c, g10maint.c (strusage): Rewrote.
- (build_list): New
-
-Mon Feb 16 08:58:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (use_armor): New.
-
-Sat Feb 14 14:30:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mainproc.c (proc_tree): Sigclass fix.
-
-Sat Feb 14 14:16:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * armor.c (armor_filter): Changed version and comment string.
- * encode.c, sign.c, keygen.c: Changed all comment packet strings.
-
-Sat Feb 14 12:39:24 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (aGenRevoke): New command.
- * revoke.c: New.
- * sign.c (make_keysig_packet): Add support for sigclass 0x20.
-
-Fri Feb 13 20:18:14 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ringedit.c (enum_keyblocks, keyring_enum): New.
-
-Fri Feb 13 19:33:40 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * export.c: Add functionality.
-
- * keygen.c (generate_keypair): Moved the leading comment behind the
- key packet.
- * kbnode.c (walk_kbnode): Fixed.
-
- * g10.c (main): listing armored keys now work.
-
-Fri Feb 13 16:17:43 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * parse-packet.c (parse_publickey, parse_signature): Fixed calls
- to mpi_read used for ELG b.
-
-Fri Feb 13 15:13:23 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10.c (main): changed formatting of help output.
-
-Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo)
-
- * pubkey-enc.c (get_session_key): rewritten
-
-
- Copyright 1998,1999,2000,2001,2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/g10/Makefile.am b/g10/Makefile.am
deleted file mode 100644
index d84707af8..000000000
--- a/g10/Makefile.am
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl
-EXTRA_DIST = options.skel
-# it seems that we can't use this with automake 1.5
-#OMIT_DEPENDENCIES = zlib.h zconf.h
-LDFLAGS = @LDFLAGS@
-needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a
-
-#noinst_PROGRAMS = gpgd
-bin_PROGRAMS = gpg gpgv
-
-common_source = \
- global.h \
- build-packet.c \
- compress.c \
- filter.h \
- free-packet.c \
- getkey.c \
- keydb.c keydb.h \
- keyring.c keyring.h \
- seskey.c \
- kbnode.c \
- main.h \
- mainproc.c \
- armor.c \
- mdfilter.c \
- textfilter.c \
- misc.c \
- options.h \
- openfile.c \
- keyid.c \
- packet.h \
- parse-packet.c \
- comment.c \
- status.c \
- status.h \
- plaintext.c \
- sig-check.c \
- keylist.c \
- signal.c
-
-gpg_SOURCES = g10.c \
- $(common_source) \
- pkclist.c \
- skclist.c \
- pubkey-enc.c \
- passphrase.c \
- seckey-cert.c \
- encr-data.c \
- cipher.c \
- encode.c \
- sign.c \
- verify.c \
- revoke.c \
- decrypt.c \
- keyedit.c \
- dearmor.c \
- import.c \
- export.c \
- trustdb.c \
- trustdb.h \
- tdbdump.c \
- tdbio.c \
- tdbio.h \
- delkey.c \
- keygen.c \
- pipemode.c \
- helptext.c \
- keyserver.c \
- keyserver-internal.h \
- photoid.c photoid.h \
- exec.c exec.h
-
-
-
-gpgv_SOURCES = gpgv.c \
- $(common_source) \
- verify.c
-
-
-
-
-#gpgd_SOURCES = gpgd.c \
-# ks-proto.h \
-# ks-proto.c \
-# ks-db.c \
-# ks-db.h \
-# $(common_source)
-
-LDADD = $(needed_libs) @ZLIBS@ @INTLLIBS@
-# gpg gets LIBOBJS to add in mkdtemp if the platform doesn't have it
-gpg_LDADD = @LIBOBJS@ $(LDADD) @EGDLIBS@
-
-$(PROGRAMS): $(needed_libs)
-
-install-data-local:
- $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
- $(INSTALL_DATA) $(srcdir)/options.skel \
- $(DESTDIR)$(pkgdatadir)/options.skel
- @set -e;\
- if test -f $(DESTDIR)$(bindir)/gpgm ; then \
- echo "removing obsolete gpgm binary" ; \
- rm $(DESTDIR)$(bindir)/gpgm ; \
- fi
diff --git a/g10/armor.c b/g10/armor.c
deleted file mode 100644
index 9c7858fe6..000000000
--- a/g10/armor.c
+++ /dev/null
@@ -1,1322 +0,0 @@
-/* armor.c - Armor flter
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "errors.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-#include "filter.h"
-#include "packet.h"
-#include "options.h"
-#include "main.h"
-#include "status.h"
-#include "i18n.h"
-
-#ifdef HAVE_DOSISH_SYSTEM
- #define LF "\r\n"
-#else
- #define LF "\n"
-#endif
-
-#define MAX_LINELEN 20000
-
-#define CRCINIT 0xB704CE
-#define CRCPOLY 0X864CFB
-#define CRCUPDATE(a,c) do { \
- a = ((a) << 8) ^ crc_table[((a)&0xff >> 16) ^ (c)]; \
- a &= 0x00ffffff; \
- } while(0)
-static u32 crc_table[256];
-static byte bintoasc[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789+/";
-static byte asctobin[256]; /* runtime initialized */
-static int is_initialized;
-
-
-typedef enum {
- fhdrHASArmor = 0,
- fhdrNOArmor,
- fhdrINIT,
- fhdrINITCont,
- fhdrINITSkip,
- fhdrCHECKBegin,
- fhdrWAITHeader,
- fhdrWAITClearsig,
- fhdrSKIPHeader,
- fhdrCLEARSIG,
- fhdrREADClearsig,
- fhdrNullClearsig,
- fhdrEMPTYClearsig,
- fhdrCHECKClearsig,
- fhdrCHECKClearsig2,
- fhdrCHECKDashEscaped,
- fhdrCHECKDashEscaped2,
- fhdrCHECKDashEscaped3,
- fhdrREADClearsigNext,
- fhdrENDClearsig,
- fhdrENDClearsigHelp,
- fhdrTESTSpaces,
- fhdrCLEARSIGSimple,
- fhdrCLEARSIGSimpleNext,
- fhdrTEXT,
- fhdrTEXTSimple,
- fhdrERROR,
- fhdrERRORShow,
- fhdrEOF
-} fhdr_state_t;
-
-
-/* if we encounter this armor string with this index, go
- * into a mode which fakes packets and wait for the next armor */
-#define BEGIN_SIGNATURE 2
-#define BEGIN_SIGNED_MSG_IDX 3
-static char *head_strings[] = {
- "BEGIN PGP MESSAGE",
- "BEGIN PGP PUBLIC KEY BLOCK",
- "BEGIN PGP SIGNATURE",
- "BEGIN PGP SIGNED MESSAGE",
- "BEGIN PGP ARMORED FILE", /* gnupg extension */
- "BEGIN PGP PRIVATE KEY BLOCK",
- "BEGIN PGP SECRET KEY BLOCK", /* only used by pgp2 */
- NULL
-};
-static char *tail_strings[] = {
- "END PGP MESSAGE",
- "END PGP PUBLIC KEY BLOCK",
- "END PGP SIGNATURE",
- "END dummy",
- "END PGP ARMORED FILE",
- "END PGP PRIVATE KEY BLOCK",
- "END PGP SECRET KEY BLOCK",
- NULL
-};
-
-
-
-static void
-initialize(void)
-{
- int i, j;
- u32 t;
- byte *s;
-
- /* init the crc lookup table */
- crc_table[0] = 0;
- for(i=j=0; j < 128; j++ ) {
- t = crc_table[j];
- if( t & 0x00800000 ) {
- t <<= 1;
- crc_table[i++] = t ^ CRCPOLY;
- crc_table[i++] = t;
- }
- else {
- t <<= 1;
- crc_table[i++] = t;
- crc_table[i++] = t ^ CRCPOLY;
- }
- }
- /* build the helptable for radix64 to bin conversion */
- for(i=0; i < 256; i++ )
- asctobin[i] = 255; /* used to detect invalid characters */
- for(s=bintoasc,i=0; *s; s++,i++ )
- asctobin[*s] = i;
-
- is_initialized=1;
-}
-
-/****************
- * Check whether this is an armored file or not See also
- * parse-packet.c for details on this code For unknown historic
- * reasons we use a string here but only the first byte will be used.
- * Returns: True if it seems to be armored
- */
-static int
-is_armored( const byte *buf )
-{
- int ctb, pkttype;
-
- ctb = *buf;
- if( !(ctb & 0x80) )
- return 1; /* invalid packet: assume it is armored */
- pkttype = ctb & 0x40 ? (ctb & 0x3f) : ((ctb>>2)&0xf);
- switch( pkttype ) {
- case PKT_MARKER:
- case PKT_SYMKEY_ENC:
- case PKT_ONEPASS_SIG:
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- case PKT_PUBKEY_ENC:
- case PKT_SIGNATURE:
- case PKT_COMMENT:
- case PKT_OLD_COMMENT:
- case PKT_PLAINTEXT:
- case PKT_COMPRESSED:
- case PKT_ENCRYPTED:
- return 0; /* seems to be a regular packet: not armored */
- }
-
- return 1;
-}
-
-
-/****************
- * Try to check whether the iobuf is armored
- * Returns true if this may be the case; the caller should use the
- * filter to do further processing.
- */
-int
-use_armor_filter( IOBUF a )
-{
- byte buf[1];
- int n;
-
- /* fixme: there might be a problem with iobuf_peek */
- n = iobuf_peek(a, buf, 1 );
- if( n == -1 )
- return 0; /* EOF, doesn't matter whether armored or not */
- if( !n )
- return 1; /* can't check it: try armored */
- return is_armored(buf);
-}
-
-
-
-
-static void
-invalid_armor(void)
-{
- write_status(STATUS_BADARMOR);
- g10_exit(1); /* stop here */
-}
-
-
-/****************
- * check whether the armor header is valid on a signed message.
- * this is for security reasons: the header lines are not included in the
- * hash and by using some creative formatting rules, Mallory could fake
- * any text at the beginning of a document; assuming it is read with
- * a simple viewer. We only allow the Hash Header.
- */
-static int
-parse_hash_header( const char *line )
-{
- const char *s, *s2;
- unsigned found = 0;
-
- if( strlen(line) < 6 || strlen(line) > 60 )
- return 0; /* too short or too long */
- if( memcmp( line, "Hash:", 5 ) )
- return 0; /* invalid header */
- s = line+5;
- for(s=line+5;;s=s2) {
- for(; *s && (*s==' ' || *s == '\t'); s++ )
- ;
- if( !*s )
- break;
- for(s2=s+1; *s2 && *s2!=' ' && *s2 != '\t' && *s2 != ','; s2++ )
- ;
- if( !strncmp( s, "RIPEMD160", s2-s ) )
- found |= 1;
- else if( !strncmp( s, "SHA1", s2-s ) )
- found |= 2;
- else if( !strncmp( s, "MD5", s2-s ) )
- found |= 4;
- else if( !strncmp( s, "TIGER192", s2-s ) )
- found |= 8;
- else if( !strncmp( s, "TIGER", s2-s ) ) /* used by old versions */
- found |= 8;
- else
- return 0;
- for(; *s2 && (*s2==' ' || *s2 == '\t'); s2++ )
- ;
- if( *s2 && *s2 != ',' )
- return 0;
- if( *s2 )
- s2++;
- }
- return found;
-}
-
-
-
-/****************
- * Check whether this is a armor line.
- * returns: -1 if it is not a armor header or the index number of the
- * armor header.
- */
-static int
-is_armor_header( byte *line, unsigned len )
-{
- const char *s;
- byte *save_p, *p;
- int save_c;
- int i;
-
- if( len < 15 )
- return -1; /* too short */
- if( memcmp( line, "-----", 5 ) )
- return -1; /* no */
- p = strstr( line+5, "-----");
- if( !p )
- return -1;
- save_p = p;
- p += 5;
-
- /* Some mail programs on Windows seem to add spaces to the end of
- the line. This becomes strict if --openpgp is set. */
-
- if(!opt.rfc2440)
- while(*p==' ')
- p++;
-
- if( *p == '\r' )
- p++;
- if( *p == '\n' )
- p++;
- if( *p )
- return -1; /* garbage after dashes */
- save_c = *save_p; *save_p = 0;
- p = line+5;
- for(i=0; (s=head_strings[i]); i++ )
- if( !strcmp(s, p) )
- break;
- *save_p = save_c;
- if( !s )
- return -1; /* unknown armor line */
-
- if( opt.verbose > 1 )
- log_info(_("armor: %s\n"), head_strings[i]);
- return i;
-}
-
-
-
-/****************
- * Parse a header lines
- * Return 0: Empty line (end of header lines)
- * -1: invalid header line
- * >0: Good header line
- */
-static int
-parse_header_line( armor_filter_context_t *afx, byte *line, unsigned int len )
-{
- byte *p;
- int hashes=0;
- unsigned int len2;
-
- len2 = check_trailing_ws( line, len );
- if( !len2 ) {
- afx->buffer_pos = len2; /* (it is not the fine way to do it here) */
- return 0; /* WS only: same as empty line */
- }
- len = len2;
- line[len2] = 0;
-
- p = strchr( line, ':');
- if( !p || !p[1] ) {
- log_error(_("invalid armor header: "));
- print_string( stderr, line, len, 0 );
- putc('\n', stderr);
- return -1;
- }
-
- if( opt.verbose ) {
- log_info(_("armor header: "));
- print_string( stderr, line, len, 0 );
- putc('\n', stderr);
- }
-
- if( afx->in_cleartext ) {
- if( (hashes=parse_hash_header( line )) )
- afx->hashes |= hashes;
- else if( strlen(line) > 15 && !memcmp( line, "NotDashEscaped:", 15 ) )
- afx->not_dash_escaped = 1;
- else {
- log_error(_("invalid clearsig header\n"));
- return -1;
- }
- }
- return 1;
-}
-
-
-
-/* figure out whether the data is armored or not */
-static int
-check_input( armor_filter_context_t *afx, IOBUF a )
-{
- int rc = 0;
- int i;
- byte *line;
- unsigned len;
- unsigned maxlen;
- int hdr_line = -1;
-
- /* read the first line to see whether this is armored data */
- maxlen = MAX_LINELEN;
- len = afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- line = afx->buffer;
- if( !maxlen ) {
- /* line has been truncated: assume not armored */
- afx->inp_checked = 1;
- afx->inp_bypass = 1;
- return 0;
- }
-
- if( !len ) {
- return -1; /* eof */
- }
-
- /* (the line is always a C string but maybe longer) */
- if( *line == '\n' || ( len && (*line == '\r' && line[1]=='\n') ) )
- ;
- else if( !is_armored( line ) ) {
- afx->inp_checked = 1;
- afx->inp_bypass = 1;
- return 0;
- }
-
- /* find the armor header */
- while(len) {
- i = is_armor_header( line, len );
- if( i >= 0 && !(afx->only_keyblocks && i != 1 && i != 5 && i != 6 )) {
- hdr_line = i;
- if( hdr_line == BEGIN_SIGNED_MSG_IDX ) {
- if( afx->in_cleartext ) {
- log_error(_("nested clear text signatures\n"));
- rc = G10ERR_INVALID_ARMOR;
- }
- afx->in_cleartext = 1;
- }
- break;
- }
- /* read the next line (skip all truncated lines) */
- do {
- maxlen = MAX_LINELEN;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- line = afx->buffer;
- len = afx->buffer_len;
- } while( !maxlen );
- }
-
- /* parse the header lines */
- while(len) {
- /* read the next line (skip all truncated lines) */
- do {
- maxlen = MAX_LINELEN;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- line = afx->buffer;
- len = afx->buffer_len;
- } while( !maxlen );
-
- i = parse_header_line( afx, line, len );
- if( i <= 0 ) {
- if( i )
- rc = G10ERR_INVALID_ARMOR;
- break;
- }
- }
-
-
- if( rc )
- invalid_armor();
- else if( afx->in_cleartext )
- afx->faked = 1;
- else {
- afx->inp_checked = 1;
- afx->crc = CRCINIT;
- afx->idx = 0;
- afx->radbuf[0] = 0;
- }
-
- return rc;
-}
-
-
-
-/****************
- * Fake a literal data packet and wait for the next armor line
- * fixme: empty line handling and null length clear text signature are
- * not implemented/checked.
- */
-static int
-fake_packet( armor_filter_context_t *afx, IOBUF a,
- size_t *retn, byte *buf, size_t size )
-{
- int rc = 0;
- size_t len = 0;
- int lastline = 0;
- unsigned maxlen, n;
- byte *p;
-
- len = 2; /* reserve 2 bytes for the length header */
- size -= 2; /* and 2 for the terminating header */
- while( !rc && len < size ) {
- /* copy what we have in the line buffer */
- if( afx->faked == 1 )
- afx->faked++; /* skip the first (empty) line */
- else {
- while( len < size && afx->buffer_pos < afx->buffer_len )
- buf[len++] = afx->buffer[afx->buffer_pos++];
- if( len >= size )
- continue;
- }
-
- /* read the next line */
- maxlen = MAX_LINELEN;
- afx->buffer_pos = 0;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- if( !afx->buffer_len ) {
- rc = -1; /* eof (should not happen) */
- continue;
- }
- if( !maxlen )
- afx->truncated++;
- if( !afx->not_dash_escaped ) {
- int crlf;
- p = afx->buffer;
- n = afx->buffer_len;
- crlf = n > 1 && p[n-2] == '\r' && p[n-1]=='\n';
-
- /* PGP2 does not treat a tab as white space character */
- afx->buffer_len = trim_trailing_chars( p, n,
- afx->pgp2mode ? " \r\n" : " \t\r\n");
- /* the buffer is always allocated with enough space to append
- * the removed [CR], LF and a Nul
- * The reason for this complicated procedure is to keep at least
- * the original type of lineending - handling of the removed
- * trailing spaces seems to be impossible in our method
- * of faking a packet; either we have to use a temporary file
- * or calculate the hash here in this module and somehow find
- * a way to send the hash down the processing line (well, a special
- * faked packet could do the job).
- */
- if( crlf )
- afx->buffer[afx->buffer_len++] = '\r';
- afx->buffer[afx->buffer_len++] = '\n';
- afx->buffer[afx->buffer_len] = 0;
- }
- p = afx->buffer;
- n = afx->buffer_len;
-
- if( n > 2 && *p == '-' ) {
- /* check for dash escaped or armor header */
- if( p[1] == ' ' && !afx->not_dash_escaped ) {
- /* issue a warning if it is not regular encoded */
- if( p[2] != '-' && !( n > 6 && !memcmp(p+2, "From ", 5))) {
- log_info(_("invalid dash escaped line: "));
- print_string( stderr, p, n, 0 );
- putc('\n', stderr);
- }
- afx->buffer_pos = 2; /* skip */
- }
- else if( n >= 15 && p[1] == '-' && p[2] == '-' && p[3] == '-' ) {
- int type = is_armor_header( p, n );
- if( afx->not_dash_escaped && type != BEGIN_SIGNATURE )
- ; /* this is okay */
- else {
- if( type != BEGIN_SIGNATURE ) {
- log_info(_("unexpected armor:"));
- print_string( stderr, p, n, 0 );
- putc('\n', stderr);
- }
- lastline = 1;
- rc = -1;
- }
- }
- }
- }
-
- buf[0] = (len-2) >> 8;
- buf[1] = (len-2);
- if( lastline ) { /* write last (ending) length header */
- if( buf[0] || buf[1] ) { /* only if we have some text */
- buf[len++] = 0;
- buf[len++] = 0;
- }
- rc = 0;
- afx->faked = 0;
- afx->in_cleartext = 0;
- /* and now read the header lines */
- afx->buffer_pos = 0;
- for(;;) {
- int i;
-
- /* read the next line (skip all truncated lines) */
- do {
- maxlen = MAX_LINELEN;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- } while( !maxlen );
- p = afx->buffer;
- n = afx->buffer_len;
- if( !n ) {
- rc = -1;
- break; /* eof */
- }
- i = parse_header_line( afx, p , n );
- if( i <= 0 ) {
- if( i )
- invalid_armor();
- break;
- }
- }
- afx->inp_checked = 1;
- afx->crc = CRCINIT;
- afx->idx = 0;
- afx->radbuf[0] = 0;
- }
-
- *retn = len;
- return rc;
-}
-
-
-static int
-invalid_crc(void)
-{
- if ( opt.ignore_crc_error )
- return 0;
- log_inc_errorcount();
- return G10ERR_INVALID_ARMOR;
-}
-
-
-static int
-radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn,
- byte *buf, size_t size )
-{
- byte val;
- int c=0, c2; /*init c because gcc is not clever enough for the continue*/
- int checkcrc=0;
- int rc = 0;
- size_t n = 0;
- int idx, i;
- u32 crc;
-
- crc = afx->crc;
- idx = afx->idx;
- val = afx->radbuf[0];
- for( n=0; n < size; ) {
-
- if( afx->buffer_pos < afx->buffer_len )
- c = afx->buffer[afx->buffer_pos++];
- else { /* read the next line */
- unsigned maxlen = MAX_LINELEN;
- afx->buffer_pos = 0;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- if( !maxlen )
- afx->truncated++;
- if( !afx->buffer_len )
- break; /* eof */
- continue;
- }
-
- again:
- if( c == '\n' || c == ' ' || c == '\r' || c == '\t' )
- continue;
- else if( c == '=' ) { /* pad character: stop */
- /* some mailers leave quoted-printable encoded characters
- * so we try to workaround this */
- if( afx->buffer_pos+2 < afx->buffer_len ) {
- int cc1, cc2, cc3;
- cc1 = afx->buffer[afx->buffer_pos];
- cc2 = afx->buffer[afx->buffer_pos+1];
- cc3 = afx->buffer[afx->buffer_pos+2];
- if( isxdigit(cc1) && isxdigit(cc2)
- && strchr( "=\n\r\t ", cc3 )) {
- /* well it seems to be the case - adjust */
- c = isdigit(cc1)? (cc1 - '0'): (ascii_toupper(cc1)-'A'+10);
- c <<= 4;
- c |= isdigit(cc2)? (cc2 - '0'): (ascii_toupper(cc2)-'A'+10);
- afx->buffer_pos += 2;
- afx->qp_detected = 1;
- goto again;
- }
- }
-
- if( idx == 1 )
- buf[n++] = val;
- checkcrc++;
- break;
- }
- else if( (c = asctobin[(c2=c)]) == 255 ) {
- log_error(_("invalid radix64 character %02x skipped\n"), c2);
- continue;
- }
- switch(idx) {
- case 0: val = c << 2; break;
- case 1: val |= (c>>4)&3; buf[n++]=val;val=(c<<4)&0xf0;break;
- case 2: val |= (c>>2)&15; buf[n++]=val;val=(c<<6)&0xc0;break;
- case 3: val |= c&0x3f; buf[n++] = val; break;
- }
- idx = (idx+1) % 4;
- }
-
- for(i=0; i < n; i++ )
- crc = (crc << 8) ^ crc_table[((crc >> 16)&0xff) ^ buf[i]];
- crc &= 0x00ffffff;
- afx->crc = crc;
- afx->idx = idx;
- afx->radbuf[0] = val;
-
- if( checkcrc ) {
- afx->any_data = 1;
- afx->inp_checked=0;
- afx->faked = 0;
- for(;;) { /* skip lf and pad characters */
- if( afx->buffer_pos < afx->buffer_len )
- c = afx->buffer[afx->buffer_pos++];
- else { /* read the next line */
- unsigned maxlen = MAX_LINELEN;
- afx->buffer_pos = 0;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size, &maxlen );
- if( !maxlen )
- afx->truncated++;
- if( !afx->buffer_len )
- break; /* eof */
- continue;
- }
- if( c == '\n' || c == ' ' || c == '\r'
- || c == '\t' || c == '=' )
- continue;
- break;
- }
- if( c == -1 )
- log_error(_("premature eof (no CRC)\n"));
- else {
- u32 mycrc = 0;
- idx = 0;
- do {
- if( (c = asctobin[c]) == 255 )
- break;
- switch(idx) {
- case 0: val = c << 2; break;
- case 1: val |= (c>>4)&3; mycrc |= val << 16;val=(c<<4)&0xf0;break;
- case 2: val |= (c>>2)&15; mycrc |= val << 8;val=(c<<6)&0xc0;break;
- case 3: val |= c&0x3f; mycrc |= val; break;
- }
- for(;;) {
- if( afx->buffer_pos < afx->buffer_len )
- c = afx->buffer[afx->buffer_pos++];
- else { /* read the next line */
- unsigned maxlen = MAX_LINELEN;
- afx->buffer_pos = 0;
- afx->buffer_len = iobuf_read_line( a, &afx->buffer,
- &afx->buffer_size,
- &maxlen );
- if( !maxlen )
- afx->truncated++;
- if( !afx->buffer_len )
- break; /* eof */
- continue;
- }
- break;
- }
- if( !afx->buffer_len )
- break; /* eof */
- } while( ++idx < 4 );
- if( c == -1 ) {
- log_info(_("premature eof (in CRC)\n"));
- rc = invalid_crc();
- }
- else if( idx != 4 ) {
- log_info(_("malformed CRC\n"));
- rc = invalid_crc();
- }
- else if( mycrc != afx->crc ) {
- log_info (_("CRC error; %06lx - %06lx\n"),
- (ulong)afx->crc, (ulong)mycrc);
- rc = invalid_crc();
- }
- else {
- rc = 0;
- /* FIXME: Here we should emit another control packet,
- * so that we know in mainproc that we are processing
- * a clearsign message */
- #if 0
- for(rc=0;!rc;) {
- rc = 0 /*check_trailer( &fhdr, c )*/;
- if( !rc ) {
- if( (c=iobuf_get(a)) == -1 )
- rc = 2;
- }
- }
- if( rc == -1 )
- rc = 0;
- else if( rc == 2 ) {
- log_error(_("premature eof (in Trailer)\n"));
- rc = G10ERR_INVALID_ARMOR;
- }
- else {
- log_error(_("error in trailer line\n"));
- rc = G10ERR_INVALID_ARMOR;
- }
- #endif
- }
- }
- }
-
- if( !n )
- rc = -1;
-
- *retn = n;
- return rc;
-}
-
-/****************
- * This filter is used to handle the armor stuff
- */
-int
-armor_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len)
-{
- size_t size = *ret_len;
- armor_filter_context_t *afx = opaque;
- int rc=0, i, c;
- byte radbuf[3];
- int idx, idx2;
- size_t n=0;
- u32 crc;
- #if 0
- static FILE *fp ;
-
- if( !fp ) {
- fp = fopen("armor.out", "w");
- assert(fp);
- }
- #endif
-
- if( DBG_FILTER )
- log_debug("armor-filter: control: %d\n", control );
- if( control == IOBUFCTRL_UNDERFLOW && afx->inp_bypass ) {
- n = 0;
- if( afx->buffer_len ) {
- for(; n < size && afx->buffer_pos < afx->buffer_len; n++ )
- buf[n++] = afx->buffer[afx->buffer_pos++];
- if( afx->buffer_pos >= afx->buffer_len )
- afx->buffer_len = 0;
- }
- for(; n < size; n++ ) {
- if( (c=iobuf_get(a)) == -1 )
- break;
- buf[n] = c & 0xff;
- }
- if( !n )
- rc = -1;
- *ret_len = n;
- }
- else if( control == IOBUFCTRL_UNDERFLOW ) {
- /* We need some space for the faked packet. The minmum required
- * size is ~18 + length of the session marker */
- if( size < 50 )
- BUG(); /* supplied buffer too short */
-
- if( afx->faked )
- rc = fake_packet( afx, a, &n, buf, size );
- else if( !afx->inp_checked ) {
- rc = check_input( afx, a );
- if( afx->inp_bypass ) {
- for(n=0; n < size && afx->buffer_pos < afx->buffer_len; )
- buf[n++] = afx->buffer[afx->buffer_pos++];
- if( afx->buffer_pos >= afx->buffer_len )
- afx->buffer_len = 0;
- if( !n )
- rc = -1;
- }
- else if( afx->faked ) {
- unsigned int hashes = afx->hashes;
- const byte *sesmark;
- size_t sesmarklen;
-
- sesmark = get_session_marker( &sesmarklen );
- if ( sesmarklen > 20 )
- BUG();
-
- /* the buffer is at least 15+n*15 bytes long, so it
- * is easy to construct the packets */
-
- hashes &= 1|2|4|8;
- if( !hashes ) {
- hashes |= 4; /* default to MD 5 */
- if( opt.pgp2_workarounds )
- afx->pgp2mode = 1;
- }
- n=0;
- /* first a gpg control packet */
- buf[n++] = 0xff; /* new format, type 63, 1 length byte */
- n++; /* see below */
- memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen;
- buf[n++] = CTRLPKT_CLEARSIGN_START;
- buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */
- if( hashes & 1 )
- buf[n++] = DIGEST_ALGO_RMD160;
- if( hashes & 2 )
- buf[n++] = DIGEST_ALGO_SHA1;
- if( hashes & 4 )
- buf[n++] = DIGEST_ALGO_MD5;
- if( hashes & 8 )
- buf[n++] = DIGEST_ALGO_TIGER;
- buf[1] = n - 2;
-
- /* followed by a plaintext packet */
- buf[n++] = 0xaf; /* old packet format, type 11, var length */
- buf[n++] = 0; /* set the length header */
- buf[n++] = 6;
- buf[n++] = 't'; /* canonical text mode */
- buf[n++] = 0; /* namelength */
- memset(buf+n, 0, 4); /* timestamp */
- n += 4;
- }
- else if( !rc )
- rc = radix64_read( afx, a, &n, buf, size );
- }
- else
- rc = radix64_read( afx, a, &n, buf, size );
- #if 0
- if( n )
- if( fwrite(buf, n, 1, fp ) != 1 )
- BUG();
- #endif
- *ret_len = n;
- }
- else if( control == IOBUFCTRL_FLUSH && !afx->cancel ) {
- if( !afx->status ) { /* write the header line */
- const char *s;
-
- if( afx->what >= DIM(head_strings) )
- log_bug("afx->what=%d", afx->what);
- iobuf_writestr(a, "-----");
- iobuf_writestr(a, head_strings[afx->what] );
- iobuf_writestr(a, "-----" LF );
- if( !opt.no_version )
- iobuf_writestr(a, "Version: GnuPG v" VERSION " ("
- PRINTABLE_OS_NAME ")" LF );
-
- /* write the comment string or a default one */
- s = opt.comment_string;
- if( s && *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_writestr(a, LF );
- }
-
- if ( afx->hdrlines ) {
- for ( s = afx->hdrlines; *s; s++ ) {
- #ifdef HAVE_DOSISH_SYSTEM
- if ( *s == '\n' )
- iobuf_put( a, '\r');
- #endif
- iobuf_put(a, *s );
- }
- }
- iobuf_writestr(a, LF );
- afx->status++;
- afx->idx = 0;
- afx->idx2 = 0;
- afx->crc = CRCINIT;
-
- }
- crc = afx->crc;
- idx = afx->idx;
- idx2 = afx->idx2;
- for(i=0; i < idx; i++ )
- radbuf[i] = afx->radbuf[i];
-
- for(i=0; i < size; i++ )
- crc = (crc << 8) ^ crc_table[((crc >> 16)&0xff) ^ buf[i]];
- crc &= 0x00ffffff;
-
- for( ; size; buf++, size-- ) {
- radbuf[idx++] = *buf;
- if( idx > 2 ) {
- idx = 0;
- c = bintoasc[(*radbuf >> 2) & 077];
- iobuf_put(a, c);
- c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1] >> 4)&017))&077];
- iobuf_put(a, c);
- c = bintoasc[(((radbuf[1]<<2)&074)|((radbuf[2]>>6)&03))&077];
- iobuf_put(a, c);
- c = bintoasc[radbuf[2]&077];
- iobuf_put(a, c);
- if( ++idx2 >= (64/4) ) { /* pgp doesn't like 72 here */
- iobuf_writestr(a, LF );
- idx2=0;
- }
- }
- }
- for(i=0; i < idx; i++ )
- afx->radbuf[i] = radbuf[i];
- afx->idx = idx;
- afx->idx2 = idx2;
- afx->crc = crc;
- }
- else if( control == IOBUFCTRL_INIT ) {
- if( !is_initialized )
- initialize();
- }
- else if( control == IOBUFCTRL_CANCEL ) {
- afx->cancel = 1;
- }
- else if( control == IOBUFCTRL_FREE ) {
- if( afx->cancel )
- ;
- else if( afx->status ) { /* pad, write cecksum, and bottom line */
- crc = afx->crc;
- idx = afx->idx;
- idx2 = afx->idx2;
- for(i=0; i < idx; i++ )
- radbuf[i] = afx->radbuf[i];
- if( idx ) {
- c = bintoasc[(*radbuf>>2)&077];
- iobuf_put(a, c);
- if( idx == 1 ) {
- c = bintoasc[((*radbuf << 4) & 060) & 077];
- iobuf_put(a, c);
- iobuf_put(a, '=');
- iobuf_put(a, '=');
- }
- else { /* 2 */
- c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1]>>4)&017))&077];
- iobuf_put(a, c);
- c = bintoasc[((radbuf[1] << 2) & 074) & 077];
- iobuf_put(a, c);
- iobuf_put(a, '=');
- }
- if( ++idx2 >= (64/4) ) { /* pgp doesn't like 72 here */
- iobuf_writestr(a, LF );
- idx2=0;
- }
- }
- /* may need a linefeed */
- if( idx2 )
- iobuf_writestr(a, LF );
- /* write the CRC */
- iobuf_put(a, '=');
- radbuf[0] = crc >>16;
- radbuf[1] = crc >> 8;
- radbuf[2] = crc;
- c = bintoasc[(*radbuf >> 2) & 077];
- iobuf_put(a, c);
- c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1] >> 4)&017))&077];
- iobuf_put(a, c);
- c = bintoasc[(((radbuf[1]<<2)&074)|((radbuf[2]>>6)&03))&077];
- iobuf_put(a, c);
- c = bintoasc[radbuf[2]&077];
- iobuf_put(a, c);
- iobuf_writestr(a, LF );
- /* and the the trailer */
- if( afx->what >= DIM(tail_strings) )
- log_bug("afx->what=%d", afx->what);
- iobuf_writestr(a, "-----");
- iobuf_writestr(a, tail_strings[afx->what] );
- iobuf_writestr(a, "-----" LF );
- }
- else if( !afx->any_data && !afx->inp_bypass ) {
- log_error(_("no valid OpenPGP data found.\n"));
- afx->no_openpgp_data = 1;
- write_status_text( STATUS_NODATA, "1" );
- }
- if( afx->truncated )
- log_info(_("invalid armor: line longer than %d characters\n"),
- MAX_LINELEN );
- /* issue an error to enforce dissemination of correct software */
- if( afx->qp_detected )
- log_error(_("quoted printable character in armor - "
- "probably a buggy MTA has been used\n") );
- m_free( afx->buffer );
- afx->buffer = NULL;
- }
- else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "armor_filter";
- return rc;
-}
-
-
-/****************
- * create a radix64 encoded string.
- */
-char *
-make_radix64_string( const byte *data, size_t len )
-{
- char *buffer, *p;
-
- buffer = p = m_alloc( (len+2)/3*4 + 1 );
- for( ; len >= 3 ; len -= 3, data += 3 ) {
- *p++ = bintoasc[(data[0] >> 2) & 077];
- *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077];
- *p++ = bintoasc[(((data[1]<<2)&074)|((data[2]>>6)&03))&077];
- *p++ = bintoasc[data[2]&077];
- }
- if( len == 2 ) {
- *p++ = bintoasc[(data[0] >> 2) & 077];
- *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077];
- *p++ = bintoasc[((data[1]<<2)&074)];
- }
- else if( len == 1 ) {
- *p++ = bintoasc[(data[0] >> 2) & 077];
- *p++ = bintoasc[(data[0] <<4)&060];
- }
- *p = 0;
- return buffer;
-}
-
-
-/***********************************************
- * For the pipemode command we can't use the armor filter for various
- * reasons, so we use this new unarmor_pump stuff to remove the armor
- */
-
-enum unarmor_state_e {
- STA_init = 0,
- STA_bypass,
- STA_wait_newline,
- STA_wait_dash,
- STA_first_dash,
- STA_compare_header,
- STA_found_header_wait_newline,
- STA_skip_header_lines,
- STA_skip_header_lines_non_ws,
- STA_read_data,
- STA_wait_crc,
- STA_read_crc,
- STA_ready
-};
-
-struct unarmor_pump_s {
- enum unarmor_state_e state;
- byte val;
- int checkcrc;
- int pos; /* counts from 0..3 */
- u32 crc;
- u32 mycrc; /* the one store in the data */
-};
-
-
-
-UnarmorPump
-unarmor_pump_new (void)
-{
- UnarmorPump x;
-
- if( !is_initialized )
- initialize();
- x = m_alloc_clear (sizeof *x);
- return x;
-}
-
-void
-unarmor_pump_release (UnarmorPump x)
-{
- m_free (x);
-}
-
-/*
- * Get the next character from the ascii armor taken from the IOBUF
- * created earlier by unarmor_pump_new().
- * Return: c = Character
- * 256 = ignore this value
- * -1 = End of current armor
- * -2 = Premature EOF (not used)
- * -3 = Invalid armor
- */
-int
-unarmor_pump (UnarmorPump x, int c)
-{
- int rval = 256; /* default is to ignore the return value */
-
- switch (x->state) {
- case STA_init:
- {
- byte tmp[1];
- tmp[0] = c;
- if ( is_armored (tmp) )
- x->state = c == '-'? STA_first_dash : STA_wait_newline;
- else {
- x->state = STA_bypass;
- return c;
- }
- }
- break;
- case STA_bypass:
- return c; /* return here to avoid crc calculation */
- case STA_wait_newline:
- if (c == '\n')
- x->state = STA_wait_dash;
- break;
- case STA_wait_dash:
- x->state = c == '-'? STA_first_dash : STA_wait_newline;
- break;
- case STA_first_dash: /* just need for initalization */
- x->pos = 0;
- x->state = STA_compare_header;
- case STA_compare_header:
- if ( "-----BEGIN PGP SIGNATURE-----"[++x->pos] == c ) {
- if ( x->pos == 28 )
- x->state = STA_found_header_wait_newline;
- }
- else
- x->state = c == '\n'? STA_wait_dash : STA_wait_newline;
- break;
- case STA_found_header_wait_newline:
- /* to make CR,LF issues easier we simply allow for white space
- behind the 5 dashes */
- if ( c == '\n' )
- x->state = STA_skip_header_lines;
- else if ( c != '\r' && c != ' ' && c != '\t' )
- x->state = STA_wait_dash; /* garbage after the header line */
- break;
- case STA_skip_header_lines:
- /* i.e. wait for one empty line */
- if ( c == '\n' ) {
- x->state = STA_read_data;
- x->crc = CRCINIT;
- x->val = 0;
- x->pos = 0;
- }
- else if ( c != '\r' && c != ' ' && c != '\t' )
- x->state = STA_skip_header_lines_non_ws;
- break;
- case STA_skip_header_lines_non_ws:
- /* like above but we already encountered non white space */
- if ( c == '\n' )
- x->state = STA_skip_header_lines;
- break;
- case STA_read_data:
- /* fixme: we don't check for the trailing dash lines but rely
- * on the armor stop characters */
- if( c == '\n' || c == ' ' || c == '\r' || c == '\t' )
- break; /* skip all kind of white space */
-
- if( c == '=' ) { /* pad character: stop */
- if( x->pos == 1 ) /* in this case val has some value */
- rval = x->val;
- x->state = STA_wait_crc;
- break;
- }
-
- {
- int c2;
- if( (c = asctobin[(c2=c)]) == 255 ) {
- log_error(_("invalid radix64 character %02x skipped\n"), c2);
- break;
- }
- }
-
- switch(x->pos) {
- case 0:
- x->val = c << 2;
- break;
- case 1:
- x->val |= (c>>4)&3;
- rval = x->val;
- x->val = (c<<4)&0xf0;
- break;
- case 2:
- x->val |= (c>>2)&15;
- rval = x->val;
- x->val = (c<<6)&0xc0;
- break;
- case 3:
- x->val |= c&0x3f;
- rval = x->val;
- break;
- }
- x->pos = (x->pos+1) % 4;
- break;
- case STA_wait_crc:
- if( c == '\n' || c == ' ' || c == '\r' || c == '\t' || c == '=' )
- break; /* skip ws and pad characters */
- /* assume that we are at the next line */
- x->state = STA_read_crc;
- x->pos = 0;
- x->mycrc = 0;
- case STA_read_crc:
- if( (c = asctobin[c]) == 255 ) {
- rval = -1; /* ready */
- if( x->crc != x->mycrc ) {
- log_info (_("CRC error; %06lx - %06lx\n"),
- (ulong)x->crc, (ulong)x->mycrc);
- if ( invalid_crc() )
- rval = -3;
- }
- x->state = STA_ready; /* not sure whether this is correct */
- break;
- }
-
- switch(x->pos) {
- case 0:
- x->val = c << 2;
- break;
- case 1:
- x->val |= (c>>4)&3;
- x->mycrc |= x->val << 16;
- x->val = (c<<4)&0xf0;
- break;
- case 2:
- x->val |= (c>>2)&15;
- x->mycrc |= x->val << 8;
- x->val = (c<<6)&0xc0;
- break;
- case 3:
- x->val |= c&0x3f;
- x->mycrc |= x->val;
- break;
- }
- x->pos = (x->pos+1) % 4;
- break;
- case STA_ready:
- rval = -1;
- break;
- }
-
- if ( !(rval & ~255) ) { /* compute the CRC */
- x->crc = (x->crc << 8) ^ crc_table[((x->crc >> 16)&0xff) ^ rval];
- x->crc &= 0x00ffffff;
- }
-
- return rval;
-}
-
-
diff --git a/g10/build-packet.c b/g10/build-packet.c
deleted file mode 100644
index da1cbbe39..000000000
--- a/g10/build-packet.c
+++ /dev/null
@@ -1,1167 +0,0 @@
-/* build-packet.c - assemble packets and write them
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "mpi.h"
-#include "util.h"
-#include "cipher.h"
-#include "memory.h"
-#include "options.h"
-
-
-static int do_comment( IOBUF out, int ctb, PKT_comment *rem );
-static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid );
-static int do_public_key( IOBUF out, int ctb, PKT_public_key *pk );
-static int do_secret_key( IOBUF out, int ctb, PKT_secret_key *pk );
-static int do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc );
-static int do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc );
-static u32 calc_plaintext( PKT_plaintext *pt );
-static int do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt );
-static int do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed );
-static int do_encrypted_mdc( IOBUF out, int ctb, PKT_encrypted *ed );
-static int do_compressed( IOBUF out, int ctb, PKT_compressed *cd );
-static int do_signature( IOBUF out, int ctb, PKT_signature *sig );
-static int do_onepass_sig( IOBUF out, int ctb, PKT_onepass_sig *ops );
-
-static int calc_header_length( u32 len, int new_ctb );
-static int write_16(IOBUF inp, u16 a);
-static int write_32(IOBUF inp, u32 a);
-static int write_header( IOBUF out, int ctb, u32 len );
-static int write_sign_packet_header( IOBUF out, int ctb, u32 len );
-static int write_header2( IOBUF out, int ctb, u32 len, int hdrlen, int blkmode );
-static int write_new_header( IOBUF out, int ctb, u32 len, int hdrlen );
-static int write_version( IOBUF out, int ctb );
-
-/****************
- * Build a packet and write it to INP
- * Returns: 0 := okay
- * >0 := error
- * Note: Caller must free the packet
- */
-int
-build_packet( IOBUF out, PACKET *pkt )
-{
- int new_ctb=0, rc=0, ctb;
- int pkttype;
-
- if( DBG_PACKET )
- log_debug("build_packet() type=%d\n", pkt->pkttype );
- assert( pkt->pkt.generic );
-
- switch( (pkttype = pkt->pkttype) ) {
- case PKT_OLD_COMMENT: pkttype = pkt->pkttype = PKT_COMMENT; break;
- case PKT_PLAINTEXT: new_ctb = pkt->pkt.plaintext->new_ctb; break;
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC: new_ctb = pkt->pkt.encrypted->new_ctb; break;
- case PKT_COMPRESSED:new_ctb = pkt->pkt.compressed->new_ctb; break;
- case PKT_USER_ID:
- if( pkt->pkt.user_id->attrib_data )
- pkttype = PKT_ATTRIBUTE;
- break;
- default: break;
- }
-
- if( new_ctb || pkttype > 15 ) /* new format */
- ctb = 0xc0 | (pkttype & 0x3f);
- else
- ctb = 0x80 | ((pkttype & 15)<<2);
- switch( pkttype ) {
- case PKT_ATTRIBUTE:
- case PKT_USER_ID:
- rc = do_user_id( out, ctb, pkt->pkt.user_id );
- break;
- case PKT_COMMENT:
- rc = do_comment( out, ctb, pkt->pkt.comment );
- break;
- case PKT_PUBLIC_SUBKEY:
- case PKT_PUBLIC_KEY:
- rc = do_public_key( out, ctb, pkt->pkt.public_key );
- break;
- case PKT_SECRET_SUBKEY:
- case PKT_SECRET_KEY:
- rc = do_secret_key( out, ctb, pkt->pkt.secret_key );
- break;
- case PKT_SYMKEY_ENC:
- rc = do_symkey_enc( out, ctb, pkt->pkt.symkey_enc );
- break;
- case PKT_PUBKEY_ENC:
- rc = do_pubkey_enc( out, ctb, pkt->pkt.pubkey_enc );
- break;
- case PKT_PLAINTEXT:
- rc = do_plaintext( out, ctb, pkt->pkt.plaintext );
- break;
- case PKT_ENCRYPTED:
- rc = do_encrypted( out, ctb, pkt->pkt.encrypted );
- break;
- case PKT_ENCRYPTED_MDC:
- rc = do_encrypted_mdc( out, ctb, pkt->pkt.encrypted );
- break;
- case PKT_COMPRESSED:
- rc = do_compressed( out, ctb, pkt->pkt.compressed );
- break;
- case PKT_SIGNATURE:
- rc = do_signature( out, ctb, pkt->pkt.signature );
- break;
- case PKT_ONEPASS_SIG:
- rc = do_onepass_sig( out, ctb, pkt->pkt.onepass_sig );
- break;
- case PKT_RING_TRUST:
- break; /* ignore it (keyring.c does write it directly)*/
- case PKT_MDC: /* we write it directly, so we should never see it here. */
- default:
- log_bug("invalid packet type in build_packet()\n");
- break;
- }
-
- return rc;
-}
-
-/****************
- * calculate the length of a packet described by PKT
- */
-u32
-calc_packet_length( PACKET *pkt )
-{
- u32 n=0;
- int new_ctb = 0;
-
- assert( pkt->pkt.generic );
- switch( pkt->pkttype ) {
- case PKT_PLAINTEXT:
- n = calc_plaintext( pkt->pkt.plaintext );
- new_ctb = pkt->pkt.plaintext->new_ctb;
- break;
- case PKT_ATTRIBUTE:
- case PKT_USER_ID:
- case PKT_COMMENT:
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- case PKT_SYMKEY_ENC:
- case PKT_PUBKEY_ENC:
- case PKT_ENCRYPTED:
- case PKT_SIGNATURE:
- case PKT_ONEPASS_SIG:
- case PKT_RING_TRUST:
- case PKT_COMPRESSED:
- default:
- log_bug("invalid packet type in calc_packet_length()");
- break;
- }
-
- n += calc_header_length(n, new_ctb);
- return n;
-}
-
-static void
-write_fake_data( IOBUF out, MPI a )
-{
- if( a ) {
- int i;
- void *p;
-
- p = mpi_get_opaque( a, &i );
- iobuf_write( out, p, i );
- }
-}
-
-
-static int
-do_comment( IOBUF out, int ctb, PKT_comment *rem )
-{
- if( opt.sk_comments ) {
- write_header(out, ctb, rem->len);
- if( iobuf_write( out, rem->data, rem->len ) )
- return G10ERR_WRITE_FILE;
- }
- return 0;
-}
-
-static int
-do_user_id( IOBUF out, int ctb, PKT_user_id *uid )
-{
- if( uid->attrib_data ) {
- write_header(out, ctb, uid->attrib_len);
- if( iobuf_write( out, uid->attrib_data, uid->attrib_len ) )
- return G10ERR_WRITE_FILE;
- }
- else {
- write_header(out, ctb, uid->len);
- if( iobuf_write( out, uid->name, uid->len ) )
- return G10ERR_WRITE_FILE;
- }
- return 0;
-}
-
-static int
-do_public_key( IOBUF out, int ctb, PKT_public_key *pk )
-{
- int rc = 0;
- int n, i;
- IOBUF a = iobuf_temp();
-
- if( !pk->version )
- iobuf_put( a, 3 );
- else
- iobuf_put( a, pk->version );
- write_32(a, pk->timestamp );
- if( pk->version < 4 ) {
- u16 ndays;
- if( pk->expiredate )
- ndays = (u16)((pk->expiredate - pk->timestamp) / 86400L);
- else
- ndays = 0;
- write_16(a, ndays );
- }
- iobuf_put(a, pk->pubkey_algo );
- n = pubkey_get_npkey( pk->pubkey_algo );
- if( !n )
- write_fake_data( a, pk->pkey[0] );
- for(i=0; i < n; i++ )
- mpi_write(a, pk->pkey[i] );
-
- write_header2(out, ctb, iobuf_get_temp_length(a), pk->hdrbytes, 1 );
- if( iobuf_write_temp( out, a ) )
- rc = G10ERR_WRITE_FILE;
-
- iobuf_close(a);
- return rc;
-}
-
-
-/****************
- * Make a hash value from the public key certificate
- */
-void
-hash_public_key( MD_HANDLE md, PKT_public_key *pk )
-{
- PACKET pkt;
- int rc = 0;
- int ctb;
- ulong pktlen;
- int c;
- IOBUF a = iobuf_temp();
- #if 0
- FILE *fp = fopen("dump.pk", "a");
- int i=0;
-
- fprintf(fp, "\nHashing PK (v%d):\n", pk->version);
- #endif
-
- /* build the packet */
- init_packet(&pkt);
- pkt.pkttype = PKT_PUBLIC_KEY;
- pkt.pkt.public_key = pk;
- if( (rc = build_packet( a, &pkt )) )
- log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc));
-
- if( !(pk->version == 3 && pk->pubkey_algo == 16) ) {
- /* skip the constructed header but don't do this for our very old
- * v3 ElG keys */
- ctb = iobuf_get_noeof(a);
- pktlen = 0;
- if( (ctb & 0x40) ) {
- c = iobuf_get_noeof(a);
- if( c < 192 )
- pktlen = c;
- else if( c < 224 ) {
- pktlen = (c - 192) * 256;
- c = iobuf_get_noeof(a);
- pktlen += c + 192;
- }
- else if( c == 255 ) {
- pktlen = iobuf_get_noeof(a) << 24;
- pktlen |= iobuf_get_noeof(a) << 16;
- pktlen |= iobuf_get_noeof(a) << 8;
- pktlen |= iobuf_get_noeof(a);
- }
- }
- else {
- int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
- for( ; lenbytes; lenbytes-- ) {
- pktlen <<= 8;
- pktlen |= iobuf_get_noeof(a);
- }
- }
- /* hash a header */
- md_putc( md, 0x99 );
- pktlen &= 0xffff; /* can't handle longer packets */
- md_putc( md, pktlen >> 8 );
- md_putc( md, pktlen & 0xff );
- }
- /* hash the packet body */
- while( (c=iobuf_get(a)) != -1 ) {
- #if 0
- fprintf( fp," %02x", c );
- if( (++i == 24) ) {
- putc('\n', fp);
- i=0;
- }
- #endif
- md_putc( md, c );
- }
- #if 0
- putc('\n', fp);
- fclose(fp);
- #endif
- iobuf_cancel(a);
-}
-
-
-static int
-do_secret_key( IOBUF out, int ctb, PKT_secret_key *sk )
-{
- int rc = 0;
- int i, nskey, npkey;
- IOBUF a = iobuf_temp(); /* build in a self-enlarging buffer */
-
- /* Write the version number - if none is specified, use 3 */
- if( !sk->version )
- iobuf_put( a, 3 );
- else
- iobuf_put( a, sk->version );
- write_32(a, sk->timestamp );
-
- /* v3 needs the expiration time */
- if( sk->version < 4 ) {
- u16 ndays;
- if( sk->expiredate )
- ndays = (u16)((sk->expiredate - sk->timestamp) / 86400L);
- else
- ndays = 0;
- write_16(a, ndays);
- }
-
- iobuf_put(a, sk->pubkey_algo );
-
- /* get number of secret and public parameters. They are held in
- one array first the public ones, then the secret ones */
- nskey = pubkey_get_nskey( sk->pubkey_algo );
- npkey = pubkey_get_npkey( sk->pubkey_algo );
-
- /* If we don't have any public parameters - which is the case if
- we don't know the algorithm used - the parameters are stored as
- one blob in a faked (opaque) MPI */
- if( !npkey ) {
- write_fake_data( a, sk->skey[0] );
- goto leave;
- }
- assert( npkey < nskey );
-
- /* Writing the public parameters is easy */
- for(i=0; i < npkey; i++ )
- mpi_write(a, sk->skey[i] );
-
- /* build the header for protected (encrypted) secret parameters */
- if( sk->is_protected ) {
- if( is_RSA(sk->pubkey_algo) && sk->version < 4
- && !sk->protect.s2k.mode ) {
- /* the simple rfc1991 (v3) way */
- iobuf_put(a, sk->protect.algo );
- iobuf_write(a, sk->protect.iv, sk->protect.ivlen );
- }
- else {
- /* OpenPGP protection according to rfc2440 */
- iobuf_put(a, sk->protect.sha1chk? 0xfe : 0xff );
- iobuf_put(a, sk->protect.algo );
- if( sk->protect.s2k.mode >= 1000 ) {
- /* These modes are not possible in OpenPGP, we use them
- to implement our extensions, 101 can be seen as a
- private/experimental extension (this is not
- specified in rfc2440 but the same scheme is used
- for all other algorithm identifiers) */
- iobuf_put(a, 101 );
- iobuf_put(a, sk->protect.s2k.hash_algo );
- iobuf_write(a, "GNU", 3 );
- iobuf_put(a, sk->protect.s2k.mode - 1000 );
- }
- else {
- iobuf_put(a, sk->protect.s2k.mode );
- iobuf_put(a, sk->protect.s2k.hash_algo );
- }
- if( sk->protect.s2k.mode == 1
- || sk->protect.s2k.mode == 3 )
- iobuf_write(a, sk->protect.s2k.salt, 8 );
- if( sk->protect.s2k.mode == 3 )
- iobuf_put(a, sk->protect.s2k.count );
-
- /* For out special mode 1001 we do not need an IV */
- if( sk->protect.s2k.mode != 1001 )
- iobuf_write(a, sk->protect.iv, sk->protect.ivlen );
- }
- }
- else
- iobuf_put(a, 0 );
-
- if( sk->protect.s2k.mode == 1001 )
- ; /* GnuPG extension - don't write a secret key at all */
- else if( sk->is_protected && sk->version >= 4 ) {
- /* The secret key is protected - write it out as it is */
- byte *p;
- assert( mpi_is_opaque( sk->skey[npkey] ) );
- p = mpi_get_opaque( sk->skey[npkey], &i );
- iobuf_write(a, p, i );
- }
- else if( sk->is_protected ) {
- /* The secret key is protected te old v4 way. */
- for( ; i < nskey; i++ ) {
- byte *p;
- int ndata;
-
- assert (mpi_is_opaque (sk->skey[i]));
- p = mpi_get_opaque (sk->skey[i], &ndata);
- iobuf_write (a, p, ndata);
- }
- write_16(a, sk->csum );
- }
- else {
- /* non-protected key */
- for( ; i < nskey; i++ )
- mpi_write(a, sk->skey[i] );
- write_16(a, sk->csum );
- }
-
- leave:
- /* Build the header of the packet - which we must do after writing all
- the other stuff, so that we know the length of the packet */
- write_header2(out, ctb, iobuf_get_temp_length(a), sk->hdrbytes, 1 );
- /* And finally write it out the real stream */
- if( iobuf_write_temp( out, a ) )
- rc = G10ERR_WRITE_FILE;
-
- iobuf_close(a); /* close the remporary buffer */
- return rc;
-}
-
-static int
-do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc )
-{
- int rc = 0;
- IOBUF a = iobuf_temp();
-
- assert( enc->version == 4 );
- switch( enc->s2k.mode ) {
- case 0: case 1: case 3: break;
- default: log_bug("do_symkey_enc: s2k=%d\n", enc->s2k.mode );
- }
- iobuf_put( a, enc->version );
- iobuf_put( a, enc->cipher_algo );
- iobuf_put( a, enc->s2k.mode );
- iobuf_put( a, enc->s2k.hash_algo );
- if( enc->s2k.mode == 1 || enc->s2k.mode == 3 ) {
- iobuf_write(a, enc->s2k.salt, 8 );
- if( enc->s2k.mode == 3 )
- iobuf_put(a, enc->s2k.count);
- }
- if( enc->seskeylen )
- iobuf_write(a, enc->seskey, enc->seskeylen );
-
- write_header(out, ctb, iobuf_get_temp_length(a) );
- if( iobuf_write_temp( out, a ) )
- rc = G10ERR_WRITE_FILE;
-
- iobuf_close(a);
- return rc;
-}
-
-
-
-
-static int
-do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc )
-{
- int rc = 0;
- int n, i;
- IOBUF a = iobuf_temp();
-
- write_version( a, ctb );
- if( enc->throw_keyid ) {
- write_32(a, 0 ); /* don't tell Eve who can decrypt the message */
- write_32(a, 0 );
- }
- else {
- write_32(a, enc->keyid[0] );
- write_32(a, enc->keyid[1] );
- }
- iobuf_put(a,enc->pubkey_algo );
- n = pubkey_get_nenc( enc->pubkey_algo );
- if( !n )
- write_fake_data( a, enc->data[0] );
- for(i=0; i < n; i++ )
- mpi_write(a, enc->data[i] );
-
- write_header(out, ctb, iobuf_get_temp_length(a) );
- if( iobuf_write_temp( out, a ) )
- rc = G10ERR_WRITE_FILE;
-
- iobuf_close(a);
- return rc;
-}
-
-
-
-
-static u32
-calc_plaintext( PKT_plaintext *pt )
-{
- return pt->len? (1 + 1 + pt->namelen + 4 + pt->len) : 0;
-}
-
-static int
-do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt )
-{
- int i, rc = 0;
- u32 n;
- byte buf[1000]; /* this buffer has the plaintext! */
- int nbytes;
-
- write_header(out, ctb, calc_plaintext( pt ) );
- iobuf_put(out, pt->mode );
- iobuf_put(out, pt->namelen );
- for(i=0; i < pt->namelen; i++ )
- iobuf_put(out, pt->name[i] );
- if( write_32(out, pt->timestamp ) )
- rc = G10ERR_WRITE_FILE;
-
- n = 0;
- while( (nbytes=iobuf_read(pt->buf, buf, 1000)) != -1 ) {
- if( iobuf_write(out, buf, nbytes) == -1 ) {
- rc = G10ERR_WRITE_FILE;
- break;
- }
- n += nbytes;
- }
- memset(buf,0,1000); /* at least burn the buffer */
- if( !pt->len )
- iobuf_set_block_mode(out, 0 ); /* write end marker */
- else if( n != pt->len )
- log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n",
- (ulong)n, (ulong)pt->len );
-
- return rc;
-}
-
-
-
-static int
-do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed )
-{
- int rc = 0;
- u32 n;
-
- n = ed->len ? (ed->len + ed->extralen) : 0;
- write_header(out, ctb, n );
-
- /* This is all. The caller has to write the real data */
-
- return rc;
-}
-
-static int
-do_encrypted_mdc( IOBUF out, int ctb, PKT_encrypted *ed )
-{
- int rc = 0;
- u32 n;
-
- assert( ed->mdc_method );
-
- /* Take version number and the following MDC packet in account. */
- n = ed->len ? (ed->len + ed->extralen + 1 + 22) : 0;
- write_header(out, ctb, n );
- iobuf_put(out, 1 ); /* version */
-
- /* This is all. The caller has to write the real data */
-
- return rc;
-}
-
-
-static int
-do_compressed( IOBUF out, int ctb, PKT_compressed *cd )
-{
- int rc = 0;
-
- /* We must use the old convention and don't use blockmode for tyhe
- sake of PGP 2 compatibility. However if the new_ctb flag was
- set, CTB is already formatted as new style and write_header2
- does create a partial length encoding using new the new
- style. */
- write_header2(out, ctb, 0, 0, 0 );
- iobuf_put(out, cd->algorithm );
-
- /* This is all. The caller has to write the real data */
-
- return rc;
-}
-
-
-/****************
- * Delete all subpackets of type REQTYPE and return a bool whether a packet
- * was deleted.
- */
-int
-delete_sig_subpkt (subpktarea_t *area, sigsubpkttype_t reqtype )
-{
- int buflen;
- sigsubpkttype_t type;
- byte *buffer, *bufstart;
- size_t n;
- size_t unused = 0;
- int okay = 0;
-
- if( !area )
- return 0;
- buflen = area->len;
- buffer = area->data;
- for(;;) {
- if( !buflen ) {
- okay = 1;
- break;
- }
- bufstart = buffer;
- n = *buffer++; buflen--;
- if( n == 255 ) {
- if( buflen < 4 )
- break;
- n = (buffer[0] << 24) | (buffer[1] << 16)
- | (buffer[2] << 8) | buffer[3];
- buffer += 4;
- buflen -= 4;
- }
- else if( n >= 192 ) {
- if( buflen < 2 )
- break;
- n = (( n - 192 ) << 8) + *buffer + 192;
- buffer++;
- buflen--;
- }
- if( buflen < n )
- break;
-
- type = *buffer & 0x7f;
- if( type == reqtype ) {
- buffer++;
- buflen--;
- n--;
- if( n > buflen )
- break;
- buffer += n; /* point to next subpkt */
- buflen -= n;
- memmove (bufstart, buffer, buflen); /* shift */
- unused += buffer - bufstart;
- buffer = bufstart;
- }
- else {
- buffer += n; buflen -=n;
- }
- }
-
- if (!okay)
- log_error ("delete_subpkt: buffer shorter than subpacket\n");
- assert (unused <= area->len);
- area->len -= unused;
- return !!unused;
-}
-
-
-/****************
- * Create or update a signature subpacket for SIG of TYPE. This
- * functions knows where to put the data (hashed or unhashed). The
- * function may move data from the unhashed part to the hashed one.
- * Note: All pointers into sig->[un]hashed (e.g. returned by
- * parse_sig_subpkt) are not valid after a call to this function. The
- * data to put into the subpaket should be in a buffer with a length
- * of buflen.
- */
-void
-build_sig_subpkt (PKT_signature *sig, sigsubpkttype_t type,
- const byte *buffer, size_t buflen )
-{
- byte *p;
- int critical, hashed;
- subpktarea_t *oldarea, *newarea;
- size_t nlen, n, n0;
-
- critical = (type & SIGSUBPKT_FLAG_CRITICAL);
- type &= ~SIGSUBPKT_FLAG_CRITICAL;
-
- /* Sanity check buffer sizes */
- if(parse_one_sig_subpkt(buffer,buflen,type)<0)
- BUG();
-
- switch(type)
- {
- case SIGSUBPKT_NOTATION:
- case SIGSUBPKT_POLICY:
- case SIGSUBPKT_REV_KEY:
- /* we do allow multiple subpackets */
- break;
-
- default:
- /* we don't allow multiple subpackets */
- delete_sig_subpkt(sig->hashed,type);
- delete_sig_subpkt(sig->unhashed,type);
- break;
- }
-
- /* Any special magic that needs to be done for this type so the
- packet doesn't need to be reparsed? */
- switch(type)
- {
- case SIGSUBPKT_NOTATION:
- sig->flags.notation=1;
- break;
-
- case SIGSUBPKT_POLICY:
- sig->flags.policy_url=1;
- break;
-
- case SIGSUBPKT_EXPORTABLE:
- if(buffer[0])
- sig->flags.exportable=1;
- else
- sig->flags.exportable=0;
- break;
-
- case SIGSUBPKT_REVOCABLE:
- if(buffer[0])
- sig->flags.revocable=1;
- else
- sig->flags.revocable=0;
- break;
-
- default:
- break;
- }
-
- if( (buflen+1) >= 8384 )
- nlen = 5; /* write 5 byte length header */
- else if( (buflen+1) >= 192 )
- nlen = 2; /* write 2 byte length header */
- else
- nlen = 1; /* just a 1 byte length header */
-
- switch( type ) {
- case SIGSUBPKT_PRIV_VERIFY_CACHE: /*(obsolete)*/
- BUG();
- break;
- case SIGSUBPKT_ISSUER:
- hashed = 0;
- break;
- default:
- hashed = 1;
- break;
- }
-
- if( critical )
- type |= SIGSUBPKT_FLAG_CRITICAL;
-
- oldarea = hashed? sig->hashed : sig->unhashed;
-
- /* Calculate new size of the area and allocate */
- n0 = oldarea? oldarea->len : 0;
- n = n0 + nlen + 1 + buflen; /* length, type, buffer */
- if (oldarea && n <= oldarea->size) { /* fits into the unused space */
- newarea = oldarea;
- /*log_debug ("updating area for type %d\n", type );*/
- }
- else if (oldarea) {
- newarea = m_realloc (oldarea, sizeof (*newarea) + n - 1);
- newarea->size = n;
- /*log_debug ("reallocating area for type %d\n", type );*/
- }
- else {
- newarea = m_alloc (sizeof (*newarea) + n - 1);
- newarea->size = n;
- /*log_debug ("allocating area for type %d\n", type );*/
- }
- newarea->len = n;
-
- p = newarea->data + n0;
- if (nlen == 5) {
- *p++ = 255;
- *p++ = (buflen+1) >> 24;
- *p++ = (buflen+1) >> 16;
- *p++ = (buflen+1) >> 8;
- *p++ = (buflen+1);
- *p++ = type;
- memcpy (p, buffer, buflen);
- }
- else if (nlen == 2) {
- *p++ = (buflen+1-192) / 256 + 192;
- *p++ = (buflen+1-192) % 256;
- *p++ = type;
- memcpy (p, buffer, buflen);
- }
- else {
- *p++ = buflen+1;
- *p++ = type;
- memcpy (p, buffer, buflen);
- }
-
- if (hashed)
- sig->hashed = newarea;
- else
- sig->unhashed = newarea;
-}
-
-/****************
- * Put all the required stuff from SIG into subpackets of sig.
- * Hmmm, should we delete those subpackets which are in a wrong area?
- */
-void
-build_sig_subpkt_from_sig( PKT_signature *sig )
-{
- u32 u;
- byte buf[8];
-
- u = sig->keyid[0];
- buf[0] = (u >> 24) & 0xff;
- buf[1] = (u >> 16) & 0xff;
- buf[2] = (u >> 8) & 0xff;
- buf[3] = u & 0xff;
- u = sig->keyid[1];
- buf[4] = (u >> 24) & 0xff;
- buf[5] = (u >> 16) & 0xff;
- buf[6] = (u >> 8) & 0xff;
- buf[7] = u & 0xff;
- build_sig_subpkt( sig, SIGSUBPKT_ISSUER, buf, 8 );
-
- u = sig->timestamp;
- buf[0] = (u >> 24) & 0xff;
- buf[1] = (u >> 16) & 0xff;
- buf[2] = (u >> 8) & 0xff;
- buf[3] = u & 0xff;
- build_sig_subpkt( sig, SIGSUBPKT_SIG_CREATED, buf, 4 );
-
- if(sig->expiredate)
- {
- u = sig->expiredate-sig->timestamp;
- buf[0] = (u >> 24) & 0xff;
- buf[1] = (u >> 16) & 0xff;
- buf[2] = (u >> 8) & 0xff;
- buf[3] = u & 0xff;
-
- /* Mark this CRITICAL, so if any implementation doesn't
- understand sigs that can expire, it'll just disregard this
- sig altogether. */
-
- build_sig_subpkt( sig, SIGSUBPKT_SIG_EXPIRE | SIGSUBPKT_FLAG_CRITICAL,
- buf, 4 );
- }
-}
-
-void
-build_attribute_subpkt(PKT_user_id *uid,byte type,
- const void *buf,u32 buflen,
- const void *header,u32 headerlen)
-{
- byte *attrib;
- int idx;
-
- if(1+headerlen+buflen>8383)
- idx=5;
- else if(1+headerlen+buflen>191)
- idx=2;
- else
- idx=1;
-
- /* realloc uid->attrib_data to the right size */
-
- uid->attrib_data=m_realloc(uid->attrib_data,
- uid->attrib_len+idx+1+headerlen+buflen);
-
- attrib=&uid->attrib_data[uid->attrib_len];
-
- if(idx==5)
- {
- attrib[0]=255;
- attrib[1]=(1+headerlen+buflen) >> 24;
- attrib[2]=(1+headerlen+buflen) >> 16;
- attrib[3]=(1+headerlen+buflen) >> 8;
- attrib[4]=1+headerlen+buflen;
- }
- else if(idx==2)
- {
- attrib[0]=(1+headerlen+buflen-192) / 256 + 192;
- attrib[1]=(1+headerlen+buflen-192) % 256;
- }
- else
- attrib[0]=1+headerlen+buflen; /* Good luck finding a JPEG this small! */
-
- attrib[idx++]=type;
-
- /* Tack on our data at the end */
-
- if(headerlen>0)
- memcpy(&attrib[idx],header,headerlen);
- memcpy(&attrib[idx+headerlen],buf,buflen);
- uid->attrib_len+=idx+headerlen+buflen;
-}
-
-static int
-do_signature( IOBUF out, int ctb, PKT_signature *sig )
-{
- int rc = 0;
- int n, i;
- IOBUF a = iobuf_temp();
-
- if( !sig->version )
- iobuf_put( a, 3 );
- else
- iobuf_put( a, sig->version );
- if( sig->version < 4 )
- iobuf_put(a, 5 ); /* constant */
- iobuf_put(a, sig->sig_class );
- if( sig->version < 4 ) {
- write_32(a, sig->timestamp );
- write_32(a, sig->keyid[0] );
- write_32(a, sig->keyid[1] );
- }
- iobuf_put(a, sig->pubkey_algo );
- iobuf_put(a, sig->digest_algo );
- if( sig->version >= 4 ) {
- size_t nn;
- /* timestamp and keyid must have been packed into the
- * subpackets prior to the call of this function, because
- * these subpackets are hashed */
- nn = sig->hashed? sig->hashed->len : 0;
- write_16(a, nn);
- if( nn )
- iobuf_write( a, sig->hashed->data, nn );
- nn = sig->unhashed? sig->unhashed->len : 0;
- write_16(a, nn);
- if( nn )
- iobuf_write( a, sig->unhashed->data, nn );
- }
- iobuf_put(a, sig->digest_start[0] );
- iobuf_put(a, sig->digest_start[1] );
- n = pubkey_get_nsig( sig->pubkey_algo );
- if( !n )
- write_fake_data( a, sig->data[0] );
- for(i=0; i < n; i++ )
- mpi_write(a, sig->data[i] );
-
- if( is_RSA(sig->pubkey_algo) && sig->version < 4 )
- write_sign_packet_header(out, ctb, iobuf_get_temp_length(a) );
- else
- write_header(out, ctb, iobuf_get_temp_length(a) );
- if( iobuf_write_temp( out, a ) )
- rc = G10ERR_WRITE_FILE;
-
- iobuf_close(a);
- return rc;
-}
-
-
-static int
-do_onepass_sig( IOBUF out, int ctb, PKT_onepass_sig *ops )
-{
- int rc = 0;
- IOBUF a = iobuf_temp();
-
- write_version( a, ctb );
- iobuf_put(a, ops->sig_class );
- iobuf_put(a, ops->digest_algo );
- iobuf_put(a, ops->pubkey_algo );
- write_32(a, ops->keyid[0] );
- write_32(a, ops->keyid[1] );
- iobuf_put(a, ops->last );
-
- write_header(out, ctb, iobuf_get_temp_length(a) );
- if( iobuf_write_temp( out, a ) )
- rc = G10ERR_WRITE_FILE;
-
- iobuf_close(a);
- return rc;
-}
-
-
-static int
-write_16(IOBUF out, u16 a)
-{
- iobuf_put(out, a>>8);
- if( iobuf_put(out,a) )
- return -1;
- return 0;
-}
-
-static int
-write_32(IOBUF out, u32 a)
-{
- iobuf_put(out, a>> 24);
- iobuf_put(out, a>> 16);
- iobuf_put(out, a>> 8);
- if( iobuf_put(out, a) )
- return -1;
- return 0;
-}
-
-
-/****************
- * calculate the length of a header
- */
-static int
-calc_header_length( u32 len, int new_ctb )
-{
- if( !len )
- return 1; /* only the ctb */
-
- if( new_ctb ) {
- if( len < 192 )
- return 2;
- if( len < 8384 )
- return 3;
- else
- return 6;
- }
- if( len < 256 )
- return 2;
- if( len < 65536 )
- return 3;
-
- return 5;
-}
-
-/****************
- * Write the CTB and the packet length
- */
-static int
-write_header( IOBUF out, int ctb, u32 len )
-{
- return write_header2( out, ctb, len, 0, 1 );
-}
-
-
-static int
-write_sign_packet_header( IOBUF out, int ctb, u32 len )
-{
- /* work around a bug in the pgp read function for signature packets,
- * which are not correctly coded and silently assume at some
- * point 2 byte length headers.*/
- iobuf_put(out, 0x89 );
- iobuf_put(out, len >> 8 );
- return iobuf_put(out, len ) == -1 ? -1:0;
-}
-
-/****************
- * if HDRLEN is > 0, try to build a header of this length.
- * we need this, so that we can hash packets without reading them again.
- */
-static int
-write_header2( IOBUF out, int ctb, u32 len, int hdrlen, int blkmode )
-{
- if( ctb & 0x40 )
- return write_new_header( out, ctb, len, hdrlen );
-
- if( hdrlen ) {
- if( !len )
- ctb |= 3;
- else if( hdrlen == 2 && len < 256 )
- ;
- else if( hdrlen == 3 && len < 65536 )
- ctb |= 1;
- else
- ctb |= 2;
- }
- else {
- if( !len )
- ctb |= 3;
- else if( len < 256 )
- ;
- else if( len < 65536 )
- ctb |= 1;
- else
- ctb |= 2;
- }
- if( iobuf_put(out, ctb ) )
- return -1;
- if( !len ) {
- if( blkmode )
- iobuf_set_block_mode(out, 8196 );
- }
- else {
- if( ctb & 2 ) {
- iobuf_put(out, len >> 24 );
- iobuf_put(out, len >> 16 );
- }
- if( ctb & 3 )
- iobuf_put(out, len >> 8 );
- if( iobuf_put(out, len ) )
- return -1;
- }
- return 0;
-}
-
-
-static int
-write_new_header( IOBUF out, int ctb, u32 len, int hdrlen )
-{
- if( hdrlen )
- log_bug("can't cope with hdrlen yet\n");
-
- if( iobuf_put(out, ctb ) )
- return -1;
- if( !len ) {
- iobuf_set_partial_block_mode(out, 512 );
- }
- else {
- if( len < 192 ) {
- if( iobuf_put(out, len ) )
- return -1;
- }
- else if( len < 8384 ) {
- len -= 192;
- if( iobuf_put( out, (len / 256) + 192) )
- return -1;
- if( iobuf_put( out, (len % 256) ) )
- return -1;
- }
- else {
- if( iobuf_put( out, 0xff ) )
- return -1;
- if( iobuf_put( out, (len >> 24)&0xff ) )
- return -1;
- if( iobuf_put( out, (len >> 16)&0xff ) )
- return -1;
- if( iobuf_put( out, (len >> 8)&0xff ) )
- return -1;
- if( iobuf_put( out, len & 0xff ) )
- return -1;
- }
- }
- return 0;
-}
-
-static int
-write_version( IOBUF out, int ctb )
-{
- if( iobuf_put( out, 3 ) )
- return -1;
- return 0;
-}
-
diff --git a/g10/cipher.c b/g10/cipher.c
deleted file mode 100644
index cb9f14916..000000000
--- a/g10/cipher.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* cipher.c - En-/De-ciphering filter
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "errors.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-#include "filter.h"
-#include "packet.h"
-#include "options.h"
-#include "main.h"
-#include "status.h"
-
-
-#define MIN_PARTIAL_SIZE 512
-
-
-static void
-write_header( cipher_filter_context_t *cfx, IOBUF a )
-{
- PACKET pkt;
- PKT_encrypted ed;
- byte temp[18];
- unsigned blocksize;
- unsigned nprefix;
-
- blocksize = cipher_get_blocksize( cfx->dek->algo );
- if( blocksize < 8 || blocksize > 16 )
- log_fatal("unsupported blocksize %u\n", blocksize );
-
- memset( &ed, 0, sizeof ed );
- ed.len = cfx->datalen;
- ed.extralen = blocksize+2;
- ed.new_ctb = !ed.len && !opt.rfc1991;
- if( cfx->dek->use_mdc ) {
- ed.mdc_method = DIGEST_ALGO_SHA1;
- cfx->mdc_hash = md_open( DIGEST_ALGO_SHA1, 0 );
- if ( DBG_HASHING )
- md_start_debug( cfx->mdc_hash, "creatmdc" );
- }
-
- {
- char buf[20];
-
- sprintf (buf, "%d %d", ed.mdc_method, cfx->dek->algo);
- write_status_text (STATUS_BEGIN_ENCRYPTION, buf);
- }
-
- init_packet( &pkt );
- pkt.pkttype = cfx->dek->use_mdc? PKT_ENCRYPTED_MDC : PKT_ENCRYPTED;
- pkt.pkt.encrypted = &ed;
- if( build_packet( a, &pkt ))
- log_bug("build_packet(ENCR_DATA) failed\n");
- nprefix = blocksize;
- randomize_buffer( temp, nprefix, 1 );
- temp[nprefix] = temp[nprefix-2];
- temp[nprefix+1] = temp[nprefix-1];
- print_cipher_algo_note( cfx->dek->algo );
- cfx->cipher_hd = cipher_open( cfx->dek->algo,
- cfx->dek->use_mdc? CIPHER_MODE_CFB
- : CIPHER_MODE_AUTO_CFB, 1 );
-/* log_hexdump( "thekey", cfx->dek->key, cfx->dek->keylen );*/
- cipher_setkey( cfx->cipher_hd, cfx->dek->key, cfx->dek->keylen );
- cipher_setiv( cfx->cipher_hd, NULL, 0 );
-/* log_hexdump( "prefix", temp, nprefix+2 ); */
- if( cfx->mdc_hash ) /* hash the "IV" */
- md_write( cfx->mdc_hash, temp, nprefix+2 );
- cipher_encrypt( cfx->cipher_hd, temp, temp, nprefix+2);
- cipher_sync( cfx->cipher_hd );
- iobuf_write(a, temp, nprefix+2);
- cfx->header=1;
-}
-
-
-
-/****************
- * This filter is used to en/de-cipher data with a conventional algorithm
- */
-int
-cipher_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len)
-{
- size_t size = *ret_len;
- cipher_filter_context_t *cfx = opaque;
- int rc=0;
-
- if( control == IOBUFCTRL_UNDERFLOW ) { /* decrypt */
- rc = -1; /* not yet used */
- }
- else if( control == IOBUFCTRL_FLUSH ) { /* encrypt */
- assert(a);
- if( !cfx->header ) {
- write_header( cfx, a );
- }
- if( cfx->mdc_hash )
- md_write( cfx->mdc_hash, buf, size );
- cipher_encrypt( cfx->cipher_hd, buf, buf, size);
- if( iobuf_write( a, buf, size ) )
- rc = G10ERR_WRITE_FILE;
- }
- else if( control == IOBUFCTRL_FREE ) {
- if( cfx->mdc_hash ) {
- byte *hash;
- int hashlen = md_digest_length( md_get_algo( cfx->mdc_hash ) );
- byte temp[22];
-
- assert( hashlen == 20 );
- /* we must hash the prefix of the MDC packet here */
- temp[0] = 0xd3;
- temp[1] = 0x14;
- md_putc( cfx->mdc_hash, temp[0] );
- md_putc( cfx->mdc_hash, temp[1] );
-
- md_final( cfx->mdc_hash );
- hash = md_read( cfx->mdc_hash, 0 );
- memcpy(temp+2, hash, 20);
- cipher_encrypt( cfx->cipher_hd, temp, temp, 22 );
- md_close( cfx->mdc_hash ); cfx->mdc_hash = NULL;
- if( iobuf_write( a, temp, 22 ) )
- log_error("writing MDC packet failed\n" );
- }
- cipher_close(cfx->cipher_hd);
- }
- else if( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "cipher_filter";
- }
- return rc;
-}
diff --git a/g10/compress.c b/g10/compress.c
deleted file mode 100644
index 6ea84f6cd..000000000
--- a/g10/compress.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* compress.c - compress filter
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <assert.h>
-#include <errno.h>
-#include <zlib.h>
-
-#include "util.h"
-#include "memory.h"
-#include "packet.h"
-#include "filter.h"
-#include "main.h"
-#include "options.h"
-
-
-static void
-init_compress( compress_filter_context_t *zfx, z_stream *zs )
-{
- int rc;
- int level;
-
- if( opt.compress >= 0 && opt.compress <= 9 )
- level = opt.compress;
- else if( opt.compress == -1 )
- level = Z_DEFAULT_COMPRESSION;
- else if( opt.compress == 10 ) /* remove this ! */
- level = 0;
- else {
- log_error("invalid compression level; using default level\n");
- level = Z_DEFAULT_COMPRESSION;
- }
-
-
- if( (rc = zfx->algo == 1? deflateInit2( zs, level, Z_DEFLATED,
- -13, 8, Z_DEFAULT_STRATEGY)
- : deflateInit( zs, level )
- ) != Z_OK ) {
- log_fatal("zlib problem: %s\n", zs->msg? zs->msg :
- rc == Z_MEM_ERROR ? "out of core" :
- rc == Z_VERSION_ERROR ? "invalid lib version" :
- "unknown error" );
- }
-
- zfx->outbufsize = 8192;
- zfx->outbuf = m_alloc( zfx->outbufsize );
-}
-
-static int
-do_compress( compress_filter_context_t *zfx, z_stream *zs, int flush, IOBUF a )
-{
- int zrc;
- unsigned n;
-
- do {
-#ifndef __riscos__
- zs->next_out = zfx->outbuf;
-#else /* __riscos__ */
- zs->next_out = (Bytef *) zfx->outbuf;
-#endif /* __riscos__ */
- zs->avail_out = zfx->outbufsize;
- if( DBG_FILTER )
- log_debug("enter deflate: avail_in=%u, avail_out=%u, flush=%d\n",
- (unsigned)zs->avail_in, (unsigned)zs->avail_out, flush );
- zrc = deflate( zs, flush );
- if( zrc == Z_STREAM_END && flush == Z_FINISH )
- ;
- else if( zrc != Z_OK ) {
- if( zs->msg )
- log_fatal("zlib deflate problem: %s\n", zs->msg );
- else
- log_fatal("zlib deflate problem: rc=%d\n", zrc );
- }
- n = zfx->outbufsize - zs->avail_out;
- if( DBG_FILTER )
- log_debug("leave deflate: "
- "avail_in=%u, avail_out=%u, n=%u, zrc=%d\n",
- (unsigned)zs->avail_in, (unsigned)zs->avail_out,
- (unsigned)n, zrc );
-
- if( iobuf_write( a, zfx->outbuf, n ) ) {
- log_debug("deflate: iobuf_write failed\n");
- return G10ERR_WRITE_FILE;
- }
- } while( zs->avail_in || (flush == Z_FINISH && zrc != Z_STREAM_END) );
- return 0;
-}
-
-static void
-init_uncompress( compress_filter_context_t *zfx, z_stream *zs )
-{
- int rc;
-
- /****************
- * PGP uses a windowsize of 13 bits. Using a negative value for
- * it forces zlib not to expect a zlib header. This is a
- * undocumented feature Peter Gutmann told me about.
- */
- if( (rc = zfx->algo == 1? inflateInit2( zs, -13)
- : inflateInit( zs )) != Z_OK ) {
- log_fatal("zlib problem: %s\n", zs->msg? zs->msg :
- rc == Z_MEM_ERROR ? "out of core" :
- rc == Z_VERSION_ERROR ? "invalid lib version" :
- "unknown error" );
- }
-
- zfx->inbufsize = 2048;
- zfx->inbuf = m_alloc( zfx->inbufsize );
- zs->avail_in = 0;
-}
-
-static int
-do_uncompress( compress_filter_context_t *zfx, z_stream *zs,
- IOBUF a, size_t *ret_len )
-{
- int zrc;
- int rc=0;
- size_t n;
- int nread, count;
- int refill = !zs->avail_in;
-
- if( DBG_FILTER )
- log_debug("begin inflate: avail_in=%u, avail_out=%u, inbuf=%u\n",
- (unsigned)zs->avail_in, (unsigned)zs->avail_out,
- (unsigned)zfx->inbufsize );
- do {
- if( zs->avail_in < zfx->inbufsize && refill ) {
- n = zs->avail_in;
- if( !n )
-#ifndef __riscos__
- zs->next_in = zfx->inbuf;
-#else /* __riscos__ */
- zs->next_in = (Bytef *) zfx->inbuf;
-#endif /* __riscos__ */
- count = zfx->inbufsize - n;
- nread = iobuf_read( a, zfx->inbuf + n, count );
- if( nread == -1 ) nread = 0;
- n += nread;
- /* If we use the undocumented feature to suppress
- * the zlib header, we have to give inflate an
- * extra dummy byte to read */
- if( nread < count && zfx->algo == 1 ) {
- *(zfx->inbuf + n) = 0xFF; /* is it really needed ? */
- zfx->algo1hack = 1;
- n++;
- }
- zs->avail_in = n;
- }
- refill = 1;
- if( DBG_FILTER )
- log_debug("enter inflate: avail_in=%u, avail_out=%u\n",
- (unsigned)zs->avail_in, (unsigned)zs->avail_out);
-#ifdef Z_SYNC_FLUSH
- zrc = inflate( zs, Z_SYNC_FLUSH );
-#else
- zrc = inflate( zs, Z_PARTIAL_FLUSH );
-#endif
- if( DBG_FILTER )
- log_debug("leave inflate: avail_in=%u, avail_out=%u, zrc=%d\n",
- (unsigned)zs->avail_in, (unsigned)zs->avail_out, zrc);
- if( zrc == Z_STREAM_END )
- rc = -1; /* eof */
- else if( zrc != Z_OK && zrc != Z_BUF_ERROR ) {
- if( zs->msg )
- log_fatal("zlib inflate problem: %s\n", zs->msg );
- else
- log_fatal("zlib inflate problem: rc=%d\n", zrc );
- }
- } while( zs->avail_out && zrc != Z_STREAM_END && zrc != Z_BUF_ERROR );
- *ret_len = zfx->outbufsize - zs->avail_out;
- if( DBG_FILTER )
- log_debug("do_uncompress: returning %u bytes\n", (unsigned)*ret_len );
- return rc;
-}
-
-int
-compress_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len)
-{
- size_t size = *ret_len;
- compress_filter_context_t *zfx = opaque;
- z_stream *zs = zfx->opaque;
- int rc=0;
-
- if( control == IOBUFCTRL_UNDERFLOW ) {
- if( !zfx->status ) {
- zs = zfx->opaque = m_alloc_clear( sizeof *zs );
- init_uncompress( zfx, zs );
- zfx->status = 1;
- }
-
-#ifndef __riscos__
- zs->next_out = buf;
-#else /* __riscos__ */
- zs->next_out = (Bytef *) buf;
-#endif /* __riscos__ */
- zs->avail_out = size;
- zfx->outbufsize = size; /* needed only for calculation */
- rc = do_uncompress( zfx, zs, a, ret_len );
- }
- else if( control == IOBUFCTRL_FLUSH ) {
- if( !zfx->status ) {
- PACKET pkt;
- PKT_compressed cd;
-
- if( !zfx->algo )
- zfx->algo = DEFAULT_COMPRESS_ALGO;
- if( zfx->algo != 1 && zfx->algo != 2 )
- BUG();
- memset( &cd, 0, sizeof cd );
- cd.len = 0;
- cd.algorithm = zfx->algo;
- init_packet( &pkt );
- pkt.pkttype = PKT_COMPRESSED;
- pkt.pkt.compressed = &cd;
- if( build_packet( a, &pkt ))
- log_bug("build_packet(PKT_COMPRESSED) failed\n");
- zs = zfx->opaque = m_alloc_clear( sizeof *zs );
- init_compress( zfx, zs );
- zfx->status = 2;
- }
-
-#ifndef __riscos__
- zs->next_in = buf;
-#else /* __riscos__ */
- zs->next_in = (Bytef *) buf;
-#endif /* __riscos__ */
- zs->avail_in = size;
- rc = do_compress( zfx, zs, Z_NO_FLUSH, a );
- }
- else if( control == IOBUFCTRL_FREE ) {
- if( zfx->status == 1 ) {
- inflateEnd(zs);
- m_free(zs);
- zfx->opaque = NULL;
- m_free(zfx->outbuf); zfx->outbuf = NULL;
- }
- else if( zfx->status == 2 ) {
-#ifndef __riscos__
- zs->next_in = buf;
-#else /* __riscos__ */
- zs->next_in = (Bytef *) buf;
-#endif /* __riscos__ */
- zs->avail_in = 0;
- do_compress( zfx, zs, Z_FINISH, a );
- deflateEnd(zs);
- m_free(zs);
- zfx->opaque = NULL;
- m_free(zfx->outbuf); zfx->outbuf = NULL;
- }
- if (zfx->release)
- zfx->release (zfx);
- }
- else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "compress_filter";
- return rc;
-}
-
-
-static void
-release_context (compress_filter_context_t *ctx)
-{
- m_free (ctx);
-}
-
-/****************
- * Handle a compressed packet
- */
-int
-handle_compressed( void *procctx, PKT_compressed *cd,
- int (*callback)(IOBUF, void *), void *passthru )
-{
- compress_filter_context_t *cfx;
- int rc;
-
- if( cd->algorithm < 1 || cd->algorithm > 2 )
- return G10ERR_COMPR_ALGO;
- cfx = m_alloc_clear (sizeof *cfx);
- cfx->algo = cd->algorithm;
- cfx->release = release_context;
- iobuf_push_filter( cd->buf, compress_filter, cfx );
- if( callback )
- rc = callback(cd->buf, passthru );
- else
- rc = proc_packets(procctx, cd->buf);
- cd->buf = NULL;
- return rc;
-}
-
diff --git a/g10/decrypt.c b/g10/decrypt.c
deleted file mode 100644
index 297ee3418..000000000
--- a/g10/decrypt.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* decrypt.c - verify signed data
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "status.h"
-#include "i18n.h"
-
-
-
-/****************
- * Assume that the input is an encrypted message and decrypt
- * (and if signed, verify the signature on) it.
- * This command differs from the default operation, as it never
- * writes to the filename which is included in the file and it
- * rejects files which don't begin with an encrypted message.
- */
-
-int
-decrypt_message( const char *filename )
-{
- IOBUF fp;
- armor_filter_context_t afx;
- int rc;
- int no_out=0;
-
- /* open the message file */
- fp = iobuf_open(filename);
- if( !fp ) {
- log_error(_("can't open `%s'\n"), print_fname_stdin(filename));
- return G10ERR_OPEN_FILE;
- }
-
- if( !opt.no_armor ) {
- if( use_armor_filter( fp ) ) {
- memset( &afx, 0, sizeof afx);
- iobuf_push_filter( fp, armor_filter, &afx );
- }
- }
-
- if( !opt.outfile ) {
- no_out = 1;
- opt.outfile = "-";
- }
- rc = proc_encryption_packets( NULL, fp );
- if( no_out )
- opt.outfile = NULL;
- iobuf_close(fp);
- return rc;
-}
-
-void
-decrypt_messages(int nfiles, char **files)
-{
- IOBUF fp;
- armor_filter_context_t afx;
- char *p, *output = NULL;
- int rc = 0;
-
- if (opt.outfile)
- {
- log_error(_("--output doesn't work for this command\n"));
- return;
-
- }
-
- while (nfiles--)
- {
- print_file_status(STATUS_FILE_START, *files, 3);
- output = make_outfile_name(*files);
- if (!output)
- continue;
- fp = iobuf_open(*files);
- if (!fp)
- {
- log_error(_("can't open `%s'\n"), print_fname_stdin(*files));
- continue;
- }
- if (!opt.no_armor)
- {
- if (use_armor_filter(fp))
- {
- memset(&afx, 0, sizeof afx);
- iobuf_push_filter(fp, armor_filter, &afx);
- }
- }
- rc = proc_packets(NULL, fp);
- iobuf_close(fp);
- if (rc)
- log_error("%s: decryption failed: %s\n", print_fname_stdin(*files),
- g10_errstr(rc));
- p = get_last_passphrase();
- set_next_passphrase(p);
- m_free (p);
- files++;
- m_free(output);
- write_status( STATUS_FILE_DONE );
- }
- set_next_passphrase(NULL);
-}
-
-
-
-
-
-
-
-
diff --git a/g10/delkey.c b/g10/delkey.c
deleted file mode 100644
index ca578a590..000000000
--- a/g10/delkey.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* delkey.c - delete keys
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "trustdb.h"
-#include "filter.h"
-#include "ttyio.h"
-#include "status.h"
-#include "i18n.h"
-
-
-/****************
- * Delete a public or secret key from a keyring.
- * r_sec_avail will be set if a secret key is available and the public
- * key can't be deleted for that reason.
- */
-static int
-do_delete_key( const char *username, int secret, int *r_sec_avail )
-{
- int rc = 0;
- KBNODE keyblock = NULL;
- KBNODE node;
- KEYDB_HANDLE hd = keydb_new (secret);
- PKT_public_key *pk = NULL;
- PKT_secret_key *sk = NULL;
- u32 keyid[2];
- int okay=0;
- int yes;
- KEYDB_SEARCH_DESC desc;
- int exactmatch;
-
- *r_sec_avail = 0;
-
- /* search the userid */
- classify_user_id (username, &desc);
- exactmatch = (desc.mode == KEYDB_SEARCH_MODE_FPR
- || desc.mode == KEYDB_SEARCH_MODE_FPR16
- || desc.mode == KEYDB_SEARCH_MODE_FPR20);
- rc = desc.mode? keydb_search (hd, &desc, 1):G10ERR_INV_USER_ID;
- if (rc) {
- log_error (_("key `%s' not found: %s\n"), username, g10_errstr (rc));
- write_status_text( STATUS_DELETE_PROBLEM, "1" );
- goto leave;
- }
-
- /* read the keyblock */
- rc = keydb_get_keyblock (hd, &keyblock );
- if (rc) {
- log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- /* get the keyid from the keyblock */
- node = find_kbnode( keyblock, secret? PKT_SECRET_KEY:PKT_PUBLIC_KEY );
- if( !node ) {
- log_error("Oops; key not found anymore!\n");
- rc = G10ERR_GENERAL;
- goto leave;
- }
-
- if( secret ) {
- sk = node->pkt->pkt.secret_key;
- keyid_from_sk( sk, keyid );
- }
- else {
- pk = node->pkt->pkt.public_key;
- keyid_from_pk( pk, keyid );
- rc = seckey_available( keyid );
- if( !rc ) {
- *r_sec_avail = 1;
- rc = -1;
- goto leave;
- }
- else if( rc != G10ERR_NO_SECKEY ) {
- log_error("%s: get secret key: %s\n", username, g10_errstr(rc) );
- }
- else
- rc = 0;
- }
-
- if( rc )
- rc = 0;
- else if (opt.batch && exactmatch)
- okay++;
- else if( opt.batch && secret )
- {
- log_error(_("can't do that in batchmode\n"));
- log_info (_("(unless you specify the key by fingerprint)\n"));
- }
- else if( opt.batch && opt.answer_yes )
- okay++;
- else if( opt.batch )
- {
- log_error(_("can't do that in batchmode without \"--yes\"\n"));
- log_info (_("(unless you specify the key by fingerprint)\n"));
- }
- else {
- char *p;
- size_t n;
-
- if( secret )
- tty_printf("sec %4u%c/%08lX %s ",
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_sk(sk) );
- else
- tty_printf("pub %4u%c/%08lX %s ",
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_pk(pk) );
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\n\n");
-
- yes = cpr_get_answer_is_yes( secret? "delete_key.secret.okay"
- : "delete_key.okay",
- _("Delete this key from the keyring? "));
- if( !cpr_enabled() && secret && yes ) {
- /* I think it is not required to check a passphrase; if
- * the user is so stupid as to let others access his secret keyring
- * (and has no backup) - it is up him to read some very
- * basic texts about security.
- */
- yes = cpr_get_answer_is_yes("delete_key.secret.okay",
- _("This is a secret key! - really delete? "));
- }
- if( yes )
- okay++;
- }
-
-
- if( okay ) {
- rc = keydb_delete_keyblock (hd);
- if (rc) {
- log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- /* Note that the ownertrust being cleared will trigger a
- revalidation_mark(). This makes sense - only deleting keys
- that have ownertrust set should trigger this. */
-
- if (!secret && pk && clear_ownertrust (pk)) {
- if (opt.verbose)
- log_info (_("ownertrust information cleared\n"));
- }
- }
-
- leave:
- keydb_release (hd);
- release_kbnode (keyblock);
- return rc;
-}
-
-/****************
- * Delete a public or secret key from a keyring.
- */
-int
-delete_keys( STRLIST names, int secret, int allow_both )
-{
- int rc, avail;
-
- for(;names;names=names->next) {
- rc = do_delete_key (names->d, secret, &avail );
- if ( rc && avail ) {
- if ( allow_both ) {
- rc = do_delete_key (names->d, 1, &avail );
- if ( !rc )
- rc = do_delete_key (names->d, 0, &avail );
- }
- else {
- log_error(_(
- "there is a secret key for public key \"%s\"!\n"),names->d);
- log_info(_(
- "use option \"--delete-secret-keys\" to delete it first.\n"));
- write_status_text( STATUS_DELETE_PROBLEM, "2" );
- return rc;
- }
- }
-
- if(rc) {
- log_error("%s: delete key failed: %s\n", names->d, g10_errstr(rc) );
- return rc;
- }
- }
-
- return 0;
-}
diff --git a/g10/encode.c b/g10/encode.c
deleted file mode 100644
index 89d94278f..000000000
--- a/g10/encode.c
+++ /dev/null
@@ -1,798 +0,0 @@
-/* encode.c - encode data
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "filter.h"
-#include "trustdb.h"
-#include "i18n.h"
-#include "status.h"
-
-static int encode_simple( const char *filename, int mode, int compat );
-static int write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out );
-
-
-
-/****************
- * Encode FILENAME with only the symmetric cipher. Take input from
- * stdin if FILENAME is NULL.
- */
-int
-encode_symmetric( const char *filename )
-{
- int compat = 1;
-
-#if 0
- /* We don't want to use it because older gnupg version can't
- handle it and we can presume that a lot of scripts are running
- with the expert mode set. Some time in the future we might
- want to allow for it. */
- if ( opt.expert )
- compat = 0; /* PGP knows how to handle this mode. */
-#endif
- return encode_simple( filename, 1, compat );
-}
-
-/****************
- * Encode FILENAME as a literal data packet only. Take input from
- * stdin if FILENAME is NULL.
- */
-int
-encode_store( const char *filename )
-{
- return encode_simple( filename, 0, 1 );
-}
-
-static void
-encode_sesskey( DEK *dek, DEK **ret_dek, byte *enckey )
-{
- CIPHER_HANDLE hd;
- DEK *c;
- byte buf[33];
-
- assert ( dek->keylen < 32 );
-
- c = m_alloc_clear( sizeof *c );
- c->keylen = dek->keylen;
- c->algo = dek->algo;
- make_session_key( c );
- /*log_hexdump( "thekey", c->key, c->keylen );*/
-
- buf[0] = c->algo;
- memcpy( buf + 1, c->key, c->keylen );
-
- hd = cipher_open( dek->algo, CIPHER_MODE_CFB, 1 );
- cipher_setkey( hd, dek->key, dek->keylen );
- cipher_setiv( hd, NULL, 0 );
- cipher_encrypt( hd, buf, buf, c->keylen + 1 );
- cipher_close( hd );
-
- memcpy( enckey, buf, c->keylen + 1 );
- memset( buf, 0, sizeof buf ); /* burn key */
- *ret_dek = c;
-}
-
-/* We try very hard to use a MDC */
-static int
-use_mdc(PK_LIST pk_list,int algo)
-{
- /* --force-mdc overrides --disable-mdc */
- if(opt.force_mdc)
- return 1;
-
- if(opt.disable_mdc)
- return 0;
-
- /* Do the keys really support MDC? */
-
- if(select_mdc_from_pklist(pk_list))
- return 1;
-
- /* The keys don't support MDC, so now we do a bit of a hack - if any
- of the AESes or TWOFISH are in the prefs, we assume that the user
- can handle a MDC. This is valid for PGP 7, which can handle MDCs
- though it will not generate them. 2440bis allows this, by the
- way. */
-
- if(select_algo_from_prefs(pk_list,PREFTYPE_SYM,
- CIPHER_ALGO_AES,NULL)==CIPHER_ALGO_AES)
- return 1;
-
- if(select_algo_from_prefs(pk_list,PREFTYPE_SYM,
- CIPHER_ALGO_AES192,NULL)==CIPHER_ALGO_AES192)
- return 1;
-
- if(select_algo_from_prefs(pk_list,PREFTYPE_SYM,
- CIPHER_ALGO_AES256,NULL)==CIPHER_ALGO_AES256)
- return 1;
-
- if(select_algo_from_prefs(pk_list,PREFTYPE_SYM,
- CIPHER_ALGO_TWOFISH,NULL)==CIPHER_ALGO_TWOFISH)
- return 1;
-
- /* Last try. Use MDC for the modern ciphers. */
-
- if(cipher_get_blocksize(algo)!=8)
- return 1;
-
- return 0; /* No MDC */
-}
-
-static int
-encode_simple( const char *filename, int mode, int compat )
-{
- IOBUF inp, out;
- PACKET pkt;
- DEK *dek = NULL;
- PKT_plaintext *pt = NULL;
- STRING2KEY *s2k = NULL;
- byte enckey[33];
- int rc = 0;
- int seskeylen = 0;
- u32 filesize;
- cipher_filter_context_t cfx;
- armor_filter_context_t afx;
- compress_filter_context_t zfx;
- text_filter_context_t tfx;
- int do_compress = opt.compress && !opt.rfc1991;
-
- memset( &cfx, 0, sizeof cfx);
- memset( &afx, 0, sizeof afx);
- memset( &zfx, 0, sizeof zfx);
- memset( &tfx, 0, sizeof tfx);
- init_packet(&pkt);
-
- /* prepare iobufs */
- if( !(inp = iobuf_open(filename)) ) {
- log_error(_("%s: can't open: %s\n"), filename? filename: "[stdin]",
- strerror(errno) );
- return G10ERR_OPEN_FILE;
- }
-
- if( opt.textmode )
- iobuf_push_filter( inp, text_filter, &tfx );
-
- /* Due the the fact that we use don't use an IV to encrypt the
- session key we can't use the new mode with RFC1991 because
- it has no S2K salt. RFC1991 always uses simple S2K. */
- if ( opt.rfc1991 && !compat )
- compat = 1;
-
- cfx.dek = NULL;
- if( mode ) {
- s2k = m_alloc_clear( sizeof *s2k );
- s2k->mode = opt.rfc1991? 0:opt.s2k_mode;
- s2k->hash_algo = opt.def_digest_algo ? opt.def_digest_algo
- : opt.s2k_digest_algo;
- cfx.dek = passphrase_to_dek( NULL, 0,
- opt.def_cipher_algo ? opt.def_cipher_algo
- : opt.s2k_cipher_algo , s2k, 2, NULL );
- if( !cfx.dek || !cfx.dek->keylen ) {
- rc = G10ERR_PASSPHRASE;
- m_free(cfx.dek);
- m_free(s2k);
- iobuf_close(inp);
- log_error(_("error creating passphrase: %s\n"), g10_errstr(rc) );
- return rc;
- }
- if (!compat && s2k->mode != 1 && s2k->mode != 3) {
- compat = 1;
- log_info (_("can't use a symmetric ESK packet "
- "due to the S2K mode\n"));
- }
-
- if ( !compat ) {
- seskeylen = cipher_get_keylen( opt.def_cipher_algo ?
- opt.def_cipher_algo:
- opt.s2k_cipher_algo ) / 8;
- encode_sesskey( cfx.dek, &dek, enckey );
- m_free( cfx.dek ); cfx.dek = dek;
- }
-
- cfx.dek->use_mdc=use_mdc(NULL,cfx.dek->algo);
- }
-
- if (opt.compress == -1 && cfx.dek && cfx.dek->use_mdc &&
- is_file_compressed(filename, &rc))
- {
- if (opt.verbose)
- log_info(_("`%s' already compressed\n"), filename);
- do_compress = 0;
- }
-
- if( rc || (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) {
- iobuf_cancel(inp);
- m_free(cfx.dek);
- m_free(s2k);
- return rc;
- }
-
- if( opt.armor )
- iobuf_push_filter( out, armor_filter, &afx );
- #ifdef ENABLE_COMMENT_PACKETS
- else {
- write_comment( out, "#created by GNUPG v" VERSION " ("
- PRINTABLE_OS_NAME ")");
- if( opt.comment_string )
- write_comment( out, opt.comment_string );
- }
- #endif
- if( s2k && !opt.rfc1991 ) {
- PKT_symkey_enc *enc = m_alloc_clear( sizeof *enc + seskeylen + 1 );
- enc->version = 4;
- enc->cipher_algo = cfx.dek->algo;
- enc->s2k = *s2k;
- if ( !compat && seskeylen ) {
- enc->seskeylen = seskeylen + 1; /* algo id */
- memcpy( enc->seskey, enckey, seskeylen + 1 );
- }
- pkt.pkttype = PKT_SYMKEY_ENC;
- pkt.pkt.symkey_enc = enc;
- if( (rc = build_packet( out, &pkt )) )
- log_error("build symkey packet failed: %s\n", g10_errstr(rc) );
- m_free(enc);
- }
-
- if (!opt.no_literal) {
- /* setup the inner packet */
- if( filename || opt.set_filename ) {
- char *s = make_basename( opt.set_filename ? opt.set_filename
- : filename );
- pt = m_alloc( sizeof *pt + strlen(s) - 1 );
- pt->namelen = strlen(s);
- memcpy(pt->name, s, pt->namelen );
- m_free(s);
- }
- else { /* no filename */
- pt = m_alloc( sizeof *pt - 1 );
- pt->namelen = 0;
- }
- }
-
- /* Note that PGP 5 has problems decrypting symmetrically encrypted
- data if the file length is in the inner packet. It works when
- only partial length headers are use. In the past, we always
- used partial body length here, but since PGP 2, PGP 6, and PGP
- 7 need the file length, and nobody should be using PGP 5
- nowadays anyway, this is now set to the file length. Note also
- that this only applies to the RFC-1991 style symmetric
- messages, and not the RFC-2440 style. PGP 6 and 7 work with
- either partial length or fixed length with the new style
- messages. */
-
- if( filename && !opt.textmode ) {
- if( !(filesize = iobuf_get_filelength(inp)) )
- log_info(_("%s: WARNING: empty file\n"), filename );
- /* we can't yet encode the length of very large files,
- * so we switch to partial lengthn encoding in this case */
- if ( filesize >= IOBUF_FILELENGTH_LIMIT )
- filesize = 0;
-
- }
- else
- filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */
-
- if (!opt.no_literal) {
- pt->timestamp = make_timestamp();
- pt->mode = opt.textmode? 't' : 'b';
- pt->len = filesize;
- pt->new_ctb = !pt->len && !opt.rfc1991;
- pt->buf = inp;
- pkt.pkttype = PKT_PLAINTEXT;
- pkt.pkt.plaintext = pt;
- cfx.datalen = filesize && !do_compress ? calc_packet_length( &pkt ) : 0;
- }
- else
- {
- cfx.datalen = filesize && !do_compress ? filesize : 0;
- pkt.pkttype = 0;
- pkt.pkt.generic = NULL;
- }
-
- /* register the cipher filter */
- if( mode )
- iobuf_push_filter( out, cipher_filter, &cfx );
- /* register the compress filter */
- if( do_compress )
- {
- if (cfx.dek && cfx.dek->use_mdc)
- zfx.new_ctb = 1;
- zfx.algo=opt.def_compress_algo;
- if(zfx.algo==-1)
- zfx.algo=DEFAULT_COMPRESS_ALGO;
- iobuf_push_filter( out, compress_filter, &zfx );
- }
-
- /* do the work */
- if (!opt.no_literal) {
- if( (rc = build_packet( out, &pkt )) )
- log_error("build_packet failed: %s\n", g10_errstr(rc) );
- }
- else {
- /* user requested not to create a literal packet,
- * so we copy the plain data */
- byte copy_buffer[4096];
- int bytes_copied;
- while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1)
- if (iobuf_write(out, copy_buffer, bytes_copied) == -1) {
- rc = G10ERR_WRITE_FILE;
- log_error("copying input to output failed: %s\n", g10_errstr(rc) );
- break;
- }
- memset(copy_buffer, 0, 4096); /* burn buffer */
- }
-
- /* finish the stuff */
- iobuf_close(inp);
- if (rc)
- iobuf_cancel(out);
- else {
- iobuf_close(out); /* fixme: check returncode */
- if (mode)
- write_status( STATUS_END_ENCRYPTION );
- }
- if (pt)
- pt->buf = NULL;
- free_packet(&pkt);
- m_free(cfx.dek);
- m_free(s2k);
- return rc;
-}
-
-/****************
- * Encrypt the file with the given userids (or ask if none
- * is supplied).
- */
-int
-encode_crypt( const char *filename, STRLIST remusr )
-{
- IOBUF inp = NULL, out = NULL;
- PACKET pkt;
- PKT_plaintext *pt = NULL;
- int rc = 0, rc2 = 0;
- u32 filesize;
- cipher_filter_context_t cfx;
- armor_filter_context_t afx;
- compress_filter_context_t zfx;
- text_filter_context_t tfx;
- PK_LIST pk_list,work_list;
- int do_compress = opt.compress && !opt.rfc1991;
-
-
- memset( &cfx, 0, sizeof cfx);
- memset( &afx, 0, sizeof afx);
- memset( &zfx, 0, sizeof zfx);
- memset( &tfx, 0, sizeof tfx);
- init_packet(&pkt);
-
- if( (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC)) )
- return rc;
-
- if(opt.pgp2) {
- for(work_list=pk_list; work_list; work_list=work_list->next)
- if(!(is_RSA(work_list->pk->pubkey_algo) &&
- nbits_from_pk(work_list->pk)<=2048))
- {
- log_info(_("you can only encrypt to RSA keys of 2048 bits or "
- "less in --pgp2 mode\n"));
- log_info(_("this message may not be usable by %s\n"),"PGP 2.x");
- opt.pgp2=0;
- break;
- }
- }
-
- /* prepare iobufs */
- if( !(inp = iobuf_open(filename)) ) {
- log_error(_("can't open %s: %s\n"), filename? filename: "[stdin]",
- strerror(errno) );
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
- else if( opt.verbose )
- log_info(_("reading from `%s'\n"), filename? filename: "[stdin]");
-
- if( opt.textmode )
- iobuf_push_filter( inp, text_filter, &tfx );
-
- if( (rc = open_outfile( filename, opt.armor? 1:0, &out )) )
- goto leave;
-
-
- if( opt.armor )
- iobuf_push_filter( out, armor_filter, &afx );
- #ifdef ENABLE_COMMENT_PACKETS
- else {
- write_comment( out, "#created by GNUPG v" VERSION " ("
- PRINTABLE_OS_NAME ")");
- if( opt.comment_string )
- write_comment( out, opt.comment_string );
- }
- #endif
- /* create a session key */
- cfx.dek = m_alloc_secure_clear (sizeof *cfx.dek);
- if( !opt.def_cipher_algo ) { /* try to get it from the prefs */
- cfx.dek->algo = select_algo_from_prefs(pk_list,PREFTYPE_SYM,-1,NULL);
- /* The only way select_algo_from_prefs can fail here is when
- mixing v3 and v4 keys, as v4 keys have an implicit
- preference entry for 3DES, and the pk_list cannot be empty.
- In this case, use 3DES anyway as it's the safest choice -
- perhaps the v3 key is being used in an OpenPGP
- implementation and we know that the implementation behind
- any v4 key can handle 3DES. */
- if( cfx.dek->algo == -1 ) {
- cfx.dek->algo = CIPHER_ALGO_3DES;
-
- if( opt.pgp2 ) {
- log_info(_("unable to use the IDEA cipher for all of the keys "
- "you are encrypting to.\n"));
- log_info(_("this message may not be usable by %s\n"),"PGP 2.x");
- opt.pgp2=0;
- }
- }
- }
- else {
- if(!opt.expert &&
- select_algo_from_prefs(pk_list,PREFTYPE_SYM,
- opt.def_cipher_algo,NULL)!=opt.def_cipher_algo)
- log_info(_("forcing symmetric cipher %s (%d) "
- "violates recipient preferences\n"),
- cipher_algo_to_string(opt.def_cipher_algo),
- opt.def_cipher_algo);
-
- cfx.dek->algo = opt.def_cipher_algo;
- }
-
- cfx.dek->use_mdc=use_mdc(pk_list,cfx.dek->algo);
-
- /* Only do the is-file-already-compressed check if we are using a
- MDC. This forces compressed files to be re-compressed if we do
- not have a MDC to give some protection against chosen
- ciphertext attacks. */
-
- if (opt.compress == -1 && cfx.dek->use_mdc &&
- is_file_compressed(filename, &rc2) )
- {
- if (opt.verbose)
- log_info(_("`%s' already compressed\n"), filename);
- do_compress = 0;
- }
- if (rc2)
- {
- rc = rc2;
- goto leave;
- }
-
- make_session_key( cfx.dek );
- if( DBG_CIPHER )
- log_hexdump("DEK is: ", cfx.dek->key, cfx.dek->keylen );
-
- rc = write_pubkey_enc_from_list( pk_list, cfx.dek, out );
- if( rc )
- goto leave;
-
- if (!opt.no_literal) {
- /* setup the inner packet */
- if( filename || opt.set_filename ) {
- char *s = make_basename( opt.set_filename ? opt.set_filename : filename );
- pt = m_alloc( sizeof *pt + strlen(s) - 1 );
- pt->namelen = strlen(s);
- memcpy(pt->name, s, pt->namelen );
- m_free(s);
- }
- else { /* no filename */
- pt = m_alloc( sizeof *pt - 1 );
- pt->namelen = 0;
- }
- }
-
- if( filename && !opt.textmode ) {
- if( !(filesize = iobuf_get_filelength(inp)) )
- log_info(_("%s: WARNING: empty file\n"), filename );
- /* we can't yet encode the length of very large files,
- * so we switch to partial length encoding in this case */
- if ( filesize >= IOBUF_FILELENGTH_LIMIT )
- filesize = 0;
- }
- else
- filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */
-
- if (!opt.no_literal) {
- pt->timestamp = make_timestamp();
- pt->mode = opt.textmode ? 't' : 'b';
- pt->len = filesize;
- pt->new_ctb = !pt->len && !opt.rfc1991;
- pt->buf = inp;
- pkt.pkttype = PKT_PLAINTEXT;
- pkt.pkt.plaintext = pt;
- cfx.datalen = filesize && !do_compress? calc_packet_length( &pkt ) : 0;
- }
- else
- cfx.datalen = filesize && !do_compress ? filesize : 0;
-
- /* register the cipher filter */
- iobuf_push_filter( out, cipher_filter, &cfx );
-
- /* register the compress filter */
- if( do_compress ) {
- int compr_algo = opt.def_compress_algo;
-
- if(compr_algo==-1)
- {
- if((compr_algo=
- select_algo_from_prefs(pk_list,PREFTYPE_ZIP,-1,NULL))==-1)
- compr_algo=DEFAULT_COMPRESS_ALGO;
- }
- else if(!opt.expert &&
- select_algo_from_prefs(pk_list,PREFTYPE_ZIP,
- compr_algo,NULL)!=compr_algo)
- log_info(_("forcing compression algorithm %s (%d) "
- "violates recipient preferences\n"),
- compress_algo_to_string(compr_algo),compr_algo);
-
- /* algo 0 means no compression */
- if( compr_algo )
- {
- if (cfx.dek && cfx.dek->use_mdc)
- zfx.new_ctb = 1;
- zfx.algo = compr_algo;
- iobuf_push_filter( out, compress_filter, &zfx );
- }
- }
-
- /* do the work */
- if (!opt.no_literal) {
- if( (rc = build_packet( out, &pkt )) )
- log_error("build_packet failed: %s\n", g10_errstr(rc) );
- }
- else {
- /* user requested not to create a literal packet, so we copy
- the plain data */
- byte copy_buffer[4096];
- int bytes_copied;
- while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1)
- if (iobuf_write(out, copy_buffer, bytes_copied) == -1) {
- rc = G10ERR_WRITE_FILE;
- log_error("copying input to output failed: %s\n",
- g10_errstr(rc) );
- break;
- }
- memset(copy_buffer, 0, 4096); /* burn buffer */
- }
-
- /* finish the stuff */
- leave:
- iobuf_close(inp);
- if( rc )
- iobuf_cancel(out);
- else {
- iobuf_close(out); /* fixme: check returncode */
- write_status( STATUS_END_ENCRYPTION );
- }
- if( pt )
- pt->buf = NULL;
- free_packet(&pkt);
- m_free(cfx.dek);
- release_pk_list( pk_list );
- return rc;
-}
-
-
-
-
-/****************
- * Filter to do a complete public key encryption.
- */
-int
-encrypt_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len)
-{
- size_t size = *ret_len;
- encrypt_filter_context_t *efx = opaque;
- int rc=0;
-
- if( control == IOBUFCTRL_UNDERFLOW ) { /* decrypt */
- BUG(); /* not used */
- }
- else if( control == IOBUFCTRL_FLUSH ) { /* encrypt */
- if( !efx->header_okay ) {
- efx->cfx.dek = m_alloc_secure_clear( sizeof *efx->cfx.dek );
-
- if( !opt.def_cipher_algo ) { /* try to get it from the prefs */
- efx->cfx.dek->algo =
- select_algo_from_prefs(efx->pk_list,PREFTYPE_SYM,-1,NULL);
- if( efx->cfx.dek->algo == -1 ) {
- /* because 3DES is implicitly in the prefs, this can only
- * happen if we do not have any public keys in the list */
- efx->cfx.dek->algo = DEFAULT_CIPHER_ALGO;
- }
- }
- else {
- if(!opt.expert &&
- select_algo_from_prefs(efx->pk_list,PREFTYPE_SYM,
- opt.def_cipher_algo,
- NULL)!=opt.def_cipher_algo)
- log_info(_("forcing symmetric cipher %s (%d) "
- "violates recipient preferences\n"),
- cipher_algo_to_string(opt.def_cipher_algo),
- opt.def_cipher_algo);
-
- efx->cfx.dek->algo = opt.def_cipher_algo;
- }
-
- efx->cfx.dek->use_mdc = use_mdc(efx->pk_list,efx->cfx.dek->algo);
-
- make_session_key( efx->cfx.dek );
- if( DBG_CIPHER )
- log_hexdump("DEK is: ",
- efx->cfx.dek->key, efx->cfx.dek->keylen );
-
- rc = write_pubkey_enc_from_list( efx->pk_list, efx->cfx.dek, a );
- if( rc )
- return rc;
-
- iobuf_push_filter( a, cipher_filter, &efx->cfx );
-
- efx->header_okay = 1;
- }
- rc = iobuf_write( a, buf, size );
-
- }
- else if( control == IOBUFCTRL_FREE ) {
- }
- else if( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "encrypt_filter";
- }
- return rc;
-}
-
-
-/****************
- * Write pubkey-enc packets from the list of PKs to OUT.
- */
-static int
-write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out )
-{
- PACKET pkt;
- PKT_public_key *pk;
- PKT_pubkey_enc *enc;
- int rc;
-
- for( ; pk_list; pk_list = pk_list->next ) {
- MPI frame;
-
- pk = pk_list->pk;
-
- print_pubkey_algo_note( pk->pubkey_algo );
- enc = m_alloc_clear( sizeof *enc );
- enc->pubkey_algo = pk->pubkey_algo;
- keyid_from_pk( pk, enc->keyid );
- enc->throw_keyid = opt.throw_keyid;
-
- if(opt.throw_keyid && (opt.pgp2 || opt.pgp6 || opt.pgp7))
- {
- log_info(_("you may not use %s while in %s mode\n"),
- "--throw-keyid",
- opt.pgp2?"--pgp2":opt.pgp6?"--pgp6":"--pgp7");
-
- log_info(_("this message may not be usable by %s\n"),
- opt.pgp2?"PGP 2.x":opt.pgp6?"PGP 6.x":"PGP 7.x");
-
- opt.pgp2=opt.pgp6=opt.pgp7=0;
- }
-
- /* Okay, what's going on: We have the session key somewhere in
- * the structure DEK and want to encode this session key in
- * an integer value of n bits. pubkey_nbits gives us the
- * number of bits we have to use. We then encode the session
- * key in some way and we get it back in the big intger value
- * FRAME. Then we use FRAME, the public key PK->PKEY and the
- * algorithm number PK->PUBKEY_ALGO and pass it to pubkey_encrypt
- * which returns the encrypted value in the array ENC->DATA.
- * This array has a size which depends on the used algorithm
- * (e.g. 2 for ElGamal). We don't need frame anymore because we
- * have everything now in enc->data which is the passed to
- * build_packet()
- */
- frame = encode_session_key( dek, pubkey_nbits( pk->pubkey_algo,
- pk->pkey ) );
- rc = pubkey_encrypt( pk->pubkey_algo, enc->data, frame, pk->pkey );
- mpi_free( frame );
- if( rc )
- log_error("pubkey_encrypt failed: %s\n", g10_errstr(rc) );
- else {
- if( opt.verbose ) {
- char *ustr = get_user_id_string_printable (enc->keyid);
- log_info(_("%s/%s encrypted for: \"%s\"\n"),
- pubkey_algo_to_string(enc->pubkey_algo),
- cipher_algo_to_string(dek->algo), ustr );
- m_free(ustr);
- }
- /* and write it */
- init_packet(&pkt);
- pkt.pkttype = PKT_PUBKEY_ENC;
- pkt.pkt.pubkey_enc = enc;
- rc = build_packet( out, &pkt );
- if( rc )
- log_error("build_packet(pubkey_enc) failed: %s\n", g10_errstr(rc));
- }
- free_pubkey_enc(enc);
- if( rc )
- return rc;
- }
- return 0;
-}
-
-void
-encode_crypt_files(int nfiles, char **files, STRLIST remusr)
-{
- int rc = 0;
-
- if (opt.outfile)
- {
- log_error(_("--output doesn't work for this command\n"));
- return;
- }
-
- if (!nfiles)
- {
- char line[2048];
- unsigned int lno = 0;
- while ( fgets(line, DIM(line), stdin) )
- {
- lno++;
- if (!*line || line[strlen(line)-1] != '\n')
- {
- log_error("input line %u too long or missing LF\n", lno);
- return;
- }
- line[strlen(line)-1] = '\0';
- print_file_status(STATUS_FILE_START, line, 2);
- if ( (rc = encode_crypt(line, remusr)) )
- log_error("%s: encryption failed: %s\n",
- print_fname_stdin(line), g10_errstr(rc) );
- write_status( STATUS_FILE_DONE );
- }
- }
- else
- {
- while (nfiles--)
- {
- print_file_status(STATUS_FILE_START, *files, 2);
- if ( (rc = encode_crypt(*files, remusr)) )
- log_error("%s: encryption failed: %s\n",
- print_fname_stdin(*files), g10_errstr(rc) );
- write_status( STATUS_FILE_DONE );
- files++;
- }
- }
-}
diff --git a/g10/exec.c b/g10/exec.c
deleted file mode 100644
index f220dd30f..000000000
--- a/g10/exec.c
+++ /dev/null
@@ -1,617 +0,0 @@
-/* exec.c - generic call-a-program code
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#ifndef EXEC_TEMPFILE_ONLY
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_DOSISH_SYSTEM
-#include <windows.h>
-#endif
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include "options.h"
-#include "memory.h"
-#include "i18n.h"
-#include "iobuf.h"
-#include "util.h"
-#include "exec.h"
-
-#ifdef NO_EXEC
-int exec_write(struct exec_info **info,const char *program,
- const char *args_in,const char *name,int writeonly,int binary)
-{
- log_error(_("no remote program execution supported\n"));
- return G10ERR_GENERAL;
-}
-
-int exec_read(struct exec_info *info) { return G10ERR_GENERAL; }
-int exec_finish(struct exec_info *info) { return G10ERR_GENERAL; }
-int set_exec_path(const char *path,int method) { return G10ERR_GENERAL; }
-
-#else /* ! NO_EXEC */
-
-#ifndef HAVE_MKDTEMP
-char *mkdtemp(char *template);
-#endif
-
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
-/* This is a nicer system() for windows that waits for programs to
- return before returning control to the caller. I hate helpful
- computers. */
-static int win_system(const char *command)
-{
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- char *string;
-
- /* We must use a copy of the command as CreateProcess modifies this
- argument. */
- string=m_strdup(command);
-
- memset(&pi,0,sizeof(pi));
- memset(&si,0,sizeof(si));
- si.cb=sizeof(si);
-
- if(!CreateProcess(NULL,string,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
- return -1;
-
- /* Wait for the child to exit */
- WaitForSingleObject(pi.hProcess,INFINITE);
-
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
- m_free(string);
-
- return 0;
-}
-#endif
-
-/* method==0 to replace current $PATH, and 1 to append to current
- $PATH. */
-int set_exec_path(const char *path,int method)
-{
- char *p,*curpath=NULL;
- size_t curlen=0;
-
- if(method==1 && (curpath=getenv("PATH")))
- curlen=strlen(curpath)+1;
-
- p=m_alloc(5+curlen+strlen(path)+1);
- strcpy(p,"PATH=");
-
- if(curpath)
- {
- strcat(p,curpath);
- strcat(p,":");
- }
-
- strcat(p,path);
-
- /* Notice that path is never freed. That is intentional due to the
- way putenv() works. This leaks a few bytes if we call
- set_exec_path multiple times. */
-
- if(putenv(p)!=0)
- return G10ERR_GENERAL;
- else
- return 0;
-}
-
-/* Makes a temp directory and filenames */
-static int make_tempdir(struct exec_info *info)
-{
- char *tmp=opt.temp_dir,*namein=info->name,*nameout;
-
- if(!namein)
- namein=info->binary?"tempin" EXTSEP_S "bin":"tempin" EXTSEP_S "txt";
-
- nameout=info->binary?"tempout" EXTSEP_S "bin":"tempout" EXTSEP_S "txt";
-
- /* Make up the temp dir and files in case we need them */
-
- if(tmp==NULL)
- {
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- tmp=m_alloc(256);
- if(GetTempPath(256,tmp)==0)
- strcpy(tmp,"c:\\windows\\temp");
- else
- {
- int len=strlen(tmp);
-
- /* GetTempPath may return with \ on the end */
- while(len>0 && tmp[len-1]=='\\')
- {
- tmp[len-1]='\0';
- len--;
- }
- }
-#else /* More unixish systems */
- tmp=getenv("TMPDIR");
- if(tmp==NULL)
- {
- tmp=getenv("TMP");
- if(tmp==NULL)
- {
-#ifdef __riscos__
- tmp="<Wimp$ScrapDir>.GnuPG";
- mkdir(tmp,0700); /* Error checks occur later on */
-#else
- tmp="/tmp";
-#endif
- }
- }
-#endif
- }
-
- info->tempdir=m_alloc(strlen(tmp)+strlen(DIRSEP_S)+10+1);
-
- sprintf(info->tempdir,"%s" DIRSEP_S "gpg-XXXXXX",tmp);
-
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- m_free(tmp);
-#endif
-
- if(mkdtemp(info->tempdir)==NULL)
- log_error(_("can't create directory `%s': %s\n"),
- info->tempdir,strerror(errno));
- else
- {
- info->madedir=1;
-
- info->tempfile_in=m_alloc(strlen(info->tempdir)+
- strlen(DIRSEP_S)+strlen(namein)+1);
- sprintf(info->tempfile_in,"%s" DIRSEP_S "%s",info->tempdir,namein);
-
- if(!info->writeonly)
- {
- info->tempfile_out=m_alloc(strlen(info->tempdir)+
- strlen(DIRSEP_S)+strlen(nameout)+1);
- sprintf(info->tempfile_out,"%s" DIRSEP_S "%s",info->tempdir,nameout);
- }
- }
-
- return info->madedir?0:G10ERR_GENERAL;
-}
-
-/* Expands %i and %o in the args to the full temp files within the
- temp directory. */
-static int expand_args(struct exec_info *info,const char *args_in)
-{
- const char *ch=args_in;
- unsigned int size,len;
-
- info->use_temp_files=0;
- info->keep_temp_files=0;
-
- if(DBG_EXTPROG)
- log_debug("expanding string \"%s\"\n",args_in);
-
- size=100;
- info->command=m_alloc(size);
- len=0;
- info->command[0]='\0';
-
- while(*ch!='\0')
- {
- if(*ch=='%')
- {
- char *append=NULL;
-
- ch++;
-
- switch(*ch)
- {
- case 'O':
- info->keep_temp_files=1;
- /* fall through */
-
- case 'o': /* out */
- if(!info->madedir)
- {
- if(make_tempdir(info))
- goto fail;
- }
- append=info->tempfile_out;
- info->use_temp_files=1;
- break;
-
- case 'I':
- info->keep_temp_files=1;
- /* fall through */
-
- case 'i': /* in */
- if(!info->madedir)
- {
- if(make_tempdir(info))
- goto fail;
- }
- append=info->tempfile_in;
- info->use_temp_files=1;
- break;
-
- case '%':
- append="%";
- break;
- }
-
- if(append)
- {
- size_t applen=strlen(append);
-
- if(applen+len>size-1)
- {
- if(applen<100)
- applen=100;
-
- size+=applen;
- info->command=m_realloc(info->command,size);
- }
-
- strcat(info->command,append);
- len+=strlen(append);
- }
- }
- else
- {
- if(len==size-1) /* leave room for the \0 */
- {
- size+=100;
- info->command=m_realloc(info->command,size);
- }
-
- info->command[len++]=*ch;
- info->command[len]='\0';
- }
-
- ch++;
- }
-
- if(DBG_EXTPROG)
- log_debug("args expanded to \"%s\", use %d, keep %d\n",
- info->command,info->use_temp_files,info->keep_temp_files);
-
- return 0;
-
- fail:
-
- m_free(info->command);
- info->command=NULL;
-
- return G10ERR_GENERAL;
-}
-
-/* Either handles the tempfile creation, or the fork/exec. If it
- returns ok, then info->tochild is a FILE * that can be written to.
- The rules are: if there are no args, then it's a fork/exec/pipe.
- If there are args, but no tempfiles, then it's a fork/exec/pipe via
- shell -c. If there are tempfiles, then it's a system. */
-
-int exec_write(struct exec_info **info,const char *program,
- const char *args_in,const char *name,int writeonly,int binary)
-{
- int ret=G10ERR_GENERAL;
-
- if(opt.exec_disable && !opt.no_perm_warn)
- {
- log_info(_("external program calls are disabled due to unsafe "
- "options file permissions\n"));
-
- return ret;
- }
-
-#if defined(HAVE_GETUID) && defined(HAVE_GETEUID)
- /* There should be no way to get to this spot while still carrying
- setuid privs. Just in case, bomb out if we are. */
- if(getuid()!=geteuid())
- BUG();
-#endif
-
- if(program==NULL && args_in==NULL)
- BUG();
-
- *info=m_alloc_clear(sizeof(struct exec_info));
-
- if(name)
- (*info)->name=m_strdup(name);
- (*info)->binary=binary;
- (*info)->writeonly=writeonly;
-
- /* Expand the args, if any */
- if(args_in && expand_args(*info,args_in))
- goto fail;
-
-#ifdef EXEC_TEMPFILE_ONLY
- if(!(*info)->use_temp_files)
- {
- log_error(_("this platform requires temp files when calling external "
- "programs\n"));
- goto fail;
- }
-
-#else /* !EXEC_TEMPFILE_ONLY */
-
- /* If there are no args, or there are args, but no temp files, we
- can use fork/exec/pipe */
- if(args_in==NULL || (*info)->use_temp_files==0)
- {
- int to[2],from[2];
-
- if(pipe(to)==-1)
- goto fail;
-
- if(pipe(from)==-1)
- {
- close(to[0]);
- close(to[1]);
- goto fail;
- }
-
- if(((*info)->child=fork())==-1)
- {
- close(to[0]);
- close(to[1]);
- close(from[0]);
- close(from[1]);
- goto fail;
- }
-
- if((*info)->child==0)
- {
- char *shell=getenv("SHELL");
-
- if(shell==NULL)
- shell="/bin/sh";
-
- /* I'm the child */
-
- /* If the program isn't going to respond back, they get to
- keep their stdout/stderr */
- if(!(*info)->writeonly)
- {
- /* implied close of STDERR */
- if(dup2(STDOUT_FILENO,STDERR_FILENO)==-1)
- _exit(1);
-
- /* implied close of STDOUT */
- close(from[0]);
- if(dup2(from[1],STDOUT_FILENO)==-1)
- _exit(1);
- }
-
- /* implied close of STDIN */
- close(to[1]);
- if(dup2(to[0],STDIN_FILENO)==-1)
- _exit(1);
-
- if(args_in==NULL)
- {
- if(DBG_EXTPROG)
- log_debug("execlp: %s\n",program);
-
- execlp(program,program,NULL);
- }
- else
- {
- if(DBG_EXTPROG)
- log_debug("execlp: %s -c %s\n",shell,(*info)->command);
-
- execlp(shell,shell,"-c",(*info)->command,NULL);
- }
-
- /* If we get this far the exec failed. Clean up and return. */
-
- log_error(_("unable to execute %s \"%s\": %s\n"),
- args_in==NULL?"program":"shell",
- args_in==NULL?program:shell,
- strerror(errno));
-
- /* This mimics the POSIX sh behavior - 127 means "not found"
- from the shell. */
- if(errno==ENOENT)
- _exit(127);
-
- _exit(1);
- }
-
- /* I'm the parent */
-
- close(to[0]);
-
- (*info)->tochild=fdopen(to[1],binary?"wb":"w");
- if((*info)->tochild==NULL)
- {
- close(to[1]);
- ret=G10ERR_WRITE_FILE;
- goto fail;
- }
-
- close(from[1]);
-
- (*info)->fromchild=iobuf_fdopen(from[0],"r");
- if((*info)->fromchild==NULL)
- {
- close(from[0]);
- ret=G10ERR_READ_FILE;
- goto fail;
- }
-
- /* fd iobufs are cached?! */
- iobuf_ioctl((*info)->fromchild,3,1,NULL);
-
- return 0;
- }
-#endif /* !EXEC_TEMPFILE_ONLY */
-
- if(DBG_EXTPROG)
- log_debug("using temp file `%s'\n",(*info)->tempfile_in);
-
- /* It's not fork/exec/pipe, so create a temp file */
- (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
- if((*info)->tochild==NULL)
- {
- log_error(_("can't create `%s': %s\n"),
- (*info)->tempfile_in,strerror(errno));
- ret=G10ERR_WRITE_FILE;
- goto fail;
- }
-
- ret=0;
-
- fail:
- return ret;
-}
-
-int exec_read(struct exec_info *info)
-{
- int ret=G10ERR_GENERAL;
-
- fclose(info->tochild);
- info->tochild=NULL;
-
- if(info->use_temp_files)
- {
- if(DBG_EXTPROG)
- log_debug("system() command is %s\n",info->command);
-
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- info->progreturn=win_system(info->command);
-#else
- info->progreturn=system(info->command);
-#endif
-
- if(info->progreturn==-1)
- {
- log_error(_("system error while calling external program: %s\n"),
- strerror(errno));
- info->progreturn=127;
- goto fail;
- }
-
-#if defined(WIFEXITED) && defined(WEXITSTATUS)
- if(WIFEXITED(info->progreturn))
- info->progreturn=WEXITSTATUS(info->progreturn);
- else
- {
- log_error(_("unnatural exit of external program\n"));
- info->progreturn=127;
- goto fail;
- }
-#else
- /* If we don't have the macros, do the best we can. */
- info->progreturn = (info->progreturn & 0xff00) >> 8;
-#endif
-
- /* 127 is the magic value returned from system() to indicate
- that the shell could not be executed, or from /bin/sh to
- indicate that the program could not be executed. */
-
- if(info->progreturn==127)
- {
- log_error(_("unable to execute external program\n"));
- goto fail;
- }
-
- if(!info->writeonly)
- {
- info->fromchild=iobuf_open(info->tempfile_out);
- if(info->fromchild==NULL)
- {
- log_error(_("unable to read external program response: %s\n"),
- strerror(errno));
- ret=G10ERR_READ_FILE;
- goto fail;
- }
-
- /* Do not cache this iobuf on close */
- iobuf_ioctl(info->fromchild,3,1,NULL);
- }
- }
-
- ret=0;
-
- fail:
- return ret;
-}
-
-int exec_finish(struct exec_info *info)
-{
- int ret=info->progreturn;
-
- if(info->fromchild)
- iobuf_close(info->fromchild);
-
- if(info->tochild)
- fclose(info->tochild);
-
-#ifndef EXEC_TEMPFILE_ONLY
- if(info->child>0)
- {
- if(waitpid(info->child,&info->progreturn,0)!=0 &&
- WIFEXITED(info->progreturn))
- ret=WEXITSTATUS(info->progreturn);
- else
- {
- log_error(_("unnatural exit of external program\n"));
- ret=127;
- }
- }
-#endif
-
- if(info->madedir && !info->keep_temp_files)
- {
- if(info->tempfile_in)
- {
- if(unlink(info->tempfile_in)==-1)
- log_info(_("WARNING: unable to remove tempfile (%s) `%s': %s\n"),
- "in",info->tempfile_in,strerror(errno));
- }
-
- if(info->tempfile_out)
- {
- if(unlink(info->tempfile_out)==-1)
- log_info(_("WARNING: unable to remove tempfile (%s) `%s': %s\n"),
- "out",info->tempfile_out,strerror(errno));
- }
-
- if(rmdir(info->tempdir)==-1)
- log_info(_("WARNING: unable to remove temp directory `%s': %s\n"),
- info->tempdir,strerror(errno));
- }
-
- m_free(info->command);
- m_free(info->name);
- m_free(info->tempdir);
- m_free(info->tempfile_in);
- m_free(info->tempfile_out);
- m_free(info);
-
- return ret;
-}
-#endif /* ! NO_EXEC */
-
diff --git a/g10/exec.h b/g10/exec.h
deleted file mode 100644
index 427f25810..000000000
--- a/g10/exec.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _EXEC_H_
-#define _EXEC_H_
-
-#include <unistd.h>
-#include <stdio.h>
-#include "iobuf.h"
-
-struct exec_info
-{
- int progreturn,binary,writeonly,madedir,use_temp_files,keep_temp_files;
- pid_t child;
- FILE *tochild;
- IOBUF fromchild;
- char *command,*name,*tempdir,*tempfile_in,*tempfile_out;
-};
-
-int exec_write(struct exec_info **info,const char *program,
- const char *args_in,const char *name,int writeonly,int binary);
-int exec_read(struct exec_info *info);
-int exec_finish(struct exec_info *info);
-int set_exec_path(const char *path,int method);
-
-#endif /* !_EXEC_H_ */
diff --git a/g10/export.c b/g10/export.c
deleted file mode 100644
index 5f6eadcd5..000000000
--- a/g10/export.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/* export.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "i18n.h"
-
-static int do_export( STRLIST users, int secret, unsigned int options );
-static int do_export_stream( IOBUF out, STRLIST users,
- int secret, unsigned int options, int *any );
-
-int
-parse_export_options(char *str,unsigned int *options)
-{
- char *tok;
- int hit=0;
- struct
- {
- char *name;
- unsigned int bit;
- } export_opts[]=
- {
- {"include-non-rfc",EXPORT_INCLUDE_NON_RFC},
- {"include-local-sigs",EXPORT_INCLUDE_LOCAL_SIGS},
- {"include-attributes",EXPORT_INCLUDE_ATTRIBUTES},
- {"include-sensitive-revkeys",EXPORT_INCLUDE_SENSITIVE_REVKEYS},
- {NULL,0}
- /* add tags for include revoked and disabled? */
- };
-
- while((tok=strsep(&str," ,")))
- {
- int i,rev=0;
-
- if(ascii_strncasecmp("no-",tok,3)==0)
- {
- rev=1;
- tok+=3;
- }
-
- for(i=0;export_opts[i].name;i++)
- {
- if(ascii_strcasecmp(export_opts[i].name,tok)==0)
- {
- if(rev)
- *options&=~export_opts[i].bit;
- else
- *options|=export_opts[i].bit;
- hit=1;
- break;
- }
- }
-
- if(!hit && !export_opts[i].name)
- return 0;
- }
-
- return hit;
-}
-
-/****************
- * Export the public keys (to standard out or --output).
- * Depending on opt.armor the output is armored.
- * options are defined in main.h.
- * If USERS is NULL, the complete ring will be exported. */
-int
-export_pubkeys( STRLIST users, unsigned int options )
-{
- return do_export( users, 0, options );
-}
-
-/****************
- * Export to an already opened stream; return -1 if no keys have
- * been exported
- */
-int
-export_pubkeys_stream( IOBUF out, STRLIST users, unsigned int options )
-{
- int any, rc;
-
- rc = do_export_stream( out, users, 0, options, &any );
- if( !rc && !any )
- rc = -1;
- return rc;
-}
-
-int
-export_seckeys( STRLIST users )
-{
- return do_export( users, 1, 0 );
-}
-
-int
-export_secsubkeys( STRLIST users )
-{
- return do_export( users, 2, 0 );
-}
-
-static int
-do_export( STRLIST users, int secret, unsigned int options )
-{
- IOBUF out = NULL;
- int any, rc;
- armor_filter_context_t afx;
- compress_filter_context_t zfx;
-
- memset( &afx, 0, sizeof afx);
- memset( &zfx, 0, sizeof zfx);
-
- rc = open_outfile( NULL, 0, &out );
- if( rc )
- return rc;
-
- if( opt.armor ) {
- afx.what = secret?5:1;
- iobuf_push_filter( out, armor_filter, &afx );
- }
- if( opt.compress_keys && opt.compress )
- iobuf_push_filter( out, compress_filter, &zfx );
- rc = do_export_stream( out, users, secret, options, &any );
-
- if( rc || !any )
- iobuf_cancel(out);
- else
- iobuf_close(out);
- return rc;
-}
-
-
-static int
-do_export_stream( IOBUF out, STRLIST users, int secret,
- unsigned int options, int *any )
-{
- int rc = 0;
- PACKET pkt;
- KBNODE keyblock = NULL;
- KBNODE kbctx, node;
- int ndesc;
- KEYDB_SEARCH_DESC *desc = NULL;
- KEYDB_HANDLE kdbhd;
- STRLIST sl;
-
- *any = 0;
- init_packet( &pkt );
- kdbhd = keydb_new (secret);
-
- if (!users) {
- ndesc = 1;
- desc = m_alloc_clear ( ndesc * sizeof *desc);
- desc[0].mode = KEYDB_SEARCH_MODE_FIRST;
- }
- else {
- for (ndesc=0, sl=users; sl; sl = sl->next, ndesc++)
- ;
- desc = m_alloc ( ndesc * sizeof *desc);
-
- for (ndesc=0, sl=users; sl; sl = sl->next) {
- if (classify_user_id (sl->d, desc+ndesc))
- ndesc++;
- else
- log_error (_("key `%s' not found: %s\n"),
- sl->d, g10_errstr (G10ERR_INV_USER_ID));
- }
-
- /* it would be nice to see which of the given users did
- actually match one in the keyring. To implement this we
- need to have a found flag for each entry in desc and to set
- this we must check all those entries after a match to mark
- all matched one - currently we stop at the first match. To
- do this we need an extra flag to enable this feature so */
- }
-
-
- while (!(rc = keydb_search (kdbhd, desc, ndesc))) {
- int sha1_warned=0;
- u32 sk_keyid[2];
-
- if (!users)
- desc[0].mode = KEYDB_SEARCH_MODE_NEXT;
-
- /* read the keyblock */
- rc = keydb_get_keyblock (kdbhd, &keyblock );
- if( rc ) {
- log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- /* do not export keys which are incompatible with rfc2440 */
- if( !(options&EXPORT_INCLUDE_NON_RFC) &&
- (node = find_kbnode( keyblock, PKT_PUBLIC_KEY )) ) {
- PKT_public_key *pk = node->pkt->pkt.public_key;
- if( pk->version == 3 && pk->pubkey_algo > 3 ) {
- log_info(_("key %08lX: not a rfc2440 key - skipped\n"),
- (ulong)keyid_from_pk( pk, NULL) );
- continue;
- }
- }
-
- node=find_kbnode( keyblock, PKT_SECRET_KEY );
- if(node)
- {
- PKT_secret_key *sk=node->pkt->pkt.secret_key;
-
- keyid_from_sk(sk,sk_keyid);
-
- /* we can't apply GNU mode 1001 on an unprotected key */
- if( secret == 2 && !sk->is_protected )
- {
- log_info(_("key %08lX: not protected - skipped\n"),
- (ulong)sk_keyid[1]);
- continue;
- }
-
- /* no v3 keys with GNU mode 1001 */
- if( secret == 2 && sk->version == 3 )
- {
- log_info(_("key %08lX: PGP 2.x style key - skipped\n"),
- (ulong)sk_keyid[1]);
- continue;
- }
- }
-
- /* and write it */
- for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) {
- /* don't export any comment packets but those in the
- * secret keyring */
- if( !secret && node->pkt->pkttype == PKT_COMMENT )
- continue;
- /* make sure that ring_trust packets never get exported */
- if (node->pkt->pkttype == PKT_RING_TRUST)
- continue;
-
- if( node->pkt->pkttype == PKT_SIGNATURE ) {
- /* do not export packets which are marked as not exportable */
- if( !(options&EXPORT_INCLUDE_LOCAL_SIGS) &&
- !node->pkt->pkt.signature->flags.exportable )
- continue; /* not exportable */
-
- /* Do not export packets with a "sensitive" revocation
- key unless the user wants us to. Note that we do
- export these when issuing the actual revocation (see
- revoke.c). */
- if( !(options&EXPORT_INCLUDE_SENSITIVE_REVKEYS) &&
- node->pkt->pkt.signature->revkey ) {
- int i;
-
- for(i=0;i<node->pkt->pkt.signature->numrevkeys;i++)
- if(node->pkt->pkt.signature->revkey[i]->class & 0x40)
- break;
-
- if(i<node->pkt->pkt.signature->numrevkeys)
- continue;
- }
-
- /* delete our verification cache */
- delete_sig_subpkt (node->pkt->pkt.signature->unhashed,
- SIGSUBPKT_PRIV_VERIFY_CACHE);
- }
-
- /* Don't export attribs? */
- if( !(options&EXPORT_INCLUDE_ATTRIBUTES) &&
- node->pkt->pkttype == PKT_USER_ID &&
- node->pkt->pkt.user_id->attrib_data ) {
- /* Skip until we get to something that is not an attrib
- or a signature on an attrib */
- while(kbctx->next && kbctx->next->pkt->pkttype==PKT_SIGNATURE) {
- kbctx=kbctx->next;
- }
-
- continue;
- }
-
- if( secret == 2 && node->pkt->pkttype == PKT_SECRET_KEY ) {
- /* we don't want to export the secret parts of the
- * primary key, this is done by using GNU protection mode 1001
- */
- int save_mode = node->pkt->pkt.secret_key->protect.s2k.mode;
- node->pkt->pkt.secret_key->protect.s2k.mode = 1001;
- rc = build_packet( out, node->pkt );
- node->pkt->pkt.secret_key->protect.s2k.mode = save_mode;
- }
- else {
- /* Warn the user if the secret key or any of the secret
- subkeys are protected with SHA1 and we have
- simple_sk_checksum set. */
- if(!sha1_warned && opt.simple_sk_checksum &&
- (node->pkt->pkttype==PKT_SECRET_KEY ||
- node->pkt->pkttype==PKT_SECRET_SUBKEY) &&
- node->pkt->pkt.secret_key->protect.sha1chk)
- {
- /* I hope this warning doesn't confuse people. */
- log_info("WARNING: secret key %08lX does not have a "
- "simple SK checksum\n",(ulong)sk_keyid[1]);
-
- sha1_warned=1;
- }
-
- rc = build_packet( out, node->pkt );
- }
-
- if( rc ) {
- log_error("build_packet(%d) failed: %s\n",
- node->pkt->pkttype, g10_errstr(rc) );
- rc = G10ERR_WRITE_FILE;
- goto leave;
- }
- }
- ++*any;
- }
- if( rc == -1 )
- rc = 0;
-
- leave:
- m_free(desc);
- keydb_release (kdbhd);
- release_kbnode( keyblock );
- if( !*any )
- log_info(_("WARNING: nothing exported\n"));
- return rc;
-}
-
diff --git a/g10/filter.h b/g10/filter.h
deleted file mode 100644
index c933d2383..000000000
--- a/g10/filter.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* filter.h
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_FILTER_H
-#define G10_FILTER_H
-
-#include "types.h"
-#include "cipher.h"
-
-typedef struct {
- MD_HANDLE md; /* catch all */
- MD_HANDLE md2; /* if we want to calculate an alternate hash */
- size_t maxbuf_size;
-} md_filter_context_t;
-
-typedef struct {
- /* these fields may be initialized */
- int what; /* what kind of armor headers to write */
- int only_keyblocks; /* skip all headers but ".... key block" */
- const char *hdrlines; /* write these headerlines */
-
- /* these fileds must be initialized to zero */
- int no_openpgp_data; /* output flag: "No valid OpenPGP data found" */
-
- /* the following fields must be initialized to zero */
- int inp_checked; /* set if the input has been checked */
- int inp_bypass; /* set if the input is not armored */
- int in_cleartext; /* clear text message */
- int not_dash_escaped; /* clear text is not dash escaped */
- int hashes; /* detected hash algorithms */
- int faked; /* we are faking a literal data packet */
- int truncated; /* number of truncated lines */
- int qp_detected;
- int pgp2mode;
-
- byte *buffer; /* malloced buffer */
- unsigned buffer_size; /* and size of this buffer */
- unsigned buffer_len; /* used length of the buffer */
- unsigned buffer_pos; /* read position */
-
- byte radbuf[4];
- int idx, idx2;
- u32 crc;
-
- int status; /* an internal state flag */
- int cancel;
- int any_data; /* any valid armored data seen */
- int pending_lf; /* used together with faked */
-} armor_filter_context_t;
-
-struct unarmor_pump_s;
-typedef struct unarmor_pump_s *UnarmorPump;
-
-
-struct compress_filter_context_s {
- int status;
- void *opaque; /* (used for z_stream) */
- byte *inbuf;
- unsigned inbufsize;
- byte *outbuf;
- unsigned outbufsize;
- int algo; /* compress algo */
- int algo1hack;
- int new_ctb;
- void (*release)(struct compress_filter_context_s*);
-};
-typedef struct compress_filter_context_s compress_filter_context_t;
-
-
-typedef struct {
- DEK *dek;
- u32 datalen;
- CIPHER_HANDLE cipher_hd;
- int header;
- MD_HANDLE mdc_hash;
- byte enchash[20];
- int create_mdc; /* flag will be set by the cipher filter */
-} cipher_filter_context_t;
-
-
-
-typedef struct {
- byte *buffer; /* malloced buffer */
- unsigned buffer_size; /* and size of this buffer */
- unsigned buffer_len; /* used length of the buffer */
- unsigned buffer_pos; /* read position */
- int truncated; /* number of truncated lines */
- int not_dash_escaped;
- int escape_from;
- MD_HANDLE md;
- int pending_lf;
- int pending_esc;
-} text_filter_context_t;
-
-
-/* encrypt_filter_context_t defined in main.h */
-
-/*-- mdfilter.c --*/
-int md_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len);
-void free_md_filter_context( md_filter_context_t *mfx );
-
-/*-- armor.c --*/
-int use_armor_filter( IOBUF a );
-int armor_filter( void *opaque, int control,
- IOBUF chain, byte *buf, size_t *ret_len);
-UnarmorPump unarmor_pump_new (void);
-void unarmor_pump_release (UnarmorPump x);
-int unarmor_pump (UnarmorPump x, int c);
-
-/*-- compress.c --*/
-int compress_filter( void *opaque, int control,
- IOBUF chain, byte *buf, size_t *ret_len);
-
-/*-- cipher.c --*/
-int cipher_filter( void *opaque, int control,
- IOBUF chain, byte *buf, size_t *ret_len);
-
-/*-- textfilter.c --*/
-int text_filter( void *opaque, int control,
- IOBUF chain, byte *buf, size_t *ret_len);
-int copy_clearsig_text( IOBUF out, IOBUF inp, MD_HANDLE md,
- int escape_dash, int escape_from, int pgp2mode );
-
-
-
-#endif /*G10_FILTER_H*/
diff --git a/g10/free-packet.c b/g10/free-packet.c
deleted file mode 100644
index e760999be..000000000
--- a/g10/free-packet.c
+++ /dev/null
@@ -1,547 +0,0 @@
-/* free-packet.c - cleanup stuff for packets
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "packet.h"
-#include "iobuf.h"
-#include "mpi.h"
-#include "util.h"
-#include "cipher.h"
-#include "memory.h"
-#include "options.h"
-
-void
-free_symkey_enc( PKT_symkey_enc *enc )
-{
- m_free(enc);
-}
-
-void
-free_pubkey_enc( PKT_pubkey_enc *enc )
-{
- int n, i;
- n = pubkey_get_nenc( enc->pubkey_algo );
- if( !n )
- mpi_free(enc->data[0]);
- for(i=0; i < n; i++ )
- mpi_free( enc->data[i] );
- m_free(enc);
-}
-
-void
-free_seckey_enc( PKT_signature *sig )
-{
- int n, i;
-
- n = pubkey_get_nsig( sig->pubkey_algo );
- if( !n )
- mpi_free(sig->data[0]);
- for(i=0; i < n; i++ )
- mpi_free( sig->data[i] );
-
- m_free(sig->revkey);
- m_free(sig->hashed);
- m_free(sig->unhashed);
- m_free(sig);
-}
-
-
-
-void
-release_public_key_parts( PKT_public_key *pk )
-{
- int n, i;
- n = pubkey_get_npkey( pk->pubkey_algo );
- if( !n )
- mpi_free(pk->pkey[0]);
- for(i=0; i < n; i++ ) {
- mpi_free( pk->pkey[i] );
- pk->pkey[i] = NULL;
- }
- if (pk->prefs) {
- m_free (pk->prefs);
- pk->prefs = NULL;
- }
- if( pk->namehash ) {
- m_free(pk->namehash);
- pk->namehash = NULL;
- }
- if (pk->user_id) {
- free_user_id (pk->user_id);
- pk->user_id = NULL;
- }
- if (pk->revkey) {
- m_free(pk->revkey);
- pk->revkey=NULL;
- pk->numrevkeys=0;
- }
-}
-
-
-void
-free_public_key( PKT_public_key *pk )
-{
- release_public_key_parts( pk );
- m_free(pk);
-}
-
-
-static subpktarea_t *
-cp_subpktarea (subpktarea_t *s )
-{
- subpktarea_t *d;
-
- if( !s )
- return NULL;
- d = m_alloc (sizeof (*d) + s->size - 1 );
- d->size = s->size;
- d->len = s->len;
- memcpy (d->data, s->data, s->len);
- return d;
-}
-
-/*
- * Return a copy of the preferences
- */
-prefitem_t *
-copy_prefs (const prefitem_t *prefs)
-{
- size_t n;
- prefitem_t *new;
-
- if (!prefs)
- return NULL;
-
- for (n=0; prefs[n].type; n++)
- ;
- new = m_alloc ( sizeof (*new) * (n+1));
- for (n=0; prefs[n].type; n++) {
- new[n].type = prefs[n].type;
- new[n].value = prefs[n].value;
- }
- new[n].type = PREFTYPE_NONE;
- new[n].value = 0;
-
- return new;
-}
-
-
-PKT_public_key *
-copy_public_key ( PKT_public_key *d, PKT_public_key *s)
-{
- int n, i;
-
- if( !d )
- d = m_alloc(sizeof *d);
- memcpy( d, s, sizeof *d );
- d->user_id = scopy_user_id (s->user_id);
- d->prefs = copy_prefs (s->prefs);
- n = pubkey_get_npkey( s->pubkey_algo );
- if( !n )
- d->pkey[0] = mpi_copy(s->pkey[0]);
- else {
- for(i=0; i < n; i++ )
- d->pkey[i] = mpi_copy( s->pkey[i] );
- }
- if( !s->revkey && s->numrevkeys )
- BUG();
- if( s->numrevkeys ) {
- d->revkey = m_alloc(sizeof(struct revocation_key)*s->numrevkeys);
- memcpy(d->revkey,s->revkey,sizeof(struct revocation_key)*s->numrevkeys);
- }
- else
- d->revkey = NULL;
- return d;
-}
-
-/****************
- * Replace all common parts of a sk by the one from the public key.
- * This is a hack and a better solution will be to just store the real secret
- * parts somewhere and don't duplicate all the other stuff.
- */
-void
-copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk )
-{
- sk->expiredate = pk->expiredate;
- sk->pubkey_algo = pk->pubkey_algo;
- sk->pubkey_usage= pk->pubkey_usage;
- sk->req_usage = pk->req_usage;
- sk->req_algo = pk->req_algo;
- sk->has_expired = pk->has_expired;
- sk->is_revoked = pk->is_revoked;
- sk->is_valid = pk->is_valid;
- sk->main_keyid[0]= pk->main_keyid[0];
- sk->main_keyid[1]= pk->main_keyid[1];
- sk->keyid[0] = pk->keyid[0];
- sk->keyid[1] = pk->keyid[1];
-}
-
-PKT_signature *
-copy_signature( PKT_signature *d, PKT_signature *s )
-{
- int n, i;
-
- if( !d )
- d = m_alloc(sizeof *d);
- memcpy( d, s, sizeof *d );
- n = pubkey_get_nsig( s->pubkey_algo );
- if( !n )
- d->data[0] = mpi_copy(s->data[0]);
- else {
- for(i=0; i < n; i++ )
- d->data[i] = mpi_copy( s->data[i] );
- }
- d->hashed = cp_subpktarea (s->hashed);
- d->unhashed = cp_subpktarea (s->unhashed);
- if(s->numrevkeys)
- {
- d->revkey=NULL;
- d->numrevkeys=0;
- parse_revkeys(d);
- }
- return d;
-}
-
-
-/*
- * shallow copy of the user ID
- */
-PKT_user_id *
-scopy_user_id (PKT_user_id *s)
-{
- if (s)
- s->ref++;
- return s;
-}
-
-
-
-void
-release_secret_key_parts( PKT_secret_key *sk )
-{
- int n, i;
-
- n = pubkey_get_nskey( sk->pubkey_algo );
- if( !n )
- mpi_free(sk->skey[0]);
- for(i=0; i < n; i++ ) {
- mpi_free( sk->skey[i] );
- sk->skey[i] = NULL;
- }
-}
-
-void
-free_secret_key( PKT_secret_key *sk )
-{
- release_secret_key_parts( sk );
- m_free(sk);
-}
-
-PKT_secret_key *
-copy_secret_key( PKT_secret_key *d, PKT_secret_key *s )
-{
- int n, i;
-
- if( !d )
- d = m_alloc(sizeof *d);
- memcpy( d, s, sizeof *d );
- n = pubkey_get_nskey( s->pubkey_algo );
- if( !n )
- d->skey[0] = mpi_copy(s->skey[0]);
- else {
- for(i=0; i < n; i++ )
- d->skey[i] = mpi_copy( s->skey[i] );
- }
- return d;
-}
-
-void
-free_comment( PKT_comment *rem )
-{
- m_free(rem);
-}
-
-void
-free_attributes(PKT_user_id *uid)
-{
- m_free(uid->attribs);
- m_free(uid->attrib_data);
-
- uid->attribs=NULL;
- uid->attrib_data=NULL;
- uid->attrib_len=0;
-}
-
-void
-free_user_id (PKT_user_id *uid)
-{
- assert (uid->ref > 0);
- if (--uid->ref)
- return;
-
- free_attributes(uid);
-
- if (uid->prefs)
- m_free (uid->prefs);
- m_free (uid);
-}
-
-void
-free_compressed( PKT_compressed *zd )
-{
- if( zd->buf ) { /* have to skip some bytes */
- /* don't have any information about the length, so
- * we assume this is the last packet */
- while( iobuf_read( zd->buf, NULL, 1<<30 ) != -1 )
- ;
- }
- m_free(zd);
-}
-
-void
-free_encrypted( PKT_encrypted *ed )
-{
- if( ed->buf ) { /* have to skip some bytes */
- if( iobuf_in_block_mode(ed->buf) ) {
- while( iobuf_read( ed->buf, NULL, 1<<30 ) != -1 )
- ;
- }
- else {
- while( ed->len ) { /* skip the packet */
- int n = iobuf_read( ed->buf, NULL, ed->len );
- if( n == -1 )
- ed->len = 0;
- else
- ed->len -= n;
- }
- }
- }
- m_free(ed);
-}
-
-
-void
-free_plaintext( PKT_plaintext *pt )
-{
- if( pt->buf ) { /* have to skip some bytes */
- if( iobuf_in_block_mode(pt->buf) ) {
- while( iobuf_read( pt->buf, NULL, 1<<30 ) != -1 )
- ;
- }
- else {
- while( pt->len ) { /* skip the packet */
- int n = iobuf_read( pt->buf, NULL, pt->len );
- if( n == -1 )
- pt->len = 0;
- else
- pt->len -= n;
- }
- }
- }
- m_free(pt);
-}
-
-/****************
- * Free the packet in pkt.
- */
-void
-free_packet( PACKET *pkt )
-{
- if( !pkt || !pkt->pkt.generic )
- return;
-
- if( DBG_MEMORY )
- log_debug("free_packet() type=%d\n", pkt->pkttype );
-
- switch( pkt->pkttype ) {
- case PKT_SIGNATURE:
- free_seckey_enc( pkt->pkt.signature );
- break;
- case PKT_PUBKEY_ENC:
- free_pubkey_enc( pkt->pkt.pubkey_enc );
- break;
- case PKT_SYMKEY_ENC:
- free_symkey_enc( pkt->pkt.symkey_enc );
- break;
- case PKT_PUBLIC_KEY:
- case PKT_PUBLIC_SUBKEY:
- free_public_key( pkt->pkt.public_key );
- break;
- case PKT_SECRET_KEY:
- case PKT_SECRET_SUBKEY:
- free_secret_key( pkt->pkt.secret_key );
- break;
- case PKT_COMMENT:
- free_comment( pkt->pkt.comment );
- break;
- case PKT_USER_ID:
- free_user_id( pkt->pkt.user_id );
- break;
- case PKT_COMPRESSED:
- free_compressed( pkt->pkt.compressed);
- break;
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC:
- free_encrypted( pkt->pkt.encrypted );
- break;
- case PKT_PLAINTEXT:
- free_plaintext( pkt->pkt.plaintext );
- break;
- default:
- m_free( pkt->pkt.generic );
- break;
- }
- pkt->pkt.generic = NULL;
-}
-
-/****************
- * returns 0 if they match.
- */
-int
-cmp_public_keys( PKT_public_key *a, PKT_public_key *b )
-{
- int n, i;
-
- if( a->timestamp != b->timestamp )
- return -1;
- if( a->version < 4 && a->expiredate != b->expiredate )
- return -1;
- if( a->pubkey_algo != b->pubkey_algo )
- return -1;
-
- n = pubkey_get_npkey( b->pubkey_algo );
- if( !n )
- return -1; /* can't compare due to unknown algorithm */
- for(i=0; i < n; i++ ) {
- if( mpi_cmp( a->pkey[i], b->pkey[i] ) )
- return -1;
- }
-
- return 0;
-}
-
-/****************
- * Returns 0 if they match.
- * We only compare the public parts.
- */
-int
-cmp_secret_keys( PKT_secret_key *a, PKT_secret_key *b )
-{
- int n, i;
-
- if( a->timestamp != b->timestamp )
- return -1;
- if( a->version < 4 && a->expiredate != b->expiredate )
- return -1;
- if( a->pubkey_algo != b->pubkey_algo )
- return -1;
-
- n = pubkey_get_npkey( b->pubkey_algo );
- if( !n )
- return -1; /* can't compare due to unknown algorithm */
- for(i=0; i < n; i++ ) {
- if( mpi_cmp( a->skey[i], b->skey[i] ) )
- return -1;
- }
-
- return 0;
-}
-
-/****************
- * Returns 0 if they match.
- */
-int
-cmp_public_secret_key( PKT_public_key *pk, PKT_secret_key *sk )
-{
- int n, i;
-
- if( pk->timestamp != sk->timestamp )
- return -1;
- if( pk->version < 4 && pk->expiredate != sk->expiredate )
- return -1;
- if( pk->pubkey_algo != sk->pubkey_algo )
- return -1;
-
- n = pubkey_get_npkey( pk->pubkey_algo );
- if( !n )
- return -1; /* can't compare due to unknown algorithm */
- for(i=0; i < n; i++ ) {
- if( mpi_cmp( pk->pkey[i] , sk->skey[i] ) )
- return -1;
- }
- return 0;
-}
-
-
-
-int
-cmp_signatures( PKT_signature *a, PKT_signature *b )
-{
- int n, i;
-
- if( a->keyid[0] != b->keyid[0] )
- return -1;
- if( a->keyid[1] != b->keyid[1] )
- return -1;
- if( a->pubkey_algo != b->pubkey_algo )
- return -1;
-
- n = pubkey_get_nsig( a->pubkey_algo );
- if( !n )
- return -1; /* can't compare due to unknown algorithm */
- for(i=0; i < n; i++ ) {
- if( mpi_cmp( a->data[i] , b->data[i] ) )
- return -1;
- }
- return 0;
-}
-
-
-/****************
- * Returns: true if the user ids do not match
- */
-int
-cmp_user_ids( PKT_user_id *a, PKT_user_id *b )
-{
- int res=1;
-
- if( a == b )
- return 0;
-
- if( a->attrib_data && b->attrib_data )
- {
- res = a->attrib_len - b->attrib_len;
- if( !res )
- res = memcmp( a->attrib_data, b->attrib_data, a->attrib_len );
- }
- else if( !a->attrib_data && !b->attrib_data )
- {
- res = a->len - b->len;
- if( !res )
- res = memcmp( a->name, b->name, a->len );
- }
-
- return res;
-}
diff --git a/g10/g10.c b/g10/g10.c
deleted file mode 100644
index c2e095bf9..000000000
--- a/g10/g10.c
+++ /dev/null
@@ -1,2816 +0,0 @@
-/* g10.c - The GnuPG utility (main for gpg)
- * Copyright (C) 1998,1999,2000,2001,2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <assert.h>
-#ifdef HAVE_DOSISH_SYSTEM
- #include <fcntl.h> /* for setmode() */
-#endif
-#ifdef HAVE_STAT
-#include <sys/stat.h> /* for stat() */
-#endif
-
-#define INCLUDED_BY_MAIN_MODULE 1
-#include "packet.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "options.h"
-#include "keydb.h"
-#include "trustdb.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "filter.h"
-#include "ttyio.h"
-#include "i18n.h"
-#include "status.h"
-#include "g10defs.h"
-#include "keyserver-internal.h"
-#include "exec.h"
-
-enum cmd_and_opt_values { aNull = 0,
- oArmor = 'a',
- aDetachedSign = 'b',
- aSym = 'c',
- aDecrypt = 'd',
- aEncr = 'e',
- aEncrFiles,
- oInteractive = 'i',
- oKOption = 'k',
- oDryRun = 'n',
- oOutput = 'o',
- oQuiet = 'q',
- oRecipient = 'r',
- aSign = 's',
- oTextmodeShort= 't',
- oUser = 'u',
- oVerbose = 'v',
- oCompress = 'z',
- oNotation = 'N',
- oBatch = 500,
- oSigNotation,
- oCertNotation,
- oShowNotation,
- oNoShowNotation,
- aDecryptFiles,
- aClearsign,
- aStore,
- aKeygen,
- aSignEncr,
- aSignSym,
- aSignKey,
- aLSignKey,
- aNRSignKey,
- aNRLSignKey,
- aListPackets,
- aEditKey,
- aDeleteKeys,
- aDeleteSecretKeys,
- aDeleteSecretAndPublicKeys,
- aKMode,
- aKModeC,
- aImport,
- aFastImport,
- aVerify,
- aVerifyFiles,
- aListKeys,
- aListSigs,
- aListSecretKeys,
- aSendKeys,
- aRecvKeys,
- aSearchKeys,
- aExport,
- aExportAll,
- aExportSecret,
- aExportSecretSub,
- aCheckKeys,
- aGenRevoke,
- aDesigRevoke,
- aPrimegen,
- aPrintMD,
- aPrintMDs,
- aCheckTrustDB,
- aUpdateTrustDB,
- aFixTrustDB,
- aListTrustDB,
- aListTrustPath,
- aExportOwnerTrust,
- aImportOwnerTrust,
- aDeArmor,
- aEnArmor,
- aGenRandom,
- aPipeMode,
- aRebuildKeydbCaches,
- aRefreshKeys,
-
- oTextmode,
- oExpert,
- oNoExpert,
- oAskSigExpire,
- oNoAskSigExpire,
- oAskCertExpire,
- oNoAskCertExpire,
- oFingerprint,
- oWithFingerprint,
- oAnswerYes,
- oAnswerNo,
- oDefCertCheckLevel,
- oKeyring,
- oSecretKeyring,
- oShowKeyring,
- oDefaultKey,
- oDefRecipient,
- oDefRecipientSelf,
- oNoDefRecipient,
- oOptions,
- oDebug,
- oDebugAll,
- oStatusFD,
-#ifdef __riscos__
- oStatusFile,
-#endif /* __riscos__ */
- oAttributeFD,
-#ifdef __riscos__
- oAttributeFile,
-#endif /* __riscos__ */
- oSKComments,
- oNoSKComments,
- oNoVersion,
- oEmitVersion,
- oCompletesNeeded,
- oMarginalsNeeded,
- oMaxCertDepth,
- oLoadExtension,
- oRFC1991,
- oOpenPGP,
- oPGP2,
- oNoPGP2,
- oPGP6,
- oNoPGP6,
- oPGP7,
- oNoPGP7,
- oCipherAlgo,
- oDigestAlgo,
- oCertDigestAlgo,
- oCompressAlgo,
- oPasswdFD,
-#ifdef __riscos__
- oPasswdFile,
-#endif /* __riscos__ */
- oCommandFD,
-#ifdef __riscos__
- oCommandFile,
-#endif /* __riscos__ */
- oQuickRandom,
- oNoVerbose,
- oTrustDBName,
- oNoSecmemWarn,
- oNoPermissionWarn,
- oNoMDCWarn,
- oNoArmor,
- oNoDefKeyring,
- oNoGreeting,
- oNoTTY,
- oNoOptions,
- oNoBatch,
- oHomedir,
- oWithColons,
- oWithKeyData,
- oSkipVerify,
- oCompressKeys,
- oCompressSigs,
- oAlwaysTrust,
- oEmuChecksumBug,
- oRunAsShmCP,
- oSetFilename,
- oForYourEyesOnly,
- oNoForYourEyesOnly,
- oSetPolicyURL,
- oSigPolicyURL,
- oCertPolicyURL,
- oShowPolicyURL,
- oNoShowPolicyURL,
- oUseEmbeddedFilename,
- oComment,
- oDefaultComment,
- oThrowKeyid,
- oShowPhotos,
- oNoShowPhotos,
- oPhotoViewer,
- oForceV3Sigs,
- oNoForceV3Sigs,
- oForceV4Certs,
- oNoForceV4Certs,
- oForceMDC,
- oNoForceMDC,
- oDisableMDC,
- oNoDisableMDC,
- oS2KMode,
- oS2KDigest,
- oS2KCipher,
- oSimpleSKChecksum,
- oCharset,
- oNotDashEscaped,
- oEscapeFrom,
- oNoEscapeFrom,
- oLockOnce,
- oLockMultiple,
- oLockNever,
- oKeyServer,
- oKeyServerOptions,
- oImportOptions,
- oExportOptions,
- oTempDir,
- oExecPath,
- oEncryptTo,
- oNoEncryptTo,
- oLoggerFD,
-#ifdef __riscos__
- oLoggerFile,
-#endif /* __riscos__ */
- oUtf8Strings,
- oNoUtf8Strings,
- oDisableCipherAlgo,
- oDisablePubkeyAlgo,
- oAllowNonSelfsignedUID,
- oNoAllowNonSelfsignedUID,
- oAllowFreeformUID,
- oNoAllowFreeformUID,
- oAllowSecretKeyImport,
- oEnableSpecialFilenames,
- oNoLiteral,
- oSetFilesize,
- oHonorHttpProxy,
- oFastListMode,
- oListOnly,
- oIgnoreTimeConflict,
- oIgnoreValidFrom,
- oIgnoreCrcError,
- oIgnoreMDCError,
- oShowSessionKey,
- oOverrideSessionKey,
- oNoRandomSeedFile,
- oAutoKeyRetrieve,
- oNoAutoKeyRetrieve,
- oUseAgent,
- oNoUseAgent,
- oGpgAgentInfo,
- oMergeOnly,
- oTryAllSecrets,
- oTrustedKey,
- oNoExpensiveTrustChecks,
- oFixedListMode,
- oNoSigCache,
- oNoSigCreateCheck,
- oAutoCheckTrustDB,
- oNoAutoCheckTrustDB,
- oPreservePermissions,
- oDefaultPreferenceList,
- oPersonalCipherPreferences,
- oPersonalDigestPreferences,
- oPersonalCompressPreferences,
- oEmuMDEncodeBug,
- oDisplay,
- oTTYname,
- oTTYtype,
- oLCctype,
- oLCmessages,
- oGroup,
- oStrict,
- oNoStrict,
-aTest };
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 300, NULL, 0, N_("@Commands:\n ") },
-
- { aSign, "sign", 256, N_("|[file]|make a signature")},
- { aClearsign, "clearsign", 256, N_("|[file]|make a clear text signature") },
- { aDetachedSign, "detach-sign", 256, N_("make a detached signature")},
- { aEncr, "encrypt", 256, N_("encrypt data")},
- { aEncrFiles, "encrypt-files", 256, N_("|[files]|encrypt files")},
- { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")},
- { aStore, "store", 256, N_("store only")},
- { aDecrypt, "decrypt", 256, N_("decrypt data (default)")},
- { aDecryptFiles, "decrypt-files", 256, N_("|[files]|decrypt files")},
- { aVerify, "verify" , 256, N_("verify a signature")},
- { aVerifyFiles, "verify-files" , 256, "@" },
- { aListKeys, "list-keys", 256, N_("list keys")},
- { aListKeys, "list-public-keys", 256, "@" },
- { aListSigs, "list-sigs", 256, N_("list keys and signatures")},
- { aCheckKeys, "check-sigs",256, N_("check key signatures")},
- { oFingerprint, "fingerprint", 256, N_("list keys and fingerprints")},
- { aListSecretKeys, "list-secret-keys", 256, N_("list secret keys")},
- { aKeygen, "gen-key", 256, N_("generate a new key pair")},
- { aDeleteKeys,"delete-keys",256,N_("remove keys from the public keyring")},
- { aDeleteSecretKeys, "delete-secret-keys",256,
- N_("remove keys from the secret keyring")},
- { aSignKey, "sign-key" ,256, N_("sign a key")},
- { aLSignKey, "lsign-key" ,256, N_("sign a key locally")},
- { aNRSignKey, "nrsign-key" ,256, N_("sign a key non-revocably")},
- { aNRLSignKey, "nrlsign-key" ,256, N_("sign a key locally and non-revocably")},
- { aEditKey, "edit-key" ,256, N_("sign or edit a key")},
- { aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")},
- { aDesigRevoke, "desig-revoke",256, "@" },
- { aExport, "export" , 256, N_("export keys") },
- { aSendKeys, "send-keys" , 256, N_("export keys to a key server") },
- { aRecvKeys, "recv-keys" , 256, N_("import keys from a key server") },
- { aSearchKeys, "search-keys" , 256,
- N_("search for keys on a key server") },
- { aRefreshKeys, "refresh-keys", 256,
- N_("update all keys from a keyserver")},
- { aExportAll, "export-all" , 256, "@" },
- { aExportSecret, "export-secret-keys" , 256, "@" },
- { aExportSecretSub, "export-secret-subkeys" , 256, "@" },
- { aImport, "import", 256 , N_("import/merge keys")},
- { aFastImport, "fast-import", 256 , "@"},
- { aListPackets, "list-packets",256,N_("list only the sequence of packets")},
- { aExportOwnerTrust,
- "export-ownertrust", 256, N_("export the ownertrust values")},
- { aImportOwnerTrust,
- "import-ownertrust", 256 , N_("import ownertrust values")},
- { aUpdateTrustDB,
- "update-trustdb",0 , N_("update the trust database")},
- { aCheckTrustDB,
- "check-trustdb",0 , N_("unattended trust database update")},
- { aFixTrustDB, "fix-trustdb",0 , N_("fix a corrupted trust database")},
- { aDeArmor, "dearmor", 256, N_("De-Armor a file or stdin") },
- { aDeArmor, "dearmour", 256, "@" },
- { aEnArmor, "enarmor", 256, N_("En-Armor a file or stdin") },
- { aEnArmor, "enarmour", 256, "@" },
- { aPrintMD, "print-md" , 256, N_("|algo [files]|print message digests")},
- { aPrimegen, "gen-prime" , 256, "@" },
- { aGenRandom, "gen-random" , 256, "@" },
-
- { 301, NULL, 0, N_("@\nOptions:\n ") },
-
- { oArmor, "armor", 0, N_("create ascii armored output")},
- { oArmor, "armour", 0, "@" },
- { oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")},
- { oRecipient, "remote-user", 2, "@"}, /* old option name */
- { oDefRecipient, "default-recipient" ,2,
- N_("|NAME|use NAME as default recipient")},
- { oDefRecipientSelf, "default-recipient-self" ,0,
- N_("use the default key as default recipient")},
- { oNoDefRecipient, "no-default-recipient", 0, "@" },
- { oTempDir, "temp-directory", 2, "@" },
- { oExecPath, "exec-path", 2, "@" },
- { oEncryptTo, "encrypt-to", 2, "@" },
- { oNoEncryptTo, "no-encrypt-to", 0, "@" },
- { oUser, "local-user",2, N_("use this user-id to sign or decrypt")},
- { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") },
- { oTextmodeShort, NULL, 0, "@"},
- { oTextmode, "textmode", 0, N_("use canonical text mode")},
- { oExpert, "expert", 0, "@"},
- { oNoExpert, "no-expert", 0, "@"},
- { oAskSigExpire, "ask-sig-expire", 0, "@"},
- { oNoAskSigExpire, "no-ask-sig-expire", 0, "@"},
- { oAskCertExpire, "ask-cert-expire", 0, "@"},
- { oNoAskCertExpire, "no-ask-cert-expire", 0, "@"},
- { oOutput, "output", 2, N_("use as output file")},
- { oVerbose, "verbose", 0, N_("verbose") },
- { oQuiet, "quiet", 0, N_("be somewhat more quiet") },
- { oNoTTY, "no-tty", 0, N_("don't use the terminal at all") },
- { oForceV3Sigs, "force-v3-sigs", 0, N_("force v3 signatures") },
- { oNoForceV3Sigs, "no-force-v3-sigs", 0, N_("do not force v3 signatures") },
- { oForceV4Certs, "force-v4-certs", 0, N_("force v4 key signatures") },
- { oNoForceV4Certs, "no-force-v4-certs", 0, N_("do not force v4 key signatures") },
- { oForceMDC, "force-mdc", 0, N_("always use a MDC for encryption") },
- { oNoForceMDC, "no-force-mdc", 0, "@" },
- { oDisableMDC, "disable-mdc", 0, N_("never use a MDC for encryption") },
- { oNoDisableMDC, "no-disable-mdc", 0, "@" },
- { oDryRun, "dry-run", 0, N_("do not make any changes") },
- { oInteractive, "interactive", 0, N_("prompt before overwriting") },
- { oUseAgent, "use-agent",0, N_("use the gpg-agent")},
- { oNoUseAgent, "no-use-agent",0, "@"},
- { oGpgAgentInfo, "gpg-agent-info",2, "@"},
- { oBatch, "batch", 0, N_("batch mode: never ask")},
- { oAnswerYes, "yes", 0, N_("assume yes on most questions")},
- { oAnswerNo, "no", 0, N_("assume no on most questions")},
- { oKeyring, "keyring" ,2, N_("add this keyring to the list of keyrings")},
- { oSecretKeyring, "secret-keyring" ,2, N_("add this secret keyring to the list")},
- { oShowKeyring, "show-keyring", 0, N_("show which keyring a listed key is on")},
- { oDefaultKey, "default-key" ,2, N_("|NAME|use NAME as default secret key")},
- { oKeyServer, "keyserver",2, N_("|HOST|use this keyserver to lookup keys")},
- { oKeyServerOptions, "keyserver-options",2,"@"},
- { oImportOptions, "import-options",2,"@"},
- { oExportOptions, "export-options",2,"@"},
- { oCharset, "charset" , 2, N_("|NAME|set terminal charset to NAME") },
- { oOptions, "options" , 2, N_("read options from file")},
-
- { oDebug, "debug" ,4|16, "@"},
- { oDebugAll, "debug-all" ,0, "@"},
- { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") },
-#ifdef __riscos__
- { oStatusFile, "status-file" ,2, N_("|[file]|write status info to file") },
-#endif /* __riscos__ */
- { oAttributeFD, "attribute-fd" ,1, "@" },
-#ifdef __riscos__
- { oAttributeFile, "attribute-file" ,2, "@" },
-#endif /* __riscos__ */
- { oNoSKComments, "no-comment", 0, "@"},
- { oNoSKComments, "no-sk-comments", 0, "@"},
- { oSKComments, "sk-comments", 0, "@"},
- { oCompletesNeeded, "completes-needed", 1, "@"},
- { oMarginalsNeeded, "marginals-needed", 1, "@"},
- { oMaxCertDepth, "max-cert-depth", 1, "@" },
- { oTrustedKey, "trusted-key", 2, N_("|KEYID|ultimately trust this key")},
- { oLoadExtension, "load-extension" ,2, N_("|FILE|load extension module FILE")},
- { oRFC1991, "rfc1991", 0, N_("emulate the mode described in RFC1991")},
- { oOpenPGP, "openpgp", 0, N_("set all packet, cipher and digest options to OpenPGP behavior")},
- { oPGP2, "pgp2", 0, N_("set all packet, cipher and digest options to PGP 2.x behavior")},
- { oNoPGP2, "no-pgp2", 0, "@"},
- { oPGP6, "pgp6", 0, "@"},
- { oNoPGP6, "no-pgp6", 0, "@"},
- { oPGP7, "pgp7", 0, "@"},
- { oNoPGP7, "no-pgp7", 0, "@"},
- { oS2KMode, "s2k-mode", 1, N_("|N|use passphrase mode N")},
- { oS2KDigest, "s2k-digest-algo",2,
- N_("|NAME|use message digest algorithm NAME for passphrases")},
- { oS2KCipher, "s2k-cipher-algo",2,
- N_("|NAME|use cipher algorithm NAME for passphrases")},
- { oSimpleSKChecksum, "simple-sk-checksum", 0, "@"},
- { oCipherAlgo, "cipher-algo", 2 , N_("|NAME|use cipher algorithm NAME")},
- { oDigestAlgo, "digest-algo", 2 , N_("|NAME|use message digest algorithm NAME")},
- { oCertDigestAlgo, "cert-digest-algo", 2 , "@" },
- { oCompressAlgo, "compress-algo", 1 , N_("|N|use compress algorithm N")},
- { oThrowKeyid, "throw-keyid", 0, N_("throw keyid field of encrypted packets")},
- { oShowPhotos, "show-photos", 0, N_("Show Photo IDs")},
- { oNoShowPhotos, "no-show-photos", 0, N_("Don't show Photo IDs")},
- { oPhotoViewer, "photo-viewer", 2, N_("Set command line to view Photo IDs")},
- { oNotation, "notation-data", 2, "@" },
- { oSigNotation, "sig-notation", 2, "@" },
- { oCertNotation, "cert-notation", 2, "@" },
-
- { 302, NULL, 0, N_(
- "@\n(See the man page for a complete listing of all commands and options)\n"
- )},
-
- { 303, NULL, 0, N_("@\nExamples:\n\n"
- " -se -r Bob [file] sign and encrypt for user Bob\n"
- " --clearsign [file] make a clear text signature\n"
- " --detach-sign [file] make a detached signature\n"
- " --list-keys [names] show keys\n"
- " --fingerprint [names] show fingerprints\n" ) },
-
- /* hidden options */
- { aExportOwnerTrust, "list-ownertrust",0 , "@"}, /* alias */
- { aPrintMDs, "print-mds" , 256, "@"}, /* old */
- { aListTrustDB, "list-trustdb",0 , "@"},
- { aListTrustPath, "list-trust-path",0, "@"},
- { aPipeMode, "pipemode", 0, "@" },
- { oKOption, NULL, 0, "@"},
- { oPasswdFD, "passphrase-fd",1, "@" },
-#ifdef __riscos__
- { oPasswdFile, "passphrase-file",2, "@" },
-#endif /* __riscos__ */
- { oCommandFD, "command-fd",1, "@" },
-#ifdef __riscos__
- { oCommandFile, "command-file",2, "@" },
-#endif /* __riscos__ */
- { oQuickRandom, "quick-random", 0, "@"},
- { oNoVerbose, "no-verbose", 0, "@"},
- { oTrustDBName, "trustdb-name", 2, "@" },
- { oNoSecmemWarn, "no-secmem-warning", 0, "@" }, /* used only by regression tests */
- { oNoPermissionWarn, "no-permission-warning", 0, "@" },
- { oNoMDCWarn, "no-mdc-warning", 0, "@" },
- { oNoArmor, "no-armor", 0, "@"},
- { oNoArmor, "no-armour", 0, "@"},
- { oNoDefKeyring, "no-default-keyring", 0, "@" },
- { oNoGreeting, "no-greeting", 0, "@" },
- { oNoOptions, "no-options", 0, "@" }, /* shortcut for --options /dev/null */
- { oHomedir, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */
- { oNoBatch, "no-batch", 0, "@" },
- { oWithColons, "with-colons", 0, "@"},
- { oWithKeyData,"with-key-data", 0, "@"},
- { aListKeys, "list-key", 0, "@" }, /* alias */
- { aListSigs, "list-sig", 0, "@" }, /* alias */
- { aCheckKeys, "check-sig",0, "@" }, /* alias */
- { oSkipVerify, "skip-verify",0, "@" },
- { oCompressKeys, "compress-keys",0, "@"},
- { oCompressSigs, "compress-sigs",0, "@"},
- { oDefCertCheckLevel, "default-cert-check-level", 1, "@"},
- { oAlwaysTrust, "always-trust", 0, "@"},
- { oEmuChecksumBug, "emulate-checksum-bug", 0, "@"},
- { oRunAsShmCP, "run-as-shm-coprocess", 4, "@" },
- { oSetFilename, "set-filename", 2, "@" },
- { oForYourEyesOnly, "for-your-eyes-only", 0, "@" },
- { oNoForYourEyesOnly, "no-for-your-eyes-only", 0, "@" },
- { oSetPolicyURL, "set-policy-url", 2, "@" },
- { oSigPolicyURL, "sig-policy-url", 2, "@" },
- { oCertPolicyURL, "cert-policy-url", 2, "@" },
- { oShowPolicyURL, "show-policy-url", 0, "@" },
- { oNoShowPolicyURL, "no-show-policy-url", 0, "@" },
- { oShowNotation, "show-notation", 0, "@" },
- { oNoShowNotation, "no-show-notation", 0, "@" },
- { oComment, "comment", 2, "@" },
- { oDefaultComment, "default-comment", 0, "@" },
- { oNoVersion, "no-version", 0, "@"},
- { oEmitVersion, "emit-version", 0, "@"},
- { oNotDashEscaped, "not-dash-escaped", 0, "@" },
- { oEscapeFrom, "escape-from-lines", 0, "@" },
- { oNoEscapeFrom, "no-escape-from-lines", 0, "@" },
- { oLockOnce, "lock-once", 0, "@" },
- { oLockMultiple, "lock-multiple", 0, "@" },
- { oLockNever, "lock-never", 0, "@" },
- { oLoggerFD, "logger-fd",1, "@" },
-#ifdef __riscos__
- { oLoggerFile, "logger-file",2, "@" },
-#endif /* __riscos__ */
- { oUseEmbeddedFilename, "use-embedded-filename", 0, "@" },
- { oUtf8Strings, "utf8-strings", 0, "@" },
- { oNoUtf8Strings, "no-utf8-strings", 0, "@" },
- { oWithFingerprint, "with-fingerprint", 0, "@" },
- { oDisableCipherAlgo, "disable-cipher-algo", 2, "@" },
- { oDisablePubkeyAlgo, "disable-pubkey-algo", 2, "@" },
- { oAllowNonSelfsignedUID, "allow-non-selfsigned-uid", 0, "@" },
- { oNoAllowNonSelfsignedUID, "no-allow-non-selfsigned-uid", 0, "@" },
- { oAllowFreeformUID, "allow-freeform-uid", 0, "@" },
- { oNoAllowFreeformUID, "no-allow-freeform-uid", 0, "@" },
- { oNoLiteral, "no-literal", 0, "@" },
- { oSetFilesize, "set-filesize", 20, "@" },
- { oHonorHttpProxy,"honor-http-proxy", 0, "@" },
- { oFastListMode,"fast-list-mode", 0, "@" },
- { oFixedListMode,"fixed-list-mode", 0, "@" },
- { oListOnly, "list-only", 0, "@"},
- { oIgnoreTimeConflict, "ignore-time-conflict", 0, "@" },
- { oIgnoreValidFrom, "ignore-valid-from", 0, "@" },
- { oIgnoreCrcError, "ignore-crc-error", 0,"@" },
- { oIgnoreMDCError, "ignore-mdc-error", 0,"@" },
- { oShowSessionKey, "show-session-key", 0, "@" },
- { oOverrideSessionKey, "override-session-key", 2, "@" },
- { oNoRandomSeedFile, "no-random-seed-file", 0, "@" },
- { oAutoKeyRetrieve, "auto-key-retrieve", 0, "@" },
- { oNoAutoKeyRetrieve, "no-auto-key-retrieve", 0, "@" },
- { oNoSigCache, "no-sig-cache", 0, "@" },
- { oNoSigCreateCheck, "no-sig-create-check", 0, "@" },
- { oAutoCheckTrustDB, "auto-check-trustdb", 0, "@"},
- { oNoAutoCheckTrustDB, "no-auto-check-trustdb", 0, "@"},
- { oMergeOnly, "merge-only", 0, "@" },
- { oAllowSecretKeyImport, "allow-secret-key-import", 0, "@" },
- { oTryAllSecrets, "try-all-secrets", 0, "@" },
- { oEnableSpecialFilenames, "enable-special-filenames", 0, "@" },
- { oNoExpensiveTrustChecks, "no-expensive-trust-checks", 0, "@" },
- { aDeleteSecretAndPublicKeys, "delete-secret-and-public-keys",256, "@" },
- { aRebuildKeydbCaches, "rebuild-keydb-caches", 256, "@"},
- { oPreservePermissions, "preserve-permissions", 0, "@"},
- { oDefaultPreferenceList, "default-preference-list", 2, "@"},
- { oPersonalCipherPreferences, "personal-cipher-preferences", 2, "@"},
- { oPersonalDigestPreferences, "personal-digest-preferences", 2, "@"},
- { oPersonalCompressPreferences, "personal-compress-preferences", 2, "@"},
- { oEmuMDEncodeBug, "emulate-md-encode-bug", 0, "@"},
- { oDisplay, "display", 2, "@" },
- { oTTYname, "ttyname", 2, "@" },
- { oTTYtype, "ttytype", 2, "@" },
- { oLCctype, "lc-ctype", 2, "@" },
- { oLCmessages, "lc-messages", 2, "@" },
- { oGroup, "group", 2, "@" },
- { oStrict, "strict", 0, "@" },
- { oNoStrict, "no-strict", 0, "@" },
-{0} };
-
-
-
-int g10_errors_seen = 0;
-
-static int utf8_strings = 0;
-static int maybe_setuid = 1;
-
-static char *build_list( const char *text, char letter,
- const char *(*mapf)(int), int (*chkf)(int) );
-static void set_cmd( enum cmd_and_opt_values *ret_cmd,
- enum cmd_and_opt_values new_cmd );
-static void print_hex( byte *p, size_t n );
-static void print_mds( const char *fname, int algo );
-static void add_notation_data( const char *string, int which );
-static void add_policy_url( const char *string, int which );
-
-#ifdef __riscos__
-RISCOS_GLOBAL_STATICS("GnuPG Heap")
-#endif /* __riscos__ */
-
-const char *
-strusage( int level )
-{
- static char *digests, *pubkeys, *ciphers, *zips;
- const char *p;
- switch( level ) {
- case 11: p = "gpg (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p =
- _("Please report bugs to <gnupg-bugs@gnu.org>.\n");
- break;
- case 1:
- case 40: p =
- _("Usage: gpg [options] [files] (-h for help)");
- break;
- case 41: p =
- _("Syntax: gpg [options] [files]\n"
- "sign, check, encrypt or decrypt\n"
- "default operation depends on the input data\n");
- break;
-
- case 31: p = "\nHome: "; break;
-#ifndef __riscos__
- case 32: p = opt.homedir; break;
-#else /* __riscos__ */
- case 32: p = make_filename(opt.homedir, NULL); break;
-#endif /* __riscos__ */
- case 33: p = _("\nSupported algorithms:\n"); break;
- case 34:
- if( !pubkeys )
- pubkeys = build_list("Pubkey: ", 0, pubkey_algo_to_string,
- check_pubkey_algo );
- p = pubkeys;
- break;
- case 35:
- if( !ciphers )
- ciphers = build_list("Cipher: ", 'S', cipher_algo_to_string,
- check_cipher_algo );
- p = ciphers;
- break;
- case 36:
- if( !digests )
- digests = build_list("Hash: ", 'H', digest_algo_to_string,
- check_digest_algo );
- p = digests;
- break;
- case 37:
- if( !zips )
- zips = build_list("Compress: ",'Z',compress_algo_to_string,
- check_compress_algo);
- p = zips;
- break;
-
- default: p = default_strusage(level);
- }
- return p;
-}
-
-
-static char *
-build_list( const char *text, char letter,
- const char * (*mapf)(int), int (*chkf)(int) )
-{
- int i;
- const char *s;
- size_t n=strlen(text)+2;
- char *list, *p, *line=NULL;
-
- if( maybe_setuid )
- secmem_init( 0 ); /* drop setuid */
-
- for(i=0; i <= 110; i++ )
- if( !chkf(i) && (s=mapf(i)) )
- n += strlen(s) + 7 + 2;
- list = m_alloc( 21 + n ); *list = 0;
- for(p=NULL, i=0; i <= 110; i++ ) {
- if( !chkf(i) && (s=mapf(i)) ) {
- if( !p ) {
- p = stpcpy( list, text );
- line=p;
- }
- else
- p = stpcpy( p, ", ");
-
- if(strlen(line)>60) {
- int spaces=strlen(text);
-
- list=m_realloc(list,n+spaces+1);
- /* realloc could move the block, so find the end again */
- p=list;
- while(*p)
- p++;
-
- p=stpcpy(p, "\n");
- line=p;
- for(;spaces;spaces--)
- p=stpcpy(p, " ");
- }
-
- p = stpcpy(p, s );
- if(opt.verbose && letter)
- {
- char num[8];
- sprintf(num," (%c%d)",letter,i);
- p = stpcpy(p,num);
- }
- }
- }
- if( p )
- p = stpcpy(p, "\n" );
- return list;
-}
-
-
-static void
-i18n_init(void)
-{
- #ifdef USE_SIMPLE_GETTEXT
- set_gettext_file( PACKAGE );
- #else
- #ifdef ENABLE_NLS
- setlocale( LC_ALL, "" );
- bindtextdomain( PACKAGE, G10_LOCALEDIR );
- textdomain( PACKAGE );
- #endif
- #endif
-}
-
-static void
-wrong_args( const char *text)
-{
- fputs(_("usage: gpg [options] "),stderr);
- fputs(text,stderr);
- putc('\n',stderr);
- g10_exit(2);
-}
-
-
-static char *
-make_username( const char *string )
-{
- char *p;
- if( utf8_strings )
- p = m_strdup(string);
- else
- p = native_to_utf8( string );
- return p;
-}
-
-
-static void
-set_debug(void)
-{
- if( opt.debug & DBG_MEMORY_VALUE )
- memory_debug_mode = 1;
- if( opt.debug & DBG_MEMSTAT_VALUE )
- memory_stat_debug_mode = 1;
- if( opt.debug & DBG_MPI_VALUE )
- mpi_debug_mode = 1;
- if( opt.debug & DBG_CIPHER_VALUE )
- g10c_debug_mode = 1;
- if( opt.debug & DBG_IOBUF_VALUE )
- iobuf_debug_mode = 1;
-
-}
-
-
-/* We need the home directory also in some other directories, so make
- sure that both variables are always in sync. */
-static void
-set_homedir (char *dir)
-{
- if (!dir)
- dir = "";
- g10_opt_homedir = opt.homedir = dir;
-}
-
-
-static void
-set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd )
-{
- enum cmd_and_opt_values cmd = *ret_cmd;
-
- if( !cmd || cmd == new_cmd )
- cmd = new_cmd;
- else if( cmd == aSign && new_cmd == aEncr )
- cmd = aSignEncr;
- else if( cmd == aEncr && new_cmd == aSign )
- cmd = aSignEncr;
- else if( cmd == aSign && new_cmd == aSym )
- cmd = aSignSym;
- else if( cmd == aSym && new_cmd == aSign )
- cmd = aSignSym;
- else if( cmd == aKMode && new_cmd == aSym )
- cmd = aKModeC;
- else if( ( cmd == aSign && new_cmd == aClearsign )
- || ( cmd == aClearsign && new_cmd == aSign ) )
- cmd = aClearsign;
- else {
- log_error(_("conflicting commands\n"));
- g10_exit(2);
- }
-
- *ret_cmd = cmd;
-}
-
-
-static void add_group(char *string)
-{
- char *name,*value;
- struct groupitem *item;
- STRLIST values=NULL;
-
- /* Break off the group name */
- name=strsep(&string,"=");
- if(string==NULL)
- {
- log_error(_("no = sign found in group definition \"%s\"\n"),name);
- return;
- }
-
- /* Break apart the values */
- while((value=strsep(&string," ")) && *value!='\0')
- add_to_strlist2(&values,value,utf8_strings);
-
- item=m_alloc(sizeof(struct groupitem));
- item->name=name;
- item->values=values;
- item->next=opt.grouplist;
-
- opt.grouplist=item;
-}
-
-/* We need to check three things.
-
- 0) The homedir. It must be x00, a directory, and owned by the
- user.
-
- 1) The options file. Okay unless it or its containing directory is
- group or other writable or not owned by us. disable exec in this
- case.
-
- 2) Extensions. Same as #2.
-
- Returns true if the item is unsafe. */
-static int
-check_permissions(const char *path,int item)
-{
-#if defined(HAVE_STAT) && !defined(HAVE_DOSISH_SYSTEM)
- static int homedir_cache=-1;
- char *tmppath,*dir;
- struct stat statbuf,dirbuf;
- int homedir=0,ret=0,checkonly=0;
- int perm=0,own=0,enc_dir_perm=0,enc_dir_own=0;
-
- if(opt.no_perm_warn)
- return 0;
-
- assert(item==0 || item==1 || item==2);
-
- /* extensions may attach a path */
- if(item==2 && path[0]!=DIRSEP_C)
- {
- if(strchr(path,DIRSEP_C))
- tmppath=make_filename(path,NULL);
- else
- tmppath=make_filename(GNUPG_LIBDIR,path,NULL);
- }
- else
- tmppath=m_strdup(path);
-
- /* If the item is located in the homedir, but isn't the homedir,
- don't continue if we already checked the homedir itself. This is
- to avoid user confusion with an extra options file warning which
- could be rectified if the homedir itself had proper
- permissions. */
- if(item!=0 && homedir_cache>-1
- && ascii_strncasecmp(opt.homedir,tmppath,strlen(opt.homedir))==0)
- {
- ret=homedir_cache;
- goto end;
- }
-
- /* It's okay if the file or directory doesn't exist */
- if(stat(tmppath,&statbuf)!=0)
- {
- ret=0;
- goto end;
- }
-
- /* Now check the enclosing directory. Theoretically, we could walk
- this test up to the root directory /, but for the sake of sanity,
- I'm stopping at one level down. */
- dir=make_dirname(tmppath);
-
- if(stat(dir,&dirbuf)!=0 || !S_ISDIR(dirbuf.st_mode))
- {
- /* Weird error */
- ret=1;
- goto end;
- }
-
- m_free(dir);
-
- /* Assume failure */
- ret=1;
-
- if(item==0)
- {
- /* The homedir must be x00, a directory, and owned by the user. */
-
- if(S_ISDIR(statbuf.st_mode))
- {
- if(statbuf.st_uid==getuid())
- {
- if((statbuf.st_mode & (S_IRWXG|S_IRWXO))==0)
- ret=0;
- else
- perm=1;
- }
- else
- own=1;
-
- homedir_cache=ret;
- }
- }
- else if(item==1 || item==2)
- {
- /* The options or extension file. Okay unless it or its
- containing directory is group or other writable or not owned
- by us or root. */
-
- if(S_ISREG(statbuf.st_mode))
- {
- if(statbuf.st_uid==getuid() || statbuf.st_uid==0)
- {
- if((statbuf.st_mode & (S_IWGRP|S_IWOTH))==0)
- {
- /* it's not writable, so make sure the enclosing
- directory is also not writable */
- if(dirbuf.st_uid==getuid() || dirbuf.st_uid==0)
- {
- if((dirbuf.st_mode & (S_IWGRP|S_IWOTH))==0)
- ret=0;
- else
- enc_dir_perm=1;
- }
- else
- enc_dir_own=1;
- }
- else
- {
- /* it's writable, so the enclosing directory had
- better not let people get to it. */
- if(dirbuf.st_uid==getuid() || dirbuf.st_uid==0)
- {
- if((dirbuf.st_mode & (S_IRWXG|S_IRWXO))==0)
- ret=0;
- else
- perm=enc_dir_perm=1; /* unclear which one to fix! */
- }
- else
- enc_dir_own=1;
- }
- }
- else
- own=1;
- }
- }
- else
- BUG();
-
- if(!checkonly)
- {
- if(own)
- {
- if(item==0)
- log_info(_("WARNING: unsafe ownership on "
- "homedir \"%s\"\n"),tmppath);
- else if(item==1)
- log_info(_("WARNING: unsafe ownership on "
- "configuration file \"%s\"\n"),tmppath);
- else
- log_info(_("WARNING: unsafe ownership on "
- "extension \"%s\"\n"),tmppath);
- }
- if(perm)
- {
- if(item==0)
- log_info(_("WARNING: unsafe permissions on "
- "homedir \"%s\"\n"),tmppath);
- else if(item==1)
- log_info(_("WARNING: unsafe permissions on "
- "configuration file \"%s\"\n"),tmppath);
- else
- log_info(_("WARNING: unsafe permissions on "
- "extension \"%s\"\n"),tmppath);
- }
- if(enc_dir_own)
- {
- if(item==0)
- log_info(_("WARNING: unsafe enclosing directory ownership on "
- "homedir \"%s\"\n"),tmppath);
- else if(item==1)
- log_info(_("WARNING: unsafe enclosing directory ownership on "
- "configuration file \"%s\"\n"),tmppath);
- else
- log_info(_("WARNING: unsafe enclosing directory ownership on "
- "extension \"%s\"\n"),tmppath);
- }
- if(enc_dir_perm)
- {
- if(item==0)
- log_info(_("WARNING: unsafe enclosing directory permissions on "
- "homedir \"%s\"\n"),tmppath);
- else if(item==1)
- log_info(_("WARNING: unsafe enclosing directory permissions on "
- "configuration file \"%s\"\n"),tmppath);
- else
- log_info(_("WARNING: unsafe enclosing directory permissions on "
- "extension \"%s\"\n"),tmppath);
- }
- }
-
- end:
- m_free(tmppath);
-
- if(homedir)
- homedir_cache=ret;
-
- return ret;
-
-#endif /* HAVE_STAT && !HAVE_DOSISH_SYSTEM */
-
- return 0;
-}
-
-int
-main( int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
- IOBUF a;
- int rc=0;
- int orig_argc;
- char **orig_argv;
- const char *fname;
- char *username;
- int may_coredump;
- STRLIST sl, remusr= NULL, locusr=NULL;
- STRLIST nrings=NULL, sec_nrings=NULL;
- armor_filter_context_t afx;
- int detached_sig = 0;
- FILE *configfp = NULL;
- char *configname = NULL;
- unsigned configlineno;
- int parse_debug = 0;
- int default_config = 1;
- int default_keyring = 1;
- int greeting = 0;
- int nogreeting = 0;
- int use_random_seed = 1;
- enum cmd_and_opt_values cmd = 0;
- const char *trustdb_name = NULL;
- char *def_cipher_string = NULL;
- char *def_digest_string = NULL;
- char *cert_digest_string = NULL;
- char *s2k_cipher_string = NULL;
- char *s2k_digest_string = NULL;
- char *pers_cipher_list = NULL;
- char *pers_digest_list = NULL;
- char *pers_compress_list = NULL;
- int eyes_only=0;
- int pwfd = -1;
- int with_fpr = 0; /* make an option out of --fingerprint */
- int any_explicit_recipient = 0;
- #ifdef USE_SHM_COPROCESSING
- ulong requested_shm_size=0;
- #endif
-
- #ifdef __riscos__
- riscos_global_defaults();
- opt.lock_once = 1;
- #endif /* __riscos__ */
-
- trap_unaligned();
- secmem_set_flags( secmem_get_flags() | 2 ); /* suspend warnings */
- /* Please note that we may running SUID(ROOT), so be very CAREFUL
- * when adding any stuff between here and the call to
- * secmem_init() somewhere after the option parsing
- */
- log_set_name("gpg");
- secure_random_alloc(); /* put random number into secure memory */
- may_coredump = disable_core_dumps();
- init_signals();
- create_dotlock(NULL); /* register locking cleanup */
- i18n_init();
- opt.command_fd = -1; /* no command fd */
- opt.compress = -1; /* defaults to standard compress level */
- /* note: if you change these lines, look at oOpenPGP */
- opt.def_cipher_algo = 0;
- opt.def_digest_algo = 0;
- opt.cert_digest_algo = 0;
- opt.def_compress_algo = -1;
- opt.s2k_mode = 3; /* iterated+salted */
- opt.s2k_digest_algo = DIGEST_ALGO_SHA1;
- opt.s2k_cipher_algo = CIPHER_ALGO_CAST5;
- opt.completes_needed = 1;
- opt.marginals_needed = 3;
- opt.max_cert_depth = 5;
- opt.pgp2_workarounds = 1;
- opt.force_v3_sigs = 1;
- opt.escape_from = 1;
- opt.import_options=0;
- opt.export_options=
- EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES;
- opt.keyserver_options.import_options=IMPORT_REPAIR_HKP_SUBKEY_BUG;
- opt.keyserver_options.export_options=
- EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES;
- opt.keyserver_options.include_subkeys=1;
- opt.keyserver_options.include_revoked=1;
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- set_homedir ( read_w32_registry_string( NULL,
- "Software\\GNU\\GnuPG", "HomeDir" ));
-#else
- set_homedir ( getenv("GNUPGHOME") );
-#endif
- if( !*opt.homedir )
- set_homedir ( GNUPG_HOMEDIR );
-
- /* check whether we have a config file on the commandline */
- orig_argc = argc;
- orig_argv = argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1|(1<<6); /* do not remove the args, ignore version */
- while( arg_parse( &pargs, opts) ) {
- if( pargs.r_opt == oDebug || pargs.r_opt == oDebugAll )
- parse_debug++;
- else if( pargs.r_opt == oOptions ) {
- /* yes there is one, so we do not try the default one, but
- * read the option file when it is encountered at the commandline
- */
- default_config = 0;
- }
- else if( pargs.r_opt == oNoOptions )
- default_config = 0; /* --no-options */
- else if( pargs.r_opt == oHomedir )
- set_homedir ( pargs.r.ret_str );
- else if( pargs.r_opt == oNoPermissionWarn )
- opt.no_perm_warn=1;
- else if (pargs.r_opt == oStrict )
- {
- opt.strict=1;
- log_set_strict(1);
- }
- else if (pargs.r_opt == oNoStrict )
- {
- opt.strict=0;
- log_set_strict(0);
- }
- #ifdef USE_SHM_COPROCESSING
- else if( pargs.r_opt == oRunAsShmCP ) {
- /* does not make sense in a options file, we do it here,
- * so that we are the able to drop setuid as soon as possible */
- opt.shm_coprocess = 1;
- requested_shm_size = pargs.r.ret_ulong;
- }
- else if ( pargs.r_opt == oStatusFD ) {
- /* this is needed to ensure that the status-fd filedescriptor is
- * initialized when init_shm_coprocessing() is called */
- set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) );
- }
- #endif
- }
-
-#ifdef HAVE_DOSISH_SYSTEM
- if ( strchr (opt.homedir,'\\') ) {
- char *d, *buf = m_alloc (strlen (opt.homedir)+1);
- const char *s = opt.homedir;
- for (d=buf,s=opt.homedir; *s; s++)
- *d++ = *s == '\\'? '/': *s;
- *d = 0;
- set_homedir (buf);
- }
-#endif
-#ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess ) {
- init_shm_coprocessing(requested_shm_size, 1 );
- }
-#endif
- /* initialize the secure memory. */
- secmem_init( 16384 );
- maybe_setuid = 0;
- /* Okay, we are now working under our real uid */
-
- set_native_charset (NULL); /* Try to auto set the character set */
-
- if( default_config )
- {
- configname = make_filename(opt.homedir, "gpg" EXTSEP_S "conf", NULL );
- if (!access (configname, R_OK))
- { /* Print a warning when both config files are present. */
- char *p = make_filename(opt.homedir, "options", NULL );
- if (!access (p, R_OK))
- log_info (_("NOTE: old default options file `%s' ignored\n"), p);
- m_free (p);
- }
- else
- { /* Keep on using the old default one. */
- m_free (configname);
- configname = make_filename(opt.homedir, "options", NULL );
- }
- }
- argc = orig_argc;
- argv = orig_argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
-
- /* By this point we have a homedir, and cannot change it. */
- check_permissions(opt.homedir,0);
-
- next_pass:
- if( configname ) {
- if(check_permissions(configname,1))
- {
- /* If any options file is unsafe, then disable any external
- programs for keyserver calls or photo IDs. Since the
- external program to call is set in the options file, a
- unsafe options file can lead to an arbitrary program
- being run. */
-
- opt.exec_disable=1;
- }
-
- configlineno = 0;
- configfp = fopen( configname, "r" );
- if( !configfp ) {
- if( default_config ) {
- if( parse_debug )
- log_info(_("NOTE: no default option file `%s'\n"),
- configname );
- }
- else {
- log_error(_("option file `%s': %s\n"),
- configname, strerror(errno) );
- g10_exit(2);
- }
- m_free(configname); configname = NULL;
- }
- if( parse_debug && configname )
- log_info(_("reading options from `%s'\n"), configname );
- default_config = 0;
- }
-
- while( optfile_parse( configfp, configname, &configlineno,
- &pargs, opts) ) {
- switch( pargs.r_opt ) {
- case aCheckKeys: set_cmd( &cmd, aCheckKeys); break;
- case aListPackets: set_cmd( &cmd, aListPackets); break;
- case aImport: set_cmd( &cmd, aImport); break;
- case aFastImport: set_cmd( &cmd, aFastImport); break;
- case aSendKeys: set_cmd( &cmd, aSendKeys); break;
- case aRecvKeys: set_cmd( &cmd, aRecvKeys); break;
- case aSearchKeys: set_cmd( &cmd, aSearchKeys); break;
- case aRefreshKeys: set_cmd( &cmd, aRefreshKeys); break;
- case aExport: set_cmd( &cmd, aExport); break;
- case aExportAll: set_cmd( &cmd, aExportAll); break;
- case aListKeys: set_cmd( &cmd, aListKeys); break;
- case aListSigs: set_cmd( &cmd, aListSigs); break;
- case aExportSecret: set_cmd( &cmd, aExportSecret); break;
- case aExportSecretSub: set_cmd( &cmd, aExportSecretSub); break;
- case aDeleteSecretKeys: set_cmd( &cmd, aDeleteSecretKeys);
- greeting=1; break;
- case aDeleteSecretAndPublicKeys:
- set_cmd( &cmd, aDeleteSecretAndPublicKeys);
- greeting=1;
- break;
- case aDeleteKeys: set_cmd( &cmd, aDeleteKeys); greeting=1; break;
-
- case aDetachedSign: detached_sig = 1; set_cmd( &cmd, aSign ); break;
- case aSym: set_cmd( &cmd, aSym); break;
-
- case aDecrypt: set_cmd( &cmd, aDecrypt); break;
- case aDecryptFiles: set_cmd( &cmd, aDecryptFiles); break;
-
- case aEncr: set_cmd( &cmd, aEncr); break;
- case aEncrFiles: set_cmd( &cmd, aEncrFiles ); break;
- case aSign: set_cmd( &cmd, aSign ); break;
- case aKeygen: set_cmd( &cmd, aKeygen); greeting=1; break;
- case aSignKey: set_cmd( &cmd, aSignKey); break;
- case aLSignKey: set_cmd( &cmd, aLSignKey); break;
- case aNRSignKey: set_cmd( &cmd, aNRSignKey); break;
- case aNRLSignKey: set_cmd( &cmd, aNRLSignKey); break;
- case aStore: set_cmd( &cmd, aStore); break;
- case aEditKey: set_cmd( &cmd, aEditKey); greeting=1; break;
- case aClearsign: set_cmd( &cmd, aClearsign); break;
- case aGenRevoke: set_cmd( &cmd, aGenRevoke); break;
- case aDesigRevoke: set_cmd( &cmd, aDesigRevoke); break;
- case aVerify: set_cmd( &cmd, aVerify); break;
- case aVerifyFiles: set_cmd( &cmd, aVerifyFiles); break;
- case aPrimegen: set_cmd( &cmd, aPrimegen); break;
- case aGenRandom: set_cmd( &cmd, aGenRandom); break;
- case aPrintMD: set_cmd( &cmd, aPrintMD); break;
- case aPrintMDs: set_cmd( &cmd, aPrintMDs); break;
- case aListTrustDB: set_cmd( &cmd, aListTrustDB); break;
- case aCheckTrustDB: set_cmd( &cmd, aCheckTrustDB); break;
- case aUpdateTrustDB: set_cmd( &cmd, aUpdateTrustDB); break;
- case aFixTrustDB: set_cmd( &cmd, aFixTrustDB); break;
- case aListTrustPath: set_cmd( &cmd, aListTrustPath); break;
- case aDeArmor: set_cmd( &cmd, aDeArmor); break;
- case aEnArmor: set_cmd( &cmd, aEnArmor); break;
- case aExportOwnerTrust: set_cmd( &cmd, aExportOwnerTrust); break;
- case aImportOwnerTrust: set_cmd( &cmd, aImportOwnerTrust); break;
- case aPipeMode: set_cmd( &cmd, aPipeMode); break;
- case aRebuildKeydbCaches: set_cmd( &cmd, aRebuildKeydbCaches); break;
-
- case oArmor: opt.armor = 1; opt.no_armor=0; break;
- case oOutput: opt.outfile = pargs.r.ret_str; break;
- case oQuiet: opt.quiet = 1; break;
- case oNoTTY: tty_no_terminal(1); break;
- case oDryRun: opt.dry_run = 1; break;
- case oInteractive: opt.interactive = 1; break;
- case oVerbose: g10_opt_verbose++;
- opt.verbose++; opt.list_sigs=1; break;
- case oKOption: set_cmd( &cmd, aKMode ); break;
-
- case oBatch: opt.batch = 1; nogreeting = 1; break;
- case oUseAgent:
-#ifndef __riscos__
- opt.use_agent = 1;
-#else /* __riscos__ */
- opt.use_agent = 0;
- not_implemented("use-agent");
-#endif /* __riscos__ */
- break;
- case oNoUseAgent: opt.use_agent = 0; break;
- case oGpgAgentInfo: opt.gpg_agent_info = pargs.r.ret_str; break;
- case oAnswerYes: opt.answer_yes = 1; break;
- case oAnswerNo: opt.answer_no = 1; break;
- case oKeyring: append_to_strlist( &nrings, pargs.r.ret_str); break;
- case oShowKeyring: opt.show_keyring = 1; break;
- case oDebug: opt.debug |= pargs.r.ret_ulong; break;
- case oDebugAll: opt.debug = ~0; break;
- case oStatusFD:
- set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) );
- break;
-#ifdef __riscos__
- case oStatusFile:
- set_status_fd( iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 1), 1) );
- break;
-#endif /* __riscos__ */
- case oAttributeFD:
- set_attrib_fd(iobuf_translate_file_handle (pargs.r.ret_int, 1));
- break;
-#ifdef __riscos__
- case oAttributeFile:
- set_attrib_fd(iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 1), 1) );
- break;
-#endif /* __riscos__ */
- case oLoggerFD:
- log_set_logfile( NULL,
- iobuf_translate_file_handle (pargs.r.ret_int, 1) );
- break;
-#ifdef __riscos__
- case oLoggerFile:
- log_set_logfile( NULL,
- iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 1), 1) );
- break;
-#endif /* __riscos__ */
- case oWithFingerprint:
- opt.with_fingerprint = 1;
- with_fpr=1; /*fall thru*/
- case oFingerprint: opt.fingerprint++; break;
- case oSecretKeyring: append_to_strlist( &sec_nrings, pargs.r.ret_str); break;
- case oOptions:
- /* config files may not be nested (silently ignore them) */
- if( !configfp ) {
- m_free(configname);
- configname = m_strdup(pargs.r.ret_str);
- goto next_pass;
- }
- break;
- case oNoArmor: opt.no_armor=1; opt.armor=0; break;
- case oNoDefKeyring: default_keyring = 0; break;
- case oDefCertCheckLevel: opt.def_cert_check_level=pargs.r.ret_int; break;
- case oNoGreeting: nogreeting = 1; break;
- case oNoVerbose: g10_opt_verbose = 0;
- opt.verbose = 0; opt.list_sigs=0; break;
- case oQuickRandom: quick_random_gen(1); break;
- case oSKComments: opt.sk_comments=1; break;
- case oNoSKComments: opt.sk_comments=0; break;
- case oNoVersion: opt.no_version=1; break;
- case oEmitVersion: opt.no_version=0; break;
- case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break;
- case oMarginalsNeeded: opt.marginals_needed = pargs.r.ret_int; break;
- case oMaxCertDepth: opt.max_cert_depth = pargs.r.ret_int; break;
- case oTrustDBName: trustdb_name = pargs.r.ret_str; break;
- case oDefaultKey: opt.def_secret_key = pargs.r.ret_str; break;
- case oDefRecipient:
- if( *pargs.r.ret_str )
- opt.def_recipient = make_username(pargs.r.ret_str);
- break;
- case oDefRecipientSelf:
- m_free(opt.def_recipient); opt.def_recipient = NULL;
- opt.def_recipient_self = 1;
- break;
- case oNoDefRecipient:
- m_free(opt.def_recipient); opt.def_recipient = NULL;
- opt.def_recipient_self = 0;
- break;
- case oNoOptions: opt.no_homedir_creation = 1; break; /* no-options */
- case oHomedir: break;
- case oNoBatch: opt.batch = 0; break;
- case oWithKeyData: opt.with_key_data=1; /* fall thru */
- case oWithColons: opt.with_colons=':'; break;
-
- case oSkipVerify: opt.skip_verify=1; break;
- case oCompressAlgo: opt.def_compress_algo = pargs.r.ret_int; break;
- case oCompressKeys: opt.compress_keys = 1; break;
- case aListSecretKeys: set_cmd( &cmd, aListSecretKeys); break;
- case oAlwaysTrust: opt.always_trust = 1; break;
- case oLoadExtension:
-#ifndef __riscos__
-#if defined(USE_DYNAMIC_LINKING) || defined(__MINGW32__)
- if(check_permissions(pargs.r.ret_str,2))
- log_info(_("cipher extension \"%s\" not loaded due to "
- "unsafe permissions\n"),pargs.r.ret_str);
- else
- register_cipher_extension(orig_argc? *orig_argv:NULL,
- pargs.r.ret_str);
-#endif
-#else /* __riscos__ */
- not_implemented("load-extension");
-#endif /* __riscos__ */
- break;
- case oRFC1991:
- opt.rfc1991 = 1;
- opt.rfc2440 = 0;
- opt.force_v4_certs = 0;
- opt.disable_mdc = 1;
- opt.escape_from = 1;
- break;
- case oOpenPGP:
- /* TODO: When 2440bis becomes a RFC, these may need
- changing. */
- opt.rfc1991 = 0;
- opt.rfc2440 = 1;
- opt.disable_mdc = 1;
- opt.allow_non_selfsigned_uid = 1;
- opt.allow_freeform_uid = 1;
- opt.pgp2_workarounds = 0;
- opt.escape_from = 0;
- opt.force_v3_sigs = 0;
- opt.compress_keys = 0; /* not mandated but we do it */
- opt.compress_sigs = 0; /* ditto. */
- opt.not_dash_escaped = 0;
- opt.def_cipher_algo = 0;
- opt.def_digest_algo = 0;
- opt.cert_digest_algo = 0;
- opt.def_compress_algo = 1;
- opt.s2k_mode = 3; /* iterated+salted */
- opt.s2k_digest_algo = DIGEST_ALGO_SHA1;
- opt.s2k_cipher_algo = CIPHER_ALGO_CAST5;
- break;
- case oPGP2: opt.pgp2 = 1; break;
- case oNoPGP2: opt.pgp2 = 0; break;
- case oPGP6: opt.pgp6 = 1; break;
- case oNoPGP6: opt.pgp6 = 0; break;
- case oPGP7: opt.pgp7 = 1; break;
- case oNoPGP7: opt.pgp7 = 0; break;
- case oEmuMDEncodeBug: opt.emulate_bugs |= EMUBUG_MDENCODE; break;
- case oCompressSigs: opt.compress_sigs = 1; break;
- case oRunAsShmCP:
-#ifndef __riscos__
-# ifndef USE_SHM_COPROCESSING
- /* not possible in the option file,
- * but we print the warning here anyway */
- log_error("shared memory coprocessing is not available\n");
-# endif
-#else /* __riscos__ */
- not_implemented("run-as-shm-coprocess");
-#endif /* __riscos__ */
- break;
- case oSetFilename: opt.set_filename = pargs.r.ret_str; break;
- case oForYourEyesOnly: eyes_only = 1; break;
- case oNoForYourEyesOnly: eyes_only = 0; break;
- case oSetPolicyURL:
- add_policy_url(pargs.r.ret_str,0);
- add_policy_url(pargs.r.ret_str,1);
- break;
- case oSigPolicyURL: add_policy_url(pargs.r.ret_str,0); break;
- case oCertPolicyURL: add_policy_url(pargs.r.ret_str,1); break;
- case oShowPolicyURL: opt.show_policy_url=1; break;
- case oNoShowPolicyURL: opt.show_policy_url=0; break;
- case oUseEmbeddedFilename: opt.use_embedded_filename = 1; break;
- case oComment: opt.comment_string = pargs.r.ret_str; break;
- case oDefaultComment: opt.comment_string = NULL; break;
- case oThrowKeyid: opt.throw_keyid = 1; break;
- case oShowPhotos: opt.show_photos = 1; break;
- case oNoShowPhotos: opt.show_photos = 0; break;
- case oPhotoViewer: opt.photo_viewer = pargs.r.ret_str; break;
- case oForceV3Sigs: opt.force_v3_sigs = 1; break;
- case oNoForceV3Sigs: opt.force_v3_sigs = 0; break;
- case oForceV4Certs: opt.force_v4_certs = 1; break;
- case oNoForceV4Certs: opt.force_v4_certs = 0; break;
- case oForceMDC: opt.force_mdc = 1; break;
- case oNoForceMDC: opt.force_mdc = 0; break;
- case oDisableMDC: opt.disable_mdc = 1; break;
- case oNoDisableMDC: opt.disable_mdc = 0; break;
- case oS2KMode: opt.s2k_mode = pargs.r.ret_int; break;
- case oS2KDigest: s2k_digest_string = m_strdup(pargs.r.ret_str); break;
- case oS2KCipher: s2k_cipher_string = m_strdup(pargs.r.ret_str); break;
- case oSimpleSKChecksum: opt.simple_sk_checksum = 1; break;
- case oNoEncryptTo: opt.no_encrypt_to = 1; break;
- case oEncryptTo: /* store the recipient in the second list */
- sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
- sl->flags = 1;
- break;
- case oRecipient: /* store the recipient */
- add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
- any_explicit_recipient = 1;
- break;
- case oTextmodeShort: opt.textmode = 2; break;
- case oTextmode: opt.textmode=1; break;
- case oExpert: opt.expert = 1; break;
- case oNoExpert: opt.expert = 0; break;
- case oAskSigExpire: opt.ask_sig_expire = 1; break;
- case oNoAskSigExpire: opt.ask_sig_expire = 0; break;
- case oAskCertExpire: opt.ask_cert_expire = 1; break;
- case oNoAskCertExpire: opt.ask_cert_expire = 0; break;
- case oUser: /* store the local users */
- add_to_strlist2( &locusr, pargs.r.ret_str, utf8_strings );
- break;
- case oCompress: opt.compress = pargs.r.ret_int; break;
- case oPasswdFD:
- pwfd = iobuf_translate_file_handle (pargs.r.ret_int, 0);
- break;
-#ifdef __riscos__
- case oPasswdFile:
- pwfd = iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 0), 0);
- break;
-#endif /* __riscos__ */
- case oCommandFD:
- opt.command_fd = iobuf_translate_file_handle (pargs.r.ret_int, 0);
- break;
-#ifdef __riscos__
- case oCommandFile:
- opt.command_fd = iobuf_translate_file_handle ( fdopenfile (pargs.r.ret_str, 0), 0);
- break;
-#endif /* __riscos__ */
- case oCipherAlgo: def_cipher_string = m_strdup(pargs.r.ret_str); break;
- case oDigestAlgo: def_digest_string = m_strdup(pargs.r.ret_str); break;
- case oCertDigestAlgo: cert_digest_string = m_strdup(pargs.r.ret_str); break;
- case oNoSecmemWarn: secmem_set_flags( secmem_get_flags() | 1 ); break;
- case oNoPermissionWarn: opt.no_perm_warn=1; break;
- case oNoMDCWarn: opt.no_mdc_warn=1; break;
- case oCharset:
- if( set_native_charset( pargs.r.ret_str ) )
- log_error(_("%s is not a valid character set\n"),
- pargs.r.ret_str);
- break;
- case oNotDashEscaped: opt.not_dash_escaped = 1; break;
- case oEscapeFrom: opt.escape_from = 1; break;
- case oNoEscapeFrom: opt.escape_from = 0; break;
- case oLockOnce: opt.lock_once = 1; break;
- case oLockNever: disable_dotlock(); break;
- case oLockMultiple:
-#ifndef __riscos__
- opt.lock_once = 0;
-#else /* __riscos__ */
- not_implemented("lock-multiple");
-#endif /* __riscos__ */
- break;
- case oKeyServer:
- opt.keyserver_uri=m_strdup(pargs.r.ret_str);
- if(parse_keyserver_uri(pargs.r.ret_str,configname,configlineno))
- log_error(_("could not parse keyserver URI\n"));
- break;
- case oKeyServerOptions:
- parse_keyserver_options(pargs.r.ret_str);
- break;
- case oImportOptions:
- if(!parse_import_options(pargs.r.ret_str,&opt.import_options))
- {
- if(configname)
- log_error(_("%s:%d: invalid import options\n"),
- configname,configlineno);
- else
- log_error(_("invalid import options\n"));
- }
- break;
- case oExportOptions:
- if(!parse_export_options(pargs.r.ret_str,&opt.export_options))
- {
- if(configname)
- log_error(_("%s:%d: invalid export options\n"),
- configname,configlineno);
- else
- log_error(_("invalid export options\n"));
- }
- break;
- case oTempDir: opt.temp_dir=pargs.r.ret_str; break;
- case oExecPath:
- if(set_exec_path(pargs.r.ret_str,0))
- log_error(_("unable to set exec-path to %s\n"),pargs.r.ret_str);
- else
- opt.exec_path_set=1;
- break;
- case oNotation:
- add_notation_data( pargs.r.ret_str, 0 );
- add_notation_data( pargs.r.ret_str, 1 );
- break;
- case oSigNotation: add_notation_data( pargs.r.ret_str, 0 ); break;
- case oCertNotation: add_notation_data( pargs.r.ret_str, 1 ); break;
- case oShowNotation: opt.show_notation=1; break;
- case oNoShowNotation: opt.show_notation=0; break;
- case oUtf8Strings: utf8_strings = 1; break;
- case oNoUtf8Strings: utf8_strings = 0; break;
- case oDisableCipherAlgo:
- disable_cipher_algo( string_to_cipher_algo(pargs.r.ret_str) );
- break;
- case oDisablePubkeyAlgo:
- disable_pubkey_algo( string_to_pubkey_algo(pargs.r.ret_str) );
- break;
- case oNoSigCache: opt.no_sig_cache = 1; break;
- case oNoSigCreateCheck: opt.no_sig_create_check = 1; break;
- case oAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid = 1; break;
- case oNoAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid=0; break;
- case oAllowFreeformUID: opt.allow_freeform_uid = 1; break;
- case oNoAllowFreeformUID: opt.allow_freeform_uid = 0; break;
- case oNoLiteral: opt.no_literal = 1; break;
- case oSetFilesize: opt.set_filesize = pargs.r.ret_ulong; break;
- case oHonorHttpProxy:
- opt.keyserver_options.honor_http_proxy = 1;
- deprecated_warning(configname,configlineno,
- "--honor-http-proxy",
- "--keyserver-options ",
- "honor-http-proxy");
- break;
- case oFastListMode: opt.fast_list_mode = 1; break;
- case oFixedListMode: opt.fixed_list_mode = 1; break;
- case oListOnly: opt.list_only=1; break;
- case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break;
- case oIgnoreValidFrom: opt.ignore_valid_from = 1; break;
- case oIgnoreCrcError: opt.ignore_crc_error = 1; break;
- case oIgnoreMDCError: opt.ignore_mdc_error = 1; break;
- case oNoRandomSeedFile: use_random_seed = 0; break;
- case oAutoKeyRetrieve:
- case oNoAutoKeyRetrieve:
- opt.keyserver_options.auto_key_retrieve=
- (pargs.r_opt==oAutoKeyRetrieve);
- deprecated_warning(configname,configlineno,
- pargs.r_opt==oAutoKeyRetrieve?"--auto-key-retrieve":
- "--no-auto-key-retrieve","--keyserver-options ",
- pargs.r_opt==oAutoKeyRetrieve?"auto-key-retrieve":
- "no-auto-key-retrieve");
- break;
- case oShowSessionKey: opt.show_session_key = 1; break;
- case oOverrideSessionKey:
- opt.override_session_key = pargs.r.ret_str;
- break;
- case oMergeOnly: opt.merge_only = 1; break;
- case oAllowSecretKeyImport: /* obsolete */ break;
- case oTryAllSecrets: opt.try_all_secrets = 1; break;
- case oTrustedKey: register_trusted_key( pargs.r.ret_str ); break;
- case oEnableSpecialFilenames:
- iobuf_enable_special_filenames (1);
- break;
- case oNoExpensiveTrustChecks: opt.no_expensive_trust_checks=1; break;
- case oAutoCheckTrustDB: opt.no_auto_check_trustdb=0; break;
- case oNoAutoCheckTrustDB: opt.no_auto_check_trustdb=1; break;
- case oPreservePermissions: opt.preserve_permissions=1; break;
- case oDefaultPreferenceList:
- opt.def_preference_list = pargs.r.ret_str;
- break;
- case oPersonalCipherPreferences:
- pers_cipher_list=pargs.r.ret_str;
- break;
- case oPersonalDigestPreferences:
- pers_digest_list=pargs.r.ret_str;
- break;
- case oPersonalCompressPreferences:
- pers_compress_list=pargs.r.ret_str;
- break;
- case oDisplay: opt.display = pargs.r.ret_str; break;
- case oTTYname: opt.ttyname = pargs.r.ret_str; break;
- case oTTYtype: opt.ttytype = pargs.r.ret_str; break;
- case oLCctype: opt.lc_ctype = pargs.r.ret_str; break;
- case oLCmessages: opt.lc_messages = pargs.r.ret_str; break;
- case oGroup: add_group(pargs.r.ret_str); break;
- case oStrict: opt.strict=1; log_set_strict(1); break;
- case oNoStrict: opt.strict=0; log_set_strict(0); break;
- default : pargs.err = configfp? 1:2; break;
- }
- }
-
- if( configfp ) {
- fclose( configfp );
- configfp = NULL;
- m_free(configname); configname = NULL;
- goto next_pass;
- }
- m_free( configname ); configname = NULL;
- if( log_get_errorcount(0) )
- g10_exit(2);
- if( nogreeting )
- greeting = 0;
-
- if( greeting ) {
- fprintf(stderr, "%s %s; %s\n",
- strusage(11), strusage(13), strusage(14) );
- fprintf(stderr, "%s\n", strusage(15) );
- }
- #ifdef IS_DEVELOPMENT_VERSION
- if( !opt.batch ) {
- log_info("NOTE: THIS IS A DEVELOPMENT VERSION!\n");
- log_info("It is only intended for test purposes and should NOT be\n");
- log_info("used in a production environment or with production keys!\n");
- }
- #endif
-
- if (opt.verbose > 2)
- log_info ("using character set `%s'\n", get_native_charset ());
-
- if( may_coredump && !opt.quiet )
- log_info(_("WARNING: program may create a core file!\n"));
-
- if (eyes_only) {
- if (opt.set_filename)
- log_info(_("WARNING: %s overrides %s\n"),
- "--for-your-eyes-only","--set-filename");
-
- opt.set_filename="_CONSOLE";
- }
-
- if (opt.no_literal) {
- log_info(_("NOTE: %s is not for normal use!\n"), "--no-literal");
- if (opt.textmode)
- log_error(_("%s not allowed with %s!\n"),
- "--textmode", "--no-literal" );
- if (opt.set_filename)
- log_error(_("%s makes no sense with %s!\n"),
- eyes_only?"--for-your-eyes-only":"--set-filename",
- "--no-literal" );
- }
-
- if (opt.set_filesize)
- log_info(_("NOTE: %s is not for normal use!\n"), "--set-filesize");
- if( opt.batch )
- tty_batchmode( 1 );
-
- secmem_set_flags( secmem_get_flags() & ~2 ); /* resume warnings */
-
- set_debug();
-
- /* Do these after the switch(), so they can override settings. */
- if(opt.pgp2 && (opt.pgp6 || opt.pgp7))
- log_error(_("%s not allowed with %s!\n"),
- "--pgp2",opt.pgp6?"--pgp6":"--pgp7");
- else
- {
- if(opt.pgp2)
- {
- int unusable=0;
-
- if(cmd==aSign && !detached_sig)
- {
- log_info(_("you can only make detached or clear signatures "
- "while in --pgp2 mode\n"));
- unusable=1;
- }
- else if(cmd==aSignEncr || cmd==aSignSym)
- {
- log_info(_("you can't sign and encrypt at the "
- "same time while in --pgp2 mode\n"));
- unusable=1;
- }
- else if(argc==0 && (cmd==aSign || cmd==aEncr || cmd==aSym))
- {
- log_info(_("you must use files (and not a pipe) when "
- "working with --pgp2 enabled.\n"));
- unusable=1;
- }
- else if(cmd==aEncr || cmd==aSym)
- {
- /* Everything else should work without IDEA (except using
- a secret key encrypted with IDEA and setting an IDEA
- preference, but those have their own error
- messages). */
-
- if(check_cipher_algo(CIPHER_ALGO_IDEA))
- {
- log_info(_("encrypting a message in --pgp2 mode requires "
- "the IDEA cipher\n"));
- idea_cipher_warn(1);
- unusable=1;
- }
- else if(cmd==aSym)
- {
- /* This only sets IDEA for symmetric encryption
- since it is set via select_algo_from_prefs for
- pk encryption. */
- m_free(def_cipher_string);
- def_cipher_string = m_strdup("idea");
- }
-
- /* PGP2 can't handle the output from the textmode
- filter, so we disable it for anything that could
- create a literal packet (only encryption and
- symmetric encryption, since we disable signing
- above). */
- if(!unusable)
- opt.textmode=0;
- }
-
- if(unusable)
- {
- log_info(_("this message may not be usable by %s\n"),
- "PGP 2.x");
- opt.pgp2=0;
- }
- else
- {
- opt.rfc1991 = 1;
- opt.rfc2440 = 0;
- opt.force_mdc = 0;
- opt.disable_mdc = 1;
- opt.force_v4_certs = 0;
- opt.sk_comments = 0;
- opt.escape_from = 1;
- opt.force_v3_sigs = 1;
- opt.pgp2_workarounds = 1;
- opt.ask_sig_expire = 0;
- opt.ask_cert_expire = 0;
- m_free(def_digest_string);
- def_digest_string = m_strdup("md5");
- opt.def_compress_algo = 1;
- }
- }
-
- if(opt.pgp6 || opt.pgp7)
- {
- opt.sk_comments=0;
- opt.escape_from=1;
- opt.force_v3_sigs=1;
- opt.ask_sig_expire=0;
- opt.def_compress_algo=1;
-
- if(opt.pgp6) /* pgp7 has MDC */
- {
- opt.force_mdc=0;
- opt.disable_mdc=1;
- }
- }
- }
-
- /* must do this after dropping setuid, because string_to...
- * may try to load an module */
- if( def_cipher_string ) {
- opt.def_cipher_algo = string_to_cipher_algo(def_cipher_string);
- if(opt.def_cipher_algo==0 &&
- ascii_strcasecmp(def_cipher_string,"idea")==0)
- idea_cipher_warn(1);
- m_free(def_cipher_string); def_cipher_string = NULL;
- if( check_cipher_algo(opt.def_cipher_algo) )
- log_error(_("selected cipher algorithm is invalid\n"));
- }
- if( def_digest_string ) {
- opt.def_digest_algo = string_to_digest_algo(def_digest_string);
- m_free(def_digest_string); def_digest_string = NULL;
- if( check_digest_algo(opt.def_digest_algo) )
- log_error(_("selected digest algorithm is invalid\n"));
- }
- if( cert_digest_string ) {
- opt.cert_digest_algo = string_to_digest_algo(cert_digest_string);
- m_free(cert_digest_string); cert_digest_string = NULL;
- if( check_digest_algo(opt.cert_digest_algo) )
- log_error(_("selected certification digest algorithm is invalid\n"));
- }
- if( s2k_cipher_string ) {
- opt.s2k_cipher_algo = string_to_cipher_algo(s2k_cipher_string);
- m_free(s2k_cipher_string); s2k_cipher_string = NULL;
- if( check_cipher_algo(opt.s2k_cipher_algo) )
- log_error(_("selected cipher algorithm is invalid\n"));
- }
- if( s2k_digest_string ) {
- opt.s2k_digest_algo = string_to_digest_algo(s2k_digest_string);
- m_free(s2k_digest_string); s2k_digest_string = NULL;
- if( check_digest_algo(opt.s2k_digest_algo) )
- log_error(_("selected digest algorithm is invalid\n"));
- }
- if( opt.def_compress_algo < -1 || opt.def_compress_algo > 2 )
- log_error(_("compress algorithm must be in range %d..%d\n"), 0, 2);
- if( opt.completes_needed < 1 )
- log_error(_("completes-needed must be greater than 0\n"));
- if( opt.marginals_needed < 2 )
- log_error(_("marginals-needed must be greater than 1\n"));
- if( opt.max_cert_depth < 1 || opt.max_cert_depth > 255 )
- log_error(_("max-cert-depth must be in range 1 to 255\n"));
- switch( opt.s2k_mode ) {
- case 0:
- log_info(_("NOTE: simple S2K mode (0) is strongly discouraged\n"));
- break;
- case 1: case 3: break;
- default:
- log_error(_("invalid S2K mode; must be 0, 1 or 3\n"));
- }
-
- if(opt.def_cert_check_level<0 || opt.def_cert_check_level>3)
- log_error(_("invalid default-check-level; must be 0, 1, 2, or 3\n"));
-
- /* This isn't actually needed, but does serve to error out if the
- string is invalid. */
- if(opt.def_preference_list &&
- keygen_set_std_prefs(opt.def_preference_list,0))
- log_error(_("invalid default preferences\n"));
-
- /* We provide defaults for the personal digest list */
- if(!pers_digest_list)
- pers_digest_list="h2";
-
- if(pers_cipher_list &&
- keygen_set_std_prefs(pers_cipher_list,PREFTYPE_SYM))
- log_error(_("invalid personal cipher preferences\n"));
-
- if(pers_digest_list &&
- keygen_set_std_prefs(pers_digest_list,PREFTYPE_HASH))
- log_error(_("invalid personal digest preferences\n"));
-
- if(pers_compress_list &&
- keygen_set_std_prefs(pers_compress_list,PREFTYPE_ZIP))
- log_error(_("invalid personal compress preferences\n"));
-
- if( log_get_errorcount(0) )
- g10_exit(2);
-
- /* set the random seed file */
- if( use_random_seed ) {
- char *p = make_filename(opt.homedir, "random_seed", NULL );
- set_random_seed_file(p);
- m_free(p);
- }
-
- if( !cmd && opt.fingerprint && !with_fpr ) {
- set_cmd( &cmd, aListKeys);
- }
-
- if( cmd == aKMode || cmd == aKModeC ) { /* kludge to be compatible to pgp */
- if( cmd == aKModeC ) {
- opt.fingerprint = 1;
- cmd = aKMode;
- }
- opt.list_sigs = 0;
- if( opt.verbose > 2 )
- opt.check_sigs++;
- if( opt.verbose > 1 )
- opt.list_sigs++;
-
- opt.verbose = opt.verbose > 1;
- g10_opt_verbose = opt.verbose;
- }
-
- /* Compression algorithm 0 means no compression at all */
- if( opt.def_compress_algo == 0)
- opt.compress = 0;
-
- /* kludge to let -sat generate a clear text signature */
- if( opt.textmode == 2 && !detached_sig && opt.armor && cmd == aSign )
- cmd = aClearsign;
-
- if( opt.verbose > 1 )
- set_packet_list_mode(1);
-
- /* Add the keyrings, but not for some special commands and not in
- case of "-kvv userid keyring". Also avoid adding the secret
- keyring for a couple of commands to avoid unneeded access in
- case the secrings are stored on a floppy */
- if( cmd != aDeArmor && cmd != aEnArmor
- && !(cmd == aKMode && argc == 2 ) )
- {
- if (cmd != aCheckKeys && cmd != aListSigs && cmd != aListKeys
- && cmd != aVerify && cmd != aVerifyFiles
- && cmd != aSym)
- {
- if (!sec_nrings || default_keyring) /* add default secret rings */
- keydb_add_resource ("secring" EXTSEP_S "gpg", 0, 1);
- for (sl = sec_nrings; sl; sl = sl->next)
- keydb_add_resource ( sl->d, 0, 1 );
- }
- if( !nrings || default_keyring ) /* add default ring */
- keydb_add_resource ("pubring" EXTSEP_S "gpg", 0, 0);
- for(sl = nrings; sl; sl = sl->next )
- keydb_add_resource ( sl->d, 0, 0 );
- }
- FREE_STRLIST(nrings);
- FREE_STRLIST(sec_nrings);
-
-
- if( pwfd != -1 ) /* read the passphrase now. */
- read_passphrase_from_fd( pwfd );
-
- fname = argc? *argv : NULL;
-
- switch( cmd ) {
- case aPrimegen:
- case aPrintMD:
- case aPrintMDs:
- case aGenRandom:
- case aDeArmor:
- case aEnArmor:
- case aFixTrustDB:
- break;
- case aKMode:
- case aListKeys:
- case aListSecretKeys:
- case aCheckKeys:
- if( opt.with_colons ) /* need this to list the trust */
- rc = setup_trustdb(1, trustdb_name );
- break;
- case aExportOwnerTrust: rc = setup_trustdb( 0, trustdb_name ); break;
- case aListTrustDB: rc = setup_trustdb( argc? 1:0, trustdb_name ); break;
- default: rc = setup_trustdb(1, trustdb_name ); break;
- }
- if( rc )
- log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc));
-
-
- switch (cmd) {
- case aStore:
- case aSym:
- case aSign:
- case aSignSym:
- case aClearsign:
- if (!opt.quiet && any_explicit_recipient)
- log_info (_("WARNING: recipients (-r) given "
- "without using public key encryption\n"));
- break;
- default:
- break;
- }
-
- switch( cmd ) {
- case aStore: /* only store the file */
- if( argc > 1 )
- wrong_args(_("--store [filename]"));
- if( (rc = encode_store(fname)) )
- log_error_f( print_fname_stdin(fname),
- "store failed: %s\n", g10_errstr(rc) );
- break;
- case aSym: /* encrypt the given file only with the symmetric cipher */
- if( argc > 1 )
- wrong_args(_("--symmetric [filename]"));
- if( (rc = encode_symmetric(fname)) )
- log_error_f(print_fname_stdin(fname),
- "symmetric encryption failed: %s\n",g10_errstr(rc) );
- break;
-
- case aEncr: /* encrypt the given file */
- if( argc > 1 )
- wrong_args(_("--encrypt [filename]"));
- if( (rc = encode_crypt(fname,remusr)) )
- log_error("%s: encryption failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) );
- break;
-
- case aEncrFiles: /* encrypt the given files */
- encode_crypt_files(argc, argv, remusr);
- break;
-
- case aSign: /* sign the given file */
- sl = NULL;
- if( detached_sig ) { /* sign all files */
- for( ; argc; argc--, argv++ )
- add_to_strlist( &sl, *argv );
- }
- else {
- if( argc > 1 )
- wrong_args(_("--sign [filename]"));
- if( argc ) {
- sl = m_alloc_clear( sizeof *sl + strlen(fname));
- strcpy(sl->d, fname);
- }
- }
- if( (rc = sign_file( sl, detached_sig, locusr, 0, NULL, NULL)) )
- log_error("signing failed: %s\n", g10_errstr(rc) );
- free_strlist(sl);
- break;
-
- case aSignEncr: /* sign and encrypt the given file */
- if( argc > 1 )
- wrong_args(_("--sign --encrypt [filename]"));
- if( argc ) {
- sl = m_alloc_clear( sizeof *sl + strlen(fname));
- strcpy(sl->d, fname);
- }
- else
- sl = NULL;
- if( (rc = sign_file(sl, detached_sig, locusr, 1, remusr, NULL)) )
- log_error("%s: sign+encrypt failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) );
- free_strlist(sl);
- break;
-
- case aSignSym: /* sign and conventionally encrypt the given file */
- if (argc > 1)
- wrong_args(_("--sign --symmetric [filename]"));
- rc = sign_symencrypt_file (fname, locusr);
- if (rc)
- log_error("%s: sign+symmetric failed: %s\n",
- print_fname_stdin(fname), g10_errstr(rc) );
- break;
-
- case aClearsign: /* make a clearsig */
- if( argc > 1 )
- wrong_args(_("--clearsign [filename]"));
- if( (rc = clearsign_file(fname, locusr, NULL)) )
- log_error("%s: clearsign failed: %s\n",
- print_fname_stdin(fname), g10_errstr(rc) );
- break;
-
- case aVerify:
- if( (rc = verify_signatures( argc, argv ) ))
- log_error("verify signatures failed: %s\n", g10_errstr(rc) );
- break;
-
- case aVerifyFiles:
- if( (rc = verify_files( argc, argv ) ))
- log_error("verify files failed: %s\n", g10_errstr(rc) );
- break;
-
- case aDecrypt:
- if( argc > 1 )
- wrong_args(_("--decrypt [filename]"));
- if( (rc = decrypt_message( fname ) ))
- log_error("decrypt_message failed: %s\n", g10_errstr(rc) );
- break;
-
- case aDecryptFiles:
- decrypt_messages(argc, argv);
- break;
-
- case aSignKey: /* sign the key given as argument */
- if( argc != 1 )
- wrong_args(_("--sign-key user-id"));
- username = make_username( fname );
- keyedit_menu(fname, locusr, NULL, 1 );
- m_free(username);
- break;
-
- case aLSignKey:
- if( argc != 1 )
- wrong_args(_("--lsign-key user-id"));
- username = make_username( fname );
- keyedit_menu(fname, locusr, NULL, 2 );
- m_free(username);
- break;
-
- case aNRSignKey:
- if( argc != 1 )
- wrong_args(_("--nrsign-key user-id"));
- username = make_username( fname );
- keyedit_menu(fname, locusr, NULL, 3 );
- m_free(username);
- break;
-
- case aNRLSignKey:
- if( argc != 1 )
- wrong_args(_("--nrlsign-key user-id"));
- username = make_username( fname );
- keyedit_menu(fname, locusr, NULL, 4 );
- m_free(username);
- break;
-
- case aEditKey: /* Edit a key signature */
- if( !argc )
- wrong_args(_("--edit-key user-id [commands]"));
- username = make_username( fname );
- if( argc > 1 ) {
- sl = NULL;
- for( argc--, argv++ ; argc; argc--, argv++ )
- append_to_strlist( &sl, *argv );
- keyedit_menu( username, locusr, sl, 0 );
- free_strlist(sl);
- }
- else
- keyedit_menu(username, locusr, NULL, 0 );
- m_free(username);
- break;
-
- case aDeleteKeys:
- case aDeleteSecretKeys:
- case aDeleteSecretAndPublicKeys:
- sl = NULL;
- /* I'm adding these in reverse order as add_to_strlist2
- reverses them again, and it's easier to understand in the
- proper order :) */
- for( ; argc; argc-- )
- add_to_strlist2( &sl, argv[argc-1], utf8_strings );
- delete_keys(sl,cmd==aDeleteSecretKeys,cmd==aDeleteSecretAndPublicKeys);
- free_strlist(sl);
- break;
-
- case aCheckKeys:
- opt.check_sigs = 1;
- case aListSigs:
- opt.list_sigs = 1;
- case aListKeys:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- add_to_strlist2( &sl, *argv, utf8_strings );
- public_key_list( sl );
- free_strlist(sl);
- break;
- case aListSecretKeys:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- add_to_strlist2( &sl, *argv, utf8_strings );
- secret_key_list( sl );
- free_strlist(sl);
- break;
-
- case aKMode: /* list keyring -- NOTE: This will be removed soon */
- if( argc < 2 ) { /* -kv [userid] */
- sl = NULL;
- if (argc && **argv)
- add_to_strlist2( &sl, *argv, utf8_strings );
- public_key_list( sl );
- free_strlist(sl);
- }
- else if( argc == 2 ) { /* -kv userid keyring */
- if( access( argv[1], R_OK ) ) {
- log_error(_("can't open %s: %s\n"),
- print_fname_stdin(argv[1]), strerror(errno));
- }
- else {
- /* add keyring (default keyrings are not registered in this
- * special case */
- keydb_add_resource( argv[1], 0, 0 );
- sl = NULL;
- if (**argv)
- add_to_strlist2( &sl, *argv, utf8_strings );
- public_key_list( sl );
- free_strlist(sl);
- }
- }
- else
- wrong_args(_("-k[v][v][v][c] [user-id] [keyring]") );
- break;
-
- case aKeygen: /* generate a key */
- if( opt.batch ) {
- if( argc > 1 )
- wrong_args("--gen-key [parameterfile]");
- generate_keypair( argc? *argv : NULL );
- }
- else {
- if( argc )
- wrong_args("--gen-key");
- generate_keypair(NULL);
- }
- break;
-
- case aFastImport:
- opt.import_options |= IMPORT_FAST_IMPORT;
- case aImport:
- import_keys( argc? argv:NULL, argc, NULL, opt.import_options );
- break;
-
- case aExport:
- case aExportAll:
- case aSendKeys:
- case aRecvKeys:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- add_to_strlist2( &sl, *argv, utf8_strings );
- if( cmd == aSendKeys )
- keyserver_export( sl );
- else if( cmd == aRecvKeys )
- keyserver_import( sl );
- else
- export_pubkeys( sl, opt.export_options );
- free_strlist(sl);
- break;
-
- case aSearchKeys:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- append_to_strlist2( &sl, *argv, utf8_strings );
-
- keyserver_search( sl );
- free_strlist(sl);
- break;
-
- case aRefreshKeys:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- add_to_strlist2( &sl, *argv, utf8_strings );
- keyserver_refresh(sl);
- free_strlist(sl);
- break;
-
- case aExportSecret:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- add_to_strlist2( &sl, *argv, utf8_strings );
- export_seckeys( sl );
- free_strlist(sl);
- break;
-
- case aExportSecretSub:
- sl = NULL;
- for( ; argc; argc--, argv++ )
- add_to_strlist2( &sl, *argv, utf8_strings );
- export_secsubkeys( sl );
- free_strlist(sl);
- break;
-
- case aGenRevoke:
- if( argc != 1 )
- wrong_args("--gen-revoke user-id");
- username = make_username(*argv);
- gen_revoke( username );
- m_free( username );
- break;
-
- case aDesigRevoke:
- if( argc != 1 )
- wrong_args("--desig-revoke user-id");
- username = make_username(*argv);
- gen_desig_revoke( username );
- m_free( username );
- break;
-
- case aDeArmor:
- if( argc > 1 )
- wrong_args("--dearmor [file]");
- rc = dearmor_file( argc? *argv: NULL );
- if( rc )
- log_error(_("dearmoring failed: %s\n"), g10_errstr(rc));
- break;
-
- case aEnArmor:
- if( argc > 1 )
- wrong_args("--enarmor [file]");
- rc = enarmor_file( argc? *argv: NULL );
- if( rc )
- log_error(_("enarmoring failed: %s\n"), g10_errstr(rc));
- break;
-
-
- case aPrimegen:
- { int mode = argc < 2 ? 0 : atoi(*argv);
-
- if( mode == 1 && argc == 2 ) {
- mpi_print( stdout, generate_public_prime( atoi(argv[1]) ), 1);
- }
- else if( mode == 2 && argc == 3 ) {
- mpi_print( stdout, generate_elg_prime(
- 0, atoi(argv[1]),
- atoi(argv[2]), NULL,NULL ), 1);
- }
- else if( mode == 3 && argc == 3 ) {
- MPI *factors;
- mpi_print( stdout, generate_elg_prime(
- 1, atoi(argv[1]),
- atoi(argv[2]), NULL,&factors ), 1);
- putchar('\n');
- mpi_print( stdout, factors[0], 1 ); /* print q */
- }
- else if( mode == 4 && argc == 3 ) {
- MPI g = mpi_alloc(1);
- mpi_print( stdout, generate_elg_prime(
- 0, atoi(argv[1]),
- atoi(argv[2]), g, NULL ), 1);
- putchar('\n');
- mpi_print( stdout, g, 1 );
- mpi_free(g);
- }
- else
- wrong_args("--gen-prime mode bits [qbits] ");
- putchar('\n');
- }
- break;
-
- case aGenRandom:
- {
- int level = argc ? atoi(*argv):0;
- int count = argc > 1 ? atoi(argv[1]): 0;
- int endless = !count;
-
- if( argc < 1 || argc > 2 || level < 0 || level > 2 || count < 0 )
- wrong_args("--gen-random 0|1|2 [count]");
-
- while( endless || count ) {
- byte *p;
- /* Wee need a multiple of 3, so that in case of
- armored output we get a correct string. No
- linefolding is done, as it is best to levae this to
- other tools */
- size_t n = !endless && count < 99? count : 99;
-
- p = get_random_bits( n*8, level, 0);
- #ifdef HAVE_DOSISH_SYSTEM
- setmode ( fileno(stdout), O_BINARY );
- #endif
- if (opt.armor) {
- char *tmp = make_radix64_string (p, n);
- fputs (tmp, stdout);
- m_free (tmp);
- if (n%3 == 1)
- putchar ('=');
- if (n%3)
- putchar ('=');
- } else {
- fwrite( p, n, 1, stdout );
- }
- m_free(p);
- if( !endless )
- count -= n;
- }
- if (opt.armor)
- putchar ('\n');
- }
- break;
-
- case aPrintMD:
- if( argc < 1)
- wrong_args("--print-md algo [files]");
- {
- int all_algos = (**argv=='*' && !(*argv)[1]);
- int algo = all_algos? 0 : string_to_digest_algo(*argv);
-
- if( !algo && !all_algos )
- log_error(_("invalid hash algorithm `%s'\n"), *argv );
- else {
- argc--; argv++;
- if( !argc )
- print_mds(NULL, algo);
- else {
- for(; argc; argc--, argv++ )
- print_mds(*argv, algo);
- }
- }
- }
- break;
-
- case aPrintMDs: /* old option */
- if( !argc )
- print_mds(NULL,0);
- else {
- for(; argc; argc--, argv++ )
- print_mds(*argv,0);
- }
- break;
-
- case aListTrustDB:
- if( !argc )
- list_trustdb(NULL);
- else {
- for( ; argc; argc--, argv++ )
- list_trustdb( *argv );
- }
- break;
-
- case aUpdateTrustDB:
- if( argc )
- wrong_args("--update-trustdb");
- update_trustdb();
- break;
-
- case aCheckTrustDB:
- /* Old versions allowed for arguments - ignore them */
- check_trustdb();
- break;
-
- case aFixTrustDB:
- log_error("this command is not yet implemented.\n");
- log_error("A workaround is to use \"--export-ownertrust\", remove\n");
- log_error("the trustdb file and do an \"--import-ownertrust\".\n" );
- break;
-
- case aListTrustPath:
- if( !argc )
- wrong_args("--list-trust-path <user-ids>");
- for( ; argc; argc--, argv++ ) {
- username = make_username( *argv );
- list_trust_path( username );
- m_free(username);
- }
- break;
-
- case aExportOwnerTrust:
- if( argc )
- wrong_args("--export-ownertrust");
- export_ownertrust();
- break;
-
- case aImportOwnerTrust:
- if( argc > 1 )
- wrong_args("--import-ownertrust [file]");
- import_ownertrust( argc? *argv:NULL );
- break;
-
- case aPipeMode:
- if ( argc )
- wrong_args ("--pipemode");
- run_in_pipemode ();
- break;
-
- case aRebuildKeydbCaches:
- if (argc)
- wrong_args ("--rebuild-keydb-caches");
- keydb_rebuild_caches ();
- break;
-
- case aListPackets:
- opt.list_packets=2;
- default:
- if( argc > 1 )
- wrong_args(_("[filename]"));
- /* Issue some output for the unix newbie */
- if( !fname && !opt.outfile && isatty( fileno(stdin) )
- && isatty( fileno(stdout) ) && isatty( fileno(stderr) ) )
- log_info(_("Go ahead and type your message ...\n"));
-
- if( !(a = iobuf_open(fname)) )
- log_error(_("can't open `%s'\n"), print_fname_stdin(fname));
- else {
-
- if( !opt.no_armor ) {
- if( use_armor_filter( a ) ) {
- memset( &afx, 0, sizeof afx);
- iobuf_push_filter( a, armor_filter, &afx );
- }
- }
- if( cmd == aListPackets ) {
- set_packet_list_mode(1);
- opt.list_packets=1;
- }
- rc = proc_packets(NULL, a );
- if( rc )
- log_error("processing message failed: %s\n", g10_errstr(rc) );
- iobuf_close(a);
- }
- break;
- }
-
- /* cleanup */
- FREE_STRLIST(remusr);
- FREE_STRLIST(locusr);
- g10_exit(0);
- return 8; /*NEVER REACHED*/
-}
-
-
-void
-g10_exit( int rc )
-{
- update_random_seed_file();
- if( opt.debug & DBG_MEMSTAT_VALUE ) {
- m_print_stats("on exit");
- random_dump_stats();
- }
- if( opt.debug )
- secmem_dump_stats();
- secmem_term();
- rc = rc? rc : log_get_errorcount(0)? 2 :
- g10_errors_seen? 1 : 0;
- exit(rc );
-}
-
-
-
-
-static void
-print_hex( byte *p, size_t n )
-{
- int i;
-
- if( n == 20 ) {
- for(i=0; i < n ; i++, i++, p += 2 ) {
- if( i )
- putchar(' ');
- if( i == 10 )
- putchar(' ');
- printf("%02X%02X", *p, p[1] );
- }
- }
- else if( n == 24 ) {
- for(i=0; i < n ; i += 4, p += 4 ) {
- if( i )
- putchar(' ');
- if( i == 12 )
- putchar(' ');
- printf("%02X%02X%02X%02X", *p, p[1], p[2], p[3] );
- }
- }
- else {
- for(i=0; i < n ; i++, p++ ) {
- if( i )
- putchar(' ');
- if( i && !(i%8) )
- putchar(' ');
- printf("%02X", *p );
- }
- }
-}
-
-static void
-print_hashline( MD_HANDLE md, int algo, const char *fname )
-{
- int i, n;
- const byte *p;
-
- if ( fname ) {
- for (p = fname; *p; p++ ) {
- if ( *p <= 32 || *p > 127 || *p == ':' || *p == '%' )
- printf("%%%02X", *p );
- else
- putchar( *p );
- }
- }
- putchar(':');
- printf("%d:", algo );
- p = md_read( md, algo );
- n = md_digest_length(algo);
- for(i=0; i < n ; i++, p++ )
- printf("%02X", *p );
- putchar(':');
- putchar('\n');
-}
-
-static void
-print_mds( const char *fname, int algo )
-{
- FILE *fp;
- char buf[1024];
- size_t n;
- MD_HANDLE md;
- char *pname;
-
- if( !fname ) {
- fp = stdin;
- #ifdef HAVE_DOSISH_SYSTEM
- setmode ( fileno(fp) , O_BINARY );
- #endif
- pname = m_strdup("[stdin]: ");
- }
- else {
- pname = m_alloc(strlen(fname)+3);
- strcpy(stpcpy(pname,fname),": ");
- fp = fopen( fname, "rb" );
- }
- if( !fp ) {
- log_error("%s%s\n", pname, strerror(errno) );
- m_free(pname);
- return;
- }
-
- md = md_open( 0, 0 );
- if( algo )
- md_enable( md, algo );
- else {
- md_enable( md, DIGEST_ALGO_MD5 );
- md_enable( md, DIGEST_ALGO_SHA1 );
- md_enable( md, DIGEST_ALGO_RMD160 );
- if( !check_digest_algo(DIGEST_ALGO_TIGER) )
- md_enable( md, DIGEST_ALGO_TIGER );
- }
-
- while( (n=fread( buf, 1, DIM(buf), fp )) )
- md_write( md, buf, n );
- if( ferror(fp) )
- log_error("%s%s\n", pname, strerror(errno) );
- else {
- md_final(md);
- if ( opt.with_colons ) {
- if ( algo )
- print_hashline( md, algo, fname );
- else {
- print_hashline( md, DIGEST_ALGO_MD5, fname );
- print_hashline( md, DIGEST_ALGO_SHA1, fname );
- print_hashline( md, DIGEST_ALGO_RMD160, fname );
- if( !check_digest_algo(DIGEST_ALGO_TIGER) )
- print_hashline( md, DIGEST_ALGO_TIGER, fname );
- }
- }
- else {
- if( algo ) {
- if( fname )
- fputs( pname, stdout );
- print_hex(md_read(md, algo), md_digest_length(algo) );
- }
- else {
- printf( "%s MD5 = ", fname?pname:"" );
- print_hex(md_read(md, DIGEST_ALGO_MD5), 16 );
- printf("\n%s SHA1 = ", fname?pname:"" );
- print_hex(md_read(md, DIGEST_ALGO_SHA1), 20 );
- printf("\n%sRMD160 = ", fname?pname:"" );
- print_hex(md_read(md, DIGEST_ALGO_RMD160), 20 );
- if( !check_digest_algo(DIGEST_ALGO_TIGER) ) {
- printf("\n%s TIGER = ", fname?pname:"" );
- print_hex(md_read(md, DIGEST_ALGO_TIGER), 24 );
- }
- }
- putchar('\n');
- }
- }
- md_close(md);
-
- if( fp != stdin )
- fclose(fp);
-}
-
-
-/****************
- * Check the supplied name,value string and add it to the notation
- * data to be used for signatures. which==0 for sig notations, and 1
- * for cert notations.
-*/
-static void
-add_notation_data( const char *string, int which )
-{
- const char *s;
- STRLIST sl,*notation_data;
- int critical=0;
- int highbit=0;
-
- if(which)
- notation_data=&opt.cert_notation_data;
- else
- notation_data=&opt.sig_notation_data;
-
- if( *string == '!' ) {
- critical = 1;
- string++;
- }
-
- for( s=string ; *s != '='; s++ ) {
- if( !*s || (*s & 0x80) || (!isgraph(*s) && !isspace(*s)) ) {
- log_error(_("a notation name must have only printable characters "
- "or spaces, and end with an '='\n") );
- return;
- }
- }
- /* we only support printable text - therefore we enforce the use
- * of only printable characters (an empty value is valid) */
- for( s++; *s ; s++ ) {
- if( iscntrl(*s) ) {
- log_error(_("a notation value must not use "
- "any control characters\n") );
- return;
- }
- else if( *s & 0x80 )
- highbit = 1;
- }
-
- if( highbit ) /* must use UTF8 encoding */
- sl = add_to_strlist2( notation_data, string, utf8_strings );
- else
- sl = add_to_strlist( notation_data, string );
-
- if( critical )
- sl->flags |= 1;
-}
-
-
-static void
-add_policy_url( const char *string, int which )
-{
- int i,critical=0;
- STRLIST sl;
-
- if(*string=='!')
- {
- string++;
- critical=1;
- }
-
- for(i=0;i<strlen(string);i++)
- if(string[i]&0x80 || iscntrl(string[i]))
- break;
-
- if(i==0 || i<strlen(string))
- {
- if(which)
- log_error(_("the given certification policy URL is invalid\n"));
- else
- log_error(_("the given signature policy URL is invalid\n"));
- }
-
- if(which)
- sl=add_to_strlist( &opt.cert_policy_url, string );
- else
- sl=add_to_strlist( &opt.sig_policy_url, string );
-
- if(critical)
- sl->flags |= 1;
-}
diff --git a/g10/getkey.c b/g10/getkey.c
deleted file mode 100644
index 991b98d2f..000000000
--- a/g10/getkey.c
+++ /dev/null
@@ -1,2476 +0,0 @@
-/* getkey.c - Get a key from the database
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <ctype.h>
-#include "util.h"
-#include "packet.h"
-#include "memory.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "options.h"
-#include "main.h"
-#include "trustdb.h"
-#include "i18n.h"
-
-#define MAX_PK_CACHE_ENTRIES 200
-#define MAX_UID_CACHE_ENTRIES 200
-
-#if MAX_PK_CACHE_ENTRIES < 2
- #error We need the cache for key creation
-#endif
-
-
-struct getkey_ctx_s {
- int exact;
- KBNODE keyblock;
- KBPOS kbpos;
- KBNODE found_key; /* pointer into some keyblock */
- int last_rc;
- int req_usage;
- int req_algo;
- KEYDB_HANDLE kr_handle;
- int not_allocated;
- int nitems;
- KEYDB_SEARCH_DESC items[1];
-};
-
-#if 0
-static struct {
- int any;
- int okay_count;
- int nokey_count;
- int error_count;
-} lkup_stats[21];
-#endif
-
-typedef struct keyid_list {
- struct keyid_list *next;
- u32 keyid[2];
-} *keyid_list_t;
-
-
-#if MAX_PK_CACHE_ENTRIES
- typedef struct pk_cache_entry {
- struct pk_cache_entry *next;
- u32 keyid[2];
- PKT_public_key *pk;
- } *pk_cache_entry_t;
- static pk_cache_entry_t pk_cache;
- static int pk_cache_entries; /* number of entries in pk cache */
- static int pk_cache_disabled;
-#endif
-
-#if MAX_UID_CACHE_ENTRIES < 5
- #error we really need the userid cache
-#endif
-typedef struct user_id_db {
- struct user_id_db *next;
- keyid_list_t keyids;
- int len;
- char name[1];
-} *user_id_db_t;
-static user_id_db_t user_id_db;
-static int uid_cache_entries; /* number of entries in uid cache */
-
-static void merge_selfsigs( KBNODE keyblock );
-static int lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode );
-
-#if 0
-static void
-print_stats()
-{
- int i;
- for(i=0; i < DIM(lkup_stats); i++ ) {
- if( lkup_stats[i].any )
- fprintf(stderr,
- "lookup stats: mode=%-2d ok=%-6d nokey=%-6d err=%-6d\n",
- i,
- lkup_stats[i].okay_count,
- lkup_stats[i].nokey_count,
- lkup_stats[i].error_count );
- }
-}
-#endif
-
-
-void
-cache_public_key( PKT_public_key *pk )
-{
- #if MAX_PK_CACHE_ENTRIES
- pk_cache_entry_t ce;
- u32 keyid[2];
-
- if( pk_cache_disabled )
- return;
-
- if( pk->dont_cache )
- return;
-
- if( is_ELGAMAL(pk->pubkey_algo)
- || pk->pubkey_algo == PUBKEY_ALGO_DSA
- || is_RSA(pk->pubkey_algo) ) {
- keyid_from_pk( pk, keyid );
- }
- else
- return; /* don't know how to get the keyid */
-
- for( ce = pk_cache; ce; ce = ce->next )
- if( ce->keyid[0] == keyid[0] && ce->keyid[1] == keyid[1] ) {
- if( DBG_CACHE )
- log_debug("cache_public_key: already in cache\n");
- return;
- }
-
- if( pk_cache_entries >= MAX_PK_CACHE_ENTRIES ) {
- /* fixme: use another algorithm to free some cache slots */
- pk_cache_disabled=1;
- if( opt.verbose > 1 )
- log_info(_("too many entries in pk cache - disabled\n"));
- return;
- }
- pk_cache_entries++;
- ce = m_alloc( sizeof *ce );
- ce->next = pk_cache;
- pk_cache = ce;
- ce->pk = copy_public_key( NULL, pk );
- ce->keyid[0] = keyid[0];
- ce->keyid[1] = keyid[1];
- #endif
-}
-
-
-/*
- * Return the user ID from the given keyblock.
- * We use the primary uid flag which has been set by the merge_selfsigs
- * function. The returned value is only valid as long as then given
- * keyblock is not changed
- */
-static const char *
-get_primary_uid ( KBNODE keyblock, size_t *uidlen )
-{
- KBNODE k;
- const char *s;
-
- for (k=keyblock; k; k=k->next ) {
- if ( k->pkt->pkttype == PKT_USER_ID
- && !k->pkt->pkt.user_id->attrib_data
- && k->pkt->pkt.user_id->is_primary ) {
- *uidlen = k->pkt->pkt.user_id->len;
- return k->pkt->pkt.user_id->name;
- }
- }
- /* fixme: returning translatable constants instead of a user ID is
- * not good because they are probably not utf-8 encoded. */
- s = _("[User id not found]");
- *uidlen = strlen (s);
- return s;
-}
-
-
-static void
-release_keyid_list ( keyid_list_t k )
-{
- while ( k ) {
- keyid_list_t k2 = k->next;
- m_free (k);
- k = k2;
- }
-}
-
-/****************
- * Store the association of keyid and userid
- * Feed only public keys to this function.
- */
-static void
-cache_user_id( KBNODE keyblock )
-{
- user_id_db_t r;
- const char *uid;
- size_t uidlen;
- keyid_list_t keyids = NULL;
- KBNODE k;
-
- for (k=keyblock; k; k = k->next ) {
- if ( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- keyid_list_t a = m_alloc_clear ( sizeof *a );
- /* Hmmm: For a long list of keyids it might be an advantage
- * to append the keys */
- keyid_from_pk( k->pkt->pkt.public_key, a->keyid );
- /* first check for duplicates */
- for(r=user_id_db; r; r = r->next ) {
- keyid_list_t b = r->keyids;
- for ( b = r->keyids; b; b = b->next ) {
- if( b->keyid[0] == a->keyid[0]
- && b->keyid[1] == a->keyid[1] ) {
- if( DBG_CACHE )
- log_debug("cache_user_id: already in cache\n");
- release_keyid_list ( keyids );
- m_free ( a );
- return;
- }
- }
- }
- /* now put it into the cache */
- a->next = keyids;
- keyids = a;
- }
- }
- if ( !keyids )
- BUG (); /* No key no fun */
-
-
- uid = get_primary_uid ( keyblock, &uidlen );
-
- if( uid_cache_entries >= MAX_UID_CACHE_ENTRIES ) {
- /* fixme: use another algorithm to free some cache slots */
- r = user_id_db;
- user_id_db = r->next;
- release_keyid_list ( r->keyids );
- m_free(r);
- uid_cache_entries--;
- }
- r = m_alloc( sizeof *r + uidlen-1 );
- r->keyids = keyids;
- r->len = uidlen;
- memcpy(r->name, uid, r->len);
- r->next = user_id_db;
- user_id_db = r;
- uid_cache_entries++;
-}
-
-
-void
-getkey_disable_caches()
-{
- #if MAX_PK_CACHE_ENTRIES
- {
- pk_cache_entry_t ce, ce2;
-
- for( ce = pk_cache; ce; ce = ce2 ) {
- ce2 = ce->next;
- free_public_key( ce->pk );
- m_free( ce );
- }
- pk_cache_disabled=1;
- pk_cache_entries = 0;
- pk_cache = NULL;
- }
- #endif
- /* fixme: disable user id cache ? */
-}
-
-
-static void
-pk_from_block ( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE keyblock )
-{
- KBNODE a = ctx->found_key ? ctx->found_key : keyblock;
-
- assert ( a->pkt->pkttype == PKT_PUBLIC_KEY
- || a->pkt->pkttype == PKT_PUBLIC_SUBKEY );
-
- copy_public_key ( pk, a->pkt->pkt.public_key );
-}
-
-static void
-sk_from_block ( GETKEY_CTX ctx,
- PKT_secret_key *sk, KBNODE keyblock )
-{
- KBNODE a = ctx->found_key ? ctx->found_key : keyblock;
-
- assert ( a->pkt->pkttype == PKT_SECRET_KEY
- || a->pkt->pkttype == PKT_SECRET_SUBKEY );
-
- copy_secret_key( sk, a->pkt->pkt.secret_key);
-}
-
-
-/****************
- * Get a public key and store it into the allocated pk
- * can be called with PK set to NULL to just read it into some
- * internal structures.
- */
-int
-get_pubkey( PKT_public_key *pk, u32 *keyid )
-{
- int internal = 0;
- int rc = 0;
-
- #if MAX_PK_CACHE_ENTRIES
- { /* Try to get it from the cache */
- pk_cache_entry_t ce;
- for( ce = pk_cache; ce; ce = ce->next ) {
- if( ce->keyid[0] == keyid[0] && ce->keyid[1] == keyid[1] ) {
- if( pk )
- copy_public_key( pk, ce->pk );
- return 0;
- }
- }
- }
- #endif
- /* more init stuff */
- if( !pk ) {
- pk = m_alloc_clear( sizeof *pk );
- internal++;
- }
-
-
- /* do a lookup */
- { struct getkey_ctx_s ctx;
- KBNODE kb = NULL;
- memset( &ctx, 0, sizeof ctx );
- ctx.exact = 1; /* use the key ID exactly as given */
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (0);
- ctx.nitems = 1;
- ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID;
- ctx.items[0].u.kid[0] = keyid[0];
- ctx.items[0].u.kid[1] = keyid[1];
- ctx.req_algo = pk->req_algo;
- ctx.req_usage = pk->req_usage;
- rc = lookup( &ctx, &kb, 0 );
- if ( !rc ) {
- pk_from_block ( &ctx, pk, kb );
- }
- get_pubkey_end( &ctx );
- release_kbnode ( kb );
- }
- if( !rc )
- goto leave;
-
- rc = G10ERR_NO_PUBKEY;
-
- leave:
- if( !rc )
- cache_public_key( pk );
- if( internal )
- free_public_key(pk);
- return rc;
-}
-
-
-/* Get a public key and store it into the allocated pk. This function
- differs from get_pubkey() in that it does not do a check of the key
- to avoid recursion. It should be used only in very certain cases. */
-static int
-get_pubkey_direct (PKT_public_key *pk, u32 *keyid)
-{
- int rc = 0;
- KEYDB_HANDLE hd;
- KBNODE keyblock;
-
- assert (pk);
-#if MAX_PK_CACHE_ENTRIES
- { /* Try to get it from the cache */
- pk_cache_entry_t ce;
-
- for (ce = pk_cache; ce; ce = ce->next)
- {
- if (ce->keyid[0] == keyid[0] && ce->keyid[1] == keyid[1])
- {
- if (pk)
- copy_public_key (pk, ce->pk);
- return 0;
- }
- }
- }
-#endif
-
- hd = keydb_new (0);
- rc = keydb_search_kid (hd, keyid);
- if (rc == -1)
- {
- keydb_release (hd);
- return G10ERR_NO_PUBKEY;
- }
- rc = keydb_get_keyblock (hd, &keyblock);
- keydb_release (hd);
- if (rc)
- {
- log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc));
- return G10ERR_NO_PUBKEY;
- }
-
- assert ( keyblock->pkt->pkttype == PKT_PUBLIC_KEY
- || keyblock->pkt->pkttype == PKT_PUBLIC_SUBKEY );
- copy_public_key (pk, keyblock->pkt->pkt.public_key );
- release_kbnode (keyblock);
-
- /* Not caching key here since it won't have all of the fields
- properly set. */
-
- return 0;
-}
-
-
-
-KBNODE
-get_pubkeyblock( u32 *keyid )
-{
- struct getkey_ctx_s ctx;
- int rc = 0;
- KBNODE keyblock = NULL;
-
- memset( &ctx, 0, sizeof ctx );
- /* no need to set exact here because we want the entire block */
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (0);
- ctx.nitems = 1;
- ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID;
- ctx.items[0].u.kid[0] = keyid[0];
- ctx.items[0].u.kid[1] = keyid[1];
- rc = lookup( &ctx, &keyblock, 0 );
- get_pubkey_end( &ctx );
-
- return rc ? NULL : keyblock;
-}
-
-
-
-
-/****************
- * Get a secret key and store it into sk
- */
-int
-get_seckey( PKT_secret_key *sk, u32 *keyid )
-{
- int rc;
- struct getkey_ctx_s ctx;
- KBNODE kb = NULL;
-
- memset( &ctx, 0, sizeof ctx );
- ctx.exact = 1; /* use the key ID exactly as given */
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (1);
- ctx.nitems = 1;
- ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID;
- ctx.items[0].u.kid[0] = keyid[0];
- ctx.items[0].u.kid[1] = keyid[1];
- ctx.req_algo = sk->req_algo;
- ctx.req_usage = sk->req_usage;
- rc = lookup( &ctx, &kb, 1 );
- if ( !rc ) {
- sk_from_block ( &ctx, sk, kb );
- }
- get_seckey_end( &ctx );
- release_kbnode ( kb );
-
- if( !rc ) {
- /* check the secret key (this may prompt for a passprase to
- * unlock the secret key
- */
- rc = check_secret_key( sk, 0 );
- }
-
- return rc;
-}
-
-
-/****************
- * Check whether the secret key is available. This is just a fast
- * check and does not tell us whether the secret key is valid. It
- * merely tells other whether there is some secret key.
- * Returns: 0 := key is available
- * G10ERR_NO_SECKEY := not availabe
- */
-int
-seckey_available( u32 *keyid )
-{
- int rc;
- KEYDB_HANDLE hd = keydb_new (1);
-
- rc = keydb_search_kid (hd, keyid);
- if ( rc == -1 )
- rc = G10ERR_NO_SECKEY;
- keydb_release (hd);
- return rc;
-}
-
-
-/****************
- * Return the type of the user id:
- *
- * Please use the constants KEYDB_SERCH_MODE_xxx
- * 0 = Invalid user ID
- * 1 = exact match
- * 2 = match a substring
- * 3 = match an email address
- * 4 = match a substring of an email address
- * 5 = match an email address, but compare from end
- * 6 = word match mode
- * 10 = it is a short KEYID (don't care about keyid[0])
- * 11 = it is a long KEYID
- * 12 = it is a trustdb index (keyid is looked up)
- * 16 = it is a 16 byte fingerprint
- * 20 = it is a 20 byte fingerprint
- * 21 = Unified fingerprint :fpr:pk_algo:
- * (We don't use pk_algo yet)
- *
- * Rules used:
- * - If the username starts with 8,9,16 or 17 hex-digits (the first one
- * must be in the range 0..9), this is considered a keyid; depending
- * on the length a short or complete one.
- * - If the username starts with 32,33,40 or 41 hex-digits (the first one
- * must be in the range 0..9), this is considered a fingerprint.
- * - If the username starts with a left angle, we assume it is a complete
- * email address and look only at this part.
- * - If the username starts with a colon we assume it is a unified
- * key specfification.
- * - If the username starts with a '.', we assume it is the ending
- * part of an email address
- * - If the username starts with an '@', we assume it is a part of an
- * email address
- * - If the userid start with an '=' an exact compare is done.
- * - If the userid starts with a '*' a case insensitive substring search is
- * done (This is the default).
- * - If the userid starts with a '+' we will compare individual words
- * and a match requires that all the words are in the userid.
- * Words are delimited by white space or "()<>[]{}.@-+_,;/&!"
- * (note that you can't search for these characters). Compare
- * is not case sensitive.
- */
-
-static int
-classify_user_id2( const char *name,
- KEYDB_SEARCH_DESC *desc,
- int *force_exact )
-{
- const char *s;
- int hexprefix = 0;
- int hexlength;
- int mode = 0;
-
- /* clear the structure so that the mode field is set to zero unless
- * we set it to the correct value right at the end of this function */
- memset (desc, 0, sizeof *desc);
- *force_exact = 0;
- /* skip leading spaces. Fixme: what is with trailing spaces? */
- for(s = name; *s && isspace(*s); s++ )
- ;
-
- switch (*s) {
- case 0: /* empty string is an error */
- return 0;
-
- case '.': /* an email address, compare from end */
- mode = KEYDB_SEARCH_MODE_MAILEND;
- s++;
- desc->u.name = s;
- break;
-
- case '<': /* an email address */
- mode = KEYDB_SEARCH_MODE_MAIL;
- desc->u.name = s;
- break;
-
- case '@': /* part of an email address */
- mode = KEYDB_SEARCH_MODE_MAILSUB;
- s++;
- desc->u.name = s;
- break;
-
- case '=': /* exact compare */
- mode = KEYDB_SEARCH_MODE_EXACT;
- s++;
- desc->u.name = s;
- break;
-
- case '*': /* case insensitive substring search */
- mode = KEYDB_SEARCH_MODE_SUBSTR;
- s++;
- desc->u.name = s;
- break;
-
- case '+': /* compare individual words */
- mode = KEYDB_SEARCH_MODE_WORDS;
- s++;
- desc->u.name = s;
- break;
-
- case '#': /* local user id */
- return 0; /* This is now obsolete and van't not be used anymore*/
-
- case ':': /*Unified fingerprint */
- {
- const char *se, *si;
- int i;
-
- se = strchr( ++s,':');
- if ( !se )
- return 0;
- for (i=0,si=s; si < se; si++, i++ ) {
- if ( !strchr("01234567890abcdefABCDEF", *si ) )
- return 0; /* invalid digit */
- }
- if (i != 32 && i != 40)
- return 0; /* invalid length of fpr*/
- for (i=0,si=s; si < se; i++, si +=2)
- desc->u.fpr[i] = hextobyte(si);
- for ( ; i < 20; i++)
- desc->u.fpr[i]= 0;
- s = se + 1;
- mode = KEYDB_SEARCH_MODE_FPR;
- }
- break;
-
- default:
- if (s[0] == '0' && s[1] == 'x') {
- hexprefix = 1;
- s += 2;
- }
-
- hexlength = strspn(s, "0123456789abcdefABCDEF");
- if (hexlength >= 8 && s[hexlength] =='!') {
- *force_exact = 1;
- hexlength++; /* just for the following check */
- }
-
- /* check if a hexadecimal number is terminated by EOS or blank */
- if (hexlength && s[hexlength] && !isspace(s[hexlength])) {
- if (hexprefix) /* a "0x" prefix without correct */
- return 0; /* termination is an error */
- else /* The first chars looked like */
- hexlength = 0; /* a hex number, but really were not. */
- }
-
- if (*force_exact)
- hexlength--;
-
- if (hexlength == 8
- || (!hexprefix && hexlength == 9 && *s == '0')){
- /* short keyid */
- if (hexlength == 9)
- s++;
- desc->u.kid[0] = 0;
- desc->u.kid[1] = strtoul( s, NULL, 16 );
- mode = KEYDB_SEARCH_MODE_SHORT_KID;
- }
- else if (hexlength == 16
- || (!hexprefix && hexlength == 17 && *s == '0')) {
- /* complete keyid */
- char buf[9];
- if (hexlength == 17)
- s++;
- mem2str(buf, s, 9 );
- desc->u.kid[0] = strtoul( buf, NULL, 16 );
- desc->u.kid[1] = strtoul( s+8, NULL, 16 );
- mode = KEYDB_SEARCH_MODE_LONG_KID;
- }
- else if (hexlength == 32 || (!hexprefix && hexlength == 33
- && *s == '0')) {
- /* md5 fingerprint */
- int i;
- if (hexlength == 33)
- s++;
- memset(desc->u.fpr+16, 0, 4);
- for (i=0; i < 16; i++, s+=2) {
- int c = hextobyte(s);
- if (c == -1)
- return 0;
- desc->u.fpr[i] = c;
- }
- mode = KEYDB_SEARCH_MODE_FPR16;
- }
- else if (hexlength == 40 || (!hexprefix && hexlength == 41
- && *s == '0')) {
- /* sha1/rmd160 fingerprint */
- int i;
- if (hexlength == 41)
- s++;
- for (i=0; i < 20; i++, s+=2) {
- int c = hextobyte(s);
- if (c == -1)
- return 0;
- desc->u.fpr[i] = c;
- }
- mode = KEYDB_SEARCH_MODE_FPR20;
- }
- else {
- if (hexprefix) /* This was a hex number with a prefix */
- return 0; /* and a wrong length */
-
- *force_exact = 0;
- desc->u.name = s;
- mode = KEYDB_SEARCH_MODE_SUBSTR; /* default mode */
- }
- }
-
- desc->mode = mode;
- return mode;
-}
-
-int
-classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc)
-{
- int dummy;
- KEYDB_SEARCH_DESC dummy_desc;
-
- if (!desc)
- desc = &dummy_desc;
- return classify_user_id2 (name, desc, &dummy);
-}
-
-/****************
- * Try to get the pubkey by the userid. This function looks for the
- * first pubkey certificate which has the given name in a user_id.
- * if pk/sk has the pubkey algo set, the function will only return
- * a pubkey with that algo.
- * The caller should provide storage for either the pk or the sk.
- * If ret_kb is not NULL the function will return the keyblock there.
- */
-
-static int
-key_byname( GETKEY_CTX *retctx, STRLIST namelist,
- PKT_public_key *pk, PKT_secret_key *sk, int secmode,
- KBNODE *ret_kb, KEYDB_HANDLE *ret_kdbhd )
-{
- int rc = 0;
- int n;
- STRLIST r;
- GETKEY_CTX ctx;
- KBNODE help_kb = NULL;
- int exact;
-
- if( retctx ) {/* reset the returned context in case of error */
- assert (!ret_kdbhd); /* not allowed because the handle is
- stored in the context */
- *retctx = NULL;
- }
- if (ret_kdbhd)
- *ret_kdbhd = NULL;
-
- /* build the search context */
- for(n=0, r=namelist; r; r = r->next )
- n++;
- ctx = m_alloc_clear (sizeof *ctx + (n-1)*sizeof ctx->items );
- ctx->nitems = n;
-
- for(n=0, r=namelist; r; r = r->next, n++ ) {
- classify_user_id2 (r->d, &ctx->items[n], &exact);
-
- if (exact)
- ctx->exact = 1;
- if (!ctx->items[n].mode) {
- m_free (ctx);
- return G10ERR_INV_USER_ID;
- }
- }
-
- ctx->kr_handle = keydb_new (secmode);
- if ( !ret_kb )
- ret_kb = &help_kb;
-
- if( secmode ) {
- if (sk) {
- ctx->req_algo = sk->req_algo;
- ctx->req_usage = sk->req_usage;
- }
- rc = lookup( ctx, ret_kb, 1 );
- if ( !rc && sk ) {
- sk_from_block ( ctx, sk, *ret_kb );
- }
- }
- else {
- if (pk) {
- ctx->req_algo = pk->req_algo;
- ctx->req_usage = pk->req_usage;
- }
- rc = lookup( ctx, ret_kb, 0 );
- if ( !rc && pk ) {
- pk_from_block ( ctx, pk, *ret_kb );
- }
- }
-
- release_kbnode ( help_kb );
-
- if (retctx) /* caller wants the context */
- *retctx = ctx;
- else {
- if (ret_kdbhd) {
- *ret_kdbhd = ctx->kr_handle;
- ctx->kr_handle = NULL;
- }
- get_pubkey_end (ctx);
- }
-
- return rc;
-}
-
-/*
- * Find a public key from NAME and returh the keyblock or the key.
- * If ret_kdb is not NULL, the KEYDB handle used to locate this keyblock is
- * returned and the caller is responsible for closing it.
- */
-int
-get_pubkey_byname (PKT_public_key *pk,
- const char *name, KBNODE *ret_keyblock,
- KEYDB_HANDLE *ret_kdbhd )
-{
- int rc;
- STRLIST namelist = NULL;
-
- add_to_strlist( &namelist, name );
- rc = key_byname( NULL, namelist, pk, NULL, 0, ret_keyblock, ret_kdbhd);
- free_strlist( namelist );
- return rc;
-}
-
-int
-get_pubkey_bynames( GETKEY_CTX *retctx, PKT_public_key *pk,
- STRLIST names, KBNODE *ret_keyblock )
-{
- return key_byname( retctx, names, pk, NULL, 0, ret_keyblock, NULL);
-}
-
-int
-get_pubkey_next( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE *ret_keyblock )
-{
- int rc;
-
- rc = lookup( ctx, ret_keyblock, 0 );
- if ( !rc && pk && ret_keyblock )
- pk_from_block ( ctx, pk, *ret_keyblock );
-
- return rc;
-}
-
-
-void
-get_pubkey_end( GETKEY_CTX ctx )
-{
- if( ctx ) {
- memset (&ctx->kbpos, 0, sizeof ctx->kbpos);
- keydb_release (ctx->kr_handle);
- if( !ctx->not_allocated )
- m_free( ctx );
- }
-}
-
-
-
-
-/****************
- * Search for a key with the given fingerprint.
- * FIXME:
- * We should replace this with the _byname function. Thiscsan be done
- * by creating a userID conforming to the unified fingerprint style.
- */
-int
-get_pubkey_byfprint( PKT_public_key *pk,
- const byte *fprint, size_t fprint_len)
-{
- int rc;
-
- if( fprint_len == 20 || fprint_len == 16 ) {
- struct getkey_ctx_s ctx;
- KBNODE kb = NULL;
-
- memset( &ctx, 0, sizeof ctx );
- ctx.exact = 1 ;
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (0);
- ctx.nitems = 1;
- ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16
- : KEYDB_SEARCH_MODE_FPR20;
- memcpy( ctx.items[0].u.fpr, fprint, fprint_len );
- rc = lookup( &ctx, &kb, 0 );
- if (!rc && pk )
- pk_from_block ( &ctx, pk, kb );
- release_kbnode ( kb );
- get_pubkey_end( &ctx );
- }
- else
- rc = G10ERR_GENERAL; /* Oops */
- return rc;
-}
-
-/****************
- * Search for a key with the given fingerprint and return the
- * complete keyblock which may have more than only this key.
- */
-int
-get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint,
- size_t fprint_len )
-{
- int rc;
-
- if( fprint_len == 20 || fprint_len == 16 ) {
- struct getkey_ctx_s ctx;
-
- memset( &ctx, 0, sizeof ctx );
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (0);
- ctx.nitems = 1;
- ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16
- : KEYDB_SEARCH_MODE_FPR20;
- memcpy( ctx.items[0].u.fpr, fprint, fprint_len );
- rc = lookup( &ctx, ret_keyblock, 0 );
- get_pubkey_end( &ctx );
- }
- else
- rc = G10ERR_GENERAL; /* Oops */
-
- return rc;
-}
-
-
-/****************
- * Get a secret key by name and store it into sk
- * If NAME is NULL use the default key
- */
-static int
-get_seckey_byname2( GETKEY_CTX *retctx,
- PKT_secret_key *sk, const char *name, int unprotect,
- KBNODE *retblock )
-{
- STRLIST namelist = NULL;
- int rc;
-
- if( !name && opt.def_secret_key && *opt.def_secret_key ) {
- add_to_strlist( &namelist, opt.def_secret_key );
- rc = key_byname( retctx, namelist, NULL, sk, 1, retblock, NULL );
- }
- else if( !name ) { /* use the first one as default key */
- struct getkey_ctx_s ctx;
- KBNODE kb = NULL;
-
- assert (!retctx ); /* do we need this at all */
- assert (!retblock);
- memset( &ctx, 0, sizeof ctx );
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (1);
- ctx.nitems = 1;
- ctx.items[0].mode = KEYDB_SEARCH_MODE_FIRST;
- rc = lookup( &ctx, &kb, 1 );
- if (!rc && sk )
- sk_from_block ( &ctx, sk, kb );
- release_kbnode ( kb );
- get_seckey_end( &ctx );
- }
- else {
- add_to_strlist( &namelist, name );
- rc = key_byname( retctx, namelist, NULL, sk, 1, retblock, NULL );
- }
-
- free_strlist( namelist );
-
- if( !rc && unprotect )
- rc = check_secret_key( sk, 0 );
-
- return rc;
-}
-
-int
-get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock )
-{
- return get_seckey_byname2 ( NULL, sk, name, unlock, NULL );
-}
-
-
-int
-get_seckey_bynames( GETKEY_CTX *retctx, PKT_secret_key *sk,
- STRLIST names, KBNODE *ret_keyblock )
-{
- return key_byname( retctx, names, NULL, sk, 1, ret_keyblock, NULL );
-}
-
-
-int
-get_seckey_next( GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE *ret_keyblock )
-{
- int rc;
-
- rc = lookup( ctx, ret_keyblock, 1 );
- if ( !rc && sk && ret_keyblock )
- sk_from_block ( ctx, sk, *ret_keyblock );
-
- return rc;
-}
-
-
-void
-get_seckey_end( GETKEY_CTX ctx )
-{
- get_pubkey_end( ctx );
-}
-
-
-/****************
- * Search for a key with the given fingerprint.
- * FIXME:
- * We should replace this with the _byname function. Thiscsan be done
- * by creating a userID conforming to the unified fingerprint style.
- */
-int
-get_seckey_byfprint( PKT_secret_key *sk,
- const byte *fprint, size_t fprint_len)
-{
- int rc;
-
- if( fprint_len == 20 || fprint_len == 16 ) {
- struct getkey_ctx_s ctx;
- KBNODE kb = NULL;
-
- memset( &ctx, 0, sizeof ctx );
- ctx.exact = 1 ;
- ctx.not_allocated = 1;
- ctx.kr_handle = keydb_new (1);
- ctx.nitems = 1;
- ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16
- : KEYDB_SEARCH_MODE_FPR20;
- memcpy( ctx.items[0].u.fpr, fprint, fprint_len );
- rc = lookup( &ctx, &kb, 1 );
- if (!rc && sk )
- sk_from_block ( &ctx, sk, kb );
- release_kbnode ( kb );
- get_pubkey_end( &ctx );
- }
- else
- rc = G10ERR_GENERAL; /* Oops */
- return rc;
-}
-
-
-/************************************************
- ************* Merging stuff ********************
- ************************************************/
-
-/****************
- * merge all selfsignatures with the keys.
- * FIXME: replace this at least for the public key parts
- * by merge_selfsigs.
- * It is still used in keyedit.c and
- * at 2 or 3 other places - check whether it is really needed.
- * It might be needed by the key edit and import stuff because
- * the keylock is changed.
- */
-void
-merge_keys_and_selfsig( KBNODE keyblock )
-{
- PKT_public_key *pk = NULL;
- PKT_secret_key *sk = NULL;
- PKT_signature *sig;
- KBNODE k;
- u32 kid[2] = { 0, 0 };
- u32 sigdate = 0;
-
- if (keyblock && keyblock->pkt->pkttype == PKT_PUBLIC_KEY ) {
- /* divert to our new function */
- merge_selfsigs (keyblock);
- return;
- }
- /* still need the old one because the new one can't handle secret keys */
-
- for(k=keyblock; k; k = k->next ) {
- if( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- pk = k->pkt->pkt.public_key; sk = NULL;
- if( pk->version < 4 )
- pk = NULL; /* not needed for old keys */
- else if( k->pkt->pkttype == PKT_PUBLIC_KEY )
- keyid_from_pk( pk, kid );
- else if( !pk->expiredate ) { /* and subkey */
- /* insert the expiration date here */
- /*FIXME!!! pk->expiredate = subkeys_expiretime( k, kid );*/
- }
- sigdate = 0;
- }
- else if( k->pkt->pkttype == PKT_SECRET_KEY
- || k->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- pk = NULL; sk = k->pkt->pkt.secret_key;
- if( sk->version < 4 )
- sk = NULL;
- else if( k->pkt->pkttype == PKT_SECRET_KEY )
- keyid_from_sk( sk, kid );
- sigdate = 0;
- }
- else if( (pk || sk ) && k->pkt->pkttype == PKT_SIGNATURE
- && (sig=k->pkt->pkt.signature)->sig_class >= 0x10
- && sig->sig_class <= 0x30 && sig->version > 3
- && !(sig->sig_class == 0x18 || sig->sig_class == 0x28)
- && sig->keyid[0] == kid[0] && sig->keyid[1] == kid[1] ) {
- /* okay this is a self-signature which can be used.
- * This is not used for subkey binding signature, becuase this
- * is done above.
- * FIXME: We should only use this if the signature is valid
- * but this is time consuming - we must provide another
- * way to handle this
- */
- const byte *p;
- u32 ed;
-
- p = parse_sig_subpkt( sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL );
- if( pk ) {
- ed = p? pk->timestamp + buffer_to_u32(p):0;
- if( sig->timestamp > sigdate ) {
- pk->expiredate = ed;
- sigdate = sig->timestamp;
- }
- }
- else {
- ed = p? sk->timestamp + buffer_to_u32(p):0;
- if( sig->timestamp > sigdate ) {
- sk->expiredate = ed;
- sigdate = sig->timestamp;
- }
- }
- }
-
- if(pk && (pk->expiredate==0 ||
- (pk->max_expiredate && pk->expiredate>pk->max_expiredate)))
- pk->expiredate=pk->max_expiredate;
-
- if(sk && (sk->expiredate==0 ||
- (sk->max_expiredate && sk->expiredate>sk->max_expiredate)))
- sk->expiredate=sk->max_expiredate;
- }
-}
-
-/*
- * Apply information from SIGNODE (which is the valid self-signature
- * associated with that UID) to the UIDNODE:
- * - wether the UID has been revoked
- * - assumed creation date of the UID
- * - temporary store the keyflags here
- * - temporary store the key expiration time here
- * - mark whether the primary user ID flag hat been set.
- * - store the preferences
- */
-static void
-fixup_uidnode ( KBNODE uidnode, KBNODE signode, u32 keycreated )
-{
- PKT_user_id *uid = uidnode->pkt->pkt.user_id;
- PKT_signature *sig = signode->pkt->pkt.signature;
- const byte *p, *sym, *hash, *zip;
- size_t n, nsym, nhash, nzip;
-
- uid->created = 0; /* not created == invalid */
- if ( IS_UID_REV ( sig ) ) {
- uid->is_revoked = 1;
- return; /* has been revoked */
- }
-
- uid->created = sig->timestamp; /* this one is okay */
- uid->selfsigversion = sig->version;
- /* If we got this far, it's not expired :) */
- uid->is_expired = 0;
- uid->expiredate = sig->expiredate;
-
- /* store the key flags in the helper variable for later processing */
- uid->help_key_usage = 0;
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_FLAGS, &n );
- if ( p && n ) {
- /* first octet of the keyflags */
- if ( (*p & 3) )
- uid->help_key_usage |= PUBKEY_USAGE_SIG;
- if ( (*p & 12) )
- uid->help_key_usage |= PUBKEY_USAGE_ENC;
- /* Note: we do not set the CERT flag here because it can be assumed
- * that thre is no real policy to set it. */
- }
-
- /* ditto or the key expiration */
- uid->help_key_expire = 0;
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL);
- if ( p ) {
- uid->help_key_expire = keycreated + buffer_to_u32(p);
- }
-
- /* Set the primary user ID flag - we will later wipe out some
- * of them to only have one in our keyblock */
- uid->is_primary = 0;
- p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PRIMARY_UID, NULL );
- if ( p && *p )
- uid->is_primary = 1;
- /* We could also query this from the unhashed area if it is not in
- * the hased area and then later try to decide which is the better
- * there should be no security problem with this.
- * For now we only look at the hashed one.
- */
-
- /* Now build the preferences list. These must come from the
- hashed section so nobody can modify the ciphers a key is
- willing to accept. */
- p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_SYM, &n );
- sym = p; nsym = p?n:0;
- p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_HASH, &n );
- hash = p; nhash = p?n:0;
- p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_COMPR, &n );
- zip = p; nzip = p?n:0;
- if (uid->prefs)
- m_free (uid->prefs);
- n = nsym + nhash + nzip;
- if (!n)
- uid->prefs = NULL;
- else {
- uid->prefs = m_alloc (sizeof (*uid->prefs) * (n+1));
- n = 0;
- for (; nsym; nsym--, n++) {
- uid->prefs[n].type = PREFTYPE_SYM;
- uid->prefs[n].value = *sym++;
- }
- for (; nhash; nhash--, n++) {
- uid->prefs[n].type = PREFTYPE_HASH;
- uid->prefs[n].value = *hash++;
- }
- for (; nzip; nzip--, n++) {
- uid->prefs[n].type = PREFTYPE_ZIP;
- uid->prefs[n].value = *zip++;
- }
- uid->prefs[n].type = PREFTYPE_NONE; /* end of list marker */
- uid->prefs[n].value = 0;
- }
-
- /* see whether we have the MDC feature */
- uid->mdc_feature = 0;
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_FEATURES, &n);
- if (p && n && (p[0] & 0x01))
- uid->mdc_feature = 1;
-
-}
-
-static void
-merge_selfsigs_main( KBNODE keyblock, int *r_revoked )
-{
- PKT_public_key *pk = NULL;
- KBNODE k;
- u32 kid[2];
- u32 sigdate = 0, uiddate=0, uiddate2;
- KBNODE signode, uidnode, uidnode2;
- u32 curtime = make_timestamp ();
- unsigned int key_usage = 0;
- u32 keytimestamp = 0;
- u32 key_expire = 0;
- int key_expire_seen = 0;
- byte sigversion = 0;
-
- *r_revoked = 0;
- if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY )
- BUG ();
- pk = keyblock->pkt->pkt.public_key;
- keytimestamp = pk->timestamp;
-
- keyid_from_pk( pk, kid );
- pk->main_keyid[0] = kid[0];
- pk->main_keyid[1] = kid[1];
-
- if ( pk->version < 4 ) {
- /* before v4 the key packet itself contains the expiration
- * date and there was no way to change it, so we start with
- * the one from the key packet */
- key_expire = pk->max_expiredate;
- key_expire_seen = 1;
- }
-
- /* first pass: find the latest direct key self-signature.
- * We assume that the newest one overrides all others
- */
-
- /* In case this key was already merged */
- m_free(pk->revkey);
- pk->revkey=NULL;
- pk->numrevkeys=0;
-
- signode = NULL;
- sigdate = 0; /* helper to find the latest signature */
- for(k=keyblock; k && k->pkt->pkttype != PKT_USER_ID; k = k->next ) {
- if ( k->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = k->pkt->pkt.signature;
- if ( sig->keyid[0] == kid[0] && sig->keyid[1]==kid[1] ) {
- if ( check_key_signature( keyblock, k, NULL ) )
- ; /* signature did not verify */
- else if ( IS_KEY_REV (sig) ){
- /* key has been revoked - there is no way to override
- * such a revocation, so we theoretically can stop now.
- * We should not cope with expiration times for revocations
- * here because we have to assume that an attacker can
- * generate all kinds of signatures. However due to the
- * fact that the key has been revoked it does not harm
- * either and by continuing we gather some more info on
- * that key.
- */
- *r_revoked = 1;
- }
- else if ( IS_KEY_SIG (sig) ) {
- /* Add any revocation keys onto the pk. This is
- particularly interesting since we normally only
- get data from the most recent 1F signature, but
- you need multiple 1F sigs to properly handle
- revocation keys (PGP does it this way, and a
- revocation key could be sensitive and hence in a
- different signature). */
- if(sig->revkey) {
- int i;
-
- pk->revkey=
- m_realloc(pk->revkey,sizeof(struct revocation_key)*
- (pk->numrevkeys+sig->numrevkeys));
-
- for(i=0;i<sig->numrevkeys;i++)
- memcpy(&pk->revkey[pk->numrevkeys++],
- sig->revkey[i],
- sizeof(struct revocation_key));
- }
-
- if( sig->timestamp >= sigdate ) {
- if(sig->flags.expired)
- ; /* signature has expired - ignore it */
- else {
- sigdate = sig->timestamp;
- signode = k;
- sigversion = sig->version;
-
- }
- }
- }
- }
- }
- }
-
- /* Remove dupes from the revocation keys */
-
- if(pk->revkey)
- {
- int i,j,x,changed=0;
-
- for(i=0;i<pk->numrevkeys;i++)
- {
- for(j=i+1;j<pk->numrevkeys;j++)
- {
- if(memcmp(&pk->revkey[i],&pk->revkey[j],
- sizeof(struct revocation_key))==0)
- {
- /* remove j */
-
- for(x=j;x<pk->numrevkeys-1;x++)
- pk->revkey[x]=pk->revkey[x+1];
-
- pk->numrevkeys--;
- j--;
- changed=1;
- }
- }
- }
-
- if(changed)
- pk->revkey=m_realloc(pk->revkey,
- pk->numrevkeys*sizeof(struct revocation_key));
- }
-
- if ( signode ) {
- /* some information from a direct key signature take precedence
- * over the same information given in UID sigs.
- */
- PKT_signature *sig = signode->pkt->pkt.signature;
- const byte *p;
- size_t n;
-
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_FLAGS, &n );
- if ( p && n ) {
- /* first octet of the keyflags */
- if ( (*p & 3) )
- key_usage |= PUBKEY_USAGE_SIG;
- if ( (*p & 12) )
- key_usage |= PUBKEY_USAGE_ENC;
- }
-
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL);
- if ( p ) {
- key_expire = keytimestamp + buffer_to_u32(p);
- key_expire_seen = 1;
- }
-
- /* mark that key as valid: one direct key signature should
- * render a key as valid */
- pk->is_valid = 1;
- }
-
- /* pass 1.5: look for key revocation signatures that were not made
- by the key (i.e. did a revocation key issue a revocation for
- us?). Only bother to do this if there is a revocation key in
- the first place. */
-
- if(pk->revkey)
- for(k=keyblock; k && k->pkt->pkttype != PKT_USER_ID; k = k->next )
- {
- if ( k->pkt->pkttype == PKT_SIGNATURE )
- {
- PKT_signature *sig = k->pkt->pkt.signature;
-
- if(IS_KEY_REV(sig) &&
- (sig->keyid[0]!=kid[0] || sig->keyid[1]!=kid[1]))
- {
- /* Failure here means the sig did not verify, is was
- not issued by a revocation key, or a revocation
- key loop was broken. */
-
- if(check_revocation_keys(pk,sig)==0)
- *r_revoked=1;
-
- /* In the future handle subkey and cert revocations?
- PGP doesn't, but it's in 2440. */
- }
- }
- }
-
- /* second pass: look at the self-signature of all user IDs */
- signode = uidnode = NULL;
- sigdate = 0; /* helper to find the latest signature in one user ID */
- uiddate = 0; /* and over of all user IDs */
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) {
- if ( k->pkt->pkttype == PKT_USER_ID ) {
- if ( uidnode && signode )
- fixup_uidnode ( uidnode, signode, keytimestamp );
- uidnode = k;
- signode = NULL;
- if ( sigdate > uiddate )
- uiddate = sigdate;
- sigdate = 0;
- }
- else if ( k->pkt->pkttype == PKT_SIGNATURE && uidnode ) {
- PKT_signature *sig = k->pkt->pkt.signature;
- if ( sig->keyid[0] == kid[0] && sig->keyid[1]==kid[1] ) {
- if ( check_key_signature( keyblock, k, NULL ) )
- ; /* signature did not verify */
- else if ( (IS_UID_SIG (sig) || IS_UID_REV (sig))
- && sig->timestamp >= sigdate ) {
- /* Note: we allow to invalidate cert revocations
- * by a newer signature. An attacker can't use this
- * because a key should be revoced with a key revocation.
- * The reason why we have to allow for that is that at
- * one time an email address may become invalid but later
- * the same email address may become valid again (hired,
- * fired, hired again).
- */
- if(sig->flags.expired) {
- /* Expired uids don't get to be primary unless
- they are the only uid there is. */
- uidnode->pkt->pkt.user_id->is_primary=0;
- uidnode->pkt->pkt.user_id->is_expired=1;
- uidnode->pkt->pkt.user_id->expiredate=sig->expiredate;
- }
- else {
- sigdate = sig->timestamp;
- signode = k;
- if( sig->version > sigversion )
- sigversion = sig->version;
- }
- }
- }
- }
- }
- if ( uidnode && signode ) {
- fixup_uidnode ( uidnode, signode, keytimestamp );
- pk->is_valid = 1;
- }
-
- /* If the key isn't valid yet, and we have
- --allow-non-selfsigned-uid set, then force it valid. */
- if(!pk->is_valid && opt.allow_non_selfsigned_uid)
- {
- if(opt.verbose)
- log_info(_("Invalid key %08lX made valid by "
- "--allow-non-selfsigned-uid\n"),
- (ulong)keyid_from_pk(pk,NULL));
-
- pk->is_valid = 1;
- }
-
- /* The key STILL isn't valid, so try and find an ultimately
- trusted signature. */
- if(!pk->is_valid)
- {
- uidnode=NULL;
-
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k=k->next)
- {
- if ( k->pkt->pkttype == PKT_USER_ID )
- uidnode = k;
- else if ( k->pkt->pkttype == PKT_SIGNATURE && uidnode )
- {
- PKT_signature *sig = k->pkt->pkt.signature;
-
- if(sig->keyid[0] != kid[0] || sig->keyid[1]!=kid[1])
- {
- PKT_public_key *ultimate_pk;
-
- ultimate_pk=m_alloc_clear(sizeof(*ultimate_pk));
-
- /* We don't want to use the full get_pubkey to
- avoid infinite recursion in certain cases.
- There is no reason to check that an ultimately
- trusted key is still valid - if it has been
- revoked or the user should also renmove the
- ultimate trust flag. */
- if(get_pubkey_direct(ultimate_pk,sig->keyid)==0 &&
- check_key_signature(keyblock,k,NULL)==0 &&
- get_ownertrust(ultimate_pk)==TRUST_ULTIMATE)
- {
- free_public_key(ultimate_pk);
- pk->is_valid=1;
- break;
- }
-
- free_public_key(ultimate_pk);
- }
- }
- }
- }
-
- /* Record the highest selfsigversion so we know if this is a v3
- key through and through, or a v3 key with a v4 selfsig, which
- means we can trust the preferences (if any). */
- pk->selfsigversion=sigversion;
-
- /* Now that we had a look at all user IDs we can now get some information
- * from those user IDs.
- */
-
- if ( !key_usage ) {
- /* find the latest user ID with key flags set */
- uiddate = 0; /* helper to find the latest user ID */
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY;
- k = k->next ) {
- if ( k->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = k->pkt->pkt.user_id;
- if ( uid->help_key_usage && uid->created > uiddate ) {
- key_usage = uid->help_key_usage;
- uiddate = uid->created;
- }
- }
- }
- }
- if ( !key_usage ) { /* no key flags at all: get it from the algo */
- key_usage = openpgp_pk_algo_usage ( pk->pubkey_algo );
- }
- else { /* check that the usage matches the usage as given by the algo */
- int x = openpgp_pk_algo_usage ( pk->pubkey_algo );
- if ( x ) /* mask it down to the actual allowed usage */
- key_usage &= x;
- }
- pk->pubkey_usage = key_usage;
-
- if ( !key_expire_seen ) {
- /* find the latest valid user ID with a key expiration set
- * Note, that this may be a different one from the above because
- * some user IDs may have no expiration date set */
- uiddate = 0;
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY;
- k = k->next ) {
- if ( k->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = k->pkt->pkt.user_id;
- if ( uid->help_key_expire && uid->created > uiddate ) {
- key_expire = uid->help_key_expire;
- uiddate = uid->created;
- }
- }
- }
- }
-
- /* Currently only v3 keys have a maximum expiration date, but I'll
- bet v5 keys get this feature again. */
- if(key_expire==0 || (pk->max_expiredate && key_expire>pk->max_expiredate))
- key_expire=pk->max_expiredate;
-
- pk->has_expired = key_expire >= curtime? 0 : key_expire;
- pk->expiredate = key_expire;
-
- /* Fixme: we should see how to get rid of the expiretime fields but
- * this needs changes at other places too. */
-
- /* and now find the real primary user ID and delete all others */
- uiddate = uiddate2 = 0;
- uidnode = uidnode2 = NULL;
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) {
- if ( k->pkt->pkttype == PKT_USER_ID &&
- !k->pkt->pkt.user_id->attrib_data) {
- PKT_user_id *uid = k->pkt->pkt.user_id;
- if ( uid->is_primary && uid->created > uiddate ) {
- uiddate = uid->created;
- uidnode = k;
- }
- if ( !uid->is_primary && uid->created > uiddate2 ) {
- uiddate2 = uid->created;
- uidnode2 = k;
- }
- }
- }
- if ( uidnode ) {
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY;
- k = k->next ) {
- if ( k->pkt->pkttype == PKT_USER_ID &&
- !k->pkt->pkt.user_id->attrib_data) {
- PKT_user_id *uid = k->pkt->pkt.user_id;
- if ( k != uidnode )
- uid->is_primary = 0;
- }
- }
- }
- else if( uidnode2 ) {
- /* none is flagged primary - use the latest user ID we have */
- uidnode2->pkt->pkt.user_id->is_primary = 1;
- }
- else
- {
- /* None of our uids were self-signed, so pick the first one to
- be the primary. This is the best we can do here since
- there are no self sigs to date the uids. */
-
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY;
- k = k->next )
- {
- if(k->pkt->pkttype==PKT_USER_ID &&
- !k->pkt->pkt.user_id->attrib_data)
- {
- k->pkt->pkt.user_id->is_primary=1;
- break;
- }
- }
- }
-}
-
-
-static void
-merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode )
-{
- PKT_public_key *mainpk = NULL, *subpk = NULL;
- PKT_signature *sig;
- KBNODE k;
- u32 mainkid[2];
- u32 sigdate = 0;
- KBNODE signode;
- u32 curtime = make_timestamp ();
- unsigned int key_usage = 0;
- u32 keytimestamp = 0;
- u32 key_expire = 0;
- const byte *p;
- size_t n;
-
- if ( subnode->pkt->pkttype != PKT_PUBLIC_SUBKEY )
- BUG ();
- mainpk = keyblock->pkt->pkt.public_key;
- if ( mainpk->version < 4 )
- return; /* (actually this should never happen) */
- keyid_from_pk( mainpk, mainkid );
- subpk = subnode->pkt->pkt.public_key;
- keytimestamp = subpk->timestamp;
-
- subpk->is_valid = 0;
- subpk->main_keyid[0] = mainpk->main_keyid[0];
- subpk->main_keyid[1] = mainpk->main_keyid[1];
-
- /* find the latest key binding self-signature. */
- signode = NULL;
- sigdate = 0; /* helper to find the latest signature */
- for(k=subnode->next; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY;
- k = k->next ) {
- if ( k->pkt->pkttype == PKT_SIGNATURE ) {
- sig = k->pkt->pkt.signature;
- if ( sig->keyid[0] == mainkid[0] && sig->keyid[1]==mainkid[1] ) {
- if ( check_key_signature( keyblock, k, NULL ) )
- ; /* signature did not verify */
- else if ( IS_SUBKEY_REV (sig) ) {
- /* Note that this means that the date on a
- revocation sig does not matter - even if the
- binding sig is dated after the revocation sig,
- the subkey is still marked as revoked. This
- seems ok, as it is just as easy to make new
- subkeys rather than re-sign old ones as the
- problem is in the distribution. Plus, PGP (7)
- does this the same way. */
- subpk->is_revoked = 1;
- /* although we could stop now, we continue to
- * figure out other information like the old expiration
- * time */
- }
- else if ( IS_SUBKEY_SIG (sig) && sig->timestamp >= sigdate ) {
- if(sig->flags.expired)
- ; /* signature has expired - ignore it */
- else {
- sigdate = sig->timestamp;
- signode = k;
- }
- }
- }
- }
- }
-
- if ( !signode ) {
- return; /* no valid key binding */
- }
-
- subpk->is_valid = 1;
- sig = signode->pkt->pkt.signature;
-
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_FLAGS, &n );
- if ( p && n ) {
- /* first octet of the keyflags */
- if ( (*p & 3) )
- key_usage |= PUBKEY_USAGE_SIG;
- if ( (*p & 12) )
- key_usage |= PUBKEY_USAGE_ENC;
- }
- if ( !key_usage ) { /* no key flags at all: get it from the algo */
- key_usage = openpgp_pk_algo_usage ( subpk->pubkey_algo );
- }
- else { /* check that the usage matches the usage as given by the algo */
- int x = openpgp_pk_algo_usage ( subpk->pubkey_algo );
- if ( x ) /* mask it down to the actual allowed usage */
- key_usage &= x;
- }
- subpk->pubkey_usage = key_usage;
-
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL);
- if ( p )
- key_expire = keytimestamp + buffer_to_u32(p);
- else
- key_expire = 0;
- subpk->has_expired = key_expire >= curtime? 0 : key_expire;
- subpk->expiredate = key_expire;
-}
-
-
-
-/*
- * Merge information from the self-signatures with the key, so that
- * we can later use them more easy.
- * The function works by first applying the self signatures to the
- * primary key and the to each subkey.
- * Here are the rules we use to decide which inormation from which
- * self-signature is used:
- * We check all self signatures or validity and ignore all invalid signatures.
- * All signatures are then ordered by their creation date ....
- * For the primary key:
- * FIXME the docs
- */
-static void
-merge_selfsigs( KBNODE keyblock )
-{
- KBNODE k;
- int revoked;
- PKT_public_key *main_pk;
- prefitem_t *prefs;
- int mdc_feature;
-
- if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) {
- if (keyblock->pkt->pkttype == PKT_SECRET_KEY ) {
- log_error ("expected public key but found secret key "
- "- must stop\n");
- /* we better exit here becuase a public key is expected at
- other places too. FIXME: Figure this out earlier and
- don't get to here at all */
- g10_exit (1);
- }
- BUG ();
- }
-
- merge_selfsigs_main ( keyblock, &revoked );
- main_pk = keyblock->pkt->pkt.public_key;
- if ( revoked ) {
- /* if the primary key has been revoked we better set the revoke
- * flag on that key and all subkeys */
- for(k=keyblock; k; k = k->next ) {
- if ( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- PKT_public_key *pk = k->pkt->pkt.public_key;
- pk->is_revoked = 1;
- pk->main_keyid[0] = main_pk->main_keyid[0];
- pk->main_keyid[1] = main_pk->main_keyid[1];
- }
- }
- return;
- }
-
- /* now merge in the data from each of the subkeys */
- for(k=keyblock; k; k = k->next ) {
- if ( k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- merge_selfsigs_subkey ( keyblock, k );
- }
- }
-
- /* If the main key is not valid, then the subkeys aren't either,
- even if they have binding sigs. */
- if(!main_pk->is_valid)
- for(k=keyblock; k; k=k->next)
- if(k->pkt->pkttype==PKT_PUBLIC_SUBKEY)
- k->pkt->pkt.public_key->is_valid=0;
-
- /* set the preference list of all keys to those of the primary real
- * user ID. Note: we use these preferences when we don't know by
- * which user ID the key has been selected.
- * fixme: we should keep atoms of commonly used preferences or
- * use reference counting to optimize the preference lists storage.
- * FIXME: it might be better to use the intersection of
- * all preferences.
- * Do a similar thing for the MDC feature flag.
- */
- prefs = NULL;
- mdc_feature = 0;
- for (k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next) {
- if (k->pkt->pkttype == PKT_USER_ID
- && !k->pkt->pkt.user_id->attrib_data
- && k->pkt->pkt.user_id->is_primary) {
- prefs = k->pkt->pkt.user_id->prefs;
- mdc_feature = k->pkt->pkt.user_id->mdc_feature;
- break;
- }
- }
- for(k=keyblock; k; k = k->next ) {
- if ( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- PKT_public_key *pk = k->pkt->pkt.public_key;
- if (pk->prefs)
- m_free (pk->prefs);
- pk->prefs = copy_prefs (prefs);
- pk->mdc_feature = mdc_feature;
- }
- }
-}
-
-
-/*
- * Merge the secret keys from secblock into the pubblock thereby
- * replacing the public (sub)keys with their secret counterparts Hmmm:
- * It might be better to get away from the concept of entire secret
- * keys at all and have a way to store just the real secret parts
- * from the key.
- */
-static void
-merge_public_with_secret ( KBNODE pubblock, KBNODE secblock )
-{
- KBNODE pub;
-
- assert ( pubblock->pkt->pkttype == PKT_PUBLIC_KEY );
- assert ( secblock->pkt->pkttype == PKT_SECRET_KEY );
-
- for (pub=pubblock; pub; pub = pub->next ) {
- if ( pub->pkt->pkttype == PKT_PUBLIC_KEY ) {
- PKT_public_key *pk = pub->pkt->pkt.public_key;
- PKT_secret_key *sk = secblock->pkt->pkt.secret_key;
- assert ( pub == pubblock ); /* only in the first node */
- /* there is nothing to compare in this case, so just replace
- * some information */
- copy_public_parts_to_secret_key ( pk, sk );
- free_public_key ( pk );
- pub->pkt->pkttype = PKT_SECRET_KEY;
- pub->pkt->pkt.secret_key = copy_secret_key (NULL, sk);
- }
- else if ( pub->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- KBNODE sec;
- PKT_public_key *pk = pub->pkt->pkt.public_key;
-
- /* this is more complicated: it may happen that the sequence
- * of the subkeys dosn't match, so we have to find the
- * appropriate secret key */
- for (sec=secblock->next; sec; sec = sec->next ) {
- if ( sec->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *sk = sec->pkt->pkt.secret_key;
- if ( !cmp_public_secret_key ( pk, sk ) ) {
- copy_public_parts_to_secret_key ( pk, sk );
- free_public_key ( pk );
- pub->pkt->pkttype = PKT_SECRET_SUBKEY;
- pub->pkt->pkt.secret_key = copy_secret_key (NULL, sk);
- break;
- }
- }
- }
- if ( !sec )
- BUG(); /* already checked in premerge */
- }
- }
-}
-
-/* This function checks that for every public subkey a corresponding
- * secret subkey is available and deletes the public subkey otherwise.
- * We need this function because we can't delete it later when we
- * actually merge the secret parts into the pubring.
- * The function also plays some games with the node flags.
- */
-static void
-premerge_public_with_secret ( KBNODE pubblock, KBNODE secblock )
-{
- KBNODE last, pub;
-
- assert ( pubblock->pkt->pkttype == PKT_PUBLIC_KEY );
- assert ( secblock->pkt->pkttype == PKT_SECRET_KEY );
-
- for (pub=pubblock,last=NULL; pub; last = pub, pub = pub->next ) {
- pub->flag &= ~3; /* reset bits 0 and 1 */
- if ( pub->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- KBNODE sec;
- PKT_public_key *pk = pub->pkt->pkt.public_key;
-
- for (sec=secblock->next; sec; sec = sec->next ) {
- if ( sec->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *sk = sec->pkt->pkt.secret_key;
- if ( !cmp_public_secret_key ( pk, sk ) ) {
- if ( sk->protect.s2k.mode == 1001 ) {
- /* The secret parts are not available so
- we can't use that key for signing etc.
- Fix the pubkey usage */
- pk->pubkey_usage &= ~PUBKEY_USAGE_SIG;
- }
- /* transfer flag bits 0 and 1 to the pubblock */
- pub->flag |= (sec->flag &3);
- break;
- }
- }
- }
- if ( !sec ) {
- KBNODE next, ll;
-
- log_info ( "no secret subkey "
- "for public subkey %08lX - ignoring\n",
- (ulong)keyid_from_pk (pk,NULL) );
- /* we have to remove the subkey in this case */
- assert ( last );
- /* find the next subkey */
- for (next=pub->next,ll=pub;
- next && pub->pkt->pkttype != PKT_PUBLIC_SUBKEY;
- ll = next, next = next->next )
- ;
- /* make new link */
- last->next = next;
- /* release this public subkey with all sigs */
- ll->next = NULL;
- release_kbnode( pub );
- /* let the loop continue */
- pub = last;
- }
- }
- }
- /* We need to copy the found bits (0 and 1) from the secret key to
- the public key. This has already been done for the subkeys but
- got lost on the primary key - fix it here *. */
- pubblock->flag |= (secblock->flag & 3);
-}
-
-
-
-
-/* See see whether the key fits
- * our requirements and in case we do not
- * request the primary key, we should select
- * a suitable subkey.
- * FIXME: Check against PGP 7 whether we still need a kludge
- * to favor type 16 keys over type 20 keys when type 20
- * has not been explitely requested.
- * Returns: True when a suitable key has been found.
- *
- * We have to distinguish four cases: FIXME!
- * 1. No usage and no primary key requested
- * Examples for this case are that we have a keyID to be used
- * for decrytion or verification.
- * 2. No usage but primary key requested
- * This is the case for all functions which work on an
- * entire keyblock, e.g. for editing or listing
- * 3. Usage and primary key requested
- * FXME
- * 4. Usage but no primary key requested
- * FIXME
- * FIXME: Tell what is going to happen here and something about the rationale
- * Note: We don't use this function if no specific usage is requested;
- * This way the getkey functions can be used for plain key listings.
- *
- * CTX ist the keyblock we are investigating, if FOUNDK is not NULL this
- * is the key we actually found by looking at the keyid or a fingerprint and
- * may eitehr point to the primary or one of the subkeys.
- */
-
-static int
-finish_lookup (GETKEY_CTX ctx)
-{
- KBNODE keyblock = ctx->keyblock;
- KBNODE k;
- KBNODE foundk = NULL;
- PKT_user_id *foundu = NULL;
- #define USAGE_MASK (PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC)
- unsigned int req_usage = ( ctx->req_usage & USAGE_MASK );
- /* Request the primary if we're certifying another key, and also
- if signing data while --pgp6 or --pgp7 is on since pgp 6 and 7
- do not understand signatures made by a signing subkey. */
- int req_prim = (ctx->req_usage & PUBKEY_USAGE_CERT) ||
- ((opt.pgp6 || opt.pgp7) && (ctx->req_usage & PUBKEY_USAGE_SIG));
- u32 latest_date;
- KBNODE latest_key;
- u32 curtime = make_timestamp ();
-
- assert( keyblock->pkt->pkttype == PKT_PUBLIC_KEY );
-
- ctx->found_key = NULL;
-
- if (ctx->exact) {
- for (k=keyblock; k; k = k->next) {
- if ( (k->flag & 1) ) {
- assert ( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY );
- foundk = k;
- break;
- }
- }
- }
-
- for (k=keyblock; k; k = k->next) {
- if ( (k->flag & 2) ) {
- assert (k->pkt->pkttype == PKT_USER_ID);
- foundu = k->pkt->pkt.user_id;
- break;
- }
- }
-
- if ( DBG_CACHE )
- log_debug( "finish_lookup: checking key %08lX (%s)(req_usage=%x)\n",
- (ulong)keyid_from_pk( keyblock->pkt->pkt.public_key, NULL),
- foundk? "one":"all", req_usage);
-
- if (!req_usage) {
- latest_key = foundk? foundk:keyblock;
- goto found;
- }
-
- if (!req_usage) {
- PKT_public_key *pk = foundk->pkt->pkt.public_key;
- if (pk->user_id)
- free_user_id (pk->user_id);
- pk->user_id = scopy_user_id (foundu);
- ctx->found_key = foundk;
- cache_user_id( keyblock );
- return 1; /* found */
- }
-
- latest_date = 0;
- latest_key = NULL;
- /* do not look at subkeys if a certification key is requested */
- if ((!foundk || foundk->pkt->pkttype == PKT_PUBLIC_SUBKEY) && !req_prim) {
- KBNODE nextk;
- /* either start a loop or check just this one subkey */
- for (k=foundk?foundk:keyblock; k; k = nextk ) {
- PKT_public_key *pk;
- nextk = k->next;
- if ( k->pkt->pkttype != PKT_PUBLIC_SUBKEY )
- continue;
- if ( foundk )
- nextk = NULL; /* what a hack */
- pk = k->pkt->pkt.public_key;
- if (DBG_CACHE)
- log_debug( "\tchecking subkey %08lX\n",
- (ulong)keyid_from_pk( pk, NULL));
- if ( !pk->is_valid ) {
- if (DBG_CACHE)
- log_debug( "\tsubkey not valid\n");
- continue;
- }
- if ( pk->is_revoked ) {
- if (DBG_CACHE)
- log_debug( "\tsubkey has been revoked\n");
- continue;
- }
- if ( pk->has_expired ) {
- if (DBG_CACHE)
- log_debug( "\tsubkey has expired\n");
- continue;
- }
- if ( pk->timestamp > curtime && !opt.ignore_valid_from ) {
- if (DBG_CACHE)
- log_debug( "\tsubkey not yet valid\n");
- continue;
- }
-
- if ( !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) {
- if (DBG_CACHE)
- log_debug( "\tusage does not match: want=%x have=%x\n",
- req_usage, pk->pubkey_usage );
- continue;
- }
-
- if (DBG_CACHE)
- log_debug( "\tsubkey looks fine\n");
- if ( pk->timestamp > latest_date ) {
- latest_date = pk->timestamp;
- latest_key = k;
- }
- }
- }
-
- /* Okay now try the primary key unless we want an exact
- * key ID match on a subkey */
- if ((!latest_key && !(ctx->exact && foundk != keyblock)) || req_prim) {
- PKT_public_key *pk;
- if (DBG_CACHE && !foundk && !req_prim )
- log_debug( "\tno suitable subkeys found - trying primary\n");
- pk = keyblock->pkt->pkt.public_key;
- if ( !pk->is_valid ) {
- if (DBG_CACHE)
- log_debug( "\tprimary key not valid\n");
- }
- else if ( pk->is_revoked ) {
- if (DBG_CACHE)
- log_debug( "\tprimary key has been revoked\n");
- }
- else if ( pk->has_expired ) {
- if (DBG_CACHE)
- log_debug( "\tprimary key has expired\n");
- }
- else if ( !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) {
- if (DBG_CACHE)
- log_debug( "\tprimary key usage does not match: "
- "want=%x have=%x\n",
- req_usage, pk->pubkey_usage );
- }
- else { /* okay */
- if (DBG_CACHE)
- log_debug( "\tprimary key may be used\n");
- latest_key = keyblock;
- latest_date = pk->timestamp;
- }
- }
-
- if ( !latest_key ) {
- if (DBG_CACHE)
- log_debug("\tno suitable key found - giving up\n");
- return 0;
- }
-
- found:
- if (DBG_CACHE)
- log_debug( "\tusing key %08lX\n",
- (ulong)keyid_from_pk( latest_key->pkt->pkt.public_key, NULL) );
-
- if (latest_key) {
- PKT_public_key *pk = latest_key->pkt->pkt.public_key;
- if (pk->user_id)
- free_user_id (pk->user_id);
- pk->user_id = scopy_user_id (foundu);
- }
-
- ctx->found_key = latest_key;
-
- if (latest_key != keyblock && opt.verbose) {
- log_info(_("using secondary key %08lX "
- "instead of primary key %08lX\n"),
- (ulong)keyid_from_pk( latest_key->pkt->pkt.public_key, NULL),
- (ulong)keyid_from_pk( keyblock->pkt->pkt.public_key, NULL) );
- }
-
- cache_user_id( keyblock );
-
- return 1; /* found */
-}
-
-
-static int
-lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode )
-{
- int rc;
- KBNODE secblock = NULL; /* helper */
- int no_suitable_key = 0;
-
- rc = 0;
- while (!(rc = keydb_search (ctx->kr_handle, ctx->items, ctx->nitems))) {
- /* If we are searching for the first key we have to make sure
- that the next interation does not no an implicit reset.
- This can be triggered by an empty key ring. */
- if (ctx->nitems && ctx->items->mode == KEYDB_SEARCH_MODE_FIRST)
- ctx->items->mode = KEYDB_SEARCH_MODE_NEXT;
-
- rc = keydb_get_keyblock (ctx->kr_handle, &ctx->keyblock);
- if (rc) {
- log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc));
- rc = 0;
- goto skip;
- }
-
- if ( secmode ) {
- /* find the correspondig public key and use this
- * this one for the selection process */
- u32 aki[2];
- KBNODE k = ctx->keyblock;
-
- if (k->pkt->pkttype != PKT_SECRET_KEY)
- BUG();
-
- keyid_from_sk (k->pkt->pkt.secret_key, aki);
- k = get_pubkeyblock (aki);
- if( !k ) {
- if (!opt.quiet)
- log_info(_("key %08lX: secret key without public key "
- "- skipped\n"), (ulong)aki[1] );
- goto skip;
- }
- secblock = ctx->keyblock;
- ctx->keyblock = k;
-
- premerge_public_with_secret ( ctx->keyblock, secblock );
- }
-
- /* warning: node flag bits 0 and 1 should be preserved by
- * merge_selfsigs. For secret keys, premerge did tranfer the
- * keys to the keyblock */
- merge_selfsigs ( ctx->keyblock );
- if ( finish_lookup (ctx) ) {
- no_suitable_key = 0;
- if ( secmode ) {
- merge_public_with_secret ( ctx->keyblock,
- secblock);
- release_kbnode (secblock);
- secblock = NULL;
- }
- goto found;
- }
- else
- no_suitable_key = 1;
-
- skip:
- /* release resources and continue search */
- if ( secmode ) {
- release_kbnode( secblock );
- secblock = NULL;
- }
- release_kbnode( ctx->keyblock );
- ctx->keyblock = NULL;
- }
-
- found:
- if( rc && rc != -1 )
- log_error("keydb_search failed: %s\n", g10_errstr(rc));
-
- if( !rc ) {
- *ret_keyblock = ctx->keyblock; /* return the keyblock */
- ctx->keyblock = NULL;
- }
- else if (rc == -1 && no_suitable_key)
- rc = secmode ? G10ERR_UNU_SECKEY : G10ERR_UNU_PUBKEY;
- else if( rc == -1 )
- rc = secmode ? G10ERR_NO_SECKEY : G10ERR_NO_PUBKEY;
-
- if ( secmode ) {
- release_kbnode( secblock );
- secblock = NULL;
- }
- release_kbnode( ctx->keyblock );
- ctx->keyblock = NULL;
-
- ctx->last_rc = rc;
- return rc;
-}
-
-
-
-
-/****************
- * FIXME: Replace by the generic function
- * It does not work as it is right now - it is used at
- * 2 places: a) to get the key for an anonyous recipient
- * b) to get the ultimately trusted keys.
- * The a) usage might have some problems.
- *
- * Enumerate all primary secret keys. Caller must use these procedure:
- * 1) create a void pointer and initialize it to NULL
- * 2) pass this void pointer by reference to this function
- * and provide space for the secret key (pass a buffer for sk)
- * 3) call this function as long as it does not return -1
- * to indicate EOF.
- * 4) Always call this function a last time with SK set to NULL,
- * so that can free it's context.
- */
-int
-enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys )
-{
- int rc=0;
- struct {
- int eof;
- int first;
- KEYDB_HANDLE hd;
- KBNODE keyblock;
- KBNODE node;
- } *c = *context;
-
-
- if( !c ) { /* make a new context */
- c = m_alloc_clear( sizeof *c );
- *context = c;
- c->hd = keydb_new (1);
- c->first = 1;
- c->keyblock = NULL;
- c->node = NULL;
- }
-
- if( !sk ) { /* free the context */
- keydb_release (c->hd);
- release_kbnode (c->keyblock);
- m_free( c );
- *context = NULL;
- return 0;
- }
-
- if( c->eof )
- return -1;
-
- do {
- /* get the next secret key from the current keyblock */
- for (; c->node; c->node = c->node->next) {
- if (c->node->pkt->pkttype == PKT_SECRET_KEY
- || (with_subkeys
- && c->node->pkt->pkttype == PKT_SECRET_SUBKEY) ) {
- copy_secret_key (sk, c->node->pkt->pkt.secret_key );
- c->node = c->node->next;
- return 0; /* found */
- }
- }
- release_kbnode (c->keyblock);
- c->keyblock = c->node = NULL;
-
- rc = c->first? keydb_search_first (c->hd) : keydb_search_next (c->hd);
- c->first = 0;
- if (rc) {
- keydb_release (c->hd); c->hd = NULL;
- c->eof = 1;
- return -1; /* eof */
- }
-
- rc = keydb_get_keyblock (c->hd, &c->keyblock);
- c->node = c->keyblock;
- } while (!rc);
-
- return rc; /* error */
-}
-
-
-
-/*********************************************
- *********** user ID printing helpers *******
- *********************************************/
-
-/****************
- * Return a string with a printable representation of the user_id.
- * this string must be freed by m_free.
- */
-char*
-get_user_id_string( u32 *keyid )
-{
- user_id_db_t r;
- char *p;
- int pass=0;
- /* try it two times; second pass reads from key resources */
- do {
- for(r=user_id_db; r; r = r->next ) {
- keyid_list_t a;
- for (a=r->keyids; a; a= a->next ) {
- if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) {
- p = m_alloc( r->len + 10 );
- sprintf(p, "%08lX %.*s",
- (ulong)keyid[1], r->len, r->name );
- return p;
- }
- }
- }
- } while( ++pass < 2 && !get_pubkey( NULL, keyid ) );
- p = m_alloc( 15 );
- sprintf(p, "%08lX [?]", (ulong)keyid[1] );
- return p;
-}
-
-
-char*
-get_user_id_string_printable ( u32 *keyid )
-{
- char *p = get_user_id_string( keyid );
- char *p2 = utf8_to_native( p, strlen(p), 0 );
- m_free(p);
- p = make_printable_string (p2, strlen (p2), 0);
- m_free (p2);
- return p;
-}
-
-
-char*
-get_long_user_id_string( u32 *keyid )
-{
- user_id_db_t r;
- char *p;
- int pass=0;
- /* try it two times; second pass reads from key resources */
- do {
- for(r=user_id_db; r; r = r->next ) {
- keyid_list_t a;
- for (a=r->keyids; a; a= a->next ) {
- if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) {
- p = m_alloc( r->len + 20 );
- sprintf(p, "%08lX%08lX %.*s",
- (ulong)keyid[0], (ulong)keyid[1],
- r->len, r->name );
- return p;
- }
- }
- }
- } while( ++pass < 2 && !get_pubkey( NULL, keyid ) );
- p = m_alloc( 25 );
- sprintf(p, "%08lX%08lX [?]", (ulong)keyid[0], (ulong)keyid[1] );
- return p;
-}
-
-char*
-get_user_id( u32 *keyid, size_t *rn )
-{
- user_id_db_t r;
- char *p;
- int pass=0;
-
- /* try it two times; second pass reads from key resources */
- do {
- for(r=user_id_db; r; r = r->next ) {
- keyid_list_t a;
- for (a=r->keyids; a; a= a->next ) {
- if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) {
- p = m_alloc( r->len );
- memcpy(p, r->name, r->len );
- *rn = r->len;
- return p;
- }
- }
- }
- } while( ++pass < 2 && !get_pubkey( NULL, keyid ) );
- p = m_strdup( _("[User id not found]") );
- *rn = strlen(p);
- return p;
-}
-
-char*
-get_user_id_printable( u32 *keyid )
-{
- size_t rn;
- char *p = get_user_id( keyid, &rn );
- char *p2 = utf8_to_native( p, rn, 0 );
- m_free(p);
- p = make_printable_string (p2, strlen (p2), 0);
- m_free (p2);
- return p;
-}
-
-KEYDB_HANDLE
-get_ctx_handle(GETKEY_CTX ctx)
-{
- return ctx->kr_handle;
-}
diff --git a/g10/gpgv.c b/g10/gpgv.c
deleted file mode 100644
index dcb2a9d94..000000000
--- a/g10/gpgv.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/* gpgv.c - The GnuPG signature verify utility
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#ifdef HAVE_DOSISH_SYSTEM
- #include <fcntl.h> /* for setmode() */
-#endif
-
-#define INCLUDED_BY_MAIN_MODULE 1
-#include "packet.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "options.h"
-#include "keydb.h"
-#include "trustdb.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "filter.h"
-#include "ttyio.h"
-#include "i18n.h"
-#include "status.h"
-#include "g10defs.h"
-
-
-enum cmd_and_opt_values { aNull = 0,
- oQuiet = 'q',
- oVerbose = 'v',
- oBatch = 500,
- oKeyring,
- oIgnoreTimeConflict,
- oStatusFD,
- oLoggerFD,
- oHomedir,
-aTest };
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 301, NULL, 0, N_("@\nOptions:\n ") },
-
- { oVerbose, "verbose", 0, N_("verbose") },
- { oQuiet, "quiet", 0, N_("be somewhat more quiet") },
- { oKeyring, "keyring" ,2, N_("take the keys from this keyring")},
- { oIgnoreTimeConflict, "ignore-time-conflict", 0,
- N_("make timestamp conflicts only a warning") },
- { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") },
- { oLoggerFD, "logger-fd",1, "@" },
- { oHomedir, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */
-
-{0} };
-
-
-
-int g10_errors_seen = 0;
-
-#ifdef __riscos__
-RISCOS_GLOBAL_STATICS("GnuPG (gpgv) Heap")
-#endif /* __riscos__ */
-
-const char *
-strusage( int level )
-{
- const char *p;
- switch( level ) {
- case 11: p = "gpgv (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p =
- _("Please report bugs to <gnupg-bugs@gnu.org>.\n");
- break;
- case 1:
- case 40: p =
- _("Usage: gpgv [options] [files] (-h for help)");
- break;
- case 41: p =
- _("Syntax: gpg [options] [files]\n"
- "Check signatures against known trusted keys\n");
- break;
-
- default: p = default_strusage(level);
- }
- return p;
-}
-
-
-
-
-static void
-i18n_init(void)
-{
- #ifdef USE_SIMPLE_GETTEXT
- set_gettext_file( PACKAGE );
- #else
- #ifdef ENABLE_NLS
- #ifdef HAVE_LC_MESSAGES
- setlocale( LC_TIME, "" );
- setlocale( LC_MESSAGES, "" );
- #else
- setlocale( LC_ALL, "" );
- #endif
- bindtextdomain( PACKAGE, G10_LOCALEDIR );
- textdomain( PACKAGE );
- #endif
- #endif
-}
-
-
-int
-main( int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
- int rc=0;
- STRLIST sl;
- STRLIST nrings=NULL;
- unsigned configlineno;
-
- #ifdef __riscos__
- riscos_global_defaults();
- #endif /* __riscos__ */
-
- log_set_name("gpgv");
- init_signals();
- i18n_init();
- opt.command_fd = -1; /* no command fd */
- opt.pgp2_workarounds = 1;
- opt.keyserver_options.auto_key_retrieve = 1;
- opt.always_trust = 1;
- opt.batch = 1;
-
- #if defined (__MINGW32__) || defined (__CYGWIN32__)
- opt.homedir = read_w32_registry_string( NULL, "Software\\GNU\\GnuPG", "HomeDir" );
- #else
- opt.homedir = getenv("GNUPGHOME");
- #endif
- if( !opt.homedir || !*opt.homedir ) {
- opt.homedir = GNUPG_HOMEDIR;
- }
- tty_no_terminal(1);
- tty_batchmode(1);
- disable_dotlock();
-
- set_native_charset (NULL); /* Try to auto set the character set */
-
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
- while( optfile_parse( NULL, NULL, &configlineno, &pargs, opts) ) {
- switch( pargs.r_opt ) {
- case oQuiet: opt.quiet = 1; break;
- case oVerbose: g10_opt_verbose++;
- opt.verbose++; opt.list_sigs=1; break;
- case oKeyring: append_to_strlist( &nrings, pargs.r.ret_str); break;
- case oStatusFD: set_status_fd( pargs.r.ret_int ); break;
- case oLoggerFD: log_set_logfile( NULL, pargs.r.ret_int ); break;
- case oHomedir: opt.homedir = pargs.r.ret_str; break;
- default : pargs.err = 2; break;
- }
- }
-
- if( log_get_errorcount(0) )
- g10_exit(2);
-
- g10_opt_homedir = opt.homedir;
-
- if( opt.verbose > 1 )
- set_packet_list_mode(1);
-
- if( !nrings ) /* no keyring given: use default one */
- keydb_add_resource ("trustedkeys" EXTSEP_S "gpg", 0, 0);
- for(sl = nrings; sl; sl = sl->next )
- keydb_add_resource (sl->d, 0, 0 );
-
- FREE_STRLIST(nrings);
-
- if( (rc = verify_signatures( argc, argv ) ))
- log_error("verify signatures failed: %s\n", g10_errstr(rc) );
-
- /* cleanup */
- g10_exit(0);
- return 8; /*NEVER REACHED*/
-}
-
-
-void
-g10_exit( int rc )
-{
- rc = rc? rc : log_get_errorcount(0)? 2 :
- g10_errors_seen? 1 : 0;
- exit(rc );
-}
-
-
-/* Stub:
- * We have to override the trustcheck from pkclist.c becuase
- * this utility assumes that all keys in the keyring are trustworthy
- */
-int
-check_signatures_trust( PKT_signature *sig )
-{
- return 0;
-}
-
-
-/* Stub:
- * We don't have the trustdb , so we have to provide some stub functions
- * instead
- */
-int
-get_validity_info (PKT_public_key *pk, const byte *namehash )
-{
- return '?';
-}
-
-/* Stub: */
-int
-get_ownertrust_info (PKT_public_key *pk)
-{
- return '?';
-}
-
-unsigned int
-get_ownertrust (PKT_public_key *pk)
-{
- return TRUST_UNKNOWN;
-}
-
-
-/* Stub:
- * Because we only work with trusted keys, it does not make sense to
- * get them from a keyserver
- */
-int
-keyserver_import_keyid( u32 *keyid, void *dummy )
-{
- return -1;
-}
-
-/* Stub:
- * No encryption here but mainproc links to these functions.
- */
-int
-get_session_key( PKT_pubkey_enc *k, DEK *dek )
-{
- return G10ERR_GENERAL;
-}
-/* Stub: */
-int
-get_override_session_key( DEK *dek, const char *string )
-{
- return G10ERR_GENERAL;
-}
-/* Stub: */
-int
-decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek )
-{
- return G10ERR_GENERAL;
-}
-
-
-/* Stub:
- * No interactive commnds, so we don't need the helptexts
- */
-void
-display_online_help( const char *keyword )
-{
-}
-
-/* Stub:
- * We don't use secret keys, but getkey.c links to this
- */
-int
-check_secret_key( PKT_secret_key *sk, int n )
-{
- return G10ERR_GENERAL;
-}
-
-/* Stub:
- * No secret key, so no passphrase needed
- */
-DEK *
-passphrase_to_dek( u32 *keyid, int pubkey_algo,
- int cipher_algo, STRING2KEY *s2k, int mode,
- const char *tmp)
-{
- return NULL;
-}
-
-/* Stubs to avoid linking to photoid.c */
-void show_photos(const struct user_attribute *attrs,int count,PKT_public_key *pk) {}
-int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len) {return 0;}
-char *image_type_to_string(byte type,int string) {return NULL;}
-
-/* Stubs to void linking to ../cipher/cipher.c */
-int string_to_cipher_algo( const char *string ) { return 0; }
-const char *cipher_algo_to_string( int algo ) { return "?";}
-void disable_cipher_algo( int algo ) {}
-int check_cipher_algo( int algo ) { return -1;}
-unsigned int cipher_get_keylen( int algo ) { return 0; }
-unsigned int cipher_get_blocksize( int algo ) {return 0;}
-CIPHER_HANDLE cipher_open( int algo, int mode, int secure ) { return NULL;}
-void cipher_close( CIPHER_HANDLE c ) {}
-int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen ) { return -1;}
-void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen ){}
-void cipher_encrypt( CIPHER_HANDLE c, byte *outbuf,
- byte *inbuf, unsigned nbytes ) {}
-void cipher_decrypt( CIPHER_HANDLE c, byte *outbuf,
- byte *inbuf, unsigned nbytes ) {}
-void cipher_sync( CIPHER_HANDLE c ) {}
-
-/* Stubs to avoid linking to ../cipher/random.c */
-void random_dump_stats(void) {}
-int quick_random_gen( int onoff ) { return -1;}
-void randomize_buffer( byte *buffer, size_t length, int level ) {}
-int random_is_faked() { return -1;}
-byte *get_random_bits( size_t nbits, int level, int secure ) { return NULL;}
-void set_random_seed_file( const char *name ) {}
-void update_random_seed_file() {}
-void fast_random_poll() {}
-
-/* Stubs to avoid linking of ../cipher/primegen.c */
-void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ) {}
-MPI generate_secret_prime( unsigned nbits ) { return NULL;}
-MPI generate_public_prime( unsigned nbits ) { return NULL;}
-MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits,
- MPI g, MPI **ret_factors ) { return NULL;}
-
-/* Do not link to ../cipher/rndlinux.c */
-void rndlinux_constructor(void) {}
-
-
-/* Stubs to avoid linking to ../util/ttyio.c */
-int tty_batchmode( int onoff ) { return 0; }
-void tty_printf( const char *fmt, ... ) { }
-void tty_print_string( byte *p, size_t n ) { }
-void tty_print_utf8_string( byte *p, size_t n ) {}
-void tty_print_utf8_string2( byte *p, size_t n, size_t max_n ) {}
-char *tty_get( const char *prompt ) { return NULL;}
-char *tty_get_hidden( const char *prompt ) {return NULL; }
-void tty_kill_prompt(void) {}
-int tty_get_answer_is_yes( const char *prompt ) {return 0;}
-int tty_no_terminal(int onoff) {return 0;}
-
-/* We do not do any locking, so use these stubs here */
-void disable_dotlock(void) {}
-DOTLOCK create_dotlock( const char *file_to_lock ) { return NULL; }
-int make_dotlock( DOTLOCK h, long timeout ) { return 0;}
-int release_dotlock( DOTLOCK h ) {return 0;}
-void remove_lockfiles(void) {}
diff --git a/g10/import.c b/g10/import.c
deleted file mode 100644
index 1fa22d174..000000000
--- a/g10/import.c
+++ /dev/null
@@ -1,1796 +0,0 @@
-/* import.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "trustdb.h"
-#include "main.h"
-#include "i18n.h"
-#include "ttyio.h"
-#include "status.h"
-#include "keyserver-internal.h"
-
-struct stats_s {
- ulong count;
- ulong no_user_id;
- ulong imported;
- ulong imported_rsa;
- ulong n_uids;
- ulong n_sigs;
- ulong n_subk;
- ulong unchanged;
- ulong n_revoc;
- ulong secret_read;
- ulong secret_imported;
- ulong secret_dups;
- ulong skipped_new_keys;
- ulong not_imported;
-};
-
-
-static int import( IOBUF inp, const char* fname,
- struct stats_s *stats, unsigned int options );
-static int read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root );
-static void revocation_present(KBNODE keyblock);
-static void remove_bad_stuff (KBNODE keyblock);
-static int import_one( const char *fname, KBNODE keyblock,
- struct stats_s *stats, unsigned int options);
-static int import_secret_one( const char *fname, KBNODE keyblock,
- struct stats_s *stats );
-static int import_revoke_cert( const char *fname, KBNODE node,
- struct stats_s *stats);
-static int chk_self_sigs( const char *fname, KBNODE keyblock,
- PKT_public_key *pk, u32 *keyid );
-static int delete_inv_parts( const char *fname, KBNODE keyblock,
- u32 *keyid, unsigned int options );
-static int merge_blocks( const char *fname, KBNODE keyblock_orig,
- KBNODE keyblock, u32 *keyid,
- int *n_uids, int *n_sigs, int *n_subk );
-static int append_uid( KBNODE keyblock, KBNODE node, int *n_sigs,
- const char *fname, u32 *keyid );
-static int append_key( KBNODE keyblock, KBNODE node, int *n_sigs,
- const char *fname, u32 *keyid );
-static int merge_sigs( KBNODE dst, KBNODE src, int *n_sigs,
- const char *fname, u32 *keyid );
-static int merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs,
- const char *fname, u32 *keyid );
-
-
-int
-parse_import_options(char *str,unsigned int *options)
-{
- char *tok;
- int hit=0;
- struct
- {
- char *name;
- unsigned int bit;
- } import_opts[]=
- {
- {"allow-local-sigs",IMPORT_ALLOW_LOCAL_SIGS},
- {"repair-hkp-subkey-bug",IMPORT_REPAIR_HKP_SUBKEY_BUG},
- {"fast-import",IMPORT_FAST_IMPORT},
- {NULL,0}
- };
-
- while((tok=strsep(&str," ,")))
- {
- int i,rev=0;
-
- if(ascii_strncasecmp("no-",tok,3)==0)
- {
- rev=1;
- tok+=3;
- }
-
- for(i=0;import_opts[i].name;i++)
- {
- if(ascii_strcasecmp(import_opts[i].name,tok)==0)
- {
- if(rev)
- *options&=~import_opts[i].bit;
- else
- *options|=import_opts[i].bit;
- hit=1;
- break;
- }
- }
-
- if(!hit && !import_opts[i].name)
- return 0;
- }
-
- return hit;
-}
-
-void *
-import_new_stats_handle (void)
-{
- return m_alloc_clear ( sizeof (struct stats_s) );
-}
-
-void
-import_release_stats_handle (void *p)
-{
- m_free (p);
-}
-
-/****************
- * Import the public keys from the given filename. Input may be armored.
- * This function rejects all keys which are not validly self signed on at
- * least one userid. Only user ids which are self signed will be imported.
- * Other signatures are not checked.
- *
- * Actually this function does a merge. It works like this:
- *
- * - get the keyblock
- * - check self-signatures and remove all userids and their signatures
- * without/invalid self-signatures.
- * - reject the keyblock, if we have no valid userid.
- * - See whether we have this key already in one of our pubrings.
- * If not, simply add it to the default keyring.
- * - Compare the key and the self-signatures of the new and the one in
- * our keyring. If they are different something weird is going on;
- * ask what to do.
- * - See whether we have only non-self-signature on one user id; if not
- * ask the user what to do.
- * - compare the signatures: If we already have this signature, check
- * that they compare okay; if not, issue a warning and ask the user.
- * (consider looking at the timestamp and use the newest?)
- * - Simply add the signature. Can't verify here because we may not have
- * the signature's public key yet; verification is done when putting it
- * into the trustdb, which is done automagically as soon as this pubkey
- * is used.
- * - Proceed with next signature.
- *
- * Key revocation certificates have special handling.
- *
- */
-static int
-import_keys_internal( IOBUF inp, char **fnames, int nnames,
- void *stats_handle, unsigned int options )
-{
- int i, rc = 0;
- struct stats_s *stats = stats_handle;
-
- if (!stats)
- stats = import_new_stats_handle ();
-
- if (inp) {
- rc = import( inp, "[stream]", stats, options);
- }
- else {
- if( !fnames && !nnames )
- nnames = 1; /* Ohh what a ugly hack to jump into the loop */
-
- for(i=0; i < nnames; i++ ) {
- const char *fname = fnames? fnames[i] : NULL;
- IOBUF inp2 = iobuf_open(fname);
- if( !fname )
- fname = "[stdin]";
- if( !inp2 )
- log_error(_("can't open `%s': %s\n"), fname, strerror(errno) );
- else {
- rc = import( inp2, fname, stats, options );
- iobuf_close(inp2);
- if( rc )
- log_error("import from `%s' failed: %s\n", fname,
- g10_errstr(rc) );
- }
- if( !fname )
- break;
- }
- }
- if (!stats_handle) {
- import_print_stats (stats);
- import_release_stats_handle (stats);
- }
- /* If no fast import and we really added new keys or merged new
- user ids, signatures or revocations, then update/check the
- trustdb if the user specified by setting interactive or by
- not setting no-auto-check-trustdb */
- if (!(options&IMPORT_FAST_IMPORT) &&
- (stats->imported || stats->n_uids ||
- stats->n_sigs || stats->n_revoc)) {
- if (opt.interactive)
- update_trustdb();
- else if (!opt.no_auto_check_trustdb)
- check_trustdb();
- }
- return rc;
-}
-
-void
-import_keys( char **fnames, int nnames,
- void *stats_handle, unsigned int options )
-{
- import_keys_internal( NULL, fnames, nnames, stats_handle, options);
-}
-
-int
-import_keys_stream( IOBUF inp, void *stats_handle, unsigned int options )
-{
- return import_keys_internal( inp, NULL, 0, stats_handle, options);
-}
-
-static int
-import( IOBUF inp, const char* fname,
- struct stats_s *stats, unsigned int options )
-{
- PACKET *pending_pkt = NULL;
- KBNODE keyblock;
- int rc = 0;
-
- getkey_disable_caches();
-
- if( !opt.no_armor ) { /* armored reading is not disabled */
- armor_filter_context_t *afx = m_alloc_clear( sizeof *afx );
- afx->only_keyblocks = 1;
- iobuf_push_filter2( inp, armor_filter, afx, 1 );
- }
-
- while( !(rc = read_block( inp, &pending_pkt, &keyblock) )) {
- remove_bad_stuff (keyblock);
- if( keyblock->pkt->pkttype == PKT_PUBLIC_KEY )
- rc = import_one( fname, keyblock, stats, options );
- else if( keyblock->pkt->pkttype == PKT_SECRET_KEY )
- rc = import_secret_one( fname, keyblock, stats );
- else if( keyblock->pkt->pkttype == PKT_SIGNATURE
- && keyblock->pkt->pkt.signature->sig_class == 0x20 )
- rc = import_revoke_cert( fname, keyblock, stats );
- else {
- log_info( _("skipping block of type %d\n"),
- keyblock->pkt->pkttype );
- }
- release_kbnode(keyblock);
- /* fixme: we should increment the not imported counter but this
- does only make sense if we keep on going despite of errors. */
- if( rc )
- break;
- if( !(++stats->count % 100) && !opt.quiet )
- log_info(_("%lu keys processed so far\n"), stats->count );
- }
- if( rc == -1 )
- rc = 0;
- else if( rc && rc != G10ERR_INV_KEYRING )
- log_error( _("error reading `%s': %s\n"), fname, g10_errstr(rc));
-
- return rc;
-}
-
-
-void
-import_print_stats (void *hd)
-{
- struct stats_s *stats = hd;
-
- if( !opt.quiet ) {
- log_info(_("Total number processed: %lu\n"), stats->count );
- if( stats->skipped_new_keys )
- log_info(_(" skipped new keys: %lu\n"),
- stats->skipped_new_keys );
- if( stats->no_user_id )
- log_info(_(" w/o user IDs: %lu\n"), stats->no_user_id );
- if( stats->imported || stats->imported_rsa ) {
- log_info(_(" imported: %lu"), stats->imported );
- if( stats->imported_rsa )
- fprintf(stderr, " (RSA: %lu)", stats->imported_rsa );
- putc('\n', stderr);
- }
- if( stats->unchanged )
- log_info(_(" unchanged: %lu\n"), stats->unchanged );
- if( stats->n_uids )
- log_info(_(" new user IDs: %lu\n"), stats->n_uids );
- if( stats->n_subk )
- log_info(_(" new subkeys: %lu\n"), stats->n_subk );
- if( stats->n_sigs )
- log_info(_(" new signatures: %lu\n"), stats->n_sigs );
- if( stats->n_revoc )
- log_info(_(" new key revocations: %lu\n"), stats->n_revoc );
- if( stats->secret_read )
- log_info(_(" secret keys read: %lu\n"), stats->secret_read );
- if( stats->secret_imported )
- log_info(_(" secret keys imported: %lu\n"), stats->secret_imported );
- if( stats->secret_dups )
- log_info(_(" secret keys unchanged: %lu\n"), stats->secret_dups );
- if( stats->not_imported )
- log_info(_(" not imported: %lu\n"), stats->not_imported );
- }
-
- if( is_status_enabled() ) {
- char buf[14*20];
- sprintf(buf, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",
- stats->count,
- stats->no_user_id,
- stats->imported,
- stats->imported_rsa,
- stats->unchanged,
- stats->n_uids,
- stats->n_subk,
- stats->n_sigs,
- stats->n_revoc,
- stats->secret_read,
- stats->secret_imported,
- stats->secret_dups,
- stats->skipped_new_keys,
- stats->not_imported );
- write_status_text( STATUS_IMPORT_RES, buf );
- }
-}
-
-
-/****************
- * Read the next keyblock from stream A.
- * PENDING_PKT should be initialzed to NULL
- * and not chnaged form the caller.
- * Retunr: 0 = okay, -1 no more blocks or another errorcode.
- */
-static int
-read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root )
-{
- int rc;
- PACKET *pkt;
- KBNODE root = NULL;
- int in_cert;
-
- if( *pending_pkt ) {
- root = new_kbnode( *pending_pkt );
- *pending_pkt = NULL;
- in_cert = 1;
- }
- else
- in_cert = 0;
- pkt = m_alloc( sizeof *pkt );
- init_packet(pkt);
- while( (rc=parse_packet(a, pkt)) != -1 ) {
- if( rc ) { /* ignore errors */
- if( rc != G10ERR_UNKNOWN_PACKET ) {
- log_error("read_block: read error: %s\n", g10_errstr(rc) );
- rc = G10ERR_INV_KEYRING;
- goto ready;
- }
- free_packet( pkt );
- init_packet(pkt);
- continue;
- }
-
- if( !root && pkt->pkttype == PKT_SIGNATURE
- && pkt->pkt.signature->sig_class == 0x20 ) {
- /* this is a revocation certificate which is handled
- * in a special way */
- root = new_kbnode( pkt );
- pkt = NULL;
- goto ready;
- }
-
- /* make a linked list of all packets */
- switch( pkt->pkttype ) {
- case PKT_COMPRESSED:
- if( pkt->pkt.compressed->algorithm < 1
- || pkt->pkt.compressed->algorithm > 2 ) {
- rc = G10ERR_COMPR_ALGO;
- goto ready;
- }
- {
- compress_filter_context_t *cfx = m_alloc_clear( sizeof *cfx );
- cfx->algo = pkt->pkt.compressed->algorithm;
- pkt->pkt.compressed->buf = NULL;
- iobuf_push_filter2( a, compress_filter, cfx, 1 );
- }
- free_packet( pkt );
- init_packet(pkt);
- break;
-
- case PKT_RING_TRUST:
- /* skip those packets */
- free_packet( pkt );
- init_packet(pkt);
- break;
-
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- if( in_cert ) { /* store this packet */
- *pending_pkt = pkt;
- pkt = NULL;
- goto ready;
- }
- in_cert = 1;
- default:
- if( in_cert ) {
- if( !root )
- root = new_kbnode( pkt );
- else
- add_kbnode( root, new_kbnode( pkt ) );
- pkt = m_alloc( sizeof *pkt );
- }
- init_packet(pkt);
- break;
- }
- }
- ready:
- if( rc == -1 && root )
- rc = 0;
-
- if( rc )
- release_kbnode( root );
- else
- *ret_root = root;
- free_packet( pkt );
- m_free( pkt );
- return rc;
-}
-
-
-static void
-remove_bad_stuff (KBNODE keyblock)
-{
- KBNODE node;
-
- for (node=keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_SIGNATURE ) {
- /* delete the subpackets we used to use for the
- verification cache */
- delete_sig_subpkt (node->pkt->pkt.signature->unhashed,
- SIGSUBPKT_PRIV_VERIFY_CACHE);
- }
- }
-}
-
-/* Walk through the subkeys on a pk to find if we have the HKP
- disease: multiple subkeys with their binding sigs stripped, and the
- sig for the first subkey placed after the last subkey. That is,
- instead of "pk uid sig sub1 bind1 sub2 bind2 sub3 bind3" we have
- "pk uid sig sub1 sub2 sub3 bind1". We can't do anything about sub2
- and sub3, as they are already lost, but we can try and rescue sub1
- by reordering the keyblock so that it reads "pk uid sig sub1 bind1
- sub2 sub3". Returns TRUE if the keyblock was modified. */
-
-static int
-fix_hkp_corruption(KBNODE keyblock)
-{
- int changed=0,keycount=0;
- KBNODE node,last=NULL,sknode=NULL;
-
- /* First determine if we have the problem at all. Look for 2 or
- more subkeys in a row, followed by a single binding sig. */
- for(node=keyblock;node;last=node,node=node->next)
- {
- if(node->pkt->pkttype==PKT_PUBLIC_SUBKEY)
- {
- keycount++;
- if(!sknode)
- sknode=node;
- }
- else if(node->pkt->pkttype==PKT_SIGNATURE &&
- node->pkt->pkt.signature->sig_class==0x18 &&
- keycount>=2 && node->next==NULL)
- {
- /* We might have the problem, as this key has two subkeys in
- a row without any intervening packets. */
-
- /* Sanity check */
- if(last==NULL)
- break;
-
- /* Temporarily attach node to sknode. */
- node->next=sknode->next;
- sknode->next=node;
- last->next=NULL;
-
- if(check_key_signature(keyblock,node,NULL))
- {
- /* Not a match, so undo the changes. */
- sknode->next=node->next;
- last->next=node;
- node->next=NULL;
- break;
- }
- else
- {
- sknode->flag |= 1; /* Mark it good so we don't need to
- check it again */
- changed=1;
- break;
- }
- }
- else
- keycount=0;
- }
-
- return changed;
-}
-
-
-static void
-print_import_ok (PKT_public_key *pk, PKT_secret_key *sk, unsigned int reason)
-{
- byte array[MAX_FINGERPRINT_LEN], *s;
- char buf[MAX_FINGERPRINT_LEN*2+30], *p;
- size_t i, n;
-
- sprintf (buf, "%u ", reason);
- p = buf + strlen (buf);
-
- if (pk)
- fingerprint_from_pk (pk, array, &n);
- else
- fingerprint_from_sk (sk, array, &n);
- s = array;
- for (i=0; i < n ; i++, s++, p += 2)
- sprintf (p, "%02X", *s);
-
- write_status_text (STATUS_IMPORT_OK, buf);
-}
-
-
-/****************
- * Try to import one keyblock. Return an error only in serious cases, but
- * never for an invalid keyblock. It uses log_error to increase the
- * internal errorcount, so that invalid input can be detected by programs
- * which called g10.
- */
-static int
-import_one( const char *fname, KBNODE keyblock,
- struct stats_s *stats, unsigned int options )
-{
- PKT_public_key *pk;
- PKT_public_key *pk_orig;
- KBNODE node, uidnode;
- KBNODE keyblock_orig = NULL;
- u32 keyid[2];
- int rc = 0;
- int new_key = 0;
- int mod_key = 0;
-
- /* get the key and print some info about it */
- node = find_kbnode( keyblock, PKT_PUBLIC_KEY );
- if( !node )
- BUG();
-
- pk = node->pkt->pkt.public_key;
- keyid_from_pk( pk, keyid );
- uidnode = find_next_kbnode( keyblock, PKT_USER_ID );
-
- if( opt.verbose ) {
- log_info( "pub %4u%c/%08lX %s ",
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_pk(pk) );
- if( uidnode )
- print_utf8_string( stderr, uidnode->pkt->pkt.user_id->name,
- uidnode->pkt->pkt.user_id->len );
- putc('\n', stderr);
- }
- if( !uidnode ) {
- log_error( _("key %08lX: no user ID\n"), (ulong)keyid[1]);
- return 0;
- }
-
- if (opt.interactive) {
- tty_printf ("\n");
- show_basic_key_info (keyblock);
- tty_printf ("\n");
- if (!cpr_get_answer_is_yes ("import.okay",
- "Do you want to import this key? (y/N) "))
- return 0;
- }
-
- clear_kbnode_flags( keyblock );
-
- if((options&IMPORT_REPAIR_HKP_SUBKEY_BUG) && fix_hkp_corruption(keyblock))
- log_info(_("key %08lX: HKP subkey corruption repaired\n"),
- (ulong)keyid[1]);
-
- rc = chk_self_sigs( fname, keyblock , pk, keyid );
- if( rc )
- return rc== -1? 0:rc;
-
- /* If we allow such a thing, mark unsigned uids as valid */
- if( opt.allow_non_selfsigned_uid )
- for( node=keyblock; node; node = node->next )
- if( node->pkt->pkttype == PKT_USER_ID && !(node->flag & 1) )
- {
- char *user=utf8_to_native(node->pkt->pkt.user_id->name,
- node->pkt->pkt.user_id->len,0);
- node->flag |= 1;
- log_info( _("key %08lX: accepted non self-signed user ID '%s'\n"),
- (ulong)keyid[1],user);
- m_free(user);
- }
-
- if( !delete_inv_parts( fname, keyblock, keyid, options ) ) {
- if( !opt.quiet ) {
- log_info( _("key %08lX: no valid user IDs\n"),
- (ulong)keyid[1]);
- log_info(_("this may be caused by a missing self-signature\n"));
- }
- stats->no_user_id++;
- return 0;
- }
-
- /* do we have this key already in one of our pubrings ? */
- pk_orig = m_alloc_clear( sizeof *pk_orig );
- rc = get_pubkey( pk_orig, keyid );
- if( rc && rc != G10ERR_NO_PUBKEY && rc != G10ERR_UNU_PUBKEY ) {
- log_error( _("key %08lX: public key not found: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
- }
- else if ( rc && opt.merge_only ) {
- if( opt.verbose )
- log_info( _("key %08lX: new key - skipped\n"), (ulong)keyid[1] );
- rc = 0;
- stats->skipped_new_keys++;
- }
- else if( rc ) { /* insert this key */
- KEYDB_HANDLE hd = keydb_new (0);
-
- rc = keydb_locate_writable (hd, NULL);
- if (rc) {
- log_error (_("no writable keyring found: %s\n"), g10_errstr (rc));
- keydb_release (hd);
- return G10ERR_GENERAL;
- }
- if( opt.verbose > 1 )
- log_info (_("writing to `%s'\n"), keydb_get_resource_name (hd) );
- rc = keydb_insert_keyblock (hd, keyblock );
- if (rc)
- log_error (_("error writing keyring `%s': %s\n"),
- keydb_get_resource_name (hd), g10_errstr(rc));
- else
- {
- /* This should not be possible since we delete the
- ownertrust when a key is deleted, but it can happen if
- the keyring and trustdb are out of sync. It can also
- be made to happen with the trusted-key command. */
-
- clear_ownertrust (pk);
- revalidation_mark ();
- }
- keydb_release (hd);
-
- /* we are ready */
- if( !opt.quiet ) {
- char *p=get_user_id_printable (keyid);
- log_info( _("key %08lX: public key \"%s\" imported\n"),
- (ulong)keyid[1],p);
- m_free(p);
- }
- if( is_status_enabled() ) {
- char *us = get_long_user_id_string( keyid );
- write_status_text( STATUS_IMPORTED, us );
- m_free(us);
- print_import_ok (pk,NULL, 1);
- }
- stats->imported++;
- if( is_RSA( pk->pubkey_algo ) )
- stats->imported_rsa++;
- new_key = 1;
- }
- else { /* merge */
- KEYDB_HANDLE hd;
- int n_uids, n_sigs, n_subk;
-
- /* Compare the original against the new key; just to be sure nothing
- * weird is going on */
- if( cmp_public_keys( pk_orig, pk ) ) {
- log_error( _("key %08lX: doesn't match our copy\n"),
- (ulong)keyid[1]);
- goto leave;
- }
-
- /* now read the original keyblock */
- hd = keydb_new (0);
- {
- byte afp[MAX_FINGERPRINT_LEN];
- size_t an;
-
- fingerprint_from_pk (pk_orig, afp, &an);
- while (an < MAX_FINGERPRINT_LEN)
- afp[an++] = 0;
- rc = keydb_search_fpr (hd, afp);
- }
- if( rc ) {
- log_error (_("key %08lX: can't locate original keyblock: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
- keydb_release (hd);
- goto leave;
- }
- rc = keydb_get_keyblock (hd, &keyblock_orig );
- if (rc) {
- log_error (_("key %08lX: can't read original keyblock: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
- keydb_release (hd);
- goto leave;
- }
-
- collapse_uids( &keyblock );
- /* and try to merge the block */
- clear_kbnode_flags( keyblock_orig );
- clear_kbnode_flags( keyblock );
- n_uids = n_sigs = n_subk = 0;
- rc = merge_blocks( fname, keyblock_orig, keyblock,
- keyid, &n_uids, &n_sigs, &n_subk );
- if( rc ) {
- keydb_release (hd);
- goto leave;
- }
- if( n_uids || n_sigs || n_subk ) {
- mod_key = 1;
- /* keyblock_orig has been updated; write */
- rc = keydb_update_keyblock (hd, keyblock_orig);
- if (rc)
- log_error (_("error writing keyring `%s': %s\n"),
- keydb_get_resource_name (hd), g10_errstr(rc) );
- else
- revalidation_mark ();
-
- /* we are ready */
- if( !opt.quiet ) {
- char *p=get_user_id_printable(keyid);
- if( n_uids == 1 )
- log_info( _("key %08lX: \"%s\" 1 new user ID\n"),
- (ulong)keyid[1], p);
- else if( n_uids )
- log_info( _("key %08lX: \"%s\" %d new user IDs\n"),
- (ulong)keyid[1], p, n_uids );
- if( n_sigs == 1 )
- log_info( _("key %08lX: \"%s\" 1 new signature\n"),
- (ulong)keyid[1], p);
- else if( n_sigs )
- log_info( _("key %08lX: \"%s\" %d new signatures\n"),
- (ulong)keyid[1], p, n_sigs );
- if( n_subk == 1 )
- log_info( _("key %08lX: \"%s\" 1 new subkey\n"),
- (ulong)keyid[1], p);
- else if( n_subk )
- log_info( _("key %08lX: \"%s\" %d new subkeys\n"),
- (ulong)keyid[1], p, n_subk );
- m_free(p);
- }
-
- stats->n_uids +=n_uids;
- stats->n_sigs +=n_sigs;
- stats->n_subk +=n_subk;
-
- if (is_status_enabled ())
- print_import_ok (pk, NULL,
- ((n_uids?2:0)|(n_sigs?4:0)|(n_subk?8:0)));
- }
- else {
- if (is_status_enabled ())
- print_import_ok (pk, NULL, 0);
-
- if( !opt.quiet ) {
- char *p=get_user_id_printable(keyid);
- log_info( _("key %08lX: \"%s\" not changed\n"),
- (ulong)keyid[1],p);
- m_free(p);
- }
- stats->unchanged++;
- }
- keydb_release (hd); hd = NULL;
- }
-
- leave:
- release_kbnode( keyblock_orig );
- free_public_key( pk_orig );
-
- revocation_present(keyblock);
-
- return rc;
-}
-
-
-/****************
- * Ditto for secret keys. Handling is simpler than for public keys.
- * We allow secret key importing only when allow is true, this is so
- * that a secret key can not be imported accidently and thereby tampering
- * with the trust calculation.
- */
-static int
-import_secret_one( const char *fname, KBNODE keyblock,
- struct stats_s *stats)
-{
- PKT_secret_key *sk;
- KBNODE node, uidnode;
- u32 keyid[2];
- int rc = 0;
-
- /* get the key and print some info about it */
- node = find_kbnode( keyblock, PKT_SECRET_KEY );
- if( !node )
- BUG();
-
- sk = node->pkt->pkt.secret_key;
- keyid_from_sk( sk, keyid );
- uidnode = find_next_kbnode( keyblock, PKT_USER_ID );
-
- if( opt.verbose ) {
- log_info( "sec %4u%c/%08lX %s ",
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_sk(sk) );
- if( uidnode )
- print_utf8_string( stderr, uidnode->pkt->pkt.user_id->name,
- uidnode->pkt->pkt.user_id->len );
- putc('\n', stderr);
- }
- stats->secret_read++;
-
- if( !uidnode ) {
- log_error( _("key %08lX: no user ID\n"), (ulong)keyid[1]);
- return 0;
- }
-
- if(sk->protect.algo>110)
- {
- log_error(_("key %08lX: secret key with invalid cipher %d "
- "- skipped\n"),(ulong)keyid[1],sk->protect.algo);
- return 0;
- }
-
- clear_kbnode_flags( keyblock );
-
- /* do we have this key already in one of our secrings ? */
- rc = seckey_available( keyid );
- if( rc == G10ERR_NO_SECKEY && !opt.merge_only ) { /* simply insert this key */
- KEYDB_HANDLE hd = keydb_new (1);
-
- /* get default resource */
- rc = keydb_locate_writable (hd, NULL);
- if (rc) {
- log_error (_("no default secret keyring: %s\n"), g10_errstr (rc));
- keydb_release (hd);
- return G10ERR_GENERAL;
- }
- rc = keydb_insert_keyblock (hd, keyblock );
- if (rc)
- log_error (_("error writing keyring `%s': %s\n"),
- keydb_get_resource_name (hd), g10_errstr(rc) );
- keydb_release (hd);
- /* we are ready */
- if( !opt.quiet )
- log_info( _("key %08lX: secret key imported\n"), (ulong)keyid[1]);
- stats->secret_imported++;
- if (is_status_enabled ())
- print_import_ok (NULL, sk, 1|16);
- }
- else if( !rc ) { /* we can't merge secret keys */
- log_error( _("key %08lX: already in secret keyring\n"),
- (ulong)keyid[1]);
- stats->secret_dups++;
- if (is_status_enabled ())
- print_import_ok (NULL, sk, 16);
- }
- else
- log_error( _("key %08lX: secret key not found: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
-
- return rc;
-}
-
-
-/****************
- * Import a revocation certificate; this is a single signature packet.
- */
-static int
-import_revoke_cert( const char *fname, KBNODE node, struct stats_s *stats )
-{
- PKT_public_key *pk=NULL;
- KBNODE onode, keyblock = NULL;
- KEYDB_HANDLE hd = NULL;
- u32 keyid[2];
- int rc = 0;
-
- assert( !node->next );
- assert( node->pkt->pkttype == PKT_SIGNATURE );
- assert( node->pkt->pkt.signature->sig_class == 0x20 );
-
- keyid[0] = node->pkt->pkt.signature->keyid[0];
- keyid[1] = node->pkt->pkt.signature->keyid[1];
-
- pk = m_alloc_clear( sizeof *pk );
- rc = get_pubkey( pk, keyid );
- if( rc == G10ERR_NO_PUBKEY ) {
- log_info( _("key %08lX: no public key - "
- "can't apply revocation certificate\n"), (ulong)keyid[1]);
- rc = 0;
- goto leave;
- }
- else if( rc ) {
- log_error( _("key %08lX: public key not found: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
- goto leave;
- }
-
- /* read the original keyblock */
- hd = keydb_new (0);
- {
- byte afp[MAX_FINGERPRINT_LEN];
- size_t an;
-
- fingerprint_from_pk (pk, afp, &an);
- while (an < MAX_FINGERPRINT_LEN)
- afp[an++] = 0;
- rc = keydb_search_fpr (hd, afp);
- }
- if (rc) {
- log_error (_("key %08lX: can't locate original keyblock: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
- goto leave;
- }
- rc = keydb_get_keyblock (hd, &keyblock );
- if (rc) {
- log_error (_("key %08lX: can't read original keyblock: %s\n"),
- (ulong)keyid[1], g10_errstr(rc));
- goto leave;
- }
-
-
- /* it is okay, that node is not in keyblock because
- * check_key_signature works fine for sig_class 0x20 in this
- * special case. */
- rc = check_key_signature( keyblock, node, NULL);
- if( rc ) {
- log_error( _("key %08lX: invalid revocation certificate"
- ": %s - rejected\n"), (ulong)keyid[1], g10_errstr(rc));
- goto leave;
- }
-
-
- /* check whether we already have this */
- for(onode=keyblock->next; onode; onode=onode->next ) {
- if( onode->pkt->pkttype == PKT_USER_ID )
- break;
- else if( onode->pkt->pkttype == PKT_SIGNATURE
- && onode->pkt->pkt.signature->sig_class == 0x20
- && keyid[0] == onode->pkt->pkt.signature->keyid[0]
- && keyid[1] == onode->pkt->pkt.signature->keyid[1] ) {
- rc = 0;
- goto leave; /* yes, we already know about it */
- }
- }
-
-
- /* insert it */
- insert_kbnode( keyblock, clone_kbnode(node), 0 );
-
- /* and write the keyblock back */
- rc = keydb_update_keyblock (hd, keyblock );
- if (rc)
- log_error (_("error writing keyring `%s': %s\n"),
- keydb_get_resource_name (hd), g10_errstr(rc) );
- keydb_release (hd); hd = NULL;
- /* we are ready */
- if( !opt.quiet ) {
- char *p=get_user_id_printable (keyid);
- log_info( _("key %08lX: \"%s\" revocation certificate imported\n"),
- (ulong)keyid[1],p);
- m_free(p);
- }
- stats->n_revoc++;
- revalidation_mark ();
-
- leave:
- keydb_release (hd);
- release_kbnode( keyblock );
- free_public_key( pk );
- return rc;
-}
-
-
-/****************
- * loop over the keyblock and check all self signatures.
- * Mark all user-ids with a self-signature by setting flag bit 0.
- * Mark all user-ids with an invalid self-signature by setting bit 1.
- * This works also for subkeys, here the subkey is marked. Invalid or
- * extra subkey sigs (binding or revocation) are marked for deletion.
- */
-static int
-chk_self_sigs( const char *fname, KBNODE keyblock,
- PKT_public_key *pk, u32 *keyid )
-{
- KBNODE n,knode=NULL;
- PKT_signature *sig;
- int rc;
- u32 bsdate=0,rsdate=0;
- KBNODE bsnode=NULL,rsnode=NULL;
-
- for( n=keyblock; (n = find_next_kbnode(n, 0)); ) {
- if(n->pkt->pkttype==PKT_PUBLIC_SUBKEY)
- {
- knode=n;
- bsdate=0;
- rsdate=0;
- bsnode=NULL;
- rsnode=NULL;
- }
- else if( n->pkt->pkttype != PKT_SIGNATURE )
- continue;
- sig = n->pkt->pkt.signature;
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) {
- if( (sig->sig_class&~3) == 0x10 ) {
- KBNODE unode = find_prev_kbnode( keyblock, n, PKT_USER_ID );
- if( !unode ) {
- log_error( _("key %08lX: no user ID for signature\n"),
- (ulong)keyid[1]);
- return -1; /* the complete keyblock is invalid */
- }
-
- /* If it hasn't been marked valid yet, keep trying */
- if(!(unode->flag&1)) {
- rc = check_key_signature( keyblock, n, NULL);
- if( rc )
- {
- char *p=utf8_to_native(unode->pkt->pkt.user_id->name,
- strlen(unode->pkt->pkt.user_id->name),0);
- log_info( rc == G10ERR_PUBKEY_ALGO ?
- _("key %08lX: unsupported public key "
- "algorithm on user id \"%s\"\n"):
- _("key %08lX: invalid self-signature "
- "on user id \"%s\"\n"),
- (ulong)keyid[1],p);
- m_free(p);
- }
- else
- unode->flag |= 1; /* mark that signature checked */
- }
- }
- else if( sig->sig_class == 0x18 ) {
- /* Note that this works based solely on the timestamps
- like the rest of gpg. If the standard gets
- revocation targets, this may need to be revised. */
-
- if( !knode ) {
- log_info( _("key %08lX: no subkey for subkey "
- "binding signature\n"),(ulong)keyid[1]);
- n->flag |= 4; /* delete this */
- }
- else {
- rc = check_key_signature( keyblock, n, NULL);
- if( rc ) {
- log_info( rc == G10ERR_PUBKEY_ALGO ?
- _("key %08lX: unsupported public key algorithm\n"):
- _("key %08lX: invalid subkey binding\n"),
- (ulong)keyid[1]);
- n->flag|=4;
- }
- else {
- /* It's valid, so is it newer? */
- if(sig->timestamp>=bsdate) {
- knode->flag |= 1; /* the subkey is valid */
- if(bsnode) {
- bsnode->flag|=4; /* Delete the last binding
- sig since this one is
- newer */
- log_info(_("key %08lX: removed multiple subkey "
- "binding\n"),(ulong)keyid[1]);
- }
-
- bsnode=n;
- bsdate=sig->timestamp;
- }
- else
- n->flag|=4; /* older */
- }
- }
- }
- else if( sig->sig_class == 0x28 ) {
- /* We don't actually mark the subkey as revoked right
- now, so just check that the revocation sig is the
- most recent valid one. Note that we don't care if
- the binding sig is newer than the revocation sig.
- See the comment in getkey.c:merge_selfsigs_subkey for
- more */
- if( !knode ) {
- log_info( _("key %08lX: no subkey for subkey "
- "revocation signature\n"),(ulong)keyid[1]);
- n->flag |= 4; /* delete this */
- }
- else {
- rc = check_key_signature( keyblock, n, NULL);
- if( rc ) {
- log_info( rc == G10ERR_PUBKEY_ALGO ?
- _("key %08lX: unsupported public key algorithm\n"):
- _("key %08lX: invalid subkey revocation\n"),
- (ulong)keyid[1]);
- n->flag|=4;
- }
- else {
- /* It's valid, so is it newer? */
- if(sig->timestamp>=rsdate) {
- if(rsnode) {
- rsnode->flag|=4; /* Delete the last revocation
- sig since this one is
- newer */
- log_info(_("key %08lX: removed multiple subkey "
- "revocation signatures\n"),(ulong)keyid[1]);
- }
-
- rsnode=n;
- rsdate=sig->timestamp;
- }
- else
- n->flag|=4; /* older */
- }
- }
- }
- }
- }
-
- return 0;
-}
-
-/****************
- * delete all parts which are invalid and those signatures whose
- * public key algorithm is not available in this implemenation;
- * but consider RSA as valid, because parse/build_packets knows
- * about it.
- * returns: true if at least one valid user-id is left over.
- */
-static int
-delete_inv_parts( const char *fname, KBNODE keyblock,
- u32 *keyid, unsigned int options)
-{
- KBNODE node;
- int nvalid=0, uid_seen=0, subkey_seen=0;
-
- for(node=keyblock->next; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- uid_seen = 1;
- if( (node->flag & 2) || !(node->flag & 1) ) {
- if( opt.verbose ) {
- log_info( _("key %08lX: skipped user ID '"),
- (ulong)keyid[1]);
- print_utf8_string( stderr, node->pkt->pkt.user_id->name,
- node->pkt->pkt.user_id->len );
- fputs("'\n", stderr );
- }
- delete_kbnode( node ); /* the user-id */
- /* and all following packets up to the next user-id */
- while( node->next
- && node->next->pkt->pkttype != PKT_USER_ID
- && node->next->pkt->pkttype != PKT_PUBLIC_SUBKEY
- && node->next->pkt->pkttype != PKT_SECRET_SUBKEY ){
- delete_kbnode( node->next );
- node = node->next;
- }
- }
- else
- nvalid++;
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- if( (node->flag & 2) || !(node->flag & 1) ) {
- if( opt.verbose ) {
- log_info( _("key %08lX: skipped subkey\n"),
- (ulong)keyid[1]);
- }
- delete_kbnode( node ); /* the subkey */
- /* and all following signature packets */
- while( node->next
- && node->next->pkt->pkttype == PKT_SIGNATURE ) {
- delete_kbnode( node->next );
- node = node->next;
- }
- }
- else
- subkey_seen = 1;
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE
- && check_pubkey_algo( node->pkt->pkt.signature->pubkey_algo)
- && node->pkt->pkt.signature->pubkey_algo != PUBKEY_ALGO_RSA )
- delete_kbnode( node ); /* build_packet() can't handle this */
- else if( node->pkt->pkttype == PKT_SIGNATURE &&
- !node->pkt->pkt.signature->flags.exportable &&
- !(options&IMPORT_ALLOW_LOCAL_SIGS) &&
- seckey_available( node->pkt->pkt.signature->keyid ) ) {
- /* here we violate the rfc a bit by still allowing
- * to import non-exportable signature when we have the
- * the secret key used to create this signature - it
- * seems that this makes sense */
- log_info( _("key %08lX: non exportable signature "
- "(class %02x) - skipped\n"),
- (ulong)keyid[1],
- node->pkt->pkt.signature->sig_class );
- delete_kbnode( node );
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE
- && node->pkt->pkt.signature->sig_class == 0x20 ) {
- if( uid_seen ) {
- log_error( _("key %08lX: revocation certificate "
- "at wrong place - skipped\n"),
- (ulong)keyid[1]);
- delete_kbnode( node );
- }
- else {
- /* If the revocation cert is from a different key than
- the one we're working on don't check it - it's
- probably from a revocation key and won't be
- verifiable with this key anyway. */
-
- if(node->pkt->pkt.signature->keyid[0]==keyid[0] &&
- node->pkt->pkt.signature->keyid[1]==keyid[1])
- {
- int rc = check_key_signature( keyblock, node, NULL);
- if( rc )
- {
- log_error( _("key %08lX: invalid revocation "
- "certificate: %s - skipped\n"),
- (ulong)keyid[1], g10_errstr(rc));
- delete_kbnode( node );
- }
- }
- }
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE &&
- (node->pkt->pkt.signature->sig_class == 0x18 ||
- node->pkt->pkt.signature->sig_class == 0x28) &&
- !subkey_seen ) {
- log_error( _("key %08lX: subkey signature "
- "in wrong place - skipped\n"),
- (ulong)keyid[1]);
- delete_kbnode( node );
- }
- else if( (node->flag & 4) ) /* marked for deletion */
- delete_kbnode( node );
- }
-
- /* note: because keyblock is the public key, it is never marked
- * for deletion and so keyblock cannot change */
- commit_kbnode( &keyblock );
- return nvalid;
-}
-
-
-/****************
- * It may happen that the imported keyblock has duplicated user IDs.
- * We check this here and collapse those user IDs together with their
- * sigs into one.
- * Returns: True if the keyblock hash changed.
- */
-int
-collapse_uids( KBNODE *keyblock )
-{
- KBNODE n, n2;
- int in_uid;
- int any=0;
- u32 kid1;
-
- restart:
- for( n = *keyblock; n; n = n->next ) {
- if( n->pkt->pkttype != PKT_USER_ID )
- continue;
- for( n2 = n->next; n2; n2 = n2->next ) {
- if( n2->pkt->pkttype == PKT_USER_ID
- && !cmp_user_ids( n->pkt->pkt.user_id,
- n2->pkt->pkt.user_id ) ) {
- /* found a duplicate */
- any = 1;
- if( !n2->next
- || n2->next->pkt->pkttype == PKT_USER_ID
- || n2->next->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || n2->next->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- /* no more signatures: delete the user ID
- * and start over */
- remove_kbnode( keyblock, n2 );
- }
- else {
- /* The simple approach: Move one signature and
- * then start over to delete the next one :-( */
- move_kbnode( keyblock, n2->next, n->next );
- }
- goto restart;
- }
- }
- }
- if( !any )
- return 0;
-
- restart_sig:
- /* now we may have duplicate signatures on one user ID: fix this */
- for( in_uid = 0, n = *keyblock; n; n = n->next ) {
- if( n->pkt->pkttype == PKT_USER_ID )
- in_uid = 1;
- else if( n->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || n->pkt->pkttype == PKT_SECRET_SUBKEY )
- in_uid = 0;
- else if( in_uid ) {
- n2 = n;
- do {
- KBNODE ncmp = NULL;
- for( ; n2; n2 = n2->next ) {
- if( n2->pkt->pkttype == PKT_USER_ID
- || n2->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || n2->pkt->pkttype == PKT_SECRET_SUBKEY )
- break;
- if( n2->pkt->pkttype != PKT_SIGNATURE )
- ;
- else if( !ncmp )
- ncmp = n2;
- else if( !cmp_signatures( ncmp->pkt->pkt.signature,
- n2->pkt->pkt.signature )) {
- remove_kbnode( keyblock, n2 );
- goto restart_sig;
- }
- }
- n2 = ncmp? ncmp->next : NULL;
- } while( n2 );
- }
- }
-
- if( (n = find_kbnode( *keyblock, PKT_PUBLIC_KEY )) )
- kid1 = keyid_from_pk( n->pkt->pkt.public_key, NULL );
- else if( (n = find_kbnode( *keyblock, PKT_SECRET_KEY )) )
- kid1 = keyid_from_sk( n->pkt->pkt.secret_key, NULL );
- else
- kid1 = 0;
- log_info(_("key %08lX: duplicated user ID detected - merged\n"),
- (ulong)kid1);
-
- return 1;
-}
-
-/* Check for a 0x20 revocation from a revocation key that is not
- present. This gets called without the benefit of merge_xxxx so you
- can't rely on pk->revkey and friends. */
-static void
-revocation_present(KBNODE keyblock)
-{
- KBNODE onode,inode;
- PKT_public_key *pk=keyblock->pkt->pkt.public_key;
-
- for(onode=keyblock->next;onode;onode=onode->next)
- {
- /* If we reach user IDs, we're done. */
- if(onode->pkt->pkttype==PKT_USER_ID)
- break;
-
- if(onode->pkt->pkttype==PKT_SIGNATURE &&
- onode->pkt->pkt.signature->sig_class==0x1F &&
- onode->pkt->pkt.signature->revkey)
- {
- int idx;
- PKT_signature *sig=onode->pkt->pkt.signature;
-
- for(idx=0;idx<sig->numrevkeys;idx++)
- {
- u32 keyid[2];
-
- keyid_from_fingerprint(sig->revkey[idx]->fpr,
- MAX_FINGERPRINT_LEN,keyid);
-
- for(inode=keyblock->next;inode;inode=inode->next)
- {
- /* If we reach user IDs, we're done. */
- if(inode->pkt->pkttype==PKT_USER_ID)
- break;
-
- if(inode->pkt->pkttype==PKT_SIGNATURE &&
- inode->pkt->pkt.signature->sig_class==0x20 &&
- inode->pkt->pkt.signature->keyid[0]==keyid[0] &&
- inode->pkt->pkt.signature->keyid[1]==keyid[1])
- {
- /* Okay, we have a revocation key, and a
- revocation issued by it. Do we have the key
- itself? */
- int rc;
-
- rc=get_pubkey_byfprint(NULL,sig->revkey[idx]->fpr,
- MAX_FINGERPRINT_LEN);
- if(rc==G10ERR_NO_PUBKEY || rc==G10ERR_UNU_PUBKEY)
- {
- /* No, so try and get it */
- if(opt.keyserver_scheme &&
- opt.keyserver_options.auto_key_retrieve)
- {
- log_info(_("WARNING: key %08lX may be revoked: "
- "fetching revocation key %08lX\n"),
- (ulong)keyid_from_pk(pk,NULL),
- (ulong)keyid[1]);
- keyserver_import_fprint(sig->revkey[idx]->fpr,
- MAX_FINGERPRINT_LEN);
-
- /* Do we have it now? */
- rc=get_pubkey_byfprint(NULL,
- sig->revkey[idx]->fpr,
- MAX_FINGERPRINT_LEN);
- }
-
- if(rc==G10ERR_NO_PUBKEY || rc==G10ERR_UNU_PUBKEY)
- log_info(_("WARNING: key %08lX may be revoked: "
- "revocation key %08lX not present.\n"),
- (ulong)keyid_from_pk(pk,NULL),
- (ulong)keyid[1]);
- }
- }
- }
- }
- }
- }
-}
-
-/****************
- * compare and merge the blocks
- *
- * o compare the signatures: If we already have this signature, check
- * that they compare okay; if not, issue a warning and ask the user.
- * o Simply add the signature. Can't verify here because we may not have
- * the signature's public key yet; verification is done when putting it
- * into the trustdb, which is done automagically as soon as this pubkey
- * is used.
- * Note: We indicate newly inserted packets with flag bit 0
- */
-static int
-merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock,
- u32 *keyid, int *n_uids, int *n_sigs, int *n_subk )
-{
- KBNODE onode, node;
- int rc, found;
-
- /* 1st: handle revocation certificates */
- for(node=keyblock->next; node; node=node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID )
- break;
- else if( node->pkt->pkttype == PKT_SIGNATURE
- && node->pkt->pkt.signature->sig_class == 0x20 ) {
- /* check whether we already have this */
- found = 0;
- for(onode=keyblock_orig->next; onode; onode=onode->next ) {
- if( onode->pkt->pkttype == PKT_USER_ID )
- break;
- else if( onode->pkt->pkttype == PKT_SIGNATURE
- && onode->pkt->pkt.signature->sig_class == 0x20
- && node->pkt->pkt.signature->keyid[0]
- == onode->pkt->pkt.signature->keyid[0]
- && node->pkt->pkt.signature->keyid[1]
- == onode->pkt->pkt.signature->keyid[1] ) {
- found = 1;
- break;
- }
- }
- if( !found ) {
- char *p=get_user_id_printable (keyid);
- KBNODE n2 = clone_kbnode(node);
- insert_kbnode( keyblock_orig, n2, 0 );
- n2->flag |= 1;
- ++*n_sigs;
- log_info(_("key %08lX: \"%s\" revocation certificate added\n"),
- (ulong)keyid[1],p);
- m_free(p);
- }
- }
- }
-
- /* 2nd: merge in any direct key (0x1F) sigs */
- for(node=keyblock->next; node; node=node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID )
- break;
- else if( node->pkt->pkttype == PKT_SIGNATURE
- && node->pkt->pkt.signature->sig_class == 0x1F ) {
- /* check whether we already have this */
- found = 0;
- for(onode=keyblock_orig->next; onode; onode=onode->next ) {
- if( onode->pkt->pkttype == PKT_USER_ID )
- break;
- else if( onode->pkt->pkttype == PKT_SIGNATURE
- && onode->pkt->pkt.signature->sig_class == 0x1F
- && !cmp_signatures(onode->pkt->pkt.signature,
- node->pkt->pkt.signature)) {
- found = 1;
- break;
- }
- }
- if( !found ) {
- KBNODE n2 = clone_kbnode(node);
- insert_kbnode( keyblock_orig, n2, 0 );
- n2->flag |= 1;
- ++*n_sigs;
- log_info( _("key %08lX: direct key signature added\n"),
- (ulong)keyid[1]);
- }
- }
- }
-
- /* 3rd: try to merge new certificates in */
- for(onode=keyblock_orig->next; onode; onode=onode->next ) {
- if( !(onode->flag & 1) && onode->pkt->pkttype == PKT_USER_ID) {
- /* find the user id in the imported keyblock */
- for(node=keyblock->next; node; node=node->next )
- if( node->pkt->pkttype == PKT_USER_ID
- && !cmp_user_ids( onode->pkt->pkt.user_id,
- node->pkt->pkt.user_id ) )
- break;
- if( node ) { /* found: merge */
- rc = merge_sigs( onode, node, n_sigs, fname, keyid );
- if( rc )
- return rc;
- }
- }
- }
-
- /* 4th: add new user-ids */
- for(node=keyblock->next; node; node=node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID) {
- /* do we have this in the original keyblock */
- for(onode=keyblock_orig->next; onode; onode=onode->next )
- if( onode->pkt->pkttype == PKT_USER_ID
- && !cmp_user_ids( onode->pkt->pkt.user_id,
- node->pkt->pkt.user_id ) )
- break;
- if( !onode ) { /* this is a new user id: append */
- rc = append_uid( keyblock_orig, node, n_sigs, fname, keyid);
- if( rc )
- return rc;
- ++*n_uids;
- }
- }
- }
-
- /* 5th: add new subkeys */
- for(node=keyblock->next; node; node=node->next ) {
- onode = NULL;
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- /* do we have this in the original keyblock? */
- for(onode=keyblock_orig->next; onode; onode=onode->next )
- if( onode->pkt->pkttype == PKT_PUBLIC_SUBKEY
- && !cmp_public_keys( onode->pkt->pkt.public_key,
- node->pkt->pkt.public_key ) )
- break;
- if( !onode ) { /* this is a new subkey: append */
- rc = append_key( keyblock_orig, node, n_sigs, fname, keyid);
- if( rc )
- return rc;
- ++*n_subk;
- }
- }
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- /* do we have this in the original keyblock? */
- for(onode=keyblock_orig->next; onode; onode=onode->next )
- if( onode->pkt->pkttype == PKT_SECRET_SUBKEY
- && !cmp_secret_keys( onode->pkt->pkt.secret_key,
- node->pkt->pkt.secret_key ) )
- break;
- if( !onode ) { /* this is a new subkey: append */
- rc = append_key( keyblock_orig, node, n_sigs, fname, keyid);
- if( rc )
- return rc;
- ++*n_subk;
- }
- }
- }
-
- /* 6th: merge subkey certificates */
- for(onode=keyblock_orig->next; onode; onode=onode->next ) {
- if( !(onode->flag & 1)
- && ( onode->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || onode->pkt->pkttype == PKT_SECRET_SUBKEY) ) {
- /* find the subkey in the imported keyblock */
- for(node=keyblock->next; node; node=node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- && !cmp_public_keys( onode->pkt->pkt.public_key,
- node->pkt->pkt.public_key ) )
- break;
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY
- && !cmp_secret_keys( onode->pkt->pkt.secret_key,
- node->pkt->pkt.secret_key ) )
- break;
- }
- if( node ) { /* found: merge */
- rc = merge_keysigs( onode, node, n_sigs, fname, keyid );
- if( rc )
- return rc;
- }
- }
- }
-
-
- return 0;
-}
-
-
-/****************
- * append the userid starting with NODE and all signatures to KEYBLOCK.
- */
-static int
-append_uid( KBNODE keyblock, KBNODE node, int *n_sigs,
- const char *fname, u32 *keyid )
-{
- KBNODE n, n_where=NULL;
-
- assert(node->pkt->pkttype == PKT_USER_ID );
-
- /* find the position */
- for( n = keyblock; n; n_where = n, n = n->next ) {
- if( n->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || n->pkt->pkttype == PKT_SECRET_SUBKEY )
- break;
- }
- if( !n )
- n_where = NULL;
-
- /* and append/insert */
- while( node ) {
- /* we add a clone to the original keyblock, because this
- * one is released first */
- n = clone_kbnode(node);
- if( n_where ) {
- insert_kbnode( n_where, n, 0 );
- n_where = n;
- }
- else
- add_kbnode( keyblock, n );
- n->flag |= 1;
- node->flag |= 1;
- if( n->pkt->pkttype == PKT_SIGNATURE )
- ++*n_sigs;
-
- node = node->next;
- if( node && node->pkt->pkttype != PKT_SIGNATURE )
- break;
- }
-
- return 0;
-}
-
-
-/****************
- * Merge the sigs from SRC onto DST. SRC and DST are both a PKT_USER_ID.
- * (how should we handle comment packets here?)
- */
-static int
-merge_sigs( KBNODE dst, KBNODE src, int *n_sigs,
- const char *fname, u32 *keyid )
-{
- KBNODE n, n2;
- int found=0;
-
- assert(dst->pkt->pkttype == PKT_USER_ID );
- assert(src->pkt->pkttype == PKT_USER_ID );
-
- for(n=src->next; n && n->pkt->pkttype != PKT_USER_ID; n = n->next ) {
- if( n->pkt->pkttype != PKT_SIGNATURE )
- continue;
- if( n->pkt->pkt.signature->sig_class == 0x18
- || n->pkt->pkt.signature->sig_class == 0x28 )
- continue; /* skip signatures which are only valid on subkeys */
- found = 0;
- for(n2=dst->next; n2 && n2->pkt->pkttype != PKT_USER_ID; n2 = n2->next){
- if( n2->pkt->pkttype == PKT_SIGNATURE
- && n->pkt->pkt.signature->keyid[0]
- == n2->pkt->pkt.signature->keyid[0]
- && n->pkt->pkt.signature->keyid[1]
- == n2->pkt->pkt.signature->keyid[1]
- && n->pkt->pkt.signature->timestamp
- <= n2->pkt->pkt.signature->timestamp
- && n->pkt->pkt.signature->sig_class
- == n2->pkt->pkt.signature->sig_class ) {
- found++;
- break;
- }
- }
- if( !found ) {
- /* This signature is new or newer, append N to DST.
- * We add a clone to the original keyblock, because this
- * one is released first */
- n2 = clone_kbnode(n);
- insert_kbnode( dst, n2, PKT_SIGNATURE );
- n2->flag |= 1;
- n->flag |= 1;
- ++*n_sigs;
- }
- }
-
- return 0;
-}
-
-/****************
- * Merge the sigs from SRC onto DST. SRC and DST are both a PKT_xxx_SUBKEY.
- */
-static int
-merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs,
- const char *fname, u32 *keyid )
-{
- KBNODE n, n2;
- int found=0;
-
- assert( dst->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || dst->pkt->pkttype == PKT_SECRET_SUBKEY );
-
- for(n=src->next; n ; n = n->next ) {
- if( n->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || n->pkt->pkttype == PKT_PUBLIC_KEY )
- break;
- if( n->pkt->pkttype != PKT_SIGNATURE )
- continue;
- found = 0;
- for(n2=dst->next; n2; n2 = n2->next){
- if( n2->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || n2->pkt->pkttype == PKT_PUBLIC_KEY )
- break;
- if( n2->pkt->pkttype == PKT_SIGNATURE
- && n->pkt->pkt.signature->keyid[0]
- == n2->pkt->pkt.signature->keyid[0]
- && n->pkt->pkt.signature->keyid[1]
- == n2->pkt->pkt.signature->keyid[1]
- && n->pkt->pkt.signature->timestamp
- <= n2->pkt->pkt.signature->timestamp
- && n->pkt->pkt.signature->sig_class
- == n2->pkt->pkt.signature->sig_class ) {
- found++;
- break;
- }
- }
- if( !found ) {
- /* This signature is new or newer, append N to DST.
- * We add a clone to the original keyblock, because this
- * one is released first */
- n2 = clone_kbnode(n);
- insert_kbnode( dst, n2, PKT_SIGNATURE );
- n2->flag |= 1;
- n->flag |= 1;
- ++*n_sigs;
- }
- }
-
- return 0;
-}
-
-/****************
- * append the subkey starting with NODE and all signatures to KEYBLOCK.
- * Mark all new and copied packets by setting flag bit 0.
- */
-static int
-append_key( KBNODE keyblock, KBNODE node, int *n_sigs,
- const char *fname, u32 *keyid )
-{
- KBNODE n;
-
- assert( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY );
-
- while( node ) {
- /* we add a clone to the original keyblock, because this
- * one is released first */
- n = clone_kbnode(node);
- add_kbnode( keyblock, n );
- n->flag |= 1;
- node->flag |= 1;
- if( n->pkt->pkttype == PKT_SIGNATURE )
- ++*n_sigs;
-
- node = node->next;
- if( node && node->pkt->pkttype != PKT_SIGNATURE )
- break;
- }
-
- return 0;
-}
diff --git a/g10/kbnode.c b/g10/kbnode.c
deleted file mode 100644
index 06d28f844..000000000
--- a/g10/kbnode.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* kbnode.c - keyblock node utility functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "packet.h"
-#include "keydb.h"
-
-#define USE_UNUSED_NODES 1
-
-static KBNODE unused_nodes;
-
-static KBNODE
-alloc_node(void)
-{
- KBNODE n;
-
- n = unused_nodes;
- if( n )
- unused_nodes = n->next;
- else
- n = m_alloc( sizeof *n );
- n->next = NULL;
- n->pkt = NULL;
- n->flag = 0;
- n->private_flag=0;
- n->recno = 0;
- return n;
-}
-
-static void
-free_node( KBNODE n )
-{
- if( n ) {
- #if USE_UNUSED_NODES
- n->next = unused_nodes;
- unused_nodes = n;
- #else
- m_free( n );
- #endif
- }
-}
-
-
-
-KBNODE
-new_kbnode( PACKET *pkt )
-{
- KBNODE n = alloc_node();
- n->pkt = pkt;
- return n;
-}
-
-
-KBNODE
-clone_kbnode( KBNODE node )
-{
- KBNODE n = alloc_node();
-
- n->pkt = node->pkt;
- n->private_flag = node->private_flag | 2; /* mark cloned */
- return n;
-}
-
-
-void
-release_kbnode( KBNODE n )
-{
- KBNODE n2;
-
- while( n ) {
- n2 = n->next;
- if( !is_cloned_kbnode(n) ) {
- free_packet( n->pkt );
- m_free( n->pkt );
- }
- free_node( n );
- n = n2;
- }
-}
-
-
-/****************
- * Delete NODE.
- * Note: This only works with walk_kbnode!!
- */
-void
-delete_kbnode( KBNODE node )
-{
- node->private_flag |= 1;
-}
-
-
-
-/****************
- * Append NODE to ROOT. ROOT must exist!
- */
-void
-add_kbnode( KBNODE root, KBNODE node )
-{
- KBNODE n1;
-
- for(n1=root; n1->next; n1 = n1->next)
- ;
- n1->next = node;
-}
-
-/****************
- * Insert NODE into the list after root but before a packet which is not of
- * type PKTTYPE
- * (only if PKTTYPE != 0)
- */
-void
-insert_kbnode( KBNODE root, KBNODE node, int pkttype )
-{
- if( !pkttype ) {
- node->next = root->next;
- root->next = node;
- }
- else {
- KBNODE n1;
-
- for(n1=root; n1->next; n1 = n1->next)
- if( pkttype != n1->next->pkt->pkttype ) {
- node->next = n1->next;
- n1->next = node;
- return;
- }
- /* no such packet, append */
- node->next = NULL;
- n1->next = node;
- }
-}
-
-
-/****************
- * Find the previous node (if PKTTYPE = 0) or the previous node
- * with pkttype PKTTYPE in the list starting with ROOT of NODE.
- */
-KBNODE
-find_prev_kbnode( KBNODE root, KBNODE node, int pkttype )
-{
- KBNODE n1;
-
- for (n1=NULL; root && root != node; root = root->next ) {
- if (!pkttype ||root->pkt->pkttype == pkttype)
- n1 = root;
- }
- return n1;
-}
-
-/****************
- * Ditto, but find the next packet. The behaviour is trivial if
- * PKTTYPE is 0 but if it is specified, the next node with a packet
- * of this type is returned. The function has some knowledge about
- * the valid ordering of packets: e.g. if the next signature packet
- * is requested, the function will not return one if it encounters
- * a user-id.
- */
-KBNODE
-find_next_kbnode( KBNODE node, int pkttype )
-{
- for( node=node->next ; node; node = node->next ) {
- if( !pkttype )
- return node;
- else if( pkttype == PKT_USER_ID
- && ( node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_SECRET_KEY ) )
- return NULL;
- else if( pkttype == PKT_SIGNATURE
- && ( node->pkt->pkttype == PKT_USER_ID
- || node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_SECRET_KEY ) )
- return NULL;
- else if( node->pkt->pkttype == pkttype )
- return node;
- }
- return NULL;
-}
-
-
-KBNODE
-find_kbnode( KBNODE node, int pkttype )
-{
- for( ; node; node = node->next ) {
- if( node->pkt->pkttype == pkttype )
- return node;
- }
- return NULL;
-}
-
-
-
-/****************
- * Walk through a list of kbnodes. This function returns
- * the next kbnode for each call; before using the function the first
- * time, the caller must set CONTEXT to NULL (This has simply the effect
- * to start with ROOT).
- */
-KBNODE
-walk_kbnode( KBNODE root, KBNODE *context, int all )
-{
- KBNODE n;
-
- do {
- if( !*context ) {
- *context = root;
- n = root;
- }
- else {
- n = (*context)->next;
- *context = n;
- }
- } while( !all && n && is_deleted_kbnode(n) );
-
- return n;
-}
-
-void
-clear_kbnode_flags( KBNODE n )
-{
- for( ; n; n = n->next ) {
- n->flag = 0;
- }
-}
-
-
-/****************
- * Commit changes made to the kblist at ROOT. Note that ROOT my change,
- * and it is therefore passed by reference.
- * The function has the effect of removing all nodes marked as deleted.
- * returns true if any node has been changed
- */
-int
-commit_kbnode( KBNODE *root )
-{
- KBNODE n, nl;
- int changed = 0;
-
- for( n = *root, nl=NULL; n; n = nl->next ) {
- if( is_deleted_kbnode(n) ) {
- if( n == *root )
- *root = nl = n->next;
- else
- nl->next = n->next;
- if( !is_cloned_kbnode(n) ) {
- free_packet( n->pkt );
- m_free( n->pkt );
- }
- free_node( n );
- changed = 1;
- }
- else
- nl = n;
- }
- return changed;
-}
-
-void
-remove_kbnode( KBNODE *root, KBNODE node )
-{
- KBNODE n, nl;
-
- for( n = *root, nl=NULL; n; n = nl->next ) {
- if( n == node ) {
- if( n == *root )
- *root = nl = n->next;
- else
- nl->next = n->next;
- if( !is_cloned_kbnode(n) ) {
- free_packet( n->pkt );
- m_free( n->pkt );
- }
- free_node( n );
- }
- else
- nl = n;
- }
-}
-
-
-/****************
- * Move NODE behind right after WHERE or to the beginning if WHERE is NULL.
- */
-void
-move_kbnode( KBNODE *root, KBNODE node, KBNODE where )
-{
- KBNODE tmp, prev;
-
- if( !root || !*root || !node )
- return; /* sanity check */
- for( prev = *root; prev && prev->next != node; prev = prev->next )
- ;
- if( !prev )
- return; /* node is not in the list */
-
- if( !where ) { /* move node before root */
- if( node == *root ) /* move to itself */
- return;
- prev->next = node->next;
- node->next = *root;
- *root = node;
- return;
- }
- /* move it after where */
- if( node == where )
- return;
- tmp = node->next;
- node->next = where->next;
- where->next = node;
- prev->next = tmp;
-}
-
-
-
-
-void
-dump_kbnode( KBNODE node )
-{
- for(; node; node = node->next ) {
- const char *s;
- switch( node->pkt->pkttype ) {
- case 0: s="empty"; break;
- case PKT_PUBLIC_KEY: s="public-key"; break;
- case PKT_SECRET_KEY: s="secret-key"; break;
- case PKT_SECRET_SUBKEY: s= "secret-subkey"; break;
- case PKT_PUBKEY_ENC: s="public-enc"; break;
- case PKT_SIGNATURE: s="signature"; break;
- case PKT_ONEPASS_SIG: s="onepass-sig"; break;
- case PKT_USER_ID: s="user-id"; break;
- case PKT_PUBLIC_SUBKEY: s="public-subkey"; break;
- case PKT_COMMENT: s="comment"; break;
- case PKT_RING_TRUST: s="trust"; break;
- case PKT_PLAINTEXT: s="plaintext"; break;
- case PKT_COMPRESSED: s="compressed"; break;
- case PKT_ENCRYPTED: s="encrypted"; break;
- case PKT_GPG_CONTROL: s="gpg-control"; break;
- default: s="unknown"; break;
- }
- fprintf(stderr, "node %p %02x/%02x type=%s",
- node, node->flag, node->private_flag, s);
- if( node->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- fputs(" \"", stderr);
- print_string( stderr, uid->name, uid->len, 0 );
- fprintf (stderr, "\" %c%c%c%c\n",
- uid->is_expired? 'e':'.',
- uid->is_revoked? 'r':'.',
- uid->created? 'v':'.',
- uid->is_primary? 'p':'.' );
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE ) {
- fprintf(stderr, " class=%02x keyid=%08lX ts=%lu\n",
- node->pkt->pkt.signature->sig_class,
- (ulong)node->pkt->pkt.signature->keyid[1],
- (ulong)node->pkt->pkt.signature->timestamp);
- }
- else if( node->pkt->pkttype == PKT_GPG_CONTROL ) {
- fprintf(stderr, " ctrl=%d len=%u\n",
- node->pkt->pkt.gpg_control->control,
- (unsigned int)node->pkt->pkt.gpg_control->datalen);
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- PKT_public_key *pk = node->pkt->pkt.public_key;
- fprintf(stderr, " keyid=%08lX a=%d u=%d %c%c%c%c\n",
- (ulong)keyid_from_pk( pk, NULL ),
- pk->pubkey_algo, pk->pubkey_usage,
- pk->has_expired? 'e':'.',
- pk->is_revoked? 'r':'.',
- pk->is_valid? 'v':'.',
- pk->mdc_feature? 'm':'.');
- }
- else
- fputs("\n", stderr);
- }
-}
diff --git a/g10/keydb.c b/g10/keydb.c
deleted file mode 100644
index d8dd83fe6..000000000
--- a/g10/keydb.c
+++ /dev/null
@@ -1,686 +0,0 @@
-/* keydb.c - key database dispatcher
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include "util.h"
-#include "options.h"
-#include "main.h" /*try_make_homedir ()*/
-#include "packet.h"
-#include "keyring.h"
-#include "keydb.h"
-#include "i18n.h"
-
-static int active_handles;
-
-typedef enum {
- KEYDB_RESOURCE_TYPE_NONE = 0,
- KEYDB_RESOURCE_TYPE_KEYRING
-} KeydbResourceType;
-#define MAX_KEYDB_RESOURCES 20
-
-struct resource_item {
- KeydbResourceType type;
- union {
- KEYRING_HANDLE kr;
- } u;
- void *token;
- int secret;
-};
-
-static struct resource_item all_resources[MAX_KEYDB_RESOURCES];
-static int used_resources;
-
-struct keydb_handle {
- int locked;
- int found;
- int current;
- int used; /* items in active */
- struct resource_item active[MAX_KEYDB_RESOURCES];
-};
-
-
-static int lock_all (KEYDB_HANDLE hd);
-static void unlock_all (KEYDB_HANDLE hd);
-
-
-/*
- * Register a resource (which currently may only be a keyring file).
- * The first keyring which is added by this function is
- * created if it does not exist.
- * Note: this function may be called before secure memory is
- * available.
- */
-int
-keydb_add_resource (const char *url, int force, int secret)
-{
- static int any_secret, any_public;
- const char *resname = url;
- IOBUF iobuf = NULL;
- char *filename = NULL;
- int rc = 0;
- KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE;
- void *token;
-
- /* Do we have an URL?
- * gnupg-ring:filename := this is a plain keyring
- * filename := See what is is, but create as plain keyring.
- */
- if (strlen (resname) > 11) {
- if (!strncmp( resname, "gnupg-ring:", 11) ) {
- rt = KEYDB_RESOURCE_TYPE_KEYRING;
- resname += 11;
- }
- #if !defined(HAVE_DRIVE_LETTERS) && !defined(__riscos__)
- else if (strchr (resname, ':')) {
- log_error ("invalid key resource URL `%s'\n", url );
- rc = G10ERR_GENERAL;
- goto leave;
- }
- #endif /* !HAVE_DRIVE_LETTERS && !__riscos__ */
- }
-
- if (*resname != DIRSEP_C ) { /* do tilde expansion etc */
- if (strchr(resname, DIRSEP_C) )
- filename = make_filename (resname, NULL);
- else
- filename = make_filename (opt.homedir, resname, NULL);
- }
- else
- filename = m_strdup (resname);
-
- if (!force)
- force = secret? !any_secret : !any_public;
-
- /* see whether we can determine the filetype */
- if (rt == KEYDB_RESOURCE_TYPE_NONE) {
- FILE *fp = fopen( filename, "rb" );
-
- if (fp) {
- u32 magic;
-
- if (fread( &magic, 4, 1, fp) == 1 ) {
- if (magic == 0x13579ace || magic == 0xce9a5713)
- ; /* GDBM magic - no more support */
- else
- rt = KEYDB_RESOURCE_TYPE_KEYRING;
- }
- else /* maybe empty: assume ring */
- rt = KEYDB_RESOURCE_TYPE_KEYRING;
- fclose( fp );
- }
- else /* no file yet: create ring */
- rt = KEYDB_RESOURCE_TYPE_KEYRING;
- }
-
- switch (rt) {
- case KEYDB_RESOURCE_TYPE_NONE:
- log_error ("unknown type of key resource `%s'\n", url );
- rc = G10ERR_GENERAL;
- goto leave;
-
- case KEYDB_RESOURCE_TYPE_KEYRING:
- if (access(filename, F_OK))
- { /* file does not exist */
- mode_t oldmask;
- char *last_slash_in_filename;
-
- if (!force)
- {
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
-
- last_slash_in_filename = strrchr (filename, DIRSEP_C);
- *last_slash_in_filename = 0;
- if (access(filename, F_OK))
- { /* on the first time we try to create the default
- homedir and in this case the process will be
- terminated, so that on the next invocation it can
- read the options file in on startup */
- try_make_homedir (filename);
- rc = G10ERR_OPEN_FILE;
- *last_slash_in_filename = DIRSEP_C;
- goto leave;
- }
- *last_slash_in_filename = DIRSEP_C;
-
- oldmask=umask(077);
- iobuf = iobuf_create (filename);
- umask(oldmask);
- if (!iobuf)
- {
- log_error ( _("error creating keyring `%s': %s\n"),
- filename, strerror(errno));
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
-
- if (!opt.quiet)
- log_info (_("keyring `%s' created\n"), filename);
- iobuf_close (iobuf);
- iobuf = NULL;
- /* must invalidate that ugly cache */
- iobuf_ioctl (NULL, 2, 0, (char*)filename);
- } /* end file creation */
-
- token = keyring_register_filename (filename, secret);
- if (!token)
- ; /* already registered - ignore it */
- else if (used_resources >= MAX_KEYDB_RESOURCES)
- rc = G10ERR_RESOURCE_LIMIT;
- else
- {
- all_resources[used_resources].type = rt;
- all_resources[used_resources].u.kr = NULL; /* Not used here */
- all_resources[used_resources].token = token;
- all_resources[used_resources].secret = secret;
- used_resources++;
- }
- break;
-
- default:
- log_error ("resource type of `%s' not supported\n", url);
- rc = G10ERR_GENERAL;
- goto leave;
- }
-
- /* fixme: check directory permissions and print a warning */
-
- leave:
- if (rc)
- log_error ("keyblock resource `%s': %s\n", filename, g10_errstr(rc));
- else if (secret)
- any_secret = 1;
- else
- any_public = 1;
- m_free (filename);
- return rc;
-}
-
-
-
-
-KEYDB_HANDLE
-keydb_new (int secret)
-{
- KEYDB_HANDLE hd;
- int i, j;
-
- hd = m_alloc_clear (sizeof *hd);
- hd->found = -1;
-
- assert (used_resources <= MAX_KEYDB_RESOURCES);
- for (i=j=0; i < used_resources; i++)
- {
- if (!all_resources[i].secret != !secret)
- continue;
- switch (all_resources[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE: /* ignore */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- hd->active[j].type = all_resources[i].type;
- hd->active[j].token = all_resources[i].token;
- hd->active[j].secret = all_resources[i].secret;
- hd->active[j].u.kr = keyring_new (all_resources[i].token, secret);
- if (!hd->active[j].u.kr) {
- m_free (hd);
- return NULL; /* fixme: release all previously allocated handles*/
- }
- j++;
- break;
- }
- }
- hd->used = j;
-
- active_handles++;
- return hd;
-}
-
-void
-keydb_release (KEYDB_HANDLE hd)
-{
- int i;
-
- if (!hd)
- return;
- assert (active_handles > 0);
- active_handles--;
-
- unlock_all (hd);
- for (i=0; i < hd->used; i++) {
- switch (hd->active[i].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- keyring_release (hd->active[i].u.kr);
- break;
- }
- }
-
- m_free (hd);
-}
-
-
-/*
- * Return the name of the current resource. This is function first
- * looks for the last found found, then for the current search
- * position, and last returns the first available resource. The
- * returned string is only valid as long as the handle exists. This
- * function does only return NULL if no handle is specified, in all
- * other error cases an empty string is returned.
- */
-const char *
-keydb_get_resource_name (KEYDB_HANDLE hd)
-{
- int idx;
- const char *s = NULL;
-
- if (!hd)
- return NULL;
-
- if ( hd->found >= 0 && hd->found < hd->used)
- idx = hd->found;
- else if ( hd->current >= 0 && hd->current < hd->used)
- idx = hd->current;
- else
- idx = 0;
-
- switch (hd->active[idx].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- s = NULL;
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- s = keyring_get_resource_name (hd->active[idx].u.kr);
- break;
- }
-
- return s? s: "";
-}
-
-
-
-static int
-lock_all (KEYDB_HANDLE hd)
-{
- int i, rc = 0;
-
- for (i=0; !rc && i < hd->used; i++) {
- switch (hd->active[i].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_lock (hd->active[i].u.kr, 1);
- break;
- }
- }
-
- if (rc) {
- /* revert the already set locks */
- for (i--; i >= 0; i--) {
- switch (hd->active[i].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- keyring_lock (hd->active[i].u.kr, 0);
- break;
- }
- }
- }
- else
- hd->locked = 1;
-
- return rc;
-}
-
-static void
-unlock_all (KEYDB_HANDLE hd)
-{
- int i;
-
- if (!hd->locked)
- return;
-
- for (i=hd->used-1; i >= 0; i--) {
- switch (hd->active[i].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- keyring_lock (hd->active[i].u.kr, 0);
- break;
- }
- }
- hd->locked = 0;
-}
-
-
-/*
- * Return the last found keyring. Caller must free it.
- * The returned keyblock has the kbode flag bit 0 set for the node with
- * the public key used to locate the keyblock or flag bit 1 set for
- * the user ID node.
- */
-int
-keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb)
-{
- int rc = 0;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- switch (hd->active[hd->found].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_get_keyblock (hd->active[hd->found].u.kr, ret_kb);
- break;
- }
-
- return rc;
-}
-
-/*
- * update the current keyblock with KB
- */
-int
-keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb)
-{
- int rc = 0;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- if( opt.dry_run )
- return 0;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- switch (hd->active[hd->found].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_update_keyblock (hd->active[hd->found].u.kr, kb);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-/*
- * Insert a new KB into one of the resources.
- */
-int
-keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb)
-{
- int rc = -1;
- int idx;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if( opt.dry_run )
- return 0;
-
- if ( hd->found >= 0 && hd->found < hd->used)
- idx = hd->found;
- else if ( hd->current >= 0 && hd->current < hd->used)
- idx = hd->current;
- else
- return G10ERR_GENERAL;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- switch (hd->active[idx].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_insert_keyblock (hd->active[idx].u.kr, kb);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-/*
- * The current keyblock will be deleted.
- */
-int
-keydb_delete_keyblock (KEYDB_HANDLE hd)
-{
- int rc = -1;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- if( opt.dry_run )
- return 0;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- switch (hd->active[hd->found].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_delete_keyblock (hd->active[hd->found].u.kr);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-/*
- * Locate the default writable key resource, so that the next
- * operation (which is only relevant for inserts) will be done on this
- * resource.
- */
-int
-keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved)
-{
- int rc;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- rc = keydb_search_reset (hd); /* this does reset hd->current */
- if (rc)
- return rc;
-
- for ( ; hd->current >= 0 && hd->current < hd->used; hd->current++)
- {
- switch (hd->active[hd->current].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- BUG();
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- if (keyring_is_writable (hd->active[hd->current].token))
- return 0; /* found (hd->current is set to it) */
- break;
- }
- }
-
- return -1;
-}
-
-/*
- * Rebuild the caches of all key resources.
- */
-void
-keydb_rebuild_caches (void)
-{
- int i, rc;
-
- for (i=0; i < used_resources; i++)
- {
- if (all_resources[i].secret)
- continue;
- switch (all_resources[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE: /* ignore */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_rebuild_cache (all_resources[i].token);
- if (rc)
- log_error (_("failed to rebuild keyring cache: %s\n"),
- g10_errstr (rc));
- break;
- }
- }
-}
-
-
-
-/*
- * Start the next search on this handle right at the beginning
- */
-int
-keydb_search_reset (KEYDB_HANDLE hd)
-{
- int i, rc = 0;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- hd->current = 0;
- hd->found = -1;
- /* and reset all resources */
- for (i=0; !rc && i < hd->used; i++) {
- switch (hd->active[i].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_search_reset (hd->active[i].u.kr);
- break;
- }
- }
- return rc;
-}
-
-
-/*
- * Search through all keydb resources, starting at the current position,
- * for a keyblock which contains one of the keys described in the DESC array.
- */
-int
-keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc)
-{
- int rc = -1;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- while (rc == -1 && hd->current >= 0 && hd->current < hd->used) {
- switch (hd->active[hd->current].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- BUG(); /* we should never see it here */
- break;
- case KEYDB_RESOURCE_TYPE_KEYRING:
- rc = keyring_search (hd->active[hd->current].u.kr, desc, ndesc);
- break;
- }
- if (rc == -1) /* EOF -> switch to next resource */
- hd->current++;
- else if (!rc)
- hd->found = hd->current;
- }
-
- return rc;
-}
-
-
-int
-keydb_search_first (KEYDB_HANDLE hd)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FIRST;
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_next (KEYDB_HANDLE hd)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_NEXT;
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_kid (KEYDB_HANDLE hd, u32 *kid)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_LONG_KID;
- desc.u.kid[0] = kid[0];
- desc.u.kid[1] = kid[1];
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FPR;
- memcpy (desc.u.fpr, fpr, MAX_FINGERPRINT_LEN);
- return keydb_search (hd, &desc, 1);
-}
-
-
-
diff --git a/g10/keydb.h b/g10/keydb.h
deleted file mode 100644
index ea9e48e6d..000000000
--- a/g10/keydb.h
+++ /dev/null
@@ -1,265 +0,0 @@
-/* keydb.h - Key database
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef G10_KEYDB_H
-#define G10_KEYDB_H
-
-#include "types.h"
-#include "global.h"
-#include "packet.h"
-#include "cipher.h"
-
-/* What qualifies as a certification (rather than a signature?) */
-#define IS_SIG(s) (((s)->sig_class==0x00) || ((s)->sig_class==0x01) || \
- ((s)->sig_class==0x02) || ((s)->sig_class==0x40))
-#define IS_CERT(s) (!IS_SIG(s))
-
-#define IS_KEY_SIG(s) ((s)->sig_class == 0x1f)
-#define IS_UID_SIG(s) (((s)->sig_class & ~3) == 0x10)
-#define IS_SUBKEY_SIG(s) ((s)->sig_class == 0x18)
-#define IS_KEY_REV(s) ((s)->sig_class == 0x20)
-#define IS_UID_REV(s) ((s)->sig_class == 0x30)
-#define IS_SUBKEY_REV(s) ((s)->sig_class == 0x28)
-
-
-struct getkey_ctx_s;
-typedef struct getkey_ctx_s *GETKEY_CTX;
-
-/****************
- * A Keyblock is all packets which form an entire certificate;
- * i.e. the public key, certificate, trust packets, user ids,
- * signatures, and subkey.
- *
- * This structure is also used to bind arbitrary packets together.
- */
-
-struct kbnode_struct {
- KBNODE next;
- PACKET *pkt;
- int flag;
- int private_flag;
- ulong recno; /* used while updating the trustdb */
-};
-
-#define is_deleted_kbnode(a) ((a)->private_flag & 1)
-#define is_cloned_kbnode(a) ((a)->private_flag & 2)
-
-
-enum resource_type {
- rt_UNKNOWN = 0,
- rt_RING = 1
-};
-
-
-/****************
- * A data structre to hold information about the external position
- * of a keyblock.
- */
-struct keyblock_pos_struct {
- int resno; /* resource number */
- enum resource_type rt;
- off_t offset; /* position information */
- unsigned count; /* length of the keyblock in packets */
- IOBUF fp; /* used by enum_keyblocks */
- int secret; /* working on a secret keyring */
- PACKET *pkt; /* ditto */
- int valid;
-};
-typedef struct keyblock_pos_struct KBPOS;
-
-/* structure to hold a couple of public key certificates */
-typedef struct pk_list *PK_LIST;
-struct pk_list {
- PK_LIST next;
- PKT_public_key *pk;
- int mark;
-};
-
-/* structure to hold a couple of secret key certificates */
-typedef struct sk_list *SK_LIST;
-struct sk_list {
- SK_LIST next;
- PKT_secret_key *sk;
- int mark;
-};
-
-/* structure to collect all information which can be used to
- * identify a public key */
-typedef struct pubkey_find_info *PUBKEY_FIND_INFO;
-struct pubkey_find_info {
- u32 keyid[2];
- unsigned nbits;
- byte pubkey_algo;
- byte fingerprint[MAX_FINGERPRINT_LEN];
- char userid[1];
-};
-
-
-typedef struct keydb_handle *KEYDB_HANDLE;
-
-typedef enum {
- KEYDB_SEARCH_MODE_NONE,
- KEYDB_SEARCH_MODE_EXACT,
- KEYDB_SEARCH_MODE_SUBSTR,
- KEYDB_SEARCH_MODE_MAIL,
- KEYDB_SEARCH_MODE_MAILSUB,
- KEYDB_SEARCH_MODE_MAILEND,
- KEYDB_SEARCH_MODE_WORDS,
- KEYDB_SEARCH_MODE_SHORT_KID,
- KEYDB_SEARCH_MODE_LONG_KID,
- KEYDB_SEARCH_MODE_FPR16,
- KEYDB_SEARCH_MODE_FPR20,
- KEYDB_SEARCH_MODE_FPR,
- KEYDB_SEARCH_MODE_FIRST,
- KEYDB_SEARCH_MODE_NEXT
-} KeydbSearchMode;
-
-struct keydb_search_desc {
- KeydbSearchMode mode;
- int (*skipfnc)(void *,u32*);
- void *skipfncvalue;
- union {
- const char *name;
- char fpr[MAX_FINGERPRINT_LEN];
- u32 kid[2];
- } u;
-};
-
-/*-- keydb.c --*/
-int keydb_add_resource (const char *url, int force, int secret);
-KEYDB_HANDLE keydb_new (int secret);
-void keydb_release (KEYDB_HANDLE hd);
-const char *keydb_get_resource_name (KEYDB_HANDLE hd);
-int keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb);
-int keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb);
-int keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb);
-int keydb_delete_keyblock (KEYDB_HANDLE hd);
-int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved);
-void keydb_rebuild_caches (void);
-int keydb_search_reset (KEYDB_HANDLE hd);
-int keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc);
-int keydb_search_first (KEYDB_HANDLE hd);
-int keydb_search_next (KEYDB_HANDLE hd);
-int keydb_search_kid (KEYDB_HANDLE hd, u32 *kid);
-int keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr);
-
-
-/*-- pkclist.c --*/
-void show_revocation_reason( PKT_public_key *pk, int mode );
-int check_signatures_trust( PKT_signature *sig );
-void release_pk_list( PK_LIST pk_list );
-int build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use );
-int select_algo_from_prefs( PK_LIST pk_list, int preftype,
- int request, void *hint );
-int select_mdc_from_pklist (PK_LIST pk_list);
-
-/*-- skclist.c --*/
-void release_sk_list( SK_LIST sk_list );
-int build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list,
- int unlock, unsigned use );
-
-/*-- passphrase.h --*/
-int have_static_passphrase(void);
-void read_passphrase_from_fd( int fd );
-void passphrase_clear_cache ( u32 *keyid, int algo );
-DEK *passphrase_to_dek( u32 *keyid, int pubkey_algo,
- int cipher_algo, STRING2KEY *s2k, int mode,
- const char *tryagain_text);
-void set_next_passphrase( const char *s );
-char *get_last_passphrase(void);
-
-/*-- getkey.c --*/
-int classify_user_id( const char *name, KEYDB_SEARCH_DESC *desc);
-void cache_public_key( PKT_public_key *pk );
-void getkey_disable_caches(void);
-int get_pubkey( PKT_public_key *pk, u32 *keyid );
-KBNODE get_pubkeyblock( u32 *keyid );
-int get_pubkey_byname( PKT_public_key *pk, const char *name,
- KBNODE *ret_keyblock, KEYDB_HANDLE *ret_kdbhd);
-int get_pubkey_bynames( GETKEY_CTX *rx, PKT_public_key *pk,
- STRLIST names, KBNODE *ret_keyblock );
-int get_pubkey_next( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE *ret_keyblock );
-void get_pubkey_end( GETKEY_CTX ctx );
-int get_seckey( PKT_secret_key *sk, u32 *keyid );
-int get_primary_seckey( PKT_secret_key *sk, u32 *keyid );
-int get_pubkey_byfprint( PKT_public_key *pk, const byte *fprint,
- size_t fprint_len );
-int get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint,
- size_t fprint_len );
-int get_keyblock_bylid( KBNODE *ret_keyblock, ulong lid );
-int seckey_available( u32 *keyid );
-int get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock );
-int get_seckey_bynames( GETKEY_CTX *rx, PKT_secret_key *sk,
- STRLIST names, KBNODE *ret_keyblock );
-int get_seckey_byfprint( PKT_secret_key *sk,
- const byte *fprint, size_t fprint_len);
-int get_seckey_next( GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE *ret_keyblock );
-void get_seckey_end( GETKEY_CTX ctx );
-int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys );
-void merge_keys_and_selfsig( KBNODE keyblock );
-char*get_user_id_string( u32 *keyid );
-char*get_user_id_string_printable( u32 *keyid );
-char*get_long_user_id_string( u32 *keyid );
-char*get_user_id( u32 *keyid, size_t *rn );
-char*get_user_id_printable( u32 *keyid );
-KEYDB_HANDLE get_ctx_handle(GETKEY_CTX ctx);
-
-/*-- keyid.c --*/
-int pubkey_letter( int algo );
-u32 keyid_from_sk( PKT_secret_key *sk, u32 *keyid );
-u32 keyid_from_pk( PKT_public_key *pk, u32 *keyid );
-u32 keyid_from_sig( PKT_signature *sig, u32 *keyid );
-u32 keyid_from_fingerprint( const byte *fprint, size_t fprint_len, u32 *keyid );
-unsigned nbits_from_pk( PKT_public_key *pk );
-unsigned nbits_from_sk( PKT_secret_key *sk );
-const char *datestr_from_pk( PKT_public_key *pk );
-const char *datestr_from_sk( PKT_secret_key *sk );
-const char *datestr_from_sig( PKT_signature *sig );
-const char *expirestr_from_pk( PKT_public_key *pk );
-const char *expirestr_from_sk( PKT_secret_key *sk );
-const char *expirestr_from_sig( PKT_signature *sig );
-
-const char *colon_strtime (u32 t);
-const char *colon_datestr_from_pk (PKT_public_key *pk);
-const char *colon_datestr_from_sk (PKT_secret_key *sk);
-const char *colon_datestr_from_sig (PKT_signature *sig);
-const char *colon_expirestr_from_sig (PKT_signature *sig);
-
-byte *fingerprint_from_sk( PKT_secret_key *sk, byte *buf, size_t *ret_len );
-byte *fingerprint_from_pk( PKT_public_key *pk, byte *buf, size_t *ret_len );
-
-/*-- kbnode.c --*/
-KBNODE new_kbnode( PACKET *pkt );
-KBNODE clone_kbnode( KBNODE node );
-void release_kbnode( KBNODE n );
-void delete_kbnode( KBNODE node );
-void add_kbnode( KBNODE root, KBNODE node );
-void insert_kbnode( KBNODE root, KBNODE node, int pkttype );
-void move_kbnode( KBNODE *root, KBNODE node, KBNODE where );
-void remove_kbnode( KBNODE *root, KBNODE node );
-KBNODE find_prev_kbnode( KBNODE root, KBNODE node, int pkttype );
-KBNODE find_next_kbnode( KBNODE node, int pkttype );
-KBNODE find_kbnode( KBNODE node, int pkttype );
-KBNODE walk_kbnode( KBNODE root, KBNODE *context, int all );
-void clear_kbnode_flags( KBNODE n );
-int commit_kbnode( KBNODE *root );
-void dump_kbnode( KBNODE node );
-
-#endif /*G10_KEYDB_H*/
diff --git a/g10/keyedit.c b/g10/keyedit.c
deleted file mode 100644
index 71d2858b7..000000000
--- a/g10/keyedit.c
+++ /dev/null
@@ -1,3281 +0,0 @@
-/* keyedit.c - keyedit stuff
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "photoid.h"
-#include "util.h"
-#include "main.h"
-#include "trustdb.h"
-#include "filter.h"
-#include "ttyio.h"
-#include "status.h"
-#include "i18n.h"
-
-static void show_prefs( PKT_user_id *uid, int verbose );
-static void show_key_with_all_names( KBNODE keyblock, int only_marked,
- int with_revoker, int with_fpr, int with_subkeys, int with_prefs );
-static void show_key_and_fingerprint( KBNODE keyblock );
-static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock, int photo );
-static void menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock );
-static int menu_delsig( KBNODE pub_keyblock );
-static void menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock );
-static int menu_addrevoker( KBNODE pub_keyblock,
- KBNODE sec_keyblock, int sensitive );
-static int menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock );
-static int menu_set_primary_uid( KBNODE pub_keyblock, KBNODE sec_keyblock );
-static int menu_set_preferences( KBNODE pub_keyblock, KBNODE sec_keyblock );
-static int menu_select_uid( KBNODE keyblock, int idx );
-static int menu_select_key( KBNODE keyblock, int idx );
-static int count_uids( KBNODE keyblock );
-static int count_uids_with_flag( KBNODE keyblock, unsigned flag );
-static int count_keys_with_flag( KBNODE keyblock, unsigned flag );
-static int count_selected_uids( KBNODE keyblock );
-static int real_uids_left( KBNODE keyblock );
-static int count_selected_keys( KBNODE keyblock );
-static int menu_revsig( KBNODE keyblock );
-static int menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock );
-static int enable_disable_key( KBNODE keyblock, int disable );
-static void menu_showphoto( KBNODE keyblock );
-
-static int update_trust=0;
-
-#define CONTROL_D ('D' - 'A' + 1)
-
-#define NODFLG_BADSIG (1<<0) /* bad signature */
-#define NODFLG_NOKEY (1<<1) /* no public key */
-#define NODFLG_SIGERR (1<<2) /* other sig error */
-
-#define NODFLG_MARK_A (1<<4) /* temporary mark */
-#define NODFLG_DELSIG (1<<5) /* to be deleted */
-
-#define NODFLG_SELUID (1<<8) /* indicate the selected userid */
-#define NODFLG_SELKEY (1<<9) /* indicate the selected key */
-#define NODFLG_SELSIG (1<<10) /* indicate a selected signature */
-
-struct sign_attrib {
- int non_exportable,non_revocable;
- struct revocation_reason_info *reason;
-};
-
-/****************
- * Print information about a signature, check it and return true
- * if the signature is okay. NODE must be a signature packet.
- */
-static int
-print_and_check_one_sig( KBNODE keyblock, KBNODE node,
- int *inv_sigs, int *no_key, int *oth_err,
- int *is_selfsig, int print_without_key )
-{
- PKT_signature *sig = node->pkt->pkt.signature;
- int rc, sigrc;
- int is_rev = sig->sig_class == 0x30;
-
- /* TODO: Make sure a cached sig record here still has the pk that
- issued it. See also keylist.c:list_keyblock_print */
-
- switch( (rc = check_key_signature( keyblock, node, is_selfsig)) ) {
- case 0:
- node->flag &= ~(NODFLG_BADSIG|NODFLG_NOKEY|NODFLG_SIGERR);
- sigrc = '!';
- break;
- case G10ERR_BAD_SIGN:
- node->flag = NODFLG_BADSIG;
- sigrc = '-';
- if( inv_sigs )
- ++*inv_sigs;
- break;
- case G10ERR_NO_PUBKEY:
- case G10ERR_UNU_PUBKEY:
- node->flag = NODFLG_NOKEY;
- sigrc = '?';
- if( no_key )
- ++*no_key;
- break;
- default:
- node->flag = NODFLG_SIGERR;
- sigrc = '%';
- if( oth_err )
- ++*oth_err;
- break;
- }
- if( sigrc != '?' || print_without_key ) {
- tty_printf("%s%c%c %c%c%c%c%c %08lX %s ",
- is_rev? "rev":"sig",sigrc,
- (sig->sig_class-0x10>0 &&
- sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ',
- sig->flags.exportable?' ':'L',
- sig->flags.revocable?' ':'R',
- sig->flags.policy_url?'P':' ',
- sig->flags.notation?'N':' ',
- sig->flags.expired?'X':' ',
- (ulong)sig->keyid[1], datestr_from_sig(sig));
- if( sigrc == '%' )
- tty_printf("[%s] ", g10_errstr(rc) );
- else if( sigrc == '?' )
- ;
- else if( *is_selfsig ) {
- tty_printf( is_rev? _("[revocation]")
- : _("[self-signature]") );
- }
- else {
- size_t n;
- char *p = get_user_id( sig->keyid, &n );
- tty_print_utf8_string2( p, n, 40 );
- m_free(p);
- }
- tty_printf("\n");
-
- if(sig->flags.policy_url && opt.show_policy_url)
- show_policy_url(sig,3);
-
- if(sig->flags.notation && opt.show_notation)
- show_notation(sig,3);
- }
-
- return (sigrc == '!');
-}
-
-
-
-/****************
- * Check the keysigs and set the flags to indicate errors.
- * Returns true if error found.
- */
-static int
-check_all_keysigs( KBNODE keyblock, int only_selected )
-{
- KBNODE kbctx;
- KBNODE node;
- int inv_sigs = 0;
- int no_key = 0;
- int oth_err = 0;
- int has_selfsig = 0;
- int mis_selfsig = 0;
- int selected = !only_selected;
- int anyuid = 0;
-
- for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = node->pkt->pkt.user_id;
-
- if( only_selected )
- selected = (node->flag & NODFLG_SELUID);
- if( selected ) {
- tty_printf("uid ");
- tty_print_utf8_string( uid->name, uid->len );
- tty_printf("\n");
- if( anyuid && !has_selfsig )
- mis_selfsig++;
- has_selfsig = 0;
- anyuid = 1;
- }
- }
- else if( selected && node->pkt->pkttype == PKT_SIGNATURE
- && ( (node->pkt->pkt.signature->sig_class&~3) == 0x10
- || node->pkt->pkt.signature->sig_class == 0x30 ) ) {
- int selfsig;
-
- if( print_and_check_one_sig( keyblock, node, &inv_sigs,
- &no_key, &oth_err, &selfsig, 0 ) ) {
- if( selfsig )
- has_selfsig = 1;
- }
- /* Hmmm: should we update the trustdb here? */
- }
- }
- if( !has_selfsig )
- mis_selfsig++;
- if( inv_sigs == 1 )
- tty_printf(_("1 bad signature\n") );
- else if( inv_sigs )
- tty_printf(_("%d bad signatures\n"), inv_sigs );
- if( no_key == 1 )
- tty_printf(_("1 signature not checked due to a missing key\n") );
- else if( no_key )
- tty_printf(_("%d signatures not checked due to missing keys\n"), no_key );
- if( oth_err == 1 )
- tty_printf(_("1 signature not checked due to an error\n") );
- else if( oth_err )
- tty_printf(_("%d signatures not checked due to errors\n"), oth_err );
- if( mis_selfsig == 1 )
- tty_printf(_("1 user ID without valid self-signature detected\n"));
- else if( mis_selfsig )
- tty_printf(_("%d user IDs without valid self-signatures detected\n"),
- mis_selfsig);
-
- return inv_sigs || no_key || oth_err || mis_selfsig;
-}
-
-
-
-
-static int
-sign_mk_attrib( PKT_signature *sig, void *opaque )
-{
- struct sign_attrib *attrib = opaque;
- byte buf[8];
-
- if( attrib->non_exportable ) {
- buf[0] = 0; /* not exportable */
- build_sig_subpkt( sig, SIGSUBPKT_EXPORTABLE, buf, 1 );
- }
-
- if( attrib->non_revocable ) {
- buf[0] = 0; /* not revocable */
- build_sig_subpkt( sig, SIGSUBPKT_REVOCABLE, buf, 1 );
- }
-
- if( attrib->reason )
- revocation_reason_build_cb( sig, attrib->reason );
-
- return 0;
-}
-
-
-
-/****************
- * Loop over all locusr and and sign the uids after asking.
- * If no user id is marked, all user ids will be signed;
- * if some user_ids are marked those will be signed.
- */
-static int
-sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified,
- int local , int nonrevocable )
-{
- int rc = 0;
- SK_LIST sk_list = NULL;
- SK_LIST sk_rover = NULL;
- PKT_secret_key *sk = NULL;
- KBNODE node, uidnode;
- PKT_public_key *primary_pk=NULL;
- int select_all = !count_selected_uids(keyblock);
- int all_v3=1;
-
- /* Are there any non-v3 sigs on this key already? */
- if(opt.pgp2)
- for(node=keyblock;node;node=node->next)
- if(node->pkt->pkttype==PKT_SIGNATURE &&
- node->pkt->pkt.signature->version>3)
- {
- all_v3=0;
- break;
- }
-
- /* build a list of all signators.
- *
- * We use the CERT flag to request the primary which must always
- * be one which is capable of signing keys. I can't see a reason
- * why to sign keys using a subkey. Implementation of USAGE_CERT
- * is just a hack in getkey.c and does not mean that a subkey
- * marked as certification capable will be used */
- rc=build_sk_list( locusr, &sk_list, 0, PUBKEY_USAGE_SIG|PUBKEY_USAGE_CERT);
- if( rc )
- goto leave;
-
- /* loop over all signators */
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- u32 sk_keyid[2],pk_keyid[2];
- size_t n;
- char *p;
- int force_v4=0,class=0,selfsig=0;
- u32 duration=0,timestamp=0;
-
- if(local || nonrevocable ||
- opt.cert_policy_url || opt.cert_notation_data)
- force_v4=1;
-
- /* we have to use a copy of the sk, because make_keysig_packet
- * may remove the protection from sk and if we did other
- * changes to the secret key, we would save the unprotected
- * version */
- if( sk )
- free_secret_key(sk);
- sk = copy_secret_key( NULL, sk_rover->sk );
- keyid_from_sk( sk, sk_keyid );
- /* set mark A for all selected user ids */
- for( node=keyblock; node; node = node->next ) {
- if( select_all || (node->flag & NODFLG_SELUID) )
- node->flag |= NODFLG_MARK_A;
- else
- node->flag &= ~NODFLG_MARK_A;
- }
- /* reset mark for uids which are already signed */
- uidnode = NULL;
- for( node=keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- primary_pk=node->pkt->pkt.public_key;
- keyid_from_pk( primary_pk, pk_keyid );
-
- /* Is this a self-sig? */
- if(pk_keyid[0]==sk_keyid[0] && pk_keyid[1]==sk_keyid[1])
- {
- selfsig=1;
- /* Do not force a v4 sig here, otherwise it would
- be difficult to remake a v3 selfsig. If this
- is a v3->v4 promotion case, then we set
- force_v4 later anyway. */
- force_v4=0;
- }
- }
- else if( node->pkt->pkttype == PKT_USER_ID ) {
- uidnode = (node->flag & NODFLG_MARK_A)? node : NULL;
- if(uidnode)
- {
- char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name,
- uidnode->pkt->pkt.user_id->len,
- 0);
-
- if(uidnode->pkt->pkt.user_id->is_revoked)
- {
- tty_printf(_("User ID \"%s\" is revoked."),user);
-
- if(opt.expert)
- {
- tty_printf("\n");
- /* No, so remove the mark and continue */
- if(!cpr_get_answer_is_yes("sign_uid.revoke_okay",
- _("Are you sure you "
- "still want to sign "
- "it? (y/N) ")))
- uidnode->flag &= ~NODFLG_MARK_A;
- }
- else
- {
- uidnode->flag &= ~NODFLG_MARK_A;
- tty_printf(_(" Unable to sign.\n"));
- }
- }
- else if(!uidnode->pkt->pkt.user_id->created)
- {
- tty_printf(_("WARNING: user ID \"%s\" is not "
- "self-signed.\n"),user);
- }
-
- m_free(user);
- }
- }
- else if( uidnode && node->pkt->pkttype == PKT_SIGNATURE
- && (node->pkt->pkt.signature->sig_class&~3) == 0x10 ) {
- if( sk_keyid[0] == node->pkt->pkt.signature->keyid[0]
- && sk_keyid[1] == node->pkt->pkt.signature->keyid[1] ) {
- char buf[50];
- char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name,
- uidnode->pkt->pkt.user_id->len,
- 0);
-
- /* It's a v3 self-sig. Make it into a v4 self-sig? */
- if(node->pkt->pkt.signature->version<4 && selfsig)
- {
- tty_printf(_("The self-signature on \"%s\"\n"
- "is a PGP 2.x-style signature.\n"),user);
-
- /* Note that the regular PGP2 warning below
- still applies if there are no v4 sigs on
- this key at all. */
-
- if(opt.expert)
- if(cpr_get_answer_is_yes("sign_uid.v4_promote_okay",
- _("Do you want to promote "
- "it to an OpenPGP self-"
- "signature? (y/N) ")))
- {
- force_v4=1;
- node->flag|=NODFLG_DELSIG;
- continue;
- }
- }
-
- if(!node->pkt->pkt.signature->flags.exportable && !local)
- {
- /* It's a local sig, and we want to make a
- exportable sig. */
- tty_printf(_("Your current signature on \"%s\"\n"
- "is a local signature.\n"),user);
-
- if(cpr_get_answer_is_yes("sign_uid.local_promote_okay",
- _("Do you want to promote "
- "it to a full exportable "
- "signature? (y/N) ")))
- {
- /* Mark these for later deletion. We
- don't want to delete them here, just in
- case the replacement signature doesn't
- happen for some reason. We only delete
- these after the replacement is already
- in place. */
-
- node->flag|=NODFLG_DELSIG;
- continue;
- }
- }
-
- /* Fixme: see whether there is a revocation in which
- * case we should allow to sign it again. */
- if (!node->pkt->pkt.signature->flags.exportable && local)
- tty_printf(_(
- "\"%s\" was already locally signed by key %08lX\n"),
- user,(ulong)sk_keyid[1] );
- else
- tty_printf(_(
- "\"%s\" was already signed by key %08lX\n"),
- user,(ulong)sk_keyid[1] );
- sprintf (buf, "%08lX%08lX",
- (ulong)sk->keyid[0], (ulong)sk->keyid[1] );
- write_status_text (STATUS_ALREADY_SIGNED, buf);
- uidnode->flag &= ~NODFLG_MARK_A; /* remove mark */
-
- m_free(user);
- }
- }
- }
- /* check whether any uids are left for signing */
- if( !count_uids_with_flag(keyblock, NODFLG_MARK_A) ) {
- tty_printf(_("Nothing to sign with key %08lX\n"),
- (ulong)sk_keyid[1] );
- continue;
- }
- /* Ask whether we really should sign these user id(s) */
- tty_printf("\n");
- show_key_with_all_names( keyblock, 1, 0, 1, 0, 0 );
- tty_printf("\n");
-
- if(primary_pk->expiredate && !selfsig)
- {
- u32 now=make_timestamp();
-
- if(primary_pk->expiredate<=now)
- {
- tty_printf(_("This key has expired!"));
-
- if(opt.expert)
- {
- tty_printf(" ");
- if(!cpr_get_answer_is_yes("sign_uid.expired_okay",
- _("Are you sure you still "
- "want to sign it? (y/N) ")))
- continue;
- }
- else
- {
- tty_printf(_(" Unable to sign.\n"));
- continue;
- }
- }
- else
- {
- char *answer;
-
- tty_printf(_("This key is due to expire on %s.\n"),
- expirestr_from_pk(primary_pk));
-
- answer=cpr_get("sign_uid.expire",
- _("Do you want your signature to "
- "expire at the same time? (Y/n) "));
- if(answer_is_yes_no_default(answer,1))
- {
- /* This fixes the signature timestamp we're going
- to make as now. This is so the expiration date
- is exactly correct, and not a few seconds off
- (due to the time it takes to answer the
- questions, enter the passphrase, etc). */
- timestamp=now;
- duration=primary_pk->expiredate-now;
- force_v4=1;
- }
-
- cpr_kill_prompt();
- m_free(answer);
- }
- }
-
- /* Only ask for duration if we haven't already set it to match
- the expiration of the pk */
- if(opt.ask_cert_expire && !duration && !selfsig)
- duration=ask_expire_interval(1);
-
- if(duration)
- force_v4=1;
-
- /* Is --pgp2 on, it's a v3 key, all the sigs on the key are
- currently v3 and we're about to sign it with a v4 sig? If
- so, danger! */
- if(opt.pgp2 && all_v3 &&
- (sk->version>3 || force_v4) && primary_pk->version<=3)
- {
- tty_printf(_("You may not make an OpenPGP signature on a "
- "PGP 2.x key while in --pgp2 mode.\n"));
- tty_printf(_("This would make the key unusable in PGP 2.x.\n"));
-
- if(opt.expert)
- {
- if(!cpr_get_answer_is_yes("sign_uid.v4_on_v3_okay",
- _("Are you sure you still "
- "want to sign it? (y/N) ")))
- continue;
-
- all_v3=0;
- }
- else
- continue;
- }
-
- if(selfsig)
- ;
- else if(opt.batch)
- class=0x10+opt.def_cert_check_level;
- else
- {
- char *answer;
-
- tty_printf(_("How carefully have you verified the key you are "
- "about to sign actually belongs\nto the person named "
- "above? If you don't know what to answer, enter \"0\".\n"));
- tty_printf("\n");
- tty_printf(_(" (0) I will not answer.%s\n"),
- opt.def_cert_check_level==0?_(" (default)"):"");
- tty_printf(_(" (1) I have not checked at all.%s\n"),
- opt.def_cert_check_level==1?_(" (default)"):"");
- tty_printf(_(" (2) I have done casual checking.%s\n"),
- opt.def_cert_check_level==2?_(" (default)"):"");
- tty_printf(_(" (3) I have done very careful checking.%s\n"),
- opt.def_cert_check_level==3?_(" (default)"):"");
- tty_printf("\n");
-
- while(class==0)
- {
- answer = cpr_get("sign_uid.class",_("Your selection? "));
-
- if(answer[0]=='\0')
- class=0x10+opt.def_cert_check_level; /* Default */
- else if(ascii_strcasecmp(answer,"0")==0)
- class=0x10; /* Generic */
- else if(ascii_strcasecmp(answer,"1")==0)
- class=0x11; /* Persona */
- else if(ascii_strcasecmp(answer,"2")==0)
- class=0x12; /* Casual */
- else if(ascii_strcasecmp(answer,"3")==0)
- class=0x13; /* Positive */
- else
- tty_printf(_("Invalid selection.\n"));
-
- m_free(answer);
- }
- }
-
- tty_printf(_("Are you really sure that you want to sign this key\n"
- "with your key: \""));
- p = get_user_id( sk_keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p); p = NULL;
- tty_printf("\"\n");
-
- if(selfsig)
- {
- tty_printf(_("\nThis will be a self-signature.\n"));
-
- if( local )
- tty_printf(
- _("\nWARNING: the signature will not be marked "
- "as non-exportable.\n"));
-
- if( nonrevocable )
- tty_printf(
- _("\nWARNING: the signature will not be marked "
- "as non-revocable.\n"));
- }
- else
- {
- if( local )
- tty_printf(
- _("\nThe signature will be marked as non-exportable.\n"));
-
- if( nonrevocable )
- tty_printf(
- _("\nThe signature will be marked as non-revocable.\n"));
-
- switch(class)
- {
- case 0x11:
- tty_printf(_("\nI have not checked this key at all.\n"));
- break;
-
- case 0x12:
- tty_printf(_("\nI have checked this key casually.\n"));
- break;
-
- case 0x13:
- tty_printf(_("\nI have checked this key very carefully.\n"));
- break;
- }
- }
-
- tty_printf("\n");
-
- if( opt.batch && opt.answer_yes )
- ;
- else if( !cpr_get_answer_is_yes("sign_uid.okay", _("Really sign? ")) )
- continue;
-
- /* now we can sign the user ids */
- reloop: /* (must use this, because we are modifing the list) */
- primary_pk = NULL;
- for( node=keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY )
- primary_pk = node->pkt->pkt.public_key;
- else if( node->pkt->pkttype == PKT_USER_ID
- && (node->flag & NODFLG_MARK_A) ) {
- PACKET *pkt;
- PKT_signature *sig;
- struct sign_attrib attrib;
-
- assert( primary_pk );
- memset( &attrib, 0, sizeof attrib );
- attrib.non_exportable = local;
- attrib.non_revocable = nonrevocable;
- node->flag &= ~NODFLG_MARK_A;
-
- /* we force creation of a v4 signature for local
- * signatures, otherwise we would not generate the
- * subpacket with v3 keys and the signature becomes
- * exportable */
-
- if(selfsig)
- rc = make_keysig_packet( &sig, primary_pk,
- node->pkt->pkt.user_id,
- NULL,
- sk,
- 0x13, 0, force_v4?4:0, 0, 0,
- keygen_add_std_prefs, primary_pk);
- else
- rc = make_keysig_packet( &sig, primary_pk,
- node->pkt->pkt.user_id,
- NULL,
- sk,
- class, 0, force_v4?4:0,
- timestamp, duration,
- sign_mk_attrib, &attrib );
- if( rc ) {
- log_error(_("signing failed: %s\n"), g10_errstr(rc));
- goto leave;
- }
-
- *ret_modified = 1; /* we changed the keyblock */
- update_trust = 1;
-
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE );
- goto reloop;
- }
- }
-
- /* Delete any sigs that got promoted */
- for( node=keyblock; node; node = node->next )
- if( node->flag & NODFLG_DELSIG)
- delete_kbnode(node);
- } /* end loop over signators */
-
- leave:
- release_sk_list( sk_list );
- if( sk )
- free_secret_key(sk);
- return rc;
-}
-
-
-
-/****************
- * Change the passphrase of the primary and all secondary keys.
- * We use only one passphrase for all keys.
- */
-static int
-change_passphrase( KBNODE keyblock )
-{
- int rc = 0;
- int changed=0;
- KBNODE node;
- PKT_secret_key *sk;
- char *passphrase = NULL;
- int no_primary_secrets = 0;
-
- node = find_kbnode( keyblock, PKT_SECRET_KEY );
- if( !node ) {
- log_error("Oops; secret key not found anymore!\n");
- goto leave;
- }
- sk = node->pkt->pkt.secret_key;
-
- switch( is_secret_key_protected( sk ) ) {
- case -1:
- rc = G10ERR_PUBKEY_ALGO;
- break;
- case 0:
- tty_printf(_("This key is not protected.\n"));
- break;
- default:
- if( sk->protect.s2k.mode == 1001 ) {
- tty_printf(_("Secret parts of primary key are not available.\n"));
- no_primary_secrets = 1;
- }
- else {
- tty_printf(_("Key is protected.\n"));
- rc = check_secret_key( sk, 0 );
- if( !rc )
- passphrase = get_last_passphrase();
- }
- break;
- }
-
- /* unprotect all subkeys (use the supplied passphrase or ask)*/
- for(node=keyblock; !rc && node; node = node->next ) {
- if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *subsk = node->pkt->pkt.secret_key;
- set_next_passphrase( passphrase );
- rc = check_secret_key( subsk, 0 );
- if( !rc && !passphrase )
- passphrase = get_last_passphrase();
- }
- }
-
- if( rc )
- tty_printf(_("Can't edit this key: %s\n"), g10_errstr(rc));
- else {
- DEK *dek = NULL;
- STRING2KEY *s2k = m_alloc_secure( sizeof *s2k );
- const char *errtext = NULL;
-
- tty_printf(_("Enter the new passphrase for this secret key.\n\n") );
-
- set_next_passphrase( NULL );
- for(;;) {
- s2k->mode = opt.s2k_mode;
- s2k->hash_algo = opt.s2k_digest_algo;
- dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo,
- s2k, 2, errtext);
- if( !dek ) {
- errtext = _("passphrase not correctly repeated; try again");
- tty_printf ("%s.\n", errtext);
- }
- else if( !dek->keylen ) {
- rc = 0;
- tty_printf(_( "You don't want a passphrase -"
- " this is probably a *bad* idea!\n\n"));
- if( cpr_get_answer_is_yes("change_passwd.empty.okay",
- _("Do you really want to do this? ")))
- changed++;
- break;
- }
- else { /* okay */
- rc = 0;
- if( !no_primary_secrets ) {
- sk->protect.algo = dek->algo;
- sk->protect.s2k = *s2k;
- rc = protect_secret_key( sk, dek );
- }
- for(node=keyblock; !rc && node; node = node->next ) {
- if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *subsk = node->pkt->pkt.secret_key;
- subsk->protect.algo = dek->algo;
- subsk->protect.s2k = *s2k;
- rc = protect_secret_key( subsk, dek );
- }
- }
- if( rc )
- log_error("protect_secret_key failed: %s\n", g10_errstr(rc) );
- else
- changed++;
- break;
- }
- }
- m_free(s2k);
- m_free(dek);
- }
-
- leave:
- m_free( passphrase );
- set_next_passphrase( NULL );
- return changed && !rc;
-}
-
-
-/****************
- * There are some keys out (due to a bug in gnupg), where the sequence
- * of the packets is wrong. This function fixes that.
- * Returns: true if the keyblock has been fixed.
- *
- * Note: This function does not work if there is more than one user ID.
- */
-static int
-fix_keyblock( KBNODE keyblock )
-{
- KBNODE node, last, subkey;
- int fixed=0;
-
- /* locate key signatures of class 0x10..0x13 behind sub key packets */
- for( subkey=last=NULL, node = keyblock; node;
- last=node, node = node->next ) {
- switch( node->pkt->pkttype ) {
- case PKT_PUBLIC_SUBKEY:
- case PKT_SECRET_SUBKEY:
- if( !subkey )
- subkey = last; /* actually it is the one before the subkey */
- break;
- case PKT_SIGNATURE:
- if( subkey ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- if( sig->sig_class >= 0x10 && sig->sig_class <= 0x13 ) {
- log_info(_(
- "moving a key signature to the correct place\n"));
- last->next = node->next;
- node->next = subkey->next;
- subkey->next = node;
- node = last;
- fixed=1;
- }
- }
- break;
- default: break;
- }
- }
-
- return fixed;
-}
-
-/****************
- * Menu driven key editor. If sign_mode is true semi-automatical signing
- * will be performed. commands are ignore in this case
- *
- * Note: to keep track of some selection we use node->mark MARKBIT_xxxx.
- */
-
-void
-keyedit_menu( const char *username, STRLIST locusr, STRLIST commands,
- int sign_mode )
-{
- enum cmdids { cmdNONE = 0,
- cmdQUIT, cmdHELP, cmdFPR, cmdLIST, cmdSELUID, cmdCHECK, cmdSIGN,
- cmdLSIGN, cmdNRSIGN, cmdNRLSIGN, cmdREVSIG, cmdREVKEY, cmdDELSIG,
- cmdPRIMARY, cmdDEBUG, cmdSAVE, cmdADDUID, cmdADDPHOTO, cmdDELUID,
- cmdADDKEY, cmdDELKEY, cmdADDREVOKER, cmdTOGGLE, cmdSELKEY,
- cmdPASSWD, cmdTRUST, cmdPREF, cmdEXPIRE, cmdENABLEKEY,
- cmdDISABLEKEY, cmdSHOWPREF, cmdSETPREF, cmdUPDPREF, cmdINVCMD,
- cmdSHOWPHOTO, cmdUPDTRUST, cmdCHKTRUST, cmdNOP };
- static struct { const char *name;
- enum cmdids id;
- int need_sk;
- int not_with_sk;
- int signmode;
- const char *desc;
- } cmds[] = {
- { N_("quit") , cmdQUIT , 0,0,1, N_("quit this menu") },
- { N_("q") , cmdQUIT , 0,0,1, NULL },
- { N_("save") , cmdSAVE , 0,0,1, N_("save and quit") },
- { N_("help") , cmdHELP , 0,0,1, N_("show this help") },
- { "?" , cmdHELP , 0,0,1, NULL },
- { N_("fpr") , cmdFPR , 0,0,1, N_("show fingerprint") },
- { N_("list") , cmdLIST , 0,0,1, N_("list key and user IDs") },
- { N_("l") , cmdLIST , 0,0,1, NULL },
- { N_("uid") , cmdSELUID , 0,0,1, N_("select user ID N") },
- { N_("key") , cmdSELKEY , 0,0,0, N_("select secondary key N") },
- { N_("check") , cmdCHECK , 0,0,1, N_("list signatures") },
- { N_("c") , cmdCHECK , 0,0,1, NULL },
- { N_("sign") , cmdSIGN , 0,1,1, N_("sign the key") },
- { N_("s") , cmdSIGN , 0,1,1, NULL },
- { N_("lsign") , cmdLSIGN , 0,1,1, N_("sign the key locally") },
- { N_("nrsign") , cmdNRSIGN , 0,1,1, N_("sign the key non-revocably") },
- { N_("nrlsign") , cmdNRLSIGN , 0,1,1, N_("sign the key locally and non-revocably") },
- { N_("debug") , cmdDEBUG , 0,0,0, NULL },
- { N_("adduid") , cmdADDUID , 1,1,0, N_("add a user ID") },
- { N_("addphoto"), cmdADDPHOTO , 1,1,0, N_("add a photo ID") },
- { N_("deluid") , cmdDELUID , 0,1,0, N_("delete user ID") },
- /* delphoto is really deluid in disguise */
- { N_("delphoto"), cmdDELUID , 0,1,0, NULL },
- { N_("addkey") , cmdADDKEY , 1,1,0, N_("add a secondary key") },
- { N_("delkey") , cmdDELKEY , 0,1,0, N_("delete a secondary key") },
- { N_("addrevoker"),cmdADDREVOKER,1,1,0, N_("add a revocation key") },
- { N_("delsig") , cmdDELSIG , 0,1,0, N_("delete signatures") },
- { N_("expire") , cmdEXPIRE , 1,1,0, N_("change the expire date") },
- { N_("primary") , cmdPRIMARY , 1,1,0, N_("flag user ID as primary")},
- { N_("toggle") , cmdTOGGLE , 1,0,0, N_("toggle between secret "
- "and public key listing") },
- { N_("t" ) , cmdTOGGLE , 1,0,0, NULL },
- { N_("pref") , cmdPREF , 0,1,0, N_("list preferences (expert)") },
- { N_("showpref"), cmdSHOWPREF , 0,1,0, N_("list preferences (verbose)") },
- { N_("setpref") , cmdSETPREF , 1,1,0, N_("set preference list") },
- { N_("updpref") , cmdUPDPREF , 1,1,0, N_("updated preferences") },
- { N_("passwd") , cmdPASSWD , 1,1,0, N_("change the passphrase") },
- { N_("trust") , cmdTRUST , 0,1,0, N_("change the ownertrust") },
- { N_("revsig") , cmdREVSIG , 0,1,0, N_("revoke signatures") },
- { N_("revkey") , cmdREVKEY , 1,1,0, N_("revoke a secondary key") },
- { N_("disable") , cmdDISABLEKEY, 0,1,0, N_("disable a key") },
- { N_("enable") , cmdENABLEKEY , 0,1,0, N_("enable a key") },
- { N_("showphoto"),cmdSHOWPHOTO , 0,0,0, N_("show photo ID") },
-
- { NULL, cmdNONE } };
- enum cmdids cmd = 0;
- int rc = 0;
- KBNODE keyblock = NULL;
- KEYDB_HANDLE kdbhd = NULL;
- KBNODE sec_keyblock = NULL;
- KEYDB_HANDLE sec_kdbhd = NULL;
- KBNODE cur_keyblock;
- char *answer = NULL;
- int redisplay = 1;
- int modified = 0;
- int sec_modified = 0;
- int toggle;
- int have_commands = !!commands;
-
- if ( opt.command_fd != -1 )
- ;
- else if( opt.batch && !have_commands ) {
- log_error(_("can't do that in batchmode\n"));
- goto leave;
- }
-
- if( sign_mode ) {
- commands = NULL;
- append_to_strlist( &commands, sign_mode == 1? "sign":
- sign_mode == 2?"lsign":
- sign_mode == 3?"nrsign":"nrlsign");
- have_commands = 1;
- }
-
- /* get the public key */
- rc = get_pubkey_byname (NULL, username, &keyblock, &kdbhd);
- if( rc )
- goto leave;
- if( fix_keyblock( keyblock ) )
- modified++;
- if( collapse_uids( &keyblock ) )
- modified++;
-
- if( !sign_mode ) {/* see whether we have a matching secret key */
- PKT_public_key *pk = keyblock->pkt->pkt.public_key;
-
- sec_kdbhd = keydb_new (1);
- {
- byte afp[MAX_FINGERPRINT_LEN];
- size_t an;
-
- fingerprint_from_pk (pk, afp, &an);
- while (an < MAX_FINGERPRINT_LEN)
- afp[an++] = 0;
- rc = keydb_search_fpr (sec_kdbhd, afp);
- }
- if (!rc) {
- rc = keydb_get_keyblock (sec_kdbhd, &sec_keyblock);
- if (rc) {
- log_error (_("error reading secret keyblock `%s': %s\n"),
- username, g10_errstr(rc));
- }
- else {
- merge_keys_and_selfsig( sec_keyblock );
- if( fix_keyblock( sec_keyblock ) )
- sec_modified++;
- }
- }
-
- if (rc) {
- sec_keyblock = NULL;
- keydb_release (sec_kdbhd); sec_kdbhd = NULL;
- rc = 0;
- }
- }
-
- if( sec_keyblock ) {
- tty_printf(_("Secret key is available.\n"));
- }
-
- toggle = 0;
- cur_keyblock = keyblock;
- for(;;) { /* main loop */
- int i, arg_number, photo;
- const char *arg_string = "";
- char *p;
- PKT_public_key *pk=keyblock->pkt->pkt.public_key;
-
- tty_printf("\n");
- if( redisplay ) {
- show_key_with_all_names( cur_keyblock, 0, 1, 0, 1, 0 );
- tty_printf("\n");
- redisplay = 0;
- }
- do {
- m_free(answer);
- if( have_commands ) {
- if( commands ) {
- answer = m_strdup( commands->d );
- commands = commands->next;
- }
- else if( opt.batch ) {
- answer = m_strdup("quit");
- }
- else
- have_commands = 0;
- }
- if( !have_commands ) {
- answer = cpr_get_no_help("keyedit.prompt", _("Command> "));
- cpr_kill_prompt();
- }
- trim_spaces(answer);
- } while( *answer == '#' );
-
- arg_number = 0; /* Yes, here is the init which egcc complains about */
- photo = 0; /* This too */
- if( !*answer )
- cmd = cmdLIST;
- else if( *answer == CONTROL_D )
- cmd = cmdQUIT;
- else if( isdigit( *answer ) ) {
- cmd = cmdSELUID;
- arg_number = atoi(answer);
- }
- else {
- if( (p=strchr(answer,' ')) ) {
- *p++ = 0;
- trim_spaces(answer);
- trim_spaces(p);
- arg_number = atoi(p);
- arg_string = p;
- }
-
- for(i=0; cmds[i].name; i++ ) {
- if( !ascii_strcasecmp( answer, cmds[i].name ) )
- break;
- }
- if( sign_mode && !cmds[i].signmode )
- cmd = cmdINVCMD;
- else if( cmds[i].need_sk && !sec_keyblock ) {
- tty_printf(_("Need the secret key to do this.\n"));
- cmd = cmdNOP;
- }
- else if( cmds[i].not_with_sk && sec_keyblock && toggle ) {
- tty_printf(_("Please use the command \"toggle\" first.\n"));
- cmd = cmdNOP;
- }
- else
- cmd = cmds[i].id;
- }
- switch( cmd ) {
- case cmdHELP:
- for(i=0; cmds[i].name; i++ ) {
- if( sign_mode && !cmds[i].signmode )
- ;
- else if( cmds[i].need_sk && !sec_keyblock )
- ; /* skip if we do not have the secret key */
- else if( cmds[i].desc )
- tty_printf("%-10s %s\n", cmds[i].name, _(cmds[i].desc) );
- }
- break;
-
- case cmdLIST:
- redisplay = 1;
- break;
-
- case cmdFPR:
- show_key_and_fingerprint( keyblock );
- break;
-
- case cmdSELUID:
- if( menu_select_uid( cur_keyblock, arg_number ) )
- redisplay = 1;
- break;
-
- case cmdSELKEY:
- if( menu_select_key( cur_keyblock, arg_number ) )
- redisplay = 1;
- break;
-
- case cmdCHECK:
- /* we can only do this with the public key becuase the
- * check functions can't cope with secret keys and it
- * is questionable whether this would make sense at all */
- check_all_keysigs( keyblock, count_selected_uids(keyblock) );
- break;
-
- case cmdSIGN: /* sign (only the public key) */
- case cmdLSIGN: /* sign (only the public key) */
- case cmdNRSIGN: /* sign (only the public key) */
- case cmdNRLSIGN: /* sign (only the public key) */
- if( pk->is_revoked )
- {
- tty_printf(_("Key is revoked."));
-
- if(opt.expert)
- {
- tty_printf(" ");
- if(!cpr_get_answer_is_yes("keyedit.sign_revoked.okay",
- _("Are you sure you still want "
- "to sign it? (y/N) ")))
- break;
- }
- else
- {
- tty_printf(_(" Unable to sign.\n"));
- break;
- }
- }
-
- if( count_uids(keyblock) > 1 && !count_selected_uids(keyblock) ) {
- if( !cpr_get_answer_is_yes("keyedit.sign_all.okay",
- _("Really sign all user IDs? ")) ) {
- tty_printf(_("Hint: Select the user IDs to sign\n"));
- break;
- }
- }
- if( !sign_uids( keyblock, locusr, &modified,
- (cmd == cmdLSIGN) || (cmd == cmdNRLSIGN),
- (cmd == cmdNRSIGN) || (cmd==cmdNRLSIGN))
- && sign_mode )
- goto do_cmd_save;
- break;
-
- case cmdDEBUG:
- dump_kbnode( cur_keyblock );
- break;
-
- case cmdTOGGLE:
- toggle = !toggle;
- cur_keyblock = toggle? sec_keyblock : keyblock;
- redisplay = 1;
- break;
-
- case cmdADDPHOTO:
- if (opt.rfc2440 || opt.rfc1991 || opt.pgp2)
- {
- tty_printf(
- _("This command is not allowed while in %s mode.\n"),
- opt.rfc2440?"OpenPGP":opt.pgp2?"PGP2":"RFC-1991");
- break;
- }
- photo=1;
- /* fall through */
-
- case cmdADDUID:
- if( menu_adduid( keyblock, sec_keyblock, photo ) ) {
- redisplay = 1;
- sec_modified = modified = 1;
- merge_keys_and_selfsig( sec_keyblock );
- merge_keys_and_selfsig( keyblock );
- }
- break;
-
- case cmdDELUID: {
- int n1;
-
- if( !(n1=count_selected_uids(keyblock)) )
- tty_printf(_("You must select at least one user ID.\n"));
- else if( real_uids_left(keyblock) < 1 )
- tty_printf(_("You can't delete the last user ID!\n"));
- else if( cpr_get_answer_is_yes(
- "keyedit.remove.uid.okay",
- n1 > 1? _("Really remove all selected user IDs? ")
- : _("Really remove this user ID? ")
- ) ) {
- menu_deluid( keyblock, sec_keyblock );
- redisplay = 1;
- modified = 1;
- if( sec_keyblock )
- sec_modified = 1;
- }
- }
- break;
-
- case cmdDELSIG: {
- int n1;
-
- if( !(n1=count_selected_uids(keyblock)) )
- tty_printf(_("You must select at least one user ID.\n"));
- else if( menu_delsig( keyblock ) ) {
- /* no redisplay here, because it may scroll away some
- * status output of delsig */
- modified = 1;
- }
- }
- break;
-
- case cmdADDKEY:
- if( generate_subkeypair( keyblock, sec_keyblock ) ) {
- redisplay = 1;
- sec_modified = modified = 1;
- merge_keys_and_selfsig( sec_keyblock );
- merge_keys_and_selfsig( keyblock );
- }
- break;
-
-
- case cmdDELKEY: {
- int n1;
-
- if( !(n1=count_selected_keys( keyblock )) )
- tty_printf(_("You must select at least one key.\n"));
- else if( sec_keyblock && !cpr_get_answer_is_yes(
- "keyedit.remove.subkey.okay",
- n1 > 1?
- _("Do you really want to delete the selected keys? "):
- _("Do you really want to delete this key? ")
- ))
- ;
- else {
- menu_delkey( keyblock, sec_keyblock );
- redisplay = 1;
- modified = 1;
- if( sec_keyblock )
- sec_modified = 1;
- }
- }
- break;
-
- case cmdADDREVOKER:
- {
- int sensitive=0;
-
- if(arg_string && ascii_strcasecmp(arg_string,"sensitive")==0)
- sensitive=1;
- if( menu_addrevoker( keyblock, sec_keyblock, sensitive ) ) {
- redisplay = 1;
- sec_modified = modified = 1;
- merge_keys_and_selfsig( sec_keyblock );
- merge_keys_and_selfsig( keyblock );
- }
- }
- break;
-
- case cmdREVKEY: {
- int n1;
-
- if( !(n1=count_selected_keys( keyblock )) )
- tty_printf(_("You must select at least one key.\n"));
- else if( sec_keyblock && !cpr_get_answer_is_yes(
- "keyedit.revoke.subkey.okay",
- n1 > 1?
- _("Do you really want to revoke the selected keys? "):
- _("Do you really want to revoke this key? ")
- ))
- ;
- else {
- if( menu_revkey( keyblock, sec_keyblock ) ) {
- modified = 1;
- /*sec_modified = 1;*/
- }
- redisplay = 1;
- }
- }
- break;
-
- case cmdEXPIRE:
- if( menu_expire( keyblock, sec_keyblock ) ) {
- merge_keys_and_selfsig( sec_keyblock );
- merge_keys_and_selfsig( keyblock );
- sec_modified = 1;
- modified = 1;
- redisplay = 1;
- }
- break;
-
- case cmdPRIMARY:
- if( menu_set_primary_uid ( keyblock, sec_keyblock ) ) {
- merge_keys_and_selfsig( keyblock );
- modified = 1;
- redisplay = 1;
- }
- break;
-
- case cmdPASSWD:
- if( change_passphrase( sec_keyblock ) )
- sec_modified = 1;
- break;
-
- case cmdTRUST:
- show_key_with_all_names( keyblock, 0, 0, 0, 1, 0 );
- tty_printf("\n");
- if( edit_ownertrust( find_kbnode( keyblock,
- PKT_PUBLIC_KEY )->pkt->pkt.public_key, 1 ) ) {
- redisplay = 1;
- /* No real need to set update_trust here as
- edit_ownertrust() calls revalidation_mark()
- anyway. */
- update_trust=1;
- }
- break;
-
- case cmdPREF:
- show_key_with_all_names( keyblock, 0, 0, 0, 0, 1 );
- break;
-
- case cmdSHOWPREF:
- show_key_with_all_names( keyblock, 0, 0, 0, 0, 2 );
- break;
-
- case cmdSETPREF:
- keygen_set_std_prefs ( !*arg_string? "default" : arg_string, 0);
- break;
-
- case cmdUPDPREF:
- {
- p = keygen_get_std_prefs ();
- tty_printf (("Current preference list: %s\n"), p);
- m_free (p);
- }
- if (cpr_get_answer_is_yes ("keyedit.updpref.okay",
- count_selected_uids (keyblock)?
- _("Really update the preferences"
- " for the selected user IDs? "):
- _("Really update the preferences? "))){
-
- if ( menu_set_preferences (keyblock, sec_keyblock) ) {
- merge_keys_and_selfsig (keyblock);
- modified = 1;
- redisplay = 1;
- }
- }
- break;
-
- case cmdNOP:
- break;
-
- case cmdREVSIG:
- if( menu_revsig( keyblock ) ) {
- redisplay = 1;
- modified = 1;
- }
- break;
-
- case cmdENABLEKEY:
- case cmdDISABLEKEY:
- if( enable_disable_key( keyblock, cmd == cmdDISABLEKEY ) ) {
- redisplay = 1;
- modified = 1;
- }
- break;
-
- case cmdSHOWPHOTO:
- menu_showphoto(keyblock);
- break;
-
- case cmdQUIT:
- if( have_commands )
- goto leave;
- if( !modified && !sec_modified )
- goto leave;
- if( !cpr_get_answer_is_yes("keyedit.save.okay",
- _("Save changes? ")) ) {
- if( cpr_enabled()
- || cpr_get_answer_is_yes("keyedit.cancel.okay",
- _("Quit without saving? ")) )
- goto leave;
- break;
- }
- /* fall thru */
- case cmdSAVE:
- do_cmd_save:
- if( modified || sec_modified ) {
- if( modified ) {
- rc = keydb_update_keyblock (kdbhd, keyblock);
- if( rc ) {
- log_error(_("update failed: %s\n"), g10_errstr(rc) );
- break;
- }
- }
- if( sec_modified ) {
- rc = keydb_update_keyblock (sec_kdbhd, sec_keyblock );
- if( rc ) {
- log_error( _("update secret failed: %s\n"),
- g10_errstr(rc) );
- break;
- }
- }
- }
- else
- tty_printf(_("Key not changed so no update needed.\n"));
-
- if( update_trust )
- {
- revalidation_mark ();
- update_trust=0;
- }
- goto leave;
-
- case cmdINVCMD:
- default:
- tty_printf("\n");
- tty_printf(_("Invalid command (try \"help\")\n"));
- break;
- }
- } /* end main loop */
-
- leave:
- release_kbnode( keyblock );
- release_kbnode( sec_keyblock );
- keydb_release (kdbhd);
- m_free(answer);
-}
-
-
-/****************
- * show preferences of a public keyblock.
- */
-static void
-show_prefs (PKT_user_id *uid, int verbose)
-{
- const prefitem_t fake={0,0};
- const prefitem_t *prefs;
- int i;
-
- if( !uid )
- return;
-
- if( uid->prefs )
- prefs=uid->prefs;
- else if(verbose)
- prefs=&fake;
- else
- return;
-
- if (verbose) {
- int any, des_seen=0, sha1_seen=0, uncomp_seen=0;
- tty_printf (" Cipher: ");
- for(i=any=0; prefs[i].type; i++ ) {
- if( prefs[i].type == PREFTYPE_SYM ) {
- const char *s = cipher_algo_to_string (prefs[i].value);
-
- if (any)
- tty_printf (", ");
- any = 1;
- /* We don't want to display strings for experimental algos */
- if (s && prefs[i].value < 100 )
- tty_printf ("%s", s );
- else
- tty_printf ("[%d]", prefs[i].value);
- if (prefs[i].value == CIPHER_ALGO_3DES )
- des_seen = 1;
- }
- }
- if (!des_seen) {
- if (any)
- tty_printf (", ");
- tty_printf ("%s",cipher_algo_to_string(CIPHER_ALGO_3DES));
- }
- tty_printf ("\n Hash: ");
- for(i=any=0; prefs[i].type; i++ ) {
- if( prefs[i].type == PREFTYPE_HASH ) {
- const char *s = digest_algo_to_string (prefs[i].value);
-
- if (any)
- tty_printf (", ");
- any = 1;
- /* We don't want to display strings for experimental algos */
- if (s && prefs[i].value < 100 )
- tty_printf ("%s", s );
- else
- tty_printf ("[%d]", prefs[i].value);
- if (prefs[i].value == DIGEST_ALGO_SHA1 )
- sha1_seen = 1;
- }
- }
- if (!sha1_seen) {
- if (any)
- tty_printf (", ");
- tty_printf ("%s",digest_algo_to_string(DIGEST_ALGO_SHA1));
- }
- tty_printf ("\n Compression: ");
- for(i=any=0; prefs[i].type; i++ ) {
- if( prefs[i].type == PREFTYPE_ZIP ) {
- const char *s=compress_algo_to_string(prefs[i].value);
-
- if (any)
- tty_printf (", ");
- any = 1;
- /* We don't want to display strings for experimental algos */
- if (s && prefs[i].value < 100 )
- tty_printf ("%s", s );
- else
- tty_printf ("[%d]", prefs[i].value);
- if (prefs[i].value == 0 )
- uncomp_seen = 1;
- }
- }
- if (!uncomp_seen) {
- if (any)
- tty_printf (", ");
- else {
- tty_printf ("%s",compress_algo_to_string(1));
- tty_printf (", ");
- }
- tty_printf ("%s",compress_algo_to_string(0));
- }
- tty_printf ("\n Features: ");
- if(uid->mdc_feature)
- tty_printf ("MDC");
- tty_printf("\n");
- }
- else {
- tty_printf(" ");
- for(i=0; prefs[i].type; i++ ) {
- tty_printf( " %c%d", prefs[i].type == PREFTYPE_SYM ? 'S' :
- prefs[i].type == PREFTYPE_HASH ? 'H' :
- prefs[i].type == PREFTYPE_ZIP ? 'Z':'?',
- prefs[i].value);
- }
- if (uid->mdc_feature)
- tty_printf (" [mdc]");
- tty_printf("\n");
- }
-}
-
-
-/* This is the version of show_key_with_all_names used when
- opt.with_colons is used. It prints all available data in a easy to
- parse format and does not translate utf8 */
-static void
-show_key_with_all_names_colon (KBNODE keyblock)
-{
- KBNODE node;
- int i, j;
- byte pk_version=0;
-
- /* the keys */
- for ( node = keyblock; node; node = node->next )
- {
- if (node->pkt->pkttype == PKT_PUBLIC_KEY
- || (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) )
- {
- PKT_public_key *pk = node->pkt->pkt.public_key;
- int otrust=0, trust=0;
- u32 keyid[2];
-
- if (node->pkt->pkttype == PKT_PUBLIC_KEY)
- {
- trust = get_validity_info (pk, NULL);
- otrust = get_ownertrust_info (pk);
- pk_version = pk->version;
- }
-
- keyid_from_pk (pk, keyid);
-
- fputs (node->pkt->pkttype == PKT_PUBLIC_KEY?"pub:":"sub:", stdout);
- if (!pk->is_valid)
- putchar ('i');
- else if (pk->is_revoked)
- putchar ('r');
- else if (pk->has_expired)
- putchar ('e');
- else
- putchar (trust);
- printf (":%u:%d:%08lX%08lX:%lu:%lu:",
- nbits_from_pk (pk),
- pk->pubkey_algo,
- (ulong)keyid[0], (ulong)keyid[1],
- (ulong)pk->timestamp,
- (ulong)pk->expiredate );
- if (pk->local_id)
- printf ("%lu", pk->local_id);
- putchar (':');
- putchar (otrust);
- putchar(':');
- putchar('\n');
-
- print_fingerprint (pk, NULL, 0);
-
- /* print the revoker record */
- if( !pk->revkey && pk->numrevkeys )
- BUG();
- else
- {
- for (i=0; i < pk->numrevkeys; i++)
- {
- byte *p;
-
- printf ("rvk:::%d::::::", pk->revkey[i].algid);
- p = pk->revkey[i].fpr;
- for (j=0; j < 20; j++, p++ )
- printf ("%02X", *p);
- printf (":%02x%s:\n", pk->revkey[i].class,
- (pk->revkey[i].class&0x40)?"s":"");
- }
- }
- }
- }
-
- /* the user ids */
- i = 0;
- for (node = keyblock; node; node = node->next)
- {
- if ( node->pkt->pkttype == PKT_USER_ID )
- {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- int trustletter = '?';
-
- ++i;
- if(uid->attrib_data)
- {
- printf ("uat:%c::::::::%u %lu", trustletter,
- uid->numattribs,uid->attrib_len);
- }
- else
- {
- printf ("uid:%c::::::::", trustletter);
- print_string (stdout, uid->name, uid->len, ':');
- }
- putchar (':');
- /* signature class */
- putchar (':');
- /* capabilities */
- putchar (':');
- /* preferences */
- if (pk_version>3 || uid->selfsigversion>3)
- {
- const prefitem_t *prefs = uid->prefs;
-
- for (j=0; prefs && prefs[j].type; j++)
- {
- if (j)
- putchar (' ');
- printf ("%c%d", prefs[j].type == PREFTYPE_SYM ? 'S' :
- prefs[j].type == PREFTYPE_HASH ? 'H' :
- prefs[j].type == PREFTYPE_ZIP ? 'Z':'?',
- prefs[j].value);
- }
- if (uid->mdc_feature)
- printf (",mdc");
- }
- putchar (':');
- /* flags */
- printf ("%d,", i);
- if (uid->is_primary)
- putchar ('p');
- if (uid->is_revoked)
- putchar ('r');
- if (uid->is_expired)
- putchar ('e');
- if ((node->flag & NODFLG_SELUID))
- putchar ('s');
- if ((node->flag & NODFLG_MARK_A))
- putchar ('m');
- putchar (':');
- putchar('\n');
- }
- }
-}
-
-
-/****************
- * Display the key a the user ids, if only_marked is true, do only
- * so for user ids with mark A flag set and dont display the index number
- */
-static void
-show_key_with_all_names( KBNODE keyblock, int only_marked, int with_revoker,
- int with_fpr, int with_subkeys, int with_prefs )
-{
- KBNODE node;
- int i, rc;
- int do_warn = 0;
- byte pk_version=0;
-
- if (opt.with_colons)
- {
- show_key_with_all_names_colon (keyblock);
- return;
- }
-
- /* the keys */
- for( node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY
- || (with_subkeys && node->pkt->pkttype == PKT_PUBLIC_SUBKEY) ) {
- PKT_public_key *pk = node->pkt->pkt.public_key;
- int otrust=0, trust=0;
-
- if( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- /* do it here, so that debug messages don't clutter the
- * output */
- static int did_warn = 0;
-
- trust = get_validity_info (pk, NULL);
- otrust = get_ownertrust_info (pk);
-
- /* Show a warning once */
- if (!did_warn
- && (get_validity (pk, NULL) & TRUST_FLAG_PENDING_CHECK)) {
- did_warn = 1;
- do_warn = 1;
- }
-
- pk_version=pk->version;
- }
-
- if(with_revoker) {
- if( !pk->revkey && pk->numrevkeys )
- BUG();
- else
- for(i=0;i<pk->numrevkeys;i++) {
- u32 r_keyid[2];
- char *user;
-
- keyid_from_fingerprint(pk->revkey[i].fpr,
- MAX_FINGERPRINT_LEN,r_keyid);
-
- user=get_user_id_string (r_keyid);
- tty_printf (_("This key may be revoked by %s key "),
- pubkey_algo_to_string (pk->revkey[i].algid));
- tty_print_utf8_string (user, strlen (user));
- if ((pk->revkey[i].class&0x40))
- tty_printf (_(" (sensitive)"));
- tty_printf ("\n");
- m_free(user);
- }
- }
-
- tty_printf(_("%s%c %4u%c/%08lX created: %s expires: %s"),
- node->pkt->pkttype == PKT_PUBLIC_KEY? "pub":"sub",
- (node->flag & NODFLG_SELKEY)? '*':' ',
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid_from_pk(pk,NULL),
- datestr_from_pk(pk),
- expirestr_from_pk(pk) );
- if( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- tty_printf(_(" trust: %c/%c"), otrust, trust );
- if( node->pkt->pkttype == PKT_PUBLIC_KEY
- && (get_ownertrust (pk)&TRUST_FLAG_DISABLED)) {
- tty_printf("\n*** ");
- tty_printf(_("This key has been disabled"));
- }
-
- if( with_fpr ) {
- tty_printf("\n");
- print_fingerprint ( pk, NULL, 2 );
- }
- }
- tty_printf("\n");
- }
- else if( node->pkt->pkttype == PKT_SECRET_KEY
- || (with_subkeys && node->pkt->pkttype == PKT_SECRET_SUBKEY) ) {
- PKT_secret_key *sk = node->pkt->pkt.secret_key;
- tty_printf(_("%s%c %4u%c/%08lX created: %s expires: %s"),
- node->pkt->pkttype == PKT_SECRET_KEY? "sec":"ssb",
- (node->flag & NODFLG_SELKEY)? '*':' ',
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)keyid_from_sk(sk,NULL),
- datestr_from_sk(sk),
- expirestr_from_sk(sk) );
- tty_printf("\n");
- }
- else if( with_subkeys && node->pkt->pkttype == PKT_SIGNATURE
- && node->pkt->pkt.signature->sig_class == 0x28 ) {
- PKT_signature *sig = node->pkt->pkt.signature;
-
- rc = check_key_signature( keyblock, node, NULL );
- if( !rc )
- tty_printf( _("rev! subkey has been revoked: %s\n"),
- datestr_from_sig( sig ) );
- else if( rc == G10ERR_BAD_SIGN )
- tty_printf( _("rev- faked revocation found\n") );
- else if( rc )
- tty_printf( _("rev? problem checking revocation: %s\n"),
- g10_errstr(rc) );
- }
- }
- /* the user ids */
- i = 0;
- for( node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- ++i;
- if( !only_marked || (only_marked && (node->flag & NODFLG_MARK_A))){
- if( only_marked )
- tty_printf(" ");
- else if( node->flag & NODFLG_SELUID )
- tty_printf("(%d)* ", i);
- else if( uid->is_primary )
- tty_printf("(%d). ", i);
- else
- tty_printf("(%d) ", i);
- if ( uid->is_revoked )
- tty_printf ("[revoked] ");
- if ( uid->is_expired )
- tty_printf ("[expired] ");
- tty_print_utf8_string( uid->name, uid->len );
- tty_printf("\n");
- if( with_prefs )
- {
- if(pk_version>3 || uid->selfsigversion>3)
- show_prefs (uid, with_prefs == 2);
- else
- tty_printf(_("There are no preferences on a "
- "PGP 2.x-style user ID.\n"));
- }
- }
- }
- }
-
- if (do_warn)
- tty_printf (_("Please note that the shown key validity "
- "is not necessarily correct\n"
- "unless you restart the program.\n"));
-
-}
-
-
-/* Display basic key information. This fucntion is suitable to show
- information on the key without any dependencies on the trustdb or
- any other internal GnuPG stuff. KEYBLOCK may either be a public or
- a secret key.*/
-void
-show_basic_key_info ( KBNODE keyblock )
-{
- KBNODE node;
- int i;
-
- /* The primary key */
- for (node = keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_PUBLIC_KEY)
- {
- PKT_public_key *pk = node->pkt->pkt.public_key;
-
- /* Note, we use the same format string as in other show
- functions to make the translation job easier. */
- tty_printf (_("%s%c %4u%c/%08lX created: %s expires: %s"),
- node->pkt->pkttype == PKT_PUBLIC_KEY? "pub":"sub",
- ' ',
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid_from_pk(pk,NULL),
- datestr_from_pk(pk),
- expirestr_from_pk(pk) );
- tty_printf("\n");
- print_fingerprint ( pk, NULL, 3 );
- tty_printf("\n");
- }
- else if (node->pkt->pkttype == PKT_SECRET_KEY)
- {
- PKT_secret_key *sk = node->pkt->pkt.secret_key;
- tty_printf(_("%s%c %4u%c/%08lX created: %s expires: %s"),
- node->pkt->pkttype == PKT_SECRET_KEY? "sec":"ssb",
- ' ',
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)keyid_from_sk(sk,NULL),
- datestr_from_sk(sk),
- expirestr_from_sk(sk) );
- tty_printf("\n");
- print_fingerprint (NULL, sk, 3 );
- tty_printf("\n");
- }
- }
-
- /* The user IDs. */
- for (i=0, node = keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID)
- {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- ++i;
-
- tty_printf (" ");
- if (uid->is_revoked)
- tty_printf ("[revoked] ");
- if ( uid->is_expired )
- tty_printf ("[expired] ");
- tty_print_utf8_string (uid->name, uid->len);
- tty_printf ("\n");
- }
- }
-}
-
-static void
-show_key_and_fingerprint( KBNODE keyblock )
-{
- KBNODE node;
- PKT_public_key *pk = NULL;
-
- for( node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- pk = node->pkt->pkt.public_key;
- tty_printf("pub %4u%c/%08lX %s ",
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid_from_pk(pk,NULL),
- datestr_from_pk(pk) );
- }
- else if( node->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- tty_print_utf8_string( uid->name, uid->len );
- break;
- }
- }
- tty_printf("\n");
- if( pk )
- print_fingerprint( pk, NULL, 2 );
-}
-
-
-
-/****************
- * Ask for a new user id, do the selfsignature and put it into
- * both keyblocks.
- * Return true if there is a new user id
- */
-static int
-menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock, int photo)
-{
- PKT_user_id *uid;
- PKT_public_key *pk=NULL;
- PKT_secret_key *sk=NULL;
- PKT_signature *sig=NULL;
- PACKET *pkt;
- KBNODE node;
- KBNODE pub_where=NULL, sec_where=NULL;
- int rc;
-
- for( node = pub_keyblock; node; pub_where = node, node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY )
- pk = node->pkt->pkt.public_key;
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- break;
- }
- if( !node ) /* no subkey */
- pub_where = NULL;
- for( node = sec_keyblock; node; sec_where = node, node = node->next ) {
- if( node->pkt->pkttype == PKT_SECRET_KEY )
- sk = copy_secret_key( NULL, node->pkt->pkt.secret_key);
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY )
- break;
- }
- if( !node ) /* no subkey */
- sec_where = NULL;
- assert(pk && sk);
-
- if(photo) {
- int hasattrib=0;
-
- for( node = pub_keyblock; node; node = node->next )
- if( node->pkt->pkttype == PKT_USER_ID &&
- node->pkt->pkt.user_id->attrib_data!=NULL)
- {
- hasattrib=1;
- break;
- }
-
- /* It is legal but bad for compatibility to add a photo ID to a
- v3 key as it means that PGP2 will not be able to use that key
- anymore. Also, PGP may not expect a photo on a v3 key.
- Don't bother to ask this if the key already has a photo - any
- damage has already been done at that point. -dms */
- if(pk->version==3 && !hasattrib)
- {
- if(opt.expert)
- {
- tty_printf(_("WARNING: This is a PGP2-style key. "
- "Adding a photo ID may cause some versions\n"
- " of PGP to reject this key.\n"));
-
- if(!cpr_get_answer_is_yes("keyedit.v3_photo.okay",
- _("Are you sure you still want "
- "to add it? (y/N) ")))
- return 0;
- }
- else
- {
- tty_printf(_("You may not add a photo ID to "
- "a PGP2-style key.\n"));
- return 0;
- }
- }
-
- uid = generate_photo_id(pk);
- } else
- uid = generate_user_id();
- if( !uid )
- return 0;
-
- rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, 0, 0,
- keygen_add_std_prefs, pk );
- free_secret_key( sk );
- if( rc ) {
- log_error("signing failed: %s\n", g10_errstr(rc) );
- free_user_id(uid);
- return 0;
- }
-
- /* insert/append to secret keyblock */
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_USER_ID;
- pkt->pkt.user_id = scopy_user_id(uid);
- node = new_kbnode(pkt);
- if( sec_where )
- insert_kbnode( sec_where, node, 0 );
- else
- add_kbnode( sec_keyblock, node );
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = copy_signature(NULL, sig);
- if( sec_where )
- insert_kbnode( node, new_kbnode(pkt), 0 );
- else
- add_kbnode( sec_keyblock, new_kbnode(pkt) );
- /* insert/append to public keyblock */
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_USER_ID;
- pkt->pkt.user_id = uid;
- node = new_kbnode(pkt);
- if( pub_where )
- insert_kbnode( pub_where, node, 0 );
- else
- add_kbnode( pub_keyblock, node );
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = copy_signature(NULL, sig);
- if( pub_where )
- insert_kbnode( node, new_kbnode(pkt), 0 );
- else
- add_kbnode( pub_keyblock, new_kbnode(pkt) );
- return 1;
-}
-
-
-/****************
- * Remove all selceted userids from the keyrings
- */
-static void
-menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- KBNODE node;
- int selected=0;
-
- for( node = pub_keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- selected = node->flag & NODFLG_SELUID;
- if( selected ) {
- /* Only cause a trust update if we delete a
- non-revoked user id */
- if(!node->pkt->pkt.user_id->is_revoked)
- update_trust=1;
- delete_kbnode( node );
- if( sec_keyblock ) {
- KBNODE snode;
- int s_selected = 0;
- PKT_user_id *uid = node->pkt->pkt.user_id;
- for( snode = sec_keyblock; snode; snode = snode->next ) {
- if( snode->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *suid = snode->pkt->pkt.user_id;
-
- s_selected =
- (uid->len == suid->len
- && !memcmp( uid->name, suid->name, uid->len));
- if( s_selected )
- delete_kbnode( snode );
- }
- else if( s_selected
- && snode->pkt->pkttype == PKT_SIGNATURE )
- delete_kbnode( snode );
- else if( snode->pkt->pkttype == PKT_SECRET_SUBKEY )
- s_selected = 0;
- }
- }
- }
- }
- else if( selected && node->pkt->pkttype == PKT_SIGNATURE )
- delete_kbnode( node );
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- selected = 0;
- }
- commit_kbnode( &pub_keyblock );
- if( sec_keyblock )
- commit_kbnode( &sec_keyblock );
-}
-
-
-static int
-menu_delsig( KBNODE pub_keyblock )
-{
- KBNODE node;
- PKT_user_id *uid = NULL;
- int changed=0;
-
- for( node = pub_keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- uid = (node->flag & NODFLG_SELUID)? node->pkt->pkt.user_id : NULL;
- }
- else if( uid && node->pkt->pkttype == PKT_SIGNATURE ) {
- int okay, valid, selfsig, inv_sig, no_key, other_err;
-
- tty_printf("uid ");
- tty_print_utf8_string( uid->name, uid->len );
- tty_printf("\n");
-
- okay = inv_sig = no_key = other_err = 0;
- valid = print_and_check_one_sig( pub_keyblock, node,
- &inv_sig, &no_key, &other_err,
- &selfsig, 1 );
-
- if( valid ) {
- okay = cpr_get_answer_yes_no_quit(
- "keyedit.delsig.valid",
- _("Delete this good signature? (y/N/q)"));
-
- /* Only update trust if we delete a good signature.
- The other two cases do not affect trust. */
- if(okay)
- update_trust=1;
- }
- else if( inv_sig || other_err )
- okay = cpr_get_answer_yes_no_quit(
- "keyedit.delsig.invalid",
- _("Delete this invalid signature? (y/N/q)"));
- else if( no_key )
- okay = cpr_get_answer_yes_no_quit(
- "keyedit.delsig.unknown",
- _("Delete this unknown signature? (y/N/q)"));
-
- if( okay == -1 )
- break;
- if( okay && selfsig && !cpr_get_answer_is_yes(
- "keyedit.delsig.selfsig",
- _("Really delete this self-signature? (y/N)") ))
- okay = 0;
- if( okay ) {
- delete_kbnode( node );
- changed++;
- }
-
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- uid = NULL;
- }
-
- if( changed ) {
- commit_kbnode( &pub_keyblock );
- tty_printf( changed == 1? _("Deleted %d signature.\n")
- : _("Deleted %d signatures.\n"), changed );
- }
- else
- tty_printf( _("Nothing deleted.\n") );
-
- return changed;
-}
-
-
-/****************
- * Remove some of the secondary keys
- */
-static void
-menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- KBNODE node;
- int selected=0;
-
- for( node = pub_keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- selected = node->flag & NODFLG_SELKEY;
- if( selected ) {
- delete_kbnode( node );
- if( sec_keyblock ) {
- KBNODE snode;
- int s_selected = 0;
- u32 ki[2];
-
- keyid_from_pk( node->pkt->pkt.public_key, ki );
- for( snode = sec_keyblock; snode; snode = snode->next ) {
- if( snode->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- u32 ki2[2];
-
- keyid_from_sk( snode->pkt->pkt.secret_key, ki2 );
- s_selected = (ki[0] == ki2[0] && ki[1] == ki2[1]);
- if( s_selected )
- delete_kbnode( snode );
- }
- else if( s_selected
- && snode->pkt->pkttype == PKT_SIGNATURE )
- delete_kbnode( snode );
- else
- s_selected = 0;
- }
- }
- }
- }
- else if( selected && node->pkt->pkttype == PKT_SIGNATURE )
- delete_kbnode( node );
- else
- selected = 0;
- }
- commit_kbnode( &pub_keyblock );
- if( sec_keyblock )
- commit_kbnode( &sec_keyblock );
-
- /* No need to set update_trust here since signing keys no longer
- are used to certify other keys, so there is no change in trust
- when revoking/removing them */
-}
-
-
-/****************
- * Ask for a new revoker, do the selfsignature and put it into
- * both keyblocks.
- * Return true if there is a new revoker
- */
-static int
-menu_addrevoker( KBNODE pub_keyblock, KBNODE sec_keyblock, int sensitive )
-{
- PKT_public_key *pk=NULL,*revoker_pk=NULL;
- PKT_secret_key *sk=NULL;
- PKT_signature *sig=NULL;
- PACKET *pkt;
- struct revocation_key revkey;
- size_t fprlen;
- int rc;
-
- assert(pub_keyblock->pkt->pkttype==PKT_PUBLIC_KEY);
- assert(sec_keyblock->pkt->pkttype==PKT_SECRET_KEY);
-
- pk=pub_keyblock->pkt->pkt.public_key;
-
- if(pk->numrevkeys==0 && pk->version==3)
- {
- /* It is legal but bad for compatibility to add a revoker to a
- v3 key as it means that PGP2 will not be able to use that key
- anymore. Also, PGP may not expect a revoker on a v3 key.
- Don't bother to ask this if the key already has a revoker -
- any damage has already been done at that point. -dms */
- if(opt.expert)
- {
- tty_printf(_("WARNING: This is a PGP 2.x-style key. "
- "Adding a designated revoker may cause\n"
- " some versions of PGP to reject this key.\n"));
-
- if(!cpr_get_answer_is_yes("keyedit.v3_revoker.okay",
- _("Are you sure you still want "
- "to add it? (y/N) ")))
- return 0;
- }
- else
- {
- tty_printf(_("You may not add a designated revoker to "
- "a PGP 2.x-style key.\n"));
- return 0;
- }
- }
-
- sk=copy_secret_key(NULL,sec_keyblock->pkt->pkt.secret_key);
-
- for(;;)
- {
- char *answer;
- u32 keyid[2];
- char *p;
- size_t n;
-
- if(revoker_pk)
- free_public_key(revoker_pk);
-
- revoker_pk=m_alloc_clear(sizeof(*revoker_pk));
-
- tty_printf("\n");
-
- answer=cpr_get_utf8("keyedit.add_revoker",
- _("Enter the user ID of the designated revoker: "));
- if(answer[0]=='\0' || answer[0]=='\004')
- goto fail;
-
- rc=get_pubkey_byname(revoker_pk,answer,NULL,NULL);
-
- if(rc)
- {
- log_error (_("key `%s' not found: %s\n"),answer,g10_errstr(rc));
- continue;
- }
-
- fingerprint_from_pk(revoker_pk,revkey.fpr,&fprlen);
- if(fprlen!=20)
- {
- log_error(_("cannot appoint a PGP 2.x style key as a "
- "designated revoker\n"));
- continue;
- }
-
- revkey.class=0x80;
- if(sensitive)
- revkey.class|=0x40;
- revkey.algid=revoker_pk->pubkey_algo;
-
- if(cmp_public_keys(revoker_pk,pk)==0)
- {
- /* This actually causes no harm (after all, a key that
- designates itself as a revoker is the same as a
- regular key), but it's easy enough to check. */
- log_error(_("you cannot appoint a key as its own "
- "designated revoker\n"));
-
- continue;
- }
-
- keyid_from_pk(pk,NULL);
-
- /* Does this revkey already exist? */
- if(!pk->revkey && pk->numrevkeys)
- BUG();
- else
- {
- int i;
-
- for(i=0;i<pk->numrevkeys;i++)
- {
- if(memcmp(&pk->revkey[i],&revkey,
- sizeof(struct revocation_key))==0)
- {
- char buf[50];
-
- log_error(_("this key has already been designated "
- "as a revoker\n"));
-
- sprintf(buf,"%08lX%08lX",
- (ulong)pk->keyid[0],(ulong)pk->keyid[1]);
- write_status_text(STATUS_ALREADY_SIGNED,buf);
-
- break;
- }
- }
-
- if(i<pk->numrevkeys)
- continue;
- }
-
- keyid_from_pk(revoker_pk,keyid);
-
- tty_printf("\npub %4u%c/%08lX %s ",
- nbits_from_pk( revoker_pk ),
- pubkey_letter( revoker_pk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_pk(pk) );
-
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\n");
- print_fingerprint(revoker_pk,NULL,2);
- tty_printf("\n");
-
- tty_printf("WARNING: appointing a key as a designated revoker "
- "cannot be undone!\n");
-
- tty_printf("\n");
-
- if(!cpr_get_answer_is_yes("keyedit.add_revoker.okay",
- "Are you sure you want to appoint this "
- "key as a designated revoker? (y/N): "))
- continue;
-
- free_public_key(revoker_pk);
- revoker_pk=NULL;
- break;
- }
-
- /* The 1F signature must be at least v4 to carry the revocation key
- subpacket. */
- rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x1F, 0, 4, 0, 0,
- keygen_add_revkey,&revkey );
- if( rc )
- {
- log_error("signing failed: %s\n", g10_errstr(rc) );
- goto fail;
- }
-
- free_secret_key(sk);
- sk=NULL;
-
- /* insert into secret keyblock */
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = copy_signature(NULL, sig);
- insert_kbnode( sec_keyblock, new_kbnode(pkt), PKT_SIGNATURE );
-
- /* insert into public keyblock */
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- insert_kbnode( pub_keyblock, new_kbnode(pkt), PKT_SIGNATURE );
-
- return 1;
-
- fail:
- if(sk)
- free_secret_key(sk);
- if(sig)
- free_seckey_enc(sig);
- if(revoker_pk)
- free_public_key(revoker_pk);
-
- return 0;
-}
-
-
-static int
-menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- int n1, signumber, rc;
- u32 expiredate;
- int mainkey=0;
- PKT_secret_key *sk; /* copy of the main sk */
- PKT_public_key *main_pk, *sub_pk;
- PKT_user_id *uid;
- KBNODE node;
- u32 keyid[2];
-
- if( count_selected_keys( sec_keyblock ) ) {
- tty_printf(_("Please remove selections from the secret keys.\n"));
- return 0;
- }
-
- n1 = count_selected_keys( pub_keyblock );
- if( n1 > 1 ) {
- tty_printf(_("Please select at most one secondary key.\n"));
- return 0;
- }
- else if( n1 )
- tty_printf(_("Changing expiration time for a secondary key.\n"));
- else {
- tty_printf(_("Changing expiration time for the primary key.\n"));
- mainkey=1;
- }
-
- expiredate = ask_expiredate();
- node = find_kbnode( sec_keyblock, PKT_SECRET_KEY );
- sk = copy_secret_key( NULL, node->pkt->pkt.secret_key);
-
- /* Now we can actually change the self signature(s) */
- main_pk = sub_pk = NULL;
- uid = NULL;
- signumber = 0;
- for( node=pub_keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- main_pk = node->pkt->pkt.public_key;
- keyid_from_pk( main_pk, keyid );
- main_pk->expiredate = expiredate;
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- && (node->flag & NODFLG_SELKEY ) ) {
- sub_pk = node->pkt->pkt.public_key;
- sub_pk->expiredate = expiredate;
- }
- else if( node->pkt->pkttype == PKT_USER_ID )
- uid = node->pkt->pkt.user_id;
- else if( main_pk && node->pkt->pkttype == PKT_SIGNATURE
- && ( mainkey || sub_pk ) ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1]
- && ( (mainkey && uid && (sig->sig_class&~3) == 0x10)
- || (!mainkey && sig->sig_class == 0x18) ) ) {
- /* this is a selfsignature which is to be replaced */
- PKT_signature *newsig;
- PACKET *newpkt;
- KBNODE sn;
- int signumber2 = 0;
-
- signumber++;
-
- if( (mainkey && main_pk->version < 4)
- || (!mainkey && sub_pk->version < 4 ) ) {
- log_info(_(
- "You can't change the expiration date of a v3 key\n"));
- free_secret_key( sk );
- return 0;
- }
-
- /* find the corresponding secret self-signature */
- for( sn=sec_keyblock; sn; sn = sn->next ) {
- if( sn->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *b = sn->pkt->pkt.signature;
- if( keyid[0] == b->keyid[0] && keyid[1] == b->keyid[1]
- && sig->sig_class == b->sig_class
- && ++signumber2 == signumber )
- break;
- }
- }
- if( !sn )
- log_info(_("No corresponding signature in secret ring\n"));
-
- /* create new self signature */
- if( mainkey )
- rc = make_keysig_packet( &newsig, main_pk, uid, NULL,
- sk, 0x13, 0, 0, 0, 0,
- keygen_add_std_prefs, main_pk );
- else
- rc = make_keysig_packet( &newsig, main_pk, NULL, sub_pk,
- sk, 0x18, 0, 0, 0, 0,
- keygen_add_key_expire, sub_pk );
- if( rc ) {
- log_error("make_keysig_packet failed: %s\n",
- g10_errstr(rc));
- free_secret_key( sk );
- return 0;
- }
- /* replace the packet */
- newpkt = m_alloc_clear( sizeof *newpkt );
- newpkt->pkttype = PKT_SIGNATURE;
- newpkt->pkt.signature = newsig;
- free_packet( node->pkt );
- m_free( node->pkt );
- node->pkt = newpkt;
- if( sn ) {
- newpkt = m_alloc_clear( sizeof *newpkt );
- newpkt->pkttype = PKT_SIGNATURE;
- newpkt->pkt.signature = copy_signature( NULL, newsig );
- free_packet( sn->pkt );
- m_free( sn->pkt );
- sn->pkt = newpkt;
- }
- sub_pk = NULL;
- }
- }
- }
-
- free_secret_key( sk );
- update_trust=1;
- return 1;
-}
-
-static int
-change_primary_uid_cb ( PKT_signature *sig, void *opaque )
-{
- byte buf[1];
-
- /* first clear all primary uid flags so that we are sure none are
- * lingering around */
- delete_sig_subpkt (sig->hashed, SIGSUBPKT_PRIMARY_UID);
- delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PRIMARY_UID);
-
- /* if opaque is set,we want to set the primary id */
- if (opaque) {
- buf[0] = 1;
- build_sig_subpkt (sig, SIGSUBPKT_PRIMARY_UID, buf, 1 );
- }
-
- return 0;
-}
-
-
-/*
- * Set the primary uid flag for the selected UID. We will also reset
- * all other primary uid flags. For this to work with have to update
- * all the signature timestamps. If we would do this with the current
- * time, we lose quite a lot of information, so we use a a kludge to
- * do this: Just increment the timestamp by one second which is
- * sufficient to updated a signature during import.
- */
-static int
-menu_set_primary_uid ( KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- PKT_secret_key *sk; /* copy of the main sk */
- PKT_public_key *main_pk;
- PKT_user_id *uid;
- KBNODE node;
- u32 keyid[2];
- int selected;
- int attribute = 0;
- int modified = 0;
-
- if ( count_selected_uids (pub_keyblock) != 1 ) {
- tty_printf(_("Please select exactly one user ID.\n"));
- return 0;
- }
-
- node = find_kbnode( sec_keyblock, PKT_SECRET_KEY );
- sk = copy_secret_key( NULL, node->pkt->pkt.secret_key);
-
- /* Now we can actually change the self signature(s) */
- main_pk = NULL;
- uid = NULL;
- selected = 0;
-
- /* Is our selected uid an attribute packet? */
- for ( node=pub_keyblock; node; node = node->next )
- if (node->pkt->pkttype == PKT_USER_ID && node->flag & NODFLG_SELUID)
- attribute = (node->pkt->pkt.user_id->attrib_data!=NULL);
-
- for ( node=pub_keyblock; node; node = node->next ) {
- if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- break; /* ready */
-
- if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- main_pk = node->pkt->pkt.public_key;
- keyid_from_pk( main_pk, keyid );
- }
- else if ( node->pkt->pkttype == PKT_USER_ID ) {
- uid = node->pkt->pkt.user_id;
- selected = node->flag & NODFLG_SELUID;
- }
- else if ( main_pk && uid && node->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1]
- && (uid && (sig->sig_class&~3) == 0x10)
- && attribute == (uid->attrib_data!=NULL)) {
- if(sig->version < 4) {
- char *user=utf8_to_native(uid->name,strlen(uid->name),0);
-
- log_info(_("skipping v3 self-signature on user id \"%s\"\n"),
- user);
- m_free(user);
- }
- else {
- /* This is a selfsignature which is to be replaced.
- We can just ignore v3 signatures because they are
- not able to carry the primary ID flag. We also
- ignore self-sigs on user IDs that are not of the
- same type that we are making primary. That is, if
- we are making a user ID primary, we alter user IDs.
- If we are making an attribute packet primary, we
- alter attribute packets. */
-
- /* FIXME: We must make sure that we only have one
- self-signature per user ID here (not counting
- revocations) */
- PKT_signature *newsig;
- PACKET *newpkt;
- const byte *p;
- int action;
-
- /* see whether this signature has the primary UID flag */
- p = parse_sig_subpkt (sig->hashed,
- SIGSUBPKT_PRIMARY_UID, NULL );
- if ( !p )
- p = parse_sig_subpkt (sig->unhashed,
- SIGSUBPKT_PRIMARY_UID, NULL );
- if ( p && *p ) /* yes */
- action = selected? 0 : -1;
- else /* no */
- action = selected? 1 : 0;
-
- if (action) {
- int rc = update_keysig_packet (&newsig, sig,
- main_pk, uid,
- sk,
- change_primary_uid_cb,
- action > 0? "x":NULL );
- if( rc ) {
- log_error ("update_keysig_packet failed: %s\n",
- g10_errstr(rc));
- free_secret_key( sk );
- return 0;
- }
- /* replace the packet */
- newpkt = m_alloc_clear( sizeof *newpkt );
- newpkt->pkttype = PKT_SIGNATURE;
- newpkt->pkt.signature = newsig;
- free_packet( node->pkt );
- m_free( node->pkt );
- node->pkt = newpkt;
- modified = 1;
- }
- }
- }
- }
- }
-
- free_secret_key( sk );
- return modified;
-}
-
-
-/*
- * Set preferences to new values for the selected user IDs
- */
-static int
-menu_set_preferences (KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- PKT_secret_key *sk; /* copy of the main sk */
- PKT_public_key *main_pk;
- PKT_user_id *uid;
- KBNODE node;
- u32 keyid[2];
- int selected, select_all;
- int modified = 0;
-
- select_all = !count_selected_uids (pub_keyblock);
-
- node = find_kbnode( sec_keyblock, PKT_SECRET_KEY );
- sk = copy_secret_key( NULL, node->pkt->pkt.secret_key);
-
- /* Now we can actually change the self signature(s) */
- main_pk = NULL;
- uid = NULL;
- selected = 0;
- for ( node=pub_keyblock; node; node = node->next ) {
- if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- break; /* ready */
-
- if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) {
- main_pk = node->pkt->pkt.public_key;
- keyid_from_pk( main_pk, keyid );
- }
- else if ( node->pkt->pkttype == PKT_USER_ID ) {
- uid = node->pkt->pkt.user_id;
- selected = select_all || (node->flag & NODFLG_SELUID);
- }
- else if ( main_pk && uid && selected
- && node->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1]
- && (uid && (sig->sig_class&~3) == 0x10) ) {
- if( sig->version < 4 ) {
- char *user=utf8_to_native(uid->name,strlen(uid->name),0);
-
- log_info(_("skipping v3 self-signature on user id \"%s\"\n"),
- user);
- m_free(user);
- }
- else {
- /* This is a selfsignature which is to be replaced
- * We have to ignore v3 signatures because they are
- * not able to carry the preferences */
- PKT_signature *newsig;
- PACKET *newpkt;
- int rc;
-
- rc = update_keysig_packet (&newsig, sig,
- main_pk, uid,
- sk,
- keygen_upd_std_prefs,
- NULL );
- if( rc ) {
- log_error ("update_keysig_packet failed: %s\n",
- g10_errstr(rc));
- free_secret_key( sk );
- return 0;
- }
- /* replace the packet */
- newpkt = m_alloc_clear( sizeof *newpkt );
- newpkt->pkttype = PKT_SIGNATURE;
- newpkt->pkt.signature = newsig;
- free_packet( node->pkt );
- m_free( node->pkt );
- node->pkt = newpkt;
- modified = 1;
- }
- }
- }
- }
-
- free_secret_key( sk );
- return modified;
-}
-
-
-/****************
- * Select one user id or remove all selection if index is 0.
- * Returns: True if the selection changed;
- */
-static int
-menu_select_uid( KBNODE keyblock, int idx )
-{
- KBNODE node;
- int i;
-
- /* first check that the index is valid */
- if( idx ) {
- for( i=0, node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- if( ++i == idx )
- break;
- }
- }
- if( !node ) {
- tty_printf(_("No user ID with index %d\n"), idx );
- return 0;
- }
- }
- else { /* reset all */
- for( i=0, node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID )
- node->flag &= ~NODFLG_SELUID;
- }
- return 1;
- }
- /* and toggle the new index */
- for( i=0, node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID ) {
- if( ++i == idx ) {
- if( (node->flag & NODFLG_SELUID) )
- node->flag &= ~NODFLG_SELUID;
- else
- node->flag |= NODFLG_SELUID;
- }
- }
- }
-
- return 1;
-}
-
-/****************
- * Select secondary keys
- * Returns: True if the selection changed;
- */
-static int
-menu_select_key( KBNODE keyblock, int idx )
-{
- KBNODE node;
- int i;
-
- /* first check that the index is valid */
- if( idx ) {
- for( i=0, node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- if( ++i == idx )
- break;
- }
- }
- if( !node ) {
- tty_printf(_("No secondary key with index %d\n"), idx );
- return 0;
- }
- }
- else { /* reset all */
- for( i=0, node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY )
- node->flag &= ~NODFLG_SELKEY;
- }
- return 1;
- }
- /* and set the new index */
- for( i=0, node = keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- if( ++i == idx ) {
- if( (node->flag & NODFLG_SELKEY) )
- node->flag &= ~NODFLG_SELKEY;
- else
- node->flag |= NODFLG_SELKEY;
- }
- }
- }
-
- return 1;
-}
-
-
-static int
-count_uids_with_flag( KBNODE keyblock, unsigned flag )
-{
- KBNODE node;
- int i=0;
-
- for( node = keyblock; node; node = node->next )
- if( node->pkt->pkttype == PKT_USER_ID && (node->flag & flag) )
- i++;
- return i;
-}
-
-static int
-count_keys_with_flag( KBNODE keyblock, unsigned flag )
-{
- KBNODE node;
- int i=0;
-
- for( node = keyblock; node; node = node->next )
- if( ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY)
- && (node->flag & flag) )
- i++;
- return i;
-}
-
-static int
-count_uids( KBNODE keyblock )
-{
- KBNODE node;
- int i=0;
-
- for( node = keyblock; node; node = node->next )
- if( node->pkt->pkttype == PKT_USER_ID )
- i++;
- return i;
-}
-
-
-/****************
- * Returns true if there is at least one selected user id
- */
-static int
-count_selected_uids( KBNODE keyblock )
-{
- return count_uids_with_flag( keyblock, NODFLG_SELUID);
-}
-
-static int
-count_selected_keys( KBNODE keyblock )
-{
- return count_keys_with_flag( keyblock, NODFLG_SELKEY);
-}
-
-/* returns how many real (i.e. not attribute) uids are unmarked */
-static int
-real_uids_left( KBNODE keyblock )
-{
- KBNODE node;
- int real=0;
-
- for(node=keyblock;node;node=node->next)
- if(node->pkt->pkttype==PKT_USER_ID && !(node->flag&NODFLG_SELUID) &&
- !node->pkt->pkt.user_id->attrib_data)
- real++;
-
- return real;
-}
-
-/*
- * Ask whether the signature should be revoked. If the user commits this,
- * flag bit MARK_A is set on the signature and the user ID.
- */
-static void
-ask_revoke_sig( KBNODE keyblock, KBNODE node )
-{
- int doit=0;
- PKT_signature *sig = node->pkt->pkt.signature;
- KBNODE unode = find_prev_kbnode( keyblock, node, PKT_USER_ID );
-
- if( !unode ) {
- log_error("Oops: no user ID for signature\n");
- return;
- }
-
- tty_printf(_("user ID: \""));
- tty_print_utf8_string( unode->pkt->pkt.user_id->name,
- unode->pkt->pkt.user_id->len );
-
- if(sig->flags.exportable)
- tty_printf(_("\"\nsigned with your key %08lX at %s\n"),
- (ulong)sig->keyid[1], datestr_from_sig(sig) );
- else
- tty_printf(_("\"\nlocally signed with your key %08lX at %s\n"),
- (ulong)sig->keyid[1], datestr_from_sig(sig) );
-
- if(sig->flags.expired)
- {
- tty_printf(_("This signature expired on %s.\n"),
- expirestr_from_sig(sig));
- /* Use a different question so we can have different help text */
- doit=cpr_get_answer_is_yes("ask_revoke_sig.expired",
- _("Are you sure you still want to revoke it? (y/N) "));
- }
- else
- doit=cpr_get_answer_is_yes("ask_revoke_sig.one",
- _("Create a revocation certificate for this signature? (y/N) "));
-
- if(doit) {
- node->flag |= NODFLG_MARK_A;
- unode->flag |= NODFLG_MARK_A;
- }
-}
-
-/****************
- * Display all user ids of the current public key together with signatures
- * done by one of our keys. Then walk over all this sigs and ask the user
- * whether he wants to revoke this signature.
- * Return: True when the keyblock has changed.
- */
-static int
-menu_revsig( KBNODE keyblock )
-{
- PKT_signature *sig;
- PKT_public_key *primary_pk;
- KBNODE node;
- int changed = 0;
- int rc, any, skip=1, all=!count_selected_uids(keyblock);
- struct revocation_reason_info *reason = NULL;
-
- /* FIXME: detect duplicates here */
- tty_printf(_("You have signed these user IDs:\n"));
- for( node = keyblock; node; node = node->next ) {
- node->flag &= ~(NODFLG_SELSIG | NODFLG_MARK_A);
- if( node->pkt->pkttype == PKT_USER_ID ) {
- if( node->flag&NODFLG_SELUID || all ) {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- /* Hmmm: Should we show only UIDs with a signature? */
- tty_printf(" ");
- tty_print_utf8_string( uid->name, uid->len );
- tty_printf("\n");
- skip=0;
- }
- else
- skip=1;
- }
- else if( !skip && node->pkt->pkttype == PKT_SIGNATURE
- && ((sig = node->pkt->pkt.signature),
- !seckey_available(sig->keyid) ) ) {
- if( (sig->sig_class&~3) == 0x10 ) {
- tty_printf(_(" signed by %08lX at %s%s%s\n"),
- (ulong)sig->keyid[1], datestr_from_sig(sig),
- sig->flags.exportable?"":" (non-exportable)",
- sig->flags.revocable?"":" (non-revocable)");
- if(sig->flags.revocable)
- node->flag |= NODFLG_SELSIG;
- }
- else if( sig->sig_class == 0x30 ) {
- tty_printf(_(" revoked by %08lX at %s\n"),
- (ulong)sig->keyid[1], datestr_from_sig(sig) );
- }
- }
- }
-
- /* ask */
- for( node = keyblock; node; node = node->next ) {
- if( !(node->flag & NODFLG_SELSIG) )
- continue;
- ask_revoke_sig( keyblock, node );
- }
-
- /* present selected */
- any = 0;
- for( node = keyblock; node; node = node->next ) {
- if( !(node->flag & NODFLG_MARK_A) )
- continue;
- if( !any ) {
- any = 1;
- tty_printf(_("You are about to revoke these signatures:\n"));
- }
- if( node->pkt->pkttype == PKT_USER_ID ) {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- tty_printf(" ");
- tty_print_utf8_string( uid->name, uid->len );
- tty_printf("\n");
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE ) {
- sig = node->pkt->pkt.signature;
- tty_printf(_(" signed by %08lX at %s%s\n"),
- (ulong)sig->keyid[1], datestr_from_sig(sig),
- sig->flags.exportable?"":_(" (non-exportable)") );
- }
- }
- if( !any )
- return 0; /* none selected */
-
- if( !cpr_get_answer_is_yes("ask_revoke_sig.okay",
- _("Really create the revocation certificates? (y/N) ")) )
- return 0; /* forget it */
-
- reason = ask_revocation_reason( 0, 1, 0 );
- if( !reason ) { /* user decided to cancel */
- return 0;
- }
-
- /* now we can sign the user ids */
- reloop: /* (must use this, because we are modifing the list) */
- primary_pk = keyblock->pkt->pkt.public_key;
- for( node=keyblock; node; node = node->next ) {
- KBNODE unode;
- PACKET *pkt;
- struct sign_attrib attrib;
- PKT_secret_key *sk;
-
- if( !(node->flag & NODFLG_MARK_A)
- || node->pkt->pkttype != PKT_SIGNATURE )
- continue;
- unode = find_prev_kbnode( keyblock, node, PKT_USER_ID );
- assert( unode ); /* we already checked this */
-
- memset( &attrib, 0, sizeof attrib );
- attrib.reason = reason;
- attrib.non_exportable=!node->pkt->pkt.signature->flags.exportable;
-
- node->flag &= ~NODFLG_MARK_A;
- sk = m_alloc_secure_clear( sizeof *sk );
- if( get_seckey( sk, node->pkt->pkt.signature->keyid ) ) {
- log_info(_("no secret key\n"));
- continue;
- }
- rc = make_keysig_packet( &sig, primary_pk,
- unode->pkt->pkt.user_id,
- NULL,
- sk,
- 0x30, 0, 0, 0, 0,
- sign_mk_attrib,
- &attrib );
- free_secret_key(sk);
- if( rc ) {
- log_error(_("signing failed: %s\n"), g10_errstr(rc));
- release_revocation_reason_info( reason );
- return changed;
- }
- changed = 1; /* we changed the keyblock */
- update_trust = 1;
- /* Are we revoking our own uid? */
- if(primary_pk->keyid[0]==sig->keyid[0] &&
- primary_pk->keyid[1]==sig->keyid[1])
- unode->pkt->pkt.user_id->is_revoked=1;
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- insert_kbnode( unode, new_kbnode(pkt), 0 );
- goto reloop;
- }
-
- release_revocation_reason_info( reason );
- return changed;
-}
-
-/****************
- * Revoke some of the secondary keys.
- * Hmmm: Should we add a revocation to the secret keyring too?
- * Does its all make sense to duplicate most of the information?
- */
-static int
-menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- PKT_public_key *mainpk;
- KBNODE node;
- int changed = 0;
- int rc;
- struct revocation_reason_info *reason = NULL;
-
- reason = ask_revocation_reason( 1, 0, 0 );
- if( !reason ) { /* user decided to cancel */
- return 0;
- }
-
-
- reloop: /* (better this way because we are modifing the keyring) */
- mainpk = pub_keyblock->pkt->pkt.public_key;
- for( node = pub_keyblock; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- && (node->flag & NODFLG_SELKEY) ) {
- PACKET *pkt;
- PKT_signature *sig;
- PKT_secret_key *sk;
- PKT_public_key *subpk = node->pkt->pkt.public_key;
- struct sign_attrib attrib;
-
- memset( &attrib, 0, sizeof attrib );
- attrib.reason = reason;
-
- node->flag &= ~NODFLG_SELKEY;
- sk = copy_secret_key( NULL, sec_keyblock->pkt->pkt.secret_key );
- rc = make_keysig_packet( &sig, mainpk, NULL, subpk, sk,
- 0x28, 0, 0, 0, 0,
- sign_mk_attrib, &attrib );
- free_secret_key(sk);
- if( rc ) {
- log_error(_("signing failed: %s\n"), g10_errstr(rc));
- release_revocation_reason_info( reason );
- return changed;
- }
- changed = 1; /* we changed the keyblock */
-
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- insert_kbnode( node, new_kbnode(pkt), 0 );
- goto reloop;
- }
- }
- commit_kbnode( &pub_keyblock );
- /*commit_kbnode( &sec_keyblock );*/
-
- /* No need to set update_trust here since signing keys no longer
- are used to certify other keys, so there is no change in trust
- when revoking/removing them */
-
- release_revocation_reason_info( reason );
- return changed;
-}
-
-
-static int
-enable_disable_key( KBNODE keyblock, int disable )
-{
- PKT_public_key *pk = find_kbnode( keyblock, PKT_PUBLIC_KEY )
- ->pkt->pkt.public_key;
- unsigned int trust, newtrust;
-
- trust = newtrust = get_ownertrust (pk);
- newtrust &= ~TRUST_FLAG_DISABLED;
- if( disable )
- newtrust |= TRUST_FLAG_DISABLED;
- if( trust == newtrust )
- return 0; /* already in that state */
- update_ownertrust(pk, newtrust );
- return 0;
-}
-
-
-static void
-menu_showphoto( KBNODE keyblock )
-{
- KBNODE node;
- int select_all = !count_selected_uids(keyblock);
- int count=0;
- PKT_public_key *pk=NULL;
- u32 keyid[2];
-
- /* Look for the public key first. We have to be really, really,
- explicit as to which photo this is, and what key it is a UID on
- since people may want to sign it. */
-
- for( node = keyblock; node; node = node->next )
- {
- if( node->pkt->pkttype == PKT_PUBLIC_KEY )
- {
- pk = node->pkt->pkt.public_key;
- keyid_from_pk(pk, keyid);
- }
- else if( node->pkt->pkttype == PKT_USER_ID )
- {
- PKT_user_id *uid = node->pkt->pkt.user_id;
- count++;
-
- if((select_all || (node->flag & NODFLG_SELUID)) &&
- uid->attribs!=NULL)
- {
- int i;
-
- for(i=0;i<uid->numattribs;i++)
- {
- byte type;
- u32 size;
-
- if(uid->attribs[i].type==ATTRIB_IMAGE &&
- parse_image_header(&uid->attribs[i],&type,&size))
- {
- tty_printf(_("Displaying %s photo ID of size %ld for "
- "key 0x%08lX (uid %d)\n"),
- image_type_to_string(type,1),
- (ulong)size,(ulong)keyid[1],count);
- show_photos(&uid->attribs[i],1,pk,NULL);
- }
- }
- }
- }
- }
-}
diff --git a/g10/keygen.c b/g10/keygen.c
deleted file mode 100644
index 7582805fa..000000000
--- a/g10/keygen.c
+++ /dev/null
@@ -1,2429 +0,0 @@
-/* keygen.c - generate a key pair
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <assert.h>
-#include "util.h"
-#include "main.h"
-#include "packet.h"
-#include "cipher.h"
-#include "ttyio.h"
-#include "options.h"
-#include "keydb.h"
-#include "trustdb.h"
-#include "status.h"
-#include "i18n.h"
-
-#define MAX_PREFS 30
-
-
-enum para_name {
- pKEYTYPE,
- pKEYLENGTH,
- pKEYUSAGE,
- pSUBKEYTYPE,
- pSUBKEYLENGTH,
- pSUBKEYUSAGE,
- pNAMEREAL,
- pNAMEEMAIL,
- pNAMECOMMENT,
- pPREFERENCES,
- pREVOKER,
- pUSERID,
- pEXPIREDATE,
- pKEYEXPIRE, /* in n seconds */
- pSUBKEYEXPIRE, /* in n seconds */
- pPASSPHRASE,
- pPASSPHRASE_DEK,
- pPASSPHRASE_S2K
-};
-
-struct para_data_s {
- struct para_data_s *next;
- int lnr;
- enum para_name key;
- union {
- DEK *dek;
- STRING2KEY *s2k;
- u32 expire;
- unsigned int usage;
- struct revocation_key revkey;
- char value[1];
- } u;
-};
-
-struct output_control_s {
- int lnr;
- int dryrun;
- int use_files;
- struct {
- char *fname;
- char *newfname;
- IOBUF stream;
- armor_filter_context_t afx;
- } pub;
- struct {
- char *fname;
- char *newfname;
- IOBUF stream;
- armor_filter_context_t afx;
- } sec;
-};
-
-
-struct opaque_data_usage_and_pk {
- unsigned int usage;
- PKT_public_key *pk;
-};
-
-
-static int prefs_initialized = 0;
-static byte sym_prefs[MAX_PREFS];
-static int nsym_prefs;
-static byte hash_prefs[MAX_PREFS];
-static int nhash_prefs;
-static byte zip_prefs[MAX_PREFS];
-static int nzip_prefs;
-static int mdc_available;
-
-static void do_generate_keypair( struct para_data_s *para,
- struct output_control_s *outctrl );
-static int write_keyblock( IOBUF out, KBNODE node );
-
-
-static void
-write_uid( KBNODE root, const char *s )
-{
- PACKET *pkt = m_alloc_clear(sizeof *pkt );
- size_t n = strlen(s);
-
- pkt->pkttype = PKT_USER_ID;
- pkt->pkt.user_id = m_alloc_clear( sizeof *pkt->pkt.user_id + n - 1 );
- pkt->pkt.user_id->len = n;
- pkt->pkt.user_id->ref = 1;
- strcpy(pkt->pkt.user_id->name, s);
- add_kbnode( root, new_kbnode( pkt ) );
-}
-
-static void
-do_add_key_flags (PKT_signature *sig, unsigned int use)
-{
- byte buf[1];
-
- if (!use)
- return;
-
- buf[0] = 0;
- if (use & PUBKEY_USAGE_SIG)
- buf[0] |= 0x01 | 0x02;
- if (use & PUBKEY_USAGE_ENC)
- buf[0] |= 0x04 | 0x08;
- build_sig_subpkt (sig, SIGSUBPKT_KEY_FLAGS, buf, 1);
-}
-
-
-int
-keygen_add_key_expire( PKT_signature *sig, void *opaque )
-{
- PKT_public_key *pk = opaque;
- byte buf[8];
- u32 u;
-
- if( pk->expiredate ) {
- u = pk->expiredate > pk->timestamp? pk->expiredate - pk->timestamp
- : pk->timestamp;
- buf[0] = (u >> 24) & 0xff;
- buf[1] = (u >> 16) & 0xff;
- buf[2] = (u >> 8) & 0xff;
- buf[3] = u & 0xff;
- build_sig_subpkt( sig, SIGSUBPKT_KEY_EXPIRE, buf, 4 );
- }
-
- return 0;
-}
-
-static int
-keygen_add_key_flags_and_expire (PKT_signature *sig, void *opaque)
-{
- struct opaque_data_usage_and_pk *oduap = opaque;
-
- do_add_key_flags (sig, oduap->usage);
- return keygen_add_key_expire (sig, oduap->pk);
-}
-
-static int
-set_one_pref (ulong val, int type, int (*cf)(int), byte *buf, int *nbuf)
-{
- int i;
-
- if (cf (val)) {
- log_info (_("preference %c%lu is not valid\n"), type, val);
- if(type=='S' && val==CIPHER_ALGO_IDEA)
- idea_cipher_warn(1);
- return -1;
- }
- for (i=0; i < *nbuf; i++ ) {
- if (buf[i] == val) {
- log_info (_("preference %c%lu duplicated\n"), type, val);
- return -1;
- }
- }
- if (*nbuf >= MAX_PREFS) {
- log_info (_("too many `%c' preferences\n"), type);
- return -1;
- }
- buf[(*nbuf)++] = val;
- return 0;
-}
-
-
-/*
- * Parse the supplied string and use it to set the standard preferences.
- * The String is expected to be in a forma like the one printed by "prefs",
- * something like: "S10 S3 H3 H2 Z2 Z1". Use NULL to set the default
- * preferences.
- * Returns: 0 = okay
- */
-int
-keygen_set_std_prefs (const char *string,int personal)
-{
- byte sym[MAX_PREFS], hash[MAX_PREFS], zip[MAX_PREFS];
- int nsym=0, nhash=0, nzip=0, mdc=1; /* mdc defaults on */
- ulong val;
- const char *s, *s2;
- int rc = 0;
-
- if (!string || !ascii_strcasecmp (string, "default")) {
- if (opt.def_preference_list)
- string=opt.def_preference_list;
- else if ( !check_cipher_algo(CIPHER_ALGO_IDEA) )
- string = "S7 S3 S2 S1 H2 H3 Z2 Z1";
- else
- string = "S7 S3 S2 H2 H3 Z2 Z1";
-
- /* If we have it, IDEA goes *after* 3DES so it won't be used
- unless we're encrypting along with a V3 key. Ideally, we
- would only put the S1 preference in if the key was RSA and
- <=2048 bits, as that is what won't break PGP2, but that is
- difficult with the current code, and not really worth
- checking as a non-RSA <=2048 bit key wouldn't be usable by
- PGP2 anyway -dms */
- }
- else if (!ascii_strcasecmp (string, "none"))
- string = "";
-
- for (s=string; *s; s = s2) {
- if ((*s=='s' || *s == 'S') && isdigit(s[1]) ) {
- val = strtoul (++s, (char**)&s2, 10);
- if (set_one_pref (val, 'S', check_cipher_algo, sym, &nsym))
- rc = -1;
- }
- else if ((*s=='h' || *s == 'H') && isdigit(s[1]) ) {
- val = strtoul (++s, (char**)&s2, 10);
- if (set_one_pref (val, 'H', check_digest_algo, hash, &nhash))
- rc = -1;
- }
- else if ((*s=='z' || *s == 'Z') && isdigit(s[1]) ) {
- val = strtoul (++s, (char**)&s2, 10);
- if (set_one_pref (val, 'Z', check_compress_algo, zip, &nzip))
- rc = -1;
- }
- else if (ascii_strcasecmp(s,"mdc")==0) {
- mdc=1;
- s2=s+3;
- }
- else if (ascii_strcasecmp(s,"no-mdc")==0) {
- mdc=0;
- s2=s+6;
- }
- else if (isspace (*s))
- s2 = s+1;
- else {
- log_info (_("invalid character in preference string\n"));
- return -1;
- }
- }
-
- if (!rc)
- {
- if(personal)
- {
- if(personal==PREFTYPE_SYM)
- {
- m_free(opt.personal_cipher_prefs);
-
- if(nsym==0)
- opt.personal_cipher_prefs=NULL;
- else
- {
- int i;
-
- opt.personal_cipher_prefs=
- m_alloc(sizeof(prefitem_t *)*(nsym+1));
-
- for (i=0; i<nsym; i++)
- {
- opt.personal_cipher_prefs[i].type = PREFTYPE_SYM;
- opt.personal_cipher_prefs[i].value = sym[i];
- }
-
- opt.personal_cipher_prefs[i].type = PREFTYPE_NONE;
- opt.personal_cipher_prefs[i].value = 0;
- }
- }
- else if(personal==PREFTYPE_HASH)
- {
- m_free(opt.personal_digest_prefs);
-
- if(nhash==0)
- opt.personal_digest_prefs=NULL;
- else
- {
- int i;
-
- opt.personal_digest_prefs=
- m_alloc(sizeof(prefitem_t *)*(nhash+1));
-
- for (i=0; i<nhash; i++)
- {
- opt.personal_digest_prefs[i].type = PREFTYPE_HASH;
- opt.personal_digest_prefs[i].value = hash[i];
- }
-
- opt.personal_digest_prefs[i].type = PREFTYPE_NONE;
- opt.personal_digest_prefs[i].value = 0;
- }
- }
- else if(personal==PREFTYPE_ZIP)
- {
- m_free(opt.personal_compress_prefs);
-
- if(nzip==0)
- opt.personal_compress_prefs=NULL;
- else
- {
- int i;
-
- opt.personal_compress_prefs=
- m_alloc(sizeof(prefitem_t *)*(nzip+1));
-
- for (i=0; i<nzip; i++)
- {
- opt.personal_compress_prefs[i].type = PREFTYPE_ZIP;
- opt.personal_compress_prefs[i].value = zip[i];
- }
-
- opt.personal_compress_prefs[i].type = PREFTYPE_NONE;
- opt.personal_compress_prefs[i].value = 0;
- }
- }
- }
- else
- {
- memcpy (sym_prefs, sym, (nsym_prefs=nsym));
- memcpy (hash_prefs, hash, (nhash_prefs=nhash));
- memcpy (zip_prefs, zip, (nzip_prefs=nzip));
- mdc_available = mdc;
- prefs_initialized = 1;
- }
- }
-
- return rc;
-}
-
-
-/*
- * Return a printable list of preferences. Caller must free.
- */
-char *
-keygen_get_std_prefs ()
-{
- char *buf;
- int i;
-
- if (!prefs_initialized)
- keygen_set_std_prefs (NULL,0);
-
- buf = m_alloc ( MAX_PREFS*3*5 + 5 + 1);
- *buf = 0;
- for (i=0; i < nsym_prefs; i++ )
- sprintf (buf+strlen(buf), "S%d ", sym_prefs[i]);
- for (i=0; i < nhash_prefs; i++ )
- sprintf (buf+strlen(buf), "H%d ", hash_prefs[i]);
- for (i=0; i < nzip_prefs; i++ )
- sprintf (buf+strlen(buf), "Z%d ", zip_prefs[i]);
-
- if(mdc_available)
- sprintf(buf+strlen(buf),"[mdc]");
- else if (*buf) /* trim the trailing space */
- buf[strlen(buf)-1] = 0;
-
- return buf;
-}
-
-
-static void
-add_feature_mdc (PKT_signature *sig,int enabled)
-{
- const byte *s;
- size_t n;
- int i;
- char *buf;
-
- s = parse_sig_subpkt (sig->hashed, SIGSUBPKT_FEATURES, &n );
- /* Already set or cleared */
- if (s && n &&
- ((enabled && (s[0] & 0x01)) || (!enabled && !(s[0] & 0x01))))
- return;
-
- if (!s || !n) { /* create a new one */
- n = 1;
- buf = m_alloc_clear (n);
- }
- else {
- buf = m_alloc (n);
- memcpy (buf, s, n);
- }
-
- if(enabled)
- buf[0] |= 0x01; /* MDC feature */
- else
- buf[0] &= ~0x01;
-
- /* Are there any bits set? */
- for(i=0;i<n;i++)
- if(buf[i]!=0)
- break;
-
- if(i==n)
- delete_sig_subpkt (sig->hashed, SIGSUBPKT_FEATURES);
- else
- build_sig_subpkt (sig, SIGSUBPKT_FEATURES, buf, n);
-
- m_free (buf);
-}
-
-int
-keygen_upd_std_prefs( PKT_signature *sig, void *opaque )
-{
- if (!prefs_initialized)
- keygen_set_std_prefs (NULL, 0);
-
- if (nsym_prefs)
- build_sig_subpkt (sig, SIGSUBPKT_PREF_SYM, sym_prefs, nsym_prefs);
- else
- {
- delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_SYM);
- delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_SYM);
- }
-
- if (nhash_prefs)
- build_sig_subpkt (sig, SIGSUBPKT_PREF_HASH, hash_prefs, nhash_prefs);
- else
- {
- delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_HASH);
- delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_HASH);
- }
-
- if (nzip_prefs)
- build_sig_subpkt (sig, SIGSUBPKT_PREF_COMPR, zip_prefs, nzip_prefs);
- else
- {
- delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_COMPR);
- delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_COMPR);
- }
-
- /* Make sure that the MDC feature flag is set if needed */
- add_feature_mdc (sig,mdc_available);
-
- return 0;
-}
-
-
-/****************
- * Add preference to the self signature packet.
- * This is only called for packets with version > 3.
-
- */
-int
-keygen_add_std_prefs( PKT_signature *sig, void *opaque )
-{
- PKT_public_key *pk = opaque;
- byte buf[8];
-
- do_add_key_flags (sig, pk->pubkey_usage);
- keygen_add_key_expire( sig, opaque );
- keygen_upd_std_prefs (sig, opaque);
-
- buf[0] = 0x80; /* no modify - It is reasonable that a key holder
- * has the possibility to reject signatures from users
- * who are known to sign everything without any
- * validation - so a signed key should be send
- * to the holder who in turn can put it on a keyserver
- */
- build_sig_subpkt( sig, SIGSUBPKT_KS_FLAGS, buf, 1 );
-
- return 0;
-}
-
-int
-keygen_add_revkey(PKT_signature *sig, void *opaque)
-{
- struct revocation_key *revkey=opaque;
- byte buf[2+MAX_FINGERPRINT_LEN];
-
- buf[0]=revkey->class;
- buf[1]=revkey->algid;
- memcpy(&buf[2],revkey->fpr,MAX_FINGERPRINT_LEN);
-
- build_sig_subpkt(sig,SIGSUBPKT_REV_KEY,buf,2+MAX_FINGERPRINT_LEN);
-
- /* All sigs with revocation keys set are nonrevocable */
- sig->flags.revocable=0;
- buf[0] = 0;
- build_sig_subpkt( sig, SIGSUBPKT_REVOCABLE, buf, 1 );
-
- parse_revkeys(sig);
-
- return 0;
-}
-
-static int
-write_direct_sig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk,
- struct revocation_key *revkey )
-{
- PACKET *pkt;
- PKT_signature *sig;
- int rc=0;
- KBNODE node;
- PKT_public_key *pk;
-
- if( opt.verbose )
- log_info(_("writing direct signature\n"));
-
- /* get the pk packet from the pub_tree */
- node = find_kbnode( pub_root, PKT_PUBLIC_KEY );
- if( !node )
- BUG();
- pk = node->pkt->pkt.public_key;
-
- /* we have to cache the key, so that the verification of the signature
- * creation is able to retrieve the public key */
- cache_public_key (pk);
-
- /* and make the signature */
- rc = make_keysig_packet(&sig,pk,NULL,NULL,sk,0x1F,0,0,0,0,
- keygen_add_revkey,revkey);
- if( rc ) {
- log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- add_kbnode( root, new_kbnode( pkt ) );
- return rc;
-}
-
-static int
-write_selfsig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk,
- unsigned int use )
-{
- PACKET *pkt;
- PKT_signature *sig;
- PKT_user_id *uid;
- int rc=0;
- KBNODE node;
- PKT_public_key *pk;
-
- if( opt.verbose )
- log_info(_("writing self signature\n"));
-
- /* get the uid packet from the list */
- node = find_kbnode( root, PKT_USER_ID );
- if( !node )
- BUG(); /* no user id packet in tree */
- uid = node->pkt->pkt.user_id;
- /* get the pk packet from the pub_tree */
- node = find_kbnode( pub_root, PKT_PUBLIC_KEY );
- if( !node )
- BUG();
- pk = node->pkt->pkt.public_key;
- pk->pubkey_usage = use;
- /* we have to cache the key, so that the verification of the signature
- * creation is able to retrieve the public key */
- cache_public_key (pk);
-
- /* and make the signature */
- rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, 0, 0,
- keygen_add_std_prefs, pk );
- if( rc ) {
- log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- add_kbnode( root, new_kbnode( pkt ) );
- return rc;
-}
-
-static int
-write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk,
- unsigned int use )
-{
- PACKET *pkt;
- PKT_signature *sig;
- int rc=0;
- KBNODE node;
- PKT_public_key *pk, *subpk;
- struct opaque_data_usage_and_pk oduap;
-
- if( opt.verbose )
- log_info(_("writing key binding signature\n"));
-
- /* get the pk packet from the pub_tree */
- node = find_kbnode( pub_root, PKT_PUBLIC_KEY );
- if( !node )
- BUG();
- pk = node->pkt->pkt.public_key;
- /* we have to cache the key, so that the verification of the signature
- * creation is able to retrieve the public key */
- cache_public_key (pk);
-
- /* find the last subkey */
- subpk = NULL;
- for(node=pub_root; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- subpk = node->pkt->pkt.public_key;
- }
- if( !subpk )
- BUG();
-
- /* and make the signature */
- oduap.usage = use;
- oduap.pk = subpk;
- rc = make_keysig_packet( &sig, pk, NULL, subpk, sk, 0x18, 0, 0, 0, 0,
- keygen_add_key_flags_and_expire, &oduap );
- if( rc ) {
- log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- pkt = m_alloc_clear( sizeof *pkt );
- pkt->pkttype = PKT_SIGNATURE;
- pkt->pkt.signature = sig;
- add_kbnode( root, new_kbnode( pkt ) );
- return rc;
-}
-
-
-static int
-gen_elg(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
- STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval )
-{
- int rc;
- int i;
- PACKET *pkt;
- PKT_secret_key *sk;
- PKT_public_key *pk;
- MPI skey[4];
- MPI *factors;
-
- assert( is_ELGAMAL(algo) );
-
- if( nbits < 512 ) {
- nbits = 1024;
- log_info(_("keysize invalid; using %u bits\n"), nbits );
- }
-
- if( (nbits % 32) ) {
- nbits = ((nbits + 31) / 32) * 32;
- log_info(_("keysize rounded up to %u bits\n"), nbits );
- }
-
- rc = pubkey_generate( algo, nbits, skey, &factors );
- if( rc ) {
- log_error("pubkey_generate failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- sk = m_alloc_clear( sizeof *sk );
- pk = m_alloc_clear( sizeof *pk );
- sk->timestamp = pk->timestamp = make_timestamp();
- sk->version = pk->version = 4;
- if( expireval ) {
- sk->expiredate = pk->expiredate = sk->timestamp + expireval;
- }
- sk->pubkey_algo = pk->pubkey_algo = algo;
- pk->pkey[0] = mpi_copy( skey[0] );
- pk->pkey[1] = mpi_copy( skey[1] );
- pk->pkey[2] = mpi_copy( skey[2] );
- sk->skey[0] = skey[0];
- sk->skey[1] = skey[1];
- sk->skey[2] = skey[2];
- sk->skey[3] = skey[3];
- sk->is_protected = 0;
- sk->protect.algo = 0;
-
- sk->csum = checksum_mpi( sk->skey[3] );
- if( ret_sk ) /* not a subkey: return an unprotected version of the sk */
- *ret_sk = copy_secret_key( NULL, sk );
-
- if( dek ) {
- sk->protect.algo = dek->algo;
- sk->protect.s2k = *s2k;
- rc = protect_secret_key( sk, dek );
- if( rc ) {
- log_error("protect_secret_key failed: %s\n", g10_errstr(rc) );
- free_public_key(pk);
- free_secret_key(sk);
- return rc;
- }
- }
-
- pkt = m_alloc_clear(sizeof *pkt);
- pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY;
- pkt->pkt.public_key = pk;
- add_kbnode(pub_root, new_kbnode( pkt ));
-
- /* don't know whether it makes sense to have the factors, so for now
- * we store them in the secret keyring (but they are not secret) */
- pkt = m_alloc_clear(sizeof *pkt);
- pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY;
- pkt->pkt.secret_key = sk;
- add_kbnode(sec_root, new_kbnode( pkt ));
- for(i=0; factors[i]; i++ )
- add_kbnode( sec_root,
- make_mpi_comment_node("#:ELG_factor:", factors[i] ));
-
- return 0;
-}
-
-
-/****************
- * Generate a DSA key
- */
-static int
-gen_dsa(unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
- STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval )
-{
- int rc;
- int i;
- PACKET *pkt;
- PKT_secret_key *sk;
- PKT_public_key *pk;
- MPI skey[5];
- MPI *factors;
-
- if( nbits > 1024 || nbits < 512 ) {
- nbits = 1024;
- log_info(_("keysize invalid; using %u bits\n"), nbits );
- }
-
- if( (nbits % 64) ) {
- nbits = ((nbits + 63) / 64) * 64;
- log_info(_("keysize rounded up to %u bits\n"), nbits );
- }
-
- rc = pubkey_generate( PUBKEY_ALGO_DSA, nbits, skey, &factors );
- if( rc ) {
- log_error("pubkey_generate failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- sk = m_alloc_clear( sizeof *sk );
- pk = m_alloc_clear( sizeof *pk );
- sk->timestamp = pk->timestamp = make_timestamp();
- sk->version = pk->version = 4;
- if( expireval ) {
- sk->expiredate = pk->expiredate = sk->timestamp + expireval;
- }
- sk->pubkey_algo = pk->pubkey_algo = PUBKEY_ALGO_DSA;
- pk->pkey[0] = mpi_copy( skey[0] );
- pk->pkey[1] = mpi_copy( skey[1] );
- pk->pkey[2] = mpi_copy( skey[2] );
- pk->pkey[3] = mpi_copy( skey[3] );
- sk->skey[0] = skey[0];
- sk->skey[1] = skey[1];
- sk->skey[2] = skey[2];
- sk->skey[3] = skey[3];
- sk->skey[4] = skey[4];
- sk->is_protected = 0;
- sk->protect.algo = 0;
-
- sk->csum = checksum_mpi ( sk->skey[4] );
- if( ret_sk ) /* not a subkey: return an unprotected version of the sk */
- *ret_sk = copy_secret_key( NULL, sk );
-
- if( dek ) {
- sk->protect.algo = dek->algo;
- sk->protect.s2k = *s2k;
- rc = protect_secret_key( sk, dek );
- if( rc ) {
- log_error("protect_secret_key failed: %s\n", g10_errstr(rc) );
- free_public_key(pk);
- free_secret_key(sk);
- return rc;
- }
- }
-
- pkt = m_alloc_clear(sizeof *pkt);
- pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY;
- pkt->pkt.public_key = pk;
- add_kbnode(pub_root, new_kbnode( pkt ));
-
- /* don't know whether it makes sense to have the factors, so for now
- * we store them in the secret keyring (but they are not secret)
- * p = 2 * q * f1 * f2 * ... * fn
- * We store only f1 to f_n-1; fn can be calculated because p and q
- * are known.
- */
- pkt = m_alloc_clear(sizeof *pkt);
- pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY;
- pkt->pkt.secret_key = sk;
- add_kbnode(sec_root, new_kbnode( pkt ));
- for(i=1; factors[i]; i++ ) /* the first one is q */
- add_kbnode( sec_root,
- make_mpi_comment_node("#:DSA_factor:", factors[i] ));
-
- return 0;
-}
-
-
-/*
- * Generate an RSA key.
- */
-static int
-gen_rsa(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
- STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval )
-{
- int rc;
- PACKET *pkt;
- PKT_secret_key *sk;
- PKT_public_key *pk;
- MPI skey[6];
- MPI *factors;
-
- assert( is_RSA(algo) );
-
- if( nbits < 1024 ) {
- nbits = 1024;
- log_info(_("keysize invalid; using %u bits\n"), nbits );
- }
-
- if( (nbits % 32) ) {
- nbits = ((nbits + 31) / 32) * 32;
- log_info(_("keysize rounded up to %u bits\n"), nbits );
- }
-
- rc = pubkey_generate( algo, nbits, skey, &factors );
- if( rc ) {
- log_error("pubkey_generate failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- sk = m_alloc_clear( sizeof *sk );
- pk = m_alloc_clear( sizeof *pk );
- sk->timestamp = pk->timestamp = make_timestamp();
- sk->version = pk->version = 4;
- if( expireval ) {
- sk->expiredate = pk->expiredate = sk->timestamp + expireval;
- }
- sk->pubkey_algo = pk->pubkey_algo = algo;
- pk->pkey[0] = mpi_copy( skey[0] );
- pk->pkey[1] = mpi_copy( skey[1] );
- sk->skey[0] = skey[0];
- sk->skey[1] = skey[1];
- sk->skey[2] = skey[2];
- sk->skey[3] = skey[3];
- sk->skey[4] = skey[4];
- sk->skey[5] = skey[5];
- sk->is_protected = 0;
- sk->protect.algo = 0;
-
- sk->csum = checksum_mpi (sk->skey[2] );
- sk->csum += checksum_mpi (sk->skey[3] );
- sk->csum += checksum_mpi (sk->skey[4] );
- sk->csum += checksum_mpi (sk->skey[5] );
- if( ret_sk ) /* not a subkey: return an unprotected version of the sk */
- *ret_sk = copy_secret_key( NULL, sk );
-
- if( dek ) {
- sk->protect.algo = dek->algo;
- sk->protect.s2k = *s2k;
- rc = protect_secret_key( sk, dek );
- if( rc ) {
- log_error("protect_secret_key failed: %s\n", g10_errstr(rc) );
- free_public_key(pk);
- free_secret_key(sk);
- return rc;
- }
- }
-
- pkt = m_alloc_clear(sizeof *pkt);
- pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY;
- pkt->pkt.public_key = pk;
- add_kbnode(pub_root, new_kbnode( pkt ));
-
- pkt = m_alloc_clear(sizeof *pkt);
- pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY;
- pkt->pkt.secret_key = sk;
- add_kbnode(sec_root, new_kbnode( pkt ));
-
- return 0;
-}
-
-
-/****************
- * check valid days:
- * return 0 on error or the multiplier
- */
-static int
-check_valid_days( const char *s )
-{
- if( !isdigit(*s) )
- return 0;
- for( s++; *s; s++)
- if( !isdigit(*s) )
- break;
- if( !*s )
- return 1;
- if( s[1] )
- return 0; /* e.g. "2323wc" */
- if( *s == 'd' || *s == 'D' )
- return 1;
- if( *s == 'w' || *s == 'W' )
- return 7;
- if( *s == 'm' || *s == 'M' )
- return 30;
- if( *s == 'y' || *s == 'Y' )
- return 365;
- return 0;
-}
-
-
-/****************
- * Returns: 0 to create both a DSA and a ElGamal key.
- * and only if key flags are to be written the desired usage.
- */
-static int
-ask_algo (int addmode, unsigned int *r_usage)
-{
- char *answer;
- int algo;
-
- *r_usage = 0;
- tty_printf(_("Please select what kind of key you want:\n"));
- if( !addmode )
- tty_printf(_(" (%d) DSA and ElGamal (default)\n"), 1 );
- tty_printf( _(" (%d) DSA (sign only)\n"), 2 );
- if( addmode )
- tty_printf( _(" (%d) ElGamal (encrypt only)\n"), 3 );
- if (opt.expert)
- tty_printf( _(" (%d) ElGamal (sign and encrypt)\n"), 4 );
- tty_printf( _(" (%d) RSA (sign only)\n"), 5 );
- if (addmode)
- tty_printf( _(" (%d) RSA (encrypt only)\n"), 6 );
- if (opt.expert)
- tty_printf( _(" (%d) RSA (sign and encrypt)\n"), 7 );
-
- for(;;) {
- answer = cpr_get("keygen.algo",_("Your selection? "));
- cpr_kill_prompt();
- algo = *answer? atoi(answer): 1;
- m_free(answer);
- if( algo == 1 && !addmode ) {
- algo = 0; /* create both keys */
- break;
- }
- else if( algo == 7 && opt.expert ) {
- if (cpr_get_answer_is_yes ("keygen.algo.rsa_se",_(
- "The use of this algorithm is deprecated - create anyway? "))){
- algo = PUBKEY_ALGO_RSA;
- *r_usage = PUBKEY_USAGE_ENC | PUBKEY_USAGE_SIG;
- break;
- }
- }
- else if( algo == 6 && addmode ) {
- algo = PUBKEY_ALGO_RSA;
- *r_usage = PUBKEY_USAGE_ENC;
- break;
- }
- else if( algo == 5 ) {
- algo = PUBKEY_ALGO_RSA;
- *r_usage = PUBKEY_USAGE_SIG;
- break;
- }
- else if( algo == 4 && opt.expert) {
- if( cpr_get_answer_is_yes("keygen.algo.elg_se",_(
- "The use of this algorithm is deprecated - create anyway? "))){
- algo = PUBKEY_ALGO_ELGAMAL;
- break;
- }
- }
- else if( algo == 3 && addmode ) {
- algo = PUBKEY_ALGO_ELGAMAL_E;
- break;
- }
- else if( algo == 2 ) {
- algo = PUBKEY_ALGO_DSA;
- break;
- }
- else
- tty_printf(_("Invalid selection.\n"));
- }
- return algo;
-}
-
-
-static unsigned
-ask_keysize( int algo )
-{
- char *answer;
- unsigned nbits;
-
- if (algo != PUBKEY_ALGO_DSA && algo != PUBKEY_ALGO_RSA) {
- tty_printf (_("About to generate a new %s keypair.\n"
- " minimum keysize is 768 bits\n"
- " default keysize is 1024 bits\n"
- " highest suggested keysize is 2048 bits\n"),
- pubkey_algo_to_string(algo) );
- }
-
- for(;;) {
- answer = cpr_get("keygen.size",
- _("What keysize do you want? (1024) "));
- cpr_kill_prompt();
- nbits = *answer? atoi(answer): 1024;
- m_free(answer);
- if( algo == PUBKEY_ALGO_DSA && (nbits < 512 || nbits > 1024) )
- tty_printf(_("DSA only allows keysizes from 512 to 1024\n"));
- else if( algo == PUBKEY_ALGO_RSA && nbits < 1024 )
- tty_printf(_("keysize too small;"
- " 1024 is smallest value allowed for RSA.\n"));
- else if( nbits < 768 )
- tty_printf(_("keysize too small;"
- " 768 is smallest value allowed.\n"));
- else if( nbits > 4096 ) {
- /* It is ridiculous and an annoyance to use larger key sizes!
- * GnuPG can handle much larger sizes; but it takes an eternity
- * to create such a key (but less than the time the Sirius
- * Computer Corporation needs to process one of the usual
- * complaints) and {de,en}cryption although needs some time.
- * So, before you complain about this limitation, I suggest that
- * you start a discussion with Marvin about this theme and then
- * do whatever you want. */
- tty_printf(_("keysize too large; %d is largest value allowed.\n"),
- 4096);
- }
- else if( nbits > 2048 && !cpr_enabled() ) {
- tty_printf(
- _("Keysizes larger than 2048 are not suggested because\n"
- "computations take REALLY long!\n"));
- if( cpr_get_answer_is_yes("keygen.size.huge.okay",_(
- "Are you sure that you want this keysize? ")) ) {
- tty_printf(_("Okay, but keep in mind that your monitor "
- "and keyboard radiation is also very vulnerable "
- "to attacks!\n"));
- break;
- }
- }
- else
- break;
- }
- tty_printf(_("Requested keysize is %u bits\n"), nbits );
- if( algo == PUBKEY_ALGO_DSA && (nbits % 64) ) {
- nbits = ((nbits + 63) / 64) * 64;
- tty_printf(_("rounded up to %u bits\n"), nbits );
- }
- else if( (nbits % 32) ) {
- nbits = ((nbits + 31) / 32) * 32;
- tty_printf(_("rounded up to %u bits\n"), nbits );
- }
- return nbits;
-}
-
-
-/****************
- * Parse an expire string and return it's value in days.
- * Returns -1 on error.
- */
-static int
-parse_expire_string( const char *string )
-{
- int mult;
- u32 abs_date=0;
- u32 curtime = make_timestamp();
- int valid_days;
-
- if( !*string )
- valid_days = 0;
- else if( (abs_date = scan_isodatestr(string)) && abs_date > curtime ) {
- /* This calculation is not perfectly okay because we
- * are later going to simply multiply by 86400 and don't
- * correct for leapseconds. A solution would be to change
- * the whole implemenation to work with dates and not intervals
- * which are required for v3 keys.
- */
- valid_days = abs_date/86400-curtime/86400+1;
- }
- else if( (mult=check_valid_days(string)) ) {
- valid_days = atoi(string) * mult;
- if( valid_days < 0 || valid_days > 39447 )
- valid_days = 0;
- }
- else {
- valid_days = -1;
- }
- return valid_days;
-}
-
-/* object == 0 for a key, and 1 for a sig */
-u32
-ask_expire_interval(int object)
-{
- char *answer;
- int valid_days=0;
- u32 interval = 0;
-
- switch(object)
- {
- case 0:
- tty_printf(_("Please specify how long the key should be valid.\n"
- " 0 = key does not expire\n"
- " <n> = key expires in n days\n"
- " <n>w = key expires in n weeks\n"
- " <n>m = key expires in n months\n"
- " <n>y = key expires in n years\n"));
- break;
-
- case 1:
- tty_printf(_("Please specify how long the signature should be valid.\n"
- " 0 = signature does not expire\n"
- " <n> = signature expires in n days\n"
- " <n>w = signature expires in n weeks\n"
- " <n>m = signature expires in n months\n"
- " <n>y = signature expires in n years\n"));
- break;
-
- default:
- BUG();
- }
-
- /* Note: The elgamal subkey for DSA has no expiration date because
- * it must be signed with the DSA key and this one has the expiration
- * date */
-
- answer = NULL;
- for(;;) {
- u32 curtime=make_timestamp();
-
- m_free(answer);
- if(object==0)
- answer = cpr_get("keygen.valid",_("Key is valid for? (0) "));
- else
- answer = cpr_get("siggen.valid",_("Signature is valid for? (0) "));
- cpr_kill_prompt();
- trim_spaces(answer);
- valid_days = parse_expire_string( answer );
- if( valid_days < 0 ) {
- tty_printf(_("invalid value\n"));
- continue;
- }
-
- if( !valid_days ) {
- tty_printf(_("%s does not expire at all\n"),
- object==0?"Key":"Signature");
- interval = 0;
- }
- else {
- interval = valid_days * 86400L;
- /* print the date when the key expires */
- tty_printf(_("%s expires at %s\n"),
- object==0?"Key":"Signature",
- asctimestamp((ulong)(curtime + interval) ) );
- /* FIXME: This check yields warning on alhas:
- write a configure check and to this check here only for 32 bit machines */
- if( (time_t)((ulong)(curtime+interval)) < 0 )
- tty_printf(_("Your system can't display dates beyond 2038.\n"
- "However, it will be correctly handled up to 2106.\n"));
- }
-
- if( cpr_enabled() || cpr_get_answer_is_yes("keygen.valid.okay",
- _("Is this correct (y/n)? ")) )
- break;
- }
- m_free(answer);
- return interval;
-}
-
-u32
-ask_expiredate()
-{
- u32 x = ask_expire_interval(0);
- return x? make_timestamp() + x : 0;
-}
-
-static int
-has_invalid_email_chars( const char *s )
-{
- int at_seen=0;
- static char valid_chars[] = "01234567890_-."
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- for( ; *s; s++ ) {
- if( *s & 0x80 )
- return 1;
- if( *s == '@' )
- at_seen=1;
- else if( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) )
- return 1;
- else if( at_seen && !strchr( valid_chars, *s ) )
- return 1;
- }
- return 0;
-}
-
-
-static char *
-ask_user_id( int mode )
-{
- char *answer;
- char *aname, *acomment, *amail, *uid;
-
- if( !mode )
- tty_printf( _("\n"
-"You need a User-ID to identify your key; the software constructs the user id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n\n") );
- uid = aname = acomment = amail = NULL;
- for(;;) {
- char *p;
- int fail=0;
-
- if( !aname ) {
- for(;;) {
- m_free(aname);
- aname = cpr_get("keygen.name",_("Real name: "));
- trim_spaces(aname);
- cpr_kill_prompt();
-
- if( opt.allow_freeform_uid )
- break;
-
- if( strpbrk( aname, "<>" ) )
- tty_printf(_("Invalid character in name\n"));
- else if( isdigit(*aname) )
- tty_printf(_("Name may not start with a digit\n"));
- else if( strlen(aname) < 5 )
- tty_printf(_("Name must be at least 5 characters long\n"));
- else
- break;
- }
- }
- if( !amail ) {
- for(;;) {
- m_free(amail);
- amail = cpr_get("keygen.email",_("Email address: "));
- trim_spaces(amail);
- cpr_kill_prompt();
- if( !*amail )
- break; /* no email address is okay */
- else if( has_invalid_email_chars(amail)
- || string_count_chr(amail,'@') != 1
- || *amail == '@'
- || amail[strlen(amail)-1] == '@'
- || amail[strlen(amail)-1] == '.'
- || strstr(amail, "..") )
- tty_printf(_("Not a valid email address\n"));
- else
- break;
- }
- }
- if( !acomment ) {
- for(;;) {
- m_free(acomment);
- acomment = cpr_get("keygen.comment",_("Comment: "));
- trim_spaces(acomment);
- cpr_kill_prompt();
- if( !*acomment )
- break; /* no comment is okay */
- else if( strpbrk( acomment, "()" ) )
- tty_printf(_("Invalid character in comment\n"));
- else
- break;
- }
- }
-
-
- m_free(uid);
- uid = p = m_alloc(strlen(aname)+strlen(amail)+strlen(acomment)+12+10);
- p = stpcpy(p, aname );
- if( *acomment )
- p = stpcpy(stpcpy(stpcpy(p," ("), acomment),")");
- if( *amail )
- p = stpcpy(stpcpy(stpcpy(p," <"), amail),">");
-
- /* append a warning if we do not have dev/random
- * or it is switched into quick testmode */
- if( quick_random_gen(-1) )
- strcpy(p, " (INSECURE!)" );
-
- /* print a note in case that UTF8 mapping has to be done */
- for(p=uid; *p; p++ ) {
- if( *p & 0x80 ) {
- tty_printf(_("You are using the `%s' character set.\n"),
- get_native_charset() );
- break;
- }
- }
-
- tty_printf(_("You selected this USER-ID:\n \"%s\"\n\n"), uid);
- /* fixme: add a warning if this user-id already exists */
- if( !*amail && (strchr( aname, '@' ) || strchr( acomment, '@'))) {
- fail = 1;
- tty_printf(_("Please don't put the email address "
- "into the real name or the comment\n") );
- }
-
- for(;;) {
- const char *ansstr = _("NnCcEeOoQq");
-
- if( strlen(ansstr) != 10 )
- BUG();
- if( cpr_enabled() ) {
- answer = m_strdup(ansstr+6);
- answer[1] = 0;
- }
- else {
- answer = cpr_get("keygen.userid.cmd", fail?
- _("Change (N)ame, (C)omment, (E)mail or (Q)uit? ") :
- _("Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "));
- cpr_kill_prompt();
- }
- if( strlen(answer) > 1 )
- ;
- else if( *answer == ansstr[0] || *answer == ansstr[1] ) {
- m_free(aname); aname = NULL;
- break;
- }
- else if( *answer == ansstr[2] || *answer == ansstr[3] ) {
- m_free(acomment); acomment = NULL;
- break;
- }
- else if( *answer == ansstr[4] || *answer == ansstr[5] ) {
- m_free(amail); amail = NULL;
- break;
- }
- else if( *answer == ansstr[6] || *answer == ansstr[7] ) {
- if( fail ) {
- tty_printf(_("Please correct the error first\n"));
- }
- else {
- m_free(aname); aname = NULL;
- m_free(acomment); acomment = NULL;
- m_free(amail); amail = NULL;
- break;
- }
- }
- else if( *answer == ansstr[8] || *answer == ansstr[9] ) {
- m_free(aname); aname = NULL;
- m_free(acomment); acomment = NULL;
- m_free(amail); amail = NULL;
- m_free(uid); uid = NULL;
- break;
- }
- m_free(answer);
- }
- m_free(answer);
- if( !amail && !acomment && !amail )
- break;
- m_free(uid); uid = NULL;
- }
- if( uid ) {
- char *p = native_to_utf8( uid );
- m_free( uid );
- uid = p;
- }
- return uid;
-}
-
-
-static DEK *
-ask_passphrase( STRING2KEY **ret_s2k )
-{
- DEK *dek = NULL;
- STRING2KEY *s2k;
- const char *errtext = NULL;
-
- tty_printf(_("You need a Passphrase to protect your secret key.\n\n") );
-
- s2k = m_alloc_secure( sizeof *s2k );
- for(;;) {
- s2k->mode = opt.s2k_mode;
- s2k->hash_algo = opt.s2k_digest_algo;
- dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k,2,errtext);
- if( !dek ) {
- errtext = _("passphrase not correctly repeated; try again");
- tty_printf(_("%s.\n"), errtext);
- }
- else if( !dek->keylen ) {
- m_free(dek); dek = NULL;
- m_free(s2k); s2k = NULL;
- tty_printf(_(
- "You don't want a passphrase - this is probably a *bad* idea!\n"
- "I will do it anyway. You can change your passphrase at any time,\n"
- "using this program with the option \"--edit-key\".\n\n"));
- break;
- }
- else
- break; /* okay */
- }
- *ret_s2k = s2k;
- return dek;
-}
-
-
-static int
-do_create( int algo, unsigned int nbits, KBNODE pub_root, KBNODE sec_root,
- DEK *dek, STRING2KEY *s2k, PKT_secret_key **sk, u32 expiredate )
-{
- int rc=0;
-
- if( !opt.batch )
- tty_printf(_(
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n") );
-
- if( algo == PUBKEY_ALGO_ELGAMAL || algo == PUBKEY_ALGO_ELGAMAL_E )
- rc = gen_elg(algo, nbits, pub_root, sec_root, dek, s2k, sk, expiredate);
- else if( algo == PUBKEY_ALGO_DSA )
- rc = gen_dsa(nbits, pub_root, sec_root, dek, s2k, sk, expiredate);
- else if( algo == PUBKEY_ALGO_RSA )
- rc = gen_rsa(algo, nbits, pub_root, sec_root, dek, s2k, sk, expiredate);
- else
- BUG();
-
- #ifdef ENABLE_COMMENT_PACKETS
- if( !rc ) {
- add_kbnode( pub_root,
- make_comment_node("#created by GNUPG v" VERSION " ("
- PRINTABLE_OS_NAME ")"));
- add_kbnode( sec_root,
- make_comment_node("#created by GNUPG v" VERSION " ("
- PRINTABLE_OS_NAME ")"));
- }
- #endif
- return rc;
-}
-
-
-/****************
- * Generate a new user id packet, or return NULL if canceled
- */
-PKT_user_id *
-generate_user_id()
-{
- PKT_user_id *uid;
- char *p;
- size_t n;
-
- p = ask_user_id( 1 );
- if( !p )
- return NULL;
- n = strlen(p);
- uid = m_alloc_clear( sizeof *uid + n - 1 );
- uid->len = n;
- strcpy(uid->name, p);
- uid->ref = 1;
- return uid;
-}
-
-
-static void
-release_parameter_list( struct para_data_s *r )
-{
- struct para_data_s *r2;
-
- for( ; r ; r = r2 ) {
- r2 = r->next;
- if( r->key == pPASSPHRASE_DEK )
- m_free( r->u.dek );
- else if( r->key == pPASSPHRASE_S2K )
- m_free( r->u.s2k );
-
- m_free(r);
- }
-}
-
-static struct para_data_s *
-get_parameter( struct para_data_s *para, enum para_name key )
-{
- struct para_data_s *r;
-
- for( r = para; r && r->key != key; r = r->next )
- ;
- return r;
-}
-
-static const char *
-get_parameter_value( struct para_data_s *para, enum para_name key )
-{
- struct para_data_s *r = get_parameter( para, key );
- return (r && *r->u.value)? r->u.value : NULL;
-}
-
-static int
-get_parameter_algo( struct para_data_s *para, enum para_name key )
-{
- int i;
- struct para_data_s *r = get_parameter( para, key );
- if( !r )
- return -1;
- if( isdigit( *r->u.value ) )
- i = atoi( r->u.value );
- else
- i = string_to_pubkey_algo( r->u.value );
- if (i == PUBKEY_ALGO_RSA_E || i == PUBKEY_ALGO_RSA_S)
- i = 0; /* we don't want to allow generation of these algorithms */
- return i;
-}
-
-/*
- * parse the usage parameter and set the keyflags. Return true on error.
- */
-static int
-parse_parameter_usage (const char *fname,
- struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r = get_parameter( para, key );
- char *p, *pn;
- unsigned int use;
-
- if( !r )
- return 0; /* none (this is an optional parameter)*/
-
- use = 0;
- pn = r->u.value;
- while ( (p = strsep (&pn, " \t,")) ) {
- if ( !*p)
- ;
- else if ( !ascii_strcasecmp (p, "sign") )
- use |= PUBKEY_USAGE_SIG;
- else if ( !ascii_strcasecmp (p, "encrypt") )
- use |= PUBKEY_USAGE_ENC;
- else {
- log_error("%s:%d: invalid usage list\n", fname, r->lnr );
- return -1; /* error */
- }
- }
- r->u.usage = use;
- return 0;
-}
-
-static int
-parse_revocation_key (const char *fname,
- struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r = get_parameter( para, key );
- struct revocation_key revkey;
- char *pn;
- int i;
-
- if( !r )
- return 0; /* none (this is an optional parameter) */
-
- pn = r->u.value;
-
- revkey.class=0x80;
- revkey.algid=atoi(pn);
- if(!revkey.algid)
- goto fail;
-
- /* Skip to the fpr */
- while(*pn && *pn!=':')
- pn++;
-
- if(*pn!=':')
- goto fail;
-
- pn++;
-
- for(i=0;i<MAX_FINGERPRINT_LEN && *pn;i++,pn+=2)
- {
- int c=hextobyte(pn);
- if(c==-1)
- goto fail;
-
- revkey.fpr[i]=c;
- }
-
- /* skip to the tag */
- while(*pn && *pn!='s' && *pn!='S')
- pn++;
-
- if(ascii_strcasecmp(pn,"sensitive")==0)
- revkey.class|=0x40;
-
- memcpy(&r->u.revkey,&revkey,sizeof(struct revocation_key));
-
- return 0;
-
- fail:
- log_error("%s:%d: invalid revocation key\n", fname, r->lnr );
- return -1; /* error */
-}
-
-
-static u32
-get_parameter_u32( struct para_data_s *para, enum para_name key )
-{
- struct para_data_s *r = get_parameter( para, key );
-
- if( !r )
- return 0;
- if( r->key == pKEYEXPIRE || r->key == pSUBKEYEXPIRE )
- return r->u.expire;
- if( r->key == pKEYUSAGE || r->key == pSUBKEYUSAGE )
- return r->u.usage;
-
- return (unsigned int)strtoul( r->u.value, NULL, 10 );
-}
-
-static unsigned int
-get_parameter_uint( struct para_data_s *para, enum para_name key )
-{
- return get_parameter_u32( para, key );
-}
-
-static DEK *
-get_parameter_dek( struct para_data_s *para, enum para_name key )
-{
- struct para_data_s *r = get_parameter( para, key );
- return r? r->u.dek : NULL;
-}
-
-static STRING2KEY *
-get_parameter_s2k( struct para_data_s *para, enum para_name key )
-{
- struct para_data_s *r = get_parameter( para, key );
- return r? r->u.s2k : NULL;
-}
-
-static struct revocation_key *
-get_parameter_revkey( struct para_data_s *para, enum para_name key )
-{
- struct para_data_s *r = get_parameter( para, key );
- return r? &r->u.revkey : NULL;
-}
-
-static int
-proc_parameter_file( struct para_data_s *para, const char *fname,
- struct output_control_s *outctrl )
-{
- struct para_data_s *r;
- const char *s1, *s2, *s3;
- size_t n;
- char *p;
- int i;
-
- /* check that we have all required parameters */
- assert( get_parameter( para, pKEYTYPE ) );
- i = get_parameter_algo( para, pKEYTYPE );
- if( i < 1 || check_pubkey_algo2( i, PUBKEY_USAGE_SIG ) ) {
- r = get_parameter( para, pKEYTYPE );
- log_error("%s:%d: invalid algorithm\n", fname, r->lnr );
- return -1;
- }
-
- if (parse_parameter_usage (fname, para, pKEYUSAGE))
- return -1;
-
- i = get_parameter_algo( para, pSUBKEYTYPE );
- if( i > 0 && check_pubkey_algo( i ) ) {
- r = get_parameter( para, pSUBKEYTYPE );
- log_error("%s:%d: invalid algorithm\n", fname, r->lnr );
- return -1;
- }
- if (i > 0 && parse_parameter_usage (fname, para, pSUBKEYUSAGE))
- return -1;
-
-
- if( !get_parameter_value( para, pUSERID ) ) {
- /* create the formatted user ID */
- s1 = get_parameter_value( para, pNAMEREAL );
- s2 = get_parameter_value( para, pNAMECOMMENT );
- s3 = get_parameter_value( para, pNAMEEMAIL );
- if( s1 || s2 || s3 ) {
- n = (s1?strlen(s1):0) + (s2?strlen(s2):0) + (s3?strlen(s3):0);
- r = m_alloc_clear( sizeof *r + n + 20 );
- r->key = pUSERID;
- p = r->u.value;
- if( s1 )
- p = stpcpy(p, s1 );
- if( s2 )
- p = stpcpy(stpcpy(stpcpy(p," ("), s2 ),")");
- if( s3 )
- p = stpcpy(stpcpy(stpcpy(p," <"), s3 ),">");
- r->next = para;
- para = r;
- }
- }
-
- /* Set preferences, if any. */
- keygen_set_std_prefs(get_parameter_value( para, pPREFERENCES ), 0);
-
- /* Set revoker, if any. */
- if (parse_revocation_key (fname, para, pREVOKER))
- return -1;
-
- /* make DEK and S2K from the Passphrase */
- r = get_parameter( para, pPASSPHRASE );
- if( r && *r->u.value ) {
- /* we have a plain text passphrase - create a DEK from it.
- * It is a little bit ridiculous to keep it ih secure memory
- * but becuase we do this alwasy, why not here */
- STRING2KEY *s2k;
- DEK *dek;
-
- s2k = m_alloc_secure( sizeof *s2k );
- s2k->mode = opt.s2k_mode;
- s2k->hash_algo = opt.s2k_digest_algo;
- set_next_passphrase( r->u.value );
- dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, NULL );
- set_next_passphrase( NULL );
- assert( dek );
- memset( r->u.value, 0, strlen(r->u.value) );
-
- r = m_alloc_clear( sizeof *r );
- r->key = pPASSPHRASE_S2K;
- r->u.s2k = s2k;
- r->next = para;
- para = r;
- r = m_alloc_clear( sizeof *r );
- r->key = pPASSPHRASE_DEK;
- r->u.dek = dek;
- r->next = para;
- para = r;
- }
-
- /* make KEYEXPIRE from Expire-Date */
- r = get_parameter( para, pEXPIREDATE );
- if( r && *r->u.value ) {
- i = parse_expire_string( r->u.value );
- if( i < 0 ) {
- log_error("%s:%d: invalid expire date\n", fname, r->lnr );
- return -1;
- }
- r->u.expire = i * 86400L;
- r->key = pKEYEXPIRE; /* change hat entry */
- /* also set it for the subkey */
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pSUBKEYEXPIRE;
- r->u.expire = i * 86400L;
- r->next = para;
- para = r;
- }
-
- if( !!outctrl->pub.newfname ^ !!outctrl->sec.newfname ) {
- log_error("%s:%d: only one ring name is set\n", fname, outctrl->lnr );
- return -1;
- }
-
- do_generate_keypair( para, outctrl );
- return 0;
-}
-
-
-/****************
- * Kludge to allow non interactive key generation controlled
- * by a parameter file (which currently is only stdin)
- * Note, that string parameters are expected to be in UTF-8
- */
-static void
-read_parameter_file( const char *fname )
-{
- static struct { const char *name;
- enum para_name key;
- } keywords[] = {
- { "Key-Type", pKEYTYPE},
- { "Key-Length", pKEYLENGTH },
- { "Key-Usage", pKEYUSAGE },
- { "Subkey-Type", pSUBKEYTYPE },
- { "Subkey-Length", pSUBKEYLENGTH },
- { "Subkey-Usage", pSUBKEYUSAGE },
- { "Name-Real", pNAMEREAL },
- { "Name-Email", pNAMEEMAIL },
- { "Name-Comment", pNAMECOMMENT },
- { "Expire-Date", pEXPIREDATE },
- { "Passphrase", pPASSPHRASE },
- { "Preferences", pPREFERENCES },
- { "Revoker", pREVOKER },
- { NULL, 0 }
- };
- FILE *fp;
- char line[1024], *p;
- int lnr;
- const char *err = NULL;
- struct para_data_s *para, *r;
- int i;
- struct output_control_s outctrl;
-
- memset( &outctrl, 0, sizeof( outctrl ) );
-
- if( !fname || !*fname || !strcmp(fname,"-") ) {
- fp = stdin;
- fname = "-";
- }
- else {
- fp = fopen( fname, "r" );
- if( !fp ) {
- log_error(_("can't open `%s': %s\n"), fname, strerror(errno) );
- return;
- }
- }
-
- lnr = 0;
- err = NULL;
- para = NULL;
- while( fgets( line, DIM(line)-1, fp ) ) {
- char *keyword, *value;
-
- lnr++;
- if( *line && line[strlen(line)-1] != '\n' ) {
- err = "line too long";
- break;
- }
- for( p = line; isspace(*(byte*)p); p++ )
- ;
- if( !*p || *p == '#' )
- continue;
- keyword = p;
- if( *keyword == '%' ) {
- for( ; !isspace(*(byte*)p); p++ )
- ;
- if( *p )
- *p++ = 0;
- for( ; isspace(*(byte*)p); p++ )
- ;
- value = p;
- trim_trailing_ws( value, strlen(value) );
- if( !ascii_strcasecmp( keyword, "%echo" ) )
- log_info("%s\n", value );
- else if( !ascii_strcasecmp( keyword, "%dry-run" ) )
- outctrl.dryrun = 1;
- else if( !ascii_strcasecmp( keyword, "%commit" ) ) {
- outctrl.lnr = lnr;
- proc_parameter_file( para, fname, &outctrl );
- release_parameter_list( para );
- para = NULL;
- }
- else if( !ascii_strcasecmp( keyword, "%pubring" ) ) {
- if( outctrl.pub.fname && !strcmp( outctrl.pub.fname, value ) )
- ; /* still the same file - ignore it */
- else {
- m_free( outctrl.pub.newfname );
- outctrl.pub.newfname = m_strdup( value );
- outctrl.use_files = 1;
- }
- }
- else if( !ascii_strcasecmp( keyword, "%secring" ) ) {
- if( outctrl.sec.fname && !strcmp( outctrl.sec.fname, value ) )
- ; /* still the same file - ignore it */
- else {
- m_free( outctrl.sec.newfname );
- outctrl.sec.newfname = m_strdup( value );
- outctrl.use_files = 1;
- }
- }
- else
- log_info("skipping control `%s' (%s)\n", keyword, value );
-
-
- continue;
- }
-
-
- if( !(p = strchr( p, ':' )) || p == keyword ) {
- err = "missing colon";
- break;
- }
- if( *p )
- *p++ = 0;
- for( ; isspace(*(byte*)p); p++ )
- ;
- if( !*p ) {
- err = "missing argument";
- break;
- }
- value = p;
- trim_trailing_ws( value, strlen(value) );
-
- for(i=0; keywords[i].name; i++ ) {
- if( !ascii_strcasecmp( keywords[i].name, keyword ) )
- break;
- }
- if( !keywords[i].name ) {
- err = "unknown keyword";
- break;
- }
- if( keywords[i].key != pKEYTYPE && !para ) {
- err = "parameter block does not start with \"Key-Type\"";
- break;
- }
-
- if( keywords[i].key == pKEYTYPE && para ) {
- outctrl.lnr = lnr;
- proc_parameter_file( para, fname, &outctrl );
- release_parameter_list( para );
- para = NULL;
- }
- else {
- for( r = para; r; r = r->next ) {
- if( r->key == keywords[i].key )
- break;
- }
- if( r ) {
- err = "duplicate keyword";
- break;
- }
- }
- r = m_alloc_clear( sizeof *r + strlen( value ) );
- r->lnr = lnr;
- r->key = keywords[i].key;
- strcpy( r->u.value, value );
- r->next = para;
- para = r;
- }
- if( err )
- log_error("%s:%d: %s\n", fname, lnr, err );
- else if( ferror(fp) ) {
- log_error("%s:%d: read error: %s\n", fname, lnr, strerror(errno) );
- }
- else if( para ) {
- outctrl.lnr = lnr;
- proc_parameter_file( para, fname, &outctrl );
- }
-
- if( outctrl.use_files ) { /* close open streams */
- iobuf_close( outctrl.pub.stream );
- iobuf_close( outctrl.sec.stream );
- m_free( outctrl.pub.fname );
- m_free( outctrl.pub.newfname );
- m_free( outctrl.sec.fname );
- m_free( outctrl.sec.newfname );
- }
-
- release_parameter_list( para );
- if( strcmp( fname, "-" ) )
- fclose(fp);
-}
-
-
-/****************
- * Generate a keypair
- * (fname is only used in batch mode)
- */
-void
-generate_keypair( const char *fname )
-{
- unsigned int nbits;
- char *uid = NULL;
- DEK *dek;
- STRING2KEY *s2k;
- int algo;
- unsigned int use;
- int both = 0;
- u32 expire;
- struct para_data_s *para = NULL;
- struct para_data_s *r;
- struct output_control_s outctrl;
-
- memset( &outctrl, 0, sizeof( outctrl ) );
-
- if( opt.batch ) {
- read_parameter_file( fname );
- return;
- }
-
- algo = ask_algo( 0, &use );
- if( !algo ) { /* default: DSA with ElG subkey of the specified size */
- both = 1;
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pKEYTYPE;
- sprintf( r->u.value, "%d", PUBKEY_ALGO_DSA );
- r->next = para;
- para = r;
- tty_printf(_("DSA keypair will have 1024 bits.\n"));
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pKEYLENGTH;
- strcpy( r->u.value, "1024" );
- r->next = para;
- para = r;
-
- algo = PUBKEY_ALGO_ELGAMAL_E;
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pSUBKEYTYPE;
- sprintf( r->u.value, "%d", algo );
- r->next = para;
- para = r;
- }
- else {
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pKEYTYPE;
- sprintf( r->u.value, "%d", algo );
- r->next = para;
- para = r;
-
- if (use) {
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pKEYUSAGE;
- sprintf( r->u.value, "%s%s",
- (use & PUBKEY_USAGE_SIG)? "sign ":"",
- (use & PUBKEY_USAGE_ENC)? "encrypt ":"" );
- r->next = para;
- para = r;
- }
-
- }
-
- nbits = ask_keysize( algo );
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = both? pSUBKEYLENGTH : pKEYLENGTH;
- sprintf( r->u.value, "%u", nbits);
- r->next = para;
- para = r;
-
- expire = ask_expire_interval(0);
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pKEYEXPIRE;
- r->u.expire = expire;
- r->next = para;
- para = r;
- r = m_alloc_clear( sizeof *r + 20 );
- r->key = pSUBKEYEXPIRE;
- r->u.expire = expire;
- r->next = para;
- para = r;
-
- uid = ask_user_id(0);
- if( !uid ) {
- log_error(_("Key generation canceled.\n"));
- release_parameter_list( para );
- return;
- }
- r = m_alloc_clear( sizeof *r + strlen(uid) );
- r->key = pUSERID;
- strcpy( r->u.value, uid );
- r->next = para;
- para = r;
-
- dek = ask_passphrase( &s2k );
- if( dek ) {
- r = m_alloc_clear( sizeof *r );
- r->key = pPASSPHRASE_DEK;
- r->u.dek = dek;
- r->next = para;
- para = r;
- r = m_alloc_clear( sizeof *r );
- r->key = pPASSPHRASE_S2K;
- r->u.s2k = s2k;
- r->next = para;
- para = r;
- }
-
- proc_parameter_file( para, "[internal]", &outctrl );
- release_parameter_list( para );
-}
-
-
-static void
-print_status_key_created (int letter, PKT_public_key *pk)
-{
- byte array[MAX_FINGERPRINT_LEN], *s;
- char buf[MAX_FINGERPRINT_LEN*2+30], *p;
- size_t i, n;
-
- p = buf;
- *p++ = letter;
- *p++ = ' ';
- fingerprint_from_pk (pk, array, &n);
- s = array;
- for (i=0; i < n ; i++, s++, p += 2)
- sprintf (p, "%02X", *s);
- *p = 0;
- write_status_text (STATUS_KEY_CREATED, buf);
-}
-
-static void
-do_generate_keypair( struct para_data_s *para,
- struct output_control_s *outctrl )
-{
- KBNODE pub_root = NULL;
- KBNODE sec_root = NULL;
- PKT_secret_key *sk = NULL;
- const char *s;
- struct revocation_key *revkey;
- int rc;
- int did_sub = 0;
-
- if( outctrl->dryrun ) {
- log_info("dry-run mode - key generation skipped\n");
- return;
- }
-
-
- if( outctrl->use_files ) {
- if( outctrl->pub.newfname ) {
- iobuf_close(outctrl->pub.stream);
- outctrl->pub.stream = NULL;
- m_free( outctrl->pub.fname );
- outctrl->pub.fname = outctrl->pub.newfname;
- outctrl->pub.newfname = NULL;
-
- outctrl->pub.stream = iobuf_create( outctrl->pub.fname );
- if( !outctrl->pub.stream ) {
- log_error("can't create `%s': %s\n", outctrl->pub.newfname,
- strerror(errno) );
- return;
- }
- if( opt.armor ) {
- outctrl->pub.afx.what = 1;
- iobuf_push_filter( outctrl->pub.stream, armor_filter,
- &outctrl->pub.afx );
- }
- }
- if( outctrl->sec.newfname ) {
- iobuf_close(outctrl->sec.stream);
- outctrl->sec.stream = NULL;
- m_free( outctrl->sec.fname );
- outctrl->sec.fname = outctrl->sec.newfname;
- outctrl->sec.newfname = NULL;
-
- outctrl->sec.stream = iobuf_create( outctrl->sec.fname );
- if( !outctrl->sec.stream ) {
- log_error("can't create `%s': %s\n", outctrl->sec.newfname,
- strerror(errno) );
- return;
- }
- if( opt.armor ) {
- outctrl->sec.afx.what = 5;
- iobuf_push_filter( outctrl->sec.stream, armor_filter,
- &outctrl->sec.afx );
- }
- }
- assert( outctrl->pub.stream );
- assert( outctrl->sec.stream );
- if( opt.verbose ) {
- log_info(_("writing public key to `%s'\n"), outctrl->pub.fname );
- log_info(_("writing secret key to `%s'\n"), outctrl->sec.fname );
- }
- }
-
-
- /* we create the packets as a tree of kbnodes. Because the structure
- * we create is known in advance we simply generate a linked list
- * The first packet is a dummy comment packet which we flag
- * as deleted. The very first packet must always be a KEY packet.
- */
- pub_root = make_comment_node("#"); delete_kbnode(pub_root);
- sec_root = make_comment_node("#"); delete_kbnode(sec_root);
-
- rc = do_create( get_parameter_algo( para, pKEYTYPE ),
- get_parameter_uint( para, pKEYLENGTH ),
- pub_root, sec_root,
- get_parameter_dek( para, pPASSPHRASE_DEK ),
- get_parameter_s2k( para, pPASSPHRASE_S2K ),
- &sk,
- get_parameter_u32( para, pKEYEXPIRE ) );
-
- if(!rc && (revkey=get_parameter_revkey(para,pREVOKER)))
- {
- rc=write_direct_sig(pub_root,pub_root,sk,revkey);
- if(!rc)
- write_direct_sig(sec_root,pub_root,sk,revkey);
- }
-
- if( !rc && (s=get_parameter_value(para, pUSERID)) ) {
- write_uid(pub_root, s );
- if( !rc )
- write_uid(sec_root, s );
- if( !rc )
- rc = write_selfsig(pub_root, pub_root, sk,
- get_parameter_uint (para, pKEYUSAGE));
- if( !rc )
- rc = write_selfsig(sec_root, pub_root, sk,
- get_parameter_uint (para, pKEYUSAGE));
- }
-
- if( get_parameter( para, pSUBKEYTYPE ) ) {
- rc = do_create( get_parameter_algo( para, pSUBKEYTYPE ),
- get_parameter_uint( para, pSUBKEYLENGTH ),
- pub_root, sec_root,
- get_parameter_dek( para, pPASSPHRASE_DEK ),
- get_parameter_s2k( para, pPASSPHRASE_S2K ),
- NULL,
- get_parameter_u32( para, pSUBKEYEXPIRE ) );
- if( !rc )
- rc = write_keybinding(pub_root, pub_root, sk,
- get_parameter_uint (para, pSUBKEYUSAGE));
- if( !rc )
- rc = write_keybinding(sec_root, pub_root, sk,
- get_parameter_uint (para, pSUBKEYUSAGE));
- did_sub = 1;
- }
-
-
- if( !rc && outctrl->use_files ) { /* direct write to specified files */
- rc = write_keyblock( outctrl->pub.stream, pub_root );
- if( rc )
- log_error("can't write public key: %s\n", g10_errstr(rc) );
- if( !rc ) {
- rc = write_keyblock( outctrl->sec.stream, sec_root );
- if( rc )
- log_error("can't write secret key: %s\n", g10_errstr(rc) );
- }
-
- }
- else if( !rc ) { /* write to the standard keyrings */
- KEYDB_HANDLE pub_hd = keydb_new (0);
- KEYDB_HANDLE sec_hd = keydb_new (1);
-
- /* FIXME: we may have to create the keyring first */
- rc = keydb_locate_writable (pub_hd, NULL);
- if (rc)
- log_error (_("no writable public keyring found: %s\n"),
- g10_errstr (rc));
-
- if (!rc) {
- rc = keydb_locate_writable (sec_hd, NULL);
- if (rc)
- log_error (_("no writable secret keyring found: %s\n"),
- g10_errstr (rc));
- }
-
- if (!rc && opt.verbose) {
- log_info(_("writing public key to `%s'\n"),
- keydb_get_resource_name (pub_hd));
- log_info(_("writing secret key to `%s'\n"),
- keydb_get_resource_name (sec_hd));
- }
-
- if (!rc) {
- rc = keydb_insert_keyblock (pub_hd, pub_root);
- if (rc)
- log_error (_("error writing public keyring `%s': %s\n"),
- keydb_get_resource_name (pub_hd), g10_errstr(rc));
- }
-
- if (!rc) {
- rc = keydb_insert_keyblock (sec_hd, sec_root);
- if (rc)
- log_error (_("error writing secret keyring `%s': %s\n"),
- keydb_get_resource_name (pub_hd), g10_errstr(rc));
- }
-
- keydb_release (pub_hd);
- keydb_release (sec_hd);
-
- if (!rc) {
- int no_enc_rsa =
- get_parameter_algo(para, pKEYTYPE) == PUBKEY_ALGO_RSA
- && get_parameter_uint( para, pKEYUSAGE )
- && !(get_parameter_uint( para,pKEYUSAGE) & PUBKEY_USAGE_ENC);
- PKT_public_key *pk = find_kbnode (pub_root,
- PKT_PUBLIC_KEY)->pkt->pkt.public_key;
-
- update_ownertrust (pk,
- ((get_ownertrust (pk) & ~TRUST_MASK)
- | TRUST_ULTIMATE ));
-
- if (!opt.batch) {
- tty_printf(_("public and secret key created and signed.\n") );
- tty_printf(_("key marked as ultimately trusted.\n") );
- tty_printf("\n");
- list_keyblock(pub_root,0,1,NULL);
- }
-
-
- if( !opt.batch
- && ( get_parameter_algo( para, pKEYTYPE ) == PUBKEY_ALGO_DSA
- || no_enc_rsa )
- && !get_parameter( para, pSUBKEYTYPE ) )
- {
- tty_printf(_("Note that this key cannot be used for "
- "encryption. You may want to use\n"
- "the command \"--edit-key\" to generate a "
- "secondary key for this purpose.\n") );
- }
- }
- }
-
- if( rc ) {
- if( opt.batch )
- log_error("key generation failed: %s\n", g10_errstr(rc) );
- else
- tty_printf(_("Key generation failed: %s\n"), g10_errstr(rc) );
- }
- else {
- PKT_public_key *pk = find_kbnode (pub_root,
- PKT_PUBLIC_KEY)->pkt->pkt.public_key;
- print_status_key_created (did_sub? 'B':'P', pk);
- }
- release_kbnode( pub_root );
- release_kbnode( sec_root );
- if( sk ) /* the unprotected secret key */
- free_secret_key(sk);
-}
-
-
-/****************
- * add a new subkey to an existing key.
- * Returns true if a new key has been generated and put into the keyblocks.
- */
-int
-generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock )
-{
- int okay=0, rc=0;
- KBNODE node;
- PKT_secret_key *sk = NULL; /* this is the primary sk */
- int algo;
- unsigned int use;
- u32 expire;
- unsigned nbits;
- char *passphrase = NULL;
- DEK *dek = NULL;
- STRING2KEY *s2k = NULL;
- u32 cur_time;
-
- /* break out the primary secret key */
- node = find_kbnode( sec_keyblock, PKT_SECRET_KEY );
- if( !node ) {
- log_error("Oops; secret key not found anymore!\n");
- goto leave;
- }
-
- /* make a copy of the sk to keep the protected one in the keyblock */
- sk = copy_secret_key( NULL, node->pkt->pkt.secret_key );
-
- cur_time = make_timestamp();
- if( sk->timestamp > cur_time ) {
- ulong d = sk->timestamp - cur_time;
- log_info( d==1 ? _("key has been created %lu second "
- "in future (time warp or clock problem)\n")
- : _("key has been created %lu seconds "
- "in future (time warp or clock problem)\n"), d );
- if( !opt.ignore_time_conflict ) {
- rc = G10ERR_TIME_CONFLICT;
- goto leave;
- }
- }
-
- if (sk->version < 4) {
- log_info (_("NOTE: creating subkeys for v3 keys "
- "is not OpenPGP compliant\n"));
- goto leave;
- }
-
- /* unprotect to get the passphrase */
- switch( is_secret_key_protected( sk ) ) {
- case -1:
- rc = G10ERR_PUBKEY_ALGO;
- break;
- case 0:
- tty_printf("This key is not protected.\n");
- break;
- default:
- tty_printf("Key is protected.\n");
- rc = check_secret_key( sk, 0 );
- if( !rc )
- passphrase = get_last_passphrase();
- break;
- }
- if( rc )
- goto leave;
-
-
- algo = ask_algo( 1, &use );
- assert(algo);
- nbits = ask_keysize( algo );
- expire = ask_expire_interval(0);
- if( !cpr_enabled() && !cpr_get_answer_is_yes("keygen.sub.okay",
- _("Really create? ") ) )
- goto leave;
-
- if( passphrase ) {
- s2k = m_alloc_secure( sizeof *s2k );
- s2k->mode = opt.s2k_mode;
- s2k->hash_algo = opt.s2k_digest_algo;
- set_next_passphrase( passphrase );
- dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, NULL );
- }
-
- rc = do_create( algo, nbits, pub_keyblock, sec_keyblock,
- dek, s2k, NULL, expire );
- if( !rc )
- rc = write_keybinding(pub_keyblock, pub_keyblock, sk, use);
- if( !rc )
- rc = write_keybinding(sec_keyblock, pub_keyblock, sk, use);
- if( !rc ) {
- okay = 1;
- write_status_text (STATUS_KEY_CREATED, "S");
- }
-
- leave:
- if( rc )
- log_error(_("Key generation failed: %s\n"), g10_errstr(rc) );
- m_free( passphrase );
- m_free( dek );
- m_free( s2k );
- if( sk ) /* release the copy of the (now unprotected) secret key */
- free_secret_key(sk);
- set_next_passphrase( NULL );
- return okay;
-}
-
-/****************
- * Write a keyblock to an output stream
- */
-static int
-write_keyblock( IOBUF out, KBNODE node )
-{
- for( ; node ; node = node->next ) {
- int rc = build_packet( out, node->pkt );
- if( rc ) {
- log_error("build_packet(%d) failed: %s\n",
- node->pkt->pkttype, g10_errstr(rc) );
- return G10ERR_WRITE_FILE;
- }
- }
- return 0;
-}
diff --git a/g10/keyid.c b/g10/keyid.c
deleted file mode 100644
index 43e531e3e..000000000
--- a/g10/keyid.c
+++ /dev/null
@@ -1,502 +0,0 @@
-/* keyid.c - key ID and fingerprint handling
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-#include <assert.h>
-#include "util.h"
-#include "main.h"
-#include "packet.h"
-#include "options.h"
-#include "mpi.h"
-#include "keydb.h"
-#include "i18n.h"
-
-
-int
-pubkey_letter( int algo )
-{
- switch( algo ) {
- case PUBKEY_ALGO_RSA: return 'R' ;
- case PUBKEY_ALGO_RSA_E: return 'r' ;
- case PUBKEY_ALGO_RSA_S: return 's' ;
- case PUBKEY_ALGO_ELGAMAL_E: return 'g';
- case PUBKEY_ALGO_ELGAMAL: return 'G' ;
- case PUBKEY_ALGO_DSA: return 'D' ;
- default: return '?';
- }
-}
-
-static MD_HANDLE
-do_fingerprint_md( PKT_public_key *pk )
-{
- MD_HANDLE md;
- unsigned n;
- unsigned nb[PUBKEY_MAX_NPKEY];
- unsigned nn[PUBKEY_MAX_NPKEY];
- byte *pp[PUBKEY_MAX_NPKEY];
- int i;
- int npkey = pubkey_get_npkey( pk->pubkey_algo );
-
- md = md_open( pk->version < 4 ? DIGEST_ALGO_RMD160 : DIGEST_ALGO_SHA1, 0);
- n = pk->version < 4 ? 8 : 6;
- for(i=0; i < npkey; i++ ) {
- nb[i] = mpi_get_nbits(pk->pkey[i]);
- pp[i] = mpi_get_buffer( pk->pkey[i], nn+i, NULL );
- n += 2 + nn[i];
- }
-
- md_putc( md, 0x99 ); /* ctb */
- md_putc( md, n >> 8 ); /* 2 byte length header */
- md_putc( md, n );
- if( pk->version < 4 )
- md_putc( md, 3 );
- else
- md_putc( md, 4 );
-
- { u32 a = pk->timestamp;
- md_putc( md, a >> 24 );
- md_putc( md, a >> 16 );
- md_putc( md, a >> 8 );
- md_putc( md, a );
- }
- if( pk->version < 4 ) {
- u16 a;
-
- if( pk->expiredate )
- a = (u16)((pk->expiredate - pk->timestamp) / 86400L);
- else
- a = 0;
- md_putc( md, a >> 8 );
- md_putc( md, a );
- }
- md_putc( md, pk->pubkey_algo );
- for(i=0; i < npkey; i++ ) {
- md_putc( md, nb[i]>>8);
- md_putc( md, nb[i] );
- md_write( md, pp[i], nn[i] );
- m_free(pp[i]);
- }
- md_final( md );
-
- return md;
-}
-
-static MD_HANDLE
-do_fingerprint_md_sk( PKT_secret_key *sk )
-{
- PKT_public_key pk;
- int npkey = pubkey_get_npkey( sk->pubkey_algo ); /* npkey is correct! */
- int i;
-
- pk.pubkey_algo = sk->pubkey_algo;
- pk.version = sk->version;
- pk.timestamp = sk->timestamp;
- pk.expiredate = sk->expiredate;
- pk.pubkey_algo = sk->pubkey_algo;
- for( i=0; i < npkey; i++ )
- pk.pkey[i] = sk->skey[i];
- return do_fingerprint_md( &pk );
-}
-
-
-/****************
- * Get the keyid from the secret key and put it into keyid
- * if this is not NULL. Return the 32 low bits of the keyid.
- */
-u32
-keyid_from_sk( PKT_secret_key *sk, u32 *keyid )
-{
- u32 lowbits;
- u32 dummy_keyid[2];
-
- if( !keyid )
- keyid = dummy_keyid;
-
- if( sk->version < 4 && is_RSA(sk->pubkey_algo) ) {
- lowbits = pubkey_get_npkey(sk->pubkey_algo) ?
- mpi_get_keyid( sk->skey[0], keyid ) : 0; /* take n */
- }
- else {
- const byte *dp;
- MD_HANDLE md;
- md = do_fingerprint_md_sk(sk);
- dp = md_read( md, 0 );
- keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
- keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
- lowbits = keyid[1];
- md_close(md);
- }
-
- return lowbits;
-}
-
-
-/****************
- * Get the keyid from the public key and put it into keyid
- * if this is not NULL. Return the 32 low bits of the keyid.
- */
-u32
-keyid_from_pk( PKT_public_key *pk, u32 *keyid )
-{
- u32 lowbits;
- u32 dummy_keyid[2];
-
- if( !keyid )
- keyid = dummy_keyid;
-
- if( pk->keyid[0] || pk->keyid[1] ) {
- keyid[0] = pk->keyid[0];
- keyid[1] = pk->keyid[1];
- lowbits = keyid[1];
- }
- else if( pk->version < 4 && is_RSA(pk->pubkey_algo) ) {
- lowbits = pubkey_get_npkey(pk->pubkey_algo) ?
- mpi_get_keyid( pk->pkey[0], keyid ) : 0 ; /* from n */
- pk->keyid[0] = keyid[0];
- pk->keyid[1] = keyid[1];
- }
- else {
- const byte *dp;
- MD_HANDLE md;
- md = do_fingerprint_md(pk);
- dp = md_read( md, 0 );
- keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
- keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
- lowbits = keyid[1];
- md_close(md);
- pk->keyid[0] = keyid[0];
- pk->keyid[1] = keyid[1];
- }
-
- return lowbits;
-}
-
-
-/****************
- * Get the keyid from the fingerprint. This function is simple for most
- * keys, but has to do a keylookup for old stayle keys.
- */
-u32
-keyid_from_fingerprint( const byte *fprint, size_t fprint_len, u32 *keyid )
-{
- u32 dummy_keyid[2];
-
- if( !keyid )
- keyid = dummy_keyid;
-
- if( fprint_len != 20 ) {
- /* This is special as we have to lookup the key first */
- PKT_public_key pk;
- int rc;
-
- memset( &pk, 0, sizeof pk );
- rc = get_pubkey_byfprint( &pk, fprint, fprint_len );
- if( rc ) {
- log_error("Oops: keyid_from_fingerprint: no pubkey\n");
- keyid[0] = 0;
- keyid[1] = 0;
- }
- else
- keyid_from_pk( &pk, keyid );
- }
- else {
- const byte *dp = fprint;
- keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
- keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
- }
-
- return keyid[1];
-}
-
-
-u32
-keyid_from_sig( PKT_signature *sig, u32 *keyid )
-{
- if( keyid ) {
- keyid[0] = sig->keyid[0];
- keyid[1] = sig->keyid[1];
- }
- return sig->keyid[1];
-}
-
-/****************
- * return the number of bits used in the pk
- */
-unsigned
-nbits_from_pk( PKT_public_key *pk )
-{
- return pubkey_nbits( pk->pubkey_algo, pk->pkey );
-}
-
-/****************
- * return the number of bits used in the sk
- */
-unsigned
-nbits_from_sk( PKT_secret_key *sk )
-{
- return pubkey_nbits( sk->pubkey_algo, sk->skey );
-}
-
-static const char *
-mk_datestr (char *buffer, time_t atime)
-{
- struct tm *tp;
-
- if ( atime < 0 ) /* 32 bit time_t and after 2038-01-19 */
- strcpy (buffer, "????" "-??" "-??"); /* mark this as invalid */
- else {
- tp = gmtime (&atime);
- sprintf (buffer,"%04d-%02d-%02d",
- 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday );
- }
- return buffer;
-}
-
-/****************
- * return a string with the creation date of the pk
- * Note: this is alloced in a static buffer.
- * Format is: yyyy-mm-dd
- */
-const char *
-datestr_from_pk( PKT_public_key *pk )
-{
- static char buffer[11+5];
- time_t atime = pk->timestamp;
-
- return mk_datestr (buffer, atime);
-}
-
-const char *
-datestr_from_sk( PKT_secret_key *sk )
-{
- static char buffer[11+5];
- time_t atime = sk->timestamp;
-
- return mk_datestr (buffer, atime);
-}
-
-const char *
-datestr_from_sig( PKT_signature *sig )
-{
- static char buffer[11+5];
- time_t atime = sig->timestamp;
-
- return mk_datestr (buffer, atime);
-}
-
-const char *
-expirestr_from_pk( PKT_public_key *pk )
-{
- static char buffer[11+5];
- time_t atime;
-
- if( !pk->expiredate )
- return _("never ");
- atime = pk->expiredate;
- return mk_datestr (buffer, atime);
-}
-
-const char *
-expirestr_from_sk( PKT_secret_key *sk )
-{
- static char buffer[11+5];
- time_t atime;
-
- if( !sk->expiredate )
- return _("never ");
- atime = sk->expiredate;
- return mk_datestr (buffer, atime);
-}
-
-const char *
-expirestr_from_sig( PKT_signature *sig )
-{
- static char buffer[11+5];
- time_t atime;
-
- if(!sig->expiredate)
- return _("never ");
- atime=sig->expiredate;
- return mk_datestr (buffer, atime);
-}
-
-const char *
-colon_strtime (u32 t)
-{
- if (!t)
- return "";
- if (opt.fixed_list_mode) {
- static char buf[15];
- sprintf (buf, "%lu", (ulong)t);
- return buf;
- }
- return strtimestamp(t);
-}
-
-const char *
-colon_datestr_from_pk (PKT_public_key *pk)
-{
- if (opt.fixed_list_mode) {
- static char buf[15];
- sprintf (buf, "%lu", (ulong)pk->timestamp);
- return buf;
- }
- return datestr_from_pk (pk);
-}
-
-const char *
-colon_datestr_from_sk (PKT_secret_key *sk)
-{
- if (opt.fixed_list_mode) {
- static char buf[15];
- sprintf (buf, "%lu", (ulong)sk->timestamp);
- return buf;
- }
- return datestr_from_sk (sk);
-}
-
-const char *
-colon_datestr_from_sig (PKT_signature *sig)
-{
- if (opt.fixed_list_mode) {
- static char buf[15];
- sprintf (buf, "%lu", (ulong)sig->timestamp);
- return buf;
- }
- return datestr_from_sig (sig);
-}
-
-const char *
-colon_expirestr_from_sig (PKT_signature *sig)
-{
- if(!sig->expiredate)
- return "";
- if (opt.fixed_list_mode) {
- static char buf[15];
- sprintf (buf, "%lu", (ulong)sig->expiredate);
- return buf;
- }
- return expirestr_from_sig (sig);
-}
-
-
-/**************** .
- * Return a byte array with the fingerprint for the given PK/SK
- * The length of the array is returned in ret_len. Caller must free
- * the array or provide an array of length MAX_FINGERPRINT_LEN.
- */
-
-byte *
-fingerprint_from_pk( PKT_public_key *pk, byte *array, size_t *ret_len )
-{
- byte *p, *buf;
- const byte *dp;
- size_t len;
- unsigned int n;
-
- if( pk->version < 4 && is_RSA(pk->pubkey_algo) ) {
- /* RSA in version 3 packets is special */
- MD_HANDLE md;
-
- md = md_open( DIGEST_ALGO_MD5, 0);
- if( pubkey_get_npkey( pk->pubkey_algo ) > 1 ) {
- p = buf = mpi_get_buffer( pk->pkey[0], &n, NULL );
- md_write( md, p, n );
- m_free(buf);
- p = buf = mpi_get_buffer( pk->pkey[1], &n, NULL );
- md_write( md, p, n );
- m_free(buf);
- }
- md_final(md);
- if( !array )
- array = m_alloc( 16 );
- len = 16;
- memcpy(array, md_read(md, DIGEST_ALGO_MD5), 16 );
- md_close(md);
- }
- else {
- MD_HANDLE md;
- md = do_fingerprint_md(pk);
- dp = md_read( md, 0 );
- len = md_digest_length( md_get_algo( md ) );
- assert( len <= MAX_FINGERPRINT_LEN );
- if( !array )
- array = m_alloc( len );
- memcpy(array, dp, len );
- pk->keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
- pk->keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
- md_close(md);
- }
-
- *ret_len = len;
- return array;
-}
-
-byte *
-fingerprint_from_sk( PKT_secret_key *sk, byte *array, size_t *ret_len )
-{
- byte *p, *buf;
- const char *dp;
- size_t len;
- unsigned n;
-
- if( sk->version < 4 && is_RSA(sk->pubkey_algo) ) {
- /* RSA in version 3 packets is special */
- MD_HANDLE md;
-
- md = md_open( DIGEST_ALGO_MD5, 0);
- if( pubkey_get_npkey( sk->pubkey_algo ) > 1 ) {
- p = buf = mpi_get_buffer( sk->skey[0], &n, NULL );
- md_write( md, p, n );
- m_free(buf);
- p = buf = mpi_get_buffer( sk->skey[1], &n, NULL );
- md_write( md, p, n );
- m_free(buf);
- }
- md_final(md);
- if( !array )
- array = m_alloc( 16 );
- len = 16;
- memcpy(array, md_read(md, DIGEST_ALGO_MD5), 16 );
- md_close(md);
- }
- else {
- MD_HANDLE md;
- md = do_fingerprint_md_sk(sk);
- dp = md_read( md, 0 );
- len = md_digest_length( md_get_algo( md ) );
- assert( len <= MAX_FINGERPRINT_LEN );
- if( !array )
- array = m_alloc( len );
- memcpy(array, dp, len );
- md_close(md);
- }
-
- *ret_len = len;
- return array;
-}
-
-
-
diff --git a/g10/keylist.c b/g10/keylist.c
deleted file mode 100644
index a1a0e4c13..000000000
--- a/g10/keylist.c
+++ /dev/null
@@ -1,1116 +0,0 @@
-/* keylist.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "keydb.h"
-#include "memory.h"
-#include "photoid.h"
-#include "util.h"
-#include "ttyio.h"
-#include "trustdb.h"
-#include "main.h"
-#include "i18n.h"
-#include "status.h"
-
-static void list_all(int);
-static void list_one( STRLIST names, int secret);
-
-struct sig_stats
-{
- int inv_sigs;
- int no_key;
- int oth_err;
-};
-
-static FILE *attrib_fp=NULL;
-
-/****************
- * List the keys
- * If list is NULL, all available keys are listed
- */
-void
-public_key_list( STRLIST list )
-{
- if( !list )
- list_all(0);
- else
- list_one( list, 0 );
-}
-
-void
-secret_key_list( STRLIST list )
-{
- if( !list )
- list_all(1);
- else /* List by user id */
- list_one( list, 1 );
-}
-
-void
-show_policy_url(PKT_signature *sig,int indent)
-{
- const byte *p;
- size_t len;
- int seq=0,crit;
-
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&len,&seq,&crit)))
- {
- int i;
-
- for(i=0;i<indent;i++)
- putchar(' ');
-
- /* This isn't UTF8 as it is a URL(?) */
- if(crit)
- printf(_("Critical signature policy: "));
- else
- printf(_("Signature policy: "));
- print_string(stdout,p,len,0);
- printf("\n");
- }
-}
-
-void
-show_notation(PKT_signature *sig,int indent)
-{
- const byte *p;
- size_t len;
- int seq=0,crit;
-
- /* There may be multiple notations in the same sig. */
-
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&len,&seq,&crit)))
- if(len>=8)
- {
- int n1,n2,i;
-
- n1=(p[4]<<8)|p[5];
- n2=(p[6]<<8)|p[7];
-
- if(8+n1+n2!=len)
- {
- log_info(_("WARNING: invalid notation data found\n"));
- return;
- }
-
- for(i=0;i<indent;i++)
- putchar(' ');
-
- /* This is UTF8 */
- if(crit)
- printf(_("Critical signature notation: "));
- else
- printf(_("Signature notation: "));
- print_utf8_string(stdout,p+8,n1);
- printf("=");
-
- if(*p&0x80)
- print_utf8_string(stdout,p+8+n1,n2);
- else
- printf("[ %s ]",_("not human readable"));
-
- printf("\n");
- }
- else
- log_info(_("WARNING: invalid notation data found\n"));
-}
-
-static void
-print_signature_stats(struct sig_stats *s)
-{
- if( s->inv_sigs == 1 )
- tty_printf(_("1 bad signature\n") );
- else if( s->inv_sigs )
- tty_printf(_("%d bad signatures\n"), s->inv_sigs );
- if( s->no_key == 1 )
- tty_printf(_("1 signature not checked due to a missing key\n") );
- else if( s->no_key )
- tty_printf(_("%d signatures not checked due to missing keys\n"),s->no_key);
- if( s->oth_err == 1 )
- tty_printf(_("1 signature not checked due to an error\n") );
- else if( s->oth_err )
- tty_printf(_("%d signatures not checked due to errors\n"), s->oth_err );
-}
-
-static void
-list_all( int secret )
-{
- KEYDB_HANDLE hd;
- KBNODE keyblock = NULL;
- int rc=0;
- const char *lastresname, *resname;
- struct sig_stats stats;
-
- memset(&stats,0,sizeof(stats));
-
- hd = keydb_new (secret);
- if (!hd)
- rc = G10ERR_GENERAL;
- else
- rc = keydb_search_first (hd);
- if( rc ) {
- if( rc != -1 )
- log_error("keydb_search_first failed: %s\n", g10_errstr(rc) );
- goto leave;
- }
-
- lastresname = NULL;
- do {
- rc = keydb_get_keyblock (hd, &keyblock);
- if (rc) {
- log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc));
- goto leave;
- }
- resname = keydb_get_resource_name (hd);
- if (lastresname != resname ) {
- int i;
-
- printf("%s\n", resname );
- for(i=strlen(resname); i; i-- )
- putchar('-');
- putchar('\n');
- lastresname = resname;
- }
- merge_keys_and_selfsig( keyblock );
- list_keyblock( keyblock, secret, opt.fingerprint,
- opt.check_sigs?&stats:NULL);
- release_kbnode( keyblock );
- keyblock = NULL;
- } while (!(rc = keydb_search_next (hd)));
- if( rc && rc != -1 )
- log_error ("keydb_search_next failed: %s\n", g10_errstr(rc));
-
- if(opt.check_sigs && !opt.with_colons)
- print_signature_stats(&stats);
-
- leave:
- release_kbnode (keyblock);
- keydb_release (hd);
-}
-
-
-static void
-list_one( STRLIST names, int secret )
-{
- int rc = 0;
- KBNODE keyblock = NULL;
- GETKEY_CTX ctx;
- const char *resname;
- char *keyring_str = N_("Keyring");
- int i;
- struct sig_stats stats;
-
- memset(&stats,0,sizeof(stats));
-
- /* fixme: using the bynames function has the disadvantage that we
- * don't know wether one of the names given was not found. OTOH,
- * this function has the advantage to list the names in the
- * sequence as defined by the keyDB and does not duplicate
- * outputs. A solution could be do test whether all given have
- * been listed (this needs a way to use the keyDB search
- * functions) or to have the search function return indicators for
- * found names. Yet another way is to use the keydb search
- * facilities directly. */
- if( secret ) {
- rc = get_seckey_bynames( &ctx, NULL, names, &keyblock );
- if( rc ) {
- log_error("error reading key: %s\n", g10_errstr(rc) );
- get_seckey_end( ctx );
- return;
- }
- do {
- if (opt.show_keyring) {
- resname = keydb_get_resource_name (get_ctx_handle(ctx));
- printf("%s: %s\n", keyring_str, resname);
- for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- )
- putchar('-');
- putchar('\n');
- }
- list_keyblock( keyblock, 1, opt.fingerprint, NULL );
- release_kbnode( keyblock );
- } while( !get_seckey_next( ctx, NULL, &keyblock ) );
- get_seckey_end( ctx );
- }
- else {
- rc = get_pubkey_bynames( &ctx, NULL, names, &keyblock );
- if( rc ) {
- log_error("error reading key: %s\n", g10_errstr(rc) );
- get_pubkey_end( ctx );
- return;
- }
- do {
- if (opt.show_keyring) {
- resname = keydb_get_resource_name (get_ctx_handle(ctx));
- printf("%s: %s\n", keyring_str, resname);
- for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- )
- putchar('-');
- putchar('\n');
- }
- list_keyblock( keyblock, 0, opt.fingerprint,
- opt.check_sigs?&stats:NULL );
- release_kbnode( keyblock );
- } while( !get_pubkey_next( ctx, NULL, &keyblock ) );
- get_pubkey_end( ctx );
- }
-
- if(opt.check_sigs && !opt.with_colons)
- print_signature_stats(&stats);
-}
-
-static void
-print_key_data( PKT_public_key *pk, u32 *keyid )
-{
- int n = pk ? pubkey_get_npkey( pk->pubkey_algo ) : 0;
- int i;
-
- for(i=0; i < n; i++ ) {
- printf("pkd:%d:%u:", i, mpi_get_nbits( pk->pkey[i] ) );
- mpi_print(stdout, pk->pkey[i], 1 );
- putchar(':');
- putchar('\n');
- }
-}
-
-static void
-print_capabilities (PKT_public_key *pk, PKT_secret_key *sk, KBNODE keyblock)
-{
- if(pk || (sk && sk->protect.s2k.mode!=1001))
- {
- unsigned int use = pk? pk->pubkey_usage : sk->pubkey_usage;
-
- if ( use & PUBKEY_USAGE_ENC )
- putchar ('e');
-
- if ( use & PUBKEY_USAGE_SIG )
- {
- putchar ('s');
- if( pk? pk->is_primary : sk->is_primary )
- putchar ('c');
- }
- }
-
- if ( keyblock ) { /* figure our the usable capabilities */
- KBNODE k;
- int enc=0, sign=0, cert=0;
-
- for (k=keyblock; k; k = k->next ) {
- if ( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- pk = k->pkt->pkt.public_key;
- if ( pk->is_valid && !pk->is_revoked && !pk->has_expired ) {
- if ( pk->pubkey_usage & PUBKEY_USAGE_ENC )
- enc = 1;
- if ( pk->pubkey_usage & PUBKEY_USAGE_SIG )
- {
- sign = 1;
- if(pk->is_primary)
- cert = 1;
- }
- }
- }
- else if ( k->pkt->pkttype == PKT_SECRET_KEY
- || k->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- sk = k->pkt->pkt.secret_key;
- if ( sk->is_valid && !sk->is_revoked && !sk->has_expired
- && sk->protect.s2k.mode!=1001 ) {
- if ( sk->pubkey_usage & PUBKEY_USAGE_ENC )
- enc = 1;
- if ( sk->pubkey_usage & PUBKEY_USAGE_SIG )
- {
- sign = 1;
- if(sk->is_primary)
- cert = 1;
- }
- }
- }
- }
- if (enc)
- putchar ('E');
- if (sign)
- putchar ('S');
- if (cert)
- putchar ('C');
- }
- putchar(':');
-}
-
-static void dump_attribs(const PKT_user_id *uid,
- PKT_public_key *pk,PKT_secret_key *sk)
-{
- int i;
-
- if(!attrib_fp)
- BUG();
-
- for(i=0;i<uid->numattribs;i++)
- {
- if(is_status_enabled())
- {
- byte array[MAX_FINGERPRINT_LEN], *p;
- char buf[(MAX_FINGERPRINT_LEN*2)+90];
- size_t j,n;
-
- if(pk)
- fingerprint_from_pk( pk, array, &n );
- else if(sk)
- fingerprint_from_sk( sk, array, &n );
- else
- BUG();
-
- p = array;
- for(j=0; j < n ; j++, p++ )
- sprintf(buf+2*j, "%02X", *p );
-
- sprintf(buf+strlen(buf)," %lu %u %u %u %lu %lu %u",
- (ulong)uid->attribs[i].len,uid->attribs[i].type,i+1,
- uid->numattribs,(ulong)uid->created,(ulong)uid->expiredate,
- ((uid->is_primary?0x01:0)|
- (uid->is_revoked?0x02:0)|
- (uid->is_expired?0x04:0)));
- write_status_text(STATUS_ATTRIBUTE,buf);
- }
-
- fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp);
- }
-}
-
-static void
-list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
-{
- int rc = 0;
- KBNODE kbctx;
- KBNODE node;
- PKT_public_key *pk;
- PKT_secret_key *sk;
- u32 keyid[2];
- int any=0;
- struct sig_stats *stats=opaque;
-
- /* get the keyid from the keyblock */
- node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
- if( !node ) {
- log_error("Oops; key lost!\n");
- dump_kbnode( keyblock );
- return;
- }
-
- if( secret ) {
- pk = NULL;
- sk = node->pkt->pkt.secret_key;
- keyid_from_sk( sk, keyid );
- printf("sec%c %4u%c/%08lX %s ", (sk->protect.s2k.mode==1001)?'#':' ',
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)keyid[1],
- datestr_from_sk( sk ) );
- }
- else {
- pk = node->pkt->pkt.public_key;
- sk = NULL;
- keyid_from_pk( pk, keyid );
- printf("pub %4u%c/%08lX %s ", nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1],
- datestr_from_pk( pk ) );
- }
-
- for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
- if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) {
- if(attrib_fp && node->pkt->pkt.user_id->attrib_data!=NULL)
- dump_attribs(node->pkt->pkt.user_id,pk,sk);
- /* don't list revoked or expired UIDS unless we are in
- * verbose mode and signature listing has not been
- * requested */
- if ( !opt.verbose && !opt.list_sigs &&
- (node->pkt->pkt.user_id->is_revoked ||
- node->pkt->pkt.user_id->is_expired ))
- continue;
-
- if( any )
- printf("uid%*s", 28, "");
-
- if ( node->pkt->pkt.user_id->is_revoked )
- fputs ("[revoked] ", stdout);
- if ( node->pkt->pkt.user_id->is_expired )
- fputs ("[expired] ", stdout);
- print_utf8_string( stdout, node->pkt->pkt.user_id->name,
- node->pkt->pkt.user_id->len );
- putchar('\n');
- if( !any ) {
- if( fpr )
- print_fingerprint( pk, sk, 0 );
- if( opt.with_key_data )
- print_key_data( pk, keyid );
- any = 1;
- }
-
- if(opt.show_photos && node->pkt->pkt.user_id->attribs!=NULL)
- show_photos(node->pkt->pkt.user_id->attribs,
- node->pkt->pkt.user_id->numattribs,pk,sk);
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- u32 keyid2[2];
- PKT_public_key *pk2 = node->pkt->pkt.public_key;
-
- if( !any ) {
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 ); /* of the main key */
- any = 1;
- }
-
- keyid_from_pk( pk2, keyid2 );
- printf("sub %4u%c/%08lX %s", nbits_from_pk( pk2 ),
- pubkey_letter( pk2->pubkey_algo ),
- (ulong)keyid2[1],
- datestr_from_pk( pk2 ) );
- if( pk2->expiredate ) {
- printf(_(" [expires: %s]"), expirestr_from_pk( pk2 ) );
- }
- putchar('\n');
- if( fpr > 1 )
- print_fingerprint( pk2, NULL, 0 );
- if( opt.with_key_data )
- print_key_data( pk2, keyid2 );
- }
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- u32 keyid2[2];
- PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
-
- if( !any ) {
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 ); /* of the main key */
- any = 1;
- }
-
- keyid_from_sk( sk2, keyid2 );
- printf("ssb %4u%c/%08lX %s\n", nbits_from_sk( sk2 ),
- pubkey_letter( sk2->pubkey_algo ),
- (ulong)keyid2[1],
- datestr_from_sk( sk2 ) );
- if( fpr > 1 )
- print_fingerprint( NULL, sk2, 0 );
- }
- else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- int sigrc;
- char *sigstr;
-
- if( stats ) {
- /*fflush(stdout);*/
- rc = check_key_signature( keyblock, node, NULL );
- switch( rc ) {
- case 0: sigrc = '!'; break;
- case G10ERR_BAD_SIGN: stats->inv_sigs++; sigrc = '-'; break;
- case G10ERR_NO_PUBKEY:
- case G10ERR_UNU_PUBKEY: stats->no_key++; continue;
- default: stats->oth_err++; sigrc = '%'; break;
- }
-
- /* TODO: Make sure a cached sig record here still has
- the pk that issued it. See also
- keyedit.c:print_and_check_one_sig */
-
- }
- else {
- rc = 0;
- sigrc = ' ';
- }
-
- if( !any ) { /* no user id, (maybe a revocation follows)*/
- /* Check if the pk is really revoked - there could be a
- 0x20 sig packet there even if we are not revoked
- (say, if a revocation key issued the packet, but the
- revocation key isn't present to verify it.) */
- if( sig->sig_class == 0x20 && pk->is_revoked )
- puts("[revoked]");
- else if( sig->sig_class == 0x18 )
- puts("[key binding]");
- else if( sig->sig_class == 0x28 )
- puts("[subkey revoked]");
- else
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 );
- any=1;
- }
-
- if( sig->sig_class == 0x20 || sig->sig_class == 0x28
- || sig->sig_class == 0x30 )
- sigstr = "rev";
- else if( (sig->sig_class&~3) == 0x10 )
- sigstr = "sig";
- else if( sig->sig_class == 0x18 )
- sigstr = "sig";
- else if( sig->sig_class == 0x1F )
- sigstr = "sig";
- else {
- printf("sig "
- "[unexpected signature class 0x%02x]\n",sig->sig_class );
- continue;
- }
-
- fputs( sigstr, stdout );
- printf("%c%c %c%c%c%c%c %08lX %s ",
- sigrc,(sig->sig_class-0x10>0 &&
- sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ',
- sig->flags.exportable?' ':'L',
- sig->flags.revocable?' ':'R',
- sig->flags.policy_url?'P':' ',
- sig->flags.notation?'N':' ',
- sig->flags.expired?'X':' ',
- (ulong)sig->keyid[1], datestr_from_sig(sig));
- if( sigrc == '%' )
- printf("[%s] ", g10_errstr(rc) );
- else if( sigrc == '?' )
- ;
- else if ( !opt.fast_list_mode ) {
- size_t n;
- char *p = get_user_id( sig->keyid, &n );
- print_utf8_string( stdout, p, n );
- m_free(p);
- }
- putchar('\n');
-
- if(sig->flags.policy_url && opt.show_policy_url)
- show_policy_url(sig,3);
-
- if(sig->flags.notation && opt.show_notation)
- show_notation(sig,3);
-
- /* fixme: check or list other sigs here */
- }
- }
- putchar('\n');
-}
-
-
-static void
-list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
-{
- int rc = 0;
- KBNODE kbctx;
- KBNODE node;
- PKT_public_key *pk;
- PKT_secret_key *sk;
- u32 keyid[2];
- int any=0;
- int trustletter = 0;
- int ulti_hack = 0;
-
- /* get the keyid from the keyblock */
- node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
- if( !node ) {
- log_error("Oops; key lost!\n");
- dump_kbnode( keyblock );
- return;
- }
-
- if( secret ) {
- pk = NULL;
- sk = node->pkt->pkt.secret_key;
- keyid_from_sk( sk, keyid );
- printf("sec:u:%u:%d:%08lX%08lX:%s:%s:::",
- nbits_from_sk( sk ),
- sk->pubkey_algo,
- (ulong)keyid[0],(ulong)keyid[1],
- colon_datestr_from_sk( sk ),
- colon_strtime (sk->expiredate)
- /* fixme: add LID here */ );
- }
- else {
- pk = node->pkt->pkt.public_key;
- sk = NULL;
- keyid_from_pk( pk, keyid );
- fputs( "pub:", stdout );
- trustletter = 0;
- if ( !pk->is_valid )
- putchar ('i');
- else if ( pk->is_revoked )
- putchar ('r');
- else if ( pk->has_expired )
- putchar ('e');
- else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
- ;
- else {
- trustletter = get_validity_info ( pk, NULL );
- if( trustletter == 'u' )
- ulti_hack = 1;
- putchar(trustletter);
- }
- printf(":%u:%d:%08lX%08lX:%s:%s:",
- nbits_from_pk( pk ),
- pk->pubkey_algo,
- (ulong)keyid[0],(ulong)keyid[1],
- colon_datestr_from_pk( pk ),
- colon_strtime (pk->expiredate) );
- if( pk->local_id )
- printf("%lu", pk->local_id );
- putchar(':');
- if( !opt.fast_list_mode && !opt.no_expensive_trust_checks )
- putchar( get_ownertrust_info(pk) );
- putchar(':');
- }
-
- if (opt.fixed_list_mode) {
- /* do not merge the first uid with the primary key */
- putchar(':');
- putchar(':');
- print_capabilities (pk, sk, keyblock);
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 );
- if( opt.with_key_data )
- print_key_data( pk, keyid );
- any = 1;
- }
-
-
- for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
- if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) {
- if(attrib_fp && node->pkt->pkt.user_id->attrib_data!=NULL)
- dump_attribs(node->pkt->pkt.user_id,pk,sk);
- /*
- * Fixme: We need a is_valid flag here too
- */
- if( any ) {
- char *str=node->pkt->pkt.user_id->attrib_data?"uat":"uid";
- if ( node->pkt->pkt.user_id->is_revoked )
- printf("%s:r::::::::",str);
- else if ( node->pkt->pkt.user_id->is_expired )
- printf("%s:e::::::::",str);
- else if ( opt.no_expensive_trust_checks ) {
- printf("%s:::::::::",str);
- }
- else {
- byte namehash[20];
-
- if( pk && !ulti_hack ) {
- if( node->pkt->pkt.user_id->attrib_data )
- rmd160_hash_buffer( namehash,
- node->pkt->pkt.user_id->attrib_data,
- node->pkt->pkt.user_id->attrib_len);
- else
- rmd160_hash_buffer( namehash,
- node->pkt->pkt.user_id->name,
- node->pkt->pkt.user_id->len );
- trustletter = get_validity_info( pk, namehash );
- }
- else
- trustletter = 'u';
- printf("%s:%c::::::::",str,trustletter);
- }
- }
- if(node->pkt->pkt.user_id->attrib_data)
- printf("%u %lu",
- node->pkt->pkt.user_id->numattribs,
- node->pkt->pkt.user_id->attrib_len);
- else
- print_string( stdout, node->pkt->pkt.user_id->name,
- node->pkt->pkt.user_id->len, ':' );
- putchar(':');
- if (any)
- putchar('\n');
- else {
- putchar(':');
- print_capabilities (pk, sk, keyblock);
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 );
- if( opt.with_key_data )
- print_key_data( pk, keyid );
- any = 1;
- }
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- u32 keyid2[2];
- PKT_public_key *pk2 = node->pkt->pkt.public_key;
-
- if( !any ) {
- putchar(':');
- putchar(':');
- print_capabilities (pk, sk, keyblock);
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 ); /* of the main key */
- any = 1;
- }
-
- keyid_from_pk( pk2, keyid2 );
- fputs ("sub:", stdout );
- if ( !pk2->is_valid )
- putchar ('i');
- else if ( pk2->is_revoked )
- putchar ('r');
- else if ( pk2->has_expired )
- putchar ('e');
- else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
- ;
- else {
- printf("%c", trustletter );
- }
- printf(":%u:%d:%08lX%08lX:%s:%s:",
- nbits_from_pk( pk2 ),
- pk2->pubkey_algo,
- (ulong)keyid2[0],(ulong)keyid2[1],
- colon_datestr_from_pk( pk2 ),
- colon_strtime (pk2->expiredate)
- /* fixme: add LID and ownertrust here */
- );
- if( pk->local_id ) /* use the local_id of the main key??? */
- printf("%lu", pk->local_id );
- putchar(':');
- putchar(':');
- putchar(':');
- putchar(':');
- print_capabilities (pk2, NULL, NULL);
- putchar('\n');
- if( fpr > 1 )
- print_fingerprint( pk2, NULL, 0 );
- if( opt.with_key_data )
- print_key_data( pk2, keyid2 );
- }
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- u32 keyid2[2];
- PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
-
- if( !any ) {
- putchar(':');
- putchar(':');
- print_capabilities (pk, sk, keyblock);
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 ); /* of the main key */
- any = 1;
- }
-
- keyid_from_sk( sk2, keyid2 );
- printf("ssb::%u:%d:%08lX%08lX:%s:%s:::::",
- nbits_from_sk( sk2 ),
- sk2->pubkey_algo,
- (ulong)keyid2[0],(ulong)keyid2[1],
- colon_datestr_from_sk( sk2 ),
- colon_strtime (sk2->expiredate)
- /* fixme: add LID */ );
- print_capabilities (NULL, sk2, NULL);
- putchar ('\n');
- if( fpr > 1 )
- print_fingerprint( NULL, sk2, 0 );
- }
- else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- int sigrc;
- char *sigstr;
-
- if( !any ) { /* no user id, (maybe a revocation follows)*/
- if( sig->sig_class == 0x20 )
- fputs("[revoked]:", stdout);
- else if( sig->sig_class == 0x18 )
- fputs("[key binding]:", stdout);
- else if( sig->sig_class == 0x28 )
- fputs("[subkey revoked]:", stdout);
- else
- putchar (':');
- putchar(':');
- print_capabilities (pk, sk, keyblock);
- putchar('\n');
- if( fpr )
- print_fingerprint( pk, sk, 0 );
- any=1;
- }
-
- if( sig->sig_class == 0x20 || sig->sig_class == 0x28
- || sig->sig_class == 0x30 )
- sigstr = "rev";
- else if( (sig->sig_class&~3) == 0x10 )
- sigstr = "sig";
- else if( sig->sig_class == 0x18 )
- sigstr = "sig";
- else if( sig->sig_class == 0x1F )
- sigstr = "sig";
- else {
- printf ("sig::::::::::%02x%c:\n",
- sig->sig_class, sig->flags.exportable?'x':'l');
- continue;
- }
- if( opt.check_sigs ) {
- fflush(stdout);
- rc = check_key_signature( keyblock, node, NULL );
- switch( rc ) {
- case 0: sigrc = '!'; break;
- case G10ERR_BAD_SIGN: sigrc = '-'; break;
- case G10ERR_NO_PUBKEY:
- case G10ERR_UNU_PUBKEY: sigrc = '?'; break;
- default: sigrc = '%'; break;
- }
- }
- else {
- rc = 0;
- sigrc = ' ';
- }
- fputs( sigstr, stdout );
- putchar(':');
- if( sigrc != ' ' )
- putchar(sigrc);
- printf("::%d:%08lX%08lX:%s:%s:::", sig->pubkey_algo,
- (ulong)sig->keyid[0],
- (ulong)sig->keyid[1], colon_datestr_from_sig(sig),
- colon_expirestr_from_sig(sig));
- if( sigrc == '%' )
- printf("[%s] ", g10_errstr(rc) );
- else if( sigrc == '?' )
- ;
- else if ( !opt.fast_list_mode ) {
- size_t n;
- char *p = get_user_id( sig->keyid, &n );
- print_string( stdout, p, n, ':' );
- m_free(p);
- }
- printf(":%02x%c:\n", sig->sig_class,sig->flags.exportable?'x':'l');
- /* fixme: check or list other sigs here */
- }
- }
- if( !any ) {/* oops, no user id */
- putchar(':');
- putchar(':');
- print_capabilities (pk, sk, keyblock);
- putchar('\n');
- }
-}
-
-/*
- * Reorder the keyblock so that the primary user ID (and not attribute
- * packet) comes first. Fixme: Replace this by a generic sort
- * function. */
-static void
-reorder_keyblock (KBNODE keyblock)
-{
- KBNODE primary = NULL, primary0 = NULL, primary2 = NULL;
- KBNODE last, node;
-
- for (node=keyblock; node; primary0=node, node = node->next) {
- if( node->pkt->pkttype == PKT_USER_ID &&
- !node->pkt->pkt.user_id->attrib_data &&
- node->pkt->pkt.user_id->is_primary ) {
- primary = primary2 = node;
- for (node=node->next; node; primary2=node, node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- break;
- }
- }
- break;
- }
- }
- if ( !primary )
- return; /* no primary key flag found (should not happen) */
-
- for (last=NULL, node=keyblock; node; last = node, node = node->next) {
- if( node->pkt->pkttype == PKT_USER_ID )
- break;
- }
- assert (node);
- assert (last); /* the user ID is never the first packet */
- assert (primary0); /* ditto (this is the node before primary) */
- if ( node == primary )
- return; /* already the first one */
-
- last->next = primary;
- primary0->next = primary2->next;
- primary2->next = node;
-}
-
-void
-list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque )
-{
- reorder_keyblock (keyblock);
- if (opt.with_colons)
- list_keyblock_colon (keyblock, secret, fpr );
- else
- list_keyblock_print (keyblock, secret, fpr, opaque );
-}
-
-/*
- * standard function to print the finperprint.
- * mode 0: as used in key listings, opt.with_colons is honored
- * 1: print using log_info ()
- * 2: direct use of tty
- * 3: direct use of tty but only primary key.
- * modes 1 and 2 will try and print both subkey and primary key fingerprints
- */
-void
-print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode )
-{
- byte array[MAX_FINGERPRINT_LEN], *p;
- size_t i, n;
- FILE *fp;
- const char *text;
- int primary=0;
-
- if(sk)
- {
- if(sk->main_keyid[0]==sk->keyid[0] && sk->main_keyid[1]==sk->keyid[1])
- primary=1;
- }
- else
- {
- if(pk->main_keyid[0]==pk->keyid[0] && pk->main_keyid[1]==pk->keyid[1])
- primary=1;
- }
-
- /* Just to be safe */
- if(mode&0x80 && !primary)
- {
- log_error("primary key is not really primary!\n");
- return;
- }
-
- mode&=~0x80;
-
- if(!primary && (mode==1 || mode==2))
- {
- if(sk)
- {
- PKT_secret_key *primary_sk=m_alloc_clear(sizeof(*primary_sk));
- get_seckey(primary_sk,sk->main_keyid);
- print_fingerprint(NULL,primary_sk,mode|0x80);
- free_secret_key(primary_sk);
- }
- else
- {
- PKT_public_key *primary_pk=m_alloc_clear(sizeof(*primary_pk));
- get_pubkey(primary_pk,pk->main_keyid);
- print_fingerprint(primary_pk,NULL,mode|0x80);
- free_public_key(primary_pk);
- }
- }
-
- if (mode == 1) {
- fp = log_stream ();
- if(primary)
- text = _("Primary key fingerprint:");
- else
- text = _(" Subkey fingerprint:");
- }
- else if (mode == 2) {
- fp = NULL; /* use tty */
- /* Translators: this should fit into 24 bytes to that the fingerprint
- * data is properly aligned with the user ID */
- if(primary)
- text = _(" Primary key fingerprint:");
- else
- text = _(" Subkey fingerprint:");
- }
- else if (mode == 3) {
- fp = NULL; /* use tty */
- text = _(" Key fingerprint =");
- }
- else {
- fp = stdout;
- text = _(" Key fingerprint =");
- }
-
- if (sk)
- fingerprint_from_sk (sk, array, &n);
- else
- fingerprint_from_pk (pk, array, &n);
- p = array;
- if (opt.with_colons && !mode) {
- fprintf (fp, "fpr:::::::::");
- for (i=0; i < n ; i++, p++ )
- fprintf (fp, "%02X", *p );
- putc(':', fp);
- }
- else {
- if (fp)
- fputs (text, fp);
- else
- tty_printf ("%s", text);
- if (n == 20) {
- for (i=0; i < n ; i++, i++, p += 2 ) {
- if (fp) {
- if (i == 10 )
- putc(' ', fp);
- fprintf (fp, " %02X%02X", *p, p[1] );
- }
- else {
- if (i == 10 )
- tty_printf (" ");
- tty_printf (" %02X%02X", *p, p[1]);
- }
- }
- }
- else {
- for (i=0; i < n ; i++, p++ ) {
- if (fp) {
- if (i && !(i%8) )
- putc (' ', fp);
- fprintf (fp, " %02X", *p );
- }
- else {
- if (i && !(i%8) )
- tty_printf (" ");
- tty_printf (" %02X", *p );
- }
- }
- }
- }
- if (fp)
- putc ('\n', fp);
- else
- tty_printf ("\n");
-}
-
-void set_attrib_fd(int fd)
-{
- static int last_fd=-1;
-
- if ( fd != -1 && last_fd == fd )
- return;
-
- if ( attrib_fp && attrib_fp != stdout && attrib_fp != stderr )
- fclose (attrib_fp);
- attrib_fp = NULL;
- if ( fd == -1 )
- return;
-
- if( fd == 1 )
- attrib_fp = stdout;
- else if( fd == 2 )
- attrib_fp = stderr;
- else
- attrib_fp = fdopen( fd, "w" );
- if( !attrib_fp ) {
- log_fatal("can't open fd %d for attribute output: %s\n",
- fd, strerror(errno));
- }
- last_fd = fd;
-}
diff --git a/g10/keyring.c b/g10/keyring.c
deleted file mode 100644
index 3160b1c37..000000000
--- a/g10/keyring.c
+++ /dev/null
@@ -1,1558 +0,0 @@
-/* keyring.c - keyring file handling
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "util.h"
-#include "keyring.h"
-#include "packet.h"
-#include "keydb.h"
-#include "options.h"
-#include "main.h" /*for check_key_signature()*/
-#include "i18n.h"
-
-/* off_item is a funny named for an object used to keep track of known
- * keys. The idea was to use the offset to seek to the known keyblock, but
- * this is not possible if more than one process is using the keyring.
- */
-struct off_item {
- struct off_item *next;
- u32 kid[2];
- /*off_t off;*/
-};
-
-typedef struct off_item **OffsetHashTable;
-
-
-typedef struct keyring_name *KR_NAME;
-struct keyring_name {
- struct keyring_name *next;
- int secret;
- DOTLOCK lockhd;
- int is_locked;
- int did_full_scan;
- char fname[1];
-};
-typedef struct keyring_name const * CONST_KR_NAME;
-
-static KR_NAME kr_names;
-static int active_handles;
-
-static OffsetHashTable kr_offtbl;
-static int kr_offtbl_ready;
-
-
-struct keyring_handle {
- CONST_KR_NAME resource;
- int secret; /* this is for a secret keyring */
- struct {
- CONST_KR_NAME kr;
- IOBUF iobuf;
- int eof;
- int error;
- } current;
- struct {
- CONST_KR_NAME kr;
- off_t offset;
- size_t pk_no;
- size_t uid_no;
- unsigned int n_packets; /*used for delete and update*/
- } found;
- struct {
- char *name;
- char *pattern;
- } word_match;
-};
-
-
-
-static int do_copy (int mode, const char *fname, KBNODE root, int secret,
- off_t start_offset, unsigned int n_packets );
-
-
-
-static struct off_item *
-new_offset_item (void)
-{
- struct off_item *k;
-
- k = m_alloc_clear (sizeof *k);
- return k;
-}
-
-#if 0
-static void
-release_offset_items (struct off_item *k)
-{
- struct off_item *k2;
-
- for (; k; k = k2)
- {
- k2 = k->next;
- m_free (k);
- }
-}
-#endif
-
-static OffsetHashTable
-new_offset_hash_table (void)
-{
- struct off_item **tbl;
-
- tbl = m_alloc_clear (2048 * sizeof *tbl);
- return tbl;
-}
-
-#if 0
-static void
-release_offset_hash_table (OffsetHashTable tbl)
-{
- int i;
-
- if (!tbl)
- return;
- for (i=0; i < 2048; i++)
- release_offset_items (tbl[i]);
- m_free (tbl);
-}
-#endif
-
-static struct off_item *
-lookup_offset_hash_table (OffsetHashTable tbl, u32 *kid)
-{
- struct off_item *k;
-
- for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next)
- if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
- return k;
- return NULL;
-}
-
-static void
-update_offset_hash_table (OffsetHashTable tbl, u32 *kid, off_t off)
-{
- struct off_item *k;
-
- for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next)
- {
- if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
- {
- /*k->off = off;*/
- return;
- }
- }
-
- k = new_offset_item ();
- k->kid[0] = kid[0];
- k->kid[1] = kid[1];
- /*k->off = off;*/
- k->next = tbl[(kid[1] & 0x07ff)];
- tbl[(kid[1] & 0x07ff)] = k;
-}
-
-static void
-update_offset_hash_table_from_kb (OffsetHashTable tbl, KBNODE node, off_t off)
-{
- for (; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- {
- u32 aki[2];
- keyid_from_pk (node->pkt->pkt.public_key, aki);
- update_offset_hash_table (tbl, aki, off);
- }
- }
-}
-
-
-
-
-/*
- * Register a filename for plain keyring files. Returns a pointer to
- * be used to create a handles etc or NULL to indicate that it has
- * already been registered */
-void *
-keyring_register_filename (const char *fname, int secret)
-{
- KR_NAME kr;
-
- if (active_handles)
- BUG (); /* We don't allow that */
-
- for (kr=kr_names; kr; kr = kr->next) {
- if ( !compare_filenames (kr->fname, fname) )
- return NULL; /* already registered */
- }
-
- kr = m_alloc (sizeof *kr + strlen (fname));
- strcpy (kr->fname, fname);
- kr->secret = !!secret;
- kr->lockhd = NULL;
- kr->is_locked = 0;
- kr->did_full_scan = 0;
- /* keep a list of all issued pointers */
- kr->next = kr_names;
- kr_names = kr;
-
- /* create the offset table the first time a function here is used */
- if (!kr_offtbl)
- kr_offtbl = new_offset_hash_table ();
-
- return kr;
-}
-
-int
-keyring_is_writable (void *token)
-{
- KR_NAME r = token;
-
- return r? !access (r->fname, W_OK) : 0;
-}
-
-
-
-/* Create a new handle for the resource associated with TOKEN. SECRET
- is just just as a cross-check.
-
- The returned handle must be released using keyring_release (). */
-KEYRING_HANDLE
-keyring_new (void *token, int secret)
-{
- KEYRING_HANDLE hd;
- KR_NAME resource = token;
-
- assert (resource && !resource->secret == !secret);
-
- hd = m_alloc_clear (sizeof *hd);
- hd->resource = resource;
- hd->secret = !!secret;
- active_handles++;
- return hd;
-}
-
-void
-keyring_release (KEYRING_HANDLE hd)
-{
- if (!hd)
- return;
- assert (active_handles > 0);
- active_handles--;
- m_free (hd->word_match.name);
- m_free (hd->word_match.pattern);
- iobuf_close (hd->current.iobuf);
- m_free (hd);
-}
-
-
-const char *
-keyring_get_resource_name (KEYRING_HANDLE hd)
-{
- if (!hd || !hd->resource)
- return NULL;
- return hd->resource->fname;
-}
-
-
-/*
- * Lock the keyring with the given handle, or unlok if yes is false.
- * We ignore the handle and lock all registered files.
- */
-int
-keyring_lock (KEYRING_HANDLE hd, int yes)
-{
- KR_NAME kr;
- int rc = 0;
-
- if (yes) {
- /* first make sure the lock handles are created */
- for (kr=kr_names; kr; kr = kr->next) {
- if (!keyring_is_writable(kr))
- continue;
- if (!kr->lockhd) {
- kr->lockhd = create_dotlock( kr->fname );
- if (!kr->lockhd) {
- log_info ("can't allocate lock for `%s'\n", kr->fname );
- rc = G10ERR_GENERAL;
- }
- }
- }
- if (rc)
- return rc;
-
- /* and now set the locks */
- for (kr=kr_names; kr; kr = kr->next) {
- if (!keyring_is_writable(kr))
- continue;
- if (kr->is_locked)
- ;
- else if (make_dotlock (kr->lockhd, -1) ) {
- log_info ("can't lock `%s'\n", kr->fname );
- rc = G10ERR_GENERAL;
- }
- else
- kr->is_locked = 1;
- }
- }
-
- if (rc || !yes) {
- for (kr=kr_names; kr; kr = kr->next) {
- if (!keyring_is_writable(kr))
- continue;
- if (!kr->is_locked)
- ;
- else if (release_dotlock (kr->lockhd))
- log_info ("can't unlock `%s'\n", kr->fname );
- else
- kr->is_locked = 0;
- }
- }
-
- return rc;
-}
-
-
-
-/*
- * Return the last found keyring. Caller must free it.
- * The returned keyblock has the kbode flag bit 0 set for the node with
- * the public key used to locate the keyblock or flag bit 1 set for
- * the user ID node.
- */
-int
-keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
-{
- PACKET *pkt;
- int rc;
- KBNODE keyblock = NULL, node, lastnode;
- IOBUF a;
- int in_cert = 0;
- int pk_no = 0;
- int uid_no = 0;
- int save_mode;
-
- if (ret_kb)
- *ret_kb = NULL;
-
- if (!hd->found.kr)
- return -1; /* no successful search */
-
- a = iobuf_open (hd->found.kr->fname);
- if (!a) {
- log_error ("can't open `%s'\n", hd->found.kr->fname);
- return G10ERR_KEYRING_OPEN;
- }
-
- if (iobuf_seek (a, hd->found.offset) ) {
- log_error ("can't seek `%s'\n", hd->found.kr->fname);
- iobuf_close(a);
- return G10ERR_KEYRING_OPEN;
- }
-
- pkt = m_alloc (sizeof *pkt);
- init_packet (pkt);
- hd->found.n_packets = 0;;
- lastnode = NULL;
- save_mode = set_packet_list_mode(0);
- while ((rc=parse_packet (a, pkt)) != -1) {
- hd->found.n_packets++;
- if (rc == G10ERR_UNKNOWN_PACKET) {
- free_packet (pkt);
- init_packet (pkt);
- continue;
- }
- if (rc) {
- log_error ("keyring_get_keyblock: read error: %s\n",
- g10_errstr(rc) );
- rc = G10ERR_INV_KEYRING;
- break;
- }
- if (pkt->pkttype == PKT_COMPRESSED) {
- log_error ("skipped compressed packet in keyring\n");
- free_packet(pkt);
- init_packet(pkt);
- continue;
- }
-
- if (in_cert && (pkt->pkttype == PKT_PUBLIC_KEY
- || pkt->pkttype == PKT_SECRET_KEY)) {
- hd->found.n_packets--; /* fix counter */
- break; /* ready */
- }
-
- in_cert = 1;
- if (pkt->pkttype == PKT_RING_TRUST) {
- /*(this code is duplicated after the loop)*/
- if ( lastnode
- && lastnode->pkt->pkttype == PKT_SIGNATURE
- && (pkt->pkt.ring_trust->sigcache & 1) ) {
- /* this is a ring trust packet with a checked signature
- * status cache following directly a signature paket.
- * Set the cache status into that signature packet */
- PKT_signature *sig = lastnode->pkt->pkt.signature;
-
- sig->flags.checked = 1;
- sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2);
- }
- /* reset lastnode, so that we set the cache status only from
- * the ring trust packet immediately folling a signature */
- lastnode = NULL;
- }
- else {
- node = lastnode = new_kbnode (pkt);
- if (!keyblock)
- keyblock = node;
- else
- add_kbnode (keyblock, node);
-
- if ( pkt->pkttype == PKT_PUBLIC_KEY
- || pkt->pkttype == PKT_PUBLIC_SUBKEY
- || pkt->pkttype == PKT_SECRET_KEY
- || pkt->pkttype == PKT_SECRET_SUBKEY) {
- if (++pk_no == hd->found.pk_no)
- node->flag |= 1;
- }
- else if ( pkt->pkttype == PKT_USER_ID) {
- if (++uid_no == hd->found.uid_no)
- node->flag |= 2;
- }
- }
-
- pkt = m_alloc (sizeof *pkt);
- init_packet(pkt);
- }
- set_packet_list_mode(save_mode);
-
- if (rc == -1 && keyblock)
- rc = 0; /* got the entire keyblock */
-
- if (rc || !ret_kb)
- release_kbnode (keyblock);
- else {
- /*(duplicated form the loop body)*/
- if ( pkt && pkt->pkttype == PKT_RING_TRUST
- && lastnode
- && lastnode->pkt->pkttype == PKT_SIGNATURE
- && (pkt->pkt.ring_trust->sigcache & 1) ) {
- PKT_signature *sig = lastnode->pkt->pkt.signature;
- sig->flags.checked = 1;
- sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2);
- }
- *ret_kb = keyblock;
- }
- free_packet (pkt);
- m_free (pkt);
- iobuf_close(a);
-
- /* Make sure that future search operations fail immediately when
- * we know that we are working on a invalid keyring
- */
- if (rc == G10ERR_INV_KEYRING)
- hd->current.error = rc;
-
- return rc;
-}
-
-int
-keyring_update_keyblock (KEYRING_HANDLE hd, KBNODE kb)
-{
- int rc;
-
- if (!hd->found.kr)
- return -1; /* no successful prior search */
-
- if (!hd->found.n_packets) {
- /* need to know the number of packets - do a dummy get_keyblock*/
- rc = keyring_get_keyblock (hd, NULL);
- if (rc) {
- log_error ("re-reading keyblock failed: %s\n", g10_errstr (rc));
- return rc;
- }
- if (!hd->found.n_packets)
- BUG ();
- }
-
- /* The open iobuf isn't needed anymore and in fact is a problem when
- it comes to renaming the keyring files on some operating systems,
- so close it here */
- iobuf_close(hd->current.iobuf);
- hd->current.iobuf = NULL;
-
- /* do the update */
- rc = do_copy (3, hd->found.kr->fname, kb, hd->secret,
- hd->found.offset, hd->found.n_packets );
- if (!rc) {
- if (!hd->secret && kr_offtbl)
- {
- update_offset_hash_table_from_kb (kr_offtbl, kb, 0);
- }
- /* better reset the found info */
- hd->found.kr = NULL;
- hd->found.offset = 0;
- }
- return rc;
-}
-
-int
-keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb)
-{
- int rc;
- const char *fname;
-
- if (!hd)
- fname = NULL;
- else if (hd->found.kr)
- fname = hd->found.kr->fname;
- else if (hd->current.kr)
- fname = hd->current.kr->fname;
- else
- fname = hd->resource? hd->resource->fname:NULL;
-
- if (!fname)
- return G10ERR_GENERAL;
-
- /* close this one otherwise we will lose the position for
- * a next search. Fixme: it would be better to adjust the position
- * after the write opertions.
- */
- iobuf_close (hd->current.iobuf);
- hd->current.iobuf = NULL;
-
- /* do the insert */
- rc = do_copy (1, fname, kb, hd->secret, 0, 0 );
- if (!rc && !hd->secret && kr_offtbl)
- {
- update_offset_hash_table_from_kb (kr_offtbl, kb, 0);
- }
-
- return rc;
-}
-
-
-int
-keyring_delete_keyblock (KEYRING_HANDLE hd)
-{
- int rc;
-
- if (!hd->found.kr)
- return -1; /* no successful prior search */
-
- if (!hd->found.n_packets) {
- /* need to know the number of packets - do a dummy get_keyblock*/
- rc = keyring_get_keyblock (hd, NULL);
- if (rc) {
- log_error ("re-reading keyblock failed: %s\n", g10_errstr (rc));
- return rc;
- }
- if (!hd->found.n_packets)
- BUG ();
- }
-
- /* close this one otherwise we will lose the position for
- * a next search. Fixme: it would be better to adjust the position
- * after the write opertions.
- */
- iobuf_close (hd->current.iobuf);
- hd->current.iobuf = NULL;
-
- /* do the delete */
- rc = do_copy (2, hd->found.kr->fname, NULL, hd->secret,
- hd->found.offset, hd->found.n_packets );
- if (!rc) {
- /* better reset the found info */
- hd->found.kr = NULL;
- hd->found.offset = 0;
- /* Delete is a rare operations, so we don't remove the keys
- * from the offset table */
- }
- return rc;
-}
-
-
-
-/*
- * Start the next search on this handle right at the beginning
- */
-int
-keyring_search_reset (KEYRING_HANDLE hd)
-{
- assert (hd);
-
- hd->current.kr = NULL;
- iobuf_close (hd->current.iobuf);
- hd->current.iobuf = NULL;
- hd->current.eof = 0;
- hd->current.error = 0;
-
- hd->found.kr = NULL;
- hd->found.offset = 0;
- return 0;
-}
-
-
-static int
-prepare_search (KEYRING_HANDLE hd)
-{
- if (hd->current.error)
- return hd->current.error; /* still in error state */
-
- if (hd->current.kr && !hd->current.eof) {
- if ( !hd->current.iobuf )
- return G10ERR_GENERAL; /* position invalid after a modify */
- return 0; /* okay */
- }
-
- if (!hd->current.kr && hd->current.eof)
- return -1; /* still EOF */
-
- if (!hd->current.kr) { /* start search with first keyring */
- hd->current.kr = hd->resource;
- if (!hd->current.kr) {
- hd->current.eof = 1;
- return -1; /* keyring not available */
- }
- assert (!hd->current.iobuf);
- }
- else { /* EOF */
- iobuf_close (hd->current.iobuf);
- hd->current.iobuf = NULL;
- hd->current.kr = NULL;
- hd->current.eof = 1;
- return -1;
- }
-
- hd->current.eof = 0;
- hd->current.iobuf = iobuf_open (hd->current.kr->fname);
- if (!hd->current.iobuf) {
- log_error ("can't open `%s'\n", hd->current.kr->fname );
- return (hd->current.error = G10ERR_OPEN_FILE);
- }
-
- return 0;
-}
-
-
-/* A map of the all characters valid used for word_match()
- * Valid characters are in in this table converted to uppercase.
- * because the upper 128 bytes have special meaning, we assume
- * that they are all valid.
- * Note: We must use numerical values here in case that this program
- * will be converted to those little blue HAL9000s with their strange
- * EBCDIC character set (user ids are UTF-8).
- * wk 2000-04-13: Hmmm, does this really make sense, given the fact that
- * we can run gpg now on a S/390 running GNU/Linux, where the code
- * translation is done by the device drivers?
- */
-static const byte word_match_chars[256] = {
- /* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 08 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 28 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- /* 38 */ 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 40 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- /* 48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
- /* 50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
- /* 58 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 60 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- /* 68 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
- /* 70 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
- /* 78 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
- /* 88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
- /* 90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
- /* 98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
- /* a0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
- /* a8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
- /* b0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
- /* b8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
- /* c0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
- /* c8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
- /* d0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
- /* d8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
- /* e0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
- /* e8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
- /* f0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- /* f8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-/****************
- * Do a word match (original user id starts with a '+').
- * The pattern is already tokenized to a more suitable format:
- * There are only the real words in it delimited by one space
- * and all converted to uppercase.
- *
- * Returns: 0 if all words match.
- *
- * Note: This algorithm is a straightforward one and not very
- * fast. It works for UTF-8 strings. The uidlen should
- * be removed but due to the fact that old versions of
- * pgp don't use UTF-8 we still use the length; this should
- * be fixed in parse-packet (and replace \0 by some special
- * UTF-8 encoding)
- */
-static int
-word_match( const byte *uid, size_t uidlen, const byte *pattern )
-{
- size_t wlen, n;
- const byte *p;
- const byte *s;
-
- for( s=pattern; *s; ) {
- do {
- /* skip leading delimiters */
- while( uidlen && !word_match_chars[*uid] )
- uid++, uidlen--;
- /* get length of the word */
- n = uidlen; p = uid;
- while( n && word_match_chars[*p] )
- p++, n--;
- wlen = p - uid;
- /* and compare against the current word from pattern */
- for(n=0, p=uid; n < wlen && s[n] != ' ' && s[n] ; n++, p++ ) {
- if( word_match_chars[*p] != s[n] )
- break;
- }
- if( n == wlen && (s[n] == ' ' || !s[n]) )
- break; /* found */
- uid += wlen;
- uidlen -= wlen;
- } while( uidlen );
- if( !uidlen )
- return -1; /* not found */
-
- /* advance to next word in pattern */
- for(; *s != ' ' && *s ; s++ )
- ;
- if( *s )
- s++ ;
- }
- return 0; /* found */
-}
-
-/****************
- * prepare word word_match; that is parse the name and
- * build the pattern.
- * caller has to free the returned pattern
- */
-static char*
-prepare_word_match (const byte *name)
-{
- byte *pattern, *p;
- int c;
-
- /* the original length is always enough for the pattern */
- p = pattern = m_alloc(strlen(name)+1);
- do {
- /* skip leading delimiters */
- while( *name && !word_match_chars[*name] )
- name++;
- /* copy as long as we don't have a delimiter and convert
- * to uppercase.
- * fixme: how can we handle utf8 uppercasing */
- for( ; *name && (c=word_match_chars[*name]); name++ )
- *p++ = c;
- *p++ = ' '; /* append pattern delimiter */
- } while( *name );
- p[-1] = 0; /* replace last pattern delimiter by EOS */
-
- return pattern;
-}
-
-
-
-
-static int
-compare_name (int mode, const char *name, const char *uid, size_t uidlen)
-{
- int i;
- const char *s, *se;
-
- if (mode == KEYDB_SEARCH_MODE_EXACT) {
- for (i=0; name[i] && uidlen; i++, uidlen--)
- if (uid[i] != name[i])
- break;
- if (!uidlen && !name[i])
- return 0; /* found */
- }
- else if (mode == KEYDB_SEARCH_MODE_SUBSTR) {
- if (ascii_memistr( uid, uidlen, name ))
- return 0;
- }
- else if ( mode == KEYDB_SEARCH_MODE_MAIL
- || mode == KEYDB_SEARCH_MODE_MAILSUB
- || mode == KEYDB_SEARCH_MODE_MAILEND) {
- for (i=0, s= uid; i < uidlen && *s != '<'; s++, i++)
- ;
- if (i < uidlen) {
- /* skip opening delim and one char and look for the closing one*/
- s++; i++;
- for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++)
- ;
- if (i < uidlen) {
- i = se - s;
- if (mode == KEYDB_SEARCH_MODE_MAIL) {
- if( strlen(name)-2 == i
- && !ascii_memcasecmp( s, name+1, i) )
- return 0;
- }
- else if (mode == KEYDB_SEARCH_MODE_MAILSUB) {
- if( ascii_memistr( s, i, name ) )
- return 0;
- }
- else { /* email from end */
- /* nyi */
- }
- }
- }
- }
- else if (mode == KEYDB_SEARCH_MODE_WORDS)
- return word_match (uid, uidlen, name);
- else
- BUG();
-
- return -1; /* not found */
-}
-
-
-/*
- * Search through the keyring(s), starting at the current position,
- * for a keyblock which contains one of the keys described in the DESC array.
- */
-int
-keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc)
-{
- int rc;
- PACKET pkt;
- int save_mode;
- off_t offset, main_offset;
- size_t n;
- int need_uid, need_words, need_keyid, need_fpr, any_skip;
- int pk_no, uid_no;
- int initial_skip;
- int use_offtbl;
- PKT_user_id *uid = NULL;
- PKT_public_key *pk = NULL;
- PKT_secret_key *sk = NULL;
-
- /* figure out what information we need */
- need_uid = need_words = need_keyid = need_fpr = any_skip = 0;
- for (n=0; n < ndesc; n++)
- {
- switch (desc[n].mode)
- {
- case KEYDB_SEARCH_MODE_EXACT:
- case KEYDB_SEARCH_MODE_SUBSTR:
- case KEYDB_SEARCH_MODE_MAIL:
- case KEYDB_SEARCH_MODE_MAILSUB:
- case KEYDB_SEARCH_MODE_MAILEND:
- need_uid = 1;
- break;
- case KEYDB_SEARCH_MODE_WORDS:
- need_uid = 1;
- need_words = 1;
- break;
- case KEYDB_SEARCH_MODE_SHORT_KID:
- case KEYDB_SEARCH_MODE_LONG_KID:
- need_keyid = 1;
- break;
- case KEYDB_SEARCH_MODE_FPR16:
- case KEYDB_SEARCH_MODE_FPR20:
- case KEYDB_SEARCH_MODE_FPR:
- need_fpr = 1;
- break;
- case KEYDB_SEARCH_MODE_FIRST:
- /* always restart the search in this mode */
- keyring_search_reset (hd);
- break;
- default: break;
- }
- if (desc[n].skipfnc)
- {
- any_skip = 1;
- need_keyid = 1;
- }
- }
-
- rc = prepare_search (hd);
- if (rc)
- return rc;
-
- use_offtbl = !hd->secret && kr_offtbl;
- if (!use_offtbl)
- ;
- else if (!kr_offtbl_ready)
- need_keyid = 1;
- else if (ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID)
- {
- struct off_item *oi;
-
- oi = lookup_offset_hash_table (kr_offtbl, desc[0].u.kid);
- if (!oi)
- { /* We know that we don't have this key */
- hd->found.kr = NULL;
- hd->current.eof = 1;
- return -1;
- }
- /* We could now create a positive search status and return.
- * However the problem is that another instance of gpg may
- * have changed the keyring so that the offsets are not valid
- * anymore - therefore we don't do it
- */
- }
-
- if (need_words)
- {
- const char *name = NULL;
-
- log_debug ("word search mode does not yet work\n");
- /* FIXME: here is a long standing bug in our function and in addition we
- just use the first search description */
- for (n=0; n < ndesc && !name; n++)
- {
- if (desc[n].mode == KEYDB_SEARCH_MODE_WORDS)
- name = desc[n].u.name;
- }
- assert (name);
- if ( !hd->word_match.name || strcmp (hd->word_match.name, name) )
- {
- /* name changed */
- m_free (hd->word_match.name);
- m_free (hd->word_match.pattern);
- hd->word_match.name = m_strdup (name);
- hd->word_match.pattern = prepare_word_match (name);
- }
- name = hd->word_match.pattern;
- }
-
- init_packet(&pkt);
- save_mode = set_packet_list_mode(0);
-
- hd->found.kr = NULL;
- main_offset = 0;
- pk_no = uid_no = 0;
- initial_skip = 1; /* skip until we see the start of a keyblock */
- while (!(rc=search_packet (hd->current.iobuf, &pkt, &offset, need_uid)))
- {
- byte afp[MAX_FINGERPRINT_LEN];
- size_t an;
- u32 aki[2];
-
- if (pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_SECRET_KEY)
- {
- main_offset = offset;
- pk_no = uid_no = 0;
- initial_skip = 0;
- }
- if (initial_skip)
- {
- free_packet (&pkt);
- continue;
- }
-
- pk = NULL;
- sk = NULL;
- uid = NULL;
- if ( pkt.pkttype == PKT_PUBLIC_KEY
- || pkt.pkttype == PKT_PUBLIC_SUBKEY)
- {
- pk = pkt.pkt.public_key;
- ++pk_no;
-
- if (need_fpr) {
- fingerprint_from_pk (pk, afp, &an);
- while (an < 20) /* fill up to 20 bytes */
- afp[an++] = 0;
- }
- if (need_keyid)
- keyid_from_pk (pk, aki);
-
- if (use_offtbl && !kr_offtbl_ready)
- update_offset_hash_table (kr_offtbl, aki, main_offset);
- }
- else if (pkt.pkttype == PKT_USER_ID)
- {
- uid = pkt.pkt.user_id;
- ++uid_no;
- }
- else if ( pkt.pkttype == PKT_SECRET_KEY
- || pkt.pkttype == PKT_SECRET_SUBKEY)
- {
- sk = pkt.pkt.secret_key;
- ++pk_no;
-
- if (need_fpr) {
- fingerprint_from_sk (sk, afp, &an);
- while (an < 20) /* fill up to 20 bytes */
- afp[an++] = 0;
- }
- if (need_keyid)
- keyid_from_sk (sk, aki);
-
- }
-
- for (n=0; n < ndesc; n++)
- {
- switch (desc[n].mode) {
- case KEYDB_SEARCH_MODE_NONE:
- BUG ();
- break;
- case KEYDB_SEARCH_MODE_EXACT:
- case KEYDB_SEARCH_MODE_SUBSTR:
- case KEYDB_SEARCH_MODE_MAIL:
- case KEYDB_SEARCH_MODE_MAILSUB:
- case KEYDB_SEARCH_MODE_MAILEND:
- case KEYDB_SEARCH_MODE_WORDS:
- if ( uid && !compare_name (desc[n].mode,
- desc[n].u.name,
- uid->name, uid->len))
- goto found;
- break;
-
- case KEYDB_SEARCH_MODE_SHORT_KID:
- if ((pk||sk) && desc[n].u.kid[1] == aki[1])
- goto found;
- break;
- case KEYDB_SEARCH_MODE_LONG_KID:
- if ((pk||sk) && desc[n].u.kid[0] == aki[0]
- && desc[n].u.kid[1] == aki[1])
- goto found;
- break;
- case KEYDB_SEARCH_MODE_FPR16:
- if ((pk||sk) && !memcmp (desc[n].u.fpr, afp, 16))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_FPR20:
- case KEYDB_SEARCH_MODE_FPR:
- if ((pk||sk) && !memcmp (desc[n].u.fpr, afp, 20))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_FIRST:
- if (pk||sk)
- goto found;
- break;
- case KEYDB_SEARCH_MODE_NEXT:
- if (pk||sk)
- goto found;
- break;
- default:
- rc = G10ERR_INV_ARG;
- goto found;
- }
- }
- free_packet (&pkt);
- continue;
- found:
- for (n=any_skip?0:ndesc; n < ndesc; n++)
- {
- if (desc[n].skipfnc
- && desc[n].skipfnc (desc[n].skipfncvalue, aki))
- break;
- }
- if (n == ndesc)
- goto real_found;
- free_packet (&pkt);
- }
- real_found:
- if (!rc)
- {
- hd->found.offset = main_offset;
- hd->found.kr = hd->current.kr;
- hd->found.pk_no = (pk||sk)? pk_no : 0;
- hd->found.uid_no = uid? uid_no : 0;
- }
- else if (rc == -1)
- {
- hd->current.eof = 1;
- /* if we scanned all keyrings, we are sure that
- * all known key IDs are in our offtbl, mark that. */
- if (use_offtbl && !kr_offtbl_ready)
- {
- KR_NAME kr;
-
- /* First set the did_full_scan flag for this keyring (ignore
- secret keyrings) */
- for (kr=kr_names; kr; kr = kr->next)
- {
- if (!kr->secret && hd->resource == kr)
- {
- kr->did_full_scan = 1;
- break;
- }
- }
- /* Then check whether all flags are set and if so, mark the
- offtbl ready */
- for (kr=kr_names; kr; kr = kr->next)
- {
- if (!kr->secret && !kr->did_full_scan)
- break;
- }
- if (!kr)
- kr_offtbl_ready = 1;
- }
- }
- else
- hd->current.error = rc;
-
- free_packet(&pkt);
- set_packet_list_mode(save_mode);
- return rc;
-}
-
-
-static int
-create_tmp_file (const char *template,
- char **r_bakfname, char **r_tmpfname, IOBUF *r_fp)
-{
- char *bakfname, *tmpfname;
- mode_t oldmask;
-
- *r_bakfname = NULL;
- *r_tmpfname = NULL;
-
-# ifdef USE_ONLY_8DOT3
- /* Here is another Windoze bug?:
- * you cant rename("pubring.gpg.tmp", "pubring.gpg");
- * but rename("pubring.gpg.tmp", "pubring.aaa");
- * works. So we replace .gpg by .bak or .tmp
- */
- if (strlen (template) > 4
- && !strcmp (template+strlen(template)-4, EXTSEP_S "gpg") )
- {
- bakfname = m_alloc (strlen (template) + 1);
- strcpy (bakfname, template);
- strcpy (bakfname+strlen(template)-4, EXTSEP_S "bak");
-
- tmpfname = m_alloc (strlen( template ) + 1 );
- strcpy (tmpfname,template);
- strcpy (tmpfname+strlen(template)-4, EXTSEP_S "tmp");
- }
- else
- { /* file does not end with gpg; hmmm */
- bakfname = m_alloc (strlen( template ) + 5);
- strcpy (stpcpy(bakfname, template), EXTSEP_S "bak");
-
- tmpfname = m_alloc (strlen( template ) + 5);
- strcpy (stpcpy(tmpfname, template), EXTSEP_S "tmp");
- }
-# else /* Posix file names */
- bakfname = m_alloc (strlen( template ) + 2);
- strcpy (stpcpy (bakfname,template),"~");
-
- tmpfname = m_alloc (strlen( template ) + 5);
- strcpy (stpcpy(tmpfname,template), EXTSEP_S "tmp");
-# endif /* Posix filename */
-
- /* Create the temp file with limited access */
- oldmask=umask(077);
- *r_fp = iobuf_create (tmpfname);
- umask(oldmask);
- if (!*r_fp) {
- log_error ("can't create `%s': %s\n", tmpfname, strerror(errno) );
- m_free (tmpfname);
- m_free (bakfname);
- return G10ERR_OPEN_FILE;
- }
-
- *r_bakfname = bakfname;
- *r_tmpfname = tmpfname;
- return 0;
-}
-
-
-static int
-rename_tmp_file (const char *bakfname, const char *tmpfname,
- const char *fname, int secret )
-{
- int rc=0;
-
- /* invalidate close caches*/
- iobuf_ioctl (NULL, 2, 0, (char*)tmpfname );
- iobuf_ioctl (NULL, 2, 0, (char*)bakfname );
- iobuf_ioctl (NULL, 2, 0, (char*)fname );
-
- /* first make a backup file except for secret keyrings */
- if (!secret)
- {
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- remove (bakfname);
-#endif
- if (rename (fname, bakfname) )
- {
- log_error ("renaming `%s' to `%s' failed: %s\n",
- fname, bakfname, strerror(errno) );
- return G10ERR_RENAME_FILE;
- }
- }
-
- /* then rename the file */
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- remove( fname );
-#endif
- if (rename (tmpfname, fname) )
- {
- log_error ("renaming `%s' to `%s' failed: %s\n",
- tmpfname, fname, strerror(errno) );
- rc = G10ERR_RENAME_FILE;
- if (secret)
- {
- log_info(_("WARNING: 2 files with confidential"
- " information exists.\n"));
- log_info(_("%s is the unchanged one\n"), fname );
- log_info(_("%s is the new one\n"), tmpfname );
- log_info(_("Please fix this possible security flaw\n"));
- }
- return rc;
- }
-
- /* Now make sure the file has the same permissions as the original */
-
-#ifndef HAVE_DOSISH_SYSTEM
- {
- struct stat statbuf;
-
- statbuf.st_mode=S_IRUSR | S_IWUSR;
-
- if(((secret && !opt.preserve_permissions) ||
- (stat(bakfname,&statbuf)==0)) &&
- (chmod(fname,statbuf.st_mode)==0))
- ;
- else
- log_error("WARNING: unable to restore permissions to `%s': %s",
- fname,strerror(errno));
- }
-#endif
-
- return 0;
-}
-
-
-static int
-write_keyblock (IOBUF fp, KBNODE keyblock)
-{
- KBNODE kbctx = NULL, node;
- int rc;
-
- while ( (node = walk_kbnode (keyblock, &kbctx, 0)) )
- {
- if (node->pkt->pkttype == PKT_RING_TRUST)
- continue; /* we write it later on our own */
-
- if ( (rc = build_packet (fp, node->pkt) ))
- {
- log_error ("build_packet(%d) failed: %s\n",
- node->pkt->pkttype, g10_errstr(rc) );
- return rc;
- }
- if (node->pkt->pkttype == PKT_SIGNATURE)
- { /* always write a signature cache packet */
- PKT_signature *sig = node->pkt->pkt.signature;
- unsigned int cacheval = 0;
-
- if (sig->flags.checked)
- {
- cacheval |= 1;
- if (sig->flags.valid)
- cacheval |= 2;
- }
- iobuf_put (fp, 0xb0); /* old style packet 12, 1 byte len*/
- iobuf_put (fp, 2); /* 2 bytes */
- iobuf_put (fp, 0); /* unused */
- if (iobuf_put (fp, cacheval)) {
- log_error ("writing sigcache packet failed\n");
- return G10ERR_WRITE_FILE;
- }
- }
- }
- return 0;
-}
-
-/*
- * Walk over all public keyrings, check the signatures and replace the
- * keyring with a new one where the signature cache is then updated.
- * This is only done for the public keyrings.
- */
-int
-keyring_rebuild_cache (void *token)
-{
- KEYRING_HANDLE hd;
- KEYDB_SEARCH_DESC desc;
- KBNODE keyblock = NULL, node;
- const char *lastresname = NULL, *resname;
- IOBUF tmpfp = NULL;
- char *tmpfilename = NULL;
- char *bakfilename = NULL;
- int rc;
- ulong count = 0, sigcount = 0;
-
- hd = keyring_new (token, 0);
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FIRST;
-
- while ( !(rc = keyring_search (hd, &desc, 1)) )
- {
- desc.mode = KEYDB_SEARCH_MODE_NEXT;
- resname = keyring_get_resource_name (hd);
- if (lastresname != resname )
- { /* we have switched to a new keyring - commit changes */
- if (tmpfp)
- {
- if (iobuf_close (tmpfp))
- {
- log_error ("error closing `%s': %s\n",
- tmpfilename, strerror (errno));
- rc = G10ERR_CLOSE_FILE;
- goto leave;
- }
- /* because we have switched resources, we can be sure that
- * the original file is closed */
- tmpfp = NULL;
- }
- rc = lastresname? rename_tmp_file (bakfilename, tmpfilename,
- lastresname, 0) : 0;
- m_free (tmpfilename); tmpfilename = NULL;
- m_free (bakfilename); bakfilename = NULL;
- if (rc)
- goto leave;
- lastresname = resname;
- if (!opt.quiet)
- log_info (_("checking keyring `%s'\n"), resname);
- rc = create_tmp_file (resname, &bakfilename, &tmpfilename, &tmpfp);
- if (rc)
- goto leave;
- }
-
- release_kbnode (keyblock);
- rc = keyring_get_keyblock (hd, &keyblock);
- if (rc)
- {
- log_error ("keyring_get_keyblock failed: %s\n", g10_errstr(rc));
- goto leave;
- }
- assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY);
-
- /* check all signature to set the signature's cache flags */
- for (node=keyblock; node; node=node->next)
- {
- if (node->pkt->pkttype == PKT_SIGNATURE)
- {
- check_key_signature (keyblock, node, NULL);
- sigcount++;
- }
- }
-
- /* write the keyblock to the temporary file */
- rc = write_keyblock (tmpfp, keyblock);
- if (rc)
- goto leave;
-
- if ( !(++count % 50) && !opt.quiet)
- log_info(_("%lu keys checked so far (%lu signatures)\n"),
- count, sigcount );
-
- } /* end main loop */
- if (rc == -1)
- rc = 0;
- if (rc)
- {
- log_error ("keyring_search failed: %s\n", g10_errstr(rc));
- goto leave;
- }
- log_info(_("%lu keys checked (%lu signatures)\n"), count, sigcount );
- if (tmpfp)
- {
- if (iobuf_close (tmpfp))
- {
- log_error ("error closing `%s': %s\n",
- tmpfilename, strerror (errno));
- rc = G10ERR_CLOSE_FILE;
- goto leave;
- }
- /* because we have switched resources, we can be sure that
- * the original file is closed */
- tmpfp = NULL;
- }
- rc = lastresname? rename_tmp_file (bakfilename, tmpfilename,
- lastresname, 0) : 0;
- m_free (tmpfilename); tmpfilename = NULL;
- m_free (bakfilename); bakfilename = NULL;
-
- leave:
- if (tmpfp)
- iobuf_cancel (tmpfp);
- m_free (tmpfilename);
- m_free (bakfilename);
- release_kbnode (keyblock);
- keyring_release (hd);
- return rc;
-}
-
-
-/****************
- * Perform insert/delete/update operation.
- * mode 1 = insert
- * 2 = delete
- * 3 = update
- */
-static int
-do_copy (int mode, const char *fname, KBNODE root, int secret,
- off_t start_offset, unsigned int n_packets )
-{
- IOBUF fp, newfp;
- int rc=0;
- char *bakfname = NULL;
- char *tmpfname = NULL;
-
- /* Open the source file. Because we do a rname, we have to check the
- permissions of the file */
- if (access (fname, W_OK))
- return G10ERR_WRITE_FILE;
-
- fp = iobuf_open (fname);
- if (mode == 1 && !fp && errno == ENOENT) {
- /* insert mode but file does not exist: create a new file */
- KBNODE kbctx, node;
- mode_t oldmask;
-
- oldmask=umask(077);
- newfp = iobuf_create (fname);
- umask(oldmask);
- if( !newfp ) {
- log_error (_("%s: can't create: %s\n"),
- fname, strerror(errno));
- return G10ERR_OPEN_FILE;
- }
- if( !opt.quiet )
- log_info(_("%s: keyring created\n"), fname );
-
- kbctx=NULL;
- while ( (node = walk_kbnode( root, &kbctx, 0 )) ) {
- if( (rc = build_packet( newfp, node->pkt )) ) {
- log_error("build_packet(%d) failed: %s\n",
- node->pkt->pkttype, g10_errstr(rc) );
- iobuf_cancel(newfp);
- return G10ERR_WRITE_FILE;
- }
- }
- if( iobuf_close(newfp) ) {
- log_error ("%s: close failed: %s\n", fname, strerror(errno));
- return G10ERR_CLOSE_FILE;
- }
- return 0; /* ready */
- }
-
- if( !fp ) {
- log_error ("%s: can't open: %s\n", fname, strerror(errno) );
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
-
- /* create the new file */
- rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
- if (rc) {
- iobuf_close(fp);
- goto leave;
- }
- if( mode == 1 ) { /* insert */
- /* copy everything to the new file */
- rc = copy_all_packets (fp, newfp);
- if( rc != -1 ) {
- log_error("%s: copy to `%s' failed: %s\n",
- fname, tmpfname, g10_errstr(rc) );
- iobuf_close(fp);
- iobuf_cancel(newfp);
- goto leave;
- }
- rc = 0;
- }
-
- if( mode == 2 || mode == 3 ) { /* delete or update */
- /* copy first part to the new file */
- rc = copy_some_packets( fp, newfp, start_offset );
- if( rc ) { /* should never get EOF here */
- log_error ("%s: copy to `%s' failed: %s\n",
- fname, tmpfname, g10_errstr(rc) );
- iobuf_close(fp);
- iobuf_cancel(newfp);
- goto leave;
- }
- /* skip this keyblock */
- assert( n_packets );
- rc = skip_some_packets( fp, n_packets );
- if( rc ) {
- log_error("%s: skipping %u packets failed: %s\n",
- fname, n_packets, g10_errstr(rc));
- iobuf_close(fp);
- iobuf_cancel(newfp);
- goto leave;
- }
- }
-
- if( mode == 1 || mode == 3 ) { /* insert or update */
- rc = write_keyblock (newfp, root);
- if (rc) {
- iobuf_close(fp);
- iobuf_cancel(newfp);
- goto leave;
- }
- }
-
- if( mode == 2 || mode == 3 ) { /* delete or update */
- /* copy the rest */
- rc = copy_all_packets( fp, newfp );
- if( rc != -1 ) {
- log_error("%s: copy to `%s' failed: %s\n",
- fname, tmpfname, g10_errstr(rc) );
- iobuf_close(fp);
- iobuf_cancel(newfp);
- goto leave;
- }
- rc = 0;
- }
-
- /* close both files */
- if( iobuf_close(fp) ) {
- log_error("%s: close failed: %s\n", fname, strerror(errno) );
- rc = G10ERR_CLOSE_FILE;
- goto leave;
- }
- if( iobuf_close(newfp) ) {
- log_error("%s: close failed: %s\n", tmpfname, strerror(errno) );
- rc = G10ERR_CLOSE_FILE;
- goto leave;
- }
-
- rc = rename_tmp_file (bakfname, tmpfname, fname, secret);
-
- leave:
- m_free(bakfname);
- m_free(tmpfname);
- return rc;
-}
diff --git a/g10/keyring.h b/g10/keyring.h
deleted file mode 100644
index cb8e404a4..000000000
--- a/g10/keyring.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* keyring.h - Keyring operations
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 GPG_KEYRING_H
-#define GPG_KEYRING_H 1
-
-#include "global.h"
-
-
-typedef struct keyring_handle *KEYRING_HANDLE;
-
-void *keyring_register_filename (const char *fname, int secret);
-int keyring_is_writable (void *token);
-
-KEYRING_HANDLE keyring_new (void *token, int secret);
-void keyring_release (KEYRING_HANDLE hd);
-const char *keyring_get_resource_name (KEYRING_HANDLE hd);
-int keyring_lock (KEYRING_HANDLE hd, int yes);
-int keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb);
-int keyring_update_keyblock (KEYRING_HANDLE hd, KBNODE kb);
-int keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb);
-int keyring_locate_writable (KEYRING_HANDLE hd);
-int keyring_delete_keyblock (KEYRING_HANDLE hd);
-int keyring_search_reset (KEYRING_HANDLE hd);
-int keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc);
-int keyring_rebuild_cache (void *);
-
-#endif /*GPG_KEYRING_H*/
diff --git a/g10/keyserver.c b/g10/keyserver.c
deleted file mode 100644
index 59d67e32d..000000000
--- a/g10/keyserver.c
+++ /dev/null
@@ -1,1264 +0,0 @@
-/* keyserver.c - generic keyserver code
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "filter.h"
-#include "keydb.h"
-#include "status.h"
-#include "exec.h"
-#include "main.h"
-#include "i18n.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "ttyio.h"
-#include "options.h"
-#include "packet.h"
-#include "keyserver-internal.h"
-#include "util.h"
-
-#define GET 0
-#define SEND 1
-#define SEARCH 2
-
-struct keyrec
-{
- KEYDB_SEARCH_DESC desc;
- time_t createtime,expiretime;
- int size,flags;
- byte type;
- IOBUF uidbuf;
- int lines;
-};
-
-struct kopts
-{
- char *name;
- int tell; /* tell remote process about this one */
- int *flag;
-} keyserver_opts[]=
-{
- {"include-revoked",1,&opt.keyserver_options.include_revoked},
- {"include-disabled",1,&opt.keyserver_options.include_disabled},
- {"include-subkeys",1,&opt.keyserver_options.include_subkeys},
- {"keep-temp-files",0,&opt.keyserver_options.keep_temp_files},
- {"honor-http-proxy",1,&opt.keyserver_options.honor_http_proxy},
- {"broken-http-proxy",1,&opt.keyserver_options.broken_http_proxy},
- {"refresh-add-fake-v3-keyids",0,&opt.keyserver_options.fake_v3_keyids},
- {"auto-key-retrieve",0,&opt.keyserver_options.auto_key_retrieve},
- {NULL}
-};
-
-static int keyserver_work(int action,STRLIST list,
- KEYDB_SEARCH_DESC *desc,int count);
-
-void
-parse_keyserver_options(char *options)
-{
- char *tok;
-
- while((tok=strsep(&options," ,")))
- {
- int i,hit=0;
-
- if(tok[0]=='\0')
- continue;
-
- for(i=0;keyserver_opts[i].name;i++)
- {
- if(ascii_strcasecmp(tok,keyserver_opts[i].name)==0)
- {
- *(keyserver_opts[i].flag)=1;
- hit=1;
- break;
- }
- else if(ascii_strncasecmp("no-",tok,3)==0 &&
- ascii_strcasecmp(&tok[3],keyserver_opts[i].name)==0)
- {
- *(keyserver_opts[i].flag)=0;
- hit=1;
- break;
- }
- }
-
- /* These options need more than just a flag */
- if(!hit)
- {
- if(ascii_strcasecmp(tok,"verbose")==0)
- opt.keyserver_options.verbose++;
- else if(ascii_strcasecmp(tok,"no-verbose")==0)
- opt.keyserver_options.verbose--;
-#ifdef EXEC_TEMPFILE_ONLY
- else if(ascii_strcasecmp(tok,"use-temp-files")==0 ||
- ascii_strcasecmp(tok,"no-use-temp-files")==0)
- log_info(_("WARNING: keyserver option \"%s\" is not used "
- "on this platform\n"),tok);
-#else
- else if(ascii_strcasecmp(tok,"use-temp-files")==0)
- opt.keyserver_options.use_temp_files=1;
- else if(ascii_strcasecmp(tok,"no-use-temp-files")==0)
- opt.keyserver_options.use_temp_files=0;
-#endif
- else
- if(!parse_import_options(tok,
- &opt.keyserver_options.import_options) &&
- !parse_export_options(tok,
- &opt.keyserver_options.export_options))
- add_to_strlist(&opt.keyserver_options.other,tok);
- }
- }
-}
-
-int
-parse_keyserver_uri(char *uri,const char *configname,unsigned int configlineno)
-{
- int assume_hkp=0;
-
- assert(uri!=NULL);
-
- opt.keyserver_host=NULL;
- opt.keyserver_port=NULL;
- opt.keyserver_opaque=NULL;
-
- /* Get the scheme */
-
- opt.keyserver_scheme=strsep(&uri,":");
- if(uri==NULL)
- {
- /* Assume HKP if there is no scheme */
- assume_hkp=1;
- uri=opt.keyserver_scheme;
- opt.keyserver_scheme="hkp";
- }
- else
- {
- /* Force to lowercase */
- char *i;
-
- for(i=opt.keyserver_scheme;*i!='\0';i++)
- *i=ascii_tolower(*i);
- }
-
- if(ascii_strcasecmp(opt.keyserver_scheme,"x-broken-hkp")==0)
- {
- deprecated_warning(configname,configlineno,"x-broken-hkp",
- "--keyserver-options ","broken-http-proxy");
- opt.keyserver_scheme="hkp";
- opt.keyserver_options.broken_http_proxy=1;
- }
- else if(ascii_strcasecmp(opt.keyserver_scheme,"x-hkp")==0)
- {
- /* Canonicalize this to "hkp" so it works with both the internal
- and external keyserver interface. */
- opt.keyserver_scheme="hkp";
- }
-
- if(assume_hkp || (uri[0]=='/' && uri[1]=='/'))
- {
- /* Two slashes means network path. */
-
- /* Skip over the "//", if any */
- if(!assume_hkp)
- uri+=2;
-
- /* Get the host */
- opt.keyserver_host=strsep(&uri,":/");
- if(opt.keyserver_host[0]=='\0')
- return G10ERR_BAD_URI;
-
- if(uri==NULL || uri[0]=='\0')
- opt.keyserver_port=NULL;
- else
- {
- char *ch;
-
- /* Get the port */
- opt.keyserver_port=strsep(&uri,"/");
-
- /* Ports are digits only */
- ch=opt.keyserver_port;
- while(*ch!='\0')
- {
- if(!isdigit(*ch))
- return G10ERR_BAD_URI;
-
- ch++;
- }
- }
-
- /* (any path part of the URI is discarded for now as no keyserver
- uses it yet) */
- }
- else if(uri[0]!='/')
- {
- /* No slash means opaque. Just record the opaque blob and get
- out. */
- opt.keyserver_opaque=uri;
- return 0;
- }
- else
- {
- /* One slash means absolute path. We don't need to support that
- yet. */
- return G10ERR_BAD_URI;
- }
-
- if(opt.keyserver_scheme[0]=='\0')
- return G10ERR_BAD_URI;
-
- return 0;
-}
-
-static void
-print_keyrec(int number,struct keyrec *keyrec)
-{
- int i;
-
- iobuf_writebyte(keyrec->uidbuf,0);
- iobuf_flush_temp(keyrec->uidbuf);
- printf("(%d)\t%s ",number,iobuf_get_temp_buffer(keyrec->uidbuf));
-
- if(keyrec->size>0)
- printf("%d bit ",keyrec->size);
-
- if(keyrec->type)
- {
- const char *str=pubkey_algo_to_string(keyrec->type);
-
- if(str)
- printf("%s ",str);
- else
- printf("unknown ");
- }
-
- switch(keyrec->desc.mode)
- {
- case KEYDB_SEARCH_MODE_SHORT_KID:
- printf("key %08lX",(ulong)keyrec->desc.u.kid[1]);
- break;
-
- case KEYDB_SEARCH_MODE_LONG_KID:
- printf("key %08lX%08lX",(ulong)keyrec->desc.u.kid[0],
- (ulong)keyrec->desc.u.kid[1]);
- break;
-
- case KEYDB_SEARCH_MODE_FPR16:
- printf("key ");
- for(i=0;i<16;i++)
- printf("%02X",(unsigned char)keyrec->desc.u.fpr[i]);
- break;
-
- case KEYDB_SEARCH_MODE_FPR20:
- printf("key ");
- for(i=0;i<20;i++)
- printf("%02X",(unsigned char)keyrec->desc.u.fpr[i]);
- break;
-
- default:
- BUG();
- break;
- }
-
- if(keyrec->createtime>0)
- printf(", created %s",strtimestamp(keyrec->createtime));
-
- if(keyrec->expiretime>0)
- printf(", expires %s",strtimestamp(keyrec->expiretime));
-
- if(keyrec->flags&1)
- printf(" (%s)",("revoked"));
- if(keyrec->flags&2)
- printf(" (%s)",("disabled"));
- if(keyrec->flags&4)
- printf(" (%s)",("expired"));
-
- printf("\n");
-}
-
-/* Returns a keyrec (which must be freed) once a key is complete, and
- NULL otherwise. Call with a NULL keystring once key parsing is
- complete to return any unfinished keys. */
-static struct keyrec *
-parse_keyrec(char *keystring)
-{
- static struct keyrec *work=NULL;
- struct keyrec *ret=NULL;
- char *record,*tok;
- int i;
-
- if(keystring==NULL)
- {
- if(work==NULL)
- return NULL;
- else if(work->desc.mode==KEYDB_SEARCH_MODE_NONE)
- {
- m_free(work);
- return NULL;
- }
- else
- {
- ret=work;
- work=NULL;
- return ret;
- }
- }
-
- if(work==NULL)
- {
- work=m_alloc_clear(sizeof(struct keyrec));
- work->uidbuf=iobuf_temp();
- }
-
- /* Remove trailing whitespace */
- for(i=strlen(keystring);i>0;i--)
- if(isspace(keystring[i-1]))
- keystring[i-1]='\0';
- else
- break;
-
- if((record=strsep(&keystring,":"))==NULL)
- return ret;
-
- if(ascii_strcasecmp("pub",record)==0)
- {
- if(work->desc.mode)
- {
- ret=work;
- work=m_alloc_clear(sizeof(struct keyrec));
- work->uidbuf=iobuf_temp();
- }
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- classify_user_id(tok,&work->desc);
- if(work->desc.mode!=KEYDB_SEARCH_MODE_SHORT_KID
- && work->desc.mode!=KEYDB_SEARCH_MODE_LONG_KID
- && work->desc.mode!=KEYDB_SEARCH_MODE_FPR16
- && work->desc.mode!=KEYDB_SEARCH_MODE_FPR20)
- {
- work->desc.mode=KEYDB_SEARCH_MODE_NONE;
- return ret;
- }
-
- /* Note all items after this are optional. This allows us to
- have a pub line as simple as pub:keyid and nothing else. */
-
- work->lines++;
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- work->type=atoi(tok);
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- work->size=atoi(tok);
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- work->createtime=atoi(tok);
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- work->expiretime=atoi(tok);
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- while(*tok)
- switch(*tok++)
- {
- case 'r':
- case 'R':
- work->flags|=1;
- break;
-
- case 'd':
- case 'D':
- work->flags|=2;
- break;
-
- case 'e':
- case 'E':
- work->flags|=4;
- break;
- }
-
- if(work->expiretime && work->expiretime<=make_timestamp())
- work->flags|=4;
- }
- else if(ascii_strcasecmp("uid",record)==0 && work->desc.mode)
- {
- char *userid,*tok,*decoded;
- int i=0;
-
- if((tok=strsep(&keystring,":"))==NULL)
- return ret;
-
- if(strlen(tok)==0)
- return ret;
-
- userid=tok;
-
- /* By definition, de-%-encoding is always smaller than the
- original string so we can decode in place. */
-
- while(*tok)
- if(tok[0]=='%' && tok[1] && tok[2])
- {
- if((userid[i]=hextobyte(&tok[1]))==-1)
- userid[i]='?';
-
- i++;
- tok+=3;
- }
- else
- userid[i++]=*tok++;
-
- /* We don't care about the other info provided in the uid: line
- since no keyserver supports marking userids with timestamps
- or revoked/expired/disabled yet. */
-
- /* No need to check for control characters, as utf8_to_native
- does this for us. */
-
- decoded=utf8_to_native(userid,i,0);
- iobuf_writestr(work->uidbuf,decoded);
- m_free(decoded);
- iobuf_writestr(work->uidbuf,"\n\t");
- work->lines++;
- }
-
- /* Ignore any records other than "pri" and "uid" for easy future
- growth. */
-
- return ret;
-}
-
-/* TODO: do this as a list sent to keyserver_work rather than calling
- it once for each key to get the correct counts after the import
- (cosmetics, really) and to better take advantage of the keyservers
- that can do multiple fetches in one go (LDAP). */
-static int
-show_prompt(KEYDB_SEARCH_DESC *desc,int numdesc,int count,const char *search)
-{
- char *answer;
-
- if(count)
- {
- static int from=1;
- tty_printf("Keys %d-%d of %d for \"%s\". ",from,numdesc,count,search);
- from=numdesc+1;
- }
-
- answer=cpr_get_no_help("keysearch.prompt",
- _("Enter number(s), N)ext, or Q)uit > "));
- /* control-d */
- if(answer[0]=='\x04')
- {
- printf("Q\n");
- answer[0]='q';
- }
-
- if(answer[0]=='q' || answer[0]=='Q')
- {
- m_free(answer);
- return 1;
- }
- else if(atoi(answer)>=1 && atoi(answer)<=numdesc)
- {
- char *split=answer,*num;
-
- while((num=strsep(&split," ,"))!=NULL)
- if(atoi(num)>=1 && atoi(num)<=numdesc)
- keyserver_work(GET,NULL,&desc[atoi(num)-1],1);
-
- m_free(answer);
- return 1;
- }
-
- return 0;
-}
-
-/* Count and searchstr are just for cosmetics. If the count is too
- small, it will grow safely. If negative it disables the "Key x-y
- of z" messages. */
-static void
-keyserver_search_prompt(IOBUF buffer,const char *searchstr)
-{
- int i=0,validcount=0,started=0,count=1;
- unsigned int maxlen,buflen;
- KEYDB_SEARCH_DESC *desc;
- byte *line=NULL;
- /* TODO: Something other than 23? That's 24-1 (the prompt). */
- int maxlines=23,numlines=0;
-
- desc=m_alloc(count*sizeof(KEYDB_SEARCH_DESC));
-
- for(;;)
- {
- struct keyrec *keyrec;
- int rl;
-
- maxlen=1024;
- rl=iobuf_read_line(buffer,&line,&buflen,&maxlen);
-
- /* Look for an info: line. The only current info: values
- defined are the version and key count. */
- if(!started && rl>0 && ascii_strncasecmp("info:",line,5)==0)
- {
- char *tok,*str=&line[5];
-
- if((tok=strsep(&str,":"))!=NULL)
- {
- int version;
-
- if(sscanf(tok,"%d",&version)!=1)
- version=1;
-
- if(version!=1)
- {
- log_error(_("invalid keyserver protocol "
- "(us %d!=handler %d)\n"),1,version);
- break;
- }
- }
-
- if((tok=strsep(&str,":"))!=NULL && sscanf(tok,"%d",&count)==1)
- {
- if(count==0)
- goto notfound;
- else if(count<0)
- count=10;
- else
- validcount=1;
-
- desc=m_realloc(desc,count*sizeof(KEYDB_SEARCH_DESC));
- }
-
- started=1;
- continue;
- }
-
- if(rl==0)
- {
- keyrec=parse_keyrec(NULL);
-
- if(keyrec==NULL)
- {
- if(i==0)
- {
- count=0;
- break;
- }
-
- if(i!=count)
- validcount=0;
-
- for(;;)
- {
- if(show_prompt(desc,i,validcount?count:0,searchstr))
- break;
- validcount=0;
- }
-
- break;
- }
- }
- else
- keyrec=parse_keyrec(line);
-
- if(i==count)
- {
- /* keyserver helper sent more keys than they claimed in the
- info: line. */
- count+=10;
- desc=m_realloc(desc,count*sizeof(KEYDB_SEARCH_DESC));
- validcount=0;
- }
-
- if(keyrec)
- {
- desc[i]=keyrec->desc;
-
- if(numlines+keyrec->lines>maxlines)
- {
- if(show_prompt(desc,i,validcount?count:0,searchstr))
- break;
- else
- numlines=0;
- }
-
- print_keyrec(i+1,keyrec);
- numlines+=keyrec->lines;
- iobuf_close(keyrec->uidbuf);
- m_free(keyrec);
-
- started=1;
- i++;
- }
- }
-
- m_free(desc);
- m_free(line);
-
- notfound:
- if(count==0)
- {
- if(searchstr)
- log_info(_("key \"%s\" not found on keyserver\n"),searchstr);
- else
- log_info(_("key not found on keyserver\n"));
- return;
- }
-}
-
-#define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\""
-#define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\""
-
-static int
-keyserver_spawn(int action,STRLIST list,
- KEYDB_SEARCH_DESC *desc,int count,int *prog)
-{
- int ret=0,i,gotversion=0,outofband=0;
- STRLIST temp;
- unsigned int maxlen,buflen;
- char *command=NULL,*searchstr=NULL;
- byte *line=NULL;
- struct kopts *kopts;
- struct exec_info *spawn;
-
-#ifdef EXEC_TEMPFILE_ONLY
- opt.keyserver_options.use_temp_files=1;
-#endif
-
- /* Push the libexecdir into path. If DISABLE_KEYSERVER_PATH is set,
- use the 0 arg to replace the path. */
-#ifdef DISABLE_KEYSERVER_PATH
- set_exec_path(GNUPG_LIBEXECDIR,0);
-#else
- set_exec_path(GNUPG_LIBEXECDIR,opt.exec_path_set);
-#endif
-
- /* Build the filename for the helper to execute */
- command=m_alloc(strlen("gpgkeys_")+strlen(opt.keyserver_scheme)+1);
- strcpy(command,"gpgkeys_");
- strcat(command,opt.keyserver_scheme);
-
- if(opt.keyserver_options.use_temp_files)
- {
- if(opt.keyserver_options.keep_temp_files)
- {
- command=m_realloc(command,strlen(command)+
- strlen(KEYSERVER_ARGS_KEEP)+1);
- strcat(command,KEYSERVER_ARGS_KEEP);
- }
- else
- {
- command=m_realloc(command,strlen(command)+
- strlen(KEYSERVER_ARGS_NOKEEP)+1);
- strcat(command,KEYSERVER_ARGS_NOKEEP);
- }
-
- ret=exec_write(&spawn,NULL,command,NULL,0,0);
- }
- else
- ret=exec_write(&spawn,command,NULL,NULL,0,0);
-
- if(ret)
- return ret;
-
- fprintf(spawn->tochild,"# This is a gpg keyserver communications file\n");
- fprintf(spawn->tochild,"VERSION %d\n",KEYSERVER_PROTO_VERSION);
- fprintf(spawn->tochild,"PROGRAM %s\n",VERSION);
-
- if(opt.keyserver_opaque)
- fprintf(spawn->tochild,"OPAQUE %s\n",opt.keyserver_opaque);
- else
- {
- if(opt.keyserver_host)
- fprintf(spawn->tochild,"HOST %s\n",opt.keyserver_host);
-
- if(opt.keyserver_port)
- fprintf(spawn->tochild,"PORT %s\n",opt.keyserver_port);
- }
-
- /* Write options */
-
- for(i=0,kopts=keyserver_opts;kopts[i].name;i++)
- if(*(kopts[i].flag) && kopts[i].tell)
- fprintf(spawn->tochild,"OPTION %s\n",kopts[i].name);
-
- for(i=0;i<opt.keyserver_options.verbose;i++)
- fprintf(spawn->tochild,"OPTION verbose\n");
-
- temp=opt.keyserver_options.other;
-
- for(;temp;temp=temp->next)
- fprintf(spawn->tochild,"OPTION %s\n",temp->d);
-
- switch(action)
- {
- case GET:
- {
- fprintf(spawn->tochild,"COMMAND GET\n\n");
-
- /* Which keys do we want? */
-
- for(i=0;i<count;i++)
- {
- if(desc[i].mode==KEYDB_SEARCH_MODE_FPR20)
- {
- int f;
-
- fprintf(spawn->tochild,"0x");
-
- for(f=0;f<MAX_FINGERPRINT_LEN;f++)
- fprintf(spawn->tochild,"%02X",(byte)desc[i].u.fpr[f]);
-
- fprintf(spawn->tochild,"\n");
- }
- else if(desc[i].mode==KEYDB_SEARCH_MODE_FPR16)
- {
- int f;
-
- fprintf(spawn->tochild,"0x");
-
- for(f=0;f<16;f++)
- fprintf(spawn->tochild,"%02X",(byte)desc[i].u.fpr[f]);
-
- fprintf(spawn->tochild,"\n");
- }
- else if(desc[i].mode==KEYDB_SEARCH_MODE_LONG_KID)
- fprintf(spawn->tochild,"0x%08lX%08lX\n",
- (ulong)desc[i].u.kid[0],
- (ulong)desc[i].u.kid[1]);
- else
- fprintf(spawn->tochild,"0x%08lX\n",
- (ulong)desc[i].u.kid[1]);
- }
-
- fprintf(spawn->tochild,"\n");
-
- break;
- }
-
- case SEND:
- {
- STRLIST key;
-
- /* Note the extra \n here to send an empty keylist block */
- fprintf(spawn->tochild,"COMMAND SEND\n\n\n");
-
- for(key=list;key!=NULL;key=key->next)
- {
- armor_filter_context_t afx;
- IOBUF buffer=iobuf_temp();
-
- temp=NULL;
- add_to_strlist(&temp,key->d);
-
- memset(&afx,0,sizeof(afx));
- afx.what=1;
- iobuf_push_filter(buffer,armor_filter,&afx);
-
- if(export_pubkeys_stream(buffer,temp,
- opt.keyserver_options.export_options)==-1)
- iobuf_close(buffer);
- else
- {
- iobuf_flush_temp(buffer);
-
- fprintf(spawn->tochild,"KEY %s BEGIN\n",key->d);
- fwrite(iobuf_get_temp_buffer(buffer),
- iobuf_get_temp_length(buffer),1,spawn->tochild);
- fprintf(spawn->tochild,"KEY %s END\n",key->d);
-
- iobuf_close(buffer);
- }
-
- free_strlist(temp);
- }
-
- break;
- }
-
- case SEARCH:
- {
- STRLIST key;
-
- fprintf(spawn->tochild,"COMMAND SEARCH\n\n");
-
- /* Which keys do we want? Remember that the gpgkeys_ program
- is going to lump these together into a search string. */
-
- for(key=list;key!=NULL;key=key->next)
- {
- fprintf(spawn->tochild,"%s\n",key->d);
- if(key!=list)
- {
- searchstr=m_realloc(searchstr,
- strlen(searchstr)+strlen(key->d)+2);
- strcat(searchstr," ");
- }
- else
- {
- searchstr=m_alloc(strlen(key->d)+1);
- searchstr[0]='\0';
- }
-
- strcat(searchstr,key->d);
- }
-
- fprintf(spawn->tochild,"\n");
-
- break;
- }
-
- default:
- log_fatal(_("no keyserver action!\n"));
- break;
- }
-
- /* Done sending, so start reading. */
- ret=exec_read(spawn);
- if(ret)
- goto fail;
-
- /* Now handle the response */
-
- for(;;)
- {
- int plen;
- char *ptr;
-
- maxlen=1024;
- if(iobuf_read_line(spawn->fromchild,&line,&buflen,&maxlen)==0)
- {
- ret=G10ERR_READ_FILE;
- goto fail; /* i.e. EOF */
- }
-
- ptr=line;
-
- /* remove trailing whitespace */
- plen=strlen(ptr);
- while(plen>0 && isspace(ptr[plen-1]))
- plen--;
- plen[ptr]='\0';
-
- if(*ptr=='\0')
- break;
-
- if(ascii_strncasecmp(ptr,"VERSION ",8)==0)
- {
- gotversion=1;
-
- if(atoi(&ptr[8])!=KEYSERVER_PROTO_VERSION)
- {
- log_error(_("invalid keyserver protocol (us %d!=handler %d)\n"),
- KEYSERVER_PROTO_VERSION,atoi(&ptr[8]));
- goto fail;
- }
- }
- else if(ascii_strncasecmp(ptr,"PROGRAM ",8)==0)
- {
- if(ascii_strncasecmp(&ptr[8],VERSION,strlen(VERSION))!=0)
- log_info(_("WARNING: keyserver handler from a different "
- "version of GnuPG (%s)\n"),&ptr[8]);
- }
- else if(ascii_strncasecmp(ptr,"OPTION OUTOFBAND",16)==0)
- outofband=1; /* Currently the only OPTION */
- }
-
- if(!gotversion)
- {
- log_error(_("keyserver did not send VERSION\n"));
- goto fail;
- }
-
- if(!outofband)
- switch(action)
- {
- case GET:
- {
- void *stats_handle;
-
- stats_handle=import_new_stats_handle();
-
- /* Slurp up all the key data. In the future, it might be
- nice to look for KEY foo OUTOFBAND and FAILED indicators.
- It's harmless to ignore them, but ignoring them does make
- gpg complain about "no valid OpenPGP data found". One
- way to do this could be to continue parsing this
- line-by-line and make a temp iobuf for each key. */
-
- import_keys_stream(spawn->fromchild,stats_handle,
- opt.keyserver_options.import_options);
-
- import_print_stats(stats_handle);
- import_release_stats_handle(stats_handle);
-
- break;
- }
-
- /* Nothing to do here */
- case SEND:
- break;
-
- case SEARCH:
- {
- keyserver_search_prompt(spawn->fromchild,searchstr);
-
- break;
- }
-
- default:
- log_fatal(_("no keyserver action!\n"));
- break;
- }
-
- fail:
- m_free(line);
-
- *prog=exec_finish(spawn);
-
- return ret;
-}
-
-static int
-keyserver_work(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,int count)
-{
- int rc=0,ret=0;
-
- if(opt.keyserver_scheme==NULL)
- {
- log_error(_("no keyserver known (use option --keyserver)\n"));
- return G10ERR_BAD_URI;
- }
-
-#ifdef DISABLE_KEYSERVER_HELPERS
-
- log_error(_("external keyserver calls are not supported in this build\n"));
- return G10ERR_KEYSERVER;
-
-#else
- /* Spawn a handler */
-
- rc=keyserver_spawn(action,list,desc,count,&ret);
- if(ret)
- {
- switch(ret)
- {
- case KEYSERVER_SCHEME_NOT_FOUND:
- log_error(_("no handler for keyserver scheme \"%s\"\n"),
- opt.keyserver_scheme);
- break;
-
- case KEYSERVER_NOT_SUPPORTED:
- log_error(_("action \"%s\" not supported with keyserver "
- "scheme \"%s\"\n"),
- action==GET?"get":action==SEND?"send":
- action==SEARCH?"search":"unknown",
- opt.keyserver_scheme);
- break;
-
- case KEYSERVER_VERSION_ERROR:
- log_error(_("gpgkeys_%s does not support handler version %d\n"),
- opt.keyserver_scheme,KEYSERVER_PROTO_VERSION);
- break;
-
- case KEYSERVER_INTERNAL_ERROR:
- default:
- log_error(_("keyserver internal error\n"));
- break;
- }
-
- return G10ERR_KEYSERVER;
- }
-
- if(rc)
- {
- log_error(_("keyserver communications error: %s\n"),g10_errstr(rc));
-
- return rc;
- }
-
- return 0;
-#endif /* ! DISABLE_KEYSERVER_HELPERS*/
-}
-
-int
-keyserver_export(STRLIST users)
-{
- /* We better ask for confirmation when the user entered --send-keys
- without arguments. Sending all keys might not be the thing he
- intended to do */
- if (users || opt.batch || opt.answer_yes)
- ;
- else if ( !cpr_get_answer_is_yes
- ("keyserver_export.send_all",
- _("Do you really want to send all your "
- "public keys to the keyserver? (y/N) ")))
- return -1;
-
- return keyserver_work(SEND,users,NULL,0);
-}
-
-int
-keyserver_import(STRLIST users)
-{
- KEYDB_SEARCH_DESC *desc;
- int num=100,count=0;
- int rc=0;
-
- /* Build a list of key ids */
- desc=m_alloc(sizeof(KEYDB_SEARCH_DESC)*num);
-
- for(;users;users=users->next)
- {
- classify_user_id (users->d, &desc[count]);
- if(desc[count].mode!=KEYDB_SEARCH_MODE_SHORT_KID &&
- desc[count].mode!=KEYDB_SEARCH_MODE_LONG_KID &&
- desc[count].mode!=KEYDB_SEARCH_MODE_FPR16 &&
- desc[count].mode!=KEYDB_SEARCH_MODE_FPR20)
- {
- log_error(_("skipping invalid key ID \"%s\"\n"),users->d);
- continue;
- }
-
- count++;
- if(count==num)
- {
- num+=100;
- desc=m_realloc(desc,sizeof(KEYDB_SEARCH_DESC)*num);
- }
- }
-
- if(count>0)
- rc=keyserver_work(GET,NULL,desc,count);
-
- m_free(desc);
-
- return rc;
-}
-
-int
-keyserver_import_fprint(const byte *fprint,size_t fprint_len)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset(&desc,0,sizeof(desc));
-
- if(fprint_len==16)
- desc.mode=KEYDB_SEARCH_MODE_FPR16;
- else if(fprint_len==20)
- desc.mode=KEYDB_SEARCH_MODE_FPR20;
- else
- return -1;
-
- memcpy(desc.u.fpr,fprint,fprint_len);
-
- return keyserver_work(GET,NULL,&desc,1);
-}
-
-int
-keyserver_import_keyid(u32 *keyid)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset(&desc,0,sizeof(desc));
-
- desc.mode=KEYDB_SEARCH_MODE_LONG_KID;
- desc.u.kid[0]=keyid[0];
- desc.u.kid[1]=keyid[1];
-
- return keyserver_work(GET,NULL,&desc,1);
-}
-
-/* code mostly stolen from do_export_stream */
-static int
-keyidlist(STRLIST users,KEYDB_SEARCH_DESC **klist,int *count,int fakev3)
-{
- int rc=0,ndesc,num=100;
- KBNODE keyblock=NULL,node;
- KEYDB_HANDLE kdbhd;
- KEYDB_SEARCH_DESC *desc;
- STRLIST sl;
-
- *count=0;
-
- *klist=m_alloc(sizeof(KEYDB_SEARCH_DESC)*num);
-
- kdbhd=keydb_new(0);
-
- if(!users)
- {
- ndesc = 1;
- desc = m_alloc_clear ( ndesc * sizeof *desc);
- desc[0].mode = KEYDB_SEARCH_MODE_FIRST;
- }
- else
- {
- for (ndesc=0, sl=users; sl; sl = sl->next, ndesc++)
- ;
- desc = m_alloc ( ndesc * sizeof *desc);
-
- for (ndesc=0, sl=users; sl; sl = sl->next)
- {
- if(classify_user_id (sl->d, desc+ndesc))
- ndesc++;
- else
- log_error (_("key `%s' not found: %s\n"),
- sl->d, g10_errstr (G10ERR_INV_USER_ID));
- }
- }
-
- while (!(rc = keydb_search (kdbhd, desc, ndesc)))
- {
- if (!users)
- desc[0].mode = KEYDB_SEARCH_MODE_NEXT;
-
- /* read the keyblock */
- rc = keydb_get_keyblock (kdbhd, &keyblock );
- if( rc )
- {
- log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- if((node=find_kbnode(keyblock,PKT_PUBLIC_KEY)))
- {
- /* This is to work around a bug in some keyservers (pksd and
- OKS) that calculate v4 RSA keyids as if they were v3 RSA.
- The answer is to refresh both the correct v4 keyid
- (e.g. 99242560) and the fake v3 keyid (e.g. 68FDDBC7).
- This only happens for key refresh using the HKP scheme
- and if the refresh-add-fake-v3-keyids keyserver option is
- set. */
- if(fakev3 && is_RSA(node->pkt->pkt.public_key->pubkey_algo) &&
- node->pkt->pkt.public_key->version>=4)
- {
- (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID;
- mpi_get_keyid(node->pkt->pkt.public_key->pkey[0],
- (*klist)[*count].u.kid);
- (*count)++;
-
- if(*count==num)
- {
- num+=100;
- *klist=m_realloc(*klist,sizeof(KEYDB_SEARCH_DESC)*num);
- }
- }
-
- /* v4 keys get full fingerprints. v3 keys get long keyids.
- This is because it's easy to calculate any sort of key id
- from a v4 fingerprint, but not a v3 fingerprint. */
-
- if(node->pkt->pkt.public_key->version<4)
- {
- (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID;
- keyid_from_pk(node->pkt->pkt.public_key,
- (*klist)[*count].u.kid);
- }
- else
- {
- size_t dummy;
-
- (*klist)[*count].mode=KEYDB_SEARCH_MODE_FPR20;
- fingerprint_from_pk(node->pkt->pkt.public_key,
- (*klist)[*count].u.fpr,&dummy);
- }
-
- (*count)++;
-
- if(*count==num)
- {
- num+=100;
- *klist=m_realloc(*klist,sizeof(KEYDB_SEARCH_DESC)*num);
- }
- }
- }
-
- if(rc==-1)
- rc=0;
-
- leave:
- m_free(desc);
- keydb_release(kdbhd);
- release_kbnode(keyblock);
-
- return rc;
-}
-
-/* Note this is different than the original HKP refresh. It allows
- usernames to refresh only part of the keyring. */
-
-int
-keyserver_refresh(STRLIST users)
-{
- int rc,count,fakev3=0;
- KEYDB_SEARCH_DESC *desc;
-
- /* We switch merge_only on during a refresh, as 'refresh' should
- never import new keys, even if their keyids match. Is it worth
- preserving the old merge_only value here? */
- opt.merge_only=1;
-
- /* If refresh_add_fake_v3_keyids is on and it's a HKP or MAILTO
- scheme, then enable fake v3 keyid generation. */
- if(opt.keyserver_options.fake_v3_keyids && opt.keyserver_scheme &&
- (ascii_strcasecmp(opt.keyserver_scheme,"hkp")==0 ||
- ascii_strcasecmp(opt.keyserver_scheme,"mailto")==0))
- fakev3=1;
-
- rc=keyidlist(users,&desc,&count,fakev3);
- if(rc)
- return rc;
-
- if(count==1)
- log_info(_("refreshing 1 key from %s\n"),opt.keyserver_uri);
- else
- log_info(_("refreshing %d keys from %s\n"),count,opt.keyserver_uri);
-
- if(count>0)
- rc=keyserver_work(GET,NULL,desc,count);
-
- m_free(desc);
-
- return 0;
-}
-
-int
-keyserver_search(STRLIST tokens)
-{
- if(tokens)
- return keyserver_work(SEARCH,tokens,NULL,0);
- else
- return 0;
-}
diff --git a/g10/main.h b/g10/main.h
deleted file mode 100644
index f16355bc8..000000000
--- a/g10/main.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/* main.h
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_MAIN_H
-#define G10_MAIN_H
-#include "types.h"
-#include "iobuf.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "keydb.h"
-
-#define DEFAULT_CIPHER_ALGO CIPHER_ALGO_CAST5
-#define DEFAULT_PUBKEY_ALGO PUBKEY_ALGO_ELGAMAL
-#define DEFAULT_DIGEST_ALGO DIGEST_ALGO_SHA1
-#define DEFAULT_COMPRESS_ALGO 1
-
-typedef struct {
- int header_okay;
- PK_LIST pk_list;
- cipher_filter_context_t cfx;
-} encrypt_filter_context_t;
-
-struct groupitem
-{
- char *name;
- STRLIST values;
- struct groupitem *next;
-};
-
-/*-- g10.c --*/
-extern int g10_errors_seen;
-
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
- void g10_exit(int rc) __attribute__ ((noreturn));
-#else
- void g10_exit(int rc);
-#endif
-void print_pubkey_algo_note( int algo );
-void print_cipher_algo_note( int algo );
-void print_digest_algo_note( int algo );
-
-/*-- armor.c --*/
-char *make_radix64_string( const byte *data, size_t len );
-
-/*-- misc.c --*/
-void trap_unaligned(void);
-int disable_core_dumps(void);
-u16 checksum_u16( unsigned n );
-u16 checksum( byte *p, unsigned n );
-u16 checksum_mpi( MPI a );
-u32 buffer_to_u32( const byte *buffer );
-const byte *get_session_marker( size_t *rlen );
-int openpgp_cipher_test_algo( int algo );
-int openpgp_pk_test_algo( int algo, unsigned int usage_flags );
-int openpgp_pk_algo_usage ( int algo );
-int openpgp_md_test_algo( int algo );
-void idea_cipher_warn( int show );
-
-struct expando_args
-{
- PKT_public_key *pk;
- PKT_secret_key *sk;
- byte imagetype;
-};
-
-char *pct_expando(const char *string,struct expando_args *args);
-int hextobyte( const char *s );
-void deprecated_warning(const char *configname,unsigned int configlineno,
- const char *option,const char *repl1,const char *repl2);
-const char *compress_algo_to_string(int algo);
-int check_compress_algo(int algo);
-
-/*-- helptext.c --*/
-void display_online_help( const char *keyword );
-
-/*-- encode.c --*/
-int encode_symmetric( const char *filename );
-int encode_store( const char *filename );
-int encode_crypt( const char *filename, STRLIST remusr );
-void encode_crypt_files(int nfiles, char **files, STRLIST remusr);
-int encrypt_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len);
-
-
-/*-- sign.c --*/
-int complete_sig( PKT_signature *sig, PKT_secret_key *sk, MD_HANDLE md );
-int sign_file( STRLIST filenames, int detached, STRLIST locusr,
- int do_encrypt, STRLIST remusr, const char *outfile );
-int clearsign_file( const char *fname, STRLIST locusr, const char *outfile );
-int sign_symencrypt_file (const char *fname, STRLIST locusr);
-
-/*-- sig-check.c --*/
-int check_revocation_keys (PKT_public_key *pk, PKT_signature *sig);
-int check_key_signature( KBNODE root, KBNODE node, int *is_selfsig );
-int check_key_signature2( KBNODE root, KBNODE node,
- int *is_selfsig, u32 *r_expiredate, int *r_expired );
-
-/*-- delkey.c --*/
-int delete_keys( STRLIST names, int secret, int allow_both );
-
-/*-- keyedit.c --*/
-void keyedit_menu( const char *username, STRLIST locusr, STRLIST cmds,
- int sign_mode );
-void show_basic_key_info (KBNODE keyblock);
-
-/*-- keygen.c --*/
-u32 ask_expire_interval(int object);
-u32 ask_expiredate(void);
-void generate_keypair( const char *fname );
-int keygen_set_std_prefs (const char *string,int personal);
-char *keygen_get_std_prefs (void);
-int keygen_add_key_expire( PKT_signature *sig, void *opaque );
-int keygen_add_std_prefs( PKT_signature *sig, void *opaque );
-int keygen_upd_std_prefs( PKT_signature *sig, void *opaque );
-int keygen_add_revkey(PKT_signature *sig, void *opaque);
-int generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock );
-
-/*-- openfile.c --*/
-int overwrite_filep( const char *fname );
-char *make_outfile_name( const char *iname );
-char *ask_outfile_name( const char *name, size_t namelen );
-int open_outfile( const char *iname, int mode, IOBUF *a );
-IOBUF open_sigfile( const char *iname );
-void try_make_homedir( const char *fname );
-
-/*-- seskey.c --*/
-void make_session_key( DEK *dek );
-MPI encode_session_key( DEK *dek, unsigned nbits );
-MPI encode_md_value( int pubkey_algo, MD_HANDLE md,
- int hash_algo, unsigned nbits, int v3compathack );
-
-/*-- comment.c --*/
-KBNODE make_comment_node( const char *s );
-KBNODE make_mpi_comment_node( const char *s, MPI a );
-
-/*-- import.c --*/
-#define IMPORT_ALLOW_LOCAL_SIGS 1
-#define IMPORT_REPAIR_HKP_SUBKEY_BUG 2
-#define IMPORT_FAST_IMPORT 4
-
-int parse_import_options(char *str,unsigned int *options);
-void import_keys( char **fnames, int nnames,
- void *stats_hd, unsigned int options );
-int import_keys_stream( IOBUF inp,
- void *stats_hd, unsigned int options );
-void *import_new_stats_handle (void);
-void import_release_stats_handle (void *p);
-void import_print_stats (void *hd);
-
-int collapse_uids( KBNODE *keyblock );
-
-/*-- export.c --*/
-#define EXPORT_INCLUDE_NON_RFC 1
-#define EXPORT_INCLUDE_LOCAL_SIGS 2
-#define EXPORT_INCLUDE_ATTRIBUTES 4
-#define EXPORT_INCLUDE_SENSITIVE_REVKEYS 8
-
-int parse_export_options(char *str,unsigned int *options);
-int export_pubkeys( STRLIST users, unsigned int options );
-int export_pubkeys_stream( IOBUF out, STRLIST users, unsigned int options );
-int export_seckeys( STRLIST users );
-int export_secsubkeys( STRLIST users );
-
-/* dearmor.c --*/
-int dearmor_file( const char *fname );
-int enarmor_file( const char *fname );
-
-/*-- revoke.c --*/
-struct revocation_reason_info;
-int gen_revoke( const char *uname );
-int gen_desig_revoke( const char *uname );
-int revocation_reason_build_cb( PKT_signature *sig, void *opaque );
-struct revocation_reason_info *
- ask_revocation_reason( int key_rev, int cert_rev, int hint );
-void release_revocation_reason_info( struct revocation_reason_info *reason );
-
-/*-- keylist.c --*/
-void public_key_list( STRLIST list );
-void secret_key_list( STRLIST list );
-void list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque );
-void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode);
-void show_policy_url(PKT_signature *sig,int indent);
-void show_notation(PKT_signature *sig,int indent);
-void set_attrib_fd(int fd);
-
-/*-- verify.c --*/
-void print_file_status( int status, const char *name, int what );
-int verify_signatures( int nfiles, char **files );
-int verify_files( int nfiles, char **files );
-
-/*-- decrypt.c --*/
-int decrypt_message( const char *filename );
-void decrypt_messages(int nfiles, char **files);
-
-/*-- plaintext.c --*/
-int hash_datafiles( MD_HANDLE md, MD_HANDLE md2,
- STRLIST files, const char *sigfilename, int textmode );
-
-/*-- pipemode.c --*/
-void run_in_pipemode (void);
-
-/*-- signal.c --*/
-void init_signals(void);
-void pause_on_sigusr( int which );
-void block_all_signals(void);
-void unblock_all_signals(void);
-
-#endif /*G10_MAIN_H*/
diff --git a/g10/mainproc.c b/g10/mainproc.c
deleted file mode 100644
index f9be17600..000000000
--- a/g10/mainproc.c
+++ /dev/null
@@ -1,1656 +0,0 @@
-/* mainproc.c - handle packets
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <time.h>
-
-#include "packet.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "options.h"
-#include "util.h"
-#include "cipher.h"
-#include "keydb.h"
-#include "filter.h"
-#include "main.h"
-#include "status.h"
-#include "i18n.h"
-#include "trustdb.h"
-#include "keyserver-internal.h"
-#include "photoid.h"
-
-
-struct kidlist_item {
- struct kidlist_item *next;
- u32 kid[2];
- int pubkey_algo;
- int reason;
-};
-
-
-
-/****************
- * Structure to hold the context
- */
-typedef struct mainproc_context *CTX;
-struct mainproc_context {
- struct mainproc_context *anchor; /* may be useful in the future */
- PKT_public_key *last_pubkey;
- PKT_secret_key *last_seckey;
- PKT_user_id *last_user_id;
- md_filter_context_t mfx;
- int sigs_only; /* process only signatures and reject all other stuff */
- int encrypt_only; /* process only encrytion messages */
- STRLIST signed_data;
- const char *sigfilename;
- DEK *dek;
- int last_was_session_key;
- KBNODE list; /* the current list of packets */
- int have_data;
- IOBUF iobuf; /* used to get the filename etc. */
- int trustletter; /* temp usage in list_node */
- ulong local_id; /* ditto */
- struct kidlist_item *pkenc_list; /* list of encryption packets */
- struct {
- int op;
- int stop_now;
- } pipemode;
-};
-
-
-static int do_proc_packets( CTX c, IOBUF a );
-
-static void list_node( CTX c, KBNODE node );
-static void proc_tree( CTX c, KBNODE node );
-
-
-static void
-release_list( CTX c )
-{
- if( !c->list )
- return;
- proc_tree(c, c->list );
- release_kbnode( c->list );
- while( c->pkenc_list ) {
- struct kidlist_item *tmp = c->pkenc_list->next;
- m_free( c->pkenc_list );
- c->pkenc_list = tmp;
- }
- c->pkenc_list = NULL;
- c->list = NULL;
- c->have_data = 0;
- c->last_was_session_key = 0;
- c->pipemode.op = 0;
- c->pipemode.stop_now = 0;
- m_free(c->dek); c->dek = NULL;
-}
-
-
-static int
-add_onepass_sig( CTX c, PACKET *pkt )
-{
- KBNODE node;
-
- if( c->list ) { /* add another packet */
- /* We can only append another onepass packet if the list
- * does contain only onepass packets */
- for( node=c->list; node && node->pkt->pkttype == PKT_ONEPASS_SIG;
- node = node->next )
- ;
- if( node ) {
- /* this is not the case, so we flush the current thing and
- * allow this packet to start a new verification thing */
- release_list( c );
- c->list = new_kbnode( pkt );
- }
- else
- add_kbnode( c->list, new_kbnode( pkt ));
- }
- else /* insert the first one */
- c->list = node = new_kbnode( pkt );
-
- return 1;
-}
-
-
-static int
-add_gpg_control( CTX c, PACKET *pkt )
-{
- if ( pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) {
- /* New clear text signature.
- * Process the last one and reset everything */
- release_list(c);
- }
- else if ( pkt->pkt.gpg_control->control == CTRLPKT_PIPEMODE ) {
- /* Pipemode control packet */
- if ( pkt->pkt.gpg_control->datalen < 2 )
- log_fatal ("invalid pipemode control packet length\n");
- if (pkt->pkt.gpg_control->data[0] == 1) {
- /* start the whole thing */
- assert ( !c->list ); /* we should be in a pretty virgin state */
- assert ( !c->pipemode.op );
- c->pipemode.op = pkt->pkt.gpg_control->data[1];
- }
- else if (pkt->pkt.gpg_control->data[0] == 2) {
- /* the signed material follows in a plaintext packet */
- assert ( c->pipemode.op == 'B' );
- }
- else if (pkt->pkt.gpg_control->data[0] == 3) {
- assert ( c->pipemode.op == 'B' );
- release_list (c);
- /* and tell the outer loop to terminate */
- c->pipemode.stop_now = 1;
- }
- else
- log_fatal ("invalid pipemode control packet code\n");
- return 0; /* no need to store the packet */
- }
-
- if( c->list ) /* add another packet */
- add_kbnode( c->list, new_kbnode( pkt ));
- else /* insert the first one */
- c->list = new_kbnode( pkt );
-
- return 1;
-}
-
-
-
-static int
-add_user_id( CTX c, PACKET *pkt )
-{
- if( !c->list ) {
- log_error("orphaned user ID\n" );
- return 0;
- }
- add_kbnode( c->list, new_kbnode( pkt ) );
- return 1;
-}
-
-static int
-add_subkey( CTX c, PACKET *pkt )
-{
- if( !c->list ) {
- log_error("subkey w/o mainkey\n" );
- return 0;
- }
- add_kbnode( c->list, new_kbnode( pkt ) );
- return 1;
-}
-
-static int
-add_ring_trust( CTX c, PACKET *pkt )
-{
- if( !c->list ) {
- log_error("ring trust w/o key\n" );
- return 0;
- }
- add_kbnode( c->list, new_kbnode( pkt ) );
- return 1;
-}
-
-
-static int
-add_signature( CTX c, PACKET *pkt )
-{
- KBNODE node;
-
- if( pkt->pkttype == PKT_SIGNATURE && !c->list ) {
- /* This is the first signature for the following datafile.
- * GPG does not write such packets; instead it always uses
- * onepass-sig packets. The drawback of PGP's method
- * of prepending the signature to the data is
- * that it is not possible to make a signature from data read
- * from stdin. (GPG is able to read PGP stuff anyway.) */
- node = new_kbnode( pkt );
- c->list = node;
- return 1;
- }
- else if( !c->list )
- return 0; /* oops (invalid packet sequence)*/
- else if( !c->list->pkt )
- BUG(); /* so nicht */
-
- /* add a new signature node id at the end */
- node = new_kbnode( pkt );
- add_kbnode( c->list, node );
- return 1;
-}
-
-static void
-symkey_decrypt_sesskey( DEK *dek, byte *sesskey, size_t slen )
-{
- CIPHER_HANDLE hd;
- int n;
-
- if ( slen < 17 || slen > 33 ) {
- log_error ( _("weird size for an encrypted session key (%d)\n"),
- (int)slen);
- return;
- }
- hd = cipher_open( dek->algo, CIPHER_MODE_CFB, 1 );
- cipher_setkey( hd, dek->key, dek->keylen );
- cipher_setiv( hd, NULL, 0 );
- cipher_decrypt( hd, sesskey, sesskey, slen );
- cipher_close( hd );
- /* check first byte (the cipher algo) */
- if ( sesskey[0] > 10 ) {
- log_error ( _("invalid symkey algorithm detected (%d)\n"),
- sesskey[0] );
- return;
- }
- n = cipher_get_keylen (sesskey[0]) / 8;
- if (n > DIM(dek->key))
- BUG ();
- /* now we replace the dek components with the real session key
- to decrypt the contents of the sequencing packet. */
- dek->keylen = cipher_get_keylen( sesskey[0] ) / 8;
- dek->algo = sesskey[0];
- memcpy( dek->key, sesskey + 1, dek->keylen );
- /*log_hexdump( "thekey", dek->key, dek->keylen );*/
-}
-
-static void
-proc_symkey_enc( CTX c, PACKET *pkt )
-{
- PKT_symkey_enc *enc;
-
- enc = pkt->pkt.symkey_enc;
- if (!enc)
- log_error ("invalid symkey encrypted packet\n");
- else {
- int algo = enc->cipher_algo;
- const char *s;
-
- s = cipher_algo_to_string (algo);
- if( s )
- log_info(_("%s encrypted data\n"), s );
- else
- log_info(_("encrypted with unknown algorithm %d\n"), algo );
-
- c->last_was_session_key = 2;
- if ( opt.list_only )
- goto leave;
- c->dek = passphrase_to_dek( NULL, 0, algo, &enc->s2k, 0, NULL );
- if (c->dek)
- c->dek->algo_info_printed = 1;
- if ( c->dek && enc->seskeylen )
- symkey_decrypt_sesskey( c->dek, enc->seskey, enc->seskeylen );
- }
-leave:
- free_packet(pkt);
-}
-
-static void
-proc_pubkey_enc( CTX c, PACKET *pkt )
-{
- PKT_pubkey_enc *enc;
- int result = 0;
-
- /* check whether the secret key is available and store in this case */
- c->last_was_session_key = 1;
- enc = pkt->pkt.pubkey_enc;
- /*printf("enc: encrypted by a pubkey with keyid %08lX\n", enc->keyid[1] );*/
- /* Hmmm: why do I have this algo check here - anyway there is
- * function to check it. */
- if( opt.verbose )
- log_info(_("public key is %08lX\n"), (ulong)enc->keyid[1] );
-
- if( is_status_enabled() ) {
- char buf[50];
- sprintf(buf, "%08lX%08lX %d 0",
- (ulong)enc->keyid[0], (ulong)enc->keyid[1], enc->pubkey_algo );
- write_status_text( STATUS_ENC_TO, buf );
- }
-
- if( !opt.list_only && opt.override_session_key ) {
- /* It does not make much sense to store the session key in
- * secure memory because it has already been passed on the
- * command line and the GCHQ knows about it */
- c->dek = m_alloc_clear( sizeof *c->dek );
- result = get_override_session_key ( c->dek, opt.override_session_key );
- if ( result ) {
- m_free(c->dek); c->dek = NULL;
- }
- }
- else if( is_ELGAMAL(enc->pubkey_algo)
- || enc->pubkey_algo == PUBKEY_ALGO_DSA
- || is_RSA(enc->pubkey_algo) ) {
- if ( !c->dek && ((!enc->keyid[0] && !enc->keyid[1])
- || opt.try_all_secrets
- || !seckey_available( enc->keyid )) ) {
- if( opt.list_only )
- result = -1;
- else {
- c->dek = m_alloc_secure_clear( sizeof *c->dek );
- if( (result = get_session_key( enc, c->dek )) ) {
- /* error: delete the DEK */
- m_free(c->dek); c->dek = NULL;
- }
- }
- }
- else
- result = G10ERR_NO_SECKEY;
- }
- else
- result = G10ERR_PUBKEY_ALGO;
-
- if( result == -1 )
- ;
- else {
- if( !result ) {
- if( opt.verbose > 1 )
- log_info( _("public key encrypted data: good DEK\n") );
- if ( opt.show_session_key ) {
- int i;
- char *buf = m_alloc ( c->dek->keylen*2 + 20 );
- sprintf ( buf, "%d:", c->dek->algo );
- for(i=0; i < c->dek->keylen; i++ )
- sprintf(buf+strlen(buf), "%02X", c->dek->key[i] );
- log_info( "session key: \"%s\"\n", buf );
- write_status_text ( STATUS_SESSION_KEY, buf );
- }
- }
- /* store it for later display */
- {
- struct kidlist_item *x = m_alloc( sizeof *x );
- x->kid[0] = enc->keyid[0];
- x->kid[1] = enc->keyid[1];
- x->pubkey_algo = enc->pubkey_algo;
- x->reason = result;
- x->next = c->pkenc_list;
- c->pkenc_list = x;
- }
- }
- free_packet(pkt);
-}
-
-
-
-/****************
- * Print the list of public key encrypted packets which we could
- * not decrypt.
- */
-static void
-print_pkenc_list( struct kidlist_item *list, int failed )
-{
- for( ; list; list = list->next ) {
- PKT_public_key *pk;
- const char *algstr;
-
- if ( failed && !list->reason )
- continue;
- if ( !failed && list->reason )
- continue;
-
- algstr = pubkey_algo_to_string( list->pubkey_algo );
- pk = m_alloc_clear( sizeof *pk );
-
- if( !algstr )
- algstr = "[?]";
- pk->pubkey_algo = list->pubkey_algo;
- if( !get_pubkey( pk, list->kid ) ) {
- size_t n;
- char *p;
- log_info( _("encrypted with %u-bit %s key, ID %08lX, created %s\n"),
- nbits_from_pk( pk ), algstr, (ulong)list->kid[1],
- strtimestamp(pk->timestamp) );
- fputs(" \"", log_stream() );
- p = get_user_id( list->kid, &n );
- print_utf8_string2 ( log_stream(), p, n, '"' );
- m_free(p);
- fputs("\"\n", log_stream() );
- }
- else {
- log_info(_("encrypted with %s key, ID %08lX\n"),
- algstr, (ulong) list->kid[1] );
- }
- free_public_key( pk );
-
- if( list->reason == G10ERR_NO_SECKEY ) {
- if( is_status_enabled() ) {
- char buf[20];
- sprintf(buf,"%08lX%08lX", (ulong)list->kid[0],
- (ulong)list->kid[1] );
- write_status_text( STATUS_NO_SECKEY, buf );
- }
- }
- else if (list->reason)
- log_info(_("public key decryption failed: %s\n"),
- g10_errstr(list->reason));
- }
-}
-
-
-static void
-proc_encrypted( CTX c, PACKET *pkt )
-{
- int result = 0;
-
- if (!opt.quiet) {
- print_pkenc_list ( c->pkenc_list, 1 );
- print_pkenc_list ( c->pkenc_list, 0 );
- }
-
- write_status( STATUS_BEGIN_DECRYPTION );
-
- /*log_debug("dat: %sencrypted data\n", c->dek?"":"conventional ");*/
- if( opt.list_only )
- result = -1;
- else if( !c->dek && !c->last_was_session_key ) {
- int algo;
- STRING2KEY s2kbuf, *s2k = NULL;
-
- /* assume this is old style conventional encrypted data */
- if ( (algo = opt.def_cipher_algo))
- log_info (_("assuming %s encrypted data\n"),
- cipher_algo_to_string(algo));
- else if ( check_cipher_algo(CIPHER_ALGO_IDEA) ) {
- algo = opt.def_cipher_algo;
- if (!algo)
- algo = opt.s2k_cipher_algo;
- idea_cipher_warn(1);
- log_info (_("IDEA cipher unavailable, "
- "optimistically attempting to use %s instead\n"),
- cipher_algo_to_string(algo));
- }
- else {
- algo = CIPHER_ALGO_IDEA;
- if (!opt.def_digest_algo) {
- /* If no digest is given we assume MD5 */
- s2kbuf.mode = 0;
- s2kbuf.hash_algo = DIGEST_ALGO_MD5;
- s2k = &s2kbuf;
- }
- log_info (_("assuming %s encrypted data\n"), "IDEA");
- }
-
- c->dek = passphrase_to_dek ( NULL, 0, algo, s2k, 0, NULL );
- if (c->dek)
- c->dek->algo_info_printed = 1;
- }
- else if( !c->dek )
- result = G10ERR_NO_SECKEY;
- if( !result )
- result = decrypt_data( c, pkt->pkt.encrypted, c->dek );
-
- m_free(c->dek); c->dek = NULL;
- if( result == -1 )
- ;
- else if( !result || (result==G10ERR_BAD_SIGN && opt.ignore_mdc_error)) {
- write_status( STATUS_DECRYPTION_OKAY );
- if( opt.verbose > 1 )
- log_info(_("decryption okay\n"));
- if( pkt->pkt.encrypted->mdc_method && !result )
- write_status( STATUS_GOODMDC );
- else if(!opt.no_mdc_warn)
- log_info ("WARNING: message was not integrity protected\n");
- }
- else if( result == G10ERR_BAD_SIGN ) {
- log_error(_("WARNING: encrypted message has been manipulated!\n"));
- write_status( STATUS_BADMDC );
- write_status( STATUS_DECRYPTION_FAILED );
- }
- else {
- write_status( STATUS_DECRYPTION_FAILED );
- log_error(_("decryption failed: %s\n"), g10_errstr(result));
- /* Hmmm: does this work when we have encrypted using multiple
- * ways to specify the session key (symmmetric and PK)*/
- }
- free_packet(pkt);
- c->last_was_session_key = 0;
- write_status( STATUS_END_DECRYPTION );
-}
-
-
-
-static void
-proc_plaintext( CTX c, PACKET *pkt )
-{
- PKT_plaintext *pt = pkt->pkt.plaintext;
- int any, clearsig, only_md5, rc;
- KBNODE n;
-
- if( pt->namelen == 8 && !memcmp( pt->name, "_CONSOLE", 8 ) )
- log_info(_("NOTE: sender requested \"for-your-eyes-only\"\n"));
- else if( opt.verbose )
- log_info(_("original file name='%.*s'\n"), pt->namelen, pt->name);
- free_md_filter_context( &c->mfx );
- c->mfx.md = md_open( 0, 0);
- /* fixme: we may need to push the textfilter if we have sigclass 1
- * and no armoring - Not yet tested
- * Hmmm, why don't we need it at all if we have sigclass 1
- * Should we assume that plaintext in mode 't' has always sigclass 1??
- * See: Russ Allbery's mail 1999-02-09
- */
- any = clearsig = only_md5 = 0;
- for(n=c->list; n; n = n->next ) {
- if( n->pkt->pkttype == PKT_ONEPASS_SIG ) {
- if( n->pkt->pkt.onepass_sig->digest_algo ) {
- md_enable( c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo );
- if( !any && n->pkt->pkt.onepass_sig->digest_algo
- == DIGEST_ALGO_MD5 )
- only_md5 = 1;
- else
- only_md5 = 0;
- any = 1;
- }
- if( n->pkt->pkt.onepass_sig->sig_class != 0x01 )
- only_md5 = 0;
- }
- else if( n->pkt->pkttype == PKT_GPG_CONTROL
- && n->pkt->pkt.gpg_control->control
- == CTRLPKT_CLEARSIGN_START ) {
- size_t datalen = n->pkt->pkt.gpg_control->datalen;
- const byte *data = n->pkt->pkt.gpg_control->data;
-
- /* check that we have at least the sigclass and one hash */
- if ( datalen < 2 )
- log_fatal("invalid control packet CTRLPKT_CLEARSIGN_START\n");
- /* Note that we don't set the clearsig flag for not-dash-escaped
- * documents */
- clearsig = (*data == 0x01);
- for( data++, datalen--; datalen; datalen--, data++ )
- md_enable( c->mfx.md, *data );
- any = 1;
- break; /* no pass signature pakets are expected */
- }
- }
-
- if( !any && !opt.skip_verify ) {
- /* no onepass sig packet: enable all standard algos */
- md_enable( c->mfx.md, DIGEST_ALGO_RMD160 );
- md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
- md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
- }
- if( opt.pgp2_workarounds && only_md5 && !opt.skip_verify ) {
- /* This is a kludge to work around a bug in pgp2. It does only
- * catch those mails which are armored. To catch the non-armored
- * pgp mails we could see whether there is the signature packet
- * in front of the plaintext. If someone needs this, send me a patch.
- */
- c->mfx.md2 = md_open( DIGEST_ALGO_MD5, 0);
- }
- if ( DBG_HASHING ) {
- md_start_debug( c->mfx.md, "verify" );
- if ( c->mfx.md2 )
- md_start_debug( c->mfx.md2, "verify2" );
- }
- if ( c->pipemode.op == 'B' )
- rc = handle_plaintext( pt, &c->mfx, 1, 0 );
- else {
- rc = handle_plaintext( pt, &c->mfx, c->sigs_only, clearsig );
- if( rc == G10ERR_CREATE_FILE && !c->sigs_only) {
- /* can't write output but we hash it anyway to
- * check the signature */
- rc = handle_plaintext( pt, &c->mfx, 1, clearsig );
- }
- }
- if( rc )
- log_error( "handle plaintext failed: %s\n", g10_errstr(rc));
- free_packet(pkt);
- c->last_was_session_key = 0;
-
- /* We add a marker control packet instead of the plaintext packet.
- * This is so that we can later detect invalid packet sequences.
- */
- n = new_kbnode (create_gpg_control (CTRLPKT_PLAINTEXT_MARK, NULL, 0));
- if (c->list)
- add_kbnode (c->list, n);
- else
- c->list = n;
-}
-
-
-static int
-proc_compressed_cb( IOBUF a, void *info )
-{
- return proc_signature_packets( info, a, ((CTX)info)->signed_data,
- ((CTX)info)->sigfilename );
-}
-
-static int
-proc_encrypt_cb( IOBUF a, void *info )
-{
- return proc_encryption_packets( info, a );
-}
-
-static void
-proc_compressed( CTX c, PACKET *pkt )
-{
- PKT_compressed *zd = pkt->pkt.compressed;
- int rc;
-
- /*printf("zip: compressed data packet\n");*/
- if( c->sigs_only )
- rc = handle_compressed( c, zd, proc_compressed_cb, c );
- else if( c->encrypt_only )
- rc = handle_compressed( c, zd, proc_encrypt_cb, c );
- else
- rc = handle_compressed( c, zd, NULL, NULL );
- if( rc )
- log_error("uncompressing failed: %s\n", g10_errstr(rc));
- free_packet(pkt);
- c->last_was_session_key = 0;
-}
-
-/****************
- * check the signature
- * Returns: 0 = valid signature or an error code
- */
-static int
-do_check_sig( CTX c, KBNODE node, int *is_selfsig, int *is_expkey )
-{
- PKT_signature *sig;
- MD_HANDLE md = NULL, md2 = NULL;
- int algo, rc, dum2;
- u32 dummy;
-
- if(!is_expkey)
- is_expkey=&dum2;
-
- assert( node->pkt->pkttype == PKT_SIGNATURE );
- if( is_selfsig )
- *is_selfsig = 0;
- sig = node->pkt->pkt.signature;
-
- algo = sig->digest_algo;
- if( (rc=check_digest_algo(algo)) )
- return rc;
-
- if( sig->sig_class == 0x00 ) {
- if( c->mfx.md )
- md = md_copy( c->mfx.md );
- else /* detached signature */
- md = md_open( 0, 0 ); /* signature_check() will enable the md*/
- }
- else if( sig->sig_class == 0x01 ) {
- /* how do we know that we have to hash the (already hashed) text
- * in canonical mode ??? (calculating both modes???) */
- if( c->mfx.md ) {
- md = md_copy( c->mfx.md );
- if( c->mfx.md2 )
- md2 = md_copy( c->mfx.md2 );
- }
- else { /* detached signature */
- log_debug("Do we really need this here?");
- md = md_open( 0, 0 ); /* signature_check() will enable the md*/
- md2 = md_open( 0, 0 );
- }
- }
- else if( (sig->sig_class&~3) == 0x10
- || sig->sig_class == 0x18
- || sig->sig_class == 0x1f
- || sig->sig_class == 0x20
- || sig->sig_class == 0x28
- || sig->sig_class == 0x30 ) {
- if( c->list->pkt->pkttype == PKT_PUBLIC_KEY
- || c->list->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- return check_key_signature( c->list, node, is_selfsig );
- }
- else if( sig->sig_class == 0x20 ) {
- log_info(_("standalone revocation - "
- "use \"gpg --import\" to apply\n"));
- return G10ERR_NOT_PROCESSED;
- }
- else {
- log_error("invalid root packet for sigclass %02x\n",
- sig->sig_class);
- return G10ERR_SIG_CLASS;
- }
- }
- else
- return G10ERR_SIG_CLASS;
- rc = signature_check2( sig, md, &dummy, is_expkey );
- if( rc == G10ERR_BAD_SIGN && md2 )
- rc = signature_check2( sig, md2, &dummy, is_expkey );
- md_close(md);
- md_close(md2);
-
- return rc;
-}
-
-
-static void
-print_userid( PACKET *pkt )
-{
- if( !pkt )
- BUG();
- if( pkt->pkttype != PKT_USER_ID ) {
- printf("ERROR: unexpected packet type %d", pkt->pkttype );
- return;
- }
- if( opt.with_colons )
- {
- if(pkt->pkt.user_id->attrib_data)
- printf("%u %lu",
- pkt->pkt.user_id->numattribs,
- pkt->pkt.user_id->attrib_len);
- else
- print_string( stdout, pkt->pkt.user_id->name,
- pkt->pkt.user_id->len, ':');
- }
- else
- print_utf8_string( stdout, pkt->pkt.user_id->name,
- pkt->pkt.user_id->len );
-}
-
-
-static void
-print_notation_data( PKT_signature *sig )
-{
- size_t n, n1, n2;
- const byte *p;
- int seq = 0;
-
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&n,&seq,NULL))) {
- if( n < 8 ) {
- log_info(_("WARNING: invalid notation data found\n"));
- return;
- }
- if( !(*p & 0x80) )
- return; /* not human readable */
- n1 = (p[4] << 8) | p[5];
- n2 = (p[6] << 8) | p[7];
- p += 8;
- if( 8+n1+n2 != n ) {
- log_info(_("WARNING: invalid notation data found\n"));
- return;
- }
- log_info(_("Notation: ") );
- print_string( log_stream(), p, n1, 0 );
- putc( '=', log_stream() );
- print_string( log_stream(), p+n1, n2, 0 );
- putc( '\n', log_stream() );
- write_status_buffer ( STATUS_NOTATION_NAME, p , n1, 0 );
- write_status_buffer ( STATUS_NOTATION_DATA, p+n1, n2, 50 );
- }
-
- seq=0;
-
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&n,&seq,NULL))) {
- log_info(_("Policy: ") );
- print_string( log_stream(), p, n, 0 );
- putc( '\n', log_stream() );
- write_status_buffer ( STATUS_POLICY_URL, p, n, 0 );
- }
-
- /* Now check whether the key of this signature has some
- * notation data */
-
- /* TODO */
-}
-
-
-/****************
- * List the certificate in a user friendly way
- */
-
-static void
-list_node( CTX c, KBNODE node )
-{
- int any=0;
- int mainkey;
-
- if( !node )
- ;
- else if( (mainkey = (node->pkt->pkttype == PKT_PUBLIC_KEY) )
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- PKT_public_key *pk = node->pkt->pkt.public_key;
-
- if( opt.with_colons ) {
- u32 keyid[2];
- keyid_from_pk( pk, keyid );
- if( mainkey ) {
- c->local_id = pk->local_id;
- c->trustletter = opt.fast_list_mode?
- 0 : get_validity_info( pk, NULL );
- }
- printf("%s:", mainkey? "pub":"sub" );
- if( c->trustletter )
- putchar( c->trustletter );
- printf(":%u:%d:%08lX%08lX:%s:%s:",
- nbits_from_pk( pk ),
- pk->pubkey_algo,
- (ulong)keyid[0],(ulong)keyid[1],
- colon_datestr_from_pk( pk ),
- colon_strtime (pk->expiredate) );
- if( c->local_id )
- printf("%lu", c->local_id );
- putchar(':');
- if( mainkey && !opt.fast_list_mode )
- putchar( get_ownertrust_info (pk) );
- putchar(':');
- if( node->next && node->next->pkt->pkttype == PKT_RING_TRUST) {
- putchar('\n'); any=1;
- if( opt.fingerprint )
- print_fingerprint( pk, NULL, 0 );
- printf("rtv:1:%u:\n",
- node->next->pkt->pkt.ring_trust->trustval );
- }
- }
- else
- printf("%s %4u%c/%08lX %s ",
- mainkey? "pub":"sub",
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid_from_pk( pk, NULL ),
- datestr_from_pk( pk ) );
-
- if( mainkey ) {
- /* and now list all userids with their signatures */
- for( node = node->next; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_SIGNATURE ) {
- if( !any ) {
- if( node->pkt->pkt.signature->sig_class == 0x20 )
- puts("[revoked]");
- else
- putchar('\n');
- any = 1;
- }
- list_node(c, node );
- }
- else if( node->pkt->pkttype == PKT_USER_ID ) {
- if( any ) {
- if( opt.with_colons )
- printf("%s:::::::::",
- node->pkt->pkt.user_id->attrib_data?"uat":"uid");
- else
- printf( "uid%*s", 28, "" );
- }
- print_userid( node->pkt );
- if( opt.with_colons )
- putchar(':');
- putchar('\n');
- if( opt.fingerprint && !any )
- print_fingerprint( pk, NULL, 0 );
- if( node->next
- && node->next->pkt->pkttype == PKT_RING_TRUST ) {
- printf("rtv:2:%u:\n",
- node->next->pkt->pkt.ring_trust->trustval );
- }
- any=1;
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- if( !any ) {
- putchar('\n');
- any = 1;
- }
- list_node(c, node );
- }
- }
- }
- else if( pk->expiredate ) { /* of subkey */
- printf(_(" [expires: %s]"), expirestr_from_pk( pk ) );
- }
-
- if( !any )
- putchar('\n');
- if( !mainkey && opt.fingerprint > 1 )
- print_fingerprint( pk, NULL, 0 );
- }
- else if( (mainkey = (node->pkt->pkttype == PKT_SECRET_KEY) )
- || node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *sk = node->pkt->pkt.secret_key;
-
- if( opt.with_colons ) {
- u32 keyid[2];
- keyid_from_sk( sk, keyid );
- printf("%s::%u:%d:%08lX%08lX:%s:%s:::",
- mainkey? "sec":"ssb",
- nbits_from_sk( sk ),
- sk->pubkey_algo,
- (ulong)keyid[0],(ulong)keyid[1],
- colon_datestr_from_sk( sk ),
- colon_strtime (sk->expiredate)
- /* fixme: add LID */ );
- }
- else
- printf("%s %4u%c/%08lX %s ",
- mainkey? "sec":"ssb",
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)keyid_from_sk( sk, NULL ),
- datestr_from_sk( sk ) );
- if( mainkey ) {
- /* and now list all userids with their signatures */
- for( node = node->next; node; node = node->next ) {
- if( node->pkt->pkttype == PKT_SIGNATURE ) {
- if( !any ) {
- if( node->pkt->pkt.signature->sig_class == 0x20 )
- puts("[revoked]");
- else
- putchar('\n');
- any = 1;
- }
- list_node(c, node );
- }
- else if( node->pkt->pkttype == PKT_USER_ID ) {
- if( any ) {
- if( opt.with_colons )
- printf("%s:::::::::",
- node->pkt->pkt.user_id->attrib_data?"uat":"uid");
- else
- printf( "uid%*s", 28, "" );
- }
- print_userid( node->pkt );
- if( opt.with_colons )
- putchar(':');
- putchar('\n');
- if( opt.fingerprint && !any )
- print_fingerprint( NULL, sk, 0 );
- any=1;
- }
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- if( !any ) {
- putchar('\n');
- any = 1;
- }
- list_node(c, node );
- }
- }
- }
- if( !any )
- putchar('\n');
- if( !mainkey && opt.fingerprint > 1 )
- print_fingerprint( NULL, sk, 0 );
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- int is_selfsig = 0;
- int rc2=0;
- size_t n;
- char *p;
- int sigrc = ' ';
-
- if( !opt.list_sigs )
- return;
-
- if( sig->sig_class == 0x20 || sig->sig_class == 0x30 )
- fputs("rev", stdout);
- else
- fputs("sig", stdout);
- if( opt.check_sigs ) {
- fflush(stdout);
- switch( (rc2=do_check_sig( c, node, &is_selfsig, NULL )) ) {
- case 0: sigrc = '!'; break;
- case G10ERR_BAD_SIGN: sigrc = '-'; break;
- case G10ERR_NO_PUBKEY:
- case G10ERR_UNU_PUBKEY: sigrc = '?'; break;
- default: sigrc = '%'; break;
- }
- }
- else { /* check whether this is a self signature */
- u32 keyid[2];
-
- if( c->list->pkt->pkttype == PKT_PUBLIC_KEY
- || c->list->pkt->pkttype == PKT_SECRET_KEY ) {
- if( c->list->pkt->pkttype == PKT_PUBLIC_KEY )
- keyid_from_pk( c->list->pkt->pkt.public_key, keyid );
- else
- keyid_from_sk( c->list->pkt->pkt.secret_key, keyid );
-
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
- is_selfsig = 1;
- }
- }
- if( opt.with_colons ) {
- putchar(':');
- if( sigrc != ' ' )
- putchar(sigrc);
- printf("::%d:%08lX%08lX:%s::::", sig->pubkey_algo,
- (ulong)sig->keyid[0],
- (ulong)sig->keyid[1], colon_datestr_from_sig(sig));
- }
- else
- printf("%c %08lX %s ",
- sigrc, (ulong)sig->keyid[1], datestr_from_sig(sig));
- if( sigrc == '%' )
- printf("[%s] ", g10_errstr(rc2) );
- else if( sigrc == '?' )
- ;
- else if( is_selfsig ) {
- if( opt.with_colons )
- putchar(':');
- fputs( sig->sig_class == 0x18? "[keybind]":"[selfsig]", stdout);
- if( opt.with_colons )
- putchar(':');
- }
- else if( !opt.fast_list_mode ) {
- p = get_user_id( sig->keyid, &n );
- print_string( stdout, p, n, opt.with_colons );
- m_free(p);
- }
- if( opt.with_colons )
- printf(":%02x%c:", sig->sig_class, sig->flags.exportable?'x':'l');
- putchar('\n');
- }
- else
- log_error("invalid node with packet of type %d\n", node->pkt->pkttype);
-}
-
-
-
-int
-proc_packets( void *anchor, IOBUF a )
-{
- int rc;
- CTX c = m_alloc_clear( sizeof *c );
-
- c->anchor = anchor;
- rc = do_proc_packets( c, a );
- m_free( c );
- return rc;
-}
-
-
-
-int
-proc_signature_packets( void *anchor, IOBUF a,
- STRLIST signedfiles, const char *sigfilename )
-{
- CTX c = m_alloc_clear( sizeof *c );
- int rc;
-
- c->anchor = anchor;
- c->sigs_only = 1;
- c->signed_data = signedfiles;
- c->sigfilename = sigfilename;
- rc = do_proc_packets( c, a );
- m_free( c );
- return rc;
-}
-
-int
-proc_encryption_packets( void *anchor, IOBUF a )
-{
- CTX c = m_alloc_clear( sizeof *c );
- int rc;
-
- c->anchor = anchor;
- c->encrypt_only = 1;
- rc = do_proc_packets( c, a );
- m_free( c );
- return rc;
-}
-
-
-int
-do_proc_packets( CTX c, IOBUF a )
-{
- PACKET *pkt = m_alloc( sizeof *pkt );
- int rc=0;
- int any_data=0;
- int newpkt;
-
- c->iobuf = a;
- init_packet(pkt);
- while( (rc=parse_packet(a, pkt)) != -1 ) {
- any_data = 1;
- if( rc ) {
- free_packet(pkt);
- /* stop processing hwne an invalid packet has been encountered
- * but don't do so when we are doing a --list-packet. */
- if( rc == G10ERR_INVALID_PACKET && opt.list_packets != 2 )
- break;
- continue;
- }
- newpkt = -1;
- if( opt.list_packets ) {
- switch( pkt->pkttype ) {
- case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break;
- case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break;
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break;
- case PKT_COMPRESSED: proc_compressed( c, pkt ); break;
- default: newpkt = 0; break;
- }
- }
- else if( c->sigs_only ) {
- switch( pkt->pkttype ) {
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- case PKT_USER_ID:
- case PKT_SYMKEY_ENC:
- case PKT_PUBKEY_ENC:
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC:
- write_status_text( STATUS_UNEXPECTED, "0" );
- rc = G10ERR_UNEXPECTED;
- goto leave;
- case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break;
- case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break;
- case PKT_COMPRESSED: proc_compressed( c, pkt ); break;
- case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break;
- case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break;
- default: newpkt = 0; break;
- }
- }
- else if( c->encrypt_only ) {
- switch( pkt->pkttype ) {
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- case PKT_USER_ID:
- write_status_text( STATUS_UNEXPECTED, "0" );
- rc = G10ERR_UNEXPECTED;
- goto leave;
- case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break;
- case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break;
- case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break;
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break;
- case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break;
- case PKT_COMPRESSED: proc_compressed( c, pkt ); break;
- case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break;
- case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break;
- default: newpkt = 0; break;
- }
- }
- else {
- switch( pkt->pkttype ) {
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- release_list( c );
- c->list = new_kbnode( pkt );
- newpkt = 1;
- break;
- case PKT_PUBLIC_SUBKEY:
- case PKT_SECRET_SUBKEY:
- newpkt = add_subkey( c, pkt );
- break;
- case PKT_USER_ID: newpkt = add_user_id( c, pkt ); break;
- case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break;
- case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break;
- case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break;
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break;
- case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break;
- case PKT_COMPRESSED: proc_compressed( c, pkt ); break;
- case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break;
- case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break;
- case PKT_RING_TRUST: newpkt = add_ring_trust( c, pkt ); break;
- default: newpkt = 0; break;
- }
- }
- /* This is a very ugly construct and frankly, I don't remember why
- * I used it. Adding the MDC check here is a hack.
- * The right solution is to initiate another context for encrypted
- * packet and not to reuse the current one ... It works right
- * when there is a compression packet inbetween which adds just
- * an extra layer.
- * Hmmm: Rewrite this whole module here??
- */
- if( pkt->pkttype != PKT_SIGNATURE && pkt->pkttype != PKT_MDC )
- c->have_data = pkt->pkttype == PKT_PLAINTEXT;
-
- if( newpkt == -1 )
- ;
- else if( newpkt ) {
- pkt = m_alloc( sizeof *pkt );
- init_packet(pkt);
- }
- else
- free_packet(pkt);
- if ( c->pipemode.stop_now ) {
- /* we won't get an EOF in pipemode, so we have to
- * break the loop here */
- rc = -1;
- break;
- }
- }
- if( rc == G10ERR_INVALID_PACKET )
- write_status_text( STATUS_NODATA, "3" );
- if( any_data )
- rc = 0;
- else if( rc == -1 )
- write_status_text( STATUS_NODATA, "2" );
-
-
- leave:
- release_list( c );
- m_free(c->dek);
- free_packet( pkt );
- m_free( pkt );
- free_md_filter_context( &c->mfx );
- return rc;
-}
-
-
-static int
-check_sig_and_print( CTX c, KBNODE node )
-{
- PKT_signature *sig = node->pkt->pkt.signature;
- const char *astr, *tstr;
- int rc, is_expkey=0;
-
- if( opt.skip_verify ) {
- log_info(_("signature verification suppressed\n"));
- return 0;
- }
-
- /* It is not in all cases possible to check multiple signatures:
- * PGP 2 (which is also allowed by OpenPGP), does use the packet
- * sequence: sig+data, OpenPGP does use onepas+data=sig and GnuPG
- * sometimes uses (because I did'nt read the specs right) data+sig.
- * Because it is possible to create multiple signatures with
- * different packet sequence (e.g. data+sig and sig+data) it might
- * not be possible to get it right: let's say we have:
- * data+sig, sig+data,sig+data and we have not yet encountered the last
- * data, we could also see this a one data with 2 signatures and then
- * data+sig.
- * To protect against this we check that all signatures follow
- * without any intermediate packets. Note, that we won't get this
- * error when we use onepass packets or cleartext signatures because
- * we reset the list every time
- *
- * FIXME: Now that we have these marker packets, we should create a
- * real grammar and check against this.
- */
- {
- KBNODE n;
- int n_sig=0;
-
- for (n=c->list; n; n=n->next ) {
- if ( n->pkt->pkttype == PKT_SIGNATURE )
- n_sig++;
- }
- if (n_sig > 1) { /* more than one signature - check sequence */
- int tmp, onepass;
-
- for (tmp=onepass=0,n=c->list; n; n=n->next ) {
- if (n->pkt->pkttype == PKT_ONEPASS_SIG)
- onepass++;
- else if (n->pkt->pkttype == PKT_GPG_CONTROL
- && n->pkt->pkt.gpg_control->control
- == CTRLPKT_CLEARSIGN_START ) {
- onepass++; /* handle the same way as a onepass */
- }
- else if ( (tmp && n->pkt->pkttype != PKT_SIGNATURE) ) {
- log_error(_("can't handle these multiple signatures\n"));
- return 0;
- }
- else if ( n->pkt->pkttype == PKT_SIGNATURE )
- tmp = 1;
- else if (!tmp && !onepass
- && n->pkt->pkttype == PKT_GPG_CONTROL
- && n->pkt->pkt.gpg_control->control
- == CTRLPKT_PLAINTEXT_MARK ) {
- /* plaintext before signatures but no one-pass packets*/
- log_error(_("can't handle these multiple signatures\n"));
- return 0;
- }
- }
- }
- }
-
-
-
- tstr = asctimestamp(sig->timestamp);
- astr = pubkey_algo_to_string( sig->pubkey_algo );
- log_info(_("Signature made %.*s using %s key ID %08lX\n"),
- (int)strlen(tstr), tstr, astr? astr: "?", (ulong)sig->keyid[1] );
-
- rc = do_check_sig(c, node, NULL, &is_expkey );
- if( rc == G10ERR_NO_PUBKEY && opt.keyserver_scheme && opt.keyserver_options.auto_key_retrieve) {
- if( keyserver_import_keyid ( sig->keyid )==0 )
- rc = do_check_sig(c, node, NULL, &is_expkey );
- }
- if( !rc || rc == G10ERR_BAD_SIGN ) {
- KBNODE un, keyblock;
- int count=0, statno;
- char keyid_str[50];
-
- if(rc)
- statno=STATUS_BADSIG;
- else if(sig->flags.expired)
- statno=STATUS_EXPSIG;
- else if(is_expkey)
- statno=STATUS_EXPKEYSIG;
- else
- statno=STATUS_GOODSIG;
-
- keyblock = get_pubkeyblock( sig->keyid );
-
- sprintf (keyid_str, "%08lX%08lX [uncertain] ",
- (ulong)sig->keyid[0], (ulong)sig->keyid[1]);
-
- /* find and print the primary user ID */
- for( un=keyblock; un; un = un->next ) {
- if( un->pkt->pkttype != PKT_USER_ID )
- continue;
- if ( !un->pkt->pkt.user_id->created )
- continue;
- if ( un->pkt->pkt.user_id->is_revoked )
- continue;
- if ( un->pkt->pkt.user_id->is_expired )
- continue;
- if ( !un->pkt->pkt.user_id->is_primary )
- continue;
- /* We want the textual user ID here */
- if ( un->pkt->pkt.user_id->attrib_data )
- continue;
-
- keyid_str[17] = 0; /* cut off the "[uncertain]" part */
- write_status_text_and_buffer (statno, keyid_str,
- un->pkt->pkt.user_id->name,
- un->pkt->pkt.user_id->len,
- -1 );
-
- log_info(rc? _("BAD signature from \"")
- : sig->flags.expired ? _("Expired signature from \"")
- : _("Good signature from \""));
- print_utf8_string( log_stream(), un->pkt->pkt.user_id->name,
- un->pkt->pkt.user_id->len );
- fputs("\"\n", log_stream() );
- count++;
- }
- if( !count ) { /* just in case that we have no valid textual
- userid */
- /* Try for an invalid textual userid */
- for( un=keyblock; un; un = un->next ) {
- if( un->pkt->pkttype == PKT_USER_ID &&
- !un->pkt->pkt.user_id->attrib_data )
- break;
- }
-
- /* Try for any userid at all */
- if(!un) {
- for( un=keyblock; un; un = un->next ) {
- if( un->pkt->pkttype == PKT_USER_ID )
- break;
- }
- }
-
- if (opt.always_trust || !un)
- keyid_str[17] = 0; /* cut off the "[uncertain]" part */
-
- write_status_text_and_buffer (statno, keyid_str,
- un? un->pkt->pkt.user_id->name:"[?]",
- un? un->pkt->pkt.user_id->len:3,
- -1 );
-
- log_info(rc? _("BAD signature from \"")
- : sig->flags.expired ? _("Expired signature from \"")
- : _("Good signature from \""));
- if (!opt.always_trust && un) {
- fputs(_("[uncertain]"), log_stream() );
- putc(' ', log_stream() );
- }
- print_utf8_string( log_stream(),
- un? un->pkt->pkt.user_id->name:"[?]",
- un? un->pkt->pkt.user_id->len:3 );
- fputs("\"\n", log_stream() );
- }
-
- /* If we have a good signature and already printed
- * the primary user ID, print all the other user IDs */
- if ( count && !rc ) {
- PKT_public_key *pk=NULL;
- for( un=keyblock; un; un = un->next ) {
- if(un->pkt->pkttype==PKT_PUBLIC_KEY)
- pk=un->pkt->pkt.public_key;
- if( un->pkt->pkttype != PKT_USER_ID )
- continue;
- if ( un->pkt->pkt.user_id->is_revoked )
- continue;
- if ( un->pkt->pkt.user_id->is_expired )
- continue;
- /* Only skip textual primaries */
- if ( un->pkt->pkt.user_id->is_primary &&
- !un->pkt->pkt.user_id->attrib_data )
- continue;
-
- if(opt.show_photos && un->pkt->pkt.user_id->attrib_data)
- show_photos(un->pkt->pkt.user_id->attribs,
- un->pkt->pkt.user_id->numattribs,pk,NULL);
-
- log_info( _(" aka \""));
- print_utf8_string( log_stream(), un->pkt->pkt.user_id->name,
- un->pkt->pkt.user_id->len );
- fputs("\"\n", log_stream() );
- }
- }
- release_kbnode( keyblock );
-
- if( !rc )
- print_notation_data( sig );
-
- if( !rc && is_status_enabled() ) {
- /* print a status response with the fingerprint */
- PKT_public_key *pk = m_alloc_clear( sizeof *pk );
-
- if( !get_pubkey( pk, sig->keyid ) ) {
- byte array[MAX_FINGERPRINT_LEN], *p;
- char buf[MAX_FINGERPRINT_LEN*2+72];
- size_t i, n;
-
- fingerprint_from_pk( pk, array, &n );
- p = array;
- for(i=0; i < n ; i++, p++ )
- sprintf(buf+2*i, "%02X", *p );
- sprintf(buf+strlen(buf), " %s %lu %lu",
- strtimestamp( sig->timestamp ),
- (ulong)sig->timestamp,
- (ulong)sig->expiredate );
- write_status_text( STATUS_VALIDSIG, buf );
- }
- free_public_key( pk );
- }
-
- if( !rc )
- rc = check_signatures_trust( sig );
-
- if(sig->flags.expired)
- {
- log_info("Signature expired %s\n",asctimestamp(sig->expiredate));
- rc=G10ERR_GENERAL; /* need a better error here? */
- }
- else if(sig->expiredate)
- log_info("Signature expires %s\n",asctimestamp(sig->expiredate));
-
- if( rc )
- g10_errors_seen = 1;
- if( opt.batch && rc )
- g10_exit(1);
- }
- else {
- char buf[50];
- sprintf(buf, "%08lX%08lX %d %d %02x %lu %d",
- (ulong)sig->keyid[0], (ulong)sig->keyid[1],
- sig->pubkey_algo, sig->digest_algo,
- sig->sig_class, (ulong)sig->timestamp, rc );
- write_status_text( STATUS_ERRSIG, buf );
- if( rc == G10ERR_NO_PUBKEY ) {
- buf[16] = 0;
- write_status_text( STATUS_NO_PUBKEY, buf );
- }
- if( rc != G10ERR_NOT_PROCESSED )
- log_error(_("Can't check signature: %s\n"), g10_errstr(rc) );
- }
- return rc;
-}
-
-
-/****************
- * Process the tree which starts at node
- */
-static void
-proc_tree( CTX c, KBNODE node )
-{
- KBNODE n1;
- int rc;
-
- if( opt.list_packets || opt.list_only )
- return;
-
- /* we must skip our special plaintext marker packets here becuase
- they may be the root packet. These packets are only used in
- addionla checks and skipping them here doesn't matter */
- while ( node
- && node->pkt->pkttype == PKT_GPG_CONTROL
- && node->pkt->pkt.gpg_control->control
- == CTRLPKT_PLAINTEXT_MARK ) {
- node = node->next;
- }
- if (!node)
- return;
-
- c->local_id = 0;
- c->trustletter = ' ';
- if( node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- merge_keys_and_selfsig( node );
- list_node( c, node );
- }
- else if( node->pkt->pkttype == PKT_SECRET_KEY ) {
- merge_keys_and_selfsig( node );
- list_node( c, node );
- }
- else if( node->pkt->pkttype == PKT_ONEPASS_SIG ) {
- /* check all signatures */
- if( !c->have_data ) {
- free_md_filter_context( &c->mfx );
- /* prepare to create all requested message digests */
- c->mfx.md = md_open(0, 0);
-
- /* fixme: why looking for the signature packet and not 1passpacket*/
- for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) {
- md_enable( c->mfx.md, n1->pkt->pkt.signature->digest_algo);
- }
- /* ask for file and hash it */
- if( c->sigs_only ) {
- rc = hash_datafiles( c->mfx.md, NULL,
- c->signed_data, c->sigfilename,
- n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 );
- }
- else {
- rc = ask_for_detached_datafile( c->mfx.md, c->mfx.md2,
- iobuf_get_real_fname(c->iobuf),
- n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 );
- }
- if( rc ) {
- log_error("can't hash datafile: %s\n", g10_errstr(rc));
- return;
- }
- }
- else if ( c->signed_data ) {
- log_error (_("not a detached signature\n") );
- return;
- }
-
- for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); )
- check_sig_and_print( c, n1 );
- }
- else if( node->pkt->pkttype == PKT_GPG_CONTROL
- && node->pkt->pkt.gpg_control->control
- == CTRLPKT_CLEARSIGN_START ) {
- /* clear text signed message */
- if( !c->have_data ) {
- log_error("cleartext signature without data\n" );
- return;
- }
- else if ( c->signed_data ) {
- log_error (_("not a detached signature\n") );
- return;
- }
-
- for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); )
- check_sig_and_print( c, n1 );
- }
- else if( node->pkt->pkttype == PKT_SIGNATURE ) {
- PKT_signature *sig = node->pkt->pkt.signature;
-
- if( sig->sig_class != 0x00 && sig->sig_class != 0x01 )
- log_info(_("standalone signature of class 0x%02x\n"),
- sig->sig_class);
- else if( !c->have_data ) {
- /* detached signature */
- free_md_filter_context( &c->mfx );
- c->mfx.md = md_open(sig->digest_algo, 0);
- if( !opt.pgp2_workarounds )
- ;
- else if( sig->digest_algo == DIGEST_ALGO_MD5
- && is_RSA( sig->pubkey_algo ) ) {
- /* enable a workaround for a pgp2 bug */
- c->mfx.md2 = md_open( DIGEST_ALGO_MD5, 0 );
- }
- else if( sig->digest_algo == DIGEST_ALGO_SHA1
- && sig->pubkey_algo == PUBKEY_ALGO_DSA
- && sig->sig_class == 0x01 ) {
- /* enable the workaround also for pgp5 when the detached
- * signature has been created in textmode */
- c->mfx.md2 = md_open( sig->digest_algo, 0 );
- }
- #if 0 /* workaround disabled */
- /* Here we have another hack to work around a pgp 2 bug
- * It works by not using the textmode for detached signatures;
- * this will let the first signature check (on md) fail
- * but the second one (on md2) which adds an extra CR should
- * then produce the "correct" hash. This is very, very ugly
- * hack but it may help in some cases (and break others)
- */
- /* c->mfx.md2? 0 :(sig->sig_class == 0x01) */
- #endif
- if ( DBG_HASHING ) {
- md_start_debug( c->mfx.md, "verify" );
- if ( c->mfx.md2 )
- md_start_debug( c->mfx.md2, "verify2" );
- }
- if( c->sigs_only ) {
- rc = hash_datafiles( c->mfx.md, c->mfx.md2,
- c->signed_data, c->sigfilename,
- (sig->sig_class == 0x01) );
- }
- else {
- rc = ask_for_detached_datafile( c->mfx.md, c->mfx.md2,
- iobuf_get_real_fname(c->iobuf),
- (sig->sig_class == 0x01) );
- }
- if( rc ) {
- log_error("can't hash datafile: %s\n", g10_errstr(rc));
- return;
- }
- }
- else if ( c->signed_data ) {
- log_error (_("not a detached signature\n") );
- return;
- }
- else if ( c->pipemode.op == 'B' )
- ; /* this is a detached signature trough the pipemode handler */
- else if (!opt.quiet)
- log_info(_("old style (PGP 2.x) signature\n"));
-
- for( n1 = node; n1; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )) )
- check_sig_and_print( c, n1 );
- }
- else {
- dump_kbnode (c->list);
- log_error(_("invalid root packet detected in proc_tree()\n"));
- dump_kbnode (node);
- }
-}
-
-
-
-
diff --git a/g10/misc.c b/g10/misc.c
deleted file mode 100644
index ae553eb47..000000000
--- a/g10/misc.c
+++ /dev/null
@@ -1,548 +0,0 @@
-/* misc.c - miscellaneous functions
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2
- #include <asm/sysinfo.h>
- #include <asm/unistd.h>
-#endif
-#ifdef HAVE_SETRLIMIT
- #include <time.h>
- #include <sys/time.h>
- #include <sys/resource.h>
-#endif
-#include "util.h"
-#include "main.h"
-#include "photoid.h"
-#include "options.h"
-#include "i18n.h"
-
-
-const char *g10m_revision_string(int);
-const char *g10c_revision_string(int);
-const char *g10u_revision_string(int);
-
-#ifdef __GNUC__
-volatile
-#endif
- void
-pull_in_libs(void)
-{
- g10m_revision_string(0);
- g10c_revision_string(0);
- g10u_revision_string(0);
-}
-
-
-#if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2
-static int
-setsysinfo(unsigned long op, void *buffer, unsigned long size,
- int *start, void *arg, unsigned long flag)
-{
- return syscall(__NR_osf_setsysinfo, op, buffer, size, start, arg, flag);
-}
-
-void
-trap_unaligned(void)
-{
- unsigned int buf[2];
-
- buf[0] = SSIN_UACPROC;
- buf[1] = UAC_SIGBUS | UAC_NOPRINT;
- setsysinfo(SSI_NVPAIRS, buf, 1, 0, 0, 0);
-}
-#else
-void
-trap_unaligned(void)
-{ /* dummy */
-}
-#endif
-
-
-int
-disable_core_dumps()
-{
- #ifdef HAVE_DOSISH_SYSTEM
- return 0;
- #else
- #ifdef HAVE_SETRLIMIT
- struct rlimit limit;
-
- limit.rlim_cur = 0;
- limit.rlim_max = 0;
- if( !setrlimit( RLIMIT_CORE, &limit ) )
- return 0;
- if( errno != EINVAL && errno != ENOSYS )
- log_fatal(_("can't disable core dumps: %s\n"), strerror(errno) );
- #endif
- return 1;
- #endif
-}
-
-
-
-u16
-checksum_u16( unsigned n )
-{
- u16 a;
-
- a = (n >> 8) & 0xff;
- a += n & 0xff;
- return a;
-}
-
-
-u16
-checksum( byte *p, unsigned n )
-{
- u16 a;
-
- for(a=0; n; n-- )
- a += *p++;
- return a;
-}
-
-u16
-checksum_mpi( MPI a )
-{
- u16 csum;
- byte *buffer;
- unsigned nbytes;
- unsigned nbits;
-
- buffer = mpi_get_buffer( a, &nbytes, NULL );
- nbits = mpi_get_nbits(a);
- csum = checksum_u16( nbits );
- csum += checksum( buffer, nbytes );
- m_free( buffer );
- return csum;
-}
-
-u32
-buffer_to_u32( const byte *buffer )
-{
- unsigned long a;
- a = *buffer << 24;
- a |= buffer[1] << 16;
- a |= buffer[2] << 8;
- a |= buffer[3];
- return a;
-}
-
-
-static void
-no_exp_algo(void)
-{
- static int did_note = 0;
-
- if( !did_note ) {
- did_note = 1;
- log_info(_("Experimental algorithms should not be used!\n"));
- }
-}
-
-void
-print_pubkey_algo_note( int algo )
-{
- if( algo >= 100 && algo <= 110 )
- no_exp_algo();
-}
-
-void
-print_cipher_algo_note( int algo )
-{
- if( algo >= 100 && algo <= 110 )
- no_exp_algo();
- else if( algo == CIPHER_ALGO_3DES
- || algo == CIPHER_ALGO_CAST5
- || algo == CIPHER_ALGO_BLOWFISH
- || algo == CIPHER_ALGO_TWOFISH
- || algo == CIPHER_ALGO_RIJNDAEL
- || algo == CIPHER_ALGO_RIJNDAEL192
- || algo == CIPHER_ALGO_RIJNDAEL256
- )
- ;
- else {
- static int did_note = 0;
-
- if( !did_note ) {
- did_note = 1;
- log_info(_("this cipher algorithm is deprecated; "
- "please use a more standard one!\n"));
- }
- }
-}
-
-void
-print_digest_algo_note( int algo )
-{
- if( algo >= 100 && algo <= 110 )
- no_exp_algo();
-}
-
-
-/* Return a string which is used as a kind of process ID */
-const byte *
-get_session_marker( size_t *rlen )
-{
- static byte marker[SIZEOF_UNSIGNED_LONG*2];
- static int initialized;
-
- if ( !initialized ) {
- volatile ulong aa, bb; /* we really want the uninitialized value */
- ulong a, b;
-
- initialized = 1;
- /* also this marker is guessable it is not easy to use this
- * for a faked control packet because an attacker does not
- * have enough control about the time the verification does
- * take place. Of course, we can add just more random but
- * than we need the random generator even for verification
- * tasks - which does not make sense. */
- a = aa ^ (ulong)getpid();
- b = bb ^ (ulong)time(NULL);
- memcpy( marker, &a, SIZEOF_UNSIGNED_LONG );
- memcpy( marker+SIZEOF_UNSIGNED_LONG, &b, SIZEOF_UNSIGNED_LONG );
- }
- *rlen = sizeof(marker);
- return marker;
-}
-
-/****************
- * Wrapper around the libgcrypt function with addional checks on
- * openPGP contraints for the algo ID.
- */
-int
-openpgp_cipher_test_algo( int algo )
-{
- if( algo < 0 || algo > 110 )
- return G10ERR_CIPHER_ALGO;
- return check_cipher_algo(algo);
-}
-
-int
-openpgp_pk_test_algo( int algo, unsigned int usage_flags )
-{
- if( algo < 0 || algo > 110 )
- return G10ERR_PUBKEY_ALGO;
- return check_pubkey_algo2( algo, usage_flags );
-}
-
-int
-openpgp_pk_algo_usage ( int algo )
-{
- int use = 0;
-
- /* they are hardwired in gpg 1.0 */
- switch ( algo ) {
- case PUBKEY_ALGO_RSA:
- use = PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC;
- break;
- case PUBKEY_ALGO_RSA_E:
- use = PUBKEY_USAGE_ENC;
- break;
- case PUBKEY_ALGO_RSA_S:
- use = PUBKEY_USAGE_SIG;
- break;
- case PUBKEY_ALGO_ELGAMAL_E:
- use = PUBKEY_USAGE_ENC;
- break;
- case PUBKEY_ALGO_DSA:
- use = PUBKEY_USAGE_SIG;
- break;
- case PUBKEY_ALGO_ELGAMAL:
- use = PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC;
- break;
- default:
- break;
- }
- return use;
-}
-
-int
-openpgp_md_test_algo( int algo )
-{
- if( algo < 0 || algo > 110 )
- return G10ERR_DIGEST_ALGO;
- return check_digest_algo(algo);
-}
-
-/* Special warning for the IDEA cipher */
-void
-idea_cipher_warn(int show)
-{
- static int warned=0;
-
- if(!warned || show)
- {
- log_info(_("the IDEA cipher plugin is not present\n"));
- log_info(_("please see http://www.gnupg.org/why-not-idea.html "
- "for more information\n"));
- warned=1;
- }
-}
-
-/* Expand %-strings. Returns a string which must be m_freed. Returns
- NULL if the string cannot be expanded (too large). */
-char *
-pct_expando(const char *string,struct expando_args *args)
-{
- const char *ch=string;
- int idx=0,maxlen=0,done=0;
- u32 pk_keyid[2]={0,0},sk_keyid[2]={0,0};
- char *ret=NULL;
-
- if(args->pk)
- keyid_from_pk(args->pk,pk_keyid);
-
- if(args->sk)
- keyid_from_sk(args->sk,sk_keyid);
-
- if(!args->pk && args->sk)
- keyid_from_sk(args->sk,pk_keyid);
-
- while(*ch!='\0')
- {
- char *str=NULL;
-
- if(!done)
- {
- /* 8192 is way bigger than we'll need here */
- if(maxlen>=8192)
- goto fail;
-
- maxlen+=1024;
- ret=m_realloc(ret,maxlen);
- }
-
- done=0;
-
- if(*ch=='%')
- {
- switch(*(ch+1))
- {
- case 's': /* short key id */
- if(idx+8<maxlen)
- {
- sprintf(&ret[idx],"%08lX",(ulong)sk_keyid[1]);
- idx+=8;
- done=1;
- }
- break;
-
- case 'S': /* long key id */
- if(idx+16<maxlen)
- {
- sprintf(&ret[idx],"%08lX%08lX",
- (ulong)sk_keyid[0],(ulong)sk_keyid[1]);
- idx+=16;
- done=1;
- }
- break;
-
- case 'k': /* short key id */
- if(idx+8<maxlen)
- {
- sprintf(&ret[idx],"%08lX",(ulong)pk_keyid[1]);
- idx+=8;
- done=1;
- }
- break;
-
- case 'K': /* long key id */
- if(idx+16<maxlen)
- {
- sprintf(&ret[idx],"%08lX%08lX",
- (ulong)pk_keyid[0],(ulong)pk_keyid[1]);
- idx+=16;
- done=1;
- }
- break;
-
- case 'f': /* fingerprint */
- {
- byte array[MAX_FINGERPRINT_LEN];
- size_t len;
- int i;
-
- if(args->pk)
- fingerprint_from_pk(args->pk,array,&len);
- else
- memset(array,0, (len=MAX_FINGERPRINT_LEN));
-
- if(idx+(len*2)<maxlen)
- {
- for(i=0;i<len;i++)
- {
- sprintf(&ret[idx],"%02X",array[i]);
- idx+=2;
- }
- done=1;
- }
- }
- break;
-
- case 't': /* e.g. "jpg" */
- str=image_type_to_string(args->imagetype,0);
- /* fall through */
-
- case 'T': /* e.g. "image/jpeg" */
- if(str==NULL)
- str=image_type_to_string(args->imagetype,2);
-
- if(idx+strlen(str)<maxlen)
- {
- strcpy(&ret[idx],str);
- idx+=strlen(str);
- done=1;
- }
- break;
-
- case '%':
- if(idx+1<maxlen)
- {
- ret[idx++]='%';
- ret[idx]='\0';
- done=1;
- }
- break;
-
- /* Any unknown %-keys (like %i, %o, %I, and %O) are
- passed through for later expansion. Note this also
- handles the case where the last character in the
- string is a '%' - the terminating \0 will end up here
- and properly terminate the string. */
- default:
- if(idx+2<maxlen)
- {
- ret[idx++]='%';
- ret[idx++]=*(ch+1);
- ret[idx]='\0';
- done=1;
- }
- break;
- }
-
- if(done)
- ch++;
- }
- else
- {
- if(idx+1<maxlen)
- {
- ret[idx++]=*ch;
- ret[idx]='\0';
- done=1;
- }
- }
-
- if(done)
- ch++;
- }
-
- return ret;
-
- fail:
- m_free(ret);
- return NULL;
-}
-
-int
-hextobyte( const char *s )
-{
- int c;
-
- if( *s >= '0' && *s <= '9' )
- c = 16 * (*s - '0');
- else if( *s >= 'A' && *s <= 'F' )
- c = 16 * (10 + *s - 'A');
- else if( *s >= 'a' && *s <= 'f' )
- c = 16 * (10 + *s - 'a');
- else
- return -1;
- s++;
- if( *s >= '0' && *s <= '9' )
- c += *s - '0';
- else if( *s >= 'A' && *s <= 'F' )
- c += 10 + *s - 'A';
- else if( *s >= 'a' && *s <= 'f' )
- c += 10 + *s - 'a';
- else
- return -1;
- return c;
-}
-
-void
-deprecated_warning(const char *configname,unsigned int configlineno,
- const char *option,const char *repl1,const char *repl2)
-{
- if(configname)
- {
- if(strncmp("--",option,2)==0)
- option+=2;
-
- if(strncmp("--",repl1,2)==0)
- repl1+=2;
-
- log_info(_("%s:%d: deprecated option \"%s\"\n"),
- configname,configlineno,option);
- }
- else
- log_info(_("WARNING: \"%s\" is a deprecated option\n"),option);
-
- log_info(_("please use \"%s%s\" instead\n"),repl1,repl2);
-}
-
-const char *
-compress_algo_to_string(int algo)
-{
- const char *s="?";
-
- switch(algo)
- {
- case 0:
- s="Uncompressed";
- break;
-
- case 1:
- s="ZIP";
- break;
-
- case 2:
- s="ZLIB";
- break;
- }
-
- return s;
-}
-
-int
-check_compress_algo(int algo)
-{
- if(algo>=0 && algo<=2)
- return 0;
-
- return G10ERR_COMPR_ALGO;
-}
diff --git a/g10/openfile.c b/g10/openfile.c
deleted file mode 100644
index 83c734dfd..000000000
--- a/g10/openfile.c
+++ /dev/null
@@ -1,362 +0,0 @@
-/* openfile.c
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include "util.h"
-#include "memory.h"
-#include "ttyio.h"
-#include "options.h"
-#include "main.h"
-#include "status.h"
-#include "i18n.h"
-
-#ifdef USE_ONLY_8DOT3
- #define SKELEXT ".skl"
-#else
- #define SKELEXT EXTSEP_S "skel"
-#endif
-
-#if defined (HAVE_DRIVE_LETTERS) || defined (__riscos__)
- #define CMP_FILENAME(a,b) ascii_strcasecmp( (a), (b) )
-#else
- #define CMP_FILENAME(a,b) strcmp( (a), (b) )
-#endif
-
-#ifdef MKDIR_TAKES_ONE_ARG
-# undef mkdir
-# define mkdir(a,b) mkdir(a)
-#endif
-
-/* FIXME: Implement opt.interactive. */
-
-/****************
- * Check whether FNAME exists and ask if it's okay to overwrite an
- * existing one.
- * Returns: True: it's okay to overwrite or the file does not exist
- * False: Do not overwrite
- */
-int
-overwrite_filep( const char *fname )
-{
- if( !fname || (*fname == '-' && !fname[1]) )
- return 1; /* writing to stdout is always okay */
-
- if( access( fname, F_OK ) )
- return 1; /* does not exist */
-
-#ifndef HAVE_DOSISH_SYSTEM
- if ( !strcmp ( fname, "/dev/null" ) )
- return 1; /* does not do any harm */
-#endif
-
- /* fixme: add some backup stuff in case of overwrite */
- if( opt.answer_yes )
- return 1;
- if( opt.answer_no || opt.batch )
- return 0; /* do not overwrite */
-
- tty_printf(_("File `%s' exists. "), fname);
- if( cpr_get_answer_is_yes("openfile.overwrite.okay",
- _("Overwrite (y/N)? ")) )
- return 1;
- return 0;
-}
-
-
-/****************
- * Strip know extensions from iname and return a newly allocated
- * filename. Return NULL if we can't do that.
- */
-char *
-make_outfile_name( const char *iname )
-{
- size_t n;
-
- if( (!iname || (*iname=='-' && !iname[1]) ))
- return m_strdup("-");
-
- n = strlen(iname);
- if( n > 4 && ( !CMP_FILENAME(iname+n-4, EXTSEP_S "gpg")
- || !CMP_FILENAME(iname+n-4, EXTSEP_S "pgp")
- || !CMP_FILENAME(iname+n-4, EXTSEP_S "sig")
- || !CMP_FILENAME(iname+n-4, EXTSEP_S "asc") ) ) {
- char *buf = m_strdup( iname );
- buf[n-4] = 0;
- return buf;
- }
- else if( n > 5 && !CMP_FILENAME(iname+n-5, EXTSEP_S "sign") ) {
- char *buf = m_strdup( iname );
- buf[n-5] = 0;
- return buf;
- }
-
- log_info(_("%s: unknown suffix\n"), iname );
- return NULL;
-}
-
-
-/****************
- * Ask for a outputfilename and use the given one as default.
- * Return NULL if no file has been given or it is not possible to
- * ask the user.
- */
-char *
-ask_outfile_name( const char *name, size_t namelen )
-{
- size_t n;
- const char *s;
- char *prompt;
- char *fname;
- char *defname;
-
- if( opt.batch )
- return NULL;
-
- s = _("Enter new filename");
-
- n = strlen(s) + namelen + 10;
- defname = name && namelen? make_printable_string( name, namelen, 0): NULL;
- prompt = m_alloc(n);
- if( defname )
- sprintf(prompt, "%s [%s]: ", s, defname );
- else
- sprintf(prompt, "%s: ", s );
- fname = cpr_get("openfile.askoutname", prompt );
- cpr_kill_prompt();
- m_free(prompt);
- if( !*fname ) {
- m_free( fname ); fname = NULL;
- fname = defname; defname = NULL;
- }
- m_free(defname);
- if (fname)
- trim_spaces (fname);
- return fname;
-}
-
-
-
-/****************
- * Make an output filename for the inputfile INAME.
- * Returns an IOBUF and an errorcode
- * Mode 0 = use ".gpg"
- * 1 = use ".asc"
- * 2 = use ".sig"
- */
-int
-open_outfile( const char *iname, int mode, IOBUF *a )
-{
- int rc = 0;
-
- *a = NULL;
- if( (!iname || (*iname=='-' && !iname[1])) && !opt.outfile ) {
- if( !(*a = iobuf_create(NULL)) ) {
- log_error(_("%s: can't open: %s\n"), "[stdout]", strerror(errno) );
- rc = G10ERR_CREATE_FILE;
- }
- else if( opt.verbose )
- log_info(_("writing to stdout\n"));
- }
- else {
- char *buf=NULL;
- const char *name;
-
- if( opt.dry_run )
- name = "/dev/null";
- else if( opt.outfile )
- name = opt.outfile;
- else {
- #ifdef USE_ONLY_8DOT3
- /* It is quite common DOS system to have only one dot in a
- * a filename So if we have something like this, we simple
- * replace the suffix execpt in cases where the suffix is
- * larger than 3 characters and not the same as.
- * We should really map the filenames to 8.3 but this tends to
- * be more complicated and is probaly a duty of the filesystem
- */
- char *dot;
- const char *newsfx = mode==1 ? ".asc" :
- mode==2 ? ".sig" : ".gpg";
-
- buf = m_alloc(strlen(iname)+4+1);
- strcpy(buf,iname);
- dot = strchr(buf, '.' );
- if( dot && dot > buf && dot[1] && strlen(dot) <= 4
- && CMP_FILENAME(newsfx, dot) ) {
- strcpy(dot, newsfx );
- }
- else if( dot && !dot[1] ) /* don't duplicate a dot */
- strcpy( dot, newsfx+1 );
- else
- strcat( buf, newsfx );
- #else
- buf = m_alloc(strlen(iname)+4+1);
- strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" :
- mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg");
- #endif
- name = buf;
- }
-
- rc = 0;
- while( !overwrite_filep (name) ) {
- char *tmp = ask_outfile_name (NULL, 0);
- if ( !tmp || !*tmp ) {
- m_free (tmp);
- rc = G10ERR_FILE_EXISTS;
- break;
- }
- m_free (buf);
- name = buf = tmp;
- }
-
- if( !rc ) {
- if( !(*a = iobuf_create( name )) ) {
- log_error(_("%s: can't create: %s\n"), name, strerror(errno) );
- rc = G10ERR_CREATE_FILE;
- }
- else if( opt.verbose )
- log_info(_("writing to `%s'\n"), name );
- }
- m_free(buf);
- }
- return rc;
-}
-
-
-
-/****************
- * Try to open a file without the extension ".sig" or ".asc"
- * Return NULL if such a file is not available.
- */
-IOBUF
-open_sigfile( const char *iname )
-{
- IOBUF a = NULL;
- size_t len;
-
- if( iname && !(*iname == '-' && !iname[1]) ) {
- len = strlen(iname);
- if( len > 4 && ( !strcmp(iname + len - 4, EXTSEP_S "sig")
- || ( len > 5 && !strcmp(iname + len - 5, EXTSEP_S "sign") )
- || !strcmp(iname + len - 4, EXTSEP_S "asc")) ) {
- char *buf;
- buf = m_strdup(iname);
- buf[len-(buf[len-1]=='n'?5:4)] = 0 ;
- a = iobuf_open( buf );
- if( a && opt.verbose )
- log_info(_("assuming signed data in `%s'\n"), buf );
- m_free(buf);
- }
- }
- return a;
-}
-
-
-/****************
- * Copy the option file skeleton to the given directory.
- */
-static void
-copy_options_file( const char *destdir )
-{
- const char *datadir = GNUPG_DATADIR;
- char *fname;
- FILE *src, *dst;
- int linefeeds=0;
- int c;
- mode_t oldmask;
-
- if( opt.dry_run )
- return;
-
- fname = m_alloc( strlen(datadir) + strlen(destdir) + 15 );
- strcpy(stpcpy(fname, datadir), DIRSEP_S "options" SKELEXT );
- src = fopen( fname, "r" );
- if( !src ) {
- log_error(_("%s: can't open: %s\n"), fname, strerror(errno) );
- m_free(fname);
- return;
- }
- strcpy(stpcpy(fname, destdir), DIRSEP_S "gpg" EXTSEP_S "conf" );
- oldmask=umask(077);
- dst = fopen( fname, "w" );
- umask(oldmask);
- if( !dst ) {
- log_error(_("%s: can't create: %s\n"), fname, strerror(errno) );
- fclose( src );
- m_free(fname);
- return;
- }
-
- while( (c=getc(src)) != EOF ) {
- if( linefeeds < 3 ) {
- if( c == '\n' )
- linefeeds++;
- }
- else
- putc( c, dst );
- }
- fclose( dst );
- fclose( src );
- log_info(_("new configuration file `%s' created\n"), fname );
- m_free(fname);
-}
-
-
-void
-try_make_homedir( const char *fname )
-{
- const char *defhome = GNUPG_HOMEDIR;
-
- /* Create the directory only if the supplied directory name
- * is the same as the default one. This way we avoid to create
- * arbitrary directories when a non-default homedirectory is used.
- * To cope with HOME, we do compare only the suffix if we see that
- * the default homedir does start with a tilde.
- */
- if( opt.dry_run || opt.no_homedir_creation )
- return;
-
- if ( ( *defhome == '~'
- && ( strlen(fname) >= strlen (defhome+1)
- && !strcmp(fname+strlen(fname)-strlen(defhome+1),
- defhome+1 ) ))
- || ( *defhome != '~'
- && !compare_filenames( fname, defhome ) )
- ) {
- if( mkdir( fname, S_IRUSR|S_IWUSR|S_IXUSR ) )
- log_fatal( _("%s: can't create directory: %s\n"),
- fname, strerror(errno) );
- else if( !opt.quiet )
- log_info( _("%s: directory created\n"), fname );
- copy_options_file( fname );
-/* log_info(_("you have to start GnuPG again, " */
-/* "so it can read the new configuration file\n") ); */
-/* g10_exit(1); */
- }
-}
diff --git a/g10/options.h b/g10/options.h
deleted file mode 100644
index 6be587ab8..000000000
--- a/g10/options.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* options.h
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_OPTIONS_H
-#define G10_OPTIONS_H
-
-#include <types.h>
-#include "main.h"
-#include "packet.h"
-
-#undef ENABLE_COMMENT_PACKETS /* don't create comment packets */
-
-#ifndef EXTERN_UNLESS_MAIN_MODULE
-/* Norcraft can't cope with common symbols */
- #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
- #define EXTERN_UNLESS_MAIN_MODULE extern
- #else
- #define EXTERN_UNLESS_MAIN_MODULE
- #endif
-#endif
-
-EXTERN_UNLESS_MAIN_MODULE
-struct {
- int verbose;
- int quiet;
- unsigned debug;
- int armor;
- int compress;
- char *outfile;
- int dry_run;
- int list_only;
- int textmode;
- int expert;
- int ask_sig_expire;
- int ask_cert_expire;
- int batch; /* run in batch mode */
- int answer_yes; /* answer yes on most questions */
- int answer_no; /* answer no on most questions */
- int check_sigs; /* check key signatures */
- int with_colons;
- int with_key_data;
- int with_fingerprint; /* opt --with-fingerprint active */
- int fingerprint; /* list fingerprints */
- int list_sigs; /* list signatures */
- int no_armor;
- int list_packets; /* list-packets mode: 1=normal, 2=invoked by command*/
- int def_cipher_algo;
- int force_v3_sigs;
- int force_v4_certs;
- int force_mdc;
- int disable_mdc;
- int def_digest_algo;
- int cert_digest_algo;
- int def_compress_algo;
- const char *def_secret_key;
- char *def_recipient;
- int def_recipient_self;
- int def_cert_check_level;
- int sk_comments;
- int no_version;
- int marginals_needed;
- int completes_needed;
- int max_cert_depth;
- const char *homedir;
-
- char *display; /* 5 options to be passed to the gpg-agent */
- char *ttyname;
- char *ttytype;
- char *lc_ctype;
- char *lc_messages;
-
- int skip_verify;
- int compress_keys;
- int compress_sigs;
- int always_trust;
- int pgp2;
- int pgp6;
- int pgp7; /* if we get any more of these, it's time to look at a
- special emulate_pgp variable... */
- int rfc1991;
- int rfc2440;
- int pgp2_workarounds;
- unsigned int emulate_bugs; /* bug emulation flags EMUBUG_xxxx */
- int shm_coprocess;
- const char *set_filename;
- const char *comment_string;
- int throw_keyid;
- int show_photos;
- const char *photo_viewer;
- int s2k_mode;
- int s2k_digest_algo;
- int s2k_cipher_algo;
- int simple_sk_checksum; /* create the deprecated rfc2440 secret
- key protection*/
- int not_dash_escaped;
- int escape_from;
- int lock_once;
- char *keyserver_uri;
- char *keyserver_scheme;
- char *keyserver_host;
- char *keyserver_port;
- char *keyserver_opaque;
- struct
- {
- int verbose;
- int include_revoked;
- int include_disabled;
- int include_subkeys;
- int honor_http_proxy;
- int broken_http_proxy;
- int use_temp_files;
- int keep_temp_files;
- int fake_v3_keyids;
- int auto_key_retrieve;
- unsigned int import_options;
- unsigned int export_options;
- STRLIST other;
- } keyserver_options;
- int exec_disable;
- int exec_path_set;
- unsigned int import_options;
- unsigned int export_options;
- char *def_preference_list;
- prefitem_t *personal_cipher_prefs;
- prefitem_t *personal_digest_prefs;
- prefitem_t *personal_compress_prefs;
- int no_perm_warn;
- int no_mdc_warn;
- char *temp_dir;
- int no_encrypt_to;
- int interactive;
- STRLIST sig_notation_data;
- STRLIST cert_notation_data;
- int show_notation;
- STRLIST sig_policy_url;
- STRLIST cert_policy_url;
- int show_policy_url;
- int use_embedded_filename;
- int allow_non_selfsigned_uid;
- int allow_freeform_uid;
- int no_literal;
- ulong set_filesize;
- int fast_list_mode;
- int fixed_list_mode;
- int ignore_time_conflict;
- int ignore_valid_from;
- int ignore_crc_error;
- int ignore_mdc_error;
- int command_fd;
- const char *override_session_key;
- int show_session_key;
- int use_agent;
- const char *gpg_agent_info;
- int merge_only;
- int try_all_secrets;
- int no_expensive_trust_checks;
- int no_sig_cache;
- int no_sig_create_check;
- int no_auto_check_trustdb;
- int preserve_permissions;
- int no_homedir_creation;
- int show_keyring;
- struct groupitem *grouplist;
- int strict;
-} opt;
-
-
-#define EMUBUG_MDENCODE 4
-
-#define DBG_PACKET_VALUE 1 /* debug packet reading/writing */
-#define DBG_MPI_VALUE 2 /* debug mpi details */
-#define DBG_CIPHER_VALUE 4 /* debug cipher handling */
- /* (may reveal sensitive data) */
-#define DBG_FILTER_VALUE 8 /* debug internal filter handling */
-#define DBG_IOBUF_VALUE 16 /* debug iobuf stuff */
-#define DBG_MEMORY_VALUE 32 /* debug memory allocation stuff */
-#define DBG_CACHE_VALUE 64 /* debug the cacheing */
-#define DBG_MEMSTAT_VALUE 128 /* show memory statistics */
-#define DBG_TRUST_VALUE 256 /* debug the trustdb */
-#define DBG_HASHING_VALUE 512 /* debug hashing operations */
-#define DBG_EXTPROG_VALUE 1024 /* debug external program calls */
-
-
-#define DBG_PACKET (opt.debug & DBG_PACKET_VALUE)
-#define DBG_FILTER (opt.debug & DBG_FILTER_VALUE)
-#define DBG_CACHE (opt.debug & DBG_CACHE_VALUE)
-#define DBG_TRUST (opt.debug & DBG_TRUST_VALUE)
-#define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
-#define DBG_EXTPROG (opt.debug & DBG_EXTPROG_VALUE)
-
-
-#endif /*G10_OPTIONS_H*/
diff --git a/g10/options.skel b/g10/options.skel
deleted file mode 100644
index cbb7cdf82..000000000
--- a/g10/options.skel
+++ /dev/null
@@ -1,203 +0,0 @@
-These first three lines are not copied to the gpg.conf file in
-the users home directory.
-$Id$
-# Options for GnuPG
-# Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This file is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Unless you specify which option file to use (with the command line
-# option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf
-# by default.
-#
-# An options file can contain any long options which are available in
-# GnuPG. If the first non white space character of a line is a '#',
-# this line is ignored. Empty lines are also ignored.
-#
-# See the man page for a list of options.
-
-# Uncomment the following option to get rid of the copyright notice
-
-#no-greeting
-
-# If you have more than 1 secret key in your keyring, you may want to
-# uncomment the following option and set your preferred keyid.
-
-#default-key 621CC013
-
-# If you do not pass a recipient to gpg, it will ask for one. Using
-# this option you can encrypt to a default key. Key validation will
-# not be done in this case. The second form uses the default key as
-# default recipient.
-
-#default-recipient some-user-id
-#default-recipient-self
-
-# By default GnuPG creates version 3 signatures for data files. This
-# is not strictly OpenPGP compliant but PGP 6 and most versions of PGP
-# 7 require them. To disable this behavior, you may use this option
-# or --openpgp.
-
-#no-force-v3-sigs
-
-# Because some mailers change lines starting with "From " to ">From "
-# it is good to handle such lines in a special way when creating
-# cleartext signatures; all other PGP versions do it this way too.
-# To enable full OpenPGP compliance you may want to use this option.
-
-#no-escape-from-lines
-
-# If you do not use the Latin-1 (ISO-8859-1) charset, you should tell
-# GnuPG which is the native character set. Please check the man page
-# for supported character sets. This character set is only used for
-# Meta data and not for the actual message which does not undergo any
-# translation. Note that future version of GnuPG will change to UTF-8
-# as default character set.
-
-#charset utf-8
-
-# Group names may be defined like this:
-# group mynames paige 0x12345678 joe patti
-#
-# Any time "mynames" is a recipient (-r or --recipient), it will be
-# expanded to the names "paige", "joe", and "patti", and the key ID
-# "0x12345678". Note there is only one level of expansion - you
-# cannot make an group that points to another group. Note also that
-# if there are spaces in the recipient name, this will appear as two
-# recipients. In these cases it is better to use the key ID.
-
-#group mynames paige 0x12345678 joe patti
-
-# Lock the file only once for the lifetime of a process. If you do
-# not define this, the lock will be obtained and released every time
-# it is needed - normally this is not needed.
-
-#lock-once
-
-# GnuPG can send and receive keys to and from a keyserver. These
-# servers can be HKP, email, or LDAP (if GnuPG is built with LDAP
-# support).
-#
-# Example HKP keyserver:
-# x-hkp://pgp.mit.edu
-#
-# Example email keyserver:
-# mailto:pgp-public-keys@keys.nl.pgp.net
-#
-# Example LDAP keyservers:
-# ldap://pgp.surfnet.nl:11370
-# ldap://keyserver.pgp.com
-#
-# Regular URL syntax applies, and you can set an alternate port
-# through the usual method:
-# x-hkp://keyserver.example.net:22742
-#
-# If you have problems connecting to a HKP server through a buggy http
-# proxy, you can use keyserver option broken-http-proxy (see below),
-# but first you should make sure that you have read the man page
-# regarding proxies (keyserver option honor-http-proxy)
-#
-# Most users just set the name and type of their preferred keyserver.
-# Most servers do synchronize with each other and DNS round-robin may
-# give you a quasi-random server each time.
-
-#keyserver x-hkp://pgp.mit.edu
-#keyserver mailto:pgp-public-keys@keys.nl.pgp.net
-#keyserver ldap://pgp.surfnet.nl:11370
-#keyserver ldap://keyserver.pgp.com
-
-# Common options for keyserver functions:
-#
-# include-disabled = when searching, include keys marked as "disabled"
-# on the keyserver (not all keyservers support this).
-#
-# no-include-revoked = when searching, do not include keys marked as
-# "revoked" on the keyserver.
-#
-# verbose = show more information as the keys are fetched.
-# Can be used more than once to increase the amount
-# of information shown.
-#
-# use-temp-files = use temporary files instead of a pipe to talk to the
-# keyserver. Some platforms (Win32 for one) always
-# have this on.
-#
-# keep-temp-files = do not delete temporary files after using them
-# (really only useful for debugging)
-#
-# honor-http-proxy = if the keyserver uses HTTP, honor the http_proxy
-# environment variable
-#
-# broken-http-proxy = try to work around a buggy HTTP proxy
-#
-# auto-key-retrieve = automatically fetch keys as needed from the keyserver
-# when verifying signatures or when importing keys that
-# have been revoked by a revocation key that is not
-# present on the keyring.
-#
-# no-include-attributes = do not include attribute IDs (aka "photo IDs")
-# when sending keys to the keyserver.
-
-#keyserver-options auto-key-retrieve
-
-# Uncomment this line to display photo user IDs in key listings and
-# when a signature from a key with a photo is verified.
-
-#show-photos
-
-# Use this program to display photo user IDs
-#
-# %i is expanded to a temporary file that contains the photo.
-# %I is the same as %i, but the file isn't deleted afterwards by GnuPG.
-# %k is expanded to the key ID of the key.
-# %K is expanded to the long OpenPGP key ID of the key.
-# %t is expanded to the extension of the image (e.g. "jpg").
-# %T is expanded to the MIME type of the image (e.g. "image/jpeg").
-# %f is expanded to the fingerprint of the key.
-# %% is %, of course.
-#
-# If %i or %I are not present, then the photo is supplied to the
-# viewer on standard input. If your platform supports it, standard
-# input is the best way to do this as it avoids the time and effort in
-# generating and then cleaning up a secure temp file.
-#
-# The default program is "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin"
-# On Mac OS X and Windows, the default is to use your regular image viewer.
-#
-# Some other viewers:
-# photo-viewer "qiv %i"
-# photo-viewer "ee %i"
-# photo-viewer "display -title 'KeyID 0x%k'"
-#
-# This one saves a copy of the photo ID in your home directory:
-# photo-viewer "cat > ~/photoid-for-key-%k.%t"
-#
-# Use your MIME handler to view photos:
-# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG"
-
-
-# Passphrase agent
-#
-# We support the old experimental passphrase agent protocol as well
-# as the new Assuan based one (currently available in the "newpg" package
-# at ftp.gnupg.org/gcrypt/alpha/aegypten/). To make use of the agent, you have
-# to run an agent as daemon and use the option
-#
-# use-agent
-#
-# which tries to use the agent but will fallback to the regular mode
-# if there is a problem connecting to the agent. The normal way to
-# locate the agent is by looking at the environment variable
-# GPG_AGENT_INFO which should have been set during gpg-agent startup.
-# In certain situations the use of this variable is not possible, thus
-# the option
-#
-# --gpg-agent-info=<path>:<pid>:1
-#
-# may be used to override it.
diff --git a/g10/packet.h b/g10/packet.h
deleted file mode 100644
index fdca455a1..000000000
--- a/g10/packet.h
+++ /dev/null
@@ -1,494 +0,0 @@
-/* packet.h - packet definitions
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef G10_PACKET_H
-#define G10_PACKET_H
-
-#include "types.h"
-#include "iobuf.h"
-#include "mpi.h"
-#include "cipher.h"
-#include "filter.h"
-#include "global.h"
-
-#define DEBUG_PARSE_PACKET 1
-
-typedef enum {
- PKT_NONE =0,
- PKT_PUBKEY_ENC =1, /* public key encrypted packet */
- PKT_SIGNATURE =2, /* secret key encrypted packet */
- PKT_SYMKEY_ENC =3, /* session key packet (OpenPGP)*/
- PKT_ONEPASS_SIG =4, /* one pass sig packet (OpenPGP)*/
- PKT_SECRET_KEY =5, /* secret key */
- PKT_PUBLIC_KEY =6, /* public key */
- PKT_SECRET_SUBKEY =7, /* secret subkey (OpenPGP) */
- PKT_COMPRESSED =8, /* compressed data packet */
- PKT_ENCRYPTED =9, /* conventional encrypted data */
- PKT_MARKER =10, /* marker packet (OpenPGP) */
- PKT_PLAINTEXT =11, /* plaintext data with filename and mode */
- PKT_RING_TRUST =12, /* keyring trust packet */
- PKT_USER_ID =13, /* user id packet */
- PKT_PUBLIC_SUBKEY =14, /* public subkey (OpenPGP) */
- PKT_OLD_COMMENT =16, /* comment packet from an OpenPGP draft */
- PKT_ATTRIBUTE =17, /* PGP's attribute packet */
- PKT_ENCRYPTED_MDC =18, /* integrity protected encrypted data */
- PKT_MDC =19, /* manipulaion detection code packet */
- PKT_COMMENT =61, /* new comment packet (private) */
- PKT_GPG_CONTROL =63 /* internal control packet */
-} pkttype_t;
-
-typedef struct packet_struct PACKET;
-
-/* PKT_GPG_CONTROL types */
-typedef enum {
- CTRLPKT_CLEARSIGN_START = 1,
- CTRLPKT_PIPEMODE = 2,
- CTRLPKT_PLAINTEXT_MARK =3
-} ctrlpkttype_t;
-
-typedef enum {
- PREFTYPE_NONE = 0,
- PREFTYPE_SYM = 1,
- PREFTYPE_HASH = 2,
- PREFTYPE_ZIP = 3
-} preftype_t;
-
-typedef struct {
- byte type;
- byte value;
-} prefitem_t;
-
-typedef struct {
- int mode;
- byte hash_algo;
- byte salt[8];
- u32 count;
-} STRING2KEY;
-
-typedef struct {
- byte version;
- byte cipher_algo; /* cipher algorithm used */
- STRING2KEY s2k;
- byte seskeylen; /* keylength in byte or 0 for no seskey */
- byte seskey[1];
-} PKT_symkey_enc;
-
-typedef struct {
- u32 keyid[2]; /* 64 bit keyid */
- byte version;
- byte pubkey_algo; /* algorithm used for public key scheme */
- byte throw_keyid;
- MPI data[PUBKEY_MAX_NENC];
-} PKT_pubkey_enc;
-
-
-typedef struct {
- u32 keyid[2]; /* 64 bit keyid */
- byte sig_class; /* sig classification */
- byte digest_algo; /* algorithm used for digest */
- byte pubkey_algo; /* algorithm used for public key scheme */
- byte last; /* a stupid flag */
-} PKT_onepass_sig;
-
-
-typedef struct {
- size_t size; /* allocated */
- size_t len; /* used */
- byte data[1];
-} subpktarea_t;
-
-struct revocation_key {
- byte class;
- byte algid;
- byte fpr[MAX_FINGERPRINT_LEN];
-};
-
-typedef struct {
- ulong local_id; /* internal use, valid if > 0 */
- struct {
- unsigned checked:1; /* signature has been checked */
- unsigned valid:1; /* signature is good (if checked is set) */
- unsigned unknown_critical:1;
- unsigned exportable:1;
- unsigned revocable:1;
- unsigned policy_url:1; /* Policy URL is present */
- unsigned notation:1; /* At least one notation is present */
- unsigned expired:1;
- } flags;
- u32 keyid[2]; /* 64 bit keyid */
- u32 timestamp; /* signature made */
- u32 expiredate; /* expires at this date or 0 if not at all */
- byte version;
- byte sig_class; /* sig classification, append for MD calculation*/
- byte pubkey_algo; /* algorithm used for public key scheme */
- /* (PUBKEY_ALGO_xxx) */
- byte digest_algo; /* algorithm used for digest (DIGEST_ALGO_xxxx) */
- struct revocation_key **revkey;
- int numrevkeys;
- subpktarea_t *hashed; /* all subpackets with hashed data (v4 only) */
- subpktarea_t *unhashed; /* ditto for unhashed data */
- byte digest_start[2]; /* first 2 bytes of the digest */
- MPI data[PUBKEY_MAX_NSIG];
-} PKT_signature;
-
-#define ATTRIB_IMAGE 1
-
-/* This is the cooked form of attributes */
-struct user_attribute {
- byte type;
- const byte *data;
- u32 len;
-};
-
-typedef struct {
- int ref; /* reference counter */
- int len; /* length of the name */
- struct user_attribute *attribs;
- int numattribs;
- byte *attrib_data; /* if this is not NULL, the packet is an attribute */
- unsigned long attrib_len;
- int help_key_usage;
- u32 help_key_expire;
- int is_primary;
- int is_revoked;
- int is_expired;
- u32 expiredate; /* expires at this date or 0 if not at all */
- prefitem_t *prefs; /* list of preferences (may be NULL)*/
- int mdc_feature;
- u32 created; /* according to the self-signature */
- byte selfsigversion;
- char name[1];
-} PKT_user_id;
-
-
-/****************
- * Note about the pkey/skey elements: We assume that the secret keys
- * has the same elemts as the public key at the begin of the array, so
- * that npkey < nskey and it is possible to compare the secret and
- * public keys by comparing the first npkey elements of pkey againts skey.
- */
-typedef struct {
- u32 timestamp; /* key made */
- u32 expiredate; /* expires at this date or 0 if not at all */
- u32 max_expiredate; /* must not expire past this date */
- byte hdrbytes; /* number of header bytes */
- byte version;
- byte selfsigversion; /* highest version of all of the self-sigs */
- byte pubkey_algo; /* algorithm used for public key scheme */
- byte pubkey_usage; /* for now only used to pass it to getkey() */
- byte req_usage; /* hack to pass a request to getkey() */
- byte req_algo; /* Ditto */
- u32 has_expired; /* set to the expiration date if expired */
- int is_revoked; /* key has been revoked */
- int is_valid; /* key (especially subkey) is valid */
- int dont_cache; /* do not cache this */
- ulong local_id; /* internal use, valid if > 0 */
- u32 main_keyid[2]; /* keyid of the primary key */
- u32 keyid[2]; /* calculated by keyid_from_pk() */
- byte is_primary;
- prefitem_t *prefs; /* list of preferences (may be NULL) */
- int mdc_feature; /* mdc feature set */
- byte *namehash; /* if != NULL: found by this name */
- PKT_user_id *user_id; /* if != NULL: found by that uid */
- struct revocation_key *revkey;
- int numrevkeys;
- MPI pkey[PUBKEY_MAX_NPKEY];
-} PKT_public_key;
-
-typedef struct {
- u32 timestamp; /* key made */
- u32 expiredate; /* expires at this date or 0 if not at all */
- u32 max_expiredate; /* must not expire past this date */
- byte hdrbytes; /* number of header bytes */
- byte version;
- byte pubkey_algo; /* algorithm used for public key scheme */
- byte pubkey_usage;
- byte req_usage;
- byte req_algo;
- u32 has_expired; /* set to the expiration date if expired */
- int is_revoked; /* key has been revoked */
- int is_valid; /* key (especially subkey) is valid */
- u32 main_keyid[2]; /* keyid of the primary key */
- u32 keyid[2];
- byte is_primary;
- byte is_protected; /* The secret info is protected and must */
- /* be decrypted before use, the protected */
- /* MPIs are simply (void*) pointers to memory */
- /* and should never be passed to a mpi_xxx() */
- struct {
- byte algo; /* cipher used to protect the secret information*/
- byte sha1chk; /* SHA1 is used instead of a 16 bit checksum */
- STRING2KEY s2k;
- byte ivlen; /* used length of the iv */
- byte iv[16]; /* initialization vector for CFB mode */
- } protect;
- MPI skey[PUBKEY_MAX_NSKEY];
- u16 csum; /* checksum */
-} PKT_secret_key;
-
-
-typedef struct {
- int len; /* length of data */
- char data[1];
-} PKT_comment;
-
-typedef struct {
- u32 len; /* reserved */
- byte new_ctb;
- byte algorithm;
- IOBUF buf; /* IOBUF reference */
-} PKT_compressed;
-
-typedef struct {
- u32 len; /* length of encrypted data */
- int extralen; /* this is (blocksize+2) */
- byte new_ctb; /* uses a new CTB */
- byte mdc_method; /* > 0: integrity protected encrypted data packet */
- IOBUF buf; /* IOBUF reference */
-} PKT_encrypted;
-
-typedef struct {
- byte hash[20];
-} PKT_mdc;
-
-typedef struct {
- unsigned int trustval;
- unsigned int sigcache;
-} PKT_ring_trust;
-
-typedef struct {
- u32 len; /* length of encrypted data */
- IOBUF buf; /* IOBUF reference */
- byte new_ctb;
- byte is_partial; /* partial length encoded */
- int mode;
- u32 timestamp;
- int namelen;
- char name[1];
-} PKT_plaintext;
-
-typedef struct {
- int control;
- size_t datalen;
- char data[1];
-} PKT_gpg_control;
-
-/* combine all packets into a union */
-struct packet_struct {
- pkttype_t pkttype;
- union {
- void *generic;
- PKT_symkey_enc *symkey_enc; /* PKT_SYMKEY_ENC */
- PKT_pubkey_enc *pubkey_enc; /* PKT_PUBKEY_ENC */
- PKT_onepass_sig *onepass_sig; /* PKT_ONEPASS_SIG */
- PKT_signature *signature; /* PKT_SIGNATURE */
- PKT_public_key *public_key; /* PKT_PUBLIC_[SUB)KEY */
- PKT_secret_key *secret_key; /* PKT_SECRET_[SUB]KEY */
- PKT_comment *comment; /* PKT_COMMENT */
- PKT_user_id *user_id; /* PKT_USER_ID */
- PKT_compressed *compressed; /* PKT_COMPRESSED */
- PKT_encrypted *encrypted; /* PKT_ENCRYPTED[_MDC] */
- PKT_mdc *mdc; /* PKT_MDC */
- PKT_ring_trust *ring_trust; /* PKT_RING_TRUST */
- PKT_plaintext *plaintext; /* PKT_PLAINTEXT */
- PKT_gpg_control *gpg_control; /* PKT_GPG_CONTROL */
- } pkt;
-};
-
-#define init_packet(a) do { (a)->pkttype = 0; \
- (a)->pkt.generic = NULL; \
- } while(0)
-
-typedef enum {
- SIGSUBPKT_TEST_CRITICAL=-3,
- SIGSUBPKT_LIST_UNHASHED=-2,
- SIGSUBPKT_LIST_HASHED =-1,
- SIGSUBPKT_NONE = 0,
- SIGSUBPKT_SIG_CREATED = 2, /* signature creation time */
- SIGSUBPKT_SIG_EXPIRE = 3, /* signature expiration time */
- SIGSUBPKT_EXPORTABLE = 4, /* exportable */
- SIGSUBPKT_TRUST = 5, /* trust signature */
- SIGSUBPKT_REGEXP = 6, /* regular expression */
- SIGSUBPKT_REVOCABLE = 7, /* revocable */
- SIGSUBPKT_KEY_EXPIRE = 9, /* key expiration time */
- SIGSUBPKT_ARR =10, /* additional recipient request */
- SIGSUBPKT_PREF_SYM =11, /* preferred symmetric algorithms */
- SIGSUBPKT_REV_KEY =12, /* revocation key */
- SIGSUBPKT_ISSUER =16, /* issuer key ID */
- SIGSUBPKT_NOTATION =20, /* notation data */
- SIGSUBPKT_PREF_HASH =21, /* preferred hash algorithms */
- SIGSUBPKT_PREF_COMPR =22, /* preferred compression algorithms */
- SIGSUBPKT_KS_FLAGS =23, /* key server preferences */
- SIGSUBPKT_PREF_KS =24, /* preferred key server */
- SIGSUBPKT_PRIMARY_UID =25, /* primary user id */
- SIGSUBPKT_POLICY =26, /* policy URL */
- SIGSUBPKT_KEY_FLAGS =27, /* key flags */
- SIGSUBPKT_SIGNERS_UID =28, /* signer's user id */
- SIGSUBPKT_REVOC_REASON =29, /* reason for revocation */
- SIGSUBPKT_FEATURES =30, /* feature flags */
- SIGSUBPKT_PRIV_VERIFY_CACHE =101, /* cache verification result (obsolete)*/
-
- SIGSUBPKT_FLAG_CRITICAL=128
-} sigsubpkttype_t;
-
-
-/*-- mainproc.c --*/
-int proc_packets( void *ctx, IOBUF a );
-int proc_signature_packets( void *ctx, IOBUF a,
- STRLIST signedfiles, const char *sigfile );
-int proc_encryption_packets( void *ctx, IOBUF a );
-int list_packets( IOBUF a );
-
-/*-- parse-packet.c --*/
-int set_packet_list_mode( int mode );
-
-#if DEBUG_PARSE_PACKET
-int dbg_search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid,
- const char* file, int lineno );
-int dbg_parse_packet( IOBUF inp, PACKET *ret_pkt,
- const char* file, int lineno );
-int dbg_copy_all_packets( IOBUF inp, IOBUF out,
- const char* file, int lineno );
-int dbg_copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff,
- const char* file, int lineno );
-int dbg_skip_some_packets( IOBUF inp, unsigned n,
- const char* file, int lineno );
-#define search_packet( a,b,c,d ) \
- dbg_search_packet( (a), (b), (c), (d), __FILE__, __LINE__ )
-#define parse_packet( a, b ) \
- dbg_parse_packet( (a), (b), __FILE__, __LINE__ )
-#define copy_all_packets( a,b ) \
- dbg_copy_all_packets((a),(b), __FILE__, __LINE__ )
-#define copy_some_packets( a,b,c ) \
- dbg_copy_some_packets((a),(b),(c), __FILE__, __LINE__ )
-#define skip_some_packets( a,b ) \
- dbg_skip_some_packets((a),(b), __FILE__, __LINE__ )
-#else
-int search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid );
-int parse_packet( IOBUF inp, PACKET *ret_pkt);
-int copy_all_packets( IOBUF inp, IOBUF out );
-int copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff );
-int skip_some_packets( IOBUF inp, unsigned n );
-#endif
-
-const byte *enum_sig_subpkt ( const subpktarea_t *subpkts,
- sigsubpkttype_t reqtype,
- size_t *ret_n, int *start, int *critical );
-const byte *parse_sig_subpkt ( const subpktarea_t *buffer,
- sigsubpkttype_t reqtype,
- size_t *ret_n );
-const byte *parse_sig_subpkt2 ( PKT_signature *sig,
- sigsubpkttype_t reqtype,
- size_t *ret_n );
-int parse_one_sig_subpkt( const byte *buffer, size_t n, int type );
-void parse_revkeys(PKT_signature *sig);
-int parse_attribute_subpkts(PKT_user_id *uid);
-void make_attribute_uidname(PKT_user_id *uid, size_t max_namelen);
-PACKET *create_gpg_control ( ctrlpkttype_t type,
- const byte *data,
- size_t datalen );
-
-/*-- build-packet.c --*/
-int build_packet( IOBUF inp, PACKET *pkt );
-u32 calc_packet_length( PACKET *pkt );
-void hash_public_key( MD_HANDLE md, PKT_public_key *pk );
-void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type,
- const byte *buffer, size_t buflen );
-void build_sig_subpkt_from_sig( PKT_signature *sig );
-int delete_sig_subpkt(subpktarea_t *buffer, sigsubpkttype_t type );
-void build_attribute_subpkt(PKT_user_id *uid,byte type,
- const void *buf,u32 buflen,
- const void *header,u32 headerlen);
-
-/*-- free-packet.c --*/
-void free_symkey_enc( PKT_symkey_enc *enc );
-void free_pubkey_enc( PKT_pubkey_enc *enc );
-void free_seckey_enc( PKT_signature *enc );
-int digest_algo_from_sig( PKT_signature *sig );
-void release_public_key_parts( PKT_public_key *pk );
-void free_public_key( PKT_public_key *key );
-void release_secret_key_parts( PKT_secret_key *sk );
-void free_secret_key( PKT_secret_key *sk );
-void free_attributes(PKT_user_id *uid);
-void free_user_id( PKT_user_id *uid );
-void free_comment( PKT_comment *rem );
-void free_packet( PACKET *pkt );
-prefitem_t *copy_prefs (const prefitem_t *prefs);
-PKT_public_key *copy_public_key( PKT_public_key *d, PKT_public_key *s );
-void copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk );
-PKT_secret_key *copy_secret_key( PKT_secret_key *d, PKT_secret_key *s );
-PKT_signature *copy_signature( PKT_signature *d, PKT_signature *s );
-PKT_user_id *scopy_user_id (PKT_user_id *sd );
-int cmp_public_keys( PKT_public_key *a, PKT_public_key *b );
-int cmp_secret_keys( PKT_secret_key *a, PKT_secret_key *b );
-int cmp_signatures( PKT_signature *a, PKT_signature *b );
-int cmp_public_secret_key( PKT_public_key *pk, PKT_secret_key *sk );
-int cmp_user_ids( PKT_user_id *a, PKT_user_id *b );
-
-
-/*-- sig-check.c --*/
-int signature_check( PKT_signature *sig, MD_HANDLE digest );
-int signature_check2( PKT_signature *sig, MD_HANDLE digest,
- u32 *r_expiredate, int *r_expired );
-
-/*-- seckey-cert.c --*/
-int is_secret_key_protected( PKT_secret_key *sk );
-int check_secret_key( PKT_secret_key *sk, int retries );
-int protect_secret_key( PKT_secret_key *sk, DEK *dek );
-
-/*-- pubkey-enc.c --*/
-int get_session_key( PKT_pubkey_enc *k, DEK *dek );
-int get_override_session_key( DEK *dek, const char *string );
-
-/*-- compress.c --*/
-int handle_compressed( void *ctx, PKT_compressed *cd,
- int (*callback)(IOBUF, void *), void *passthru );
-
-/*-- encr-data.c --*/
-int decrypt_data( void *ctx, PKT_encrypted *ed, DEK *dek );
-
-/*-- plaintext.c --*/
-int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
- int nooutput, int clearsig );
-int ask_for_detached_datafile( MD_HANDLE md, MD_HANDLE md2,
- const char *inname, int textmode );
-
-/*-- comment.c --*/
-int write_comment( IOBUF out, const char *s );
-
-/*-- sign.c --*/
-int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk,
- PKT_user_id *uid, PKT_public_key *subpk,
- PKT_secret_key *sk, int sigclass, int digest_algo,
- int sigversion, u32 timestamp, u32 duration,
- int (*mksubpkt)(PKT_signature *, void *),
- void *opaque );
-int update_keysig_packet( PKT_signature **ret_sig,
- PKT_signature *orig_sig,
- PKT_public_key *pk,
- PKT_user_id *uid,
- PKT_secret_key *sk,
- int (*mksubpkt)(PKT_signature *, void *),
- void *opaque );
-
-/*-- keygen.c --*/
-PKT_user_id *generate_user_id(void);
-
-#endif /*G10_PACKET_H*/
diff --git a/g10/parse-packet.c b/g10/parse-packet.c
deleted file mode 100644
index bce3ce308..000000000
--- a/g10/parse-packet.c
+++ /dev/null
@@ -1,2260 +0,0 @@
-/* parse-packet.c - read packets
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "packet.h"
-#include "iobuf.h"
-#include "mpi.h"
-#include "util.h"
-#include "cipher.h"
-#include "memory.h"
-#include "filter.h"
-#include "photoid.h"
-#include "options.h"
-#include "main.h"
-#include "i18n.h"
-
-static int mpi_print_mode = 0;
-static int list_mode = 0;
-
-static int parse( IOBUF inp, PACKET *pkt, int onlykeypkts,
- off_t *retpos, int *skip, IOBUF out, int do_skip
- #ifdef DEBUG_PARSE_PACKET
- ,const char *dbg_w, const char *dbg_f, int dbg_l
- #endif
- );
-static int copy_packet( IOBUF inp, IOBUF out, int pkttype,
- unsigned long pktlen );
-static void skip_packet( IOBUF inp, int pkttype, unsigned long pktlen );
-static void skip_rest( IOBUF inp, unsigned long pktlen );
-static void *read_rest( IOBUF inp, size_t pktlen );
-static int parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-static int parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-static int parse_signature( IOBUF inp, int pkttype, unsigned long pktlen,
- PKT_signature *sig );
-static int parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen,
- PKT_onepass_sig *ops );
-static int parse_key( IOBUF inp, int pkttype, unsigned long pktlen,
- byte *hdr, int hdrlen, PACKET *packet );
-static int parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-static int parse_attribute( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-static int parse_comment( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-static void parse_trust( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-static int parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet, int new_ctb);
-static int parse_compressed( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet, int new_ctb );
-static int parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet, int new_ctb);
-static int parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet, int new_ctb);
-static int parse_gpg_control( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *packet );
-
-static unsigned short
-read_16(IOBUF inp)
-{
- unsigned short a;
- a = iobuf_get_noeof(inp) << 8;
- a |= iobuf_get_noeof(inp);
- return a;
-}
-
-static unsigned long
-read_32(IOBUF inp)
-{
- unsigned long a;
- a = iobuf_get_noeof(inp) << 24;
- a |= iobuf_get_noeof(inp) << 16;
- a |= iobuf_get_noeof(inp) << 8;
- a |= iobuf_get_noeof(inp);
- return a;
-}
-
-
-int
-set_packet_list_mode( int mode )
-{
- int old = list_mode;
- list_mode = mode;
- mpi_print_mode = DBG_MPI;
- return old;
-}
-
-static void
-unknown_pubkey_warning( int algo )
-{
- static byte unknown_pubkey_algos[256];
-
- algo &= 0xff;
- if( !unknown_pubkey_algos[algo] ) {
- if( opt.verbose )
- log_info(_("can't handle public key algorithm %d\n"), algo );
- unknown_pubkey_algos[algo] = 1;
- }
-}
-
-/****************
- * Parse a Packet and return it in packet
- * Returns: 0 := valid packet in pkt
- * -1 := no more packets
- * >0 := error
- * Note: The function may return an error and a partly valid packet;
- * caller must free this packet.
- */
-#ifdef DEBUG_PARSE_PACKET
-int
-dbg_parse_packet( IOBUF inp, PACKET *pkt, const char *dbg_f, int dbg_l )
-{
- int skip, rc;
-
- do {
- rc = parse( inp, pkt, 0, NULL, &skip, NULL, 0, "parse", dbg_f, dbg_l );
- } while( skip );
- return rc;
-}
-#else
-int
-parse_packet( IOBUF inp, PACKET *pkt )
-{
- int skip, rc;
-
- do {
- rc = parse( inp, pkt, 0, NULL, &skip, NULL, 0 );
- } while( skip );
- return rc;
-}
-#endif
-
-/****************
- * Like parse packet, but only return secret or public (sub)key packets.
- */
-#ifdef DEBUG_PARSE_PACKET
-int
-dbg_search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid,
- const char *dbg_f, int dbg_l )
-{
- int skip, rc;
-
- do {
- rc = parse( inp, pkt, with_uid?2:1, retpos, &skip, NULL, 0, "search", dbg_f, dbg_l );
- } while( skip );
- return rc;
-}
-#else
-int
-search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid )
-{
- int skip, rc;
-
- do {
- rc = parse( inp, pkt, with_uid?2:1, retpos, &skip, NULL, 0 );
- } while( skip );
- return rc;
-}
-#endif
-
-/****************
- * Copy all packets from INP to OUT, thereby removing unused spaces.
- */
-#ifdef DEBUG_PARSE_PACKET
-int
-dbg_copy_all_packets( IOBUF inp, IOBUF out,
- const char *dbg_f, int dbg_l )
-{
- PACKET pkt;
- int skip, rc=0;
- do {
- init_packet(&pkt);
- } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0, "copy", dbg_f, dbg_l )));
- return rc;
-}
-#else
-int
-copy_all_packets( IOBUF inp, IOBUF out )
-{
- PACKET pkt;
- int skip, rc=0;
- do {
- init_packet(&pkt);
- } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0 )));
- return rc;
-}
-#endif
-
-/****************
- * Copy some packets from INP to OUT, thereby removing unused spaces.
- * Stop at offset STOPoff (i.e. don't copy packets at this or later offsets)
- */
-#ifdef DEBUG_PARSE_PACKET
-int
-dbg_copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff,
- const char *dbg_f, int dbg_l )
-{
- PACKET pkt;
- int skip, rc=0;
- do {
- if( iobuf_tell(inp) >= stopoff )
- return 0;
- init_packet(&pkt);
- } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0,
- "some", dbg_f, dbg_l )) );
- return rc;
-}
-#else
-int
-copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff )
-{
- PACKET pkt;
- int skip, rc=0;
- do {
- if( iobuf_tell(inp) >= stopoff )
- return 0;
- init_packet(&pkt);
- } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0 )) );
- return rc;
-}
-#endif
-
-/****************
- * Skip over N packets
- */
-#ifdef DEBUG_PARSE_PACKET
-int
-dbg_skip_some_packets( IOBUF inp, unsigned n,
- const char *dbg_f, int dbg_l )
-{
- int skip, rc=0;
- PACKET pkt;
-
- for( ;n && !rc; n--) {
- init_packet(&pkt);
- rc = parse( inp, &pkt, 0, NULL, &skip, NULL, 1, "skip", dbg_f, dbg_l );
- }
- return rc;
-}
-#else
-int
-skip_some_packets( IOBUF inp, unsigned n )
-{
- int skip, rc=0;
- PACKET pkt;
-
- for( ;n && !rc; n--) {
- init_packet(&pkt);
- rc = parse( inp, &pkt, 0, NULL, &skip, NULL, 1 );
- }
- return rc;
-}
-#endif
-
-
-/****************
- * Parse packet. Set the variable skip points to 1 if the packet
- * should be skipped; this is the case if either ONLYKEYPKTS is set
- * and the parsed packet isn't one or the
- * packet-type is 0, indicating deleted stuff.
- * if OUT is not NULL, a special copymode is used.
- */
-static int
-parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos,
- int *skip, IOBUF out, int do_skip
-#ifdef DEBUG_PARSE_PACKET
- ,const char *dbg_w, const char *dbg_f, int dbg_l
-#endif
- )
-{
- int rc=0, c, ctb, pkttype, lenbytes;
- unsigned long pktlen;
- byte hdr[8];
- int hdrlen;
- int new_ctb = 0;
- int with_uid = (onlykeypkts == 2);
-
- *skip = 0;
- assert( !pkt->pkt.generic );
- if( retpos )
- *retpos = iobuf_tell(inp);
-
- if( (ctb = iobuf_get(inp)) == -1 ) {
- rc = -1;
- goto leave;
- }
- hdrlen=0;
- hdr[hdrlen++] = ctb;
- if( !(ctb & 0x80) ) {
- log_error("%s: invalid packet (ctb=%02x)\n", iobuf_where(inp), ctb );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- pktlen = 0;
- new_ctb = !!(ctb & 0x40);
- if( new_ctb ) {
- pkttype = ctb & 0x3f;
- if( (c = iobuf_get(inp)) == -1 ) {
- log_error("%s: 1st length byte missing\n", iobuf_where(inp) );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- if (pkttype == PKT_COMPRESSED) {
- iobuf_set_partial_block_mode(inp, c & 0xff);
- pktlen = 0;/* to indicate partial length */
- }
- else {
- hdr[hdrlen++] = c;
- if( c < 192 )
- pktlen = c;
- else if( c < 224 ) {
- pktlen = (c - 192) * 256;
- if( (c = iobuf_get(inp)) == -1 ) {
- log_error("%s: 2nd length byte missing\n",
- iobuf_where(inp) );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- hdr[hdrlen++] = c;
- pktlen += c + 192;
- }
- else if( c == 255 ) {
- pktlen = (hdr[hdrlen++] = iobuf_get_noeof(inp)) << 24;
- pktlen |= (hdr[hdrlen++] = iobuf_get_noeof(inp)) << 16;
- pktlen |= (hdr[hdrlen++] = iobuf_get_noeof(inp)) << 8;
- if( (c = iobuf_get(inp)) == -1 ) {
- log_error("%s: 4 byte length invalid\n",
- iobuf_where(inp) );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- pktlen |= (hdr[hdrlen++] = c );
- }
- else { /* partial body length */
- iobuf_set_partial_block_mode(inp, c & 0xff);
- pktlen = 0;/* to indicate partial length */
- }
- }
- }
- else {
- pkttype = (ctb>>2)&0xf;
- lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
- if( !lenbytes ) {
- pktlen = 0; /* don't know the value */
- if( pkttype != PKT_COMPRESSED )
- iobuf_set_block_mode(inp, 1);
- }
- else {
- for( ; lenbytes; lenbytes-- ) {
- pktlen <<= 8;
- pktlen |= hdr[hdrlen++] = iobuf_get_noeof(inp);
- }
- }
- }
-
- if (pktlen == 0xffffffff) {
- /* with a some probability this is caused by a problem in the
- * the uncompressing layer - in some error cases it just loops
- * and spits out 0xff bytes. */
- log_error ("%s: garbled packet detected\n", iobuf_where(inp) );
- g10_exit (2);
- }
-
- if( out && pkttype ) {
- if( iobuf_write( out, hdr, hdrlen ) == -1 )
- rc = G10ERR_WRITE_FILE;
- else
- rc = copy_packet(inp, out, pkttype, pktlen );
- goto leave;
- }
-
- if (with_uid && pkttype == PKT_USER_ID)
- ;
- else if( do_skip
- || !pkttype
- || (onlykeypkts && pkttype != PKT_PUBLIC_SUBKEY
- && pkttype != PKT_PUBLIC_KEY
- && pkttype != PKT_SECRET_SUBKEY
- && pkttype != PKT_SECRET_KEY ) ) {
- skip_rest(inp, pktlen);
- *skip = 1;
- rc = 0;
- goto leave;
- }
-
- if( DBG_PACKET ) {
-#ifdef DEBUG_PARSE_PACKET
- log_debug("parse_packet(iob=%d): type=%d length=%lu%s (%s.%s.%d)\n",
- iobuf_id(inp), pkttype, pktlen, new_ctb?" (new_ctb)":"",
- dbg_w, dbg_f, dbg_l );
-#else
- log_debug("parse_packet(iob=%d): type=%d length=%lu%s\n",
- iobuf_id(inp), pkttype, pktlen, new_ctb?" (new_ctb)":"" );
-#endif
- }
- pkt->pkttype = pkttype;
- rc = G10ERR_UNKNOWN_PACKET; /* default error */
- switch( pkttype ) {
- case PKT_PUBLIC_KEY:
- case PKT_PUBLIC_SUBKEY:
- pkt->pkt.public_key = m_alloc_clear(sizeof *pkt->pkt.public_key );
- rc = parse_key(inp, pkttype, pktlen, hdr, hdrlen, pkt );
- break;
- case PKT_SECRET_KEY:
- case PKT_SECRET_SUBKEY:
- pkt->pkt.secret_key = m_alloc_clear(sizeof *pkt->pkt.secret_key );
- rc = parse_key(inp, pkttype, pktlen, hdr, hdrlen, pkt );
- break;
- case PKT_SYMKEY_ENC:
- rc = parse_symkeyenc( inp, pkttype, pktlen, pkt );
- break;
- case PKT_PUBKEY_ENC:
- rc = parse_pubkeyenc(inp, pkttype, pktlen, pkt );
- break;
- case PKT_SIGNATURE:
- pkt->pkt.signature = m_alloc_clear(sizeof *pkt->pkt.signature );
- rc = parse_signature(inp, pkttype, pktlen, pkt->pkt.signature );
- break;
- case PKT_ONEPASS_SIG:
- pkt->pkt.onepass_sig = m_alloc_clear(sizeof *pkt->pkt.onepass_sig );
- rc = parse_onepass_sig(inp, pkttype, pktlen, pkt->pkt.onepass_sig );
- break;
- case PKT_USER_ID:
- rc = parse_user_id(inp, pkttype, pktlen, pkt );
- break;
- case PKT_ATTRIBUTE:
- pkt->pkttype = pkttype = PKT_USER_ID; /* we store it in the userID */
- rc = parse_attribute(inp, pkttype, pktlen, pkt);
- break;
- case PKT_OLD_COMMENT:
- case PKT_COMMENT:
- rc = parse_comment(inp, pkttype, pktlen, pkt);
- break;
- case PKT_RING_TRUST:
- parse_trust(inp, pkttype, pktlen, pkt);
- rc = 0;
- break;
- case PKT_PLAINTEXT:
- rc = parse_plaintext(inp, pkttype, pktlen, pkt, new_ctb );
- break;
- case PKT_COMPRESSED:
- rc = parse_compressed(inp, pkttype, pktlen, pkt, new_ctb );
- break;
- case PKT_ENCRYPTED:
- case PKT_ENCRYPTED_MDC:
- rc = parse_encrypted(inp, pkttype, pktlen, pkt, new_ctb );
- break;
- case PKT_MDC:
- rc = parse_mdc(inp, pkttype, pktlen, pkt, new_ctb );
- break;
- case PKT_GPG_CONTROL:
- rc = parse_gpg_control(inp, pkttype, pktlen, pkt );
- break;
- default:
- skip_packet(inp, pkttype, pktlen);
- break;
- }
-
- leave:
- if( !rc && iobuf_error(inp) )
- rc = G10ERR_INV_KEYRING;
- return rc;
-}
-
-static void
-dump_hex_line( int c, int *i )
-{
- if( *i && !(*i%8) ) {
- if( *i && !(*i%24) )
- printf("\n%4d:", *i );
- else
- putchar(' ');
- }
- if( c == -1 )
- printf(" EOF" );
- else
- printf(" %02x", c );
- ++*i;
-}
-
-
-static int
-copy_packet( IOBUF inp, IOBUF out, int pkttype, unsigned long pktlen )
-{
- int n;
- char buf[100];
-
- if( iobuf_in_block_mode(inp) ) {
- while( (n = iobuf_read( inp, buf, 100 )) != -1 )
- if( iobuf_write(out, buf, n ) )
- return G10ERR_WRITE_FILE; /* write error */
- }
- else if( !pktlen && pkttype == PKT_COMPRESSED ) {
- log_debug("copy_packet: compressed!\n");
- /* compressed packet, copy till EOF */
- while( (n = iobuf_read( inp, buf, 100 )) != -1 )
- if( iobuf_write(out, buf, n ) )
- return G10ERR_WRITE_FILE; /* write error */
- }
- else {
- for( ; pktlen; pktlen -= n ) {
- n = pktlen > 100 ? 100 : pktlen;
- n = iobuf_read( inp, buf, n );
- if( n == -1 )
- return G10ERR_READ_FILE;
- if( iobuf_write(out, buf, n ) )
- return G10ERR_WRITE_FILE; /* write error */
- }
- }
- return 0;
-}
-
-
-static void
-skip_packet( IOBUF inp, int pkttype, unsigned long pktlen )
-{
- if( list_mode ) {
- if( pkttype == PKT_MARKER )
- fputs(":marker packet:\n", stdout );
- else
- printf(":unknown packet: type %2d, length %lu\n", pkttype, pktlen);
- if( pkttype ) {
- int c, i=0 ;
- if( pkttype != PKT_MARKER )
- fputs("dump:", stdout );
- if( iobuf_in_block_mode(inp) ) {
- while( (c=iobuf_get(inp)) != -1 )
- dump_hex_line(c, &i);
- }
- else {
- for( ; pktlen; pktlen-- )
- dump_hex_line(iobuf_get(inp), &i);
- }
- putchar('\n');
- return;
- }
- }
- skip_rest(inp,pktlen);
-}
-
-static void
-skip_rest( IOBUF inp, unsigned long pktlen )
-{
- if( iobuf_in_block_mode(inp) ) {
- while( iobuf_get(inp) != -1 )
- ;
- }
- else {
- for( ; pktlen; pktlen-- )
- if( iobuf_get(inp) == -1 )
- break;
- }
-}
-
-
-static void *
-read_rest( IOBUF inp, size_t pktlen )
-{
- byte *p;
- int i;
-
- if( iobuf_in_block_mode(inp) ) {
- log_error("read_rest: can't store stream data\n");
- p = NULL;
- }
- else {
- p = m_alloc( pktlen );
- for(i=0; pktlen; pktlen--, i++ )
- p[i] = iobuf_get(inp);
- }
- return p;
-}
-
-
-
-static int
-parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet )
-{
- PKT_symkey_enc *k;
- int rc = 0;
- int i, version, s2kmode, cipher_algo, hash_algo, seskeylen, minlen;
-
- if( pktlen < 4 ) {
- log_error("packet(%d) too short\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- version = iobuf_get_noeof(inp); pktlen--;
- if( version != 4 ) {
- log_error("packet(%d) with unknown version %d\n", pkttype, version);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- if( pktlen > 200 ) { /* (we encode the seskeylen in a byte) */
- log_error("packet(%d) too large\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- cipher_algo = iobuf_get_noeof(inp); pktlen--;
- s2kmode = iobuf_get_noeof(inp); pktlen--;
- hash_algo = iobuf_get_noeof(inp); pktlen--;
- switch( s2kmode ) {
- case 0: /* simple s2k */
- minlen = 0;
- break;
- case 1: /* salted s2k */
- minlen = 8;
- break;
- case 3: /* iterated+salted s2k */
- minlen = 9;
- break;
- default:
- log_error("unknown S2K %d\n", s2kmode );
- goto leave;
- }
- if( minlen > pktlen ) {
- log_error("packet with S2K %d too short\n", s2kmode );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- seskeylen = pktlen - minlen;
- k = packet->pkt.symkey_enc = m_alloc_clear( sizeof *packet->pkt.symkey_enc
- + seskeylen - 1 );
- k->version = version;
- k->cipher_algo = cipher_algo;
- k->s2k.mode = s2kmode;
- k->s2k.hash_algo = hash_algo;
- if( s2kmode == 1 || s2kmode == 3 ) {
- for(i=0; i < 8 && pktlen; i++, pktlen-- )
- k->s2k.salt[i] = iobuf_get_noeof(inp);
- }
- if( s2kmode == 3 ) {
- k->s2k.count = iobuf_get(inp); pktlen--;
- }
- k->seskeylen = seskeylen;
- for(i=0; i < seskeylen && pktlen; i++, pktlen-- )
- k->seskey[i] = iobuf_get_noeof(inp);
- assert( !pktlen );
-
- if( list_mode ) {
- printf(":symkey enc packet: version %d, cipher %d, s2k %d, hash %d\n",
- version, cipher_algo, s2kmode, hash_algo);
- if( s2kmode == 1 || s2kmode == 3 ) {
- printf("\tsalt ");
- for(i=0; i < 8; i++ )
- printf("%02x", k->s2k.salt[i]);
- if( s2kmode == 3 )
- printf(", count %lu\n", (ulong)k->s2k.count );
- printf("\n");
- }
- }
-
- leave:
- skip_rest(inp, pktlen);
- return rc;
-}
-
-static int
-parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet )
-{
- unsigned int n;
- int rc = 0;
- int i, ndata;
- PKT_pubkey_enc *k;
-
- k = packet->pkt.pubkey_enc = m_alloc_clear(sizeof *packet->pkt.pubkey_enc);
- if( pktlen < 12 ) {
- log_error("packet(%d) too short\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- k->version = iobuf_get_noeof(inp); pktlen--;
- if( k->version != 2 && k->version != 3 ) {
- log_error("packet(%d) with unknown version %d\n", pkttype, k->version);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- k->keyid[0] = read_32(inp); pktlen -= 4;
- k->keyid[1] = read_32(inp); pktlen -= 4;
- k->pubkey_algo = iobuf_get_noeof(inp); pktlen--;
- k->throw_keyid = 0; /* only used as flag for build_packet */
- if( list_mode )
- printf(":pubkey enc packet: version %d, algo %d, keyid %08lX%08lX\n",
- k->version, k->pubkey_algo, (ulong)k->keyid[0], (ulong)k->keyid[1]);
-
- ndata = pubkey_get_nenc(k->pubkey_algo);
- if( !ndata ) {
- if( list_mode )
- printf("\tunsupported algorithm %d\n", k->pubkey_algo );
- unknown_pubkey_warning( k->pubkey_algo );
- k->data[0] = NULL; /* no need to store the encrypted data */
- }
- else {
- for( i=0; i < ndata; i++ ) {
- n = pktlen;
- k->data[i] = mpi_read(inp, &n, 0); pktlen -=n;
- if( list_mode ) {
- printf("\tdata: ");
- mpi_print(stdout, k->data[i], mpi_print_mode );
- putchar('\n');
- }
- if (!k->data[i])
- rc = G10ERR_INVALID_PACKET;
- }
- }
-
- leave:
- skip_rest(inp, pktlen);
- return rc;
-}
-
-
-static void
-dump_sig_subpkt( int hashed, int type, int critical,
- const byte *buffer, size_t buflen, size_t length )
-{
- const char *p=NULL;
- int i;
-
- /* The CERT has warning out with explains how to use GNUPG to
- * detect the ARRs - we print our old message here when it is a faked
- * ARR and add an additional notice */
- if ( type == SIGSUBPKT_ARR && !hashed ) {
- printf("\tsubpkt %d len %u (additional recipient request)\n"
- "WARNING: PGP versions > 5.0 and < 6.5.8 will automagically "
- "encrypt to this key and thereby reveal the plaintext to "
- "the owner of this ARR key. Detailed info follows:\n",
- type, (unsigned)length );
- }
-
-
- printf("\t%s%ssubpkt %d len %u (", /*)*/
- critical ? "critical ":"",
- hashed ? "hashed ":"", type, (unsigned)length );
- buffer++;
- length--;
- if( length > buflen ) {
- printf("too short: buffer is only %u)\n", (unsigned)buflen );
- return;
- }
- switch( type ) {
- case SIGSUBPKT_SIG_CREATED:
- if( length >= 4 )
- printf("sig created %s", strtimestamp( buffer_to_u32(buffer) ) );
- break;
- case SIGSUBPKT_SIG_EXPIRE:
- if( length >= 4 )
- printf("sig expires after %s",
- strtimevalue( buffer_to_u32(buffer) ) );
- break;
- case SIGSUBPKT_EXPORTABLE:
- if( length )
- printf("%sexportable", *buffer? "":"not ");
- break;
- case SIGSUBPKT_TRUST:
- if(length!=2)
- p="[invalid trust signature]";
- else
- printf("trust signature of level %d, amount %d",buffer[0],buffer[1]);
- break;
- case SIGSUBPKT_REGEXP:
- if(!length)
- p="[invalid regexp]";
- else
- printf("regular expression: \"%s\"",buffer);
- break;
- case SIGSUBPKT_REVOCABLE:
- if( length )
- printf("%srevocable", *buffer? "":"not ");
- break;
- case SIGSUBPKT_KEY_EXPIRE:
- if( length >= 4 )
- printf("key expires after %s",
- strtimevalue( buffer_to_u32(buffer) ) );
- break;
- case SIGSUBPKT_PREF_SYM:
- fputs("pref-sym-algos:", stdout );
- for( i=0; i < length; i++ )
- printf(" %d", buffer[i] );
- break;
- case SIGSUBPKT_REV_KEY:
- fputs("revocation key: ", stdout );
- if( length < 22 )
- p = "[too short]";
- else {
- printf("c=%02x a=%d f=", buffer[0], buffer[1] );
- for( i=2; i < length; i++ )
- printf("%02X", buffer[i] );
- }
- break;
- case SIGSUBPKT_ISSUER:
- if( length >= 8 )
- printf("issuer key ID %08lX%08lX",
- (ulong)buffer_to_u32(buffer),
- (ulong)buffer_to_u32(buffer+4) );
- break;
- case SIGSUBPKT_NOTATION:
- {
- fputs("notation: ", stdout );
- if( length < 8 )
- p = "[too short]";
- else if( !(*buffer & 0x80) )
- p = "[not human readable]";
- else {
- const byte *s = buffer;
- size_t n1, n2;
-
- n1 = (s[4] << 8) | s[5];
- n2 = (s[6] << 8) | s[7];
- s += 8;
- if( 8+n1+n2 != length )
- p = "[error]";
- else {
- print_string( stdout, s, n1, ')' );
- putc( '=', stdout );
- print_string( stdout, s+n1, n2, ')' );
- }
- }
- }
- break;
- case SIGSUBPKT_PREF_HASH:
- fputs("pref-hash-algos:", stdout );
- for( i=0; i < length; i++ )
- printf(" %d", buffer[i] );
- break;
- case SIGSUBPKT_PREF_COMPR:
- fputs("pref-zip-algos:", stdout );
- for( i=0; i < length; i++ )
- printf(" %d", buffer[i] );
- break;
- case SIGSUBPKT_KS_FLAGS:
- fputs("key server preferences:",stdout);
- for(i=0;i<length;i++)
- printf(" %02X", buffer[i]);
- break;
- case SIGSUBPKT_PREF_KS:
- p = "preferred key server";
- break;
- case SIGSUBPKT_PRIMARY_UID:
- p = "primary user ID";
- break;
- case SIGSUBPKT_POLICY:
- fputs("policy: ", stdout );
- print_string( stdout, buffer, length, ')' );
- break;
- case SIGSUBPKT_KEY_FLAGS:
- fputs ( "key flags:", stdout );
- for( i=0; i < length; i++ )
- printf(" %02X", buffer[i] );
- break;
- case SIGSUBPKT_SIGNERS_UID:
- p = "signer's user ID";
- break;
- case SIGSUBPKT_REVOC_REASON:
- if( length ) {
- printf("revocation reason 0x%02x (", *buffer );
- print_string( stdout, buffer+1, length-1, ')' );
- p = ")";
- }
- break;
- case SIGSUBPKT_ARR:
- fputs("Big Brother's key (ignored): ", stdout );
- if( length < 22 )
- p = "[too short]";
- else {
- printf("c=%02x a=%d f=", buffer[0], buffer[1] );
- for( i=2; i < length; i++ )
- printf("%02X", buffer[i] );
- }
- break;
- case SIGSUBPKT_FEATURES:
- fputs ( "features:", stdout );
- for( i=0; i < length; i++ )
- printf(" %02x", buffer[i] );
- break;
- case SIGSUBPKT_PRIV_VERIFY_CACHE:
- p = "obsolete verification cache";
- break;
- default: p = "?"; break;
- }
-
- printf("%s)\n", p? p: "");
-}
-
-/****************
- * Returns: >= 0 offset into buffer
- * -1 unknown type
- * -2 unsupported type
- * -3 subpacket too short
- */
-int
-parse_one_sig_subpkt( const byte *buffer, size_t n, int type )
-{
- switch( type ) {
- case SIGSUBPKT_REV_KEY:
- if(n < 22)
- break;
- return 0;
- case SIGSUBPKT_SIG_CREATED:
- case SIGSUBPKT_SIG_EXPIRE:
- case SIGSUBPKT_KEY_EXPIRE:
- if( n < 4 )
- break;
- return 0;
- case SIGSUBPKT_KEY_FLAGS:
- case SIGSUBPKT_KS_FLAGS:
- case SIGSUBPKT_PREF_SYM:
- case SIGSUBPKT_PREF_HASH:
- case SIGSUBPKT_PREF_COMPR:
- case SIGSUBPKT_POLICY:
- case SIGSUBPKT_FEATURES:
- return 0;
- case SIGSUBPKT_EXPORTABLE:
- case SIGSUBPKT_REVOCABLE:
- if( !n )
- break;
- return 0;
- case SIGSUBPKT_ISSUER: /* issuer key ID */
- if( n < 8 )
- break;
- return 0;
- case SIGSUBPKT_NOTATION:
- if( n < 8 ) /* minimum length needed */
- break;
- return 0;
- case SIGSUBPKT_REVOC_REASON:
- if( !n )
- break;
- return 0;
- case SIGSUBPKT_PRIMARY_UID:
- if ( n != 1 )
- break;
- return 0;
- case SIGSUBPKT_PRIV_VERIFY_CACHE:
- /* We used this in gpg 1.0.5 and 1.0.6 to cache signature
- * verification results - it is no longer used.
- * "GPG" 0x00 <mode> <stat>
- * where mode == 1: valid data, stat == 0: invalid signature
- * stat == 1: valid signature
- * (because we use private data, we check our marker) */
- if( n < 6 )
- break;
- if( buffer[0] != 'G' || buffer[1] != 'P'
- || buffer[2] != 'G' || buffer[3] )
- return -2;
- return 4;
- default: return -1;
- }
- return -3;
-}
-
-
-static int
-can_handle_critical( const byte *buffer, size_t n, int type )
-{
- switch( type ) {
- case SIGSUBPKT_NOTATION:
- if( n >= 8 && (*buffer & 0x80) )
- return 1; /* human readable is handled */
- return 0;
-
- case SIGSUBPKT_SIG_CREATED:
- case SIGSUBPKT_SIG_EXPIRE:
- case SIGSUBPKT_KEY_EXPIRE:
- case SIGSUBPKT_EXPORTABLE:
- case SIGSUBPKT_REVOCABLE:
- case SIGSUBPKT_REV_KEY:
- case SIGSUBPKT_ISSUER:/* issuer key ID */
- case SIGSUBPKT_PREF_SYM:
- case SIGSUBPKT_PREF_HASH:
- case SIGSUBPKT_PREF_COMPR:
- case SIGSUBPKT_KEY_FLAGS:
- case SIGSUBPKT_PRIMARY_UID:
- case SIGSUBPKT_FEATURES:
- case SIGSUBPKT_POLICY: /* Is it enough to show the policy? */
- return 1;
-
- default:
- return 0;
- }
-}
-
-
-const byte *
-enum_sig_subpkt( const subpktarea_t *pktbuf, sigsubpkttype_t reqtype,
- size_t *ret_n, int *start, int *critical )
-{
- const byte *buffer;
- int buflen;
- int type;
- int critical_dummy;
- int offset;
- size_t n;
- int seq = 0;
- int reqseq = start? *start: 0;
-
- if(!critical)
- critical=&critical_dummy;
-
- if( !pktbuf || reqseq == -1 ) {
- /* return some value different from NULL to indicate that
- * there is no critical bit we do not understand. The caller
- * will never use the value. Yes I know, it is an ugly hack */
- return reqtype == SIGSUBPKT_TEST_CRITICAL? (const byte*)&pktbuf : NULL;
- }
- buffer = pktbuf->data;
- buflen = pktbuf->len;
- while( buflen ) {
- n = *buffer++; buflen--;
- if( n == 255 ) { /* 4 byte length header */
- if( buflen < 4 )
- goto too_short;
- n = (buffer[0] << 24) | (buffer[1] << 16)
- | (buffer[2] << 8) | buffer[3];
- buffer += 4;
- buflen -= 4;
- }
- else if( n >= 192 ) { /* 2 byte special encoded length header */
- if( buflen < 2 )
- goto too_short;
- n = (( n - 192 ) << 8) + *buffer + 192;
- buffer++;
- buflen--;
- }
- if( buflen < n )
- goto too_short;
- type = *buffer;
- if( type & 0x80 ) {
- type &= 0x7f;
- *critical = 1;
- }
- else
- *critical = 0;
- if( !(++seq > reqseq) )
- ;
- else if( reqtype == SIGSUBPKT_TEST_CRITICAL ) {
- if( *critical ) {
- if( n-1 > buflen+1 )
- goto too_short;
- if( !can_handle_critical(buffer+1, n-1, type ) ) {
- log_info(_("subpacket of type %d has critical bit set\n"),
- type);
- if( start )
- *start = seq;
- return NULL; /* this is an error */
- }
- }
- }
- else if( reqtype < 0 ) /* list packets */
- dump_sig_subpkt( reqtype == SIGSUBPKT_LIST_HASHED,
- type, *critical, buffer, buflen, n );
- else if( type == reqtype ) { /* found */
- buffer++;
- n--;
- if( n > buflen )
- goto too_short;
- if( ret_n )
- *ret_n = n;
- offset = parse_one_sig_subpkt(buffer, n, type );
- switch( offset ) {
- case -3:
- log_error("subpacket of type %d too short\n", type);
- return NULL;
- case -2:
- return NULL;
- case -1:
- BUG(); /* not yet needed */
- default:
- break;
- }
- if( start )
- *start = seq;
- return buffer+offset;
- }
- buffer += n; buflen -=n;
- }
- if( reqtype == SIGSUBPKT_TEST_CRITICAL )
- return buffer; /* as value true to indicate that there is no */
- /* critical bit we don't understand */
- if( start )
- *start = -1;
- return NULL; /* end of packets; not found */
-
- too_short:
- log_error("buffer shorter than subpacket\n");
- if( start )
- *start = -1;
- return NULL;
-}
-
-
-const byte *
-parse_sig_subpkt (const subpktarea_t *buffer, sigsubpkttype_t reqtype,
- size_t *ret_n)
-{
- return enum_sig_subpkt( buffer, reqtype, ret_n, NULL, NULL );
-}
-
-const byte *
-parse_sig_subpkt2 (PKT_signature *sig, sigsubpkttype_t reqtype,
- size_t *ret_n )
-{
- const byte *p;
-
- p = parse_sig_subpkt (sig->hashed, reqtype, ret_n );
- if( !p )
- p = parse_sig_subpkt (sig->unhashed, reqtype, ret_n );
- return p;
-}
-
-/* Find all revocation keys. Look in hashed area only. */
-void parse_revkeys(PKT_signature *sig)
-{
- struct revocation_key *revkey;
- int seq=0;
- size_t len;
-
- if(sig->sig_class!=0x1F)
- return;
-
- while((revkey=
- (struct revocation_key *)enum_sig_subpkt(sig->hashed,
- SIGSUBPKT_REV_KEY,
- &len,&seq,NULL)))
- {
- if(len==sizeof(struct revocation_key) &&
- (revkey->class&0x80)) /* 0x80 bit must be set */
- {
- sig->revkey=m_realloc(sig->revkey,
- sizeof(struct revocation_key *)*(sig->numrevkeys+1));
- sig->revkey[sig->numrevkeys]=revkey;
- sig->numrevkeys++;
- }
- }
-}
-
-static int
-parse_signature( IOBUF inp, int pkttype, unsigned long pktlen,
- PKT_signature *sig )
-{
- int md5_len=0;
- unsigned n;
- int is_v4=0;
- int rc=0;
- int i, ndata;
-
- if( pktlen < 16 ) {
- log_error("packet(%d) too short\n", pkttype);
- goto leave;
- }
- sig->version = iobuf_get_noeof(inp); pktlen--;
- if( sig->version == 4 )
- is_v4=1;
- else if( sig->version != 2 && sig->version != 3 ) {
- log_error("packet(%d) with unknown version %d\n", pkttype, sig->version);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
-
- if( !is_v4 ) {
- md5_len = iobuf_get_noeof(inp); pktlen--;
- }
- sig->sig_class = iobuf_get_noeof(inp); pktlen--;
- if( !is_v4 ) {
- sig->timestamp = read_32(inp); pktlen -= 4;
- sig->keyid[0] = read_32(inp); pktlen -= 4;
- sig->keyid[1] = read_32(inp); pktlen -= 4;
- }
- sig->pubkey_algo = iobuf_get_noeof(inp); pktlen--;
- sig->digest_algo = iobuf_get_noeof(inp); pktlen--;
- sig->flags.exportable=1;
- sig->flags.revocable=1;
- if( is_v4 ) { /* read subpackets */
- n = read_16(inp); pktlen -= 2; /* length of hashed data */
- if( n > 10000 ) {
- log_error("signature packet: hashed data too long\n");
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- if( n ) {
- sig->hashed = m_alloc (sizeof (*sig->hashed) + n - 1 );
- sig->hashed->size = n;
- sig->hashed->len = n;
- if( iobuf_read (inp, sig->hashed->data, n ) != n ) {
- log_error ("premature eof while reading "
- "hashed signature data\n");
- rc = -1;
- goto leave;
- }
- pktlen -= n;
- }
- n = read_16(inp); pktlen -= 2; /* length of unhashed data */
- if( n > 10000 ) {
- log_error("signature packet: unhashed data too long\n");
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- if( n ) {
- /* we add 8 extra bytes so that we have space for the signature
- * status cache. Well we are wasting this if there is a cache
- * packet already, but in the other case it avoids an realloc */
- sig->unhashed = m_alloc (sizeof(*sig->unhashed) + n + 8 - 1 );
- sig->unhashed->size = n + 8;
- sig->unhashed->len = n;
- if( iobuf_read(inp, sig->unhashed->data, n ) != n ) {
- log_error("premature eof while reading "
- "unhashed signature data\n");
- rc = -1;
- goto leave;
- }
- pktlen -= n;
- }
- }
-
- if( pktlen < 5 ) { /* sanity check */
- log_error("packet(%d) too short\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
-
- sig->digest_start[0] = iobuf_get_noeof(inp); pktlen--;
- sig->digest_start[1] = iobuf_get_noeof(inp); pktlen--;
-
- if( is_v4 && sig->pubkey_algo ) { /*extract required information */
- const byte *p;
-
- /* set sig->flags.unknown_critical if there is a
- * critical bit set for packets which we do not understand */
- if( !parse_sig_subpkt (sig->hashed, SIGSUBPKT_TEST_CRITICAL, NULL)
- || !parse_sig_subpkt (sig->unhashed, SIGSUBPKT_TEST_CRITICAL,
- NULL) )
- {
- sig->flags.unknown_critical = 1;
- }
-
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIG_CREATED, NULL );
- if( !p )
- log_error("signature packet without timestamp\n");
- else
- sig->timestamp = buffer_to_u32(p);
- p = parse_sig_subpkt2( sig, SIGSUBPKT_ISSUER, NULL );
- if( !p )
- log_error("signature packet without keyid\n");
- else {
- sig->keyid[0] = buffer_to_u32(p);
- sig->keyid[1] = buffer_to_u32(p+4);
- }
-
- p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_SIG_EXPIRE,NULL);
- if(p)
- sig->expiredate=sig->timestamp+buffer_to_u32(p);
- if(sig->expiredate && sig->expiredate<=make_timestamp())
- sig->flags.expired=1;
-
- p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,NULL);
- if(p)
- sig->flags.policy_url=1;
-
- p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,NULL);
- if(p)
- sig->flags.notation=1;
-
- p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_REVOCABLE,NULL);
- if(p && *p==0)
- sig->flags.revocable=0;
-
- /* We accept the exportable subpacket from either the hashed
- or unhashed areas as older versions of gpg put it in the
- unhashed area. In theory, anyway, we should never see this
- packet off of a local keyring. */
-
- p=parse_sig_subpkt2(sig,SIGSUBPKT_EXPORTABLE,NULL);
- if(p && *p==0)
- sig->flags.exportable=0;
-
- /* Find all revocation keys. */
- if(sig->sig_class==0x1F)
- parse_revkeys(sig);
- }
-
- if( list_mode ) {
- printf(":signature packet: algo %d, keyid %08lX%08lX\n"
- "\tversion %d, created %lu, md5len %d, sigclass %02x\n"
- "\tdigest algo %d, begin of digest %02x %02x\n",
- sig->pubkey_algo,
- (ulong)sig->keyid[0], (ulong)sig->keyid[1],
- sig->version, (ulong)sig->timestamp, md5_len, sig->sig_class,
- sig->digest_algo,
- sig->digest_start[0], sig->digest_start[1] );
- if( is_v4 ) {
- parse_sig_subpkt (sig->hashed, SIGSUBPKT_LIST_HASHED, NULL );
- parse_sig_subpkt (sig->unhashed, SIGSUBPKT_LIST_UNHASHED, NULL);
- }
- }
-
- ndata = pubkey_get_nsig(sig->pubkey_algo);
- if( !ndata ) {
- if( list_mode )
- printf("\tunknown algorithm %d\n", sig->pubkey_algo );
- unknown_pubkey_warning( sig->pubkey_algo );
- /* we store the plain material in data[0], so that we are able
- * to write it back with build_packet() */
- sig->data[0] = mpi_set_opaque(NULL, read_rest(inp, pktlen), pktlen );
- pktlen = 0;
- }
- else {
- for( i=0; i < ndata; i++ ) {
- n = pktlen;
- sig->data[i] = mpi_read(inp, &n, 0 );
- pktlen -=n;
- if( list_mode ) {
- printf("\tdata: ");
- mpi_print(stdout, sig->data[i], mpi_print_mode );
- putchar('\n');
- }
- if (!sig->data[i])
- rc = G10ERR_INVALID_PACKET;
- }
- }
-
- leave:
- skip_rest(inp, pktlen);
- return rc;
-}
-
-
-static int
-parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen,
- PKT_onepass_sig *ops )
-{
- int version;
- int rc = 0;
-
- if( pktlen < 13 ) {
- log_error("packet(%d) too short\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- version = iobuf_get_noeof(inp); pktlen--;
- if( version != 3 ) {
- log_error("onepass_sig with unknown version %d\n", version);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- ops->sig_class = iobuf_get_noeof(inp); pktlen--;
- ops->digest_algo = iobuf_get_noeof(inp); pktlen--;
- ops->pubkey_algo = iobuf_get_noeof(inp); pktlen--;
- ops->keyid[0] = read_32(inp); pktlen -= 4;
- ops->keyid[1] = read_32(inp); pktlen -= 4;
- ops->last = iobuf_get_noeof(inp); pktlen--;
- if( list_mode )
- printf(":onepass_sig packet: keyid %08lX%08lX\n"
- "\tversion %d, sigclass %02x, digest %d, pubkey %d, last=%d\n",
- (ulong)ops->keyid[0], (ulong)ops->keyid[1],
- version, ops->sig_class,
- ops->digest_algo, ops->pubkey_algo, ops->last );
-
-
- leave:
- skip_rest(inp, pktlen);
- return rc;
-}
-
-
-static MPI
-read_protected_v3_mpi (IOBUF inp, unsigned long *length)
-{
- int c;
- unsigned int nbits, nbytes;
- unsigned char *buf, *p;
- MPI val;
-
- if (*length < 2)
- {
- log_error ("mpi too small\n");
- return NULL;
- }
-
- if ((c=iobuf_get (inp)) == -1)
- return NULL;
- --*length;
- nbits = c << 8;
- if ((c=iobuf_get(inp)) == -1)
- return NULL;
- --*length;
- nbits |= c;
-
- if (nbits > 16384)
- {
- log_error ("mpi too large (%u bits)\n", nbits);
- return NULL;
- }
- nbytes = (nbits+7) / 8;
- buf = p = m_alloc (2 + nbytes);
- *p++ = nbits >> 8;
- *p++ = nbits;
- for (; nbytes && length; nbytes--, --*length)
- *p++ = iobuf_get (inp);
- if (nbytes)
- {
- log_error ("packet shorter tham mpi\n");
- m_free (buf);
- return NULL;
- }
-
- /* convert buffer into an opaque MPI */
- val = mpi_set_opaque (NULL, buf, p-buf);
- return val;
-}
-
-
-static int
-parse_key( IOBUF inp, int pkttype, unsigned long pktlen,
- byte *hdr, int hdrlen, PACKET *pkt )
-{
- int i, version, algorithm;
- unsigned n;
- unsigned long timestamp, expiredate, max_expiredate;
- int npkey, nskey;
- int is_v4=0;
- int rc=0;
-
- version = iobuf_get_noeof(inp); pktlen--;
- if( pkttype == PKT_PUBLIC_SUBKEY && version == '#' ) {
- /* early versions of G10 use old PGP comments packets;
- * luckily all those comments are started by a hash */
- if( list_mode ) {
- printf(":rfc1991 comment packet: \"" );
- for( ; pktlen; pktlen-- ) {
- int c;
- c = iobuf_get_noeof(inp);
- if( c >= ' ' && c <= 'z' )
- putchar(c);
- else
- printf("\\x%02x", c );
- }
- printf("\"\n");
- }
- skip_rest(inp, pktlen);
- return 0;
- }
- else if( version == 4 )
- is_v4=1;
- else if( version != 2 && version != 3 ) {
- log_error("packet(%d) with unknown version %d\n", pkttype, version);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
-
- if( pktlen < 11 ) {
- log_error("packet(%d) too short\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
-
- timestamp = read_32(inp); pktlen -= 4;
- if( is_v4 ) {
- expiredate = 0; /* have to get it from the selfsignature */
- max_expiredate = 0;
- }
- else {
- unsigned short ndays;
- ndays = read_16(inp); pktlen -= 2;
- if( ndays )
- expiredate = timestamp + ndays * 86400L;
- else
- expiredate = 0;
-
- max_expiredate=expiredate;
- }
- algorithm = iobuf_get_noeof(inp); pktlen--;
- if( list_mode )
- printf(":%s key packet:\n"
- "\tversion %d, algo %d, created %lu, expires %lu\n",
- pkttype == PKT_PUBLIC_KEY? "public" :
- pkttype == PKT_SECRET_KEY? "secret" :
- pkttype == PKT_PUBLIC_SUBKEY? "public sub" :
- pkttype == PKT_SECRET_SUBKEY? "secret sub" : "??",
- version, algorithm, timestamp, expiredate );
-
- if( pkttype == PKT_SECRET_KEY || pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *sk = pkt->pkt.secret_key;
-
- sk->timestamp = timestamp;
- sk->expiredate = expiredate;
- sk->max_expiredate = max_expiredate;
- sk->hdrbytes = hdrlen;
- sk->version = version;
- sk->is_primary = pkttype == PKT_SECRET_KEY;
- sk->pubkey_algo = algorithm;
- sk->req_usage = 0;
- sk->pubkey_usage = 0; /* not yet used */
- }
- else {
- PKT_public_key *pk = pkt->pkt.public_key;
-
- pk->timestamp = timestamp;
- pk->expiredate = expiredate;
- pk->max_expiredate = max_expiredate;
- pk->hdrbytes = hdrlen;
- pk->version = version;
- pk->is_primary = pkttype == PKT_PUBLIC_KEY;
- pk->pubkey_algo = algorithm;
- pk->req_usage = 0;
- pk->pubkey_usage = 0; /* not yet used */
- pk->is_revoked = 0;
- pk->keyid[0] = 0;
- pk->keyid[1] = 0;
- }
- nskey = pubkey_get_nskey( algorithm );
- npkey = pubkey_get_npkey( algorithm );
- if( !npkey ) {
- if( list_mode )
- printf("\tunknown algorithm %d\n", algorithm );
- unknown_pubkey_warning( algorithm );
- }
-
-
- if( pkttype == PKT_SECRET_KEY || pkttype == PKT_SECRET_SUBKEY ) {
- PKT_secret_key *sk = pkt->pkt.secret_key;
- byte temp[16];
-
- if( !npkey ) {
- sk->skey[0] = mpi_set_opaque( NULL,
- read_rest(inp, pktlen), pktlen );
- pktlen = 0;
- goto leave;
- }
-
- for(i=0; i < npkey; i++ ) {
- n = pktlen; sk->skey[i] = mpi_read(inp, &n, 0 ); pktlen -=n;
- if( list_mode ) {
- printf( "\tskey[%d]: ", i);
- mpi_print(stdout, sk->skey[i], mpi_print_mode );
- putchar('\n');
- }
- if (!sk->skey[i])
- rc = G10ERR_INVALID_PACKET;
- }
- if (rc) /* one of the MPIs were bad */
- goto leave;
- sk->protect.algo = iobuf_get_noeof(inp); pktlen--;
- sk->protect.sha1chk = 0;
- if( sk->protect.algo ) {
- sk->is_protected = 1;
- sk->protect.s2k.count = 0;
- if( sk->protect.algo == 254 || sk->protect.algo == 255 ) {
- if( pktlen < 3 ) {
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- sk->protect.sha1chk = (sk->protect.algo == 254);
- sk->protect.algo = iobuf_get_noeof(inp); pktlen--;
- /* Note that a sk->protect.algo > 110 is illegal, but
- I'm not erroring on it here as otherwise there
- would be no way to delete such a key. */
- sk->protect.s2k.mode = iobuf_get_noeof(inp); pktlen--;
- sk->protect.s2k.hash_algo = iobuf_get_noeof(inp); pktlen--;
- /* check for the special GNU extension */
- if( is_v4 && sk->protect.s2k.mode == 101 ) {
- for(i=0; i < 4 && pktlen; i++, pktlen-- )
- temp[i] = iobuf_get_noeof(inp);
- if( i < 4 || memcmp( temp, "GNU", 3 ) ) {
- if( list_mode )
- printf( "\tunknown S2K %d\n",
- sk->protect.s2k.mode );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- /* here we know that it is a gnu extension
- * What follows is the GNU protection mode:
- * All values have special meanings
- * and they are mapped in the mode with a base of 1000.
- */
- sk->protect.s2k.mode = 1000 + temp[3];
- }
- switch( sk->protect.s2k.mode ) {
- case 1:
- case 3:
- for(i=0; i < 8 && pktlen; i++, pktlen-- )
- temp[i] = iobuf_get_noeof(inp);
- memcpy(sk->protect.s2k.salt, temp, 8 );
- break;
- }
- switch( sk->protect.s2k.mode ) {
- case 0: if( list_mode ) printf( "\tsimple S2K" );
- break;
- case 1: if( list_mode ) printf( "\tsalted S2K" );
- break;
- case 3: if( list_mode ) printf( "\titer+salt S2K" );
- break;
- case 1001: if( list_mode ) printf( "\tgnu-dummy S2K" );
- break;
- default:
- if( list_mode )
- printf( "\tunknown %sS2K %d\n",
- sk->protect.s2k.mode < 1000? "":"GNU ",
- sk->protect.s2k.mode );
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
-
- if( list_mode ) {
- printf(", algo: %d,%s hash: %d",
- sk->protect.algo,
- sk->protect.sha1chk?" SHA1 protection,"
- :" simple checksum,",
- sk->protect.s2k.hash_algo );
- if( sk->protect.s2k.mode == 1
- || sk->protect.s2k.mode == 3 ) {
- printf(", salt: ");
- for(i=0; i < 8; i++ )
- printf("%02x", sk->protect.s2k.salt[i]);
- }
- putchar('\n');
- }
-
- if( sk->protect.s2k.mode == 3 ) {
- if( pktlen < 1 ) {
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- sk->protect.s2k.count = iobuf_get(inp);
- pktlen--;
- if( list_mode )
- printf("\tprotect count: %lu\n",
- (ulong)sk->protect.s2k.count);
- }
- }
- /* Note that a sk->protect.algo > 110 is illegal, but I'm
- not erroring on it here as otherwise there would be no
- way to delete such a key. */
- else { /* old version; no S2K, so we set mode to 0, hash MD5 */
- sk->protect.s2k.mode = 0;
- sk->protect.s2k.hash_algo = DIGEST_ALGO_MD5;
- if( list_mode )
- printf( "\tprotect algo: %d (hash algo: %d)\n",
- sk->protect.algo, sk->protect.s2k.hash_algo );
- }
- /* It is really ugly that we don't know the size
- * of the IV here in cases we are not aware of the algorithm.
- * so a
- * sk->protect.ivlen = cipher_get_blocksize(sk->protect.algo);
- * won't work. The only solution I see is to hardwire it here.
- * NOTE: if you change the ivlen above 16, don't forget to
- * enlarge temp.
- */
- switch( sk->protect.algo ) {
- case 7: case 8: case 9: /* reserved for AES */
- case 10: /* Twofish */
- sk->protect.ivlen = 16;
- break;
- default:
- sk->protect.ivlen = 8;
- }
- if( sk->protect.s2k.mode == 1001 )
- sk->protect.ivlen = 0;
-
- if( pktlen < sk->protect.ivlen ) {
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- for(i=0; i < sk->protect.ivlen && pktlen; i++, pktlen-- )
- temp[i] = iobuf_get_noeof(inp);
- if( list_mode ) {
- printf( "\tprotect IV: ");
- for(i=0; i < sk->protect.ivlen; i++ )
- printf(" %02x", temp[i] );
- putchar('\n');
- }
- memcpy(sk->protect.iv, temp, sk->protect.ivlen );
- }
- else
- sk->is_protected = 0;
- /* It does not make sense to read it into secure memory.
- * If the user is so careless, not to protect his secret key,
- * we can assume, that he operates an open system :=(.
- * So we put the key into secure memory when we unprotect it. */
- if( sk->protect.s2k.mode == 1001 ) {
- /* better set some dummy stuff here */
- sk->skey[npkey] = mpi_set_opaque(NULL, m_strdup("dummydata"), 10);
- pktlen = 0;
- }
- else if( is_v4 && sk->is_protected ) {
- /* ugly; the length is encrypted too, so we read all
- * stuff up to the end of the packet into the first
- * skey element */
- sk->skey[npkey] = mpi_set_opaque(NULL,
- read_rest(inp, pktlen), pktlen );
- pktlen = 0;
- if( list_mode ) {
- printf("\tencrypted stuff follows\n");
- }
- }
- else { /* v3 method: the mpi length is not encrypted */
- for(i=npkey; i < nskey; i++ ) {
- if ( sk->is_protected ) {
- sk->skey[i] = read_protected_v3_mpi (inp, &pktlen);
- if( list_mode )
- printf( "\tskey[%d]: [encrypted]\n", i);
- }
- else {
- n = pktlen;
- sk->skey[i] = mpi_read(inp, &n, 0 );
- pktlen -=n;
- if( list_mode ) {
- printf( "\tskey[%d]: ", i);
- mpi_print(stdout, sk->skey[i], mpi_print_mode );
- putchar('\n');
- }
- }
-
- if (!sk->skey[i])
- rc = G10ERR_INVALID_PACKET;
- }
- if (rc)
- goto leave;
-
- sk->csum = read_16(inp); pktlen -= 2;
- if( list_mode ) {
- printf("\tchecksum: %04hx\n", sk->csum);
- }
- }
- }
- else {
- PKT_public_key *pk = pkt->pkt.public_key;
-
- if( !npkey ) {
- pk->pkey[0] = mpi_set_opaque( NULL,
- read_rest(inp, pktlen), pktlen );
- pktlen = 0;
- goto leave;
- }
-
- for(i=0; i < npkey; i++ ) {
- n = pktlen; pk->pkey[i] = mpi_read(inp, &n, 0 ); pktlen -=n;
- if( list_mode ) {
- printf( "\tpkey[%d]: ", i);
- mpi_print(stdout, pk->pkey[i], mpi_print_mode );
- putchar('\n');
- }
- if (!pk->pkey[i])
- rc = G10ERR_INVALID_PACKET;
- }
- if (rc)
- goto leave;
- }
-
- leave:
- skip_rest(inp, pktlen);
- return rc;
-}
-
-/* Attribute subpackets have the same format as v4 signature
- subpackets. This is not part of OpenPGP, but is done in several
- versions of PGP nevertheless. */
-int
-parse_attribute_subpkts(PKT_user_id *uid)
-{
- size_t n;
- int count=0;
- struct user_attribute *attribs=NULL;
- const byte *buffer=uid->attrib_data;
- int buflen=uid->attrib_len;
- byte type;
-
- m_free(uid->attribs);
-
- while(buflen)
- {
- n = *buffer++; buflen--;
- if( n == 255 ) { /* 4 byte length header */
- if( buflen < 4 )
- goto too_short;
- n = (buffer[0] << 24) | (buffer[1] << 16)
- | (buffer[2] << 8) | buffer[3];
- buffer += 4;
- buflen -= 4;
- }
- else if( n >= 192 ) { /* 2 byte special encoded length header */
- if( buflen < 2 )
- goto too_short;
- n = (( n - 192 ) << 8) + *buffer + 192;
- buffer++;
- buflen--;
- }
- if( buflen < n )
- goto too_short;
-
- attribs=m_realloc(attribs,(count+1)*sizeof(struct user_attribute));
- memset(&attribs[count],0,sizeof(struct user_attribute));
-
- type=*buffer;
- buffer++;
- buflen--;
- n--;
-
- attribs[count].type=type;
- attribs[count].data=buffer;
- attribs[count].len=n;
- buffer+=n;
- buflen-=n;
- count++;
- }
-
- uid->attribs=attribs;
- uid->numattribs=count;
- return count;
-
- too_short:
- log_error("buffer shorter than attribute subpacket\n");
- uid->attribs=attribs;
- uid->numattribs=count;
- return count;
-}
-
-static void setup_user_id(PACKET *packet)
-{
- packet->pkt.user_id->ref = 1;
- packet->pkt.user_id->attribs = NULL;
- packet->pkt.user_id->attrib_data = NULL;
- packet->pkt.user_id->attrib_len = 0;
- packet->pkt.user_id->is_primary = 0;
- packet->pkt.user_id->is_revoked = 0;
- packet->pkt.user_id->is_expired = 0;
- packet->pkt.user_id->expiredate = 0;
- packet->pkt.user_id->created = 0;
- packet->pkt.user_id->help_key_usage = 0;
- packet->pkt.user_id->help_key_expire = 0;
- packet->pkt.user_id->prefs = NULL;
-}
-
-static int
-parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet )
-{
- byte *p;
-
- packet->pkt.user_id = m_alloc(sizeof *packet->pkt.user_id + pktlen);
- packet->pkt.user_id->len = pktlen;
-
- setup_user_id(packet);
-
- p = packet->pkt.user_id->name;
- for( ; pktlen; pktlen--, p++ )
- *p = iobuf_get_noeof(inp);
- *p = 0;
-
- if( list_mode ) {
- int n = packet->pkt.user_id->len;
- printf(":user ID packet: \"");
- /* fixme: Hey why don't we replace this with print_string?? */
- for(p=packet->pkt.user_id->name; n; p++, n-- ) {
- if( *p >= ' ' && *p <= 'z' )
- putchar(*p);
- else
- printf("\\x%02x", *p );
- }
- printf("\"\n");
- }
- return 0;
-}
-
-
-void
-make_attribute_uidname(PKT_user_id *uid, size_t max_namelen)
-{
- assert ( max_namelen > 70 );
- if(uid->numattribs<=0)
- sprintf(uid->name,"[bad attribute packet of size %lu]",uid->attrib_len);
- else if(uid->numattribs>1)
- sprintf(uid->name,"[%d attributes of size %lu]",
- uid->numattribs,uid->attrib_len);
- else
- {
- /* Only one attribute, so list it as the "user id" */
-
- if(uid->attribs->type==ATTRIB_IMAGE)
- {
- u32 len;
- byte type;
-
- if(parse_image_header(uid->attribs,&type,&len))
- sprintf(uid->name,"[%.20s image of size %lu]",
- image_type_to_string(type,1),(ulong)len);
- else
- sprintf(uid->name,"[invalid image]");
- }
- else
- sprintf(uid->name,"[unknown attribute of size %lu]",
- (ulong)uid->attribs->len);
- }
-
- uid->len = strlen(uid->name);
-}
-
-static int
-parse_attribute( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet )
-{
- byte *p;
-
-#define EXTRA_UID_NAME_SPACE 71
- packet->pkt.user_id = m_alloc(sizeof *packet->pkt.user_id
- + EXTRA_UID_NAME_SPACE);
-
- setup_user_id(packet);
-
- packet->pkt.user_id->attrib_data = m_alloc(pktlen);
- packet->pkt.user_id->attrib_len = pktlen;
- p = packet->pkt.user_id->attrib_data;
- for( ; pktlen; pktlen--, p++ )
- *p = iobuf_get_noeof(inp);
-
- /* Now parse out the individual attribute subpackets. This is
- somewhat pointless since there is only one currently defined
- attribute type (jpeg), but it is correct by the spec. */
- parse_attribute_subpkts(packet->pkt.user_id);
-
- make_attribute_uidname(packet->pkt.user_id, EXTRA_UID_NAME_SPACE);
-
- if( list_mode ) {
- printf(":attribute packet: %s\n", packet->pkt.user_id->name );
- }
- return 0;
-}
-
-
-static int
-parse_comment( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet )
-{
- byte *p;
-
- packet->pkt.comment = m_alloc(sizeof *packet->pkt.comment + pktlen - 1);
- packet->pkt.comment->len = pktlen;
- p = packet->pkt.comment->data;
- for( ; pktlen; pktlen--, p++ )
- *p = iobuf_get_noeof(inp);
-
- if( list_mode ) {
- int n = packet->pkt.comment->len;
- printf(":%scomment packet: \"", pkttype == PKT_OLD_COMMENT?
- "OpenPGP draft " : "" );
- for(p=packet->pkt.comment->data; n; p++, n-- ) {
- if( *p >= ' ' && *p <= 'z' )
- putchar(*p);
- else
- printf("\\x%02x", *p );
- }
- printf("\"\n");
- }
- return 0;
-}
-
-
-static void
-parse_trust( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt )
-{
- int c;
-
- if (pktlen)
- {
- c = iobuf_get_noeof(inp);
- pktlen--;
- pkt->pkt.ring_trust = m_alloc( sizeof *pkt->pkt.ring_trust );
- pkt->pkt.ring_trust->trustval = c;
- pkt->pkt.ring_trust->sigcache = 0;
- if (!c && pktlen==1)
- {
- c = iobuf_get_noeof (inp);
- pktlen--;
- /* we require that bit 7 of the sigcache is 0 (easier eof handling)*/
- if ( !(c & 0x80) )
- pkt->pkt.ring_trust->sigcache = c;
- }
- if( list_mode )
- printf(":trust packet: flag=%02x sigcache=%02x\n",
- pkt->pkt.ring_trust->trustval,
- pkt->pkt.ring_trust->sigcache);
- }
- else
- {
- if( list_mode )
- printf(":trust packet: empty\n");
- }
- skip_rest (inp, pktlen);
-}
-
-
-static int
-parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *pkt, int new_ctb )
-{
- int rc = 0;
- int mode, namelen, partial=0;
- PKT_plaintext *pt;
- byte *p;
- int c, i;
-
- if( pktlen && pktlen < 6 ) {
- log_error("packet(%d) too short (%lu)\n", pkttype, (ulong)pktlen);
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- /* A packet length of zero indicates partial body length. A zero
- data length isn't a zero length packet due to the header (mode,
- name, etc), so this is accurate. */
- if(pktlen==0)
- partial=1;
- mode = iobuf_get_noeof(inp); if( pktlen ) pktlen--;
- namelen = iobuf_get_noeof(inp); if( pktlen ) pktlen--;
- pt = pkt->pkt.plaintext = m_alloc(sizeof *pkt->pkt.plaintext + namelen -1);
- pt->new_ctb = new_ctb;
- pt->mode = mode;
- pt->namelen = namelen;
- pt->is_partial = partial;
- if( pktlen ) {
- for( i=0; pktlen > 4 && i < namelen; pktlen--, i++ )
- pt->name[i] = iobuf_get_noeof(inp);
- }
- else {
- for( i=0; i < namelen; i++ )
- if( (c=iobuf_get(inp)) == -1 )
- break;
- else
- pt->name[i] = c;
- }
- pt->timestamp = read_32(inp); if( pktlen) pktlen -= 4;
- pt->len = pktlen;
- pt->buf = inp;
- pktlen = 0;
-
- if( list_mode ) {
- printf(":literal data packet:\n"
- "\tmode %c, created %lu, name=\"",
- mode >= ' ' && mode <'z'? mode : '?',
- (ulong)pt->timestamp );
- for(p=pt->name,i=0; i < namelen; p++, i++ ) {
- if( *p >= ' ' && *p <= 'z' )
- putchar(*p);
- else
- printf("\\x%02x", *p );
- }
- printf("\",\n\traw data: %lu bytes\n", (ulong)pt->len );
- }
-
- leave:
- return rc;
-}
-
-
-static int
-parse_compressed( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *pkt, int new_ctb )
-{
- PKT_compressed *zd;
-
- /* pktlen is here 0, but data follows
- * (this should be the last object in a file or
- * the compress algorithm should know the length)
- */
- zd = pkt->pkt.compressed = m_alloc(sizeof *pkt->pkt.compressed );
- zd->algorithm = iobuf_get_noeof(inp);
- zd->len = 0; /* not used */
- zd->new_ctb = new_ctb;
- zd->buf = inp;
- if( list_mode )
- printf(":compressed packet: algo=%d\n", zd->algorithm);
- return 0;
-}
-
-
-static int
-parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *pkt, int new_ctb )
-{
- int rc = 0;
- PKT_encrypted *ed;
- unsigned long orig_pktlen = pktlen;
-
- ed = pkt->pkt.encrypted = m_alloc(sizeof *pkt->pkt.encrypted );
- ed->len = pktlen;
- /* we don't know the extralen which is (cipher_blocksize+2)
- because the algorithm ist not specified in this packet.
- However, it is only important to know this for some sanity
- checks on the packet length - it doesn't matter that we can't
- do it */
- ed->extralen = 0;
- ed->buf = NULL;
- ed->new_ctb = new_ctb;
- ed->mdc_method = 0;
- if( pkttype == PKT_ENCRYPTED_MDC ) {
- /* fixme: add some pktlen sanity checks */
- int version;
-
- version = iobuf_get_noeof(inp);
- if (orig_pktlen)
- pktlen--;
- if( version != 1 ) {
- log_error("encrypted_mdc packet with unknown version %d\n",
- version);
- /*skip_rest(inp, pktlen); should we really do this? */
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- ed->mdc_method = DIGEST_ALGO_SHA1;
- }
- if( orig_pktlen && pktlen < 10 ) { /* actually this is blocksize+2 */
- log_error("packet(%d) too short\n", pkttype);
- rc = G10ERR_INVALID_PACKET;
- skip_rest(inp, pktlen);
- goto leave;
- }
- if( list_mode ) {
- if( orig_pktlen )
- printf(":encrypted data packet:\n\tlength: %lu\n", orig_pktlen);
- else
- printf(":encrypted data packet:\n\tlength: unknown\n");
- if( ed->mdc_method )
- printf("\tmdc_method: %d\n", ed->mdc_method );
- }
-
- ed->buf = inp;
- pktlen = 0;
-
- leave:
- return rc;
-}
-
-
-static int
-parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen,
- PACKET *pkt, int new_ctb )
-{
- int rc = 0;
- PKT_mdc *mdc;
- byte *p;
-
- mdc = pkt->pkt.mdc= m_alloc(sizeof *pkt->pkt.mdc );
- if( list_mode )
- printf(":mdc packet: length=%lu\n", pktlen);
- if( !new_ctb || pktlen != 20 ) {
- log_error("mdc_packet with invalid encoding\n");
- rc = G10ERR_INVALID_PACKET;
- goto leave;
- }
- p = mdc->hash;
- for( ; pktlen; pktlen--, p++ )
- *p = iobuf_get_noeof(inp);
-
- leave:
- return rc;
-}
-
-
-/*
- * This packet is internally generated by PGG (by armor.c) to
- * transfer some information to the lower layer. To make sure that
- * this packet is really a GPG faked one and not one comming from outside,
- * we first check that tehre is a unique tag in it.
- * The format of such a control packet is:
- * n byte session marker
- * 1 byte control type CTRLPKT_xxxxx
- * m byte control data
- */
-
-static int
-parse_gpg_control( IOBUF inp,
- int pkttype, unsigned long pktlen, PACKET *packet )
-{
- byte *p;
- const byte *sesmark;
- size_t sesmarklen;
- int i;
-
- if ( list_mode )
- printf(":packet 63: length %lu ", pktlen);
-
- sesmark = get_session_marker ( &sesmarklen );
- if ( pktlen < sesmarklen+1 ) /* 1 is for the control bytes */
- goto skipit;
- for( i=0; i < sesmarklen; i++, pktlen-- ) {
- if ( sesmark[i] != iobuf_get_noeof(inp) )
- goto skipit;
- }
- if ( list_mode )
- puts ("- gpg control packet");
-
- packet->pkt.gpg_control = m_alloc(sizeof *packet->pkt.gpg_control
- + pktlen - 1);
- packet->pkt.gpg_control->control = iobuf_get_noeof(inp); pktlen--;
- packet->pkt.gpg_control->datalen = pktlen;
- p = packet->pkt.gpg_control->data;
- for( ; pktlen; pktlen--, p++ )
- *p = iobuf_get_noeof(inp);
-
- return 0;
-
- skipit:
- if ( list_mode ) {
- int c;
-
- i=0;
- printf("- private (rest length %lu)\n", pktlen);
- if( iobuf_in_block_mode(inp) ) {
- while( (c=iobuf_get(inp)) != -1 )
- dump_hex_line(c, &i);
- }
- else {
- for( ; pktlen; pktlen-- )
- dump_hex_line(iobuf_get(inp), &i);
- }
- putchar('\n');
- }
- skip_rest(inp,pktlen);
- return G10ERR_INVALID_PACKET;
-}
-
-/* create a gpg control packet to be used internally as a placeholder */
-PACKET *
-create_gpg_control( ctrlpkttype_t type, const byte *data, size_t datalen )
-{
- PACKET *packet;
- byte *p;
-
- packet = m_alloc( sizeof *packet );
- init_packet(packet);
- packet->pkttype = PKT_GPG_CONTROL;
- packet->pkt.gpg_control = m_alloc(sizeof *packet->pkt.gpg_control
- + datalen - 1);
- packet->pkt.gpg_control->control = type;
- packet->pkt.gpg_control->datalen = datalen;
- p = packet->pkt.gpg_control->data;
- for( ; datalen; datalen--, p++ )
- *p = *data++;
-
- return packet;
-}
diff --git a/g10/passphrase.c b/g10/passphrase.c
deleted file mode 100644
index d84d6e88b..000000000
--- a/g10/passphrase.c
+++ /dev/null
@@ -1,1164 +0,0 @@
-/* passphrase.c - Get a passphrase
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <assert.h>
-#if !defined(HAVE_DOSISH_SYSTEM) && !defined(__riscos__)
-#include <sys/socket.h>
-#include <sys/un.h>
-#endif
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
-# include <windows.h>
-#endif
-#include <errno.h>
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#include "util.h"
-#include "memory.h"
-#include "options.h"
-#include "ttyio.h"
-#include "cipher.h"
-#include "keydb.h"
-#include "main.h"
-#include "i18n.h"
-#include "status.h"
-
-
-enum gpga_protocol_codes {
- /* Request codes */
- GPGA_PROT_GET_VERSION = 1,
- GPGA_PROT_GET_PASSPHRASE = 2,
- GPGA_PROT_CLEAR_PASSPHRASE= 3,
- GPGA_PROT_SHUTDOWN = 4,
- GPGA_PROT_FLUSH = 5,
-
- /* Reply codes */
- GPGA_PROT_REPLY_BASE = 0x10000,
- GPGA_PROT_OKAY = 0x10001,
- GPGA_PROT_GOT_PASSPHRASE = 0x10002,
-
- /* Error codes */
- GPGA_PROT_ERROR_BASE = 0x20000,
- GPGA_PROT_PROTOCOL_ERROR = 0x20001,
- GPGA_PROT_INVALID_REQUEST= 0x20002,
- GPGA_PROT_CANCELED = 0x20003,
- GPGA_PROT_NO_PASSPHRASE = 0x20004,
- GPGA_PROT_BAD_PASSPHRASE = 0x20005,
- GPGA_PROT_INVALID_DATA = 0x20006,
- GPGA_PROT_NOT_IMPLEMENTED= 0x20007,
- GPGA_PROT_UI_PROBLEM = 0x20008
-};
-
-
-#define buftou32( p ) ((*(byte*)(p) << 24) | (*((byte*)(p)+1)<< 16) | \
- (*((byte*)(p)+2) << 8) | (*((byte*)(p)+3)))
-#define u32tobuf( p, a ) do { \
- ((byte*)p)[0] = (byte)((a) >> 24); \
- ((byte*)p)[1] = (byte)((a) >> 16); \
- ((byte*)p)[2] = (byte)((a) >> 8); \
- ((byte*)p)[3] = (byte)((a) ); \
- } while(0)
-
-#define digitp(p) (*(p) >= '0' && *(p) <= '9')
-#define hexdigitp(a) (digitp (a) \
- || (*(a) >= 'A' && *(a) <= 'F') \
- || (*(a) >= 'a' && *(a) <= 'f'))
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-
-static char *fd_passwd = NULL;
-static char *next_pw = NULL;
-static char *last_pw = NULL;
-
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
-static int read_fd = 0;
-static int write_fd = 0;
-#endif
-
-static void hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create );
-
-int
-have_static_passphrase()
-{
- if ( opt.use_agent )
- return 0;
- return !!fd_passwd;
-}
-
-/****************
- * Set the passphrase to be used for the next query and only for the next
- * one.
- */
-void
-set_next_passphrase( const char *s )
-{
- m_free(next_pw);
- next_pw = NULL;
- if( s ) {
- next_pw = m_alloc_secure( strlen(s)+1 );
- strcpy(next_pw, s );
- }
-}
-
-/****************
- * Get the last passphrase used in passphrase_to_dek.
- * Note: This removes the passphrase from this modules and
- * the caller must free the result. May return NULL:
- */
-char *
-get_last_passphrase()
-{
- char *p = last_pw;
- last_pw = NULL;
- return p;
-}
-
-
-void
-read_passphrase_from_fd( int fd )
-{
- int i, len;
- char *pw;
-
- if ( opt.use_agent )
- return; /* not used here */
-
- if( !opt.batch )
- tty_printf("Reading passphrase from file descriptor %d ...", fd );
- for( pw = NULL, i = len = 100; ; i++ ) {
- if( i >= len-1 ) {
- char *pw2 = pw;
- len += 100;
- pw = m_alloc_secure( len );
- if( pw2 )
- memcpy(pw, pw2, i );
- else
- i=0;
- }
- if( read( fd, pw+i, 1) != 1 || pw[i] == '\n' )
- break;
- }
- pw[i] = 0;
- if( !opt.batch )
- tty_printf("\b\b\b \n" );
-
- m_free( fd_passwd );
- fd_passwd = pw;
-}
-
-static int
-writen ( int fd, const void *buf, size_t nbytes )
-{
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- DWORD nwritten, nleft = nbytes;
-
- while (nleft > 0) {
- if ( !WriteFile( (HANDLE)write_fd, buf, nleft, &nwritten, NULL) ) {
- log_error("write failed: ec=%d\n", (int)GetLastError());
- return -1;
- }
- /*log_info("** WriteFile fd=%d nytes=%d nwritten=%d\n",
- write_fd, nbytes, (int)nwritten);*/
- Sleep(100);
-
- nleft -= nwritten;
- buf = (const BYTE *)buf + nwritten;
- }
-#elif defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- /* not implemented */
-#else
- size_t nleft = nbytes;
- int nwritten;
-
- while( nleft > 0 ) {
- nwritten = write( fd, buf, nleft );
- if( nwritten < 0 ) {
- if ( errno == EINTR )
- nwritten = 0;
- else {
- log_error ( "write() failed: %s\n", strerror (errno) );
- return -1;
- }
- }
- nleft -= nwritten;
- buf = (const char*)buf + nwritten;
- }
-#endif
-
- return 0;
-}
-
-
-static int
-readn ( int fd, void *buf, size_t buflen, size_t *ret_nread )
-{
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- DWORD nread, nleft = buflen;
-
- while (nleft > 0) {
- if ( !ReadFile( (HANDLE)read_fd, buf, nleft, &nread, NULL) ) {
- log_error("read() error: ec=%d\n", (int)GetLastError());
- return -1;
- }
- if (!nread || GetLastError() == ERROR_BROKEN_PIPE)
- break;
- /*log_info("** ReadFile fd=%d buflen=%d nread=%d\n",
- read_fd, buflen, (int)nread);*/
- Sleep(100);
-
- nleft -= nread;
- buf = (BYTE *)buf + nread;
- }
- if (ret_nread)
- *ret_nread = buflen - nleft;
-
-#elif defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- /* not implemented */
-#else
- size_t nleft = buflen;
- int nread;
- char *p;
-
- p = buf;
- while( nleft > 0 ) {
- nread = read ( fd, buf, nleft );
- if( nread < 0 ) {
- if (nread == EINTR)
- nread = 0;
- else {
- log_error ( "read() error: %s\n", strerror (errno) );
- return -1;
- }
- }
- else if( !nread )
- break; /* EOF */
- nleft -= nread;
- buf = (char*)buf + nread;
- }
- if( ret_nread )
- *ret_nread = buflen - nleft;
-#endif
-
- return 0;
-}
-
-/* read an entire line */
-static int
-readline (int fd, char *buf, size_t buflen)
-{
- size_t nleft = buflen;
- char *p;
- int nread = 0;
-
- while (nleft > 0)
- {
- int n = read (fd, buf, nleft);
- if (n < 0)
- {
- if (errno == EINTR)
- continue;
- return -1; /* read error */
- }
- else if (!n)
- {
- return -1; /* incomplete line */
- }
- p = buf;
- nleft -= n;
- buf += n;
- nread += n;
-
- for (; n && *p != '\n'; n--, p++)
- ;
- if (n)
- {
- break; /* at least one full line available - that's enough.
- This function is just a temporary hack until we use
- the assuna lib in gpg. So it is okay to forget
- about pending bytes */
- }
- }
-
- return nread;
-}
-
-
-
-#if !defined (__riscos__)
-
-#if !defined (__MINGW32__) && !defined (__CYGWIN32__)
-/* For the new Assuan protocol we may have to send options */
-static int
-agent_send_option (int fd, const char *name, const char *value)
-{
- char buf[200];
- int nread;
- char *line;
- int i;
-
- line = m_alloc (7 + strlen (name) + 1 + strlen (value) + 2);
- strcpy (stpcpy (stpcpy (stpcpy (
- stpcpy (line, "OPTION "), name), "="), value), "\n");
- i = writen (fd, line, strlen (line));
- m_free (line);
- if (i)
- return -1;
-
- /* get response */
- nread = readline (fd, buf, DIM(buf)-1);
- if (nread < 3)
- return -1;
-
- if (buf[0] == 'O' && buf[1] == 'K' && (buf[2] == ' ' || buf[2] == '\n'))
- return 0; /* okay */
-
- return -1;
-}
-
-static int
-agent_send_all_options (int fd)
-{
- char *dft_display = NULL;
- char *dft_ttyname = NULL;
- char *dft_ttytype = NULL;
- char *old_lc = NULL;
- char *dft_lc = NULL;
- int rc = 0;
-
- dft_display = getenv ("DISPLAY");
- if (opt.display || dft_display)
- {
- if (agent_send_option (fd, "display",
- opt.display ? opt.display : dft_display))
- return -1;
- }
-
- if (!opt.ttyname && ttyname (1))
- dft_ttyname = ttyname (1);
- if (opt.ttyname || dft_ttyname)
- {
- if (agent_send_option (fd, "ttyname",
- opt.ttyname ? opt.ttyname : dft_ttyname))
- return -1;
- }
-
- dft_ttytype = getenv ("TERM");
- if (opt.ttytype || (dft_ttyname && dft_ttytype))
- {
- if (agent_send_option (fd, "ttytype",
- opt.ttyname ? opt.ttytype : dft_ttytype))
- return -1;
- }
-
-#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
- old_lc = setlocale (LC_CTYPE, NULL);
- if (old_lc)
- old_lc = m_strdup (old_lc);
- dft_lc = setlocale (LC_CTYPE, "");
-#endif
- if (opt.lc_ctype || (dft_ttyname && dft_lc))
- {
- rc = agent_send_option (fd, "lc-ctype",
- opt.lc_ctype ? opt.lc_ctype : dft_lc);
- }
-#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
- if (old_lc)
- {
- setlocale (LC_CTYPE, old_lc);
- m_free (old_lc);
- }
-#endif
- if (rc)
- return rc;
-
-#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
- old_lc = setlocale (LC_MESSAGES, NULL);
- if (old_lc)
- old_lc = m_strdup (old_lc);
- dft_lc = setlocale (LC_MESSAGES, "");
-#endif
- if (opt.lc_messages || (dft_ttyname && dft_lc))
- {
- rc = agent_send_option (fd, "lc-messages",
- opt.lc_messages ? opt.lc_messages : dft_lc);
- }
-#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
- if (old_lc)
- {
- setlocale (LC_MESSAGES, old_lc);
- m_free (old_lc);
- }
-#endif
- return rc;
-}
-#endif /*!__MINGW32__ && !__CYGWIN32__*/
-
-
-/*
- * Open a connection to the agent and send the magic string
- * Returns: -1 on error or an filedescriptor for urther processing
- */
-
-static int
-agent_open (int *ret_prot)
-{
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- int fd;
- char *infostr, *p;
- HANDLE h;
- char pidstr[128];
-
- *ret_prot = 0;
- if ( !(infostr = read_w32_registry_string(NULL, "Software\\GNU\\GnuPG",
- "agentPID"))
- || *infostr == '0') {
- log_error( _("gpg-agent is not available in this session\n"));
- return -1;
- }
- free(infostr);
-
- sprintf(pidstr, "%u", (unsigned int)GetCurrentProcessId());
- if (write_w32_registry_string(NULL, "Software\\GNU\\GnuPG",
- "agentCID", pidstr)) {
- log_error( _("can't set client pid for the agent\n") );
- return -1;
- }
- h = OpenEvent(EVENT_ALL_ACCESS, FALSE, "gpg_agent");
- SetEvent(h);
- Sleep(50); /* some time for the server */
- if ( !(p = read_w32_registry_string(NULL, "Software\\GNU\\GnuPG",
- "agentReadFD")) ) {
- log_error( _("can't get server read FD for the agent\n") );
- return -1;
- }
- read_fd = atol(p);
- free(p);
- if ( !(p = read_w32_registry_string(NULL, "Software\\GNU\\GnuPG",
- "agentWriteFD")) ) {
- log_error ( _("can't get server write FD for the agent\n") );
- return -1;
- }
- write_fd = atol(p);
- free(p);
- fd = 0;
-
- if ( writen ( fd, "GPGA\0\0\0\x01", 8 ) ) {
- fd = -1;
- }
-#else /* Posix */
-
- int fd;
- char *infostr, *p;
- struct sockaddr_un client_addr;
- size_t len;
- int prot;
-
- if (opt.gpg_agent_info)
- infostr = m_strdup (opt.gpg_agent_info);
- else
- {
- infostr = getenv ( "GPG_AGENT_INFO" );
- if ( !infostr ) {
- log_error (_("gpg-agent is not available in this session\n"));
- opt.use_agent = 0;
- return -1;
- }
- infostr = m_strdup ( infostr );
- }
-
- if ( !(p = strchr ( infostr, ':')) || p == infostr
- || (p-infostr)+1 >= sizeof client_addr.sun_path ) {
- log_error( _("malformed GPG_AGENT_INFO environment variable\n"));
- m_free (infostr );
- opt.use_agent = 0;
- return -1;
- }
- *p++ = 0;
- /* See whether this is the new gpg-agent using the Assuna protocl.
- This agent identifies itself by have an info string with a
- version number in the 3rd field. */
- while (*p && *p != ':')
- p++;
- prot = *p? atoi (p+1) : 0;
- if ( prot < 0 || prot > 1) {
- log_error (_("gpg-agent protocol version %d is not supported\n"),prot);
- m_free (infostr );
- opt.use_agent = 0;
- return -1;
- }
- *ret_prot = prot;
-
- if( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1 ) {
- log_error ("can't create socket: %s\n", strerror(errno) );
- m_free (infostr );
- opt.use_agent = 0;
- return -1;
- }
-
- memset( &client_addr, 0, sizeof client_addr );
- client_addr.sun_family = AF_UNIX;
- strcpy( client_addr.sun_path, infostr );
- len = offsetof (struct sockaddr_un, sun_path)
- + strlen(client_addr.sun_path) + 1;
-
- if( connect( fd, (struct sockaddr*)&client_addr, len ) == -1 ) {
- log_error ( _("can't connect to `%s': %s\n"),
- infostr, strerror (errno) );
- m_free (infostr );
- close (fd );
- opt.use_agent = 0;
- return -1;
- }
- m_free (infostr);
-
- if (!prot) {
- if ( writen ( fd, "GPGA\0\0\0\x01", 8 ) ) {
- close (fd);
- fd = -1;
- }
- }
- else { /* assuan based gpg-agent */
- char line[200];
- int nread;
-
- nread = readline (fd, line, DIM(line));
- if (nread < 3 || !(line[0] == 'O' && line[1] == 'K'
- && (line[2] == '\n' || line[2] == ' ')) ) {
- log_error ( _("communication problem with gpg-agent\n"));
- close (fd );
- opt.use_agent = 0;
- return -1;
- }
-
- if (agent_send_all_options (fd)) {
- log_error (_("problem with the agent - disabling agent use\n"));
- close (fd);
- opt.use_agent = 0;
- return -1;
- }
-
- }
-#endif
-
- return fd;
-}
-
-
-static void
-agent_close ( int fd )
-{
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- HANDLE h = OpenEvent(EVENT_ALL_ACCESS, FALSE, "gpg_agent");
- ResetEvent(h);
-#else
- close (fd);
-#endif
-}
-#endif /* !__riscos__ */
-
-
-
-/*
- * Ask the GPG Agent for the passphrase.
- * Mode 0: Allow cached passphrase
- * 1: No cached passphrase FIXME: Not really implemented
- * 2: Ditto, but change the text to "repeat entry"
- */
-static char *
-agent_get_passphrase ( u32 *keyid, int mode, const char *tryagain_text )
-{
-#if defined(__riscos__)
- return NULL;
-#else
- size_t n;
- char *atext;
- char buf[50];
- int fd = -1;
- int nread;
- u32 reply;
- char *pw = NULL;
- PKT_public_key *pk = m_alloc_clear( sizeof *pk );
- byte fpr[MAX_FINGERPRINT_LEN];
- int prot;
-
-#if MAX_FINGERPRINT_LEN < 20
-#error agent needs a 20 byte fingerprint
-#endif
-
- memset (fpr, 0, MAX_FINGERPRINT_LEN );
- if( keyid && get_pubkey( pk, keyid ) )
- pk = NULL; /* oops: no key for some reason */
-
- if ( !mode && pk )
- {
- char *uid;
- size_t uidlen;
- const char *algo_name = pubkey_algo_to_string ( pk->pubkey_algo );
- const char *timestr;
- char *maink;
- const char *fmtstr;
-
- if ( !algo_name )
- algo_name = "?";
-
- fmtstr = _(" (main key ID %08lX)");
- maink = m_alloc ( strlen (fmtstr) + 20 );
- if( keyid[2] && keyid[3] && keyid[0] != keyid[2]
- && keyid[1] != keyid[3] )
- sprintf( maink, fmtstr, (ulong)keyid[3] );
- else
- *maink = 0;
-
- uid = get_user_id ( keyid, &uidlen );
- timestr = strtimestamp (pk->timestamp);
- fmtstr = _("You need a passphrase to unlock the"
- " secret key for user:\n"
- "\"%.*s\"\n"
- "%u-bit %s key, ID %08lX, created %s%s\n" );
- atext = m_alloc ( 100 + strlen (fmtstr)
- + uidlen + 15 + strlen(algo_name) + 8
- + strlen (timestr) + strlen (maink) );
- sprintf (atext, fmtstr,
- uidlen, uid,
- nbits_from_pk (pk), algo_name, (ulong)keyid[1], timestr,
- maink );
- m_free (uid);
- m_free (maink);
-
- {
- size_t dummy;
- fingerprint_from_pk( pk, fpr, &dummy );
- }
-
- }
- else if (mode == 1 )
- atext = m_strdup ( _("Enter passphrase\n") );
- else
- atext = m_strdup ( _("Repeat passphrase\n") );
-
- if ( (fd = agent_open (&prot)) == -1 )
- goto failure;
-
- if (!prot)
- { /* old style protocol */
- n = 4 + 20 + strlen (atext);
- u32tobuf (buf, n );
- u32tobuf (buf+4, GPGA_PROT_GET_PASSPHRASE );
- memcpy (buf+8, fpr, 20 );
- if ( writen ( fd, buf, 28 ) || writen ( fd, atext, strlen (atext) ) )
- goto failure;
- m_free (atext); atext = NULL;
-
- /* get response */
- if ( readn ( fd, buf, 12, &nread ) )
- goto failure;
-
- if ( nread < 8 )
- {
- log_error ( "response from agent too short\n" );
- goto failure;
- }
- n = buftou32 ( buf );
- reply = buftou32 ( buf + 4 );
- if ( reply == GPGA_PROT_GOT_PASSPHRASE )
- {
- size_t pwlen;
- size_t nn;
-
- if ( nread < 12 || n < 8 )
- {
- log_error ( "response from agent too short\n" );
- goto failure;
- }
- pwlen = buftou32 ( buf + 8 );
- nread -= 12;
- n -= 8;
- if ( pwlen > n || n > 1000 )
- {
- log_error (_("passphrase too long\n"));
- /* or protocol error */
- goto failure;
- }
- /* we read the whole block in one chunk to give no hints
- * on how long the passhrase actually is - this wastes some bytes
- * but because we already have this padding we should not loosen
- * this by issuing 2 read calls */
- pw = m_alloc_secure ( n+1 );
- if ( readn ( fd, pw, n, &nn ) )
- goto failure;
- if ( n != nn )
- {
- log_error (_("invalid response from agent\n"));
- goto failure;
- }
- pw[pwlen] = 0; /* make a C String */
- agent_close (fd);
- free_public_key( pk );
- return pw;
- }
- else if ( reply == GPGA_PROT_CANCELED )
- log_info ( _("cancelled by user\n") );
- else
- log_error ( _("problem with the agent: agent returns 0x%lx\n"),
- (ulong)reply );
- }
- else
- { /* The new Assuan protocol */
- char *line, *p;
- const unsigned char *s;
- int i;
-
- if (!tryagain_text)
- tryagain_text = "X";
-
- /* We allocate 2 time the needed space for atext so that there
- is nenough space for escaping */
- line = m_alloc (15 + 46
- + 3*strlen (tryagain_text) + 3*strlen (atext) + 2);
- strcpy (line, "GET_PASSPHRASE ");
- p = line+15;
- if (!mode)
- {
- for (i=0; i < 20; i++, p +=2 )
- sprintf (p, "%02X", fpr[i]);
- }
- else
- *p++ = 'X'; /* no caching */
- *p++ = ' ';
- for (i=0, s=tryagain_text; *s; s++)
- {
- if (*s < ' ' || *s == '+')
- {
- sprintf (p, "%%%02X", *s);
- p += 3;
- }
- else if (*s == ' ')
- *p++ = '+';
- else
- *p++ = *s;
- }
- *p++ = ' ';
- *p++ = 'X'; /* Use the standard prompt */
- *p++ = ' ';
- /* copy description */
- for (i=0, s= atext; *s; s++)
- {
- if (*s < ' ' || *s == '+')
- {
- sprintf (p, "%%%02X", *s);
- p += 3;
- }
- else if (*s == ' ')
- *p++ = '+';
- else
- *p++ = *s;
- }
- *p++ = '\n';
- i = writen (fd, line, p - line);
- m_free (line);
- if (i)
- goto failure;
- m_free (atext); atext = NULL;
-
- /* get response */
- pw = m_alloc_secure (500);
- nread = readline (fd, pw, 499);
- if (nread < 3)
- goto failure;
-
- if (pw[0] == 'O' && pw[1] == 'K' && pw[2] == ' ')
- { /* we got a passphrase - convert it back from hex */
- size_t pwlen = 0;
-
- for (i=3; i < nread && hexdigitp (pw+i); i+=2)
- pw[pwlen++] = xtoi_2 (pw+i);
- pw[pwlen] = 0; /* make a C String */
- agent_close (fd);
- free_public_key( pk );
- return pw;
- }
- else if (nread > 7 && !memcmp (pw, "ERR 111", 7)
- && (pw[7] == ' ' || pw[7] == '\n') )
- log_info (_("cancelled by user\n") );
- else
- {
- log_error (_("problem with the agent - disabling agent use\n"));
- opt.use_agent = 0;
- }
- }
-
-
- failure:
- m_free (atext);
- if ( fd != -1 )
- agent_close (fd);
- m_free (pw );
- free_public_key( pk );
-
- return NULL;
-#endif /* Posix or W32 */
-}
-
-/*
- * Clear the cached passphrase
- */
-void
-passphrase_clear_cache ( u32 *keyid, int algo )
-{
-#if defined(__riscos__)
- return ;
-#else
- size_t n;
- char buf[200];
- int fd = -1;
- size_t nread;
- u32 reply;
- PKT_public_key *pk;
- byte fpr[MAX_FINGERPRINT_LEN];
- int prot;
-
-#if MAX_FINGERPRINT_LEN < 20
-#error agent needs a 20 byte fingerprint
-#endif
-
- if (!opt.use_agent)
- return;
-
- pk = m_alloc_clear ( sizeof *pk );
- memset (fpr, 0, MAX_FINGERPRINT_LEN );
- if( !keyid || get_pubkey( pk, keyid ) )
- {
- log_debug ("oops, no key in passphrase_clear_cache\n");
- goto failure; /* oops: no key for some reason */
- }
-
- {
- size_t dummy;
- fingerprint_from_pk( pk, fpr, &dummy );
- }
-
- if ( (fd = agent_open (&prot)) == -1 )
- goto failure;
-
- if (!prot)
- {
- n = 4 + 20;
- u32tobuf (buf, n );
- u32tobuf (buf+4, GPGA_PROT_CLEAR_PASSPHRASE );
- memcpy (buf+8, fpr, 20 );
- if ( writen ( fd, buf, 28 ) )
- goto failure;
-
- /* get response */
- if ( readn ( fd, buf, 8, &nread ) )
- goto failure;
-
- if ( nread < 8 ) {
- log_error ( "response from agent too short\n" );
- goto failure;
- }
-
- reply = buftou32 ( buf + 4 );
- if ( reply != GPGA_PROT_OKAY && reply != GPGA_PROT_NO_PASSPHRASE )
- {
- log_error ( _("problem with the agent: agent returns 0x%lx\n"),
- (ulong)reply );
- }
- }
- else
- { /* The assuan protocol */
- char *line, *p;
- int i;
-
- line = m_alloc (17 + 40 + 2);
- strcpy (line, "CLEAR_PASSPHRASE ");
- p = line+17;
- for (i=0; i < 20; i++, p +=2 )
- sprintf (p, "%02X", fpr[i]);
- *p++ = '\n';
- i = writen (fd, line, p - line);
- m_free (line);
- if (i)
- goto failure;
-
- /* get response */
- nread = readline (fd, buf, DIM(buf)-1);
- if (nread < 3)
- goto failure;
-
- if (buf[0] == 'O' && buf[1] == 'K' && (buf[2] == ' ' || buf[2] == '\n'))
- ;
- else
- {
- log_error (_("problem with the agent - disabling agent use\n"));
- opt.use_agent = 0;
- }
- }
-
- failure:
- if (fd != -1)
- agent_close (fd);
- free_public_key( pk );
-#endif /* Posix or W32 */
-}
-
-
-
-
-/****************
- * Get a passphrase for the secret key with KEYID, display TEXT
- * if the user needs to enter the passphrase.
- * mode 0 = standard, 2 = create new passphrase
- * Returns: a DEK with a session key; caller must free
- * or NULL if the passphrase was not correctly repeated.
- * (only for mode 2)
- * a dek->keylen of 0 means: no passphrase entered.
- * (only for mode 2)
- * pubkey_algo is only informational.
- */
-DEK *
-passphrase_to_dek( u32 *keyid, int pubkey_algo,
- int cipher_algo, STRING2KEY *s2k, int mode,
- const char *tryagain_text)
-{
- char *pw = NULL;
- DEK *dek;
- STRING2KEY help_s2k;
-
- if( !s2k ) {
- /* This is used for the old rfc1991 mode
- * Note: This must match the code in encode.c with opt.rfc1991 set */
- int algo = opt.def_digest_algo ? opt.def_digest_algo
- : opt.s2k_digest_algo;
-
- s2k = &help_s2k;
- s2k->mode = 0;
- s2k->hash_algo = algo;
- }
-
- if( !next_pw && is_status_enabled() ) {
- char buf[50];
-
- if( keyid ) {
- u32 used_kid[2];
- char *us;
-
- if( keyid[2] && keyid[3] ) {
- used_kid[0] = keyid[2];
- used_kid[1] = keyid[3];
- }
- else {
- used_kid[0] = keyid[0];
- used_kid[1] = keyid[1];
- }
-
- us = get_long_user_id_string( keyid );
- write_status_text( STATUS_USERID_HINT, us );
- m_free(us);
-
- sprintf( buf, "%08lX%08lX %08lX%08lX %d 0",
- (ulong)keyid[0], (ulong)keyid[1],
- (ulong)used_kid[0], (ulong)used_kid[1],
- pubkey_algo );
-
- write_status_text( STATUS_NEED_PASSPHRASE, buf );
- }
- else {
- sprintf( buf, "%d %d %d", cipher_algo, s2k->mode, s2k->hash_algo );
- write_status_text( STATUS_NEED_PASSPHRASE_SYM, buf );
- }
- }
-
- if( keyid && !opt.batch && !next_pw ) {
- PKT_public_key *pk = m_alloc_clear( sizeof *pk );
- size_t n;
- char *p;
-
- tty_printf(_("\nYou need a passphrase to unlock the secret key for\n"
- "user: \"") );
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\"\n");
-
- if( !get_pubkey( pk, keyid ) ) {
- const char *s = pubkey_algo_to_string( pk->pubkey_algo );
- tty_printf( _("%u-bit %s key, ID %08lX, created %s"),
- nbits_from_pk( pk ), s?s:"?", (ulong)keyid[1],
- strtimestamp(pk->timestamp) );
- if( keyid[2] && keyid[3] && keyid[0] != keyid[2]
- && keyid[1] != keyid[3] )
- tty_printf( _(" (main key ID %08lX)"), (ulong)keyid[3] );
- tty_printf("\n");
- }
-
- tty_printf("\n");
- free_public_key( pk );
- }
-
- agent_died:
- if( next_pw ) {
- pw = next_pw;
- next_pw = NULL;
- }
- else if ( opt.use_agent ) {
- pw = agent_get_passphrase ( keyid, mode == 2? 1: 0, tryagain_text );
- if (!pw)
- {
- if (!opt.use_agent)
- goto agent_died;
- pw = m_strdup ("");
- }
- if( *pw && mode == 2 ) {
- char *pw2 = agent_get_passphrase ( keyid, 2, NULL );
- if (!pw2)
- {
- if (!opt.use_agent)
- {
- m_free (pw);
- pw = NULL;
- goto agent_died;
- }
- pw2 = m_strdup ("");
- }
- if( strcmp(pw, pw2) ) {
- m_free(pw2);
- m_free(pw);
- return NULL;
- }
- m_free(pw2);
- }
- }
- else if( fd_passwd ) {
- pw = m_alloc_secure( strlen(fd_passwd)+1 );
- strcpy( pw, fd_passwd );
- }
- else if( opt.batch ) {
- log_error(_("can't query password in batchmode\n"));
- pw = m_strdup( "" ); /* return an empty passphrase */
- }
- else {
- pw = cpr_get_hidden("passphrase.enter", _("Enter passphrase: ") );
- tty_kill_prompt();
- if( mode == 2 && !cpr_enabled() ) {
- char *pw2 = cpr_get_hidden("passphrase.repeat",
- _("Repeat passphrase: ") );
- tty_kill_prompt();
- if( strcmp(pw, pw2) ) {
- m_free(pw2);
- m_free(pw);
- return NULL;
- }
- m_free(pw2);
- }
- }
-
- if( !pw || !*pw )
- write_status( STATUS_MISSING_PASSPHRASE );
-
- dek = m_alloc_secure_clear ( sizeof *dek );
- dek->algo = cipher_algo;
- if( !*pw && mode == 2 )
- dek->keylen = 0;
- else
- hash_passphrase( dek, pw, s2k, mode==2 );
- m_free(last_pw);
- last_pw = pw;
- return dek;
-}
-
-
-/****************
- * Hash a passphrase using the supplied s2k. If create is true, create
- * a new salt or what else must be filled into the s2k for a new key.
- * always needs: dek->algo, s2k->mode, s2k->hash_algo.
- */
-static void
-hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create )
-{
- MD_HANDLE md;
- int pass, i;
- int used = 0;
- int pwlen = strlen(pw);
-
- assert( s2k->hash_algo );
- dek->keylen = cipher_get_keylen( dek->algo ) / 8;
- if( !(dek->keylen > 0 && dek->keylen <= DIM(dek->key)) )
- BUG();
-
- md = md_open( s2k->hash_algo, 1);
- for(pass=0; used < dek->keylen ; pass++ ) {
- if( pass ) {
- md_reset(md);
- for(i=0; i < pass; i++ ) /* preset the hash context */
- md_putc(md, 0 );
- }
-
- if( s2k->mode == 1 || s2k->mode == 3 ) {
- int len2 = pwlen + 8;
- ulong count = len2;
-
- if( create && !pass ) {
- randomize_buffer(s2k->salt, 8, 1);
- if( s2k->mode == 3 )
- s2k->count = 96; /* 65536 iterations */
- }
-
- if( s2k->mode == 3 ) {
- count = (16ul + (s2k->count & 15)) << ((s2k->count >> 4) + 6);
- if( count < len2 )
- count = len2;
- }
- /* a little bit complicated because we need a ulong for count */
- while( count > len2 ) { /* maybe iterated+salted */
- md_write( md, s2k->salt, 8 );
- md_write( md, pw, pwlen );
- count -= len2;
- }
- if( count < 8 )
- md_write( md, s2k->salt, count );
- else {
- md_write( md, s2k->salt, 8 );
- count -= 8;
- md_write( md, pw, count );
- }
- }
- else
- md_write( md, pw, pwlen );
- md_final( md );
- i = md_digest_length( s2k->hash_algo );
- if( i > dek->keylen - used )
- i = dek->keylen - used;
- memcpy( dek->key+used, md_read(md, s2k->hash_algo), i );
- used += i;
- }
- md_close(md);
-}
-
diff --git a/g10/photoid.c b/g10/photoid.c
deleted file mode 100644
index c20e20eca..000000000
--- a/g10/photoid.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* photoid.c - photo ID handling code
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef __MINGW32__
-# include <windows.h>
-# ifndef VER_PLATFORM_WIN32_WINDOWS
-# define VER_PLATFORM_WIN32_WINDOWS 1
-# endif
-#endif
-#include "packet.h"
-#include "status.h"
-#include "exec.h"
-#include "keydb.h"
-#include "util.h"
-#include "i18n.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "options.h"
-#include "main.h"
-#include "photoid.h"
-
-/* Generate a new photo id packet, or return NULL if canceled */
-PKT_user_id *generate_photo_id(PKT_public_key *pk)
-{
- PKT_user_id *uid;
- int error=1,i;
- unsigned int len;
- char *filename=NULL;
- byte *photo=NULL;
- byte header[16];
- IOBUF file;
-
- header[0]=0x10; /* little side of photo header length */
- header[1]=0; /* big side of photo header length */
- header[2]=1; /* 1 == version of photo header */
- header[3]=1; /* 1 == JPEG */
-
- for(i=4;i<16;i++) /* The reserved bytes */
- header[i]=0;
-
-#define EXTRA_UID_NAME_SPACE 71
- uid=m_alloc_clear(sizeof(*uid)+71);
-
- printf(_("\nPick an image to use for your photo ID. "
- "The image must be a JPEG file.\n"
- "Remember that the image is stored within your public key. "
- "If you use a\n"
- "very large picture, your key will become very large as well!\n"
- "Keeping the image close to 240x288 is a good size to use.\n"));
-
- while(photo==NULL)
- {
- printf("\n");
-
- m_free(filename);
-
- filename=cpr_get("photoid.jpeg.add",
- _("Enter JPEG filename for photo ID: "));
-
- if(strlen(filename)==0)
- goto scram;
-
- file=iobuf_open(filename);
- if(!file)
- {
- log_error(_("Unable to open photo \"%s\": %s\n"),
- filename,strerror(errno));
- continue;
- }
-
- len=iobuf_get_filelength(file);
- if(len>6144)
- {
- printf("This JPEG is really large (%d bytes) !\n",len);
- if(!cpr_get_answer_is_yes("photoid.jpeg.size",
- _("Are you sure you want to use it (y/N)? ")))
- {
- iobuf_close(file);
- continue;
- }
- }
-
- photo=m_alloc(len);
- iobuf_read(file,photo,len);
- iobuf_close(file);
-
- /* Is it a JPEG? */
- if(photo[0]!=0xFF || photo[1]!=0xD8 ||
- photo[6]!='J' || photo[7]!='F' || photo[8]!='I' || photo[9]!='F')
- {
- log_error(_("\"%s\" is not a JPEG file\n"),filename);
- m_free(photo);
- photo=NULL;
- continue;
- }
-
- /* Build the packet */
- build_attribute_subpkt(uid,1,photo,len,header,16);
- parse_attribute_subpkts(uid);
- make_attribute_uidname(uid, EXTRA_UID_NAME_SPACE);
-
- /* Showing the photo is not safe when noninteractive since the
- "user" may not be able to dismiss a viewer window! */
- if(opt.command_fd==-1)
- {
- show_photos(uid->attribs,uid->numattribs,pk,NULL);
- switch(cpr_get_answer_yes_no_quit("photoid.jpeg.okay",
- _("Is this photo correct (y/N/q)? ")))
- {
- case -1:
- goto scram;
- case 0:
- free_attributes(uid);
- m_free(photo);
- photo=NULL;
- continue;
- }
- }
- }
-
- error=0;
- uid->ref=1;
-
- scram:
- m_free(filename);
- m_free(photo);
-
- if(error)
- {
- free_attributes(uid);
- m_free(uid);
- return NULL;
- }
-
- return uid;
-}
-
-/* Returns 0 for error, 1 for valid */
-int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len)
-{
- u16 headerlen;
-
- if(attr->len<3)
- return 0;
-
- /* For historical reasons (i.e. "oops!"), the header length is
- little endian. */
- headerlen=(attr->data[1]<<8) | attr->data[0];
-
- if(headerlen>attr->len)
- return 0;
-
- if(type && attr->len>=4)
- {
- if(attr->data[2]==1) /* header version 1 */
- *type=attr->data[3];
- else
- *type=0;
- }
-
- *len=attr->len-headerlen;
-
- if(*len==0)
- return 0;
-
- return 1;
-}
-
-/* style==0 for extension, 1 for name, 2 for MIME type. Remember that
- the "name" style string could be used in a user ID name field, so
- make sure it is not too big (see
- parse-packet.c:parse_attribute). */
-char *image_type_to_string(byte type,int style)
-{
- char *string;
-
- switch(type)
- {
- case 1: /* jpeg */
- if(style==0)
- string="jpg";
- else if(style==1)
- string="jpeg";
- else
- string="image/jpeg";
- break;
-
- default:
- if(style==0)
- string="bin";
- else if(style==1)
- string="unknown";
- else
- string="image/x-unknown";
- break;
- }
-
- return string;
-}
-
-#if !defined(FIXED_PHOTO_VIEWER) && !defined(DISABLE_PHOTO_VIEWER)
-static const char *get_default_photo_command(void)
-{
-#if defined(__MINGW32__)
- OSVERSIONINFO osvi;
-
- memset(&osvi,0,sizeof(osvi));
- osvi.dwOSVersionInfoSize=sizeof(osvi);
- GetVersionEx(&osvi);
-
- if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
- return "start /w %i";
- else
- return "cmd /c start /w %i";
-#elif defined(__APPLE__)
- /* OS X. This really needs more than just __APPLE__. */
- return "open %I";
-#elif defined(__riscos__)
- return "Filer_Run %I";
-#else
- return "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin";
-#endif
-}
-#endif
-
-void show_photos(const struct user_attribute *attrs,
- int count,PKT_public_key *pk,PKT_secret_key *sk)
-{
-#ifndef DISABLE_PHOTO_VIEWER
- int i;
- struct expando_args args;
- u32 len;
- u32 kid[2]={0,0};
-
- memset(&args,0,sizeof(args));
- args.pk=pk;
- args.sk=sk;
-
- if(pk)
- keyid_from_pk(pk,kid);
- else if(sk)
- keyid_from_sk(sk,kid);
-
- for(i=0;i<count;i++)
- if(attrs[i].type==ATTRIB_IMAGE &&
- parse_image_header(&attrs[i],&args.imagetype,&len))
- {
- char *command,*name;
- struct exec_info *spawn;
- int offset=attrs[i].len-len;
-
-#ifdef FIXED_PHOTO_VIEWER
- opt.photo_viewer=FIXED_PHOTO_VIEWER;
-#else
- if(!opt.photo_viewer)
- opt.photo_viewer=get_default_photo_command();
-#endif
-
- /* make command grow */
- command=pct_expando(opt.photo_viewer,&args);
- if(!command)
- goto fail;
-
- name=m_alloc(16+strlen(EXTSEP_S)+
- strlen(image_type_to_string(args.imagetype,0))+1);
-
- /* Make the filename. Notice we are not using the image
- encoding type for more than cosmetics. Most external image
- viewers can handle a multitude of types, and even if one
- cannot understand a partcular type, we have no way to know
- which. The spec permits this, by the way. -dms */
-
-#ifdef USE_ONLY_8DOT3
- sprintf(name,"%08lX" EXTSEP_S "%s",(ulong)kid[1],
- image_type_to_string(args.imagetype,0));
-#else
- sprintf(name,"%08lX%08lX" EXTSEP_S "%s",(ulong)kid[0],(ulong)kid[1],
- image_type_to_string(args.imagetype,0));
-#endif
-
- if(exec_write(&spawn,NULL,command,name,1,1)!=0)
- {
- m_free(name);
- goto fail;
- }
-
-#ifdef __riscos__
- riscos_set_filetype(spawn->tempfile_in,
- image_type_to_string(args.imagetype,2));
-#endif
-
- m_free(name);
-
- fwrite(&attrs[i].data[offset],attrs[i].len-offset,1,spawn->tochild);
-
- if(exec_read(spawn)!=0)
- {
- exec_finish(spawn);
- goto fail;
- }
-
- if(exec_finish(spawn)!=0)
- goto fail;
- }
-
- return;
-
- fail:
- log_error("unable to display photo ID!\n");
-#endif
-}
diff --git a/g10/photoid.h b/g10/photoid.h
deleted file mode 100644
index 45d104f8c..000000000
--- a/g10/photoid.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Photo ID functions */
-
-#ifndef _PHOTOID_H_
-#define _PHOTOID_H_
-
-#include "packet.h"
-
-PKT_user_id *generate_photo_id(PKT_public_key *pk);
-int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len);
-char *image_type_to_string(byte type,int style);
-void show_photos(const struct user_attribute *attrs,
- int count,PKT_public_key *pk,PKT_secret_key *sk);
-
-#endif /* !_PHOTOID_H_ */
diff --git a/g10/pkclist.c b/g10/pkclist.c
deleted file mode 100644
index cb1c506e3..000000000
--- a/g10/pkclist.c
+++ /dev/null
@@ -1,1303 +0,0 @@
-/* pkclist.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "trustdb.h"
-#include "ttyio.h"
-#include "status.h"
-#include "photoid.h"
-#include "i18n.h"
-
-
-#define CONTROL_D ('D' - 'A' + 1)
-
-
-/****************
- * Show the revocation reason as it is stored with the given signature
- */
-static void
-do_show_revocation_reason( PKT_signature *sig )
-{
- size_t n, nn;
- const byte *p, *pp;
- int seq = 0;
- const char *text;
-
- while( (p = enum_sig_subpkt (sig->hashed, SIGSUBPKT_REVOC_REASON,
- &n, &seq, NULL )) ) {
- if( !n )
- continue; /* invalid - just skip it */
-
- if( *p == 0 )
- text = _("No reason specified");
- else if( *p == 0x01 )
- text = _("Key is superseded");
- else if( *p == 0x02 )
- text = _("Key has been compromised");
- else if( *p == 0x03 )
- text = _("Key is no longer used");
- else if( *p == 0x20 )
- text = _("User ID is no longer valid");
- else
- text = NULL;
-
- log_info( _("reason for revocation: ") );
- if( text )
- fputs( text, log_stream() );
- else
- fprintf( log_stream(), "code=%02x", *p );
- putc( '\n', log_stream() );
- n--; p++;
- pp = NULL;
- do {
- /* We don't want any empty lines, so skip them */
- while( n && *p == '\n' ) {
- p++;
- n--;
- }
- if( n ) {
- pp = memchr( p, '\n', n );
- nn = pp? pp - p : n;
- log_info( _("revocation comment: ") );
- print_string( log_stream(), p, nn, 0 );
- putc( '\n', log_stream() );
- p += nn; n -= nn;
- }
- } while( pp );
- }
-}
-
-/* Mode 0: try and find the revocation based on the pk (i.e. check
- subkeys, etc.) Mode 1: use only the revocation on the main pk */
-
-void
-show_revocation_reason( PKT_public_key *pk, int mode )
-{
- /* Hmmm, this is not so easy becuase we have to duplicate the code
- * used in the trustbd to calculate the keyflags. We need to find
- * a clean way to check revocation certificates on keys and
- * signatures. And there should be no duplicate code. Because we
- * enter this function only when the trustdb told us that we have
- * a revoked key, we could simply look for a revocation cert and
- * display this one, when there is only one. Let's try to do this
- * until we have a better solution. */
- KBNODE node, keyblock = NULL;
- byte fingerprint[MAX_FINGERPRINT_LEN];
- size_t fingerlen;
- int rc;
-
- /* get the keyblock */
- fingerprint_from_pk( pk, fingerprint, &fingerlen );
- rc = get_keyblock_byfprint( &keyblock, fingerprint, fingerlen );
- if( rc ) { /* that should never happen */
- log_debug( "failed to get the keyblock\n");
- return;
- }
-
- for( node=keyblock; node; node = node->next ) {
- if( (mode && node->pkt->pkttype == PKT_PUBLIC_KEY) ||
- ( ( node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- && !cmp_public_keys( node->pkt->pkt.public_key, pk ) ) )
- break;
- }
- if( !node ) {
- log_debug("Oops, PK not in keyblock\n");
- release_kbnode( keyblock );
- return;
- }
- /* now find the revocation certificate */
- for( node = node->next; node ; node = node->next ) {
- if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- break;
- if( node->pkt->pkttype == PKT_SIGNATURE
- && (node->pkt->pkt.signature->sig_class == 0x20
- || node->pkt->pkt.signature->sig_class == 0x28 ) ) {
- /* FIXME: we should check the signature here */
- do_show_revocation_reason ( node->pkt->pkt.signature );
- break;
- }
- }
-
- /* We didn't find it, so check if the whole key is revoked */
- if(!node && !mode)
- show_revocation_reason(pk,1);
-
- release_kbnode( keyblock );
-}
-
-
-static void
-show_paths (const PKT_public_key *pk, int only_first )
-{
- log_debug("not yet implemented\n");
-#if 0
- void *context = NULL;
- unsigned otrust, validity;
- int last_level, level;
-
- last_level = 0;
- while( (level=enum_cert_paths( &context, &lid, &otrust, &validity)) != -1){
- char *p;
- int c, rc;
- size_t n;
- u32 keyid[2];
- PKT_public_key *pk ;
-
- if( level < last_level && only_first )
- break;
- last_level = level;
-
- rc = keyid_from_lid( lid, keyid );
-
- if( rc ) {
- log_error("ooops: can't get keyid for lid %lu\n", lid);
- return;
- }
-
- pk = m_alloc_clear( sizeof *pk );
- rc = get_pubkey( pk, keyid );
- if( rc ) {
- log_error("key %08lX: public key not found: %s\n",
- (ulong)keyid[1], g10_errstr(rc) );
- return;
- }
-
- tty_printf("%*s%4u%c/%08lX.%lu %s \"",
- level*2, "",
- nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1], lid, datestr_from_pk( pk ) );
-
- c = trust_letter(otrust);
- if( c )
- putchar( c );
- else
- printf( "%02x", otrust );
- putchar('/');
- c = trust_letter(validity);
- if( c )
- putchar( c );
- else
- printf( "%02x", validity );
- putchar(' ');
-
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n ),
- m_free(p);
- tty_printf("\"\n");
- free_public_key( pk );
- }
- enum_cert_paths( &context, NULL, NULL, NULL ); /* release context */
-#endif
- tty_printf("\n");
-}
-
-
-
-
-/****************
- * mode: 0 = standard
- * 1 = Without key info and additional menu option 'm'
- * this does also add an option to set the key to ultimately trusted.
- * Returns:
- * -2 = nothing changed - caller should show some additional info
- * -1 = quit operation
- * 0 = nothing changed
- * 1 = new ownertrust now in new_trust
- */
-static int
-do_edit_ownertrust (PKT_public_key *pk, int mode,
- unsigned *new_trust, int defer_help )
-{
- char *p;
- size_t n;
- u32 keyid[2];
- int changed=0;
- int quit=0;
- int show=0;
- int did_help=defer_help;
-
- keyid_from_pk (pk, keyid);
- for(;;) {
- /* a string with valid answers */
- const char *ans = _("iImMqQsS");
-
- if( !did_help )
- {
- if( !mode )
- {
- KBNODE keyblock, un;
-
- tty_printf(_("No trust value assigned to:\n"
- "%4u%c/%08lX %s \""),
- nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_pk( pk ) );
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n ),
- m_free(p);
- tty_printf("\"\n");
-
- keyblock = get_pubkeyblock (keyid);
- if (!keyblock)
- BUG ();
- for (un=keyblock; un; un = un->next) {
- if (un->pkt->pkttype != PKT_USER_ID )
- continue;
- if (un->pkt->pkt.user_id->is_revoked )
- continue;
- if (un->pkt->pkt.user_id->is_expired )
- continue;
- /* Only skip textual primaries */
- if (un->pkt->pkt.user_id->is_primary &&
- !un->pkt->pkt.user_id->attrib_data )
- continue;
-
- if(opt.show_photos && un->pkt->pkt.user_id->attrib_data)
- show_photos(un->pkt->pkt.user_id->attribs,
- un->pkt->pkt.user_id->numattribs,pk,NULL);
-
- tty_printf (" %s", _(" aka \""));
- tty_print_utf8_string (un->pkt->pkt.user_id->name,
- un->pkt->pkt.user_id->len );
- tty_printf("\"\n");
- }
-
- print_fingerprint (pk, NULL, 2);
- tty_printf("\n");
- }
- tty_printf (_(
- "Please decide how far you trust this user to correctly\n"
- "verify other users' keys (by looking at passports,\n"
- "checking fingerprints from different sources...)?\n\n"));
- tty_printf (_(" %d = Don't know\n"), 1);
- tty_printf (_(" %d = I do NOT trust\n"), 2);
- tty_printf (_(" %d = I trust marginally\n"), 3);
- tty_printf (_(" %d = I trust fully\n"), 4);
- if (mode)
- tty_printf (_(" %d = I trust ultimately\n"), 5);
-#if 0
- /* not yet implemented */
- tty_printf (_(" i = please show me more information\n") );
-#endif
- if( mode )
- tty_printf(_(" m = back to the main menu\n"));
- else
- {
- tty_printf(_(" s = skip this key\n"));
- tty_printf(_(" q = quit\n"));
- }
- tty_printf("\n");
- did_help = 1;
- }
- if( strlen(ans) != 8 )
- BUG();
- p = cpr_get("edit_ownertrust.value",_("Your decision? "));
- trim_spaces(p);
- cpr_kill_prompt();
- if( !*p )
- did_help = 0;
- else if( *p && p[1] )
- ;
- else if( !p[1] && (*p >= '1' && *p <= (mode?'5':'4')) )
- {
- unsigned int trust;
- switch( *p )
- {
- case '1': trust = TRUST_UNDEFINED; break;
- case '2': trust = TRUST_NEVER ; break;
- case '3': trust = TRUST_MARGINAL ; break;
- case '4': trust = TRUST_FULLY ; break;
- case '5': trust = TRUST_ULTIMATE ; break;
- default: BUG();
- }
- if (trust == TRUST_ULTIMATE
- && !cpr_get_answer_is_yes ("edit_ownertrust.set_ultimate.okay",
- _("Do you really want to set this key"
- " to ultimate trust? ")))
- ; /* no */
- else
- {
- *new_trust = trust;
- changed = 1;
- break;
- }
- }
-#if 0
- /* not yet implemented */
- else if( *p == ans[0] || *p == ans[1] )
- {
- tty_printf(_("Certificates leading to an ultimately trusted key:\n"));
- show = 1;
- break;
- }
-#endif
- else if( mode && (*p == ans[2] || *p == ans[3] || *p == CONTROL_D ) )
- {
- break ; /* back to the menu */
- }
- else if( !mode && (*p == ans[6] || *p == ans[7] ) )
- {
- break; /* skip */
- }
- else if( !mode && (*p == ans[4] || *p == ans[5] ) )
- {
- quit = 1;
- break ; /* back to the menu */
- }
- m_free(p); p = NULL;
- }
- m_free(p);
- return show? -2: quit? -1 : changed;
-}
-
-/*
- * Display a menu to change the ownertrust of the key PK (which should
- * be a primary key).
- * For mode values see do_edit_ownertrust ()
- */
-int
-edit_ownertrust (PKT_public_key *pk, int mode )
-{
- unsigned int trust;
- int no_help = 0;
-
- for(;;)
- {
- switch ( do_edit_ownertrust (pk, mode, &trust, no_help ) )
- {
- case -1: /* quit */
- return -1;
- case -2: /* show info */
- show_paths(pk, 1);
- no_help = 1;
- break;
- case 1: /* trust value set */
- trust &= ~TRUST_FLAG_DISABLED;
- trust |= get_ownertrust (pk) & TRUST_FLAG_DISABLED;
- update_ownertrust (pk, trust );
- return 1;
- default:
- return 0;
- }
- }
-}
-
-
-/****************
- * Check whether we can trust this pk which has a trustlevel of TRUSTLEVEL
- * Returns: true if we trust.
- */
-static int
-do_we_trust( PKT_public_key *pk, unsigned int *trustlevel )
-{
- unsigned int trustmask = 0;
-
- /* FIXME: get_pubkey_byname already checks the validity and won't
- * return keys which are either expired or revoked - so these
- * question here won't get triggered. We have to find a solution
- * for this. It might make sense to have a function in getkey.c
- * which does only the basic checks and returns even revoked and
- * expired keys. This fnction could then also returhn a list of
- * keys if the speicified name is ambiguous
- */
- if( (*trustlevel & TRUST_FLAG_REVOKED) ) {
- log_info(_("key %08lX: key has been revoked!\n"),
- (ulong)keyid_from_pk( pk, NULL) );
- show_revocation_reason( pk, 0 );
- if( opt.batch )
- return 0; /* no */
-
- if( !cpr_get_answer_is_yes("revoked_key.override",
- _("Use this key anyway? ")) )
- return 0; /* no */
- trustmask |= TRUST_FLAG_REVOKED;
- }
- if( (*trustlevel & TRUST_FLAG_SUB_REVOKED) ) {
- log_info(_("key %08lX: subkey has been revoked!\n"),
- (ulong)keyid_from_pk( pk, NULL) );
- show_revocation_reason( pk, 0 );
- if( opt.batch )
- return 0;
-
- if( !cpr_get_answer_is_yes("revoked_key.override",
- _("Use this key anyway? ")) )
- return 0;
- trustmask |= TRUST_FLAG_SUB_REVOKED;
- }
- *trustlevel &= ~trustmask;
-
- if( opt.always_trust) {
- if( opt.verbose )
- log_info("No trust check due to --always-trust option\n");
- return 1;
- }
-
- switch( (*trustlevel & TRUST_MASK) ) {
- case TRUST_EXPIRED:
- log_info(_("%08lX: key has expired\n"),
- (ulong)keyid_from_pk( pk, NULL) );
- return 0; /* no */
-
- default:
- log_error ("invalid trustlevel %u returned from validation layer\n",
- *trustlevel);
- /* fall thru */
- case TRUST_UNKNOWN:
- case TRUST_UNDEFINED:
- log_info(_("%08lX: There is no indication that this key "
- "really belongs to the owner\n"),
- (ulong)keyid_from_pk( pk, NULL) );
- return 0; /* no */
-
- case TRUST_NEVER:
- log_info(_("%08lX: We do NOT trust this key\n"),
- (ulong)keyid_from_pk( pk, NULL) );
- return 0; /* no */
-
- case TRUST_MARGINAL:
- log_info(
- _("%08lX: It is not sure that this key really belongs to the owner\n"
- "but it is accepted anyway\n"), (ulong)keyid_from_pk( pk, NULL) );
- return 1; /* yes */
-
- case TRUST_FULLY:
- if( opt.verbose )
- log_info(_("This key probably belongs to the owner\n"));
- return 1; /* yes */
-
- case TRUST_ULTIMATE:
- if( opt.verbose )
- log_info(_("This key belongs to us\n"));
- return 1; /* yes */
- }
-
- return 1; /* yes */
-}
-
-
-
-/****************
- * wrapper around do_we_trust, so we can ask whether to use the
- * key anyway.
- */
-static int
-do_we_trust_pre( PKT_public_key *pk, unsigned int trustlevel )
-{
- int rc;
-
- rc = do_we_trust( pk, &trustlevel );
-
- if( (trustlevel & TRUST_FLAG_REVOKED) && !rc )
- return 0;
- if( (trustlevel & TRUST_FLAG_SUB_REVOKED) && !rc )
- return 0;
-
- if( !opt.batch && !rc ) {
- char *p;
- u32 keyid[2];
- size_t n;
-
- keyid_from_pk( pk, keyid);
- tty_printf( "%4u%c/%08lX %s \"",
- nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_pk( pk ) );
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n ),
- m_free(p);
- tty_printf("\"\n");
- print_fingerprint (pk, NULL, 2);
- tty_printf("\n");
-
- tty_printf(_(
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n\n"));
-
- if( cpr_get_answer_is_yes("untrusted_key.override",
- _("Use this key anyway? ")) )
- rc = 1;
-
- /* Hmmm: Should we set a flag to tell the user about
- * his decision the next time he encrypts for this recipient?
- */
- }
- else if( opt.always_trust && !rc ) {
- if( !opt.quiet )
- log_info(_("WARNING: Using untrusted key!\n"));
- rc = 1;
- }
- return rc;
-}
-
-
-
-/****************
- * Check whether we can trust this signature.
- * Returns: Error if we shall not trust this signatures.
- */
-int
-check_signatures_trust( PKT_signature *sig )
-{
- PKT_public_key *pk = m_alloc_clear( sizeof *pk );
- unsigned int trustlevel;
- int rc=0;
-
- if ( opt.always_trust)
- {
- if( !opt.quiet )
- log_info(_("WARNING: Using untrusted key!\n"));
- if (opt.with_fingerprint)
- print_fingerprint (pk, NULL, 1);
- goto leave;
- }
-
- rc = get_pubkey( pk, sig->keyid );
- if (rc)
- { /* this should not happen */
- log_error("Ooops; the key vanished - can't check the trust\n");
- rc = G10ERR_NO_PUBKEY;
- goto leave;
- }
-
- trustlevel = get_validity (pk, NULL);
-
- if ( (trustlevel & TRUST_FLAG_REVOKED) )
- {
- write_status( STATUS_KEYREVOKED );
- log_info(_("WARNING: This key has been revoked by its owner!\n"));
- log_info(_(" This could mean that the signature is forgery.\n"));
- show_revocation_reason( pk, 0 );
- }
- else if ((trustlevel & TRUST_FLAG_SUB_REVOKED) )
- {
- write_status( STATUS_KEYREVOKED );
- log_info(_("WARNING: This subkey has been revoked by its owner!\n"));
- show_revocation_reason( pk, 0 );
- }
-
- if ((trustlevel & TRUST_FLAG_DISABLED))
- log_info (_("Note: This key has been disabled.\n"));
-
- switch ( (trustlevel & TRUST_MASK) )
- {
- case TRUST_EXPIRED:
- log_info(_("Note: This key has expired!\n"));
- print_fingerprint (pk, NULL, 1);
- break;
-
- default:
- log_error ("invalid trustlevel %u returned from validation layer\n",
- trustlevel);
- /* fall thru */
- case TRUST_UNKNOWN:
- case TRUST_UNDEFINED:
- write_status( STATUS_TRUST_UNDEFINED );
- log_info(_("WARNING: This key is not certified with"
- " a trusted signature!\n"));
- log_info(_(" There is no indication that the "
- "signature belongs to the owner.\n" ));
- print_fingerprint (pk, NULL, 1);
- break;
-
- case TRUST_NEVER:
- /* currently we won't get that status */
- write_status( STATUS_TRUST_NEVER );
- log_info(_("WARNING: We do NOT trust this key!\n"));
- log_info(_(" The signature is probably a FORGERY.\n"));
- if (opt.with_fingerprint)
- print_fingerprint (pk, NULL, 1);
- rc = G10ERR_BAD_SIGN;
- break;
-
- case TRUST_MARGINAL:
- write_status( STATUS_TRUST_MARGINAL );
- log_info(_("WARNING: This key is not certified with"
- " sufficiently trusted signatures!\n"));
- log_info(_(" It is not certain that the"
- " signature belongs to the owner.\n" ));
- print_fingerprint (pk, NULL, 1);
- break;
-
- case TRUST_FULLY:
- write_status( STATUS_TRUST_FULLY );
- if (opt.with_fingerprint)
- print_fingerprint (pk, NULL, 1);
- break;
-
- case TRUST_ULTIMATE:
- write_status( STATUS_TRUST_ULTIMATE );
- if (opt.with_fingerprint)
- print_fingerprint (pk, NULL, 1);
- break;
- }
-
- leave:
- free_public_key( pk );
- return rc;
-}
-
-
-void
-release_pk_list( PK_LIST pk_list )
-{
- PK_LIST pk_rover;
-
- for( ; pk_list; pk_list = pk_rover ) {
- pk_rover = pk_list->next;
- free_public_key( pk_list->pk );
- m_free( pk_list );
- }
-}
-
-
-static int
-key_present_in_pk_list(PK_LIST pk_list, PKT_public_key *pk)
-{
- for( ; pk_list; pk_list = pk_list->next)
- if (cmp_public_keys(pk_list->pk, pk) == 0)
- return 0;
-
- return -1;
-}
-
-
-/****************
- * Return a malloced string with a default reciepient if there is any
- */
-static char *
-default_recipient(void)
-{
- PKT_secret_key *sk;
- byte fpr[MAX_FINGERPRINT_LEN+1];
- size_t n;
- char *p;
- int i;
-
- if( opt.def_recipient )
- return m_strdup( opt.def_recipient );
- if( !opt.def_recipient_self )
- return NULL;
- sk = m_alloc_clear( sizeof *sk );
- i = get_seckey_byname( sk, NULL, 0 );
- if( i ) {
- free_secret_key( sk );
- return NULL;
- }
- n = MAX_FINGERPRINT_LEN;
- fingerprint_from_sk( sk, fpr, &n );
- free_secret_key( sk );
- p = m_alloc( 2*n+3 );
- *p++ = '0';
- *p++ = 'x';
- for(i=0; i < n; i++ )
- sprintf( p+2*i, "%02X", fpr[i] );
- p -= 2;
- return p;
-}
-
-static int
-expand_id(const char *id,STRLIST *into,unsigned int flags)
-{
- struct groupitem *groups;
- int count=0;
-
- for(groups=opt.grouplist;groups;groups=groups->next)
- {
- /* need strcasecmp() here, as this should be localized */
- if(strcasecmp(groups->name,id)==0)
- {
- STRLIST each,sl;
-
- /* this maintains the current utf8-ness */
- for(each=groups->values;each;each=each->next)
- {
- sl=add_to_strlist(into,each->d);
- sl->flags=flags;
- count++;
- }
-
- break;
- }
- }
-
- return count;
-}
-
-/* For simplicity, and to avoid potential loops, we only expand once -
- you can't make an alias that points to an alias. */
-static STRLIST
-expand_group(STRLIST input)
-{
- STRLIST sl,output=NULL,rover;
-
- for(rover=input;rover;rover=rover->next)
- if(expand_id(rover->d,&output,rover->flags)==0)
- {
- /* Didn't find any groups, so use the existing string */
- sl=add_to_strlist(&output,rover->d);
- sl->flags=rover->flags;
- }
-
- return output;
-}
-
-int
-build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
-{
- PK_LIST pk_list = NULL;
- PKT_public_key *pk=NULL;
- int rc=0;
- int any_recipients=0;
- STRLIST rov,remusr;
- char *def_rec = NULL;
-
- if(opt.grouplist)
- remusr=expand_group(rcpts);
- else
- remusr=rcpts;
-
- /* check whether there are any recipients in the list and build the
- * list of the encrypt-to ones (we always trust them) */
- for( rov = remusr; rov; rov = rov->next ) {
- if( !(rov->flags & 1) )
- any_recipients = 1;
- else if( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to ) {
- pk = m_alloc_clear( sizeof *pk );
- pk->req_usage = use;
- if( (rc = get_pubkey_byname( pk, rov->d, NULL, NULL )) ) {
- free_public_key( pk ); pk = NULL;
- log_error(_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) );
- write_status_text_and_buffer (STATUS_INV_RECP, "0 ",
- rov->d, strlen (rov->d), -1);
- goto fail;
- }
- else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) {
- /* Skip the actual key if the key is already present
- * in the list */
- if (key_present_in_pk_list(pk_list, pk) == 0) {
- free_public_key(pk); pk = NULL;
- log_info(_("%s: skipped: public key already present\n"),
- rov->d);
- }
- else {
- PK_LIST r;
- r = m_alloc( sizeof *r );
- r->pk = pk; pk = NULL;
- r->next = pk_list;
- r->mark = 0;
- pk_list = r;
- }
- }
- else {
- free_public_key( pk ); pk = NULL;
- log_error(_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) );
- write_status_text_and_buffer (STATUS_INV_RECP, "0 ",
- rov->d, strlen (rov->d), -1);
- goto fail;
- }
- }
- }
-
- if( !any_recipients && !opt.batch ) { /* ask */
- int have_def_rec;
- char *answer=NULL;
- STRLIST backlog=NULL;
-
- def_rec = default_recipient();
- have_def_rec = !!def_rec;
- if( !have_def_rec )
- tty_printf(_(
- "You did not specify a user ID. (you may use \"-r\")\n"));
- for(;;) {
- rc = 0;
- m_free(answer);
- if( have_def_rec ) {
- answer = def_rec;
- def_rec = NULL;
- }
- else if(backlog) {
- answer=pop_strlist(&backlog);
- }
- else {
- answer = cpr_get_utf8("pklist.user_id.enter",
- _("\nEnter the user ID. End with an empty line: "));
- trim_spaces(answer);
- cpr_kill_prompt();
- }
- if( !answer || !*answer ) {
- m_free(answer);
- break;
- }
- if(expand_id(answer,&backlog,0))
- continue;
- if( pk )
- free_public_key( pk );
- pk = m_alloc_clear( sizeof *pk );
- pk->req_usage = use;
- rc = get_pubkey_byname( pk, answer, NULL, NULL );
- if( rc )
- tty_printf(_("No such user ID.\n"));
- else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) {
- if( have_def_rec ) {
- if (key_present_in_pk_list(pk_list, pk) == 0) {
- free_public_key(pk); pk = NULL;
- log_info(_("skipped: public key "
- "already set as default recipient\n") );
- }
- else {
- PK_LIST r = m_alloc( sizeof *r );
- r->pk = pk; pk = NULL;
- r->next = pk_list;
- r->mark = 0;
- pk_list = r;
- }
- any_recipients = 1;
- continue;
- }
- else {
- int trustlevel;
-
- trustlevel = get_validity (pk, NULL);
- if( (trustlevel & TRUST_FLAG_DISABLED) ) {
- tty_printf(_("Public key is disabled.\n") );
- }
- else if( do_we_trust_pre( pk, trustlevel ) ) {
- /* Skip the actual key if the key is already present
- * in the list */
- if (key_present_in_pk_list(pk_list, pk) == 0) {
- free_public_key(pk); pk = NULL;
- log_info(_("skipped: public key already set\n") );
- }
- else {
- PK_LIST r;
- char *p;
- size_t n;
- u32 keyid[2];
-
- keyid_from_pk( pk, keyid);
- tty_printf("Added %4u%c/%08lX %s \"",
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1],
- datestr_from_pk( pk ) );
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\"\n");
-
- r = m_alloc( sizeof *r );
- r->pk = pk; pk = NULL;
- r->next = pk_list;
- r->mark = 0;
- pk_list = r;
- }
- any_recipients = 1;
- continue;
- }
- }
- }
- m_free(def_rec); def_rec = NULL;
- have_def_rec = 0;
- }
- if( pk ) {
- free_public_key( pk );
- pk = NULL;
- }
- }
- else if( !any_recipients && (def_rec = default_recipient()) ) {
- pk = m_alloc_clear( sizeof *pk );
- pk->req_usage = use;
- rc = get_pubkey_byname( pk, def_rec, NULL, NULL );
- if( rc )
- log_error(_("unknown default recipient `%s'\n"), def_rec );
- else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) {
- /* Mark any_recipients here since the default recipient
- would have been used if it wasn't already there. It
- doesn't really matter if we got this key from the default
- recipient or an encrypt-to. */
- any_recipients = 1;
- if (key_present_in_pk_list(pk_list, pk) == 0)
- log_info(_("skipped: public key already set as default recipient\n"));
- else {
- PK_LIST r = m_alloc( sizeof *r );
- r->pk = pk; pk = NULL;
- r->next = pk_list;
- r->mark = 0;
- pk_list = r;
- }
- }
- if( pk ) {
- free_public_key( pk );
- pk = NULL;
- }
- m_free(def_rec); def_rec = NULL;
- }
- else {
- any_recipients = 0;
- for(; remusr; remusr = remusr->next ) {
- if( (remusr->flags & 1) )
- continue; /* encrypt-to keys are already handled */
-
- pk = m_alloc_clear( sizeof *pk );
- pk->req_usage = use;
- if( (rc = get_pubkey_byname( pk, remusr->d, NULL, NULL )) ) {
- free_public_key( pk ); pk = NULL;
- log_error(_("%s: skipped: %s\n"), remusr->d, g10_errstr(rc) );
- write_status_text_and_buffer (STATUS_INV_RECP, "0 ",
- remusr->d, strlen (remusr->d),
- -1);
- goto fail;
- }
- else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) {
- int trustlevel;
-
- trustlevel = get_validity (pk, pk->namehash);
- if( (trustlevel & TRUST_FLAG_DISABLED) ) {
- free_public_key(pk); pk = NULL;
- log_info(_("%s: skipped: public key is disabled\n"),
- remusr->d);
- write_status_text_and_buffer (STATUS_INV_RECP, "0 ",
- remusr->d,
- strlen (remusr->d),
- -1);
- rc=G10ERR_UNU_PUBKEY;
- goto fail;
- }
- else if( do_we_trust_pre( pk, trustlevel ) ) {
- /* note: do_we_trust may have changed the trustlevel */
-
- /* We have at least one valid recipient. It doesn't matters
- * if this recipient is already present. */
- any_recipients = 1;
-
- /* Skip the actual key if the key is already present
- * in the list */
- if (key_present_in_pk_list(pk_list, pk) == 0) {
- free_public_key(pk); pk = NULL;
- log_info(_("%s: skipped: public key already present\n"),
- remusr->d);
- }
- else {
- PK_LIST r;
- r = m_alloc( sizeof *r );
- r->pk = pk; pk = NULL;
- r->next = pk_list;
- r->mark = 0;
- pk_list = r;
- }
- }
- else { /* we don't trust this pk */
- free_public_key( pk ); pk = NULL;
- write_status_text_and_buffer (STATUS_INV_RECP, "10 ",
- remusr->d,
- strlen (remusr->d),
- -1);
- rc=G10ERR_UNU_PUBKEY;
- goto fail;
- }
- }
- else {
- free_public_key( pk ); pk = NULL;
- write_status_text_and_buffer (STATUS_INV_RECP, "0 ",
- remusr->d,
- strlen (remusr->d),
- -1);
- log_error(_("%s: skipped: %s\n"), remusr->d, g10_errstr(rc) );
- goto fail;
- }
- }
- }
-
- if( !rc && !any_recipients ) {
- log_error(_("no valid addressees\n"));
- write_status_text (STATUS_NO_RECP, "0");
- rc = G10ERR_NO_USER_ID;
- }
-
- fail:
-
- if( rc )
- release_pk_list( pk_list );
- else
- *ret_pk_list = pk_list;
- if(opt.grouplist)
- free_strlist(remusr);
- return rc;
-}
-
-
-/* In pgp6 mode, disallow all ciphers except IDEA (1), 3DES (2), and
- CAST5 (3), all hashes except MD5 (1), SHA1 (2), and RIPEMD160 (3),
- and all compressions except none (0) and ZIP (1). pgp7 mode
- expands the cipher list to include AES128 (7), AES192 (8), AES256
- (9), and TWOFISH (10). For a true PGP key all of this is unneeded
- as they are the only items present in the preferences subpacket,
- but checking here covers the weird case of encrypting to a key that
- had preferences from a different implementation which was then used
- with PGP. I am not completely comfortable with this as the right
- thing to do, as it slightly alters the list of what the user is
- supposedly requesting. It is not against the RFC however, as the
- preference chosen will never be one that the user didn't specify
- somewhere ("The implementation may use any mechanism to pick an
- algorithm in the intersection"), and PGP has no mechanism to fix
- such a broken preference list, so I'm including it. -dms */
-
-static int
-algo_available( int preftype, int algo, void *hint )
-{
- if( preftype == PREFTYPE_SYM ) {
- if( opt.pgp6 && ( algo != 1 && algo != 2 && algo != 3) )
- return 0;
-
- if( opt.pgp7 && (algo != 1 && algo != 2 && algo != 3 &&
- algo != 7 && algo != 8 && algo != 9 && algo != 10) )
- return 0;
-
- return algo && !check_cipher_algo( algo );
- }
- else if( preftype == PREFTYPE_HASH ) {
- int bits=0;
-
- if(hint)
- bits=*(int *)hint;
-
- if(bits && (bits != md_digest_length(algo)))
- return 0;
-
- if( (opt.pgp6 || opt.pgp7 ) && ( algo != 1 && algo != 2 && algo != 3) )
- return 0;
-
- return algo && !check_digest_algo( algo );
- }
- else if( preftype == PREFTYPE_ZIP ) {
- if ( ( opt.pgp6 || opt.pgp7 ) && ( algo !=0 && algo != 1) )
- return 0;
-
- return !check_compress_algo( algo );
- }
- else
- return 0;
-}
-
-
-
-/****************
- * Return -1 if we could not find an algorithm.
- */
-int
-select_algo_from_prefs(PK_LIST pk_list, int preftype, int request, void *hint)
-{
- PK_LIST pkr;
- u32 bits[8];
- const prefitem_t *prefs;
- int i, j;
- int compr_hack=0;
- int any;
-
- if( !pk_list )
- return -1;
-
- memset( bits, ~0, 8 * sizeof *bits );
- for( pkr = pk_list; pkr; pkr = pkr->next ) {
- u32 mask[8];
-
- memset( mask, 0, 8 * sizeof *mask );
- if( preftype == PREFTYPE_SYM ) {
- if( opt.pgp2 &&
- pkr->pk->version < 4 &&
- pkr->pk->selfsigversion < 4 )
- mask[0] |= (1<<1); /* IDEA is implicitly there for v3 keys
- with v3 selfsigs (rfc2440:12.1) if
- --pgp2 mode is on. This doesn't
- mean it's actually available, of
- course. */
- else
- mask[0] |= (1<<2); /* 3DES is implicitly there for everyone else */
- }
- else if( preftype == PREFTYPE_HASH ) {
- /* While I am including this code for completeness, note
- that currently --pgp2 mode locks the hash at MD5, so this
- function will never even be called. Even if the hash
- wasn't locked at MD5, we don't support sign+encrypt in
- --pgp2 mode, and that's the only time PREFTYPE_HASH is
- used anyway. -dms */
- if( opt.pgp2 &&
- pkr->pk->version < 4 &&
- pkr->pk->selfsigversion < 4 )
- mask[0] |= (1<<1); /* MD5 is there for v3 keys with v3
- selfsigs when --pgp2 is on. */
- else
- mask[0] |= (1<<2); /* SHA1 is there for everyone else */
- }
- else if( preftype == PREFTYPE_ZIP )
- mask[0] |= (1<<0); /* Uncompressed is implicit */
-
- if (pkr->pk->user_id) /* selected by user ID */
- prefs = pkr->pk->user_id->prefs;
- else
- prefs = pkr->pk->prefs;
-
- any = 0;
- if( prefs ) {
- for (i=0; prefs[i].type; i++ ) {
- if( prefs[i].type == preftype ) {
- mask[prefs[i].value/32] |= 1 << (prefs[i].value%32);
- any = 1;
- }
- }
- }
-
- if( (!prefs || !any) && preftype == PREFTYPE_ZIP ) {
- mask[0] |= 3; /* asume no_compression and old pgp */
- compr_hack = 1;
- }
-
- #if 0
- log_debug("pref mask=%08lX%08lX%08lX%08lX%08lX%08lX%08lX%08lX\n",
- (ulong)mask[7], (ulong)mask[6], (ulong)mask[5], (ulong)mask[4],
- (ulong)mask[3], (ulong)mask[2], (ulong)mask[1], (ulong)mask[0]);
- #endif
- for(i=0; i < 8; i++ )
- bits[i] &= mask[i];
- #if 0
- log_debug("pref bits=%08lX%08lX%08lX%08lX%08lX%08lX%08lX%08lX\n",
- (ulong)bits[7], (ulong)bits[6], (ulong)bits[5], (ulong)bits[4],
- (ulong)bits[3], (ulong)bits[2], (ulong)bits[1], (ulong)bits[0]);
- #endif
- }
- /* usable algorithms are now in bits
- * We now use the last key from pk_list to select
- * the algorithm we want to use. there are no
- * preferences for the last key, we select the one
- * corresponding to first set bit.
- */
- i = -1;
- any = 0;
-
- /* Can we use the requested algorithm? */
- if(request>-1 && (bits[request/32] & (1<<(request%32))) &&
- algo_available(preftype,request,hint))
- return request;
-
- /* If we have personal prefs set, use them instead of the last key */
- if(preftype==PREFTYPE_SYM && opt.personal_cipher_prefs)
- prefs=opt.personal_cipher_prefs;
- else if(preftype==PREFTYPE_HASH && opt.personal_digest_prefs)
- prefs=opt.personal_digest_prefs;
- else if(preftype==PREFTYPE_ZIP && opt.personal_compress_prefs)
- prefs=opt.personal_compress_prefs;
-
- if( prefs ) {
- for(j=0; prefs[j].type; j++ ) {
- if( prefs[j].type == preftype ) {
- if( (bits[prefs[j].value/32] & (1<<(prefs[j].value%32))) ) {
- if( algo_available( preftype, prefs[j].value, hint ) ) {
- any = 1;
- i = prefs[j].value;
- break;
- }
- }
- }
- }
- }
- if( !prefs || !any ) {
- for(j=0; j < 256; j++ )
- if( (bits[j/32] & (1<<(j%32))) ) {
- if( algo_available( preftype, j, hint ) ) {
- i = j;
- break;
- }
- }
- }
-
- #if 0
- log_debug("prefs of type %d: selected %d\n", preftype, i );
- #endif
- if( compr_hack && !i ) {
- /* selected no compression, but we should check whether
- * algorithm 1 is also available (the ordering is not relevant
- * in this case). */
- if( bits[0] & (1<<1) )
- i = 1; /* yep; we can use compression algo 1 */
- }
-
- /* "If you are building an authentication system, the recipient
- may specify a preferred signing algorithm. However, the signer
- would be foolish to use a weak algorithm simply because the
- recipient requests it." RFC2440:13. If we settle on MD5, and
- SHA1 is also available, use SHA1 instead. Of course, if the
- user intentinally chose MD5 (by putting it in their personal
- prefs), then we should do what they say. */
-
- if(preftype==PREFTYPE_HASH &&
- i==DIGEST_ALGO_MD5 && (bits[0] & (1<<DIGEST_ALGO_SHA1)))
- {
- i=DIGEST_ALGO_SHA1;
-
- if(opt.personal_digest_prefs)
- for(j=0; prefs[j].type; j++ )
- if(opt.personal_digest_prefs[j].type==PREFTYPE_HASH &&
- opt.personal_digest_prefs[j].value==DIGEST_ALGO_MD5)
- {
- i=DIGEST_ALGO_MD5;
- break;
- }
- }
-
- return i;
-}
-
-/*
- * Select the MDC flag from the pk_list. We can only use MDC if all recipients
- * support this feature
- */
-int
-select_mdc_from_pklist (PK_LIST pk_list)
-{
- PK_LIST pkr;
-
- if( !pk_list )
- return 0;
-
- for (pkr = pk_list; pkr; pkr = pkr->next) {
- int mdc;
-
- if (pkr->pk->user_id) /* selected by user ID */
- mdc = pkr->pk->user_id->mdc_feature;
- else
- mdc = pkr->pk->mdc_feature;
- if (!mdc)
- return 0; /* at least one recipient does not support it */
- }
- return 1; /* can be used */
-}
diff --git a/g10/plaintext.c b/g10/plaintext.c
deleted file mode 100644
index b12fb0f11..000000000
--- a/g10/plaintext.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/* plaintext.c - process plaintext packets
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#ifdef HAVE_DOSISH_SYSTEM
- #include <fcntl.h> /* for setmode() */
-#endif
-
-#include "util.h"
-#include "memory.h"
-#include "options.h"
-#include "packet.h"
-#include "ttyio.h"
-#include "filter.h"
-#include "main.h"
-#include "status.h"
-#include "i18n.h"
-
-
-
-/****************
- * Handle a plaintext packet. If MFX is not NULL, update the MDs
- * Note: we should use the filter stuff here, but we have to add some
- * easy mimic to set a read limit, so we calculate only the
- * bytes from the plaintext.
- */
-int
-handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
- int nooutput, int clearsig )
-{
- char *fname = NULL;
- FILE *fp = NULL;
- int rc = 0;
- int c;
- int convert = pt->mode == 't';
-
- /* create the filename as C string */
- if( nooutput )
- ;
- else if( opt.outfile ) {
- fname = m_alloc( strlen( opt.outfile ) + 1);
- strcpy(fname, opt.outfile );
- }
- else if( pt->namelen == 8 && !memcmp( pt->name, "_CONSOLE", 8 ) ) {
- log_info(_("data not saved; use option \"--output\" to save it\n"));
- nooutput = 1;
- }
- else if( !opt.use_embedded_filename ) {
- fname = make_outfile_name( iobuf_get_real_fname(pt->buf) );
- if( !fname )
- fname = ask_outfile_name( pt->name, pt->namelen );
- if( !fname ) {
- rc = G10ERR_CREATE_FILE;
- goto leave;
- }
- }
- else {
- fname = make_printable_string( pt->name, pt->namelen, 0 );
- }
-
- if( nooutput )
- ;
- else if( !*fname || (*fname=='-' && !fname[1])) {
- /* no filename or "-" given; write to stdout */
- fp = stdout;
- #ifdef HAVE_DOSISH_SYSTEM
- setmode ( fileno(fp) , O_BINARY );
- #endif
- }
- else {
- while( !overwrite_filep (fname) ) {
- char *tmp = ask_outfile_name (NULL, 0);
- if ( !tmp || !*tmp ) {
- m_free (tmp);
- rc = G10ERR_CREATE_FILE;
- goto leave;
- }
- m_free (fname);
- fname = tmp;
- }
- }
-
- if( fp || nooutput )
- ;
- else if( !(fp = fopen(fname,"wb")) ) {
- log_error(_("error creating `%s': %s\n"), fname, strerror(errno) );
- rc = G10ERR_CREATE_FILE;
-#ifdef __riscos__
- if (errno == 106)
- log_info("perhaps the output file has the same name as the input file?\n");
-#endif /* __riscos__ */
- goto leave;
- }
-
- if( !pt->is_partial ) {
- /* we have an actual length (which might be zero). */
- assert( !clearsig );
- if( convert ) { /* text mode */
- for( ; pt->len; pt->len-- ) {
- if( (c = iobuf_get(pt->buf)) == -1 ) {
- log_error("Problem reading source (%u bytes remaining)\n",
- (unsigned)pt->len);
- rc = G10ERR_READ_FILE;
- goto leave;
- }
- if( mfx->md )
- md_putc(mfx->md, c );
- #ifndef HAVE_DOSISH_SYSTEM
- if( c == '\r' ) /* convert to native line ending */
- continue; /* fixme: this hack might be too simple */
- #endif
- if( fp ) {
- if( putc( c, fp ) == EOF ) {
- log_error("Error writing to `%s': %s\n",
- fname, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- goto leave;
- }
- }
- }
- }
- else { /* binary mode */
- byte *buffer = m_alloc( 32768 );
- while( pt->len ) {
- int len = pt->len > 32768 ? 32768 : pt->len;
- len = iobuf_read( pt->buf, buffer, len );
- if( len == -1 ) {
- log_error("Problem reading source (%u bytes remaining)\n",
- (unsigned)pt->len);
- rc = G10ERR_READ_FILE;
- m_free( buffer );
- goto leave;
- }
- if( mfx->md )
- md_write( mfx->md, buffer, len );
- if( fp ) {
- if( fwrite( buffer, 1, len, fp ) != len ) {
- log_error("Error writing to `%s': %s\n",
- fname, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- m_free( buffer );
- goto leave;
- }
- }
- pt->len -= len;
- }
- m_free( buffer );
- }
- }
- else if( !clearsig ) {
- if( convert ) { /* text mode */
- while( (c = iobuf_get(pt->buf)) != -1 ) {
- if( mfx->md )
- md_putc(mfx->md, c );
- #ifndef HAVE_DOSISH_SYSTEM
- if( convert && c == '\r' )
- continue; /* fixme: this hack might be too simple */
- #endif
- if( fp ) {
- if( putc( c, fp ) == EOF ) {
- log_error("Error writing to `%s': %s\n",
- fname, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- goto leave;
- }
- }
- }
- }
- else { /* binary mode */
- byte *buffer = m_alloc( 32768 );
- int eof;
- for( eof=0; !eof; ) {
- /* Why do we check for len < 32768:
- * If we won't, we would practically read 2 EOFs but
- * the first one has already popped the block_filter
- * off and therefore we don't catch the boundary.
- * So, always assume EOF if iobuf_read returns less bytes
- * then requested */
- int len = iobuf_read( pt->buf, buffer, 32768 );
- if( len == -1 )
- break;
- if( len < 32768 )
- eof = 1;
- if( mfx->md )
- md_write( mfx->md, buffer, len );
- if( fp ) {
- if( fwrite( buffer, 1, len, fp ) != len ) {
- log_error("Error writing to `%s': %s\n",
- fname, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- m_free( buffer );
- goto leave;
- }
- }
- }
- m_free( buffer );
- }
- pt->buf = NULL;
- }
- else { /* clear text signature - don't hash the last cr,lf */
- int state = 0;
-
- while( (c = iobuf_get(pt->buf)) != -1 ) {
- if( fp ) {
- if( putc( c, fp ) == EOF ) {
- log_error("Error writing to `%s': %s\n",
- fname, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- goto leave;
- }
- }
- if( !mfx->md )
- continue;
- if( state == 2 ) {
- md_putc(mfx->md, '\r' );
- md_putc(mfx->md, '\n' );
- state = 0;
- }
- if( !state ) {
- if( c == '\r' )
- state = 1;
- else if( c == '\n' )
- state = 2;
- else
- md_putc(mfx->md, c );
- }
- else if( state == 1 ) {
- if( c == '\n' )
- state = 2;
- else {
- md_putc(mfx->md, '\r' );
- if( c == '\r' )
- state = 1;
- else {
- state = 0;
- md_putc(mfx->md, c );
- }
- }
- }
- }
- pt->buf = NULL;
- }
-
- if( fp && fp != stdout && fclose(fp) ) {
- log_error("Error closing `%s': %s\n", fname, strerror(errno) );
- fp = NULL;
- rc = G10ERR_WRITE_FILE;
- goto leave;
- }
- fp = NULL;
-
- leave:
- if( fp && fp != stdout )
- fclose(fp);
- m_free(fname);
- return rc;
-}
-
-static void
-do_hash( MD_HANDLE md, MD_HANDLE md2, IOBUF fp, int textmode )
-{
- text_filter_context_t tfx;
- int c;
-
- if( textmode ) {
- memset( &tfx, 0, sizeof tfx);
- iobuf_push_filter( fp, text_filter, &tfx );
- }
- if( md2 ) { /* work around a strange behaviour in pgp2 */
- /* It seems that at least PGP5 converts a single CR to a CR,LF too */
- int lc = -1;
- while( (c = iobuf_get(fp)) != -1 ) {
- if( c == '\n' && lc == '\r' )
- md_putc(md2, c);
- else if( c == '\n' ) {
- md_putc(md2, '\r');
- md_putc(md2, c);
- }
- else if( c != '\n' && lc == '\r' ) {
- md_putc(md2, '\n');
- md_putc(md2, c);
- }
- else
- md_putc(md2, c);
-
- if( md )
- md_putc(md, c );
- lc = c;
- }
- }
- else {
- while( (c = iobuf_get(fp)) != -1 ) {
- if( md )
- md_putc(md, c );
- }
- }
-}
-
-
-/****************
- * Ask for the detached datafile and calculate the digest from it.
- * INFILE is the name of the input file.
- */
-int
-ask_for_detached_datafile( MD_HANDLE md, MD_HANDLE md2,
- const char *inname, int textmode )
-{
- char *answer = NULL;
- IOBUF fp;
- int rc = 0;
-
- fp = open_sigfile( inname ); /* open default file */
- if( !fp && !opt.batch ) {
- int any=0;
- tty_printf(_("Detached signature.\n"));
- do {
- m_free(answer);
- answer = cpr_get("detached_signature.filename",
- _("Please enter name of data file: "));
- cpr_kill_prompt();
- if( any && !*answer ) {
- rc = G10ERR_READ_FILE;
- goto leave;
- }
- fp = iobuf_open(answer);
- if( !fp && errno == ENOENT ) {
- tty_printf("No such file, try again or hit enter to quit.\n");
- any++;
- }
- else if( !fp ) {
- log_error("can't open `%s': %s\n", answer, strerror(errno) );
- rc = G10ERR_READ_FILE;
- goto leave;
- }
- } while( !fp );
- }
-
- if( !fp ) {
- if( opt.verbose )
- log_info(_("reading stdin ...\n"));
- fp = iobuf_open( NULL );
- assert(fp);
- }
- do_hash( md, md2, fp, textmode );
- iobuf_close(fp);
-
-
- leave:
- m_free(answer);
- return rc;
-}
-
-
-
-/****************
- * Hash the given files and append the hash to hash context md.
- * If FILES is NULL, hash stdin.
- */
-int
-hash_datafiles( MD_HANDLE md, MD_HANDLE md2, STRLIST files,
- const char *sigfilename, int textmode )
-{
- IOBUF fp;
- STRLIST sl;
-
- if( !files ) {
- /* check whether we can open the signed material */
- fp = open_sigfile( sigfilename );
- if( fp ) {
- do_hash( md, md2, fp, textmode );
- iobuf_close(fp);
- return 0;
- }
- log_error (_("no signed data\n"));
- return G10ERR_OPEN_FILE;
- }
-
-
- for (sl=files; sl; sl = sl->next ) {
- fp = iobuf_open( sl->d );
- if( !fp ) {
- log_error(_("can't open signed data `%s'\n"),
- print_fname_stdin(sl->d));
- return G10ERR_OPEN_FILE;
- }
- do_hash( md, md2, fp, textmode );
- iobuf_close(fp);
- }
-
- return 0;
-}
-
-
-
-
-
diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c
deleted file mode 100644
index 2c8771c27..000000000
--- a/g10/pubkey-enc.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* pubkey-enc.c - public key encoded packet handling
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "packet.h"
-#include "mpi.h"
-#include "keydb.h"
-#include "trustdb.h"
-#include "cipher.h"
-#include "status.h"
-#include "options.h"
-#include "main.h"
-#include "i18n.h"
-
-static int get_it( PKT_pubkey_enc *k,
- DEK *dek, PKT_secret_key *sk, u32 *keyid );
-
-
-/* check that the given algo is mentioned in one of the valid user IDs */
-static int
-is_algo_in_prefs ( KBNODE keyblock, preftype_t type, int algo )
-{
- KBNODE k;
-
- for (k=keyblock; k; k=k->next) {
- if (k->pkt->pkttype == PKT_USER_ID) {
- PKT_user_id *uid = k->pkt->pkt.user_id;
- prefitem_t *prefs = uid->prefs;
-
- if (uid->created && prefs &&
- !uid->is_revoked && !uid->is_expired ) {
- for (; prefs->type; prefs++ )
- if (prefs->type == type && prefs->value == algo)
- return 1;
- }
- }
- }
- return 0;
-}
-
-
-/****************
- * Get the session key from a pubkey enc packet and return
- * it in DEK, which should have been allocated in secure memory.
- */
-int
-get_session_key( PKT_pubkey_enc *k, DEK *dek )
-{
- PKT_secret_key *sk = NULL;
- int rc;
-
- rc = check_pubkey_algo2 (k->pubkey_algo, PUBKEY_USAGE_ENC);
- if( rc )
- goto leave;
-
- if( (k->keyid[0] || k->keyid[1]) && !opt.try_all_secrets ) {
- sk = m_alloc_clear( sizeof *sk );
- sk->pubkey_algo = k->pubkey_algo; /* we want a pubkey with this algo*/
- if( !(rc = get_seckey( sk, k->keyid )) )
- rc = get_it( k, dek, sk, k->keyid );
- }
- else { /* anonymous receiver: Try all available secret keys */
- void *enum_context = NULL;
- u32 keyid[2];
-
- for(;;) {
- if( sk )
- free_secret_key( sk );
- sk = m_alloc_clear( sizeof *sk );
- rc=enum_secret_keys( &enum_context, sk, 1);
- if( rc ) {
- rc = G10ERR_NO_SECKEY;
- break;
- }
- if( sk->pubkey_algo != k->pubkey_algo )
- continue;
- keyid_from_sk( sk, keyid );
- log_info(_("anonymous recipient; trying secret key %08lX ...\n"),
- (ulong)keyid[1] );
- rc = check_secret_key( sk, 1 ); /* ask only once */
- if( !rc )
- rc = get_it( k, dek, sk, keyid );
- if( !rc ) {
- log_info(_("okay, we are the anonymous recipient.\n") );
- break;
- }
- }
- enum_secret_keys( &enum_context, NULL, 0 ); /* free context */
- }
-
- leave:
- if( sk )
- free_secret_key( sk );
- return rc;
-}
-
-
-static int
-get_it( PKT_pubkey_enc *enc, DEK *dek, PKT_secret_key *sk, u32 *keyid )
-{
- int rc;
- MPI plain_dek = NULL;
- byte *frame = NULL;
- unsigned n, nframe;
- u16 csum, csum2;
-
- rc = pubkey_decrypt(sk->pubkey_algo, &plain_dek, enc->data, sk->skey );
- if( rc )
- goto leave;
- frame = mpi_get_buffer( plain_dek, &nframe, NULL );
- mpi_free( plain_dek ); plain_dek = NULL;
-
- /* Now get the DEK (data encryption key) from the frame
- *
- * Old versions encode the DEK in in this format (msb is left):
- *
- * 0 1 DEK(16 bytes) CSUM(2 bytes) 0 RND(n bytes) 2
- *
- * Later versions encode the DEK like this:
- *
- * 0 2 RND(n bytes) 0 A DEK(k bytes) CSUM(2 bytes)
- *
- * (mpi_get_buffer already removed the leading zero).
- *
- * RND are non-zero randow bytes.
- * A is the cipher algorithm
- * DEK is the encryption key (session key) with length k
- * CSUM
- */
- if( DBG_CIPHER )
- log_hexdump("DEK frame:", frame, nframe );
- n=0;
- if( n + 7 > nframe )
- { rc = G10ERR_WRONG_SECKEY; goto leave; }
- if( frame[n] == 1 && frame[nframe-1] == 2 ) {
- log_info(_("old encoding of the DEK is not supported\n"));
- rc = G10ERR_CIPHER_ALGO;
- goto leave;
- }
- if( frame[n] != 2 ) /* somethink is wrong */
- { rc = G10ERR_WRONG_SECKEY; goto leave; }
- for(n++; n < nframe && frame[n]; n++ ) /* skip the random bytes */
- ;
- n++; /* and the zero byte */
- if( n + 4 > nframe )
- { rc = G10ERR_WRONG_SECKEY; goto leave; }
-
- dek->keylen = nframe - (n+1) - 2;
- dek->algo = frame[n++];
- if( dek->algo == CIPHER_ALGO_IDEA )
- write_status(STATUS_RSA_OR_IDEA);
- rc = check_cipher_algo( dek->algo );
- if( rc ) {
- if( !opt.quiet && rc == G10ERR_CIPHER_ALGO ) {
- log_info(_("cipher algorithm %d%s is unknown or disabled\n"),
- dek->algo, dek->algo == CIPHER_ALGO_IDEA? " (IDEA)":"");
- if(dek->algo==CIPHER_ALGO_IDEA)
- idea_cipher_warn(0);
- }
- dek->algo = 0;
- goto leave;
- }
- if( (dek->keylen*8) != cipher_get_keylen( dek->algo ) ) {
- rc = G10ERR_WRONG_SECKEY;
- goto leave;
- }
-
- /* copy the key to DEK and compare the checksum */
- csum = frame[nframe-2] << 8;
- csum |= frame[nframe-1];
- memcpy( dek->key, frame+n, dek->keylen );
- for( csum2=0, n=0; n < dek->keylen; n++ )
- csum2 += dek->key[n];
- if( csum != csum2 ) {
- rc = G10ERR_WRONG_SECKEY;
- goto leave;
- }
- if( DBG_CIPHER )
- log_hexdump("DEK is:", dek->key, dek->keylen );
- /* check that the algo is in the preferences and whether it has expired */
- {
- PKT_public_key *pk = NULL;
- KBNODE pkb = get_pubkeyblock (keyid);
-
- if( !pkb ) {
- rc = -1;
- log_error("oops: public key not found for preference check\n");
- }
- else if( pkb->pkt->pkt.public_key->selfsigversion > 3
- && dek->algo != CIPHER_ALGO_3DES
- && !is_algo_in_prefs( pkb, PREFTYPE_SYM, dek->algo ) ) {
- /* Don't print a note while we are not on verbose mode,
- * the cipher is blowfish and the preferences have twofish
- * listed */
- if( opt.verbose || dek->algo != CIPHER_ALGO_BLOWFISH
- || !is_algo_in_prefs( pkb, PREFTYPE_SYM, CIPHER_ALGO_TWOFISH))
- log_info(_(
- "NOTE: cipher algorithm %d not found in preferences\n"),
- dek->algo );
- }
-
- if (!rc) {
- KBNODE k;
-
- for (k=pkb; k; k = k->next) {
- if (k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY){
- u32 aki[2];
- keyid_from_pk(k->pkt->pkt.public_key, aki);
-
- if (aki[0]==keyid[0] && aki[1]==keyid[1]) {
- pk = k->pkt->pkt.public_key;
- break;
- }
- }
- }
- if (!pk)
- BUG ();
- if ( pk->expiredate && pk->expiredate <= make_timestamp() ) {
- log_info(_("NOTE: secret key %08lX expired at %s\n"),
- (ulong)keyid[1], asctimestamp( pk->expiredate) );
- }
- }
-
- if ( pk->is_revoked ) {
- log_info( _("NOTE: key has been revoked") );
- putc( '\n', log_stream() );
- show_revocation_reason( pk, 1 );
- }
-
- release_kbnode (pkb);
- rc = 0;
- }
-
-
- leave:
- mpi_free(plain_dek);
- m_free(frame);
- return rc;
-}
-
-
-/****************
- * Get the session key from the given string.
- * String is supposed to be formatted as this:
- * <algo-id>:<even-number-of-hex-digits>
- */
-int
-get_override_session_key( DEK *dek, const char *string )
-{
- const char *s;
- int i;
-
- if ( !string )
- return G10ERR_BAD_KEY;
- dek->algo = atoi(string);
- if ( dek->algo < 1 )
- return G10ERR_BAD_KEY;
- if ( !(s = strchr ( string, ':' )) )
- return G10ERR_BAD_KEY;
- s++;
- for(i=0; i < DIM(dek->key) && *s; i++, s +=2 ) {
- int c = hextobyte ( s );
- if (c == -1)
- return G10ERR_BAD_KEY;
- dek->key[i] = c;
- }
- if ( *s )
- return G10ERR_BAD_KEY;
- dek->keylen = i;
- return 0;
-}
-
diff --git a/g10/revoke.c b/g10/revoke.c
deleted file mode 100644
index b6e9e6398..000000000
--- a/g10/revoke.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/* revoke.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "ttyio.h"
-#include "status.h"
-#include "i18n.h"
-
-
-struct revocation_reason_info {
- int code;
- char *desc;
-};
-
-
-int
-revocation_reason_build_cb( PKT_signature *sig, void *opaque )
-{
- struct revocation_reason_info *reason = opaque;
- char *ud = NULL;
- byte *buffer;
- size_t buflen = 1;
-
- if(!reason)
- return 0;
-
- if( reason->desc ) {
- ud = native_to_utf8( reason->desc );
- buflen += strlen(ud);
- }
- buffer = m_alloc( buflen );
- *buffer = reason->code;
- if( ud ) {
- memcpy(buffer+1, ud, strlen(ud) );
- m_free( ud );
- }
-
- build_sig_subpkt( sig, SIGSUBPKT_REVOC_REASON, buffer, buflen );
- m_free( buffer );
- return 0;
-}
-
-/* Outputs a minimal pk (as defined by 2440) from a keyblock. A
- minimal pk consists of the public key packet and a user ID. We try
- and pick a user ID that has a uid signature, and include it if
- possible. */
-static int
-export_minimal_pk(IOBUF out,KBNODE keyblock,
- PKT_signature *revsig,PKT_signature *revkey)
-{
- KBNODE node;
- PACKET pkt;
- PKT_user_id *uid=NULL;
- PKT_signature *selfsig=NULL;
- u32 keyid[2];
- int rc;
-
- node=find_kbnode(keyblock,PKT_PUBLIC_KEY);
- if(!node)
- {
- log_error(_("key incomplete\n"));
- return G10ERR_GENERAL;
- }
-
- keyid_from_pk(node->pkt->pkt.public_key,keyid);
-
- pkt=*node->pkt;
- rc=build_packet(out,&pkt);
- if(rc)
- {
- log_error(_("build_packet failed: %s\n"), g10_errstr(rc) );
- return rc;
- }
-
- init_packet(&pkt);
- pkt.pkttype=PKT_SIGNATURE;
-
- /* the revocation itself, if any. 2440 likes this to come first. */
- if(revsig)
- {
- pkt.pkt.signature=revsig;
- rc=build_packet(out,&pkt);
- if(rc)
- {
- log_error(_("build_packet failed: %s\n"), g10_errstr(rc) );
- return rc;
- }
- }
-
- /* If a revkey in a 1F sig is present, include it too */
- if(revkey)
- {
- pkt.pkt.signature=revkey;
- rc=build_packet(out,&pkt);
- if(rc)
- {
- log_error(_("build_packet failed: %s\n"), g10_errstr(rc) );
- return rc;
- }
- }
-
- while(!selfsig)
- {
- KBNODE signode;
-
- node=find_next_kbnode(node,PKT_USER_ID);
- if(!node)
- {
- /* We're out of user IDs - none were self-signed. */
- if(uid)
- break;
- else
- {
- log_error(_("key %08lX incomplete\n"),(ulong)keyid[1]);
- return G10ERR_GENERAL;
- }
- }
-
- if(node->pkt->pkt.user_id->attrib_data)
- continue;
-
- uid=node->pkt->pkt.user_id;
- signode=node;
-
- while((signode=find_next_kbnode(signode,PKT_SIGNATURE)))
- {
- if(keyid[0]==signode->pkt->pkt.signature->keyid[0] &&
- keyid[1]==signode->pkt->pkt.signature->keyid[1] &&
- IS_UID_SIG(signode->pkt->pkt.signature))
- {
- selfsig=signode->pkt->pkt.signature;
- break;
- }
- }
- }
-
- pkt.pkttype=PKT_USER_ID;
- pkt.pkt.user_id=uid;
-
- rc=build_packet(out,&pkt);
- if(rc)
- {
- log_error(_("build_packet failed: %s\n"), g10_errstr(rc) );
- return rc;
- }
-
- if(selfsig)
- {
- pkt.pkttype=PKT_SIGNATURE;
- pkt.pkt.signature=selfsig;
-
- rc=build_packet(out,&pkt);
- if(rc)
- {
- log_error(_("build_packet failed: %s\n"), g10_errstr(rc) );
- return rc;
- }
- }
-
- return 0;
-}
-
-/****************
- * Generate a revocation certificate for UNAME via a designated revoker
- */
-int
-gen_desig_revoke( const char *uname )
-{
- int rc = 0;
- armor_filter_context_t afx;
- PKT_public_key *pk = NULL;
- PKT_secret_key *sk = NULL;
- PKT_signature *sig = NULL;
- IOBUF out = NULL;
- struct revocation_reason_info *reason = NULL;
- KEYDB_HANDLE kdbhd;
- KEYDB_SEARCH_DESC desc;
- KBNODE keyblock=NULL,node;
- u32 keyid[2];
- int i,any=0;
-
- if( opt.batch ) {
- log_error(_("sorry, can't do this in batch mode\n"));
- return G10ERR_GENERAL;
- }
-
- memset( &afx, 0, sizeof afx);
-
- kdbhd = keydb_new (0);
- classify_user_id (uname, &desc);
- rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID;
- if (rc) {
- log_error (_("key `%s' not found: %s\n"),uname, g10_errstr (rc));
- goto leave;
- }
-
- rc = keydb_get_keyblock (kdbhd, &keyblock );
- if( rc ) {
- log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- /* To parse the revkeys */
- merge_keys_and_selfsig(keyblock);
-
- /* get the key from the keyblock */
- node = find_kbnode( keyblock, PKT_PUBLIC_KEY );
- if( !node )
- BUG ();
-
- pk=node->pkt->pkt.public_key;
-
- keyid_from_pk(pk,keyid);
-
- /* Are we a designated revoker for this key? */
-
- if(!pk->revkey && pk->numrevkeys)
- BUG();
-
- for(i=0;i<pk->numrevkeys;i++)
- {
- if(sk)
- free_secret_key(sk);
-
- sk=m_alloc_clear(sizeof(*sk));
-
- rc=get_seckey_byfprint(sk,pk->revkey[i].fpr,MAX_FINGERPRINT_LEN);
-
- /* We have the revocation key */
- if(!rc)
- {
- size_t n;
- char *p;
- u32 sk_keyid[2];
- PKT_signature *revkey=NULL;
-
- any=1;
- keyid_from_sk(sk,sk_keyid);
-
- tty_printf("\npub %4u%c/%08lX %s ",
- nbits_from_pk( pk ),
- pubkey_letter( pk->pubkey_algo ),
- (ulong)keyid[1], datestr_from_pk(pk) );
-
- p = get_user_id( keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\n\n");
-
- tty_printf(_("To be revoked by:\n"));
-
- tty_printf("\nsec %4u%c/%08lX %s ",
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)sk_keyid[1], datestr_from_sk(sk) );
-
- p = get_user_id( sk_keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\n");
- if(pk->revkey[i].class&0x40)
- tty_printf(_("(This is a sensitive revocation key)\n"));
- tty_printf("\n");
-
- if( !cpr_get_answer_is_yes("gen_desig_revoke.okay",
- _("Create a revocation certificate for this key? ")) )
- continue;
-
- /* get the reason for the revocation (this is always v4) */
- reason = ask_revocation_reason( 1, 0, 1 );
- if( !reason )
- continue;
-
- rc = check_secret_key( sk, 0 );
- if( rc )
- continue;
-
- if( !opt.armor )
- tty_printf(_("ASCII armored output forced.\n"));
-
- if( (rc = open_outfile( NULL, 0, &out )) )
- goto leave;
-
- afx.what = 1;
- afx.hdrlines = "Comment: A revocation certificate should follow\n";
- iobuf_push_filter( out, armor_filter, &afx );
-
- /* create it */
- rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0,
- 0, 0, 0,
- revocation_reason_build_cb, reason );
- if( rc ) {
- log_error(_("make_keysig_packet failed: %s\n"), g10_errstr(rc));
- goto leave;
- }
-
- /* Spit out a minimal pk as well, since otherwise there is
- no way to know which key to attach this revocation to.
- Also include the direct key signature that contains
- this revocation key. We're allowed to include
- sensitive revocation keys along with a revocation, as
- this may be the only time the recipient has seen it.
- Note that this means that if we have multiple different
- sensitive revocation keys in a given direct key
- signature, we're going to include them all here. This
- is annoying, but the good outweighs the bad, since
- without including this a sensitive revoker can't really
- do their job. People should not include multiple
- sensitive revocation keys in one signature: 2440 says
- "Note that it may be appropriate to isolate this
- subpacket within a separate signature so that it is not
- combined with other subpackets that need to be
- exported." -dms */
-
- while(!revkey)
- {
- KBNODE signode;
-
- signode=find_next_kbnode(node,PKT_SIGNATURE);
- if(!signode)
- break;
-
- node=signode;
-
- if(keyid[0]==signode->pkt->pkt.signature->keyid[0] &&
- keyid[1]==signode->pkt->pkt.signature->keyid[1] &&
- IS_KEY_SIG(signode->pkt->pkt.signature))
- {
- int j;
-
- for(j=0;j<signode->pkt->pkt.signature->numrevkeys;j++)
- {
- if(pk->revkey[i].class==
- signode->pkt->pkt.signature->revkey[j]->class &&
- pk->revkey[i].algid==
- signode->pkt->pkt.signature->revkey[j]->algid &&
- memcmp(pk->revkey[i].fpr,
- signode->pkt->pkt.signature->revkey[j]->fpr,
- MAX_FINGERPRINT_LEN)==0)
- {
- revkey=signode->pkt->pkt.signature;
- break;
- }
- }
- }
- }
-
- if(!revkey)
- BUG();
-
- rc=export_minimal_pk(out,keyblock,sig,revkey);
- if(rc)
- goto leave;
-
- /* and issue a usage notice */
- tty_printf(_("Revocation certificate created.\n"));
- break;
- }
- }
-
- if(!any)
- log_error(_("no revocation keys found for `%s'\n"),uname);
-
- leave:
- if( pk )
- free_public_key( pk );
- if( sk )
- free_secret_key( sk );
- if( sig )
- free_seckey_enc( sig );
-
- if( rc )
- iobuf_cancel(out);
- else
- iobuf_close(out);
- release_revocation_reason_info( reason );
- return rc;
-}
-
-
-/****************
- * Generate a revocation certificate for UNAME
- */
-int
-gen_revoke( const char *uname )
-{
- int rc = 0;
- armor_filter_context_t afx;
- PACKET pkt;
- PKT_secret_key *sk; /* used as pointer into a kbnode */
- PKT_public_key *pk = NULL;
- PKT_signature *sig = NULL;
- u32 sk_keyid[2];
- IOBUF out = NULL;
- KBNODE keyblock = NULL, pub_keyblock = NULL;
- KBNODE node;
- KEYDB_HANDLE kdbhd;
- struct revocation_reason_info *reason = NULL;
- KEYDB_SEARCH_DESC desc;
-
- if( opt.batch ) {
- log_error(_("sorry, can't do this in batch mode\n"));
- return G10ERR_GENERAL;
- }
-
- memset( &afx, 0, sizeof afx);
- init_packet( &pkt );
-
- /* search the userid:
- * We don't want the whole getkey stuff here but the entire keyblock
- */
- kdbhd = keydb_new (1);
- classify_user_id (uname, &desc);
- rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID;
- if (rc) {
- log_error (_("secret key `%s' not found: %s\n"),
- uname, g10_errstr (rc));
- goto leave;
- }
-
- rc = keydb_get_keyblock (kdbhd, &keyblock );
- if( rc ) {
- log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- /* get the keyid from the keyblock */
- node = find_kbnode( keyblock, PKT_SECRET_KEY );
- if( !node )
- BUG ();
-
- /* fixme: should make a function out of this stuff,
- * it's used all over the source */
- sk = node->pkt->pkt.secret_key;
- keyid_from_sk( sk, sk_keyid );
- tty_printf("\nsec %4u%c/%08lX %s ",
- nbits_from_sk( sk ),
- pubkey_letter( sk->pubkey_algo ),
- (ulong)sk_keyid[1], datestr_from_sk(sk) );
- {
- size_t n;
- char *p = get_user_id( sk_keyid, &n );
- tty_print_utf8_string( p, n );
- m_free(p);
- tty_printf("\n");
- }
- pk = m_alloc_clear( sizeof *pk );
-
- /* FIXME: We should get the public key direct from the secret one */
-
- pub_keyblock=get_pubkeyblock(sk_keyid);
- if(!pub_keyblock)
- {
- log_error(_("no corresponding public key: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- node=find_kbnode(pub_keyblock,PKT_PUBLIC_KEY);
- if(!node)
- BUG();
-
- pk=node->pkt->pkt.public_key;
-
- if( cmp_public_secret_key( pk, sk ) ) {
- log_error(_("public key does not match secret key!\n") );
- rc = G10ERR_GENERAL;
- goto leave;
- }
-
- tty_printf("\n");
- if( !cpr_get_answer_is_yes("gen_revoke.okay",
- _("Create a revocation certificate for this key? ")) ){
- rc = 0;
- goto leave;
- }
-
- if(sk->version>=4 || opt.force_v4_certs) {
- /* get the reason for the revocation */
- reason = ask_revocation_reason( 1, 0, 1 );
- if( !reason ) { /* user decided to cancel */
- rc = 0;
- goto leave;
- }
- }
-
- switch( is_secret_key_protected( sk ) ) {
- case -1:
- log_error(_("unknown protection algorithm\n"));
- rc = G10ERR_PUBKEY_ALGO;
- break;
- case 0:
- tty_printf(_("NOTE: This key is not protected!\n"));
- break;
- default:
- rc = check_secret_key( sk, 0 );
- break;
- }
- if( rc )
- goto leave;
-
-
- if( !opt.armor )
- tty_printf(_("ASCII armored output forced.\n"));
-
- if( (rc = open_outfile( NULL, 0, &out )) )
- goto leave;
-
- afx.what = 1;
- afx.hdrlines = "Comment: A revocation certificate should follow\n";
- iobuf_push_filter( out, armor_filter, &afx );
-
- /* create it */
- rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0,
- opt.force_v4_certs?4:0, 0, 0,
- revocation_reason_build_cb, reason );
- if( rc ) {
- log_error(_("make_keysig_packet failed: %s\n"), g10_errstr(rc));
- goto leave;
- }
-
- if(opt.pgp2 || opt.pgp6 || opt.pgp7)
- {
- /* Use a minimal pk for PGPx mode, since PGP can't import bare
- revocation certificates. */
- rc=export_minimal_pk(out,pub_keyblock,sig,NULL);
- if(rc)
- goto leave;
- }
- else
- {
- init_packet( &pkt );
- pkt.pkttype = PKT_SIGNATURE;
- pkt.pkt.signature = sig;
-
- rc = build_packet( out, &pkt );
- if( rc ) {
- log_error(_("build_packet failed: %s\n"), g10_errstr(rc) );
- goto leave;
- }
- }
-
- /* and issue a usage notice */
- tty_printf(_("Revocation certificate created.\n\n"
-"Please move it to a medium which you can hide away; if Mallory gets\n"
-"access to this certificate he can use it to make your key unusable.\n"
-"It is smart to print this certificate and store it away, just in case\n"
-"your media become unreadable. But have some caution: The print system of\n"
-"your machine might store the data and make it available to others!\n"));
-
- leave:
- if( sig )
- free_seckey_enc( sig );
- release_kbnode( keyblock );
- release_kbnode( pub_keyblock );
- keydb_release (kdbhd);
- if( rc )
- iobuf_cancel(out);
- else
- iobuf_close(out);
- release_revocation_reason_info( reason );
- return rc;
-}
-
-
-
-struct revocation_reason_info *
-ask_revocation_reason( int key_rev, int cert_rev, int hint )
-{
- int code=-1;
- char *description = NULL;
- struct revocation_reason_info *reason;
- const char *text_0 = _("No reason specified");
- const char *text_1 = _("Key has been compromised");
- const char *text_2 = _("Key is superseded");
- const char *text_3 = _("Key is no longer used");
- const char *text_4 = _("User ID is no longer valid");
- const char *code_text = NULL;
-
- do {
- m_free(description);
- description = NULL;
-
- tty_printf(_("Please select the reason for the revocation:\n"));
- tty_printf( " 0 = %s\n", text_0 );
- if( key_rev )
- tty_printf(" 1 = %s\n", text_1 );
- if( key_rev )
- tty_printf(" 2 = %s\n", text_2 );
- if( key_rev )
- tty_printf(" 3 = %s\n", text_3 );
- if( cert_rev )
- tty_printf(" 4 = %s\n", text_4 );
- tty_printf( " Q = %s\n", _("Cancel") );
- if( hint )
- tty_printf(_("(Probably you want to select %d here)\n"), hint );
-
- while(code==-1) {
- int n;
- char *answer = cpr_get("ask_revocation_reason.code",
- _("Your decision? "));
- trim_spaces( answer );
- cpr_kill_prompt();
- if( *answer == 'q' || *answer == 'Q')
- return NULL; /* cancel */
- if( hint && !*answer )
- n = hint;
- else if(!isdigit( *answer ) )
- n = -1;
- else
- n = atoi(answer);
- m_free(answer);
- if( n == 0 ) {
- code = 0x00; /* no particular reason */
- code_text = text_0;
- }
- else if( key_rev && n == 1 ) {
- code = 0x02; /* key has been compromised */
- code_text = text_1;
- }
- else if( key_rev && n == 2 ) {
- code = 0x01; /* key is superseded */
- code_text = text_2;
- }
- else if( key_rev && n == 3 ) {
- code = 0x03; /* key is no longer used */
- code_text = text_3;
- }
- else if( cert_rev && n == 4 ) {
- code = 0x20; /* uid is no longer valid */
- code_text = text_4;
- }
- else
- tty_printf(_("Invalid selection.\n"));
- }
-
- tty_printf(_("Enter an optional description; "
- "end it with an empty line:\n") );
- for(;;) {
- char *answer = cpr_get("ask_revocation_reason.text", "> " );
- trim_trailing_ws( answer, strlen(answer) );
- cpr_kill_prompt();
- if( !*answer ) {
- m_free(answer);
- break;
- }
-
- {
- char *p = make_printable_string( answer, strlen(answer), 0 );
- m_free(answer);
- answer = p;
- }
-
- if( !description )
- description = m_strdup(answer);
- else {
- char *p = m_alloc( strlen(description) + strlen(answer) + 2 );
- strcpy(stpcpy(stpcpy( p, description),"\n"),answer);
- m_free(description);
- description = p;
- }
- m_free(answer);
- }
-
- tty_printf(_("Reason for revocation: %s\n"), code_text );
- if( !description )
- tty_printf(_("(No description given)\n") );
- else
- tty_printf("%s\n", description );
-
- } while( !cpr_get_answer_is_yes("ask_revocation_reason.okay",
- _("Is this okay? ")) );
-
- reason = m_alloc( sizeof *reason );
- reason->code = code;
- reason->desc = description;
- return reason;
-}
-
-void
-release_revocation_reason_info( struct revocation_reason_info *reason )
-{
- if( reason ) {
- m_free( reason->desc );
- m_free( reason );
- }
-}
diff --git a/g10/seckey-cert.c b/g10/seckey-cert.c
deleted file mode 100644
index d19ac683a..000000000
--- a/g10/seckey-cert.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/* seckey-cert.c - secret key certificate packet handling
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "memory.h"
-#include "packet.h"
-#include "mpi.h"
-#include "keydb.h"
-#include "cipher.h"
-#include "main.h"
-#include "options.h"
-#include "i18n.h"
-#include "status.h"
-
-
-static int
-do_check( PKT_secret_key *sk, const char *tryagain_text )
-{
- byte *buffer;
- u16 csum=0;
- int i, res;
- unsigned nbytes;
-
- if( sk->is_protected ) { /* remove the protection */
- DEK *dek = NULL;
- u32 keyid[4]; /* 4! because we need two of them */
- CIPHER_HANDLE cipher_hd=NULL;
- PKT_secret_key *save_sk;
-
- if( sk->protect.s2k.mode == 1001 ) {
- log_info(_("secret key parts are not available\n"));
- return G10ERR_GENERAL;
- }
- if( sk->protect.algo == CIPHER_ALGO_NONE )
- BUG();
- if( check_cipher_algo( sk->protect.algo ) ) {
- log_info(_("protection algorithm %d%s is not supported\n"),
- sk->protect.algo,sk->protect.algo==1?" (IDEA)":"" );
- if(sk->protect.algo==CIPHER_ALGO_IDEA)
- idea_cipher_warn(0);
- return G10ERR_CIPHER_ALGO;
- }
- keyid_from_sk( sk, keyid );
- keyid[2] = keyid[3] = 0;
- if( !sk->is_primary ) {
- keyid[2] = sk->main_keyid[0];
- keyid[3] = sk->main_keyid[1];
- }
- dek = passphrase_to_dek( keyid, sk->pubkey_algo, sk->protect.algo,
- &sk->protect.s2k, 0, tryagain_text );
- cipher_hd = cipher_open( sk->protect.algo,
- CIPHER_MODE_AUTO_CFB, 1);
- cipher_setkey( cipher_hd, dek->key, dek->keylen );
- m_free(dek);
- save_sk = copy_secret_key( NULL, sk );
- cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen );
- csum = 0;
- if( sk->version >= 4 ) {
- int ndata;
- byte *p, *data;
- u16 csumc = 0;
-
- i = pubkey_get_npkey(sk->pubkey_algo);
- assert( mpi_is_opaque( sk->skey[i] ) );
- p = mpi_get_opaque( sk->skey[i], &ndata );
- if ( ndata > 1 )
- csumc = p[ndata-2] << 8 | p[ndata-1];
- data = m_alloc_secure( ndata );
- cipher_decrypt( cipher_hd, data, p, ndata );
- mpi_free( sk->skey[i] ); sk->skey[i] = NULL ;
- p = data;
- if (sk->protect.sha1chk) {
- /* This is the new SHA1 checksum method to detect
- tampering with the key as used by the Klima/Rosa
- attack */
- sk->csum = 0;
- csum = 1;
- if( ndata < 20 )
- log_error("not enough bytes for SHA-1 checksum\n");
- else {
- MD_HANDLE h = md_open (DIGEST_ALGO_SHA1, 1);
- if (!h)
- BUG(); /* algo not available */
- md_write (h, data, ndata - 20);
- md_final (h);
- if (!memcmp (md_read (h, DIGEST_ALGO_SHA1),
- data + ndata - 20, 20) ) {
- /* digest does match. We have to keep the old
- style checksum in sk->csum, so that the
- test used for unprotected keys does work.
- This test gets used when we are adding new
- keys. */
- sk->csum = csum = checksum (data, ndata-20);
- }
- md_close (h);
- }
- }
- else {
- if( ndata < 2 ) {
- log_error("not enough bytes for checksum\n");
- sk->csum = 0;
- csum = 1;
- }
- else {
- csum = checksum( data, ndata-2);
- sk->csum = data[ndata-2] << 8 | data[ndata-1];
- if ( sk->csum != csum ) {
- /* This is a PGP 7.0.0 workaround */
- sk->csum = csumc; /* take the encrypted one */
- }
- }
- }
-
- /* must check it here otherwise the mpi_read_xx would fail
- because the length may have an arbitrary value */
- if( sk->csum == csum ) {
- for( ; i < pubkey_get_nskey(sk->pubkey_algo); i++ ) {
- nbytes = ndata;
- sk->skey[i] = mpi_read_from_buffer(p, &nbytes, 1 );
- ndata -= nbytes;
- p += nbytes;
- }
- /* Note: at this point ndata should be 2 for a simple
- checksum or 20 for the sha1 digest */
- }
- m_free(data);
- }
- else {
- for(i=pubkey_get_npkey(sk->pubkey_algo);
- i < pubkey_get_nskey(sk->pubkey_algo); i++ ) {
- byte *p;
- int ndata;
- unsigned int dummy;
-
- assert (mpi_is_opaque (sk->skey[i]));
- p = mpi_get_opaque (sk->skey[i], &ndata);
- assert (ndata >= 2);
- assert (ndata == ((p[0] << 8 | p[1]) + 7)/8 + 2);
- buffer = m_alloc_secure (ndata);
- cipher_sync (cipher_hd);
- buffer[0] = p[0];
- buffer[1] = p[1];
- cipher_decrypt (cipher_hd, buffer+2, p+2, ndata-2);
- csum += checksum (buffer, ndata);
- mpi_free (sk->skey[i]);
- dummy = ndata;
- sk->skey[i] = mpi_read_from_buffer (buffer, &dummy, 1);
- assert (sk->skey[i]);
- m_free (buffer);
-/* csum += checksum_mpi (sk->skey[i]); */
- }
- }
- cipher_close( cipher_hd );
- /* now let's see whether we have used the right passphrase */
- if( csum != sk->csum ) {
- copy_secret_key( sk, save_sk );
- passphrase_clear_cache ( keyid, sk->pubkey_algo );
- free_secret_key( save_sk );
- return G10ERR_BAD_PASS;
- }
- /* the checksum may fail, so we also check the key itself */
- res = pubkey_check_secret_key( sk->pubkey_algo, sk->skey );
- if( res ) {
- copy_secret_key( sk, save_sk );
- passphrase_clear_cache ( keyid, sk->pubkey_algo );
- free_secret_key( save_sk );
- return G10ERR_BAD_PASS;
- }
- free_secret_key( save_sk );
- sk->is_protected = 0;
- }
- else { /* not protected, assume it is okay if the checksum is okay */
- csum = 0;
- for(i=pubkey_get_npkey(sk->pubkey_algo);
- i < pubkey_get_nskey(sk->pubkey_algo); i++ ) {
- csum += checksum_mpi( sk->skey[i] );
- }
- if( csum != sk->csum )
- return G10ERR_CHECKSUM;
- }
-
- return 0;
-}
-
-
-
-/****************
- * Check the secret key
- * Ask up to 3 (or n) times for a correct passphrase
- */
-int
-check_secret_key( PKT_secret_key *sk, int n )
-{
- int rc = G10ERR_BAD_PASS;
- int i;
-
- if( n < 1 )
- n = (opt.batch && !opt.use_agent)? 1 : 3; /* use the default value */
-
- for(i=0; i < n && rc == G10ERR_BAD_PASS; i++ ) {
- const char *tryagain = NULL;
- if (i) {
- tryagain = _("Invalid passphrase; please try again");
- log_info (_("%s ...\n"), tryagain);
- }
- rc = do_check( sk, tryagain );
- if( rc == G10ERR_BAD_PASS && is_status_enabled() ) {
- u32 kid[2];
- char buf[50];
-
- keyid_from_sk( sk, kid );
- sprintf(buf, "%08lX%08lX", (ulong)kid[0], (ulong)kid[1]);
- write_status_text( STATUS_BAD_PASSPHRASE, buf );
- }
- if( have_static_passphrase() )
- break;
- }
-
- if( !rc )
- write_status( STATUS_GOOD_PASSPHRASE );
-
- return rc;
-}
-
-/****************
- * check whether the secret key is protected.
- * Returns: 0 not protected, -1 on error or the protection algorithm
- */
-int
-is_secret_key_protected( PKT_secret_key *sk )
-{
- return sk->is_protected? sk->protect.algo : 0;
-}
-
-
-
-/****************
- * Protect the secret key with the passphrase from DEK
- */
-int
-protect_secret_key( PKT_secret_key *sk, DEK *dek )
-{
- int i,j, rc = 0;
- byte *buffer;
- unsigned nbytes;
- u16 csum;
-
- if( !dek )
- return 0;
-
- if( !sk->is_protected ) { /* okay, apply the protection */
- CIPHER_HANDLE cipher_hd=NULL;
-
- if( check_cipher_algo( sk->protect.algo ) )
- rc = G10ERR_CIPHER_ALGO; /* unsupport protection algorithm */
- else {
- print_cipher_algo_note( sk->protect.algo );
- cipher_hd = cipher_open( sk->protect.algo,
- CIPHER_MODE_AUTO_CFB, 1 );
- if( cipher_setkey( cipher_hd, dek->key, dek->keylen ) )
- log_info(_("WARNING: Weak key detected"
- " - please change passphrase again.\n"));
- sk->protect.ivlen = cipher_get_blocksize( sk->protect.algo );
- assert( sk->protect.ivlen <= DIM(sk->protect.iv) );
- if( sk->protect.ivlen != 8 && sk->protect.ivlen != 16 )
- BUG(); /* yes, we are very careful */
- randomize_buffer(sk->protect.iv, sk->protect.ivlen, 1);
- cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen );
- if( sk->version >= 4 ) {
- byte *bufarr[PUBKEY_MAX_NSKEY];
- unsigned narr[PUBKEY_MAX_NSKEY];
- unsigned nbits[PUBKEY_MAX_NSKEY];
- int ndata=0;
- byte *p, *data;
-
- for(j=0, i = pubkey_get_npkey(sk->pubkey_algo);
- i < pubkey_get_nskey(sk->pubkey_algo); i++, j++ ) {
- assert( !mpi_is_opaque( sk->skey[i] ) );
- bufarr[j] = mpi_get_buffer( sk->skey[i], &narr[j], NULL );
- nbits[j] = mpi_get_nbits( sk->skey[i] );
- ndata += narr[j] + 2;
- }
- for( ; j < PUBKEY_MAX_NSKEY; j++ )
- bufarr[j] = NULL;
- ndata += opt.simple_sk_checksum? 2 : 20; /* for checksum */
-
- data = m_alloc_secure( ndata );
- p = data;
- for(j=0; j < PUBKEY_MAX_NSKEY && bufarr[j]; j++ ) {
- p[0] = nbits[j] >> 8 ;
- p[1] = nbits[j];
- p += 2;
- memcpy(p, bufarr[j], narr[j] );
- p += narr[j];
- m_free(bufarr[j]);
- }
-
- if (opt.simple_sk_checksum) {
- log_info (_("generating the deprecated 16-bit checksum"
- " for secret key protection\n"));
- csum = checksum( data, ndata-2);
- sk->csum = csum;
- *p++ = csum >> 8;
- *p++ = csum;
- sk->protect.sha1chk = 0;
- }
- else {
- MD_HANDLE h = md_open (DIGEST_ALGO_SHA1, 1);
- if (!h)
- BUG(); /* algo not available */
- md_write (h, data, ndata - 20);
- md_final (h);
- memcpy (p, md_read (h, DIGEST_ALGO_SHA1), 20);
- p += 20;
- md_close (h);
- sk->csum = csum = 0;
- sk->protect.sha1chk = 1;
- }
- assert( p == data+ndata );
-
- cipher_encrypt( cipher_hd, data, data, ndata );
- for(i = pubkey_get_npkey(sk->pubkey_algo);
- i < pubkey_get_nskey(sk->pubkey_algo); i++ ) {
- mpi_free( sk->skey[i] );
- sk->skey[i] = NULL;
- }
- i = pubkey_get_npkey(sk->pubkey_algo);
- sk->skey[i] = mpi_set_opaque(NULL, data, ndata );
- }
- else {
- csum = 0;
- for(i=pubkey_get_npkey(sk->pubkey_algo);
- i < pubkey_get_nskey(sk->pubkey_algo); i++ ) {
- byte *data;
- unsigned int nbits;
-
- csum += checksum_mpi (sk->skey[i]);
- buffer = mpi_get_buffer( sk->skey[i], &nbytes, NULL );
- cipher_sync (cipher_hd);
- assert ( !mpi_is_opaque (sk->skey[i]) );
- data = m_alloc (nbytes+2);
- nbits = mpi_get_nbits (sk->skey[i]);
- assert (nbytes == (nbits + 7)/8);
- data[0] = nbits >> 8;
- data[1] = nbits;
- cipher_encrypt (cipher_hd, data+2, buffer, nbytes);
- m_free( buffer );
-
- mpi_free (sk->skey[i]);
- sk->skey[i] = mpi_set_opaque (NULL, data, nbytes+2);
- }
- sk->csum = csum;
- }
- sk->is_protected = 1;
- cipher_close( cipher_hd );
- }
- }
- return rc;
-}
-
diff --git a/g10/sig-check.c b/g10/sig-check.c
deleted file mode 100644
index c068e4409..000000000
--- a/g10/sig-check.c
+++ /dev/null
@@ -1,619 +0,0 @@
-/* sig-check.c - Check a signature
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "util.h"
-#include "packet.h"
-#include "memory.h"
-#include "mpi.h"
-#include "keydb.h"
-#include "cipher.h"
-#include "main.h"
-#include "status.h"
-#include "i18n.h"
-#include "options.h"
-
-struct cmp_help_context_s {
- PKT_signature *sig;
- MD_HANDLE md;
-};
-
-static int do_check( PKT_public_key *pk, PKT_signature *sig,
- MD_HANDLE digest, int *r_expired );
-
-/****************
- * Check the signature which is contained in SIG.
- * The MD_HANDLE should be currently open, so that this function
- * is able to append some data, before finalizing the digest.
- */
-int
-signature_check( PKT_signature *sig, MD_HANDLE digest )
-{
- u32 dummy;
- int dum2;
- return signature_check2( sig, digest, &dummy, &dum2 );
-}
-
-int
-signature_check2( PKT_signature *sig, MD_HANDLE digest,
- u32 *r_expiredate, int *r_expired )
-{
- PKT_public_key *pk = m_alloc_clear( sizeof *pk );
- int rc=0;
-
- *r_expiredate = 0;
-
- /* Sanity check that the md has a context for the hash that the
- sig is expecting. This can happen if a onepass sig header does
- not match the actual sig, and also if the clearsign "Hash:"
- header is missing or does not match the actual sig. */
-
- if(!md_algo_present(digest,sig->digest_algo)) {
- log_info(_("WARNING: signature digest conflict in message\n"));
- rc=G10ERR_BAD_SIGN;
- }
- else if( get_pubkey( pk, sig->keyid ) )
- rc = G10ERR_NO_PUBKEY;
- else if(!pk->is_valid && !pk->is_primary)
- rc=G10ERR_BAD_PUBKEY; /* you cannot have a good sig from an
- invalid subkey */
- else {
- *r_expiredate = pk->expiredate;
- rc = do_check( pk, sig, digest, r_expired );
- }
-
- free_public_key( pk );
-
- if( !rc && sig->sig_class < 2 && is_status_enabled() ) {
- /* This signature id works best with DLP algorithms because
- * they use a random parameter for every signature. Instead of
- * this sig-id we could have also used the hash of the document
- * and the timestamp, but the drawback of this is, that it is
- * not possible to sign more than one identical document within
- * one second. Some remote batch processing applications might
- * like this feature here */
- MD_HANDLE md;
- u32 a = sig->timestamp;
- int i, nsig = pubkey_get_nsig( sig->pubkey_algo );
- byte *p, *buffer;
-
- md = md_open( DIGEST_ALGO_RMD160, 0);
- md_putc( digest, sig->pubkey_algo );
- md_putc( digest, sig->digest_algo );
- md_putc( digest, (a >> 24) & 0xff );
- md_putc( digest, (a >> 16) & 0xff );
- md_putc( digest, (a >> 8) & 0xff );
- md_putc( digest, a & 0xff );
- for(i=0; i < nsig; i++ ) {
- unsigned n = mpi_get_nbits( sig->data[i]);
-
- md_putc( md, n>>8);
- md_putc( md, n );
- p = mpi_get_buffer( sig->data[i], &n, NULL );
- md_write( md, p, n );
- m_free(p);
- }
- md_final( md );
- p = make_radix64_string( md_read( md, 0 ), 20 );
- buffer = m_alloc( strlen(p) + 60 );
- sprintf( buffer, "%s %s %lu",
- p, strtimestamp( sig->timestamp ), (ulong)sig->timestamp );
- write_status_text( STATUS_SIG_ID, buffer );
- m_free(buffer);
- m_free(p);
- md_close(md);
- }
-
- return rc;
-}
-
-
-/****************
- * This function gets called by pubkey_verify() if the algorithm needs it.
- */
-static int
-cmp_help( void *opaque, MPI result )
-{
- #if 0 /* we do not use this anymore */
- int rc=0, i, j, c, old_enc;
- byte *dp;
- const byte *asn;
- size_t mdlen, asnlen;
- struct cmp_help_context_s *ctx = opaque;
- PKT_signature *sig = ctx->sig;
- MD_HANDLE digest = ctx->md;
-
- old_enc = 0;
- for(i=j=0; (c=mpi_getbyte(result, i)) != -1; i++ ) {
- if( !j ) {
- if( !i && c != 1 )
- break;
- else if( i && c == 0xff )
- ; /* skip the padding */
- else if( i && !c )
- j++;
- else
- break;
- }
- else if( ++j == 18 && c != 1 )
- break;
- else if( j == 19 && c == 0 ) {
- old_enc++;
- break;
- }
- }
- if( old_enc ) {
- log_error("old encoding scheme is not supported\n");
- return G10ERR_GENERAL;
- }
-
- if( (rc=check_digest_algo(sig->digest_algo)) )
- return rc; /* unsupported algo */
- asn = md_asn_oid( sig->digest_algo, &asnlen, &mdlen );
-
- for(i=mdlen,j=asnlen-1; (c=mpi_getbyte(result, i)) != -1 && j >= 0;
- i++, j-- )
- if( asn[j] != c )
- break;
- if( j != -1 || mpi_getbyte(result, i) )
- return G10ERR_BAD_PUBKEY; /* ASN is wrong */
- for(i++; (c=mpi_getbyte(result, i)) != -1; i++ )
- if( c != 0xff )
- break;
- i++;
- if( c != sig->digest_algo || mpi_getbyte(result, i) ) {
- /* Padding or leading bytes in signature is wrong */
- return G10ERR_BAD_PUBKEY;
- }
- if( mpi_getbyte(result, mdlen-1) != sig->digest_start[0]
- || mpi_getbyte(result, mdlen-2) != sig->digest_start[1] ) {
- /* Wrong key used to check the signature */
- return G10ERR_BAD_PUBKEY;
- }
-
- dp = md_read( digest, sig->digest_algo );
- for(i=mdlen-1; i >= 0; i--, dp++ ) {
- if( mpi_getbyte( result, i ) != *dp )
- return G10ERR_BAD_SIGN;
- }
- return 0;
- #else
- return -1;
- #endif
-}
-
-static int
-do_check_messages( PKT_public_key *pk, PKT_signature *sig, int *r_expired )
-{
- u32 cur_time;
-
- *r_expired = 0;
- if( pk->version == 4 && pk->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E ) {
- log_info(_("key %08lX: this is a PGP generated "
- "ElGamal key which is NOT secure for signatures!\n"),
- (ulong)keyid_from_pk(pk,NULL));
- return G10ERR_PUBKEY_ALGO;
- }
-
- if( pk->timestamp > sig->timestamp ) {
- ulong d = pk->timestamp - sig->timestamp;
- log_info( d==1
- ? _("public key %08lX is %lu second newer than the signature\n")
- : _("public key %08lX is %lu seconds newer than the signature\n"),
- (ulong)keyid_from_pk(pk,NULL),d );
- if( !opt.ignore_time_conflict )
- return G10ERR_TIME_CONFLICT; /* pubkey newer than signature */
- }
-
- cur_time = make_timestamp();
- if( pk->timestamp > cur_time ) {
- ulong d = pk->timestamp - cur_time;
- log_info( d==1 ? _("key %08lX has been created %lu second "
- "in future (time warp or clock problem)\n")
- : _("key %08lX has been created %lu seconds "
- "in future (time warp or clock problem)\n"),
- (ulong)keyid_from_pk(pk,NULL),d );
- if( !opt.ignore_time_conflict )
- return G10ERR_TIME_CONFLICT;
- }
-
- if( pk->expiredate && pk->expiredate < cur_time ) {
- char buf[11];
- if (opt.verbose) {
- u32 tmp_kid[2];
-
- keyid_from_pk( pk, tmp_kid );
- log_info(_("NOTE: signature key %08lX expired %s\n"),
- (ulong)tmp_kid[1], asctimestamp( pk->expiredate ) );
- }
- /* SIGEXPIRED is deprecated. Use KEYEXPIRED. */
- sprintf(buf,"%lu",(ulong)pk->expiredate);
- write_status_text(STATUS_KEYEXPIRED,buf);
- write_status(STATUS_SIGEXPIRED);
- *r_expired = 1;
- }
-
- return 0;
-}
-
-
-static int
-do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest,
- int *r_expired )
-{
- MPI result = NULL;
- int rc=0;
- struct cmp_help_context_s ctx;
-
- if( (rc=do_check_messages(pk,sig,r_expired)) )
- return rc;
- if( (rc=check_digest_algo(sig->digest_algo)) )
- return rc;
- if( (rc=check_pubkey_algo(sig->pubkey_algo)) )
- return rc;
-
- /* make sure the digest algo is enabled (in case of a detached signature)*/
- md_enable( digest, sig->digest_algo );
-
- /* complete the digest */
- if( sig->version >= 4 )
- md_putc( digest, sig->version );
- md_putc( digest, sig->sig_class );
- if( sig->version < 4 ) {
- u32 a = sig->timestamp;
- md_putc( digest, (a >> 24) & 0xff );
- md_putc( digest, (a >> 16) & 0xff );
- md_putc( digest, (a >> 8) & 0xff );
- md_putc( digest, a & 0xff );
- }
- else {
- byte buf[6];
- size_t n;
- md_putc( digest, sig->pubkey_algo );
- md_putc( digest, sig->digest_algo );
- if( sig->hashed ) {
- n = sig->hashed->len;
- md_putc (digest, (n >> 8) );
- md_putc (digest, n );
- md_write (digest, sig->hashed->data, n);
- n += 6;
- }
- else {
- /* Two octets for the (empty) length of the hashed
- section. */
- md_putc (digest, 0);
- md_putc (digest, 0);
- n = 6;
- }
- /* add some magic */
- buf[0] = sig->version;
- buf[1] = 0xff;
- buf[2] = n >> 24;
- buf[3] = n >> 16;
- buf[4] = n >> 8;
- buf[5] = n;
- md_write( digest, buf, 6 );
- }
- md_final( digest );
-
- result = encode_md_value( pk->pubkey_algo, digest, sig->digest_algo,
- mpi_get_nbits(pk->pkey[0]), 0 );
- if (!result)
- return G10ERR_GENERAL;
- ctx.sig = sig;
- ctx.md = digest;
- rc = pubkey_verify( pk->pubkey_algo, result, sig->data, pk->pkey,
- cmp_help, &ctx );
- mpi_free( result );
- if( (opt.emulate_bugs & EMUBUG_MDENCODE)
- && rc == G10ERR_BAD_SIGN && is_ELGAMAL(pk->pubkey_algo) ) {
- /* In this case we try again because old GnuPG versions didn't encode
- * the hash right. There is no problem with DSA however */
- result = encode_md_value( pk->pubkey_algo, digest, sig->digest_algo,
- mpi_get_nbits(pk->pkey[0]), (sig->version < 5) );
- if (!result)
- rc = G10ERR_GENERAL;
- else {
- ctx.sig = sig;
- ctx.md = digest;
- rc = pubkey_verify( pk->pubkey_algo, result, sig->data, pk->pkey,
- cmp_help, &ctx );
- }
- }
-
- if( !rc && sig->flags.unknown_critical ) {
- log_info(_("assuming bad signature from key %08lX due to an unknown critical bit\n"),(ulong)keyid_from_pk(pk,NULL));
- rc = G10ERR_BAD_SIGN;
- }
-
- return rc;
-}
-
-
-static void
-hash_uid_node( KBNODE unode, MD_HANDLE md, PKT_signature *sig )
-{
- PKT_user_id *uid = unode->pkt->pkt.user_id;
-
- assert( unode->pkt->pkttype == PKT_USER_ID );
- if( uid->attrib_data ) {
- if( sig->version >=4 ) {
- byte buf[5];
- buf[0] = 0xd1; /* packet of type 17 */
- buf[1] = uid->attrib_len >> 24; /* always use 4 length bytes */
- buf[2] = uid->attrib_len >> 16;
- buf[3] = uid->attrib_len >> 8;
- buf[4] = uid->attrib_len;
- md_write( md, buf, 5 );
- }
- md_write( md, uid->attrib_data, uid->attrib_len );
- }
- else {
- if( sig->version >=4 ) {
- byte buf[5];
- buf[0] = 0xb4; /* indicates a userid packet */
- buf[1] = uid->len >> 24; /* always use 4 length bytes */
- buf[2] = uid->len >> 16;
- buf[3] = uid->len >> 8;
- buf[4] = uid->len;
- md_write( md, buf, 5 );
- }
- md_write( md, uid->name, uid->len );
- }
-}
-
-static void
-cache_sig_result ( PKT_signature *sig, int result )
-{
- if ( !result ) {
- sig->flags.checked = 1;
- sig->flags.valid = 1;
- }
- else if ( result == G10ERR_BAD_SIGN ) {
- sig->flags.checked = 1;
- sig->flags.valid = 0;
- }
- else {
- sig->flags.checked = 0;
- sig->flags.valid = 0;
- }
-}
-
-
-/* Check the revocation keys to see if any of them have revoked our
- pk. sig is the revocation sig. pk is the key it is on. This code
- will need to be modified if gpg ever becomes multi-threaded. Note
- that this guarantees that a designated revocation sig will never be
- considered valid unless it is actually valid, as well as being
- issued by a revocation key in a valid direct signature. Note that
- this is written so that a revoked revoker can still issue
- revocations: i.e. If A revokes B, but A is revoked, B is still
- revoked. I'm not completely convinced this is the proper behavior,
- but it matches how PGP does it. -dms */
-
-/* Returns 0 if sig is valid (i.e. pk is revoked), non-0 if not
- revoked */
-int
-check_revocation_keys(PKT_public_key *pk,PKT_signature *sig)
-{
- static int busy=0;
- int i,rc=G10ERR_GENERAL;
-
- assert(IS_KEY_REV(sig));
- assert((sig->keyid[0]!=pk->keyid[0]) || (sig->keyid[0]!=pk->keyid[1]));
-
- if(busy)
- {
- /* return -1 (i.e. not revoked), but mark the pk as uncacheable
- as we don't really know its revocation status until it is
- checked directly. */
-
- pk->dont_cache=1;
- return rc;
- }
-
- busy=1;
-
- /* printf("looking at %08lX with a sig from %08lX\n",(ulong)pk->keyid[1],
- (ulong)sig->keyid[1]); */
-
- /* is the issuer of the sig one of our revokers? */
- if( !pk->revkey && pk->numrevkeys )
- BUG();
- else
- for(i=0;i<pk->numrevkeys;i++)
- {
- u32 keyid[2];
-
- keyid_from_fingerprint(pk->revkey[i].fpr,MAX_FINGERPRINT_LEN,keyid);
-
- if(keyid[0]==sig->keyid[0] && keyid[1]==sig->keyid[1])
- {
- MD_HANDLE md;
-
- md=md_open(sig->digest_algo,0);
- hash_public_key(md,pk);
- rc=signature_check(sig,md);
- cache_sig_result(sig,rc);
- break;
- }
- }
-
- busy=0;
-
- return rc;
-}
-
-/****************
- * check the signature pointed to by NODE. This is a key signature.
- * If the function detects a self-signature, it uses the PK from
- * ROOT and does not read any public key.
- */
-int
-check_key_signature( KBNODE root, KBNODE node, int *is_selfsig )
-{
- u32 dummy;
- int dum2;
- return check_key_signature2(root, node, is_selfsig, &dummy, &dum2 );
-}
-
-int
-check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig,
- u32 *r_expiredate, int *r_expired )
-{
- MD_HANDLE md;
- PKT_public_key *pk;
- PKT_signature *sig;
- int algo;
- int rc;
-
- if( is_selfsig )
- *is_selfsig = 0;
- *r_expiredate = 0;
- *r_expired = 0;
- assert( node->pkt->pkttype == PKT_SIGNATURE );
- assert( root->pkt->pkttype == PKT_PUBLIC_KEY );
-
- pk = root->pkt->pkt.public_key;
- sig = node->pkt->pkt.signature;
- algo = sig->digest_algo;
-
- /* check whether we have cached the result of a previous signature check.*/
- if ( !opt.no_sig_cache ) {
- if (sig->flags.checked) { /*cached status available*/
- if( is_selfsig ) {
- u32 keyid[2];
-
- keyid_from_pk( pk, keyid );
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
- *is_selfsig = 1;
- }
- if((rc=do_check_messages(pk,sig,r_expired)))
- return rc;
- return sig->flags.valid? 0 : G10ERR_BAD_SIGN;
- }
- }
-
- if( (rc=check_digest_algo(algo)) )
- return rc;
-
- if( sig->sig_class == 0x20 ) { /* key revocation */
- u32 keyid[2];
- keyid_from_pk( pk, keyid );
-
- /* is it a designated revoker? */
- if(keyid[0]!=sig->keyid[0] || keyid[1]!=sig->keyid[1])
- rc=check_revocation_keys(pk,sig);
- else
- {
- md = md_open( algo, 0 );
- hash_public_key( md, pk );
- rc = do_check( pk, sig, md, r_expired );
- cache_sig_result ( sig, rc );
- md_close(md);
- }
- }
- else if( sig->sig_class == 0x28 ) { /* subkey revocation */
- KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY );
-
- if( snode ) {
- md = md_open( algo, 0 );
- hash_public_key( md, pk );
- hash_public_key( md, snode->pkt->pkt.public_key );
- rc = do_check( pk, sig, md, r_expired );
- cache_sig_result ( sig, rc );
- md_close(md);
- }
- else {
- if (!opt.quiet)
- log_info (_("key %08lX: no subkey for subkey "
- "revocation signature\n"),
- (ulong)keyid_from_pk (pk, NULL));
- rc = G10ERR_SIG_CLASS;
- }
- }
- else if( sig->sig_class == 0x18 ) { /* key binding */
- KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY );
-
- if( snode ) {
- if( is_selfsig ) { /* does this make sense????? */
- u32 keyid[2]; /* it should always be a selfsig */
-
- keyid_from_pk( pk, keyid );
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
- *is_selfsig = 1;
- }
- md = md_open( algo, 0 );
- hash_public_key( md, pk );
- hash_public_key( md, snode->pkt->pkt.public_key );
- rc = do_check( pk, sig, md, r_expired );
- cache_sig_result ( sig, rc );
- md_close(md);
- }
- else {
- if (!opt.quiet)
- log_info ("key %08lX: no subkey for subkey "
- "binding signature\n",(ulong)keyid_from_pk(pk,NULL));
- rc = G10ERR_SIG_CLASS;
- }
- }
- else if( sig->sig_class == 0x1f ) { /* direct key signature */
- md = md_open( algo, 0 );
- hash_public_key( md, pk );
- rc = do_check( pk, sig, md, r_expired );
- cache_sig_result ( sig, rc );
- md_close(md);
- }
- else { /* all other classes */
- KBNODE unode = find_prev_kbnode( root, node, PKT_USER_ID );
-
- if( unode ) {
- u32 keyid[2];
-
- keyid_from_pk( pk, keyid );
- md = md_open( algo, 0 );
- hash_public_key( md, pk );
- hash_uid_node( unode, md, sig );
- if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) {
- if( is_selfsig )
- *is_selfsig = 1;
- rc = do_check( pk, sig, md, r_expired );
- }
- else {
- rc = signature_check2( sig, md, r_expiredate, r_expired );
- }
- cache_sig_result ( sig, rc );
- md_close(md);
- }
- else {
- if (!opt.quiet)
- log_info ("key %08lX: no user ID for key signature packet "
- "of class %02x\n",
- (ulong)keyid_from_pk (pk, NULL), sig->sig_class );
- rc = G10ERR_SIG_CLASS;
- }
- }
-
- return rc;
-}
diff --git a/g10/sign.c b/g10/sign.c
deleted file mode 100644
index fe242b8da..000000000
--- a/g10/sign.c
+++ /dev/null
@@ -1,1300 +0,0 @@
-/* sign.c - sign data
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <unistd.h> /* need sleep() */
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "filter.h"
-#include "ttyio.h"
-#include "trustdb.h"
-#include "status.h"
-#include "i18n.h"
-
-
-#ifdef HAVE_DOSISH_SYSTEM
- #define LF "\r\n"
- void __stdcall Sleep(ulong);
- #define sleep(a) Sleep((a)*1000)
-#else
- #define LF "\n"
-#endif
-
-static int recipient_digest_algo=0;
-
-/****************
- * Create a notation. It is assumed that the stings in STRLIST
- * are already checked to contain only printable data and have a valid
- * NAME=VALUE format.
- */
-static void
-mk_notation_and_policy( PKT_signature *sig,
- PKT_public_key *pk, PKT_secret_key *sk )
-{
- const char *string;
- char *s=NULL;
- byte *buf;
- unsigned n1, n2;
- STRLIST nd=NULL,pu=NULL;
- struct expando_args args;
-
- memset(&args,0,sizeof(args));
- args.pk=pk;
- args.sk=sk;
-
- /* notation data */
- if(IS_SIG(sig) && opt.sig_notation_data)
- {
- if(sig->version<4)
- log_info("can't put notation data into v3 signatures\n");
- else
- nd=opt.sig_notation_data;
- }
- else if( IS_CERT(sig) && opt.cert_notation_data )
- {
- if(sig->version<4)
- log_info("can't put notation data into v3 key signatures\n");
- else
- nd=opt.cert_notation_data;
- }
-
- for( ; nd; nd = nd->next ) {
- char *expanded;
-
- string = nd->d;
- s = strchr( string, '=' );
- if( !s )
- BUG(); /* we have already parsed this */
- n1 = s - string;
- s++;
-
- expanded=pct_expando(s,&args);
- if(!expanded)
- {
- log_error(_("WARNING: unable to %%-expand notation "
- "(too large). Using unexpanded.\n"));
- expanded=m_strdup(s);
- }
-
- n2 = strlen(expanded);
- buf = m_alloc( 8 + n1 + n2 );
- buf[0] = 0x80; /* human readable */
- buf[1] = buf[2] = buf[3] = 0;
- buf[4] = n1 >> 8;
- buf[5] = n1;
- buf[6] = n2 >> 8;
- buf[7] = n2;
- memcpy(buf+8, string, n1 );
- memcpy(buf+8+n1, expanded, n2 );
- build_sig_subpkt( sig, SIGSUBPKT_NOTATION
- | ((nd->flags & 1)? SIGSUBPKT_FLAG_CRITICAL:0),
- buf, 8+n1+n2 );
- m_free(expanded);
- m_free(buf);
- }
-
- if(opt.show_notation)
- show_notation(sig,0);
-
- /* set policy URL */
- if( IS_SIG(sig) && opt.sig_policy_url )
- {
- if(sig->version<4)
- log_info("can't put a policy URL into v3 signatures\n");
- else
- pu=opt.sig_policy_url;
- }
- else if( IS_CERT(sig) && opt.cert_policy_url )
- {
- if(sig->version<4)
- log_info("can't put a policy URL into v3 key signatures\n");
- else
- pu=opt.cert_policy_url;
- }
-
- for(;pu;pu=pu->next)
- {
- string = pu->d;
-
- s=pct_expando(string,&args);
- if(!s)
- {
- log_error(_("WARNING: unable to %%-expand policy url "
- "(too large). Using unexpanded.\n"));
- s=m_strdup(string);
- }
-
- build_sig_subpkt(sig,SIGSUBPKT_POLICY|
- ((pu->flags & 1)?SIGSUBPKT_FLAG_CRITICAL:0),
- s,strlen(s));
-
- m_free(s);
- }
-
- if(opt.show_policy_url)
- show_policy_url(sig,0);
-}
-
-
-/*
- * Helper to hash a user ID packet.
- */
-static void
-hash_uid (MD_HANDLE md, int sigversion, const PKT_user_id *uid)
-{
- if ( sigversion >= 4 ) {
- byte buf[5];
-
- if(uid->attrib_data) {
- buf[0] = 0xd1; /* indicates an attribute packet */
- buf[1] = uid->attrib_len >> 24; /* always use 4 length bytes */
- buf[2] = uid->attrib_len >> 16;
- buf[3] = uid->attrib_len >> 8;
- buf[4] = uid->attrib_len;
- }
- else {
- buf[0] = 0xb4; /* indicates a userid packet */
- buf[1] = uid->len >> 24; /* always use 4 length bytes */
- buf[2] = uid->len >> 16;
- buf[3] = uid->len >> 8;
- buf[4] = uid->len;
- }
- md_write( md, buf, 5 );
- }
-
- if(uid->attrib_data)
- md_write (md, uid->attrib_data, uid->attrib_len );
- else
- md_write (md, uid->name, uid->len );
-}
-
-
-/*
- * Helper to hash some parts from the signature
- */
-static void
-hash_sigversion_to_magic (MD_HANDLE md, const PKT_signature *sig)
-{
- if (sig->version >= 4)
- md_putc (md, sig->version);
- md_putc (md, sig->sig_class);
- if (sig->version < 4) {
- u32 a = sig->timestamp;
- md_putc (md, (a >> 24) & 0xff );
- md_putc (md, (a >> 16) & 0xff );
- md_putc (md, (a >> 8) & 0xff );
- md_putc (md, a & 0xff );
- }
- else {
- byte buf[6];
- size_t n;
-
- md_putc (md, sig->pubkey_algo);
- md_putc (md, sig->digest_algo);
- if (sig->hashed) {
- n = sig->hashed->len;
- md_putc (md, (n >> 8) );
- md_putc (md, n );
- md_write (md, sig->hashed->data, n );
- n += 6;
- }
- else {
- md_putc (md, 0); /* always hash the length of the subpacket*/
- md_putc (md, 0);
- n = 6;
- }
- /* add some magic */
- buf[0] = sig->version;
- buf[1] = 0xff;
- buf[2] = n >> 24; /* hmmm, n is only 16 bit, so this is always 0 */
- buf[3] = n >> 16;
- buf[4] = n >> 8;
- buf[5] = n;
- md_write (md, buf, 6);
- }
-}
-
-
-static int
-do_sign( PKT_secret_key *sk, PKT_signature *sig,
- MD_HANDLE md, int digest_algo )
-{
- MPI frame;
- byte *dp;
- int rc;
-
- if( sk->timestamp > sig->timestamp ) {
- ulong d = sk->timestamp - sig->timestamp;
- log_info( d==1 ? _("key has been created %lu second "
- "in future (time warp or clock problem)\n")
- : _("key has been created %lu seconds "
- "in future (time warp or clock problem)\n"), d );
- if( !opt.ignore_time_conflict )
- return G10ERR_TIME_CONFLICT;
- }
-
-
- print_pubkey_algo_note(sk->pubkey_algo);
-
- if( !digest_algo )
- digest_algo = md_get_algo(md);
-
- print_digest_algo_note( digest_algo );
- dp = md_read( md, digest_algo );
- sig->digest_algo = digest_algo;
- sig->digest_start[0] = dp[0];
- sig->digest_start[1] = dp[1];
- frame = encode_md_value( sk->pubkey_algo, md,
- digest_algo, mpi_get_nbits(sk->skey[0]), 0 );
- if (!frame)
- return G10ERR_GENERAL;
- rc = pubkey_sign( sk->pubkey_algo, sig->data, frame, sk->skey );
- mpi_free(frame);
- if (!rc && !opt.no_sig_create_check) {
- /* check that the signature verification worked and nothing is
- * fooling us e.g. by a bug in the signature create
- * code or by deliberately introduced faults. */
- PKT_public_key *pk = m_alloc_clear (sizeof *pk);
-
- if( get_pubkey( pk, sig->keyid ) )
- rc = G10ERR_NO_PUBKEY;
- else {
- frame = encode_md_value (pk->pubkey_algo, md,
- sig->digest_algo,
- mpi_get_nbits(pk->pkey[0]), 0);
- if (!frame)
- rc = G10ERR_GENERAL;
- else
- rc = pubkey_verify (pk->pubkey_algo, frame,
- sig->data, pk->pkey,
- NULL, NULL );
- mpi_free (frame);
- }
- if (rc)
- log_error (_("checking created signature failed: %s\n"),
- g10_errstr (rc));
- free_public_key (pk);
- }
- if( rc )
- log_error(_("signing failed: %s\n"), g10_errstr(rc) );
- else {
- if( opt.verbose ) {
- char *ustr = get_user_id_string_printable (sig->keyid);
- log_info(_("%s signature from: \"%s\"\n"),
- pubkey_algo_to_string(sk->pubkey_algo), ustr );
- m_free(ustr);
- }
- }
- return rc;
-}
-
-
-
-int
-complete_sig( PKT_signature *sig, PKT_secret_key *sk, MD_HANDLE md )
-{
- int rc=0;
-
- if( !(rc=check_secret_key( sk, 0 )) )
- rc = do_sign( sk, sig, md, 0 );
- return rc;
-}
-
-static int
-hash_for(int pubkey_algo, int packet_version )
-{
- if( opt.def_digest_algo )
- return opt.def_digest_algo;
- if( recipient_digest_algo )
- return recipient_digest_algo;
- if( pubkey_algo == PUBKEY_ALGO_DSA )
- return DIGEST_ALGO_SHA1;
- if( pubkey_algo == PUBKEY_ALGO_RSA && packet_version < 4 )
- return DIGEST_ALGO_MD5;
- return DEFAULT_DIGEST_ALGO;
-}
-
-static int
-only_old_style( SK_LIST sk_list )
-{
- SK_LIST sk_rover = NULL;
- int old_style = 0;
-
- /* if there are only old style capable key we use the old sytle */
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- PKT_secret_key *sk = sk_rover->sk;
- if( sk->pubkey_algo == PUBKEY_ALGO_RSA && sk->version < 4 )
- old_style = 1;
- else
- return 0;
- }
- return old_style;
-}
-
-
-static void
-print_status_sig_created ( PKT_secret_key *sk, PKT_signature *sig, int what )
-{
- byte array[MAX_FINGERPRINT_LEN], *p;
- char buf[100+MAX_FINGERPRINT_LEN*2];
- size_t i, n;
-
- sprintf(buf, "%c %d %d %02x %lu ",
- what, sig->pubkey_algo, sig->digest_algo, sig->sig_class,
- (ulong)sig->timestamp );
-
- fingerprint_from_sk( sk, array, &n );
- p = buf + strlen(buf);
- for(i=0; i < n ; i++ )
- sprintf(p+2*i, "%02X", array[i] );
-
- write_status_text( STATUS_SIG_CREATED, buf );
-}
-
-
-/*
- * Loop over the secret certificates in SK_LIST and build the one pass
- * signature packets. OpenPGP says that the data should be bracket by
- * the onepass-sig and signature-packet; so we build these onepass
- * packet here in reverse order
- */
-static int
-write_onepass_sig_packets (SK_LIST sk_list, IOBUF out, int sigclass )
-{
- int skcount;
- SK_LIST sk_rover;
-
- for (skcount=0, sk_rover=sk_list; sk_rover; sk_rover = sk_rover->next)
- skcount++;
-
- for (; skcount; skcount--) {
- PKT_secret_key *sk;
- PKT_onepass_sig *ops;
- PACKET pkt;
- int i, rc;
-
- for (i=0, sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- if (++i == skcount)
- break;
- }
-
- sk = sk_rover->sk;
- ops = m_alloc_clear (sizeof *ops);
- ops->sig_class = sigclass;
- ops->digest_algo = hash_for (sk->pubkey_algo, sk->version);
- ops->pubkey_algo = sk->pubkey_algo;
- keyid_from_sk (sk, ops->keyid);
- ops->last = (skcount == 1);
-
- init_packet(&pkt);
- pkt.pkttype = PKT_ONEPASS_SIG;
- pkt.pkt.onepass_sig = ops;
- rc = build_packet (out, &pkt);
- free_packet (&pkt);
- if (rc) {
- log_error ("build onepass_sig packet failed: %s\n",
- g10_errstr(rc));
- return rc;
- }
- }
-
- return 0;
-}
-
-/*
- * Helper to write the plaintext (literal data) packet
- */
-static int
-write_plaintext_packet (IOBUF out, IOBUF inp, const char *fname, int ptmode)
-{
- PKT_plaintext *pt = NULL;
- u32 filesize;
- int rc = 0;
-
- if (!opt.no_literal) {
- if (fname || opt.set_filename) {
- char *s = make_basename (opt.set_filename? opt.set_filename
- : fname);
- pt = m_alloc (sizeof *pt + strlen(s) - 1);
- pt->namelen = strlen (s);
- memcpy (pt->name, s, pt->namelen);
- m_free (s);
- }
- else { /* no filename */
- pt = m_alloc (sizeof *pt - 1);
- pt->namelen = 0;
- }
- }
-
- /* try to calculate the length of the data */
- if (fname) {
- if( !(filesize = iobuf_get_filelength(inp)) )
- log_info (_("WARNING: `%s' is an empty file\n"), fname);
-
- /* we can't yet encode the length of very large files,
- * so we switch to partial length encoding in this case */
- if (filesize >= IOBUF_FILELENGTH_LIMIT)
- filesize = 0;
-
- /* because the text_filter modifies the length of the
- * data, it is not possible to know the used length
- * without a double read of the file - to avoid that
- * we simple use partial length packets.
- */
- if ( ptmode == 't' )
- filesize = 0;
- }
- else {
- filesize = opt.set_filesize? opt.set_filesize : 0; /* stdin */
- }
-
- if (!opt.no_literal) {
- PACKET pkt;
-
- pt->timestamp = make_timestamp ();
- pt->mode = ptmode;
- pt->len = filesize;
- pt->new_ctb = !pt->len && !opt.rfc1991;
- pt->buf = inp;
- init_packet(&pkt);
- pkt.pkttype = PKT_PLAINTEXT;
- pkt.pkt.plaintext = pt;
- /*cfx.datalen = filesize? calc_packet_length( &pkt ) : 0;*/
- if( (rc = build_packet (out, &pkt)) )
- log_error ("build_packet(PLAINTEXT) failed: %s\n",
- g10_errstr(rc) );
- pt->buf = NULL;
- }
- else {
- byte copy_buffer[4096];
- int bytes_copied;
-
- while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1)
- if (iobuf_write(out, copy_buffer, bytes_copied) == -1) {
- rc = G10ERR_WRITE_FILE;
- log_error ("copying input to output failed: %s\n",
- g10_errstr(rc));
- break;
- }
- memset(copy_buffer, 0, 4096); /* burn buffer */
- }
- /* fixme: it seems that we never freed pt/pkt */
-
- return rc;
-}
-
-/*
- * Write the signatures from the SK_LIST to OUT. HASH must be a non-finalized
- * hash which will not be changes here.
- */
-static int
-write_signature_packets (SK_LIST sk_list, IOBUF out, MD_HANDLE hash,
- int sigclass, u32 timestamp, u32 duration,
- int status_letter)
-{
- SK_LIST sk_rover;
-
- /* loop over the secret certificates */
- for (sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next) {
- PKT_secret_key *sk;
- PKT_signature *sig;
- MD_HANDLE md;
- int rc;
-
- sk = sk_rover->sk;
-
- /* build the signature packet */
- sig = m_alloc_clear (sizeof *sig);
- if(opt.force_v3_sigs || opt.rfc1991)
- sig->version=3;
- else if(duration || opt.sig_policy_url || opt.sig_notation_data)
- sig->version=4;
- else
- sig->version=sk->version;
- keyid_from_sk (sk, sig->keyid);
- sig->digest_algo = hash_for (sk->pubkey_algo, sk->version);
- sig->pubkey_algo = sk->pubkey_algo;
- if(timestamp)
- sig->timestamp = timestamp;
- else
- sig->timestamp = make_timestamp();
- if(duration)
- sig->expiredate = sig->timestamp+duration;
- sig->sig_class = sigclass;
-
- md = md_copy (hash);
-
- if (sig->version >= 4)
- build_sig_subpkt_from_sig (sig);
- mk_notation_and_policy (sig, NULL, sk);
-
- hash_sigversion_to_magic (md, sig);
- md_final (md);
-
- rc = do_sign( sk, sig, md, hash_for (sig->pubkey_algo, sk->version) );
- md_close (md);
-
- if( !rc ) { /* and write it */
- PACKET pkt;
-
- init_packet(&pkt);
- pkt.pkttype = PKT_SIGNATURE;
- pkt.pkt.signature = sig;
- rc = build_packet (out, &pkt);
- if (!rc && is_status_enabled()) {
- print_status_sig_created ( sk, sig, status_letter);
- }
- free_packet (&pkt);
- if (rc)
- log_error ("build signature packet failed: %s\n",
- g10_errstr(rc) );
- }
- if( rc )
- return rc;;
- }
-
- return 0;
-}
-
-/****************
- * Sign the files whose names are in FILENAME.
- * If DETACHED has the value true,
- * make a detached signature. If FILENAMES->d is NULL read from stdin
- * and ignore the detached mode. Sign the file with all secret keys
- * which can be taken from LOCUSR, if this is NULL, use the default one
- * If ENCRYPTFLAG is true, use REMUSER (or ask if it is NULL) to encrypt the
- * signed data for these users.
- * If OUTFILE is not NULL; this file is used for output and the function
- * does not ask for overwrite permission; output is then always
- * uncompressed, non-armored and in binary mode.
- */
-int
-sign_file( STRLIST filenames, int detached, STRLIST locusr,
- int encryptflag, STRLIST remusr, const char *outfile )
-{
- const char *fname;
- armor_filter_context_t afx;
- compress_filter_context_t zfx;
- md_filter_context_t mfx;
- text_filter_context_t tfx;
- encrypt_filter_context_t efx;
- IOBUF inp = NULL, out = NULL;
- PACKET pkt;
- int rc = 0;
- PK_LIST pk_list = NULL;
- SK_LIST sk_list = NULL;
- SK_LIST sk_rover = NULL;
- int multifile = 0;
- u32 timestamp=0,duration=0;
-
- memset( &afx, 0, sizeof afx);
- memset( &zfx, 0, sizeof zfx);
- memset( &mfx, 0, sizeof mfx);
- memset( &tfx, 0, sizeof tfx);
- memset( &efx, 0, sizeof efx);
- init_packet( &pkt );
-
- if( filenames ) {
- fname = filenames->d;
- multifile = !!filenames->next;
- }
- else
- fname = NULL;
-
- if( fname && filenames->next && (!detached || encryptflag) )
- log_bug("multiple files can only be detached signed");
-
- if(opt.ask_sig_expire && !opt.force_v3_sigs && !opt.batch && !opt.rfc1991)
- duration=ask_expire_interval(1);
-
- if( (rc=build_sk_list( locusr, &sk_list, 1, PUBKEY_USAGE_SIG )) )
- goto leave;
-
- if(opt.pgp2 && !only_old_style(sk_list))
- {
- log_info(_("you can only detach-sign with PGP 2.x style keys "
- "while in --pgp2 mode\n"));
- log_info(_("this message may not be usable by %s\n"),"PGP 2.x");
- opt.pgp2=0;
- }
-
- if(encryptflag && (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC )))
- goto leave;
-
- /* prepare iobufs */
- if( multifile ) /* have list of filenames */
- inp = NULL; /* we do it later */
- else if( !(inp = iobuf_open(fname)) ) {
- log_error("can't open %s: %s\n", fname? fname: "[stdin]",
- strerror(errno) );
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
-
- if( outfile ) {
- if( !(out = iobuf_create( outfile )) ) {
- log_error(_("can't create %s: %s\n"), outfile, strerror(errno) );
- rc = G10ERR_CREATE_FILE;
- goto leave;
- }
- else if( opt.verbose )
- log_info(_("writing to `%s'\n"), outfile );
- }
- else if( (rc = open_outfile( fname, opt.armor? 1: detached? 2:0, &out )))
- goto leave;
-
- /* prepare to calculate the MD over the input */
- if( opt.textmode && !outfile )
- iobuf_push_filter( inp, text_filter, &tfx );
- mfx.md = md_open(0, 0);
-
- /* If we're encrypting and signing, it is reasonable to pick the
- hash algorithm to use out of the recepient key prefs. */
- if(pk_list)
- {
- if(opt.def_digest_algo)
- {
- if(!opt.expert &&
- select_algo_from_prefs(pk_list,PREFTYPE_HASH,
- opt.def_digest_algo,
- NULL)!=opt.def_digest_algo)
- log_info(_("forcing digest algorithm %s (%d) "
- "violates recipient preferences\n"),
- digest_algo_to_string(opt.def_digest_algo),
- opt.def_digest_algo);
- }
- else
- {
- int hashlen=0,algo;
-
- /* Of course, if the recipient asks for something
- unreasonable (like a non-160-bit hash for DSA, for
- example), then don't do it. Check all sk's - if any
- are DSA, then the hash must be 160-bit. In the future
- this can be more complex with different hashes for each
- sk, but so long as there is only one signing algorithm
- with hash restrictions, this is ok. -dms */
-
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next )
- if(sk_rover->sk->pubkey_algo==PUBKEY_ALGO_DSA)
- hashlen=20;
-
- if((algo=
- select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,&hashlen))>0)
- recipient_digest_algo=algo;
- }
- }
-
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- PKT_secret_key *sk = sk_rover->sk;
- md_enable(mfx.md, hash_for(sk->pubkey_algo, sk->version ));
- }
-
- if( !multifile )
- iobuf_push_filter( inp, md_filter, &mfx );
-
- if( detached && !encryptflag && !opt.rfc1991 )
- afx.what = 2;
-
- if( opt.armor && !outfile )
- iobuf_push_filter( out, armor_filter, &afx );
-
- if( encryptflag ) {
- efx.pk_list = pk_list;
- /* fixme: set efx.cfx.datalen if known */
- iobuf_push_filter( out, encrypt_filter, &efx );
- }
-
- if( opt.compress && !outfile && ( !detached || opt.compress_sigs) )
- {
- int compr_algo=opt.def_compress_algo;
-
- /* If not forced by user */
- if(compr_algo==-1)
- {
- /* If we're not encrypting, then select_algo_from_prefs
- will fail and we'll end up with the default. If we are
- encrypting, select_algo_from_prefs cannot fail since
- there is an assumed preference for uncompressed data.
- Still, if it did fail, we'll also end up with the
- default. */
-
- if((compr_algo=
- select_algo_from_prefs(pk_list,PREFTYPE_ZIP,-1,NULL))==-1)
- compr_algo=DEFAULT_COMPRESS_ALGO;
- }
- else if(!opt.expert &&
- select_algo_from_prefs(pk_list,PREFTYPE_ZIP,
- compr_algo,NULL)!=compr_algo)
- log_info(_("forcing compression algorithm %s (%d) "
- "violates recipient preferences\n"),
- compress_algo_to_string(compr_algo),compr_algo);
-
- /* algo 0 means no compression */
- if( compr_algo )
- {
- zfx.algo = compr_algo;
- iobuf_push_filter( out, compress_filter, &zfx );
- }
- }
-
- /* Write the one-pass signature packets if needed */
- if (!detached && !opt.rfc1991) {
- rc = write_onepass_sig_packets (sk_list, out,
- opt.textmode && !outfile ? 0x01:0x00);
- if (rc)
- goto leave;
- }
-
- /* setup the inner packet */
- if( detached ) {
- if( multifile ) {
- STRLIST sl;
-
- if( opt.verbose )
- log_info(_("signing:") );
- /* must walk reverse trough this list */
- for( sl = strlist_last(filenames); sl;
- sl = strlist_prev( filenames, sl ) ) {
- if( !(inp = iobuf_open(sl->d)) ) {
- log_error(_("can't open %s: %s\n"),
- sl->d, strerror(errno) );
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
- if( opt.verbose )
- fprintf(stderr, " `%s'", sl->d );
- iobuf_push_filter( inp, md_filter, &mfx );
- while( iobuf_get(inp) != -1 )
- ;
- iobuf_close(inp); inp = NULL;
- }
- if( opt.verbose )
- putc( '\n', stderr );
- }
- else {
- /* read, so that the filter can calculate the digest */
- while( iobuf_get(inp) != -1 )
- ;
- }
- }
- else {
- rc = write_plaintext_packet (out, inp, fname,
- opt.textmode && !outfile ? 't':'b');
- }
-
- /* catch errors from above */
- if (rc)
- goto leave;
-
- /* write the signatures */
- rc = write_signature_packets (sk_list, out, mfx.md,
- opt.textmode && !outfile? 0x01 : 0x00,
- timestamp, duration, detached ? 'D':'S');
- if( rc )
- goto leave;
-
-
- leave:
- if( rc )
- iobuf_cancel(out);
- else {
- iobuf_close(out);
- if (encryptflag)
- write_status( STATUS_END_ENCRYPTION );
- }
- iobuf_close(inp);
- md_close( mfx.md );
- release_sk_list( sk_list );
- release_pk_list( pk_list );
- recipient_digest_algo=0;
- return rc;
-}
-
-
-
-/****************
- * make a clear signature. note that opt.armor is not needed
- */
-int
-clearsign_file( const char *fname, STRLIST locusr, const char *outfile )
-{
- armor_filter_context_t afx;
- MD_HANDLE textmd = NULL;
- IOBUF inp = NULL, out = NULL;
- PACKET pkt;
- int rc = 0;
- SK_LIST sk_list = NULL;
- SK_LIST sk_rover = NULL;
- int old_style = opt.rfc1991;
- int only_md5 = 0;
- u32 timestamp=0,duration=0;
-
- memset( &afx, 0, sizeof afx);
- init_packet( &pkt );
-
- if(opt.ask_sig_expire && !opt.force_v3_sigs && !opt.batch && !opt.rfc1991)
- duration=ask_expire_interval(1);
-
- if( (rc=build_sk_list( locusr, &sk_list, 1, PUBKEY_USAGE_SIG )) )
- goto leave;
-
- if( !old_style && !duration )
- old_style = only_old_style( sk_list );
-
- if(!old_style && opt.pgp2)
- {
- log_info(_("you can only clearsign with PGP 2.x style keys "
- "while in --pgp2 mode\n"));
- log_info(_("this message may not be usable by %s\n"),"PGP 2.x");
- opt.pgp2=0;
- }
-
- /* prepare iobufs */
- if( !(inp = iobuf_open(fname)) ) {
- log_error("can't open %s: %s\n", fname? fname: "[stdin]",
- strerror(errno) );
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
-
- if( outfile ) {
- if( !(out = iobuf_create( outfile )) ) {
- log_error(_("can't create %s: %s\n"), outfile, strerror(errno) );
- rc = G10ERR_CREATE_FILE;
- goto leave;
- }
- else if( opt.verbose )
- log_info(_("writing to `%s'\n"), outfile );
- }
- else if( (rc = open_outfile( fname, 1, &out )) )
- goto leave;
-
- iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----" LF );
-
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- PKT_secret_key *sk = sk_rover->sk;
- if( hash_for(sk->pubkey_algo, sk->version) == DIGEST_ALGO_MD5 )
- only_md5 = 1;
- else {
- only_md5 = 0;
- break;
- }
- }
-
- if( !(old_style && only_md5) ) {
- const char *s;
- int any = 0;
- byte hashs_seen[256];
-
- memset( hashs_seen, 0, sizeof hashs_seen );
- iobuf_writestr(out, "Hash: " );
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- PKT_secret_key *sk = sk_rover->sk;
- int i = hash_for(sk->pubkey_algo, sk->version);
-
- if( !hashs_seen[ i & 0xff ] ) {
- s = digest_algo_to_string( i );
- if( s ) {
- hashs_seen[ i & 0xff ] = 1;
- if( any )
- iobuf_put(out, ',' );
- iobuf_writestr(out, s );
- any = 1;
- }
- }
- }
- assert(any);
- iobuf_writestr(out, LF );
- }
-
- if( opt.not_dash_escaped )
- iobuf_writestr( out,
- "NotDashEscaped: You need GnuPG to verify this message" LF );
- iobuf_writestr(out, LF );
-
- textmd = md_open(0, 0);
- for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
- PKT_secret_key *sk = sk_rover->sk;
- md_enable(textmd, hash_for(sk->pubkey_algo, sk->version));
- }
- if ( DBG_HASHING )
- md_start_debug( textmd, "clearsign" );
- copy_clearsig_text( out, inp, textmd,
- !opt.not_dash_escaped, opt.escape_from, old_style );
- /* fixme: check for read errors */
-
- /* now write the armor */
- afx.what = 2;
- iobuf_push_filter( out, armor_filter, &afx );
-
- /* write the signatures */
- rc = write_signature_packets (sk_list, out, textmd, 0x01,
- timestamp, duration, 'C');
- if( rc )
- goto leave;
-
- leave:
- if( rc )
- iobuf_cancel(out);
- else
- iobuf_close(out);
- iobuf_close(inp);
- md_close( textmd );
- release_sk_list( sk_list );
- return rc;
-}
-
-/*
- * Sign and conventionally encrypt the given file.
- * FIXME: Far too much code is duplicated - revamp the whole file.
- */
-int
-sign_symencrypt_file (const char *fname, STRLIST locusr)
-{
- armor_filter_context_t afx;
- compress_filter_context_t zfx;
- md_filter_context_t mfx;
- text_filter_context_t tfx;
- cipher_filter_context_t cfx;
- IOBUF inp = NULL, out = NULL;
- PACKET pkt;
- STRING2KEY *s2k = NULL;
- int rc = 0;
- SK_LIST sk_list = NULL;
- SK_LIST sk_rover = NULL;
- int algo;
- u32 timestamp=0,duration=0;
-
- memset( &afx, 0, sizeof afx);
- memset( &zfx, 0, sizeof zfx);
- memset( &mfx, 0, sizeof mfx);
- memset( &tfx, 0, sizeof tfx);
- memset( &cfx, 0, sizeof cfx);
- init_packet( &pkt );
-
- if(opt.ask_sig_expire && !opt.force_v3_sigs && !opt.batch && !opt.rfc1991)
- duration=ask_expire_interval(1);
-
- rc = build_sk_list (locusr, &sk_list, 1, PUBKEY_USAGE_SIG);
- if (rc)
- goto leave;
-
- /* prepare iobufs */
- inp = iobuf_open(fname);
- if( !inp ) {
- log_error("can't open %s: %s\n", fname? fname: "[stdin]",
- strerror(errno) );
- rc = G10ERR_OPEN_FILE;
- goto leave;
- }
-
- /* prepare key */
- s2k = m_alloc_clear( sizeof *s2k );
- s2k->mode = opt.rfc1991? 0:opt.s2k_mode;
- s2k->hash_algo = opt.def_digest_algo ? opt.def_digest_algo
- : opt.s2k_digest_algo;
-
- algo = opt.def_cipher_algo ? opt.def_cipher_algo : opt.s2k_cipher_algo;
- if (!opt.quiet || !opt.batch)
- log_info (_("%s encryption will be used\n"),
- cipher_algo_to_string(algo) );
- cfx.dek = passphrase_to_dek( NULL, 0, algo, s2k, 2, NULL );
-
- if (!cfx.dek || !cfx.dek->keylen) {
- rc = G10ERR_PASSPHRASE;
- log_error(_("error creating passphrase: %s\n"), g10_errstr(rc) );
- goto leave;
- }
-
- /* now create the outfile */
- rc = open_outfile (fname, opt.armor? 1:0, &out);
- if (rc)
- goto leave;
-
- /* prepare to calculate the MD over the input */
- if (opt.textmode)
- iobuf_push_filter (inp, text_filter, &tfx);
- mfx.md = md_open(0, 0);
-
- for (sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next) {
- PKT_secret_key *sk = sk_rover->sk;
- md_enable (mfx.md, hash_for (sk->pubkey_algo, sk->version ));
- }
-
- iobuf_push_filter (inp, md_filter, &mfx);
-
- /* Push armor output filter */
- if (opt.armor)
- iobuf_push_filter (out, armor_filter, &afx);
-
- /* Write the symmetric key packet */
- /*(current filters: armor)*/
- if (!opt.rfc1991) {
- PKT_symkey_enc *enc = m_alloc_clear( sizeof *enc );
- enc->version = 4;
- enc->cipher_algo = cfx.dek->algo;
- enc->s2k = *s2k;
- pkt.pkttype = PKT_SYMKEY_ENC;
- pkt.pkt.symkey_enc = enc;
- if( (rc = build_packet( out, &pkt )) )
- log_error("build symkey packet failed: %s\n", g10_errstr(rc) );
- m_free(enc);
- }
-
- /* Push the encryption filter */
- iobuf_push_filter( out, cipher_filter, &cfx );
-
- /* Push the Zip filter */
- if (opt.compress)
- {
- int compr_algo=opt.def_compress_algo;
-
- /* Default */
- if(compr_algo==-1)
- compr_algo=DEFAULT_COMPRESS_ALGO;
-
- if (compr_algo)
- {
- zfx.algo = compr_algo;
- iobuf_push_filter( out, compress_filter, &zfx );
- }
- }
-
- /* Write the one-pass signature packets */
- /*(current filters: zip - encrypt - armor)*/
- if (!opt.rfc1991) {
- rc = write_onepass_sig_packets (sk_list, out,
- opt.textmode? 0x01:0x00);
- if (rc)
- goto leave;
- }
-
- /* Pipe data through all filters; i.e. write the signed stuff */
- /*(current filters: zip - encrypt - armor)*/
- rc = write_plaintext_packet (out, inp, fname, opt.textmode ? 't':'b');
- if (rc)
- goto leave;
-
- /* Write the signatures */
- /*(current filters: zip - encrypt - armor)*/
- rc = write_signature_packets (sk_list, out, mfx.md,
- opt.textmode? 0x01 : 0x00,
- timestamp, duration, 'S');
- if( rc )
- goto leave;
-
-
- leave:
- if( rc )
- iobuf_cancel(out);
- else {
- iobuf_close(out);
- write_status( STATUS_END_ENCRYPTION );
- }
- iobuf_close(inp);
- release_sk_list( sk_list );
- md_close( mfx.md );
- m_free(cfx.dek);
- m_free(s2k);
- return rc;
-}
-
-
-/****************
- * Create a signature packet for the given public key certificate and
- * the user id and return it in ret_sig. User signature class SIGCLASS
- * user-id is not used (and may be NULL if sigclass is 0x20) If
- * DIGEST_ALGO is 0 the function selects an appropriate one.
- * SIGVERSION gives the minimal required signature packet version;
- * this is needed so that special properties like local sign are not
- * applied (actually: dropped) when a v3 key is used. TIMESTAMP is
- * the timestamp to use for the signature. 0 means "now" */
-int
-make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk,
- PKT_user_id *uid, PKT_public_key *subpk,
- PKT_secret_key *sk,
- int sigclass, int digest_algo,
- int sigversion, u32 timestamp, u32 duration,
- int (*mksubpkt)(PKT_signature *, void *), void *opaque
- )
-{
- PKT_signature *sig;
- int rc=0;
- MD_HANDLE md;
-
- assert( (sigclass >= 0x10 && sigclass <= 0x13) || sigclass == 0x1F
- || sigclass == 0x20 || sigclass == 0x18
- || sigclass == 0x30 || sigclass == 0x28 );
-
- if (opt.force_v4_certs)
- sigversion = 4;
-
- if (sigversion < sk->version)
- sigversion = sk->version;
-
- /* If you are making a signature on a v4 key using your v3 key, it
- doesn't make sense to generate a v3 sig. After all, no v3-only
- PGP implementation could understand the v4 key in the first
- place. Note that this implies that a signature on an attribute
- uid is usually going to be v4 as well, since they are not
- generally found on v3 keys. */
- if (sigversion < pk->version)
- sigversion = pk->version;
-
- if( !digest_algo )
- {
- /* Basically, this means use SHA1 always unless it's a v3 RSA
- key making a v3 cert (use MD5), or the user specified
- something (use whatever they said). They still must use a
- 160-bit hash with DSA, or the signature will fail. Note
- that this still allows the caller of make_keysig_packet to
- override the user setting if it must. */
-
- if(opt.cert_digest_algo)
- digest_algo=opt.cert_digest_algo;
- else if((sk->pubkey_algo==PUBKEY_ALGO_RSA ||
- sk->pubkey_algo==PUBKEY_ALGO_RSA_S) &&
- pk->version<4 && sigversion < 4)
- digest_algo = DIGEST_ALGO_MD5;
- else
- digest_algo = DIGEST_ALGO_SHA1;
- }
-
- md = md_open( digest_algo, 0 );
-
- /* hash the public key certificate and the user id */
- hash_public_key( md, pk );
- if( sigclass == 0x18 || sigclass == 0x28 ) { /* subkey binding/revocation*/
- hash_public_key( md, subpk );
- }
- else if( sigclass != 0x1F && sigclass != 0x20 ) {
- hash_uid (md, sigversion, uid);
- }
- /* and make the signature packet */
- sig = m_alloc_clear( sizeof *sig );
- sig->version = sigversion;
- sig->flags.exportable=1;
- sig->flags.revocable=1;
- keyid_from_sk( sk, sig->keyid );
- sig->pubkey_algo = sk->pubkey_algo;
- sig->digest_algo = digest_algo;
- if(timestamp)
- sig->timestamp=timestamp;
- else
- sig->timestamp=make_timestamp();
- if(duration)
- sig->expiredate=sig->timestamp+duration;
- sig->sig_class = sigclass;
- if( sig->version >= 4 )
- build_sig_subpkt_from_sig( sig );
-
- if( sig->version >= 4 && mksubpkt )
- rc = (*mksubpkt)( sig, opaque );
-
- if( !rc ) {
- mk_notation_and_policy( sig, pk, sk );
- hash_sigversion_to_magic (md, sig);
- md_final(md);
-
- rc = complete_sig( sig, sk, md );
- }
-
- md_close( md );
- if( rc )
- free_seckey_enc( sig );
- else
- *ret_sig = sig;
- return rc;
-}
-
-
-
-/****************
- * Create a new signature packet based on an existing one.
- * Only user ID signatures are supported for now.
- * TODO: Merge this with make_keysig_packet.
- */
-int
-update_keysig_packet( PKT_signature **ret_sig,
- PKT_signature *orig_sig,
- PKT_public_key *pk,
- PKT_user_id *uid,
- PKT_secret_key *sk,
- int (*mksubpkt)(PKT_signature *, void *),
- void *opaque
- )
-{
- PKT_signature *sig;
- int rc=0;
- MD_HANDLE md;
-
- if (!orig_sig || !pk || !uid || !sk)
- return G10ERR_GENERAL;
- if (orig_sig->sig_class < 0x10 || orig_sig->sig_class > 0x13 )
- return G10ERR_GENERAL;
-
- md = md_open( orig_sig->digest_algo, 0 );
-
- /* hash the public key certificate and the user id */
- hash_public_key( md, pk );
- hash_uid (md, orig_sig->version, uid);
-
- /* create a new signature packet */
- sig = copy_signature (NULL, orig_sig);
- if ( sig->version >= 4 && mksubpkt)
- rc = (*mksubpkt)(sig, opaque);
-
- /* we increase the timestamp by one second so that a future import
- of this key will replace the existing one. We also make sure that
- we don't create a timestamp in the future */
- sig->timestamp++;
- while (sig->timestamp >= make_timestamp())
- sleep (1);
- /* put the updated timestamp back into the data */
- if( sig->version >= 4 )
- build_sig_subpkt_from_sig( sig );
-
- if (!rc) {
- hash_sigversion_to_magic (md, sig);
- md_final(md);
-
- rc = complete_sig( sig, sk, md );
- }
-
- md_close (md);
- if( rc )
- free_seckey_enc (sig);
- else
- *ret_sig = sig;
- return rc;
-}
diff --git a/g10/signal.c b/g10/signal.c
deleted file mode 100644
index 0517ba648..000000000
--- a/g10/signal.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* signal.c - signal handling
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "options.h"
-#include "errors.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "ttyio.h"
-
-
-static volatile int caught_fatal_sig = 0;
-static volatile int caught_sigusr1 = 0;
-
-static void
-init_one_signal (int sig, RETSIGTYPE (*handler)(int), int check_ign )
-{
- #ifndef HAVE_DOSISH_SYSTEM
- #ifdef HAVE_SIGACTION
- struct sigaction oact, nact;
-
- if (check_ign) {
- /* we don't want to change an IGN handler */
- sigaction (sig, NULL, &oact );
- if (oact.sa_handler == SIG_IGN )
- return;
- }
-
- nact.sa_handler = handler;
- sigemptyset (&nact.sa_mask);
- nact.sa_flags = 0;
- sigaction ( sig, &nact, NULL);
- #else
- RETSIGTYPE (*ohandler)(int);
-
- ohandler = signal (sig, handler);
- if (check_ign && ohandler == SIG_IGN) {
- /* Change it back if it was already set to IGN */
- signal (sig, SIG_IGN);
- }
- #endif
- #endif /*!HAVE_DOSISH_SYSTEM*/
-}
-
-static const char *
-get_signal_name( int signum )
-{
- #if defined(SYS_SIGLIST_DECLARED) && defined(NSIG)
- return (signum >= 0 && signum < NSIG) ? sys_siglist[signum] : "?";
- #else
- return "some signal";
- #endif
-}
-
-
-static RETSIGTYPE
-got_fatal_signal( int sig )
-{
- const char *s;
-
- if( caught_fatal_sig )
- raise( sig );
- caught_fatal_sig = 1;
-
- secmem_term();
- /* better don't transtale these messages */
- write(2, "\n", 1 );
- s = log_get_name(); if( s ) write(2, s, strlen(s) );
- write(2, ": ", 2 );
- s = get_signal_name(sig); write(2, s, strlen(s) );
- write(2, " caught ... exiting\n", 20 );
-
- /* reset action to default action and raise signal again */
- init_one_signal (sig, SIG_DFL, 0);
- remove_lockfiles ();
-#ifdef __riscos__
- close_fds ();
-#endif /* __riscos__ */
- raise( sig );
-}
-
-
-static RETSIGTYPE
-got_usr_signal( int sig )
-{
- caught_sigusr1 = 1;
-}
-
-
-void
-init_signals()
-{
- #ifndef HAVE_DOSISH_SYSTEM
- init_one_signal (SIGINT, got_fatal_signal, 1 );
- init_one_signal (SIGHUP, got_fatal_signal, 1 );
- init_one_signal (SIGTERM, got_fatal_signal, 1 );
- init_one_signal (SIGQUIT, got_fatal_signal, 1 );
- init_one_signal (SIGSEGV, got_fatal_signal, 1 );
- init_one_signal (SIGUSR1, got_usr_signal, 0 );
- init_one_signal (SIGPIPE, SIG_IGN, 0 );
- #endif
-}
-
-
-void
-pause_on_sigusr( int which )
-{
- #ifndef HAVE_DOSISH_SYSTEM
- #ifdef HAVE_SIGPROCMASK
- sigset_t mask, oldmask;
-
- assert( which == 1 );
- sigemptyset( &mask );
- sigaddset( &mask, SIGUSR1 );
-
- sigprocmask( SIG_BLOCK, &mask, &oldmask );
- while( !caught_sigusr1 )
- sigsuspend( &oldmask );
- caught_sigusr1 = 0;
- sigprocmask( SIG_UNBLOCK, &mask, NULL );
- #else
- assert (which == 1);
- sighold (SIGUSR1);
- while (!caught_sigusr1)
- sigpause(SIGUSR1);
- caught_sigusr1 = 0;
- sigrelse(SIGUSR1); ????
- #endif /*!HAVE_SIGPROCMASK*/
- #endif
-}
-
-
-static void
-do_block( int block )
-{
- #ifndef HAVE_DOSISH_SYSTEM
- static int is_blocked;
- #ifdef HAVE_SIGPROCMASK
- static sigset_t oldmask;
-
- if( block ) {
- sigset_t newmask;
-
- if( is_blocked )
- log_bug("signals are already blocked\n");
- sigfillset( &newmask );
- sigprocmask( SIG_BLOCK, &newmask, &oldmask );
- is_blocked = 1;
- }
- else {
- if( !is_blocked )
- log_bug("signals are not blocked\n");
- sigprocmask( SIG_SETMASK, &oldmask, NULL );
- is_blocked = 0;
- }
- #else /*!HAVE_SIGPROCMASK*/
- static void (*disposition[MAXSIG])();
- int sig;
-
- if( block ) {
- if( is_blocked )
- log_bug("signals are already blocked\n");
- for (sig=1; sig < MAXSIG; sig++) {
- disposition[sig] = sigset (sig, SIG_HOLD);
- }
- is_blocked = 1;
- }
- else {
- if( !is_blocked )
- log_bug("signals are not blocked\n");
- for (sig=1; sig < MAXSIG; sig++) {
- sigset (sig, disposition[sig]);
- }
- is_blocked = 0;
- }
- #endif /*!HAVE_SIGPROCMASK*/
- #endif /*HAVE_DOSISH_SYSTEM*/
-}
-
-
-void
-block_all_signals()
-{
- do_block(1);
-}
-
-void
-unblock_all_signals()
-{
- do_block(0);
-}
diff --git a/g10/status.c b/g10/status.c
deleted file mode 100644
index 799b42edc..000000000
--- a/g10/status.c
+++ /dev/null
@@ -1,693 +0,0 @@
-/* status.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <signal.h>
-#ifdef USE_SHM_COPROCESSING
- #ifdef USE_CAPABILITIES
- #include <sys/capability.h>
- #endif
- #ifdef HAVE_SYS_IPC_H
- #include <sys/types.h>
- #include <sys/ipc.h>
- #endif
- #ifdef HAVE_SYS_SHM_H
- #include <sys/shm.h>
- #endif
- #if defined(HAVE_MLOCK)
- #include <sys/mman.h>
- #endif
-#endif
-#include "util.h"
-#include "status.h"
-#include "ttyio.h"
-#include "options.h"
-#include "main.h"
-#include "i18n.h"
-#include "cipher.h" /* for progress functions */
-
-#define CONTROL_D ('D' - 'A' + 1)
-
-
-
-static FILE *statusfp;
-
-#ifdef USE_SHM_COPROCESSING
- static int shm_id = -1;
- static volatile char *shm_area;
- static size_t shm_size;
- static int shm_is_locked;
-#endif /*USE_SHM_COPROCESSING*/
-
-
-static void
-progress_cb ( void *ctx, int c )
-{
- char buf[50];
-
- if ( c == '\n' )
- sprintf ( buf, "%.20s X 100 100", (char*)ctx );
- else
- sprintf ( buf, "%.20s %c 0 0", (char*)ctx, c );
- write_status_text ( STATUS_PROGRESS, buf );
-}
-
-static const char *
-get_status_string ( int no )
-{
- const char *s;
-
- switch( no ) {
- case STATUS_ENTER : s = "ENTER"; break;
- case STATUS_LEAVE : s = "LEAVE"; break;
- case STATUS_ABORT : s = "ABORT"; break;
- case STATUS_GOODSIG: s = "GOODSIG"; break;
- case STATUS_KEYEXPIRED: s = "KEYEXPIRED"; break;
- case STATUS_KEYREVOKED: s = "KEYREVOKED"; break;
- case STATUS_BADSIG : s = "BADSIG"; break;
- case STATUS_ERRSIG : s = "ERRSIG"; break;
- case STATUS_BADARMOR : s = "BADARMOR"; break;
- case STATUS_RSA_OR_IDEA : s= "RSA_OR_IDEA"; break;
- case STATUS_TRUST_UNDEFINED: s = "TRUST_UNDEFINED"; break;
- case STATUS_TRUST_NEVER : s = "TRUST_NEVER"; break;
- case STATUS_TRUST_MARGINAL : s = "TRUST_MARGINAL"; break;
- case STATUS_TRUST_FULLY : s = "TRUST_FULLY"; break;
- case STATUS_TRUST_ULTIMATE : s = "TRUST_ULTIMATE"; break;
- case STATUS_GET_BOOL : s = "GET_BOOL"; break;
- case STATUS_GET_LINE : s = "GET_LINE"; break;
- case STATUS_GET_HIDDEN : s = "GET_HIDDEN"; break;
- case STATUS_GOT_IT : s = "GOT_IT"; break;
- case STATUS_SHM_INFO : s = "SHM_INFO"; break;
- case STATUS_SHM_GET : s = "SHM_GET"; break;
- case STATUS_SHM_GET_BOOL : s = "SHM_GET_BOOL"; break;
- case STATUS_SHM_GET_HIDDEN : s = "SHM_GET_HIDDEN"; break;
- case STATUS_NEED_PASSPHRASE: s = "NEED_PASSPHRASE"; break;
- case STATUS_VALIDSIG : s = "VALIDSIG"; break;
- case STATUS_SIG_ID : s = "SIG_ID"; break;
- case STATUS_ENC_TO : s = "ENC_TO"; break;
- case STATUS_NODATA : s = "NODATA"; break;
- case STATUS_BAD_PASSPHRASE : s = "BAD_PASSPHRASE"; break;
- case STATUS_NO_PUBKEY : s = "NO_PUBKEY"; break;
- case STATUS_NO_SECKEY : s = "NO_SECKEY"; break;
- case STATUS_NEED_PASSPHRASE_SYM: s = "NEED_PASSPHRASE_SYM"; break;
- case STATUS_DECRYPTION_FAILED: s = "DECRYPTION_FAILED"; break;
- case STATUS_DECRYPTION_OKAY: s = "DECRYPTION_OKAY"; break;
- case STATUS_MISSING_PASSPHRASE: s = "MISSING_PASSPHRASE"; break;
- case STATUS_GOOD_PASSPHRASE : s = "GOOD_PASSPHRASE"; break;
- case STATUS_GOODMDC : s = "GOODMDC"; break;
- case STATUS_BADMDC : s = "BADMDC"; break;
- case STATUS_ERRMDC : s = "ERRMDC"; break;
- case STATUS_IMPORTED : s = "IMPORTED"; break;
- case STATUS_IMPORT_OK : s = "IMPORT_OK"; break;
- case STATUS_IMPORT_RES : s = "IMPORT_RES"; break;
- case STATUS_FILE_START : s = "FILE_START"; break;
- case STATUS_FILE_DONE : s = "FILE_DONE"; break;
- case STATUS_FILE_ERROR : s = "FILE_ERROR"; break;
- case STATUS_BEGIN_DECRYPTION:s = "BEGIN_DECRYPTION"; break;
- case STATUS_END_DECRYPTION : s = "END_DECRYPTION"; break;
- case STATUS_BEGIN_ENCRYPTION:s = "BEGIN_ENCRYPTION"; break;
- case STATUS_END_ENCRYPTION : s = "END_ENCRYPTION"; break;
- case STATUS_DELETE_PROBLEM : s = "DELETE_PROBLEM"; break;
- case STATUS_PROGRESS : s = "PROGRESS"; break;
- case STATUS_SIG_CREATED : s = "SIG_CREATED"; break;
- case STATUS_SESSION_KEY : s = "SESSION_KEY"; break;
- case STATUS_NOTATION_NAME : s = "NOTATION_NAME" ; break;
- case STATUS_NOTATION_DATA : s = "NOTATION_DATA" ; break;
- case STATUS_POLICY_URL : s = "POLICY_URL" ; break;
- case STATUS_BEGIN_STREAM : s = "BEGIN_STREAM"; break;
- case STATUS_END_STREAM : s = "END_STREAM"; break;
- case STATUS_KEY_CREATED : s = "KEY_CREATED"; break;
- case STATUS_USERID_HINT : s = "USERID_HINT"; break;
- case STATUS_UNEXPECTED : s = "UNEXPECTED"; break;
- case STATUS_INV_RECP : s = "INV_RECP"; break;
- case STATUS_NO_RECP : s = "NO_RECP"; break;
- case STATUS_ALREADY_SIGNED : s = "ALREADY_SIGNED"; break;
- case STATUS_SIGEXPIRED : s = "SIGEXPIRED deprecated-use-keyexpired-instead"; break;
- case STATUS_EXPSIG : s = "EXPSIG"; break;
- case STATUS_EXPKEYSIG : s = "EXPKEYSIG"; break;
- case STATUS_ATTRIBUTE : s = "ATTRIBUTE"; break;
- default: s = "?"; break;
- }
- return s;
-}
-
-void
-set_status_fd ( int fd )
-{
- static int last_fd = -1;
-
- if ( fd != -1 && last_fd == fd )
- return;
-
- if ( statusfp && statusfp != stdout && statusfp != stderr )
- fclose (statusfp);
- statusfp = NULL;
- if ( fd == -1 )
- return;
-
- if( fd == 1 )
- statusfp = stdout;
- else if( fd == 2 )
- statusfp = stderr;
- else
- statusfp = fdopen( fd, "w" );
- if( !statusfp ) {
- log_fatal("can't open fd %d for status output: %s\n",
- fd, strerror(errno));
- }
- last_fd = fd;
- register_primegen_progress ( progress_cb, "primegen" );
- register_pk_dsa_progress ( progress_cb, "pk_dsa" );
- register_pk_elg_progress ( progress_cb, "pk_elg" );
-}
-
-int
-is_status_enabled()
-{
- return !!statusfp;
-}
-
-void
-write_status ( int no )
-{
- write_status_text( no, NULL );
-}
-
-void
-write_status_text ( int no, const char *text)
-{
- if( !statusfp )
- return; /* not enabled */
-
- fputs ( "[GNUPG:] ", statusfp );
- fputs ( get_status_string (no), statusfp );
- if( text ) {
- putc ( ' ', statusfp );
- for (; *text; text++) {
- if (*text == '\n')
- fputs ( "\\n", statusfp );
- else if (*text == '\r')
- fputs ( "\\r", statusfp );
- else
- putc ( *(const byte *)text, statusfp );
- }
- }
- putc ('\n',statusfp);
- fflush (statusfp);
-}
-
-
-/*
- * Write a status line with a buffer using %XX escapes. If WRAP is >
- * 0 wrap the line after this length. If STRING is not NULL it will
- * be prepended to the buffer, no escaping is done for string.
- * A wrap of -1 forces spaces not to be encoded as %20.
- */
-void
-write_status_text_and_buffer ( int no, const char *string,
- const char *buffer, size_t len, int wrap )
-{
- const char *s, *text;
- int esc, first;
- int lower_limit = ' ';
- size_t n, count, dowrap;
-
- if( !statusfp )
- return; /* not enabled */
-
- if (wrap == -1) {
- lower_limit--;
- wrap = 0;
- }
-
- text = get_status_string (no);
- count = dowrap = first = 1;
- do {
- if (dowrap) {
- fprintf (statusfp, "[GNUPG:] %s ", text );
- count = dowrap = 0;
- if (first && string) {
- fputs (string, statusfp);
- count += strlen (string);
- }
- first = 0;
- }
- for (esc=0, s=buffer, n=len; n && !esc; s++, n-- ) {
- if ( *s == '%' || *(const byte*)s <= lower_limit
- || *(const byte*)s == 127 )
- esc = 1;
- if ( wrap && ++count > wrap ) {
- dowrap=1;
- break;
- }
- }
- if (esc) {
- s--; n++;
- }
- if (s != buffer)
- fwrite (buffer, s-buffer, 1, statusfp );
- if ( esc ) {
- fprintf (statusfp, "%%%02X", *(const byte*)s );
- s++; n--;
- }
- buffer = s;
- len = n;
- if ( dowrap && len )
- putc ( '\n', statusfp );
- } while ( len );
-
- putc ('\n',statusfp);
- fflush (statusfp);
-}
-
-void
-write_status_buffer ( int no, const char *buffer, size_t len, int wrap )
-{
- write_status_text_and_buffer (no, NULL, buffer, len, wrap);
-}
-
-
-
-#ifdef USE_SHM_COPROCESSING
-
-#ifndef IPC_RMID_DEFERRED_RELEASE
-static void
-remove_shmid( void )
-{
- if( shm_id != -1 ) {
- shmctl ( shm_id, IPC_RMID, 0);
- shm_id = -1;
- }
-}
-#endif
-
-void
-init_shm_coprocessing ( ulong requested_shm_size, int lock_mem )
-{
- char buf[100];
- struct shmid_ds shmds;
-
- #ifndef IPC_RMID_DEFERRED_RELEASE
- atexit( remove_shmid );
- #endif
- requested_shm_size = (requested_shm_size + 4095) & ~4095;
- if ( requested_shm_size > 2 * 4096 )
- log_fatal("too much shared memory requested; only 8k are allowed\n");
- shm_size = 4096 /* one page for us */ + requested_shm_size;
-
- shm_id = shmget( IPC_PRIVATE, shm_size, IPC_CREAT | 0700 );
- if ( shm_id == -1 )
- log_fatal("can't get %uk of shared memory: %s\n",
- (unsigned)shm_size/1024, strerror(errno));
-
- #if !defined(IPC_HAVE_SHM_LOCK) \
- && defined(HAVE_MLOCK) && !defined(HAVE_BROKEN_MLOCK)
- /* part of the old code which uses mlock */
- shm_area = shmat( shm_id, 0, 0 );
- if ( shm_area == (char*)-1 )
- log_fatal("can't attach %uk shared memory: %s\n",
- (unsigned)shm_size/1024, strerror(errno));
- log_debug("mapped %uk shared memory at %p, id=%d\n",
- (unsigned)shm_size/1024, shm_area, shm_id );
- if( lock_mem ) {
- #ifdef USE_CAPABILITIES
- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
- #endif
- /* (need the cast for Solaris with Sun's workshop compilers) */
- if ( mlock ( (char*)shm_area, shm_size) )
- log_info("locking shared memory %d failed: %s\n",
- shm_id, strerror(errno));
- else
- shm_is_locked = 1;
- #ifdef USE_CAPABILITIES
- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
- #endif
- }
-
- #ifdef IPC_RMID_DEFERRED_RELEASE
- if( shmctl( shm_id, IPC_RMID, 0) )
- log_fatal("shmctl IPC_RMDID of %d failed: %s\n",
- shm_id, strerror(errno));
- #endif
-
- if( shmctl( shm_id, IPC_STAT, &shmds ) )
- log_fatal("shmctl IPC_STAT of %d failed: %s\n",
- shm_id, strerror(errno));
- if( shmds.shm_perm.uid != getuid() ) {
- shmds.shm_perm.uid = getuid();
- if( shmctl( shm_id, IPC_SET, &shmds ) )
- log_fatal("shmctl IPC_SET of %d failed: %s\n",
- shm_id, strerror(errno));
- }
-
- #else /* this is the new code which handles the changes in the SHM semantics
- * introduced with Linux 2.4. The changes is that we now change the
- * permissions and then attach to the memory.
- */
-
- if( lock_mem ) {
- #ifdef USE_CAPABILITIES
- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
- #endif
- #ifdef IPC_HAVE_SHM_LOCK
- if ( shmctl (shm_id, SHM_LOCK, 0) )
- log_info("locking shared memory %d failed: %s\n",
- shm_id, strerror(errno));
- else
- shm_is_locked = 1;
- #else
- log_info("Locking shared memory %d failed: No way to do it\n", shm_id );
- #endif
- #ifdef USE_CAPABILITIES
- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
- #endif
- }
-
- if( shmctl( shm_id, IPC_STAT, &shmds ) )
- log_fatal("shmctl IPC_STAT of %d failed: %s\n",
- shm_id, strerror(errno));
- if( shmds.shm_perm.uid != getuid() ) {
- shmds.shm_perm.uid = getuid();
- if( shmctl( shm_id, IPC_SET, &shmds ) )
- log_fatal("shmctl IPC_SET of %d failed: %s\n",
- shm_id, strerror(errno));
- }
-
- shm_area = shmat( shm_id, 0, 0 );
- if ( shm_area == (char*)-1 )
- log_fatal("can't attach %uk shared memory: %s\n",
- (unsigned)shm_size/1024, strerror(errno));
- log_debug("mapped %uk shared memory at %p, id=%d\n",
- (unsigned)shm_size/1024, shm_area, shm_id );
-
- #ifdef IPC_RMID_DEFERRED_RELEASE
- if( shmctl( shm_id, IPC_RMID, 0) )
- log_fatal("shmctl IPC_RMDID of %d failed: %s\n",
- shm_id, strerror(errno));
- #endif
-
- #endif
- /* write info; Protocol version, id, size, locked size */
- sprintf( buf, "pv=1 pid=%d shmid=%d sz=%u lz=%u", (int)getpid(),
- shm_id, (unsigned)shm_size, shm_is_locked? (unsigned)shm_size:0 );
- write_status_text( STATUS_SHM_INFO, buf );
-}
-
-/****************
- * Request a string from client
- * If bool, returns static string on true (do not free) or NULL for false
- */
-static char *
-do_shm_get( const char *keyword, int hidden, int bool )
-{
- size_t n;
- byte *p;
- char *string;
-
- if( !shm_area )
- BUG();
-
- shm_area[0] = 0; /* msb of length of control block */
- shm_area[1] = 32; /* and lsb */
- shm_area[2] = 1; /* indicate that we are waiting on a reply */
- shm_area[3] = 0; /* clear data available flag */
-
- write_status_text( bool? STATUS_SHM_GET_BOOL :
- hidden? STATUS_SHM_GET_HIDDEN : STATUS_SHM_GET, keyword );
-
- do {
- pause_on_sigusr(1);
- if( shm_area[0] || shm_area[1] != 32 || shm_area[2] != 1 )
- log_fatal("client modified shm control block - abort\n");
- } while( !shm_area[3] );
- shm_area[2] = 0; /* reset request flag */
- p = (byte*)shm_area+32;
- n = p[0] << 8 | p[1];
- p += 2;
- if( n+32+2+1 > 4095 )
- log_fatal("client returns too large data (%u bytes)\n", (unsigned)n );
-
- if( bool )
- return p[0]? "" : NULL;
-
- string = hidden? m_alloc_secure( n+1 ) : m_alloc( n+1 );
- memcpy(string, p, n );
- string[n] = 0; /* make sure it is a string */
- if( hidden ) /* invalidate the memory */
- memset( p, 0, n );
-
- return string;
-}
-
-#endif /* USE_SHM_COPROCESSING */
-
-static int
-myread(int fd, void *buf, size_t count)
-{
- int rc;
- do {
- rc = read( fd, buf, count );
- } while ( rc == -1 && errno == EINTR );
- if ( !rc && count ) {
- static int eof_emmited=0;
- if ( eof_emmited < 3 ) {
- *(char*)buf = CONTROL_D;
- rc = 1;
- eof_emmited++;
- }
- else { /* Ctrl-D not caught - do something reasonable */
- #ifdef HAVE_DOSISH_SYSTEM
- raise (SIGINT); /* nothing to hangup under DOS */
- #else
- raise (SIGHUP); /* no more input data */
- #endif
- }
- }
- return rc;
-}
-
-
-
-/****************
- * Request a string from the client over the command-fd
- * If bool, returns static string on true (do not free) or NULL for false
- */
-static char *
-do_get_from_fd( const char *keyword, int hidden, int bool )
-{
- int i, len;
- char *string;
-
- write_status_text( bool? STATUS_GET_BOOL :
- hidden? STATUS_GET_HIDDEN : STATUS_GET_LINE, keyword );
-
- for( string = NULL, i = len = 200; ; i++ ) {
- if( i >= len-1 ) {
- char *save = string;
- len += 100;
- string = hidden? m_alloc_secure ( len ) : m_alloc ( len );
- if( save )
- memcpy(string, save, i );
- else
- i=0;
- }
- /* Hmmm: why not use our read_line function here */
- if( myread( opt.command_fd, string+i, 1) != 1 || string[i] == '\n' )
- break;
- else if ( string[i] == CONTROL_D ) {
- /* found ETX - cancel the line and return a sole ETX */
- string[0] = CONTROL_D;
- i=1;
- break;
- }
- }
- string[i] = 0;
-
- write_status( STATUS_GOT_IT );
-
- if( bool ) /* Fixme: is this correct??? */
- return string[0] == 'Y' ? "" : NULL;
-
- return string;
-}
-
-
-
-int
-cpr_enabled()
-{
- if( opt.command_fd != -1 )
- return 1;
- #ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return 1;
- #endif
- return 0;
-}
-
-char *
-cpr_get_no_help( const char *keyword, const char *prompt )
-{
- char *p;
-
- if( opt.command_fd != -1 )
- return do_get_from_fd ( keyword, 0, 0 );
- #ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return do_shm_get( keyword, 0, 0 );
- #endif
- for(;;) {
- p = tty_get( prompt );
- return p;
- }
-}
-
-char *
-cpr_get( const char *keyword, const char *prompt )
-{
- char *p;
-
- if( opt.command_fd != -1 )
- return do_get_from_fd ( keyword, 0, 0 );
- #ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return do_shm_get( keyword, 0, 0 );
- #endif
- for(;;) {
- p = tty_get( prompt );
- if( *p=='?' && !p[1] && !(keyword && !*keyword)) {
- m_free(p);
- display_online_help( keyword );
- }
- else
- return p;
- }
-}
-
-
-char *
-cpr_get_utf8( const char *keyword, const char *prompt )
-{
- char *p;
- p = cpr_get( keyword, prompt );
- if( p ) {
- char *utf8 = native_to_utf8( p );
- m_free( p );
- p = utf8;
- }
- return p;
-}
-
-char *
-cpr_get_hidden( const char *keyword, const char *prompt )
-{
- char *p;
-
- if( opt.command_fd != -1 )
- return do_get_from_fd ( keyword, 1, 0 );
- #ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return do_shm_get( keyword, 1, 0 );
- #endif
- for(;;) {
- p = tty_get_hidden( prompt );
- if( *p == '?' && !p[1] ) {
- m_free(p);
- display_online_help( keyword );
- }
- else
- return p;
- }
-}
-
-void
-cpr_kill_prompt(void)
-{
- if( opt.command_fd != -1 )
- return;
- #ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return;
- #endif
- tty_kill_prompt();
- return;
-}
-
-int
-cpr_get_answer_is_yes( const char *keyword, const char *prompt )
-{
- int yes;
- char *p;
-
- if( opt.command_fd != -1 )
- return !!do_get_from_fd ( keyword, 0, 1 );
-#ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return !!do_shm_get( keyword, 0, 1 );
-#endif
- for(;;) {
- p = tty_get( prompt );
- trim_spaces(p); /* it is okay to do this here */
- if( *p == '?' && !p[1] ) {
- m_free(p);
- display_online_help( keyword );
- }
- else {
- tty_kill_prompt();
- yes = answer_is_yes(p);
- m_free(p);
- return yes;
- }
- }
-}
-
-int
-cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt )
-{
- int yes;
- char *p;
-
- if( opt.command_fd != -1 )
- return !!do_get_from_fd ( keyword, 0, 1 );
-#ifdef USE_SHM_COPROCESSING
- if( opt.shm_coprocess )
- return !!do_shm_get( keyword, 0, 1 );
-#endif
- for(;;) {
- p = tty_get( prompt );
- trim_spaces(p); /* it is okay to do this here */
- if( *p == '?' && !p[1] ) {
- m_free(p);
- display_online_help( keyword );
- }
- else {
- tty_kill_prompt();
- yes = answer_is_yes_no_quit(p);
- m_free(p);
- return yes;
- }
- }
-}
-
diff --git a/g10/status.h b/g10/status.h
deleted file mode 100644
index dd913b4bd..000000000
--- a/g10/status.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* status.h
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_STATUS_H
-#define G10_STATUS_H
-
-
-#define STATUS_ENTER 1
-#define STATUS_LEAVE 2
-#define STATUS_ABORT 3
-
-#define STATUS_GOODSIG 4
-#define STATUS_BADSIG 5
-#define STATUS_ERRSIG 6
-
-
-#define STATUS_BADARMOR 7
-
-#define STATUS_RSA_OR_IDEA 8
-#define STATUS_KEYEXPIRED 9
-#define STATUS_KEYREVOKED 10
-
-#define STATUS_TRUST_UNDEFINED 11
-#define STATUS_TRUST_NEVER 12
-#define STATUS_TRUST_MARGINAL 13
-#define STATUS_TRUST_FULLY 14
-#define STATUS_TRUST_ULTIMATE 15
-
-#define STATUS_SHM_INFO 16
-#define STATUS_SHM_GET 17
-#define STATUS_SHM_GET_BOOL 18
-#define STATUS_SHM_GET_HIDDEN 19
-
-#define STATUS_NEED_PASSPHRASE 20
-#define STATUS_VALIDSIG 21
-#define STATUS_SIG_ID 22
-#define STATUS_ENC_TO 23
-#define STATUS_NODATA 24
-#define STATUS_BAD_PASSPHRASE 25
-#define STATUS_NO_PUBKEY 26
-#define STATUS_NO_SECKEY 27
-#define STATUS_NEED_PASSPHRASE_SYM 28
-#define STATUS_DECRYPTION_FAILED 29
-#define STATUS_DECRYPTION_OKAY 30
-#define STATUS_MISSING_PASSPHRASE 31
-#define STATUS_GOOD_PASSPHRASE 32
-#define STATUS_GOODMDC 33
-#define STATUS_BADMDC 34
-#define STATUS_ERRMDC 35
-#define STATUS_IMPORTED 36
-#define STATUS_IMPORT_RES 37
-#define STATUS_FILE_START 38
-#define STATUS_FILE_DONE 39
-#define STATUS_FILE_ERROR 40
-
-#define STATUS_BEGIN_DECRYPTION 41
-#define STATUS_END_DECRYPTION 42
-#define STATUS_BEGIN_ENCRYPTION 43
-#define STATUS_END_ENCRYPTION 44
-
-#define STATUS_DELETE_PROBLEM 45
-#define STATUS_GET_BOOL 46
-#define STATUS_GET_LINE 47
-#define STATUS_GET_HIDDEN 48
-#define STATUS_GOT_IT 49
-#define STATUS_PROGRESS 50
-#define STATUS_SIG_CREATED 51
-#define STATUS_SESSION_KEY 52
-#define STATUS_NOTATION_NAME 53
-#define STATUS_NOTATION_DATA 54
-#define STATUS_POLICY_URL 55
-#define STATUS_BEGIN_STREAM 56
-#define STATUS_END_STREAM 57
-#define STATUS_KEY_CREATED 58
-#define STATUS_USERID_HINT 59
-#define STATUS_UNEXPECTED 60
-#define STATUS_INV_RECP 61
-#define STATUS_NO_RECP 62
-#define STATUS_ALREADY_SIGNED 63
-#define STATUS_SIGEXPIRED 64
-#define STATUS_EXPSIG 65
-#define STATUS_EXPKEYSIG 66
-#define STATUS_ATTRIBUTE 67
-#define STATUS_IMPORT_OK 68
-
-/*-- status.c --*/
-void set_status_fd ( int fd );
-int is_status_enabled ( void );
-void write_status ( int no );
-void write_status_text ( int no, const char *text );
-void write_status_buffer ( int no,
- const char *buffer, size_t len, int wrap );
-void write_status_text_and_buffer ( int no, const char *text,
- const char *buffer, size_t len, int wrap );
-
-#ifdef USE_SHM_COPROCESSING
- void init_shm_coprocessing ( ulong requested_shm_size, int lock_mem );
-#endif /*USE_SHM_COPROCESSING*/
-
-int cpr_enabled(void);
-char *cpr_get( const char *keyword, const char *prompt );
-char *cpr_get_no_help( const char *keyword, const char *prompt );
-char *cpr_get_utf8( const char *keyword, const char *prompt );
-char *cpr_get_hidden( const char *keyword, const char *prompt );
-void cpr_kill_prompt(void);
-int cpr_get_answer_is_yes( const char *keyword, const char *prompt );
-int cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt );
-
-
-#endif /*G10_STATUS_H*/
diff --git a/g10/tdbio.c b/g10/tdbio.c
deleted file mode 100644
index 62ff26774..000000000
--- a/g10/tdbio.c
+++ /dev/null
@@ -1,1578 +0,0 @@
-/* tdbio.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "errors.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-#include "options.h"
-#include "main.h"
-#include "i18n.h"
-#include "trustdb.h"
-#include "tdbio.h"
-
-#if defined(HAVE_DOSISH_SYSTEM) && !defined(__CYGWIN32__)
-#define ftruncate chsize
-#endif
-
-#ifdef HAVE_DOSISH_SYSTEM
-#define MY_O_BINARY O_BINARY
-#else
-#define MY_O_BINARY 0
-#endif
-
-
-/****************
- * Yes, this is a very simple implementation. We should really
- * use a page aligned buffer and read complete pages.
- * To implement a simple trannsaction system, this is sufficient.
- */
-typedef struct cache_ctrl_struct *CACHE_CTRL;
-struct cache_ctrl_struct {
- CACHE_CTRL next;
- struct {
- unsigned used:1;
- unsigned dirty:1;
- } flags;
- ulong recno;
- char data[TRUST_RECORD_LEN];
-};
-
-#define MAX_CACHE_ENTRIES_SOFT 200 /* may be increased while in a */
-#define MAX_CACHE_ENTRIES_HARD 10000 /* transaction to this one */
-static CACHE_CTRL cache_list;
-static int cache_entries;
-static int cache_is_dirty;
-
-/* a type used to pass infomation to cmp_krec_fpr */
-struct cmp_krec_fpr_struct {
- int pubkey_algo;
- const char *fpr;
- int fprlen;
-};
-
-/* a type used to pass infomation to cmp_[s]dir */
-struct cmp_xdir_struct {
- int pubkey_algo;
- u32 keyid[2];
-};
-
-
-static char *db_name;
-static DOTLOCK lockhandle;
-static int is_locked;
-static int db_fd = -1;
-static int in_transaction;
-
-static void open_db(void);
-static void migrate_from_v2 (void);
-
-
-
-/*************************************
- ************* record cache **********
- *************************************/
-
-/****************
- * Get the data from therecord cache and return a
- * pointer into that cache. Caller should copy
- * the return data. NULL is returned on a cache miss.
- */
-static const char *
-get_record_from_cache( ulong recno )
-{
- CACHE_CTRL r;
-
- for( r = cache_list; r; r = r->next ) {
- if( r->flags.used && r->recno == recno )
- return r->data;
- }
- return NULL;
-}
-
-
-static int
-write_cache_item( CACHE_CTRL r )
-{
- int n;
-
- if( lseek( db_fd, r->recno * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) {
- log_error(_("trustdb rec %lu: lseek failed: %s\n"),
- r->recno, strerror(errno) );
- return G10ERR_WRITE_FILE;
- }
- n = write( db_fd, r->data, TRUST_RECORD_LEN);
- if( n != TRUST_RECORD_LEN ) {
- log_error(_("trustdb rec %lu: write failed (n=%d): %s\n"),
- r->recno, n, strerror(errno) );
- return G10ERR_WRITE_FILE;
- }
- r->flags.dirty = 0;
- return 0;
-}
-
-/****************
- * Put data into the cache. This function may flush the
- * some cache entries if there is not enough space available.
- */
-int
-put_record_into_cache( ulong recno, const char *data )
-{
- CACHE_CTRL r, unused;
- int dirty_count = 0;
- int clean_count = 0;
-
- /* see whether we already cached this one */
- for( unused = NULL, r = cache_list; r; r = r->next ) {
- if( !r->flags.used ) {
- if( !unused )
- unused = r;
- }
- else if( r->recno == recno ) {
- if( !r->flags.dirty ) {
- /* Hmmm: should we use a a copy and compare? */
- if( memcmp(r->data, data, TRUST_RECORD_LEN ) ) {
- r->flags.dirty = 1;
- cache_is_dirty = 1;
- }
- }
- memcpy( r->data, data, TRUST_RECORD_LEN );
- return 0;
- }
- if( r->flags.used ) {
- if( r->flags.dirty )
- dirty_count++;
- else
- clean_count++;
- }
- }
- /* not in the cache: add a new entry */
- if( unused ) { /* reuse this entry */
- r = unused;
- r->flags.used = 1;
- r->recno = recno;
- memcpy( r->data, data, TRUST_RECORD_LEN );
- r->flags.dirty = 1;
- cache_is_dirty = 1;
- cache_entries++;
- return 0;
- }
- /* see whether we reached the limit */
- if( cache_entries < MAX_CACHE_ENTRIES_SOFT ) { /* no */
- r = m_alloc( sizeof *r );
- r->flags.used = 1;
- r->recno = recno;
- memcpy( r->data, data, TRUST_RECORD_LEN );
- r->flags.dirty = 1;
- r->next = cache_list;
- cache_list = r;
- cache_is_dirty = 1;
- cache_entries++;
- return 0;
- }
- /* cache is full: discard some clean entries */
- if( clean_count ) {
- int n = clean_count / 3; /* discard a third of the clean entries */
- if( !n )
- n = 1;
- for( unused = NULL, r = cache_list; r; r = r->next ) {
- if( r->flags.used && !r->flags.dirty ) {
- if( !unused )
- unused = r;
- r->flags.used = 0;
- cache_entries--;
- if( !--n )
- break;
- }
- }
- assert( unused );
- r = unused;
- r->flags.used = 1;
- r->recno = recno;
- memcpy( r->data, data, TRUST_RECORD_LEN );
- r->flags.dirty = 1;
- cache_is_dirty = 1;
- cache_entries++;
- return 0;
- }
- /* no clean entries: have to flush some dirty entries */
- if( in_transaction ) {
- /* but we can't do this while in a transaction
- * we increase the cache size instead */
- if( cache_entries < MAX_CACHE_ENTRIES_HARD ) { /* no */
- if( opt.debug && !(cache_entries % 100) )
- log_debug("increasing tdbio cache size\n");
- r = m_alloc( sizeof *r );
- r->flags.used = 1;
- r->recno = recno;
- memcpy( r->data, data, TRUST_RECORD_LEN );
- r->flags.dirty = 1;
- r->next = cache_list;
- cache_list = r;
- cache_is_dirty = 1;
- cache_entries++;
- return 0;
- }
- log_info(_("trustdb transaction too large\n"));
- return G10ERR_RESOURCE_LIMIT;
- }
- if( dirty_count ) {
- int n = dirty_count / 5; /* discard some dirty entries */
- if( !n )
- n = 1;
- if( !is_locked ) {
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal("can't acquire lock - giving up\n");
- else
- is_locked = 1;
- }
- for( unused = NULL, r = cache_list; r; r = r->next ) {
- if( r->flags.used && r->flags.dirty ) {
- int rc = write_cache_item( r );
- if( rc )
- return rc;
- if( !unused )
- unused = r;
- r->flags.used = 0;
- cache_entries--;
- if( !--n )
- break;
- }
- }
- if( !opt.lock_once ) {
- if( !release_dotlock( lockhandle ) )
- is_locked = 0;
- }
- assert( unused );
- r = unused;
- r->flags.used = 1;
- r->recno = recno;
- memcpy( r->data, data, TRUST_RECORD_LEN );
- r->flags.dirty = 1;
- cache_is_dirty = 1;
- cache_entries++;
- return 0;
- }
- BUG();
-}
-
-
-int
-tdbio_is_dirty()
-{
- return cache_is_dirty;
-}
-
-
-/****************
- * Flush the cache. This cannot be used while in a transaction.
- */
-int
-tdbio_sync()
-{
- CACHE_CTRL r;
- int did_lock = 0;
-
- if( db_fd == -1 )
- open_db();
- if( in_transaction )
- log_bug("tdbio: syncing while in transaction\n");
-
- if( !cache_is_dirty )
- return 0;
-
- if( !is_locked ) {
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal("can't acquire lock - giving up\n");
- else
- is_locked = 1;
- did_lock = 1;
- }
- for( r = cache_list; r; r = r->next ) {
- if( r->flags.used && r->flags.dirty ) {
- int rc = write_cache_item( r );
- if( rc )
- return rc;
- }
- }
- cache_is_dirty = 0;
- if( did_lock && !opt.lock_once ) {
- if( !release_dotlock( lockhandle ) )
- is_locked = 0;
- }
-
- return 0;
-}
-
-
-
-/****************
- * Simple transactions system:
- * Everything between begin_transaction and end/cancel_transaction
- * is not immediatly written but at the time of end_transaction.
- *
- */
-int
-tdbio_begin_transaction()
-{
- int rc;
-
- if( in_transaction )
- log_bug("tdbio: nested transactions\n");
- /* flush everything out */
- rc = tdbio_sync();
- if( rc )
- return rc;
- in_transaction = 1;
- return 0;
-}
-
-int
-tdbio_end_transaction()
-{
- int rc;
-
- if( !in_transaction )
- log_bug("tdbio: no active transaction\n");
- if( !is_locked ) {
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal("can't acquire lock - giving up\n");
- else
- is_locked = 1;
- }
- block_all_signals();
- in_transaction = 0;
- rc = tdbio_sync();
- unblock_all_signals();
- if( !opt.lock_once ) {
- if( !release_dotlock( lockhandle ) )
- is_locked = 0;
- }
- return rc;
-}
-
-int
-tdbio_cancel_transaction()
-{
- CACHE_CTRL r;
-
- if( !in_transaction )
- log_bug("tdbio: no active transaction\n");
-
- /* remove all dirty marked entries, so that the original ones
- * are read back the next time */
- if( cache_is_dirty ) {
- for( r = cache_list; r; r = r->next ) {
- if( r->flags.used && r->flags.dirty ) {
- r->flags.used = 0;
- cache_entries--;
- }
- }
- cache_is_dirty = 0;
- }
-
- in_transaction = 0;
- return 0;
-}
-
-
-
-/********************************************************
- **************** cached I/O functions ******************
- ********************************************************/
-
-static void
-cleanup(void)
-{
- if( is_locked ) {
- if( !release_dotlock(lockhandle) )
- is_locked = 0;
- }
-}
-
-static int
-create_version_record (void)
-{
- TRUSTREC rec;
- int rc;
-
- memset( &rec, 0, sizeof rec );
- rec.r.ver.version = 3;
- rec.r.ver.created = make_timestamp();
- rec.r.ver.marginals = opt.marginals_needed;
- rec.r.ver.completes = opt.completes_needed;
- rec.r.ver.cert_depth = opt.max_cert_depth;
- rec.rectype = RECTYPE_VER;
- rec.recnum = 0;
- rc = tdbio_write_record( &rec );
- if( !rc )
- tdbio_sync();
- return rc;
-}
-
-
-
-int
-tdbio_set_dbname( const char *new_dbname, int create )
-{
- char *fname;
- static int initialized = 0;
-
- if( !initialized ) {
- atexit( cleanup );
- initialized = 1;
- }
- fname = new_dbname? m_strdup( new_dbname )
- : make_filename(opt.homedir,
- "trustdb" EXTSEP_S "gpg", NULL );
-
- if( access( fname, R_OK ) ) {
- if( errno != ENOENT ) {
- log_error( _("%s: can't access: %s\n"), fname, strerror(errno) );
- m_free(fname);
- return G10ERR_TRUSTDB;
- }
- if( create ) {
- FILE *fp;
- TRUSTREC rec;
- int rc;
- char *p = strrchr( fname, DIRSEP_C );
- mode_t oldmask;
-
- assert(p);
- *p = 0;
- if( access( fname, F_OK ) ) {
- try_make_homedir( fname );
- log_fatal( _("%s: directory does not exist!\n"), fname );
- }
- *p = DIRSEP_C;
-
- m_free(db_name);
- db_name = fname;
-#ifdef __riscos__
- if( !lockhandle )
- lockhandle = create_dotlock( db_name );
- if( !lockhandle )
- log_fatal( _("%s: can't create lock\n"), db_name );
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal( _("%s: can't make lock\n"), db_name );
-#endif /* __riscos__ */
- oldmask=umask(077);
- fp =fopen( fname, "wb" );
- umask(oldmask);
- if( !fp )
- log_fatal( _("%s: can't create: %s\n"), fname, strerror(errno) );
- fclose(fp);
- db_fd = open( db_name, O_RDWR | MY_O_BINARY );
- if( db_fd == -1 )
- log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) );
-
-#ifndef __riscos__
- if( !lockhandle )
- lockhandle = create_dotlock( db_name );
- if( !lockhandle )
- log_fatal( _("%s: can't create lock\n"), db_name );
-#endif /* !__riscos__ */
-
- rc = create_version_record ();
- if( rc )
- log_fatal( _("%s: failed to create version record: %s"),
- fname, g10_errstr(rc));
- /* and read again to check that we are okay */
- if( tdbio_read_record( 0, &rec, RECTYPE_VER ) )
- log_fatal( _("%s: invalid trustdb created\n"), db_name );
-
- if( !opt.quiet )
- log_info(_("%s: trustdb created\n"), db_name);
-
- return 0;
- }
- }
- m_free(db_name);
- db_name = fname;
- return 0;
-}
-
-
-const char *
-tdbio_get_dbname()
-{
- return db_name;
-}
-
-
-
-static void
-open_db()
-{
- byte buf[10];
- int n;
- TRUSTREC rec;
-
- assert( db_fd == -1 );
-
- if (!lockhandle )
- lockhandle = create_dotlock( db_name );
- if (!lockhandle )
- log_fatal( _("%s: can't create lock\n"), db_name );
-#ifdef __riscos__
- if (make_dotlock( lockhandle, -1 ) )
- log_fatal( _("%s: can't make lock\n"), db_name );
-#endif /* __riscos__ */
- db_fd = open (db_name, O_RDWR | MY_O_BINARY );
- if (db_fd == -1 && errno == EACCES) {
- db_fd = open (db_name, O_RDONLY | MY_O_BINARY );
- if (db_fd != -1)
- log_info (_("NOTE: trustdb not writable\n"));
- }
- if ( db_fd == -1 )
- log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) );
-
- /* check whether we need to do a version migration */
- do
- n = read (db_fd, buf, 5);
- while (n==-1 && errno == EINTR);
- if (n == 5 && !memcmp (buf, "\x01gpg\x02", 5))
- {
- migrate_from_v2 ();
- }
-
- /* read the version record */
- if (tdbio_read_record (0, &rec, RECTYPE_VER ) )
- log_fatal( _("%s: invalid trustdb\n"), db_name );
-}
-
-
-/****************
- * Make a hashtable: type 0 = trust hash
- */
-static void
-create_hashtable( TRUSTREC *vr, int type )
-{
- TRUSTREC rec;
- off_t offset;
- ulong recnum;
- int i, n, rc;
-
- offset = lseek( db_fd, 0, SEEK_END );
- if( offset == -1 )
- log_fatal("trustdb: lseek to end failed: %s\n", strerror(errno) );
- recnum = offset / TRUST_RECORD_LEN;
- assert(recnum); /* this is will never be the first record */
-
- if( !type )
- vr->r.ver.trusthashtbl = recnum;
-
- /* Now write the records */
- n = (256+ITEMS_PER_HTBL_RECORD-1) / ITEMS_PER_HTBL_RECORD;
- for(i=0; i < n; i++, recnum++ ) {
- memset( &rec, 0, sizeof rec );
- rec.rectype = RECTYPE_HTBL;
- rec.recnum = recnum;
- rc = tdbio_write_record( &rec );
- if( rc )
- log_fatal( _("%s: failed to create hashtable: %s\n"),
- db_name, g10_errstr(rc));
- }
- /* update the version record */
- rc = tdbio_write_record( vr );
- if( !rc )
- rc = tdbio_sync();
- if( rc )
- log_fatal( _("%s: error updating version record: %s\n"),
- db_name, g10_errstr(rc));
-}
-
-
-int
-tdbio_db_matches_options()
-{
- static int yes_no = -1;
-
- if( yes_no == -1 ) {
- TRUSTREC vr;
- int rc;
-
- rc = tdbio_read_record( 0, &vr, RECTYPE_VER );
- if( rc )
- log_fatal( _("%s: error reading version record: %s\n"),
- db_name, g10_errstr(rc) );
-
- if( !vr.r.ver.marginals && !vr.r.ver.completes
- && !vr.r.ver.cert_depth )
- { /* special hack for trustdbs created by old versions of GnuPG */
- vr.r.ver.marginals = opt.marginals_needed;
- vr.r.ver.completes = opt.completes_needed;
- vr.r.ver.cert_depth = opt.max_cert_depth;
- rc = tdbio_write_record( &vr );
- if( !rc && !in_transaction )
- rc = tdbio_sync();
- if( rc )
- log_error( _("%s: error writing version record: %s\n"),
- db_name, g10_errstr(rc) );
- }
-
- yes_no = vr.r.ver.marginals == opt.marginals_needed
- && vr.r.ver.completes == opt.completes_needed
- && vr.r.ver.cert_depth == opt.max_cert_depth;
- }
- return yes_no;
-}
-
-
-/****************
- * Return the nextstamp value.
- */
-ulong
-tdbio_read_nextcheck ()
-{
- TRUSTREC vr;
- int rc;
-
- rc = tdbio_read_record( 0, &vr, RECTYPE_VER );
- if( rc )
- log_fatal( _("%s: error reading version record: %s\n"),
- db_name, g10_errstr(rc) );
- return vr.r.ver.nextcheck;
-}
-
-/* Return true when the stamp was actually changed. */
-int
-tdbio_write_nextcheck (ulong stamp)
-{
- TRUSTREC vr;
- int rc;
-
- rc = tdbio_read_record( 0, &vr, RECTYPE_VER );
- if( rc )
- log_fatal( _("%s: error reading version record: %s\n"),
- db_name, g10_errstr(rc) );
-
- if (vr.r.ver.nextcheck == stamp)
- return 0;
-
- vr.r.ver.nextcheck = stamp;
- rc = tdbio_write_record( &vr );
- if( rc )
- log_fatal( _("%s: error writing version record: %s\n"),
- db_name, g10_errstr(rc) );
- return 1;
-}
-
-
-
-/****************
- * Return the record number of the trusthash tbl or create a new one.
- */
-static ulong
-get_trusthashrec(void)
-{
- static ulong trusthashtbl; /* record number of the trust hashtable */
-
- if( !trusthashtbl ) {
- TRUSTREC vr;
- int rc;
-
- rc = tdbio_read_record( 0, &vr, RECTYPE_VER );
- if( rc )
- log_fatal( _("%s: error reading version record: %s\n"),
- db_name, g10_errstr(rc) );
- if( !vr.r.ver.trusthashtbl )
- create_hashtable( &vr, 0 );
-
- trusthashtbl = vr.r.ver.trusthashtbl;
- }
- return trusthashtbl;
-}
-
-
-
-/****************
- * Update a hashtable.
- * table gives the start of the table, key and keylen is the key,
- * newrecnum is the record number to insert.
- */
-static int
-upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum )
-{
- TRUSTREC lastrec, rec;
- ulong hashrec, item;
- int msb;
- int level=0;
- int rc, i;
-
- hashrec = table;
- next_level:
- msb = key[level];
- hashrec += msb / ITEMS_PER_HTBL_RECORD;
- rc = tdbio_read_record( hashrec, &rec, RECTYPE_HTBL );
- if( rc ) {
- log_error( db_name, "upd_hashtable: read failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
-
- item = rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD];
- if( !item ) { /* insert a new item into the hash table */
- rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD] = newrecnum;
- rc = tdbio_write_record( &rec );
- if( rc ) {
- log_error( db_name, "upd_hashtable: write htbl failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- }
- else if( item != newrecnum ) { /* must do an update */
- lastrec = rec;
- rc = tdbio_read_record( item, &rec, 0 );
- if( rc ) {
- log_error( "upd_hashtable: read item failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
-
- if( rec.rectype == RECTYPE_HTBL ) {
- hashrec = item;
- level++;
- if( level >= keylen ) {
- log_error( "hashtable has invalid indirections.\n");
- return G10ERR_TRUSTDB;
- }
- goto next_level;
- }
- else if( rec.rectype == RECTYPE_HLST ) { /* extend list */
- /* see whether the key is already in this list */
- for(;;) {
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) {
- if( rec.r.hlst.rnum[i] == newrecnum ) {
- return 0; /* okay, already in the list */
- }
- }
- if( rec.r.hlst.next ) {
- rc = tdbio_read_record( rec.r.hlst.next,
- &rec, RECTYPE_HLST);
- if( rc ) {
- log_error( "upd_hashtable: read hlst failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- }
- else
- break; /* not there */
- }
- /* find the next free entry and put it in */
- for(;;) {
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) {
- if( !rec.r.hlst.rnum[i] ) {
- rec.r.hlst.rnum[i] = newrecnum;
- rc = tdbio_write_record( &rec );
- if( rc )
- log_error( "upd_hashtable: write hlst failed: %s\n",
- g10_errstr(rc) );
- return rc; /* done */
- }
- }
- if( rec.r.hlst.next ) {
- rc = tdbio_read_record( rec.r.hlst.next,
- &rec, RECTYPE_HLST );
- if( rc ) {
- log_error( "upd_hashtable: read hlst failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- }
- else { /* add a new list record */
- rec.r.hlst.next = item = tdbio_new_recnum();
- rc = tdbio_write_record( &rec );
- if( rc ) {
- log_error( "upd_hashtable: write hlst failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- memset( &rec, 0, sizeof rec );
- rec.rectype = RECTYPE_HLST;
- rec.recnum = item;
- rec.r.hlst.rnum[0] = newrecnum;
- rc = tdbio_write_record( &rec );
- if( rc )
- log_error( "upd_hashtable: write ext hlst failed: %s\n",
- g10_errstr(rc) );
- return rc; /* done */
- }
- } /* end loop over hlst slots */
- }
- else if( rec.rectype == RECTYPE_TRUST ) { /* insert a list record */
- if( rec.recnum == newrecnum ) {
- return 0;
- }
- item = rec.recnum; /* save number of key record */
- memset( &rec, 0, sizeof rec );
- rec.rectype = RECTYPE_HLST;
- rec.recnum = tdbio_new_recnum();
- rec.r.hlst.rnum[0] = item; /* old keyrecord */
- rec.r.hlst.rnum[1] = newrecnum; /* and new one */
- rc = tdbio_write_record( &rec );
- if( rc ) {
- log_error( "upd_hashtable: write new hlst failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- /* update the hashtable record */
- lastrec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD] = rec.recnum;
- rc = tdbio_write_record( &lastrec );
- if( rc )
- log_error( "upd_hashtable: update htbl failed: %s\n",
- g10_errstr(rc) );
- return rc; /* ready */
- }
- else {
- log_error( "hashtbl %lu: %lu/%d points to an invalid record %lu\n",
- table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item);
- list_trustdb(NULL);
- return G10ERR_TRUSTDB;
- }
- }
-
- return 0;
-}
-
-
-/****************
- * Drop an entry from a hashtable
- * table gives the start of the table, key and keylen is the key,
- */
-static int
-drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum )
-{
- TRUSTREC rec;
- ulong hashrec, item;
- int msb;
- int level=0;
- int rc, i;
-
- hashrec = table;
- next_level:
- msb = key[level];
- hashrec += msb / ITEMS_PER_HTBL_RECORD;
- rc = tdbio_read_record( hashrec, &rec, RECTYPE_HTBL );
- if( rc ) {
- log_error( db_name, "drop_from_hashtable: read failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
-
- item = rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD];
- if( !item ) /* not found - forget about it */
- return 0;
-
- if( item == recnum ) { /* tables points direct to the record */
- rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD] = 0;
- rc = tdbio_write_record( &rec );
- if( rc )
- log_error( db_name, "drop_from_hashtable: write htbl failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
-
- rc = tdbio_read_record( item, &rec, 0 );
- if( rc ) {
- log_error( "drop_from_hashtable: read item failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
-
- if( rec.rectype == RECTYPE_HTBL ) {
- hashrec = item;
- level++;
- if( level >= keylen ) {
- log_error( "hashtable has invalid indirections.\n");
- return G10ERR_TRUSTDB;
- }
- goto next_level;
- }
-
- if( rec.rectype == RECTYPE_HLST ) {
- for(;;) {
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) {
- if( rec.r.hlst.rnum[i] == recnum ) {
- rec.r.hlst.rnum[i] = 0; /* drop */
- rc = tdbio_write_record( &rec );
- if( rc )
- log_error( db_name, "drop_from_hashtable: write htbl failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- }
- if( rec.r.hlst.next ) {
- rc = tdbio_read_record( rec.r.hlst.next,
- &rec, RECTYPE_HLST);
- if( rc ) {
- log_error( "drop_from_hashtable: read hlst failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- }
- else
- return 0; /* key not in table */
- }
- }
-
- log_error( "hashtbl %lu: %lu/%d points to wrong record %lu\n",
- table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item);
- return G10ERR_TRUSTDB;
-}
-
-
-
-/****************
- * Lookup a record via the hashtable tablewith key/keylen and return the
- * result in rec. cmp() should return if the record is the desired one.
- * Returns -1 if not found, 0 if found or another errocode
- */
-static int
-lookup_hashtable( ulong table, const byte *key, size_t keylen,
- int (*cmpfnc)(void*, const TRUSTREC *), void *cmpdata,
- TRUSTREC *rec )
-{
- int rc;
- ulong hashrec, item;
- int msb;
- int level=0;
-
- hashrec = table;
- next_level:
- msb = key[level];
- hashrec += msb / ITEMS_PER_HTBL_RECORD;
- rc = tdbio_read_record( hashrec, rec, RECTYPE_HTBL );
- if( rc ) {
- log_error( db_name, "lookup_hashtable failed: %s\n", g10_errstr(rc) );
- return rc;
- }
-
- item = rec->r.htbl.item[msb % ITEMS_PER_HTBL_RECORD];
- if( !item )
- return -1; /* not found */
-
- rc = tdbio_read_record( item, rec, 0 );
- if( rc ) {
- log_error( db_name, "hashtable read failed: %s\n", g10_errstr(rc) );
- return rc;
- }
- if( rec->rectype == RECTYPE_HTBL ) {
- hashrec = item;
- level++;
- if( level >= keylen ) {
- log_error( db_name, "hashtable has invalid indirections\n");
- return G10ERR_TRUSTDB;
- }
- goto next_level;
- }
- else if( rec->rectype == RECTYPE_HLST ) {
- for(;;) {
- int i;
-
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) {
- if( rec->r.hlst.rnum[i] ) {
- TRUSTREC tmp;
-
- rc = tdbio_read_record( rec->r.hlst.rnum[i], &tmp, 0 );
- if( rc ) {
- log_error( "lookup_hashtable: read item failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- if( (*cmpfnc)( cmpdata, &tmp ) ) {
- *rec = tmp;
- return 0;
- }
- }
- }
- if( rec->r.hlst.next ) {
- rc = tdbio_read_record( rec->r.hlst.next, rec, RECTYPE_HLST );
- if( rc ) {
- log_error( "lookup_hashtable: read hlst failed: %s\n",
- g10_errstr(rc) );
- return rc;
- }
- }
- else
- return -1; /* not found */
- }
- }
-
-
- if( (*cmpfnc)( cmpdata, rec ) )
- return 0; /* really found */
-
- return -1; /* no: not found */
-}
-
-
-/****************
- * Update the trust hashtbl or create the table if it does not exist
- */
-static int
-update_trusthashtbl( TRUSTREC *tr )
-{
- return upd_hashtable( get_trusthashrec(),
- tr->r.trust.fingerprint, 20, tr->recnum );
-}
-
-
-
-void
-tdbio_dump_record( TRUSTREC *rec, FILE *fp )
-{
- int i;
- ulong rnum = rec->recnum;
-
- fprintf(fp, "rec %5lu, ", rnum );
-
- switch( rec->rectype ) {
- case 0: fprintf(fp, "blank\n");
- break;
- case RECTYPE_VER: fprintf(fp,
- "version, td=%lu, f=%lu, m/c/d=%d/%d/%d nc=%lu (%s)\n",
- rec->r.ver.trusthashtbl,
- rec->r.ver.firstfree,
- rec->r.ver.marginals,
- rec->r.ver.completes,
- rec->r.ver.cert_depth,
- rec->r.ver.nextcheck,
- strtimestamp(rec->r.ver.nextcheck)
- );
- break;
- case RECTYPE_FREE: fprintf(fp, "free, next=%lu\n", rec->r.free.next );
- break;
- case RECTYPE_HTBL:
- fprintf(fp, "htbl,");
- for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ )
- fprintf(fp, " %lu", rec->r.htbl.item[i] );
- putc('\n', fp);
- break;
- case RECTYPE_HLST:
- fprintf(fp, "hlst, next=%lu,", rec->r.hlst.next );
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ )
- fprintf(fp, " %lu", rec->r.hlst.rnum[i] );
- putc('\n', fp);
- break;
- case RECTYPE_TRUST:
- fprintf(fp, "trust ");
- for(i=0; i < 20; i++ )
- fprintf(fp, "%02X", rec->r.trust.fingerprint[i] );
- fprintf (fp, ", ot=%d, d=%d, vl=%lu\n", rec->r.trust.ownertrust,
- rec->r.trust.depth, rec->r.trust.validlist);
- break;
- case RECTYPE_VALID:
- fprintf(fp, "valid ");
- for(i=0; i < 20; i++ )
- fprintf(fp, "%02X", rec->r.valid.namehash[i] );
- fprintf (fp, ", v=%d, next=%lu\n", rec->r.valid.validity,
- rec->r.valid.next);
- break;
- default:
- fprintf(fp, "unknown type %d\n", rec->rectype );
- break;
- }
-}
-
-/****************
- * read the record with number recnum
- * returns: -1 on error, 0 on success
- */
-int
-tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected )
-{
- byte readbuf[TRUST_RECORD_LEN];
- const byte *buf, *p;
- int rc = 0;
- int n, i;
-
- if( db_fd == -1 )
- open_db();
- buf = get_record_from_cache( recnum );
- if( !buf ) {
- if( lseek( db_fd, recnum * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) {
- log_error(_("trustdb: lseek failed: %s\n"), strerror(errno) );
- return G10ERR_READ_FILE;
- }
- n = read( db_fd, readbuf, TRUST_RECORD_LEN);
- if( !n ) {
- return -1; /* eof */
- }
- else if( n != TRUST_RECORD_LEN ) {
- log_error(_("trustdb: read failed (n=%d): %s\n"), n,
- strerror(errno) );
- return G10ERR_READ_FILE;
- }
- buf = readbuf;
- }
- rec->recnum = recnum;
- rec->dirty = 0;
- p = buf;
- rec->rectype = *p++;
- if( expected && rec->rectype != expected ) {
- log_error("%lu: read expected rec type %d, got %d\n",
- recnum, expected, rec->rectype );
- return G10ERR_TRUSTDB;
- }
- p++; /* skip reserved byte */
- switch( rec->rectype ) {
- case 0: /* unused (free) record */
- break;
- case RECTYPE_VER: /* version record */
- if( memcmp(buf+1, "gpg", 3 ) ) {
- log_error( _("%s: not a trustdb file\n"), db_name );
- rc = G10ERR_TRUSTDB;
- }
- p += 2; /* skip "gpg" */
- rec->r.ver.version = *p++;
- rec->r.ver.marginals = *p++;
- rec->r.ver.completes = *p++;
- rec->r.ver.cert_depth = *p++;
- p += 4; /* lock flags */
- rec->r.ver.created = buftoulong(p); p += 4;
- rec->r.ver.nextcheck = buftoulong(p); p += 4;
- p += 4;
- p += 4;
- rec->r.ver.firstfree =buftoulong(p); p += 4;
- p += 4;
- rec->r.ver.trusthashtbl =buftoulong(p); p += 4;
- if( recnum ) {
- log_error( _("%s: version record with recnum %lu\n"), db_name,
- (ulong)recnum );
- rc = G10ERR_TRUSTDB;
- }
- else if( rec->r.ver.version != 3 ) {
- log_error( _("%s: invalid file version %d\n"), db_name,
- rec->r.ver.version );
- rc = G10ERR_TRUSTDB;
- }
- break;
- case RECTYPE_FREE:
- rec->r.free.next = buftoulong(p); p += 4;
- break;
- case RECTYPE_HTBL:
- for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) {
- rec->r.htbl.item[i] = buftoulong(p); p += 4;
- }
- break;
- case RECTYPE_HLST:
- rec->r.hlst.next = buftoulong(p); p += 4;
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) {
- rec->r.hlst.rnum[i] = buftoulong(p); p += 4;
- }
- break;
- case RECTYPE_TRUST:
- memcpy( rec->r.trust.fingerprint, p, 20); p+=20;
- rec->r.trust.ownertrust = *p++;
- rec->r.trust.depth = *p++;
- p += 2;
- rec->r.trust.validlist = buftoulong(p); p += 4;
- break;
- case RECTYPE_VALID:
- memcpy( rec->r.valid.namehash, p, 20); p+=20;
- rec->r.valid.validity = *p++;
- rec->r.valid.next = buftoulong(p); p += 4;
- break;
- default:
- log_error( "%s: invalid record type %d at recnum %lu\n",
- db_name, rec->rectype, (ulong)recnum );
- rc = G10ERR_TRUSTDB;
- break;
- }
-
- return rc;
-}
-
-/****************
- * Write the record at RECNUM
- */
-int
-tdbio_write_record( TRUSTREC *rec )
-{
- byte buf[TRUST_RECORD_LEN], *p;
- int rc = 0;
- int i;
- ulong recnum = rec->recnum;
-
- if( db_fd == -1 )
- open_db();
-
- memset(buf, 0, TRUST_RECORD_LEN);
- p = buf;
- *p++ = rec->rectype; p++;
- switch( rec->rectype ) {
- case 0: /* unused record */
- break;
- case RECTYPE_VER: /* version record */
- if( recnum )
- BUG();
- memcpy(p-1, "gpg", 3 ); p += 2;
- *p++ = rec->r.ver.version;
- *p++ = rec->r.ver.marginals;
- *p++ = rec->r.ver.completes;
- *p++ = rec->r.ver.cert_depth;
- p += 4; /* skip lock flags */
- ulongtobuf(p, rec->r.ver.created); p += 4;
- ulongtobuf(p, rec->r.ver.nextcheck); p += 4;
- p += 4;
- p += 4;
- ulongtobuf(p, rec->r.ver.firstfree ); p += 4;
- p += 4;
- ulongtobuf(p, rec->r.ver.trusthashtbl ); p += 4;
- break;
-
- case RECTYPE_FREE:
- ulongtobuf(p, rec->r.free.next); p += 4;
- break;
-
-
- case RECTYPE_HTBL:
- for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) {
- ulongtobuf( p, rec->r.htbl.item[i]); p += 4;
- }
- break;
-
- case RECTYPE_HLST:
- ulongtobuf( p, rec->r.hlst.next); p += 4;
- for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) {
- ulongtobuf( p, rec->r.hlst.rnum[i]); p += 4;
- }
- break;
-
- case RECTYPE_TRUST:
- memcpy( p, rec->r.trust.fingerprint, 20); p += 20;
- *p++ = rec->r.trust.ownertrust;
- *p++ = rec->r.trust.depth;
- p += 2;
- ulongtobuf( p, rec->r.trust.validlist); p += 4;
- break;
-
- case RECTYPE_VALID:
- memcpy( p, rec->r.valid.namehash, 20); p += 20;
- *p++ = rec->r.valid.validity;
- ulongtobuf( p, rec->r.valid.next); p += 4;
- break;
-
- default:
- BUG();
- }
-
- rc = put_record_into_cache( recnum, buf );
- if( rc )
- ;
- else if( rec->rectype == RECTYPE_TRUST )
- rc = update_trusthashtbl( rec );
-
- return rc;
-}
-
-int
-tdbio_delete_record( ulong recnum )
-{
- TRUSTREC vr, rec;
- int rc;
-
- /* Must read the record fist, so we can drop it from the hash tables */
- rc = tdbio_read_record( recnum, &rec, 0 );
- if( rc )
- ;
- else if( rec.rectype == RECTYPE_TRUST ) {
- rc = drop_from_hashtable( get_trusthashrec(),
- rec.r.trust.fingerprint, 20, rec.recnum );
- }
-
- if( rc )
- return rc;
-
- /* now we can chnage it to a free record */
- rc = tdbio_read_record( 0, &vr, RECTYPE_VER );
- if( rc )
- log_fatal( _("%s: error reading version record: %s\n"),
- db_name, g10_errstr(rc) );
-
- rec.recnum = recnum;
- rec.rectype = RECTYPE_FREE;
- rec.r.free.next = vr.r.ver.firstfree;
- vr.r.ver.firstfree = recnum;
- rc = tdbio_write_record( &rec );
- if( !rc )
- rc = tdbio_write_record( &vr );
- return rc;
-}
-
-/****************
- * create a new record and return its record number
- */
-ulong
-tdbio_new_recnum()
-{
- off_t offset;
- ulong recnum;
- TRUSTREC vr, rec;
- int rc;
-
- /* look for unused records */
- rc = tdbio_read_record( 0, &vr, RECTYPE_VER );
- if( rc )
- log_fatal( _("%s: error reading version record: %s\n"),
- db_name, g10_errstr(rc) );
- if( vr.r.ver.firstfree ) {
- recnum = vr.r.ver.firstfree;
- rc = tdbio_read_record( recnum, &rec, RECTYPE_FREE );
- if( rc ) {
- log_error( _("%s: error reading free record: %s\n"),
- db_name, g10_errstr(rc) );
- return rc;
- }
- /* update dir record */
- vr.r.ver.firstfree = rec.r.free.next;
- rc = tdbio_write_record( &vr );
- if( rc ) {
- log_error( _("%s: error writing dir record: %s\n"),
- db_name, g10_errstr(rc) );
- return rc;
- }
- /*zero out the new record */
- memset( &rec, 0, sizeof rec );
- rec.rectype = 0; /* unused record */
- rec.recnum = recnum;
- rc = tdbio_write_record( &rec );
- if( rc )
- log_fatal(_("%s: failed to zero a record: %s\n"),
- db_name, g10_errstr(rc));
- }
- else { /* not found, append a new record */
- offset = lseek( db_fd, 0, SEEK_END );
- if( offset == -1 )
- log_fatal("trustdb: lseek to end failed: %s\n", strerror(errno) );
- recnum = offset / TRUST_RECORD_LEN;
- assert(recnum); /* this is will never be the first record */
- /* we must write a record, so that the next call to this function
- * returns another recnum */
- memset( &rec, 0, sizeof rec );
- rec.rectype = 0; /* unused record */
- rec.recnum = recnum;
- rc = 0;
- if( lseek( db_fd, recnum * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) {
- log_error(_("trustdb rec %lu: lseek failed: %s\n"),
- recnum, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- }
- else {
- int n = write( db_fd, &rec, TRUST_RECORD_LEN);
- if( n != TRUST_RECORD_LEN ) {
- log_error(_("trustdb rec %lu: write failed (n=%d): %s\n"),
- recnum, n, strerror(errno) );
- rc = G10ERR_WRITE_FILE;
- }
- }
-
- if( rc )
- log_fatal(_("%s: failed to append a record: %s\n"),
- db_name, g10_errstr(rc));
- }
- return recnum ;
-}
-
-
-
-static int
-cmp_trec_fpr ( void *fpr, const TRUSTREC *rec )
-{
- return rec->rectype == RECTYPE_TRUST
- && !memcmp( rec->r.trust.fingerprint, fpr, 20);
-}
-
-
-int
-tdbio_search_trust_byfpr( const byte *fingerprint, TRUSTREC *rec )
-{
- int rc;
-
- /* locate the trust record using the hash table */
- rc = lookup_hashtable( get_trusthashrec(), fingerprint, 20,
- cmp_trec_fpr, (void*)fingerprint, rec );
- return rc;
-}
-
-int
-tdbio_search_trust_bypk (PKT_public_key *pk, TRUSTREC *rec)
-{
- byte fingerprint[MAX_FINGERPRINT_LEN];
- size_t fingerlen;
-
- fingerprint_from_pk( pk, fingerprint, &fingerlen );
- for (; fingerlen < 20; fingerlen++ )
- fingerprint[fingerlen] = 0;
- return tdbio_search_trust_byfpr (fingerprint, rec);
-}
-
-
-
-void
-tdbio_invalid(void)
-{
- log_error(_(
- "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n") );
- g10_exit(2);
-}
-
-/*
- * Migrate the trustdb as just up to gpg 1.0.6 (trustdb version 2)
- * to the 2.1 version as used with 1.0.6b - This is pretty trivial as needs
- * only to scan the tdb and insert new the new trust records. The old ones are
- * obsolte from now on
- */
-static void
-migrate_from_v2 ()
-{
- TRUSTREC rec;
- int i, n;
- struct {
- ulong keyrecno;
- byte ot;
- byte okay;
- byte fpr[20];
- } *ottable;
- int ottable_size, ottable_used;
- byte oldbuf[40];
- ulong recno;
- int rc, count;
-
- ottable_size = 5;
- ottable = m_alloc (ottable_size * sizeof *ottable);
- ottable_used = 0;
-
- /* We have some restrictions here. We can't use the version record
- * and we can't use any of the old hashtables because we dropped the
- * code. So we first collect all ownertrusts and then use a second
- * pass fo find the associated keys. We have to do this all without using
- * the regular record read functions.
- */
-
- /* get all the ownertrusts */
- if (lseek (db_fd, 0, SEEK_SET ) == -1 )
- log_fatal ("migrate_from_v2: lseek failed: %s\n", strerror (errno));
- for (recno=0;;recno++)
- {
- do
- n = read (db_fd, oldbuf, 40);
- while (n==-1 && errno == EINTR);
- if (!n)
- break; /* eof */
- if (n != 40)
- log_fatal ("migrate_vfrom_v2: read error or short read\n");
-
- if (*oldbuf != 2)
- continue;
-
- /* v2 dir record */
- if (ottable_used == ottable_size)
- {
- ottable_size += 1000;
- ottable = m_realloc (ottable, ottable_size * sizeof *ottable);
- }
- ottable[ottable_used].keyrecno = buftoulong (oldbuf+6);
- ottable[ottable_used].ot = oldbuf[18];
- ottable[ottable_used].okay = 0;
- memset (ottable[ottable_used].fpr,0, 20);
- if (ottable[ottable_used].keyrecno && ottable[ottable_used].ot)
- ottable_used++;
- }
- log_info ("found %d ownertrust records\n", ottable_used);
-
- /* Read again and find the fingerprints */
- if (lseek (db_fd, 0, SEEK_SET ) == -1 )
- log_fatal ("migrate_from_v2: lseek failed: %s\n", strerror (errno));
- for (recno=0;;recno++)
- {
- do
- n = read (db_fd, oldbuf, 40);
- while (n==-1 && errno == EINTR);
- if (!n)
- break; /* eof */
- if (n != 40)
- log_fatal ("migrate_from_v2: read error or short read\n");
-
- if (*oldbuf != 3)
- continue;
-
- /* v2 key record */
- for (i=0; i < ottable_used; i++)
- {
- if (ottable[i].keyrecno == recno)
- {
- memcpy (ottable[i].fpr, oldbuf+20, 20);
- ottable[i].okay = 1;
- break;
- }
- }
- }
-
- /* got everything - create the v3 trustdb */
- if (ftruncate (db_fd, 0))
- log_fatal ("can't truncate `%s': %s\n", db_name, strerror (errno) );
- if (create_version_record ())
- log_fatal ("failed to recreate version record of `%s'\n", db_name);
-
- /* access the hash table, so it is store just after the version record,
- * this is not needed put a dump is more pretty */
- get_trusthashrec ();
-
- /* And insert the old ownertrust values */
- count = 0;
- for (i=0; i < ottable_used; i++)
- {
- if (!ottable[i].okay)
- continue;
-
- memset (&rec, 0, sizeof rec);
- rec.recnum = tdbio_new_recnum ();
- rec.rectype = RECTYPE_TRUST;
- memcpy(rec.r.trust.fingerprint, ottable[i].fpr, 20);
- rec.r.trust.ownertrust = ottable[i].ot;
- if (tdbio_write_record (&rec))
- log_fatal ("failed to write trust record of `%s'\n", db_name);
- count++;
- }
-
- revalidation_mark ();
- rc = tdbio_sync ();
- if (rc)
- log_fatal ("failed to sync `%s'\n", db_name);
- log_info ("migrated %d version 2 ownertrusts\n", count);
- m_free (ottable);
-}
-
-
-
diff --git a/g10/tdbio.h b/g10/tdbio.h
deleted file mode 100644
index f2c6bec1b..000000000
--- a/g10/tdbio.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* tdbio.h - Trust database I/O functions
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef G10_TDBIO_H
-#define G10_TDBIO_H
-
-#include "host2net.h"
-
-#define TRUST_RECORD_LEN 40
-#define SIGS_PER_RECORD ((TRUST_RECORD_LEN-10)/5)
-#define ITEMS_PER_HTBL_RECORD ((TRUST_RECORD_LEN-2)/4)
-#define ITEMS_PER_HLST_RECORD ((TRUST_RECORD_LEN-6)/5)
-#define ITEMS_PER_PREF_RECORD (TRUST_RECORD_LEN-10)
-#if ITEMS_PER_PREF_RECORD % 2
- #error ITEMS_PER_PREF_RECORD must be even
-#endif
-#define MAX_LIST_SIGS_DEPTH 20
-
-
-#define RECTYPE_VER 1
-#define RECTYPE_HTBL 10
-#define RECTYPE_HLST 11
-#define RECTYPE_TRUST 12
-#define RECTYPE_VALID 13
-#define RECTYPE_FREE 254
-
-
-struct trust_record {
- int rectype;
- int mark;
- int dirty; /* for now only used internal by functions */
- struct trust_record *next; /* help pointer to build lists in memory */
- ulong recnum;
- union {
- struct { /* version record: */
- byte version; /* should be 3 */
- byte marginals;
- byte completes;
- byte cert_depth;
- ulong created; /* timestamp of trustdb creation */
- ulong nextcheck; /* timestamp of next scheduled check */
- ulong reserved;
- ulong reserved2;
- ulong firstfree;
- ulong reserved3;
- ulong trusthashtbl;
- } ver;
- struct { /* free record */
- ulong next;
- } free;
- struct {
- ulong item[ITEMS_PER_HTBL_RECORD];
- } htbl;
- struct {
- ulong next;
- ulong rnum[ITEMS_PER_HLST_RECORD]; /* of another record */
- } hlst;
- struct {
- byte fingerprint[20];
- byte ownertrust;
- byte depth;
- ulong validlist;
- } trust;
- struct {
- byte namehash[20];
- ulong next;
- byte validity;
- } valid;
- } r;
-};
-typedef struct trust_record TRUSTREC;
-
-/*-- tdbio.c --*/
-int tdbio_set_dbname( const char *new_dbname, int create );
-const char *tdbio_get_dbname(void);
-void tdbio_dump_record( TRUSTREC *rec, FILE *fp );
-int tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected );
-int tdbio_write_record( TRUSTREC *rec );
-int tdbio_db_matches_options(void);
-ulong tdbio_read_nextcheck (void);
-int tdbio_write_nextcheck (ulong stamp);
-int tdbio_is_dirty(void);
-int tdbio_sync(void);
-int tdbio_begin_transaction(void);
-int tdbio_end_transaction(void);
-int tdbio_cancel_transaction(void);
-int tdbio_delete_record( ulong recnum );
-ulong tdbio_new_recnum(void);
-int tdbio_search_trust_byfpr(const byte *fingerprint, TRUSTREC *rec );
-int tdbio_search_trust_bypk(PKT_public_key *pk, TRUSTREC *rec );
-
-void tdbio_invalid(void);
-
-#endif /*G10_TDBIO_H*/
diff --git a/g10/textfilter.c b/g10/textfilter.c
deleted file mode 100644
index ded030d79..000000000
--- a/g10/textfilter.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* textfilter.c
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "errors.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-#include "filter.h"
-#include "i18n.h"
-#include "options.h"
-
-#ifdef HAVE_DOSISH_SYSTEM
- #define LF "\r\n"
-#else
- #define LF "\n"
-#endif
-
-#define MAX_LINELEN 19995 /* a little bit smaller than in armor.c */
- /* to make sure that a warning is displayed while */
- /* creating a message */
-
-static unsigned
-len_without_trailing_chars( byte *line, unsigned len, const char *trimchars )
-{
- byte *p, *mark;
- unsigned n;
-
- for(mark=NULL, p=line, n=0; n < len; n++, p++ ) {
- if( strchr( trimchars, *p ) ) {
- if( !mark )
- mark = p;
- }
- else
- mark = NULL;
- }
-
- return mark? (mark - line) : len;
-}
-
-unsigned
-len_without_trailing_ws( byte *line, unsigned len )
-{
- return len_without_trailing_chars( line, len, " \t\r\n" );
-}
-
-
-
-
-static int
-standard( text_filter_context_t *tfx, IOBUF a,
- byte *buf, size_t size, size_t *ret_len)
-{
- int rc=0;
- size_t len = 0;
- unsigned maxlen;
-
- assert( size > 10 );
- size -= 2; /* reserve 2 bytes to append CR,LF */
- while( !rc && len < size ) {
- int lf_seen;
-
- while( len < size && tfx->buffer_pos < tfx->buffer_len )
- buf[len++] = tfx->buffer[tfx->buffer_pos++];
- if( len >= size )
- continue;
-
- /* read the next line */
- maxlen = MAX_LINELEN;
- tfx->buffer_pos = 0;
- tfx->buffer_len = iobuf_read_line( a, &tfx->buffer,
- &tfx->buffer_size, &maxlen );
- if( !maxlen )
- tfx->truncated++;
- if( !tfx->buffer_len ) {
- if( !len )
- rc = -1; /* eof */
- break;
- }
- lf_seen = tfx->buffer[tfx->buffer_len-1] == '\n';
- tfx->buffer_len = trim_trailing_ws( tfx->buffer, tfx->buffer_len );
- if( lf_seen ) {
- tfx->buffer[tfx->buffer_len++] = '\r';
- tfx->buffer[tfx->buffer_len++] = '\n';
- }
- }
- *ret_len = len;
- return rc;
-}
-
-
-
-
-/****************
- * The filter is used to make canonical text: Lines are terminated by
- * CR, LF, trailing white spaces are removed.
- */
-int
-text_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len)
-{
- size_t size = *ret_len;
- text_filter_context_t *tfx = opaque;
- int rc=0;
-
- if( control == IOBUFCTRL_UNDERFLOW ) {
- rc = standard( tfx, a, buf, size, ret_len );
- }
- else if( control == IOBUFCTRL_FREE ) {
- if( tfx->truncated )
- log_error(_("can't handle text lines longer than %d characters\n"),
- MAX_LINELEN );
- m_free( tfx->buffer );
- tfx->buffer = NULL;
- }
- else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "text_filter";
- return rc;
-}
-
-
-/****************
- * Copy data from INP to OUT and do some escaping if requested.
- * md is updated as required by rfc2440
- */
-int
-copy_clearsig_text( IOBUF out, IOBUF inp, MD_HANDLE md,
- int escape_dash, int escape_from, int pgp2mode )
-{
- unsigned maxlen;
- byte *buffer = NULL; /* malloced buffer */
- unsigned bufsize; /* and size of this buffer */
- unsigned n;
- int truncated = 0;
- int pending_lf = 0;
-
- if( !opt.pgp2_workarounds )
- pgp2mode = 0;
-
- if( !escape_dash )
- escape_from = 0;
-
- for(;;) {
- maxlen = MAX_LINELEN;
- n = iobuf_read_line( inp, &buffer, &bufsize, &maxlen );
- if( !maxlen )
- truncated++;
-
- if( !n )
- break; /* read_line has returned eof */
-
- /* update the message digest */
- if( escape_dash ) {
- if( pending_lf ) {
- md_putc( md, '\r' );
- md_putc( md, '\n' );
- }
- md_write( md, buffer,
- len_without_trailing_chars( buffer, n,
- pgp2mode? " \r\n":" \t\r\n"));
- }
- else
- md_write( md, buffer, n );
- pending_lf = buffer[n-1] == '\n';
-
- /* write the output */
- if( ( escape_dash && *buffer == '-')
- || ( escape_from && n > 4 && !memcmp(buffer, "From ", 5 ) ) ) {
- iobuf_put( out, '-' );
- iobuf_put( out, ' ' );
- }
-
- #if 0 /*defined(HAVE_DOSISH_SYSTEM)*/
- /* We don't use this anymore because my interpretation of rfc2440 7.1
- * is that there is no conversion needed. If one decides to
- * clearsign a unix file on a DOS box he will get a mixed line endings.
- * If at some point it turns out, that a conversion is a nice feature
- * we can make an option out of it.
- */
- /* make sure the lines do end in CR,LF */
- if( n > 1 && ( (buffer[n-2] == '\r' && buffer[n-1] == '\n' )
- || (buffer[n-2] == '\n' && buffer[n-1] == '\r'))) {
- iobuf_write( out, buffer, n-2 );
- iobuf_put( out, '\r');
- iobuf_put( out, '\n');
- }
- else if( n && buffer[n-1] == '\n' ) {
- iobuf_write( out, buffer, n-1 );
- iobuf_put( out, '\r');
- iobuf_put( out, '\n');
- }
- else
- iobuf_write( out, buffer, n );
-
- #else
- iobuf_write( out, buffer, n );
- #endif
- }
-
- /* at eof */
- if( !pending_lf ) { /* make sure that the file ends with a LF */
- iobuf_writestr( out, LF );
- if( !escape_dash )
- md_putc( md, '\n' );
- }
-
- if( truncated )
- log_info(_("input line longer than %d characters\n"), MAX_LINELEN );
-
- return 0; /* okay */
-}
-
diff --git a/g10/trustdb.c b/g10/trustdb.c
deleted file mode 100644
index fe2ad34e3..000000000
--- a/g10/trustdb.c
+++ /dev/null
@@ -1,1642 +0,0 @@
-/* trustdb.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "options.h"
-#include "packet.h"
-#include "main.h"
-#include "i18n.h"
-#include "tdbio.h"
-#include "trustdb.h"
-
-
-/*
- * A structure to store key identification as well as some stuff needed
- * for validation
- */
-struct key_item {
- struct key_item *next;
- unsigned int ownertrust;
- u32 kid[2];
-};
-
-
-typedef struct key_item **KeyHashTable; /* see new_key_hash_table() */
-
-/*
- * Structure to keep track of keys, this is used as an array wherre
- * the item right after the last one has a keyblock set to NULL.
- * Maybe we can drop this thing and replace it by key_item
- */
-struct key_array {
- KBNODE keyblock;
-};
-
-
-/* control information for the trust DB */
-static struct {
- int init;
- int level;
- char *dbname;
-} trustdb_args;
-
-/* some globals */
-static struct key_item *user_utk_list; /* temp. used to store --trusted-keys */
-static struct key_item *utk_list; /* all ultimately trusted keys */
-
-static int pending_check_trustdb;
-
-static int validate_keys (int interactive);
-
-
-/**********************************************
- ************* some helpers *******************
- **********************************************/
-
-static struct key_item *
-new_key_item (void)
-{
- struct key_item *k;
-
- k = m_alloc_clear (sizeof *k);
- return k;
-}
-
-static void
-release_key_items (struct key_item *k)
-{
- struct key_item *k2;
-
- for (; k; k = k2)
- {
- k2 = k->next;
- m_free (k);
- }
-}
-
-/*
- * For fast keylook up we need a hash table. Each byte of a KeyIDs
- * should be distributed equally over the 256 possible values (except
- * for v3 keyIDs but we consider them as not important here). So we
- * can just use 10 bits to index a table of 1024 key items.
- * Possible optimization: Don not use key_items but other hash_table when the
- * duplicates lists gets too large.
- */
-static KeyHashTable
-new_key_hash_table (void)
-{
- struct key_item **tbl;
-
- tbl = m_alloc_clear (1024 * sizeof *tbl);
- return tbl;
-}
-
-static void
-release_key_hash_table (KeyHashTable tbl)
-{
- int i;
-
- if (!tbl)
- return;
- for (i=0; i < 1024; i++)
- release_key_items (tbl[i]);
- m_free (tbl);
-}
-
-/*
- * Returns: True if the keyID is in the given hash table
- */
-static int
-test_key_hash_table (KeyHashTable tbl, u32 *kid)
-{
- struct key_item *k;
-
- for (k = tbl[(kid[1] & 0x03ff)]; k; k = k->next)
- if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
- return 1;
- return 0;
-}
-
-/*
- * Add a new key to the hash table. The key is identified by its key ID.
- */
-static void
-add_key_hash_table (KeyHashTable tbl, u32 *kid)
-{
- struct key_item *k, *kk;
-
- for (k = tbl[(kid[1] & 0x03ff)]; k; k = k->next)
- if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
- return; /* already in table */
-
- kk = new_key_item ();
- kk->kid[0] = kid[0];
- kk->kid[1] = kid[1];
- kk->next = tbl[(kid[1] & 0x03ff)];
- tbl[(kid[1] & 0x03ff)] = kk;
-}
-
-/*
- * Release a key_array
- */
-static void
-release_key_array ( struct key_array *keys )
-{
- struct key_array *k;
-
- if (keys) {
- for (k=keys; k->keyblock; k++)
- release_kbnode (k->keyblock);
- m_free (keys);
- }
-}
-
-
-/*********************************************
- ********** Initialization *****************
- *********************************************/
-
-
-
-/*
- * Used to register extra ultimately trusted keys - this has to be done
- * before initializing the validation module.
- * FIXME: Should be replaced by a function to add those keys to the trustdb.
- */
-void
-register_trusted_key( const char *string )
-{
- KEYDB_SEARCH_DESC desc;
- struct key_item *k;
-
- if (classify_user_id (string, &desc) != KEYDB_SEARCH_MODE_LONG_KID ) {
- log_error(_("`%s' is not a valid long keyID\n"), string );
- return;
- }
-
- k = new_key_item ();
- k->kid[0] = desc.u.kid[0];
- k->kid[1] = desc.u.kid[1];
- k->next = user_utk_list;
- user_utk_list = k;
-}
-
-/*
- * Helper to add a key to the global list of ultimately trusted keys.
- * Retruns: true = inserted, false = already in in list.
- */
-static int
-add_utk (u32 *kid)
-{
- struct key_item *k;
-
- for (k = utk_list; k; k = k->next)
- {
- if (k->kid[0] == kid[0] && k->kid[1] == kid[1])
- {
- return 0;
- }
- }
-
- k = new_key_item ();
- k->kid[0] = kid[0];
- k->kid[1] = kid[1];
- k->ownertrust = TRUST_ULTIMATE;
- k->next = utk_list;
- utk_list = k;
- if( opt.verbose > 1 )
- log_info(_("key %08lX: accepted as trusted key\n"), (ulong)kid[1]);
- return 1;
-}
-
-
-/****************
- * Verify that all our secret keys are usable and put them into the utk_list.
- */
-static void
-verify_own_keys(void)
-{
- TRUSTREC rec;
- ulong recnum;
- int rc;
- struct key_item *k;
-
- if (utk_list)
- return;
-
- /* scan the trustdb to find all ultimately trusted keys */
- for (recnum=1; !tdbio_read_record (recnum, &rec, 0); recnum++ )
- {
- if ( rec.rectype == RECTYPE_TRUST
- && (rec.r.trust.ownertrust & TRUST_MASK) == TRUST_ULTIMATE)
- {
- byte *fpr = rec.r.trust.fingerprint;
- int fprlen;
- u32 kid[2];
-
- /* Problem: We do only use fingerprints in the trustdb but
- * we need the keyID here to indetify the key; we can only
- * use that ugly hack to distinguish between 16 and 20
- * butes fpr - it does not work always so we better change
- * the whole validation code to only work with
- * fingerprints */
- fprlen = (!fpr[16] && !fpr[17] && !fpr[18] && !fpr[19])? 16:20;
- keyid_from_fingerprint (fpr, fprlen, kid);
- if (!add_utk (kid))
- log_info(_("key %08lX occurs more than once in the trustdb\n"),
- (ulong)kid[1]);
- }
- }
-
- /* the --trusted-key option is again deprecated; however we automagically
- * add those keys to the trustdb */
- for (k = user_utk_list; k; k = k->next)
- {
- if ( add_utk (k->kid) )
- { /* not yet in trustDB as ultimately trusted */
- PKT_public_key pk;
-
- memset (&pk, 0, sizeof pk);
- rc = get_pubkey (&pk, k->kid);
- if (rc) {
- log_info(_("key %08lX: no public key for trusted key - skipped\n"),
- (ulong)k->kid[1] );
- }
- else {
- update_ownertrust (&pk,
- ((get_ownertrust (&pk) & ~TRUST_MASK)
- | TRUST_ULTIMATE ));
- release_public_key_parts (&pk);
- }
- log_info (_("key %08lX marked as ultimately trusted\n"),
- (ulong)k->kid[1]);
- }
- }
-
-
- /* release the helper table table */
- release_key_items (user_utk_list);
- user_utk_list = NULL;
- return;
-}
-
-
-/*********************************************
- *********** TrustDB stuff *******************
- *********************************************/
-
-/*
- * Read a record but die if it does not exist
- */
-static void
-read_record (ulong recno, TRUSTREC *rec, int rectype )
-{
- int rc = tdbio_read_record (recno, rec, rectype);
- if (rc)
- {
- log_error(_("trust record %lu, req type %d: read failed: %s\n"),
- recno, rec->rectype, g10_errstr(rc) );
- tdbio_invalid();
- }
- if (rectype != rec->rectype)
- {
- log_error(_("trust record %lu is not of requested type %d\n"),
- rec->recnum, rectype);
- tdbio_invalid();
- }
-}
-
-/*
- * Write a record and die on error
- */
-static void
-write_record (TRUSTREC *rec)
-{
- int rc = tdbio_write_record (rec);
- if (rc)
- {
- log_error(_("trust record %lu, type %d: write failed: %s\n"),
- rec->recnum, rec->rectype, g10_errstr(rc) );
- tdbio_invalid();
- }
-}
-
-/*
- * sync the TrustDb and die on error
- */
-static void
-do_sync(void)
-{
- int rc = tdbio_sync ();
- if(rc)
- {
- log_error (_("trustdb: sync failed: %s\n"), g10_errstr(rc) );
- g10_exit(2);
- }
-}
-
-
-/****************
- * Perform some checks over the trustdb
- * level 0: only open the db
- * 1: used for initial program startup
- */
-int
-setup_trustdb( int level, const char *dbname )
-{
- /* just store the args */
- if( trustdb_args.init )
- return 0;
- trustdb_args.level = level;
- trustdb_args.dbname = dbname? m_strdup(dbname): NULL;
- return 0;
-}
-
-void
-init_trustdb()
-{
- int rc=0;
- int level = trustdb_args.level;
- const char* dbname = trustdb_args.dbname;
-
- if( trustdb_args.init )
- return;
-
- trustdb_args.init = 1;
-
- if ( !level || level==1)
- {
- rc = tdbio_set_dbname( dbname, !!level );
- if( !rc )
- {
- if( !level )
- return;
-
- /* verify that our own keys are in the trustDB
- * or move them to the trustdb. */
- verify_own_keys();
-
- /* should we check whether there is no other ultimately trusted
- * key in the database? */
- }
- }
- else
- BUG();
- if( rc )
- log_fatal("can't init trustdb: %s\n", g10_errstr(rc) );
-}
-
-
-
-
-/***********************************************
- ************* Print helpers ****************
- ***********************************************/
-
-/****************
- * This function returns a letter for a trustvalue Trust flags
- * are ignore.
- */
-int
-trust_letter (unsigned int value)
-{
- switch( (value & TRUST_MASK) )
- {
- case TRUST_UNKNOWN: return '-';
- case TRUST_EXPIRED: return 'e';
- case TRUST_UNDEFINED: return 'q';
- case TRUST_NEVER: return 'n';
- case TRUST_MARGINAL: return 'm';
- case TRUST_FULLY: return 'f';
- case TRUST_ULTIMATE: return 'u';
- default: return 0;
- }
-}
-
-
-/****************
- * Recreate the WoT but do not ask for new ownertrusts. Special
- * feature: In batch mode and without a forced yes, this is only done
- * when a check is due. This can be used to run the check from a crontab
- */
-void
-check_trustdb ()
-{
- init_trustdb();
- if (opt.batch && !opt.answer_yes)
- {
- ulong scheduled;
-
- scheduled = tdbio_read_nextcheck ();
- if (!scheduled)
- {
- log_info (_("no need for a trustdb check\n"));
- return;
- }
-
- if (scheduled > make_timestamp ())
- {
- log_info (_("next trustdb check due at %s\n"),
- strtimestamp (scheduled));
- return;
- }
- }
-
- validate_keys (0);
-}
-
-
-/*
- * Recreate the WoT.
- */
-void
-update_trustdb()
-{
- init_trustdb();
- validate_keys (1);
-}
-
-void
-revalidation_mark (void)
-{
- init_trustdb();
- /* we simply set the time for the next check to 1 (far back in 1970)
- * so that a --update-trustdb will be scheduled */
- if (tdbio_write_nextcheck (1))
- do_sync ();
- pending_check_trustdb = 1;
-}
-
-
-/***********************************************
- *********** Ownertrust et al. ****************
- ***********************************************/
-
-static int
-read_trust_record (PKT_public_key *pk, TRUSTREC *rec)
-{
- int rc;
-
- init_trustdb();
- rc = tdbio_search_trust_bypk (pk, rec);
- if (rc == -1)
- return -1; /* no record yet */
- if (rc)
- {
- log_error ("trustdb: searching trust record failed: %s\n",
- g10_errstr (rc));
- return rc;
- }
-
- if (rec->rectype != RECTYPE_TRUST)
- {
- log_error ("trustdb: record %lu is not a trust record\n",
- rec->recnum);
- return G10ERR_TRUSTDB;
- }
-
- return 0;
-}
-
-
-/****************
- * Return the assigned ownertrust value for the given public key.
- * The key should be the primary key.
- */
-unsigned int
-get_ownertrust ( PKT_public_key *pk)
-{
- TRUSTREC rec;
- int rc;
-
- rc = read_trust_record (pk, &rec);
- if (rc == -1)
- return TRUST_UNKNOWN; /* no record yet */
- if (rc)
- {
- tdbio_invalid ();
- return rc; /* actually never reached */
- }
-
- return rec.r.trust.ownertrust;
-}
-
-/*
- * Same as get_ownertrust but return a trust letter instead of an value.
- */
-int
-get_ownertrust_info (PKT_public_key *pk)
-{
- unsigned int otrust;
- int c;
-
- otrust = get_ownertrust (pk);
- c = trust_letter( (otrust & TRUST_MASK) );
- if( !c )
- c = '?';
- return c;
-}
-
-/*
- * Set the trust value of the given public key to the new value.
- * The key should be a primary one.
- */
-void
-update_ownertrust (PKT_public_key *pk, unsigned int new_trust )
-{
- TRUSTREC rec;
- int rc;
-
- rc = read_trust_record (pk, &rec);
- if (!rc)
- {
- if (DBG_TRUST)
- log_debug ("update ownertrust from %u to %u\n",
- (unsigned int)rec.r.trust.ownertrust, new_trust );
- if (rec.r.trust.ownertrust != new_trust)
- {
- rec.r.trust.ownertrust = new_trust;
- write_record( &rec );
- revalidation_mark ();
- do_sync ();
- }
- }
- else if (rc == -1)
- { /* no record yet - create a new one */
- size_t dummy;
-
- if (DBG_TRUST)
- log_debug ("insert ownertrust %u\n", new_trust );
-
- memset (&rec, 0, sizeof rec);
- rec.recnum = tdbio_new_recnum ();
- rec.rectype = RECTYPE_TRUST;
- fingerprint_from_pk (pk, rec.r.trust.fingerprint, &dummy);
- rec.r.trust.ownertrust = new_trust;
- write_record (&rec);
- revalidation_mark ();
- do_sync ();
- rc = 0;
- }
- else
- {
- tdbio_invalid ();
- }
-}
-
-/* Clear the ownertrust value. Return true if a changed actually happend. */
-int
-clear_ownertrust (PKT_public_key *pk)
-{
- TRUSTREC rec;
- int rc;
-
- rc = read_trust_record (pk, &rec);
- if (!rc)
- {
- if (DBG_TRUST)
- log_debug ("clearing ownertrust (old value %u)\n",
- (unsigned int)rec.r.trust.ownertrust);
- if (rec.r.trust.ownertrust)
- {
- rec.r.trust.ownertrust = 0;
- write_record( &rec );
- revalidation_mark ();
- do_sync ();
- return 1;
- }
- }
- else if (rc != -1)
- {
- tdbio_invalid ();
- }
- return 0;
-}
-
-/*
- * Note: Caller has to do a sync
- */
-static void
-update_validity (PKT_public_key *pk, const byte *namehash,
- int depth, int validity)
-{
- TRUSTREC trec, vrec;
- int rc;
- ulong recno;
-
- rc = read_trust_record (pk, &trec);
- if (rc && rc != -1)
- {
- tdbio_invalid ();
- return;
- }
- if (rc == -1) /* no record yet - create a new one */
- {
- size_t dummy;
-
- rc = 0;
- memset (&trec, 0, sizeof trec);
- trec.recnum = tdbio_new_recnum ();
- trec.rectype = RECTYPE_TRUST;
- fingerprint_from_pk (pk, trec.r.trust.fingerprint, &dummy);
- trec.r.trust.ownertrust = 0;
- }
-
- /* locate an existing one */
- recno = trec.r.trust.validlist;
- while (recno)
- {
- read_record (recno, &vrec, RECTYPE_VALID);
- if ( !memcmp (vrec.r.valid.namehash, namehash, 20) )
- break;
- recno = vrec.r.valid.next;
- }
-
- if (!recno) /* insert a new validity record */
- {
- memset (&vrec, 0, sizeof vrec);
- vrec.recnum = tdbio_new_recnum ();
- vrec.rectype = RECTYPE_VALID;
- memcpy (vrec.r.valid.namehash, namehash, 20);
- vrec.r.valid.next = trec.r.trust.validlist;
- }
- vrec.r.valid.validity = validity;
- write_record (&vrec);
- trec.r.trust.depth = depth;
- trec.r.trust.validlist = vrec.recnum;
- write_record (&trec);
-}
-
-
-/* reset validity for all user IDs. Caller must sync. */
-static int
-clear_validity (PKT_public_key *pk)
-{
- TRUSTREC trec, vrec;
- int rc;
- ulong recno;
- int any = 0;
-
- rc = read_trust_record (pk, &trec);
- if (rc && rc != -1)
- {
- tdbio_invalid ();
- return 0;
- }
- if (rc == -1) /* no record yet - no need to clerar it then ;-) */
- return 0;
-
- /* reset validity for all user IDs */
- recno = trec.r.trust.validlist;
- while (recno)
- {
- read_record (recno, &vrec, RECTYPE_VALID);
- if ((vrec.r.valid.validity & TRUST_MASK))
- {
- vrec.r.valid.validity &= ~TRUST_MASK;
- write_record (&vrec);
- any = 1;
- }
- recno = vrec.r.valid.next;
- }
-
- return any;
-}
-
-
-
-/***********************************************
- ********* Query trustdb values **************
- ***********************************************/
-
-/*
- * Return the validity information for PK. If the namehash is not
- * NULL, the validity of the corresponsing user ID is returned,
- * otherwise, a reasonable value for the entire key is returned.
- */
-unsigned int
-get_validity (PKT_public_key *pk, const byte *namehash)
-{
- static int did_nextcheck;
- TRUSTREC trec, vrec;
- int rc;
- ulong recno;
- unsigned int validity;
- u32 kid[2];
- PKT_public_key *main_pk;
-
- init_trustdb ();
- if (!did_nextcheck)
- {
- ulong scheduled;
-
- did_nextcheck = 1;
- scheduled = tdbio_read_nextcheck ();
- if (scheduled && scheduled <= make_timestamp ())
- {
- if (opt.no_auto_check_trustdb)
- {
- pending_check_trustdb = 1;
- log_info ("please do a --check-trustdb\n");
- }
- else
- {
- log_info (_("checking the trustdb\n"));
- validate_keys (0);
- }
- }
- }
-
- keyid_from_pk (pk, kid);
- if (pk->main_keyid[0] != kid[0] || pk->main_keyid[1] != kid[1])
- { /* this is a subkey - get the mainkey */
- main_pk = m_alloc_clear (sizeof *main_pk);
- rc = get_pubkey (main_pk, pk->main_keyid);
- if (rc)
- {
- log_error ("error getting main key %08lX of subkey %08lX: %s\n",
- (ulong)pk->main_keyid[1], (ulong)kid[1], g10_errstr(rc));
- validity = TRUST_UNKNOWN;
- goto leave;
- }
- }
- else
- main_pk = pk;
-
- rc = read_trust_record (main_pk, &trec);
- if (rc && rc != -1)
- {
- tdbio_invalid ();
- return 0;
- }
- if (rc == -1) /* no record found */
- {
- validity = TRUST_UNKNOWN;
- goto leave;
- }
-
- /* loop over all user IDs */
- recno = trec.r.trust.validlist;
- validity = 0;
- while (recno)
- {
- read_record (recno, &vrec, RECTYPE_VALID);
- if ( validity < (vrec.r.valid.validity & TRUST_MASK) )
- validity = (vrec.r.valid.validity & TRUST_MASK);
- if ( namehash && !memcmp (vrec.r.valid.namehash, namehash, 20) )
- break;
- recno = vrec.r.valid.next;
- }
-
- if (recno) /* okay, use the user ID associated one */
- validity = (vrec.r.valid.validity & TRUST_MASK);
-
- if ( (trec.r.trust.ownertrust & TRUST_FLAG_DISABLED) )
- validity |= TRUST_FLAG_DISABLED;
-
- leave:
- /* set some flags direct from the key */
- if (main_pk->is_revoked)
- validity |= TRUST_FLAG_REVOKED;
- if (main_pk != pk && pk->is_revoked)
- validity |= TRUST_FLAG_SUB_REVOKED;
- /* Note: expiration is a trust value and not a flag - don't know why
- * I initially designed it that way */
- if (main_pk->has_expired || pk->has_expired)
- validity = (validity & ~TRUST_MASK) | TRUST_EXPIRED;
-
- if (pending_check_trustdb)
- validity |= TRUST_FLAG_PENDING_CHECK;
-
- if (main_pk != pk)
- free_public_key (main_pk);
- return validity;
-}
-
-
-int
-get_validity_info (PKT_public_key *pk, const byte *namehash)
-{
- int trustlevel;
- int c;
-
- trustlevel = get_validity (pk, namehash);
- if( trustlevel & TRUST_FLAG_DISABLED )
- return 'd';
- if( trustlevel & TRUST_FLAG_REVOKED )
- return 'r';
- c = trust_letter ( (trustlevel & TRUST_MASK) );
- if( !c )
- c = '?';
- return c;
-}
-
-
-
-
-void
-list_trust_path( const char *username )
-{
-}
-
-
-
-
-/****************
- * Enumerate all keys, which are needed to build all trust paths for
- * the given key. This function does not return the key itself or
- * the ultimate key (the last point in cerificate chain). Only
- * certificate chains which ends up at an ultimately trusted key
- * are listed. If ownertrust or validity is not NULL, the corresponding
- * value for the returned LID is also returned in these variable(s).
- *
- * 1) create a void pointer and initialize it to NULL
- * 2) pass this void pointer by reference to this function.
- * Set lid to the key you want to enumerate and pass it by reference.
- * 3) call this function as long as it does not return -1
- * to indicate EOF. LID does contain the next key used to build the web
- * 4) Always call this function a last time with LID set to NULL,
- * so that it can free its context.
- *
- * Returns: -1 on EOF or the level of the returned LID
- */
-int
-enum_cert_paths( void **context, ulong *lid,
- unsigned *ownertrust, unsigned *validity )
-{
- return -1;
-}
-
-
-/****************
- * Print the current path
- */
-void
-enum_cert_paths_print( void **context, FILE *fp,
- int refresh, ulong selected_lid )
-{
- return;
-}
-
-
-
-/****************************************
- *********** NEW NEW NEW ****************
- ****************************************/
-
-static int
-ask_ownertrust (u32 *kid)
-{
- PKT_public_key *pk;
- int rc;
- int ot;
-
- pk = m_alloc_clear (sizeof *pk);
- rc = get_pubkey (pk, kid);
- if (rc)
- {
- log_error (_("public key %08lX not found: %s\n"),
- (ulong)kid[1], g10_errstr(rc) );
- return TRUST_UNKNOWN;
- }
-
- ot=edit_ownertrust(pk,0);
- if(ot>0)
- ot = get_ownertrust (pk);
- else if(ot==0)
- ot = TRUST_UNDEFINED;
- else
- ot = -1; /* quit */
- free_public_key( pk );
- return ot;
-}
-
-
-static void
-mark_keyblock_seen (KeyHashTable tbl, KBNODE node)
-{
- for ( ;node; node = node->next )
- if (node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- {
- u32 aki[2];
-
- keyid_from_pk (node->pkt->pkt.public_key, aki);
- add_key_hash_table (tbl, aki);
- }
-}
-
-
-
-static void
-dump_key_array (int depth, struct key_array *keys)
-{
- struct key_array *kar;
-
- for (kar=keys; kar->keyblock; kar++)
- {
- KBNODE node = kar->keyblock;
- u32 kid[2];
-
- keyid_from_pk(node->pkt->pkt.public_key, kid);
- printf ("%d:%08lX%08lX:K::%c::::\n",
- depth, (ulong)kid[0], (ulong)kid[1], '?');
-
- for (; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID)
- {
- int len = node->pkt->pkt.user_id->len;
-
- if (len > 30)
- len = 30;
- printf ("%d:%08lX%08lX:U:::%c:::",
- depth, (ulong)kid[0], (ulong)kid[1],
- (node->flag & 4)? 'f':
- (node->flag & 2)? 'm':
- (node->flag & 1)? 'q':'-');
- print_string (stdout, node->pkt->pkt.user_id->name, len, ':');
- putchar (':');
- putchar ('\n');
- }
- }
- }
-}
-
-
-static void
-store_validation_status (int depth, KBNODE keyblock)
-{
- KBNODE node;
- byte namehash[20];
- int status;
- int any = 0;
-
- for (node=keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID)
- {
- PKT_user_id *uid = node->pkt->pkt.user_id;
-
- if (node->flag & 4)
- status = TRUST_FULLY;
- else if (node->flag & 2)
- status = TRUST_MARGINAL;
- else if (node->flag & 1)
- status = TRUST_UNDEFINED;
- else
- status = 0;
-
- if (status)
- {
- if( uid->attrib_data )
- rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len);
- else
- rmd160_hash_buffer (namehash, uid->name, uid->len );
-
- update_validity (keyblock->pkt->pkt.public_key,
- namehash, depth, status);
- any = 1;
- }
- }
- }
-
- if (any)
- do_sync ();
-}
-
-/*
- * check whether the signature sig is in the klist k
- */
-static struct key_item *
-is_in_klist (struct key_item *k, PKT_signature *sig)
-{
- for (; k; k = k->next)
- {
- if (k->kid[0] == sig->keyid[0] && k->kid[1] == sig->keyid[1])
- return k;
- }
- return NULL;
-}
-
-/*
- * Mark the signature of the given UID which are used to certify it.
- * To do this, we first revmove all signatures which are not valid and
- * from the remain ones we look for the latest one. If this is not a
- * certification revocation signature we mark the signature by setting
- * node flag bit 8. Note that flag bits 9 and 10 are used for internal
- * purposes.
- */
-static void
-mark_usable_uid_certs (KBNODE keyblock, KBNODE uidnode,
- u32 *main_kid, struct key_item *klist,
- u32 curtime, u32 *next_expire)
-{
- KBNODE node;
- PKT_signature *sig;
-
- /* first check all signatures */
- for (node=uidnode->next; node; node = node->next)
- {
- node->flag &= ~(1<<8 | 1<<9 | 1<<10);
- if (node->pkt->pkttype == PKT_USER_ID
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- break; /* ready */
- if (node->pkt->pkttype != PKT_SIGNATURE)
- continue;
-
- sig = node->pkt->pkt.signature;
- if (sig->keyid[0] == main_kid[0] && sig->keyid[1] == main_kid[1])
- continue; /* ignore self-signatures */
- if (!IS_UID_SIG(sig) && !IS_UID_REV(sig))
- continue; /* we only look at these signature classes */
- if (!is_in_klist (klist, sig))
- continue; /* no need to check it then */
- if (check_key_signature (keyblock, node, NULL))
- continue; /* ignore invalid signatures */
- node->flag |= 1<<9;
- }
- /* reset the remaining flags */
- for (; node; node = node->next)
- node->flag &= ~(1<<8 | 1<<9 | 1 << 10);
-
- /* kbnode flag usage: bit 9 is here set for signatures to consider,
- * bit 10 will be set by the loop to keep track of keyIDs already
- * processed, bit 8 will be set for the usable signatures */
-
- /* for each cert figure out the latest valid one */
- for (node=uidnode->next; node; node = node->next)
- {
- KBNODE n, signode;
- u32 kid[2];
- u32 sigdate;
-
- if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- break;
- if ( !(node->flag & (1<<9)) )
- continue; /* not a node to look at */
- if ( (node->flag & (1<<10)) )
- continue; /* signature with a keyID already processed */
- node->flag |= (1<<10); /* mark this node as processed */
- sig = node->pkt->pkt.signature;
- signode = node;
- sigdate = sig->timestamp;
- kid[0] = sig->keyid[0]; kid[1] = sig->keyid[1];
- for (n=uidnode->next; n; n = n->next)
- {
- if (n->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- break;
- if ( !(n->flag & (1<<9)) )
- continue;
- if ( (n->flag & (1<<10)) )
- continue; /* shortcut already processed signatures */
- sig = n->pkt->pkt.signature;
- if (kid[0] != sig->keyid[0] || kid[1] != sig->keyid[1])
- continue;
- n->flag |= (1<<10); /* mark this node as processed */
-
- /* If signode is nonrevocable and unexpired and n isn't,
- then take signode (skip). It doesn't matter which is
- older: if signode was older then we don't want to take n
- as signode is nonrevocable. If n was older then we're
- automatically fine. */
-
- if(((IS_UID_SIG(signode->pkt->pkt.signature) &&
- !signode->pkt->pkt.signature->flags.revocable &&
- (signode->pkt->pkt.signature->expiredate==0 ||
- signode->pkt->pkt.signature->expiredate>curtime))) &&
- (!(IS_UID_SIG(n->pkt->pkt.signature) &&
- !n->pkt->pkt.signature->flags.revocable &&
- (n->pkt->pkt.signature->expiredate==0 ||
- n->pkt->pkt.signature->expiredate>curtime))))
- continue;
-
- /* If n is nonrevocable and unexpired and signode isn't,
- then take n. Again, it doesn't matter which is older: if
- n was older then we don't want to take signode as n is
- nonrevocable. If signode was older then we're
- automatically fine. */
-
- if((!(IS_UID_SIG(signode->pkt->pkt.signature) &&
- !signode->pkt->pkt.signature->flags.revocable &&
- (signode->pkt->pkt.signature->expiredate==0 ||
- signode->pkt->pkt.signature->expiredate>curtime))) &&
- ((IS_UID_SIG(n->pkt->pkt.signature) &&
- !n->pkt->pkt.signature->flags.revocable &&
- (n->pkt->pkt.signature->expiredate==0 ||
- n->pkt->pkt.signature->expiredate>curtime))))
- {
- signode = n;
- sigdate = sig->timestamp;
- continue;
- }
-
- /* At this point, if it's newer, it goes in as the only
- remaining possibilities are signode and n are both either
- revocable or expired or both nonrevocable and unexpired.
- If the timestamps are equal take the later ordered
- packet, presuming that the key packets are hopefully in
- their original order. */
-
- if (sig->timestamp >= sigdate)
- {
- signode = n;
- sigdate = sig->timestamp;
- }
- }
- sig = signode->pkt->pkt.signature;
- if (IS_UID_SIG (sig))
- { /* this seems to be a usable one which is not revoked.
- * Just need to check whether there is an expiration time,
- * We do the expired certification after finding a suitable
- * certification, the assumption is that a signator does not
- * want that after the expiration of his certificate the
- * system falls back to an older certification which has a
- * different expiration time */
- const byte *p;
- u32 expire;
-
- p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIG_EXPIRE, NULL );
- expire = p? sig->timestamp + buffer_to_u32(p) : 0;
-
- if (expire==0 || expire > curtime )
- {
- signode->flag |= (1<<8); /* yeah, found a good cert */
- if (expire && expire < *next_expire)
- *next_expire = expire;
- }
- }
- }
-}
-
-
-/*
- * Return true if the key is signed by one of the keys in the given
- * key ID list. User IDs with a valid signature are marked by node
- * flags as follows:
- * flag bit 0: There is at least one signature
- * 1: There is marginal confidence that this is a legitimate uid
- * 2: There is full confidence that this is a legitimate uid.
- * 8: Used for internal purposes.
- * 9: Ditto (in mark_usable_uid_certs())
- * 10: Ditto (ditto)
- * This function assumes that all kbnode flags are cleared on entry.
- */
-static int
-validate_one_keyblock (KBNODE kb, struct key_item *klist,
- u32 curtime, u32 *next_expire)
-{
- struct key_item *kr;
- KBNODE node, uidnode=NULL;
- PKT_public_key *pk = kb->pkt->pkt.public_key;
- u32 main_kid[2];
- int issigned=0, any_signed = 0, fully_count =0, marginal_count = 0;
-
- keyid_from_pk(pk, main_kid);
- for (node=kb; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID)
- {
- if (uidnode && issigned)
- {
- if (fully_count >= opt.completes_needed
- || marginal_count >= opt.marginals_needed )
- uidnode->flag |= 4;
- else if (fully_count || marginal_count)
- uidnode->flag |= 2;
- uidnode->flag |= 1;
- any_signed = 1;
- }
- uidnode = node;
- issigned = 0;
- fully_count = marginal_count = 0;
- mark_usable_uid_certs (kb, uidnode, main_kid, klist,
- curtime, next_expire);
- }
- else if (node->pkt->pkttype == PKT_SIGNATURE
- && (node->flag & (1<<8)) )
- {
- PKT_signature *sig = node->pkt->pkt.signature;
-
- kr = is_in_klist (klist, sig);
- if (kr)
- {
- if (kr->ownertrust == TRUST_ULTIMATE)
- fully_count = opt.completes_needed;
- else if (kr->ownertrust == TRUST_FULLY)
- fully_count++;
- else if (kr->ownertrust == TRUST_MARGINAL)
- marginal_count++;
- issigned = 1;
- }
- }
- }
-
- if (uidnode && issigned)
- {
- if (fully_count >= opt.completes_needed
- || marginal_count >= opt.marginals_needed )
- uidnode->flag |= 4;
- else if (fully_count || marginal_count)
- uidnode->flag |= 2;
- uidnode->flag |= 1;
- any_signed = 1;
- }
-
- return any_signed;
-}
-
-
-static int
-search_skipfnc (void *opaque, u32 *kid)
-{
- return test_key_hash_table ((KeyHashTable)opaque, kid);
-}
-
-
-/*
- * Scan all keys and return a key_array of all suitable keys from
- * kllist. The caller has to pass keydb handle so that we don't use
- * to create our own. Returns either a key_array or NULL in case of
- * an error. No results found are indicated by an empty array.
- * Caller hast to release the returned array.
- */
-static struct key_array *
-validate_key_list (KEYDB_HANDLE hd, KeyHashTable visited,
- struct key_item *klist, u32 curtime, u32 *next_expire)
-{
- KBNODE keyblock = NULL;
- struct key_array *keys = NULL;
- size_t nkeys, maxkeys;
- int rc;
- KEYDB_SEARCH_DESC desc;
-
- maxkeys = 1000;
- keys = m_alloc ((maxkeys+1) * sizeof *keys);
- nkeys = 0;
-
- rc = keydb_search_reset (hd);
- if (rc)
- {
- log_error ("keydb_search_reset failed: %s\n", g10_errstr(rc));
- m_free (keys);
- return NULL;
- }
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FIRST;
- desc.skipfnc = search_skipfnc;
- desc.skipfncvalue = visited;
- rc = keydb_search (hd, &desc, 1);
- if (rc == -1)
- {
- keys[nkeys].keyblock = NULL;
- return keys;
- }
- if (rc)
- {
- log_error ("keydb_search_first failed: %s\n", g10_errstr(rc));
- m_free (keys);
- return NULL;
- }
-
- desc.mode = KEYDB_SEARCH_MODE_NEXT; /* change mode */
- do
- {
- PKT_public_key *pk;
-
- rc = keydb_get_keyblock (hd, &keyblock);
- if (rc)
- {
- log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc));
- m_free (keys);
- return NULL;
- }
-
- if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY)
- {
- log_debug ("ooops: invalid pkttype %d encountered\n",
- keyblock->pkt->pkttype);
- dump_kbnode (keyblock);
- release_kbnode(keyblock);
- continue;
- }
-
- /* prepare the keyblock for further processing */
- merge_keys_and_selfsig (keyblock);
- clear_kbnode_flags (keyblock);
- pk = keyblock->pkt->pkt.public_key;
- if (pk->has_expired || pk->is_revoked)
- {
- /* it does not make sense to look further at those keys */
- mark_keyblock_seen (visited, keyblock);
- }
- else if (validate_one_keyblock (keyblock, klist, curtime, next_expire))
- {
- if (pk->expiredate && pk->expiredate >= curtime
- && pk->expiredate < *next_expire)
- *next_expire = pk->expiredate;
-
- if (nkeys == maxkeys) {
- maxkeys += 1000;
- keys = m_realloc (keys, (maxkeys+1) * sizeof *keys);
- }
- keys[nkeys++].keyblock = keyblock;
- /* this key is signed - don't check it again */
- mark_keyblock_seen (visited, keyblock);
- keyblock = NULL;
- }
-
- release_kbnode (keyblock);
- keyblock = NULL;
- }
- while ( !(rc = keydb_search (hd, &desc, 1)) );
- if (rc && rc != -1)
- {
- log_error ("keydb_search_next failed: %s\n", g10_errstr(rc));
- m_free (keys);
- return NULL;
- }
-
- keys[nkeys].keyblock = NULL;
- return keys;
-}
-
-
-static void
-reset_unconnected_keys (KEYDB_HANDLE hd, KeyHashTable visited)
-{
- int rc;
- KBNODE keyblock = NULL;
- KEYDB_SEARCH_DESC desc;
- int count = 0, nreset = 0;
-
- rc = keydb_search_reset (hd);
- if (rc)
- {
- log_error ("keydb_search_reset failed: %s\n", g10_errstr(rc));
- return;
- }
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FIRST;
- desc.skipfnc = search_skipfnc;
- desc.skipfncvalue = visited;
- rc = keydb_search (hd, &desc, 1);
- if (rc && rc != -1 )
- log_error ("keydb_search_first failed: %s\n", g10_errstr(rc));
- else if (!rc)
- {
- desc.mode = KEYDB_SEARCH_MODE_NEXT; /* change mode */
- do
- {
- rc = keydb_get_keyblock (hd, &keyblock);
- if (rc)
- {
- log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc));
- break;
- }
- count++;
-
- if (keyblock->pkt->pkttype == PKT_PUBLIC_KEY) /* paranoid assertion*/
- {
- nreset += clear_validity (keyblock->pkt->pkt.public_key);
- release_kbnode (keyblock);
- }
- }
- while ( !(rc = keydb_search (hd, &desc, 1)) );
- if (rc && rc != -1)
- log_error ("keydb_search_next failed: %s\n", g10_errstr(rc));
- }
- if (opt.verbose)
- log_info ("%d unconnected keys (%d trust records cleared)\n",
- count, nreset);
- do_sync ();
-}
-
-
-/*
- * Run the key validation procedure.
- *
- * This works this way:
- * Step 1: Find all ultimately trusted keys (UTK).
- * mark them all as seen and put them into klist.
- * Step 2: loop max_cert_times
- * Step 3: if OWNERTRUST of any key in klist is undefined
- * ask user to assign ownertrust
- * Step 4: Loop over all keys in the keyDB which are not marked seen
- * Step 5: if key is revoked or expired
- * mark key as seen
- * continue loop at Step 4
- * Step 6: For each user ID of that key signed by a key in klist
- * Calculate validity by counting trusted signatures.
- * Set validity of user ID
- * Step 7: If any signed user ID was found
- * mark key as seen
- * End Loop
- * Step 8: Build a new klist from all fully trusted keys from step 6
- * End Loop
- * Ready
- *
- */
-static int
-validate_keys (int interactive)
-{
- int rc = 0;
- int quit=0;
- struct key_item *klist = NULL;
- struct key_item *k;
- struct key_array *keys = NULL;
- struct key_array *kar;
- KEYDB_HANDLE kdb = NULL;
- KBNODE node;
- int depth;
- int key_count;
- int ot_unknown, ot_undefined, ot_never, ot_marginal, ot_full, ot_ultimate;
- KeyHashTable visited;
- u32 start_time, next_expire;
-
- start_time = make_timestamp ();
- next_expire = 0xffffffff; /* set next expire to the year 2106 */
- visited = new_key_hash_table ();
- /* Fixme: Instead of always building a UTK list, we could just build it
- * here when needed */
- if (!utk_list)
- {
- log_info ("no ultimately trusted keys found\n");
- goto leave;
- }
-
-
- /* mark all UTKs as visited and set validity to ultimate */
- for (k=utk_list; k; k = k->next)
- {
- KBNODE keyblock;
- PKT_public_key *pk;
-
- keyblock = get_pubkeyblock (k->kid);
- if (!keyblock)
- {
- log_error (_("public key of ultimately"
- " trusted key %08lX not found\n"), (ulong)k->kid[1]);
- continue;
- }
- mark_keyblock_seen (visited, keyblock);
- pk = keyblock->pkt->pkt.public_key;
- for (node=keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID)
- {
- byte namehash[20];
- PKT_user_id *uid = node->pkt->pkt.user_id;
-
- if( uid->attrib_data )
- rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len);
- else
- rmd160_hash_buffer (namehash, uid->name, uid->len );
- update_validity (pk, namehash, 0, TRUST_ULTIMATE);
- }
- }
- if ( pk->expiredate && pk->expiredate >= start_time
- && pk->expiredate < next_expire)
- next_expire = pk->expiredate;
-
- release_kbnode (keyblock);
- do_sync ();
- }
-
-
- klist = utk_list;
- kdb = keydb_new (0);
-
- for (depth=0; depth < opt.max_cert_depth; depth++)
- {
- /* See whether we should assign ownertrust values to the keys in
- utk_list. */
- ot_unknown = ot_undefined = ot_never = 0;
- ot_marginal = ot_full = ot_ultimate = 0;
- for (k=klist; k; k = k->next)
- {
- if (interactive && k->ownertrust == TRUST_UNKNOWN)
- k->ownertrust = ask_ownertrust (k->kid);
- if (k->ownertrust == -1)
- {
- quit=1;
- goto leave;
- }
- else if (k->ownertrust == TRUST_UNKNOWN)
- ot_unknown++;
- else if (k->ownertrust == TRUST_UNDEFINED)
- ot_undefined++;
- else if (k->ownertrust == TRUST_NEVER)
- ot_never++;
- else if (k->ownertrust == TRUST_MARGINAL)
- ot_marginal++;
- else if (k->ownertrust == TRUST_FULLY)
- ot_full++;
- else if (k->ownertrust == TRUST_ULTIMATE)
- ot_ultimate++;
- }
-
- /* Find all keys which are signed by a key in kdlist */
- keys = validate_key_list (kdb, visited, klist, start_time, &next_expire);
- if (!keys)
- {
- log_error ("validate_key_list failed\n");
- rc = G10ERR_GENERAL;
- goto leave;
- }
-
-
- for (key_count=0, kar=keys; kar->keyblock; kar++, key_count++)
- ;
-
- /* Store the calculated valididation status somewhere */
- if (opt.verbose > 1)
- dump_key_array (depth, keys);
-
- log_info (_("checking at depth %d signed=%d"
- " ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"),
- depth, key_count, ot_unknown, ot_undefined,
- ot_never, ot_marginal, ot_full, ot_ultimate );
-
- for (kar=keys; kar->keyblock; kar++)
- store_validation_status (depth, kar->keyblock);
-
- /* Build a new kdlist from all fully valid keys in KEYS */
- if (klist != utk_list)
- release_key_items (klist);
- klist = NULL;
- for (kar=keys; kar->keyblock; kar++)
- {
- for (node=kar->keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID && (node->flag & 4))
- {
- k = new_key_item ();
- keyid_from_pk (kar->keyblock->pkt->pkt.public_key, k->kid);
- k->ownertrust = get_ownertrust (kar->keyblock
- ->pkt->pkt.public_key);
- k->next = klist;
- klist = k;
- break;
- }
- }
- }
- release_key_array (keys);
- keys = NULL;
- if (!klist)
- break; /* no need to dive in deeper */
- }
-
- reset_unconnected_keys (kdb, visited);
-
- leave:
- keydb_release (kdb);
- release_key_array (keys);
- release_key_items (klist);
- release_key_hash_table (visited);
- if (!rc && !quit) /* mark trustDB as checked */
- {
- if (next_expire == 0xffffffff || next_expire < start_time )
- tdbio_write_nextcheck (0);
- else
- {
- tdbio_write_nextcheck (next_expire);
- log_info (_("next trustdb check due at %s\n"),
- strtimestamp (next_expire));
- }
- do_sync ();
- pending_check_trustdb = 0;
- }
- return rc;
-}
-
-
diff --git a/g10/trustdb.h b/g10/trustdb.h
deleted file mode 100644
index c94a2daa1..000000000
--- a/g10/trustdb.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* trustdb.h - Trust database
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef G10_TRUSTDB_H
-#define G10_TRUSTDB_H
-
-
-/* Trust values must be sorted in ascending order */
-#define TRUST_MASK 15
-#define TRUST_UNKNOWN 0 /* o: not yet calculated/assigned */
-#define TRUST_EXPIRED 1 /* e: calculation may be invalid */
-#define TRUST_UNDEFINED 2 /* q: not enough information for calculation */
-#define TRUST_NEVER 3 /* n: never trust this pubkey */
-#define TRUST_MARGINAL 4 /* m: marginally trusted */
-#define TRUST_FULLY 5 /* f: fully trusted */
-#define TRUST_ULTIMATE 6 /* u: ultimately trusted */
-/* trust values not covered by the mask */
-#define TRUST_FLAG_REVOKED 32 /* r: revoked */
-#define TRUST_FLAG_SUB_REVOKED 64 /* r: revoked but for subkeys */
-#define TRUST_FLAG_DISABLED 128 /* d: key/uid disabled */
-#define TRUST_FLAG_PENDING_CHECK 256 /* a check-trustdb is pending */
-
-/*-- trustdb.c --*/
-void register_trusted_key( const char *string );
-void check_trustdb (void);
-void update_trustdb (void);
-int setup_trustdb( int level, const char *dbname );
-void init_trustdb( void );
-void sync_trustdb( void );
-
-int trust_letter( unsigned value );
-
-void revalidation_mark (void);
-
-unsigned int get_validity (PKT_public_key *pk, const byte *namehash);
-int get_validity_info (PKT_public_key *pk, const byte *namehash);
-
-void list_trust_path( const char *username );
-
-int enum_cert_paths( void **context, ulong *lid,
- unsigned *ownertrust, unsigned *validity );
-void enum_cert_paths_print( void **context, FILE *fp,
- int refresh, ulong selected_lid );
-
-unsigned int get_ownertrust (PKT_public_key *pk);
-int get_ownertrust_info (PKT_public_key *pk);
-void update_ownertrust (PKT_public_key *pk, unsigned int new_trust );
-int clear_ownertrust (PKT_public_key *pk);
-
-
-/*-- tdbdump.c --*/
-void list_trustdb(const char *username);
-void export_ownertrust(void);
-void import_ownertrust(const char *fname);
-
-/*-- pkclist.c --*/
-int edit_ownertrust (PKT_public_key *pk, int mode );
-
-#endif /*G10_TRUSTDB_H*/
diff --git a/g10/verify.c b/g10/verify.c
deleted file mode 100644
index 7ab20c140..000000000
--- a/g10/verify.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* verify.c - verify signed data
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <unistd.h> /* for isatty() */
-
-#include "options.h"
-#include "packet.h"
-#include "errors.h"
-#include "iobuf.h"
-#include "keydb.h"
-#include "memory.h"
-#include "util.h"
-#include "main.h"
-#include "status.h"
-#include "filter.h"
-#include "ttyio.h"
-#include "i18n.h"
-
-
-
-/****************
- * Assume that the input is a signature and verify it without
- * generating any output. With no arguments, the signature packet
- * is read from stdin (it may be a detached signature when not
- * used in batch mode). If only a sigfile is given, it may be a complete
- * signature or a detached signature in which case the signed stuff
- * is expected from stdin. With more than 1 argument, the first should
- * be a detached signature and the remaining files are the signed stuff.
- */
-
-int
-verify_signatures( int nfiles, char **files )
-{
- IOBUF fp;
- armor_filter_context_t afx;
- const char *sigfile;
- int i, rc;
- STRLIST sl;
-
- memset( &afx, 0, sizeof afx);
- /* decide whether we should handle a detached or a normal signature,
- * which is needed so that the code later can hash the correct data and
- * not have a normal signature act as detached signature and ignoring the
- * indended signed material from the 2nd file or stdin.
- * 1. gpg <file - normal
- * 2. gpg file - normal (or detached)
- * 3. gpg file <file2 - detached
- * 4. gpg file file2 - detached
- * The question is how decide between case 2 and 3? The only way
- * we can do it is by reading one byte from stdin and the unget
- * it; the problem here is that we may be reading from the
- * terminal (which could be detected using isatty() but won't work
- * when under contol of a pty using program (e.g. expect)) and
- * might get us in trouble when stdin is used for another purpose
- * (--passphrase-fd 0). So we have to break with the behaviour
- * prior to gpg 1.0.4 by assuming that case 3 is a normal
- * signature (where file2 is ignored and require for a detached
- * signature to indicate signed material comes from stdin by using
- * case 4 with a file2 of "-".
- *
- * Actually we don't have to change anything here but can handle
- * that all quite easily in mainproc.c
- */
-
-
- sigfile = nfiles? *files : NULL;
-
- /* open the signature file */
- fp = iobuf_open(sigfile);
- if( !fp ) {
- log_error(_("can't open `%s'\n"), print_fname_stdin(sigfile));
- return G10ERR_OPEN_FILE;
- }
-
- if( !opt.no_armor && use_armor_filter( fp ) )
- iobuf_push_filter( fp, armor_filter, &afx );
-
- sl = NULL;
- for(i=1 ; i < nfiles; i++ )
- add_to_strlist( &sl, files[i] );
- rc = proc_signature_packets( NULL, fp, sl, sigfile );
- free_strlist(sl);
- iobuf_close(fp);
- if( afx.no_openpgp_data && rc == -1 ) {
- log_error(_("the signature could not be verified.\n"
- "Please remember that the signature file (.sig or .asc)\n"
- "should be the first file given on the command line.\n") );
- rc = 0;
- }
-
- return rc;
-}
-
-
-void
-print_file_status( int status, const char *name, int what )
-{
- char *p = m_alloc(strlen(name)+10);
- sprintf(p, "%d %s", what, name );
- write_status_text( status, p );
- m_free(p);
-}
-
-
-static int
-verify_one_file( const char *name )
-{
- IOBUF fp;
- armor_filter_context_t afx;
- int rc;
-
- print_file_status( STATUS_FILE_START, name, 1 );
- fp = iobuf_open(name);
- if( !fp ) {
- print_file_status( STATUS_FILE_ERROR, name, 1 );
- log_error(_("can't open `%s'\n"), print_fname_stdin(name));
- return G10ERR_OPEN_FILE;
- }
-
- if( !opt.no_armor ) {
- if( use_armor_filter( fp ) ) {
- memset( &afx, 0, sizeof afx);
- iobuf_push_filter( fp, armor_filter, &afx );
- }
- }
-
- rc = proc_signature_packets( NULL, fp, NULL, name );
- iobuf_close(fp);
- write_status( STATUS_FILE_DONE );
- return rc;
-}
-
-/****************
- * Verify each file given in the files array or read the names of the
- * files from stdin.
- * Note: This function can not handle detached signatures.
- */
-int
-verify_files( int nfiles, char **files )
-{
- int i;
-
- if( !nfiles ) { /* read the filenames from stdin */
- char line[2048];
- unsigned int lno = 0;
-
- while( fgets(line, DIM(line), stdin) ) {
- lno++;
- if( !*line || line[strlen(line)-1] != '\n' ) {
- log_error(_("input line %u too long or missing LF\n"), lno );
- return G10ERR_GENERAL;
- }
- /* This code does not work on MSDOS but how cares there are
- * also no script languages available. We don't strip any
- * spaces, so that we can process nearly all filenames */
- line[strlen(line)-1] = 0;
- verify_one_file( line );
- }
-
- }
- else { /* take filenames from the array */
- for(i=0; i < nfiles; i++ )
- verify_one_file( files[i] );
- }
- return 0;
-}
diff --git a/gnupg.txt b/gnupg.txt
deleted file mode 100644
index 4bb5603c1..000000000
--- a/gnupg.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-%%comments:
-Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the file COPYING.
-
-%%name: GnuPG
-
-%%short-description: Complete implementation of the OpenPGP Internet standard.
-
-%%full-description: A complete and free replacement for PGP. The
-program does not use any patented algorithms, and can be used as a
-filter program. Can handle all OpenPGP messages and messages generated
-by PGP 5.0 and newer unless they use the IDEA algorithm.
-
-Supports ElGamal (signature and encrytion), DSA, AES, 3DES, Blowfish,
-Twofish, CAST5, MD5, SHA-1, RIPE-MD-160 and TIGER, and has language
-support for sixteen different languages.
-
-It is believed to be fully OpenPGP (as defined in RFC2440) conform,
-and has integrated support for HKP keyservers. There are a lot of
-useful extra features like anonymous message recipients.
-
-%%category: security, administration, email
-
-%%license: GPL
-
-%%maintainer: Werner Koch <wk@gnupg.org>
-
-%%interface: Command line
-
-%%updated: 1 Jun 2001
-
-%%keywords: PGP, security, decryption, encryption, digital signatures
-
-%%programs:
-
-%%GNU: yes
-
-%%web-page: http://www.gnupg.org/
-
-%%support: Paid extension/consulting from http://www.g10code.com
-
-%%doc: English user manual available from:
-http://www.gnupg.org/gph/index.html; Spanish user manual available from:
-http://www.gnupg.org/gph/index.html; English HOWTO available from
-http://www.dewinter.com/gnupg_howto/english/; French HOWTO available
-from http://www.gnupg.org/howtos/fr/; German HOWTO available from
-http://www.gnupg.org/howtos/de/; Spanish HOWTO available from
-http://www.dewinter.com/gnupg_howto/spanish.
-
-%%developers: Matthew Skala, Michael Roth, Niklas Hernaeus, Remi
-Guyomarch, Werner Koch <wk@gnupg.org>.
-
-%%contributors: J. Michael Ashley
-
-%%sponsors: German Federal Ministry of Economics and Technology
-
-%%source: ftp://ftp.gnupg.org/gcrypt/gnupg
-
-%%debian: http://www.debian.org/Packages/stable/non-us/gnupg.html
-
-%%redhat: http://www.megaloman.com/~hany/RPM/gnupg.html
-
-%%repository: See http://www.gnupg.org/cvs-access.html
-
-%%related: shred
-
-%%source-language: C
-
-%%supported-languages:
-
-%%use-requirements:
-
-%%build-prerequisites:
-
-%%weak-prerequisites:
-
-%%source-prerequisites:
-
-%%version: 1.0.6 stable released on 29 May 2001
-
-%%announce-list: announce@gnupg.org
-
-%%announce-news:
-
-%%help-list: gnupg-users@gnupg.org
-
-%%help-news:
-
-%%dev-list: gnupg-devel@gnupg.org
-
-%%dev-news:
-
-%%bug-list: bug-gnupg@gnupg.org
diff --git a/include/ChangeLog b/include/ChangeLog
deleted file mode 100644
index 748778a20..000000000
--- a/include/ChangeLog
+++ /dev/null
@@ -1,310 +0,0 @@
-2002-10-14 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.h: Go to KEYSERVER_PROTO_VERSION 1.
-
-2002-10-08 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.h: Add new error code KEYSERVER_UNREACHABLE.
-
-2002-10-03 David Shaw <dshaw@jabberwocky.com>
-
- * util.h: Add new log_warning logger command which can be switched
- between log_info and log_error via log_set_strict.
-
-2002-09-24 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.h: Add some new error codes for better GPA support.
-
-2002-09-10 Werner Koch <wk@gnupg.org>
-
- * mpi.h (mpi_is_protected, mpi_set_protect_flag)
- (mpi_clear_protect_flag): Removed.
- (mpi_get_nbit_info, mpi_set_nbit_info): Removed.
-
-2002-08-13 David Shaw <dshaw@jabberwocky.com>
-
- * cipher.h: Add AES aliases for RIJNDAEL algo numbers.
-
-2002-08-07 David Shaw <dshaw@jabberwocky.com>
-
- * cipher.h: Add md_algo_present().
-
-2002-08-06 Stefan Bellon <sbellon@sbellon.de>
-
- * util.h [__riscos__]: Added riscos_getchar().
-
-2002-06-21 Stefan Bellon <sbellon@sbellon.de>
-
- * util.h [__riscos__]: Further moving away of RISC OS specific
- stuff from general code.
-
-2002-06-20 Stefan Bellon <sbellon@sbellon.de>
-
- * util.h [__riscos__]: Added riscos_set_filetype().
-
-2002-06-14 David Shaw <dshaw@jabberwocky.com>
-
- * util.h: Add pop_strlist() from strgutil.c.
-
-2002-06-07 Stefan Bellon <sbellon@sbellon.de>
-
- * util.h [__riscos__]: RISC OS needs strings.h for strcasecmp()
- and strncasecmp().
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * util.h: Add strncasecmp. Removed stricmp and memicmp.
-
-2002-05-10 Stefan Bellon <sbellon@sbellon.de>
-
- * mpi.h: New function mpi_debug_alloc_like for M_DEBUG.
-
- * util.h [__riscos__]: Make use of __func__ that later
- Norcroft compiler provides.
-
- * memory.h: Fixed wrong definition of m_alloc_secure_clear.
-
-2002-04-23 David Shaw <dshaw@jabberwocky.com>
-
- * util.h: New function answer_is_yes_no_default() to give a
- default answer.
-
-2002-04-22 Stefan Bellon <sbellon@sbellon.de>
-
- * util.h [__riscos__]: Removed riscos_open, riscos_fopen and
- riscos_fstat as those special versions aren't needed anymore.
-
-2002-02-19 David Shaw <dshaw@jabberwocky.com>
-
- * keyserver.h: Add KEYSERVER_NOT_SUPPORTED for unsupported actions
- (say, a keyserver that has no way to search, or a readonly
- keyserver that has no way to add).
-
-2002-01-02 Stefan Bellon <sbellon@sbellon.de>
-
- * util.h [__riscos__]: Updated prototype list.
-
- * types.h [__riscos__]: Changed comment wording.
-
-2001-12-27 David Shaw <dshaw@jabberwocky.com>
-
- * KEYSERVER_SCHEME_NOT_FOUND should be 127 to match the POSIX
- system() (via /bin/sh) way of signaling this.
-
- * Added G10ERR_KEYSERVER
-
-2001-12-27 Werner Koch <wk@gnupg.org>
-
- * util.h [MINGW32]: Fixed name of include file.
-
-2001-12-22 Timo Schulz <ts@winpt.org>
-
- * util.h (is_file_compressed): New.
-
-2001-12-19 Werner Koch <wk@gnupg.org>
-
- * util.h [CYGWIN32]: Allow this as an alias for MINGW32. Include
- stdarg.h becuase we use the va_list type. By Disastry.
-
-2001-09-28 Werner Koch <wk@gnupg.org>
-
- * cipher.h (PUBKEY_USAGE_CERT): New.
-
-2001-09-07 Werner Koch <wk@gnupg.org>
-
- * util.h: Add strsep().
-
-2001-08-30 Werner Koch <wk@gnupg.org>
-
- * cipher.h (DEK): Added use_mdc.
-
-2001-08-24 Werner Koch <wk@gnupg.org>
-
- * cipher.h (md_write): Made buf arg const.
-
-2001-08-20 Werner Koch <wk@gnupg.org>
-
- * cipher.h (DEK): Added algo_info_printed;
-
- * util.h [__riscos__]: Added prototypes and made sure that we
- never use __attribute__.
- * cipher.h, iobuf.h, memory.h, mpi.h [__riscos__]: extern hack.
- * i18n.h [__riscos__]: Use another include file
-
-2001-05-30 Werner Koch <wk@gnupg.org>
-
- * ttyio.h (tty_printf): Add missing parenthesis for non gcc.
- * http.h: Removed trailing comma to make old ccs happy. Both are
- by Albert Chin.
-
-2001-05-25 Werner Koch <wk@gnupg.org>
-
- * ttyio.h (tty_printf): Add printf attribute.
-
-2001-04-23 Werner Koch <wk@gnupg.org>
-
- * http.h: New flag HTTP_FLAG_NO_SHUTDOWN.
-
-2001-04-13 Werner Koch <wk@gnupg.org>
-
- * iobuf.h: Removed iobuf_fopen.
-
-2001-03-01 Werner Koch <wk@gnupg.org>
-
- * errors.h (G10ERR_UNU_SECKEY,G10ERR_UNU_PUBKEY): New
-
-2000-11-30 Werner Koch <wk@gnupg.org>
-
- * iobuf.h (iobuf_translate_file_handle): Add prototype.
-
-2000-11-11 Paul Eggert <eggert@twinsun.com>
-
- * iobuf.h (iobuf_get_filelength): Now returns off_t, not u32.
- (struct iobuf_struct, iobuf_set_limit,
- iobuf_tell, iobuf_seek): Use off_t, not ulong, for file offsets.
-
-2000-10-12 Werner Koch <wk@gnupg.org>
-
- * mpi.h: Changed the way mpi_limb_t is defined.
-
-Wed Sep 6 17:55:47 CEST 2000 Werner Koch <wk@openit.de>
-
- * iobuf.c (IOBUF_FILELENGTH_LIMIT): New.
-
-2000-03-14 14:03:43 Werner Koch (wk@habibti.openit.de)
-
- * types.h (HAVE_U64_TYPEDEF): Defined depending on configure test.
-
-Thu Jan 13 19:31:58 CET 2000 Werner Koch <wk@gnupg.de>
-
- * types.h (HAVE_U64_TYPEDEF): Add a test for _LONGLONG which fixes
- this long living SGI bug. Reported by Alec Habig.
-
-Sat Dec 4 12:30:28 CET 1999 Werner Koch <wk@gnupg.de>
-
- * iobuf.h (IOBUFCTRL_CANCEL): Nww.
-
-Mon Oct 4 21:23:04 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * errors.h (G10ERR_NOT_PROCESSED): New.
-
-Wed Sep 15 16:22:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * i18n.h: Add support for simple-gettext.
-
-Tue Jun 29 21:44:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * util.h (stricmp): Use strcasecmp as replacement.
-
-Sat Jun 26 12:15:59 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * cipher.h (MD_HANDLE): Assigned a structure name.
-
-Fri Apr 9 12:26:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.h (BLOWFISH160): Removed.
-
-Tue Apr 6 19:58:12 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * cipher.h (DEK): increased max. key length to 32 bytes
-
-
-Sat Feb 20 21:40:49 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * g10lib.h: Removed file and changed all files that includes this.
-
-Tue Feb 16 14:10:02 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * types.h (STRLIST): Add field flags.
-
-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.
-
-Mon Dec 14 21:18:49 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * types.h: fix for SUNPRO_C
-
-Tue Dec 8 13:15:16 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpi.h (MPI): Changed the structure name to gcry_mpi and
- changed all users.
-
-Tue Oct 20 11:40:00 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.h (iobuf_get_temp_buffer): New.
-
-Tue Oct 13 12:40:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.h (iobuf_get): Now uses .nofast
- (iobuf_get2): Removed.
-
-Mon Sep 14 09:17:22 1998 Werner Koch (wk@(none))
-
- * util.h (HAVE_ATEXIT): New.
- (HAVE_RAISE): New.
-
-Mon Jul 6 10:41:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h (PUBKEY_USAGE_): New.
-
-Mon Jul 6 09:49:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.h (iobuf_set_error): New.
- (iobuf_error): New.
-
-Sat Jun 13 17:31:32 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * g10lib.h: New as interface for the g10lib.
-
-Mon Jun 8 22:14:48 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h (CIPHER_ALGO_CAST5): Changed name from .. CAST
-
-Thu May 21 13:25:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h: removed ROT 5 and changed one id and add dummy
-
-Tue May 19 18:09:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h (DIGEST_ALGO_TIGER): Chnaged id from 101 to 6.
-
-Mon May 4 16:37:17 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h (PUBKEY_ALGO_ELGAMAL_E): New, with value of the
- old one.
- * (is_ELGAMAL, is_RSA): New macros
-
-Sun Apr 26 14:35:24 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * types.h: New type u64
-
-Mon Mar 9 12:59:55 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h: Included dsa.h.
-
-Tue Mar 3 15:11:21 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * cipher.h (random.h): Add new header and move all relevalt
- functions to this header.
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/include/cipher.h b/include/cipher.h
deleted file mode 100644
index 5a8982244..000000000
--- a/include/cipher.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* cipher.h
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_CIPHER_H
-#define G10_CIPHER_H
-
-#define DBG_CIPHER g10c_debug_mode
-
-#include "mpi.h"
-#include "../cipher/random.h"
-
-
-#define CIPHER_ALGO_NONE 0
-#define CIPHER_ALGO_IDEA 1
-#define CIPHER_ALGO_3DES 2
-#define CIPHER_ALGO_CAST5 3
-#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
-#define CIPHER_ALGO_SAFER_SK128 5
-#define CIPHER_ALGO_DES_SK 6
-#define CIPHER_ALGO_AES 7
-#define CIPHER_ALGO_AES192 8
-#define CIPHER_ALGO_AES256 9
-#define CIPHER_ALGO_RIJNDAEL CIPHER_ALGO_AES
-#define CIPHER_ALGO_RIJNDAEL192 CIPHER_ALGO_AES192
-#define CIPHER_ALGO_RIJNDAEL256 CIPHER_ALGO_AES256
-#define CIPHER_ALGO_TWOFISH 10 /* twofish 256 bit */
-#define CIPHER_ALGO_SKIPJACK 101 /* experimental: skipjack */
-#define CIPHER_ALGO_TWOFISH_OLD 102 /* experimental: twofish 128 bit */
-#define CIPHER_ALGO_DUMMY 110 /* no encryption at all */
-
-#define PUBKEY_ALGO_RSA 1
-#define PUBKEY_ALGO_RSA_E 2 /* RSA encrypt only */
-#define PUBKEY_ALGO_RSA_S 3 /* RSA sign only */
-#define PUBKEY_ALGO_ELGAMAL_E 16 /* encrypt only ElGamal (but not for v3)*/
-#define PUBKEY_ALGO_DSA 17
-#define PUBKEY_ALGO_ELGAMAL 20 /* sign and encrypt elgamal */
-
-#define PUBKEY_USAGE_SIG 1 /* key is good for signatures */
-#define PUBKEY_USAGE_ENC 2 /* key is good for encryption */
-#define PUBKEY_USAGE_CERT 4 /* key is also good to certify other keys*/
-
-#define DIGEST_ALGO_MD5 1
-#define DIGEST_ALGO_SHA1 2
-#define DIGEST_ALGO_RMD160 3
-#define DIGEST_ALGO_TIGER 6
-
-#define is_RSA(a) ((a)==PUBKEY_ALGO_RSA || (a)==PUBKEY_ALGO_RSA_E \
- || (a)==PUBKEY_ALGO_RSA_S )
-#define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL || (a)==PUBKEY_ALGO_ELGAMAL_E)
-
-typedef struct {
- int algo;
- int keylen;
- int algo_info_printed;
- int use_mdc;
- byte key[32]; /* this is the largest used keylen (256 bit) */
-} DEK;
-
-struct cipher_handle_s;
-typedef struct cipher_handle_s *CIPHER_HANDLE;
-
-
-#define CIPHER_MODE_ECB 1
-#define CIPHER_MODE_CFB 2
-#define CIPHER_MODE_PHILS_CFB 3
-#define CIPHER_MODE_AUTO_CFB 4
-#define CIPHER_MODE_DUMMY 5 /* used with algo DUMMY for no encryption */
-#define CIPHER_MODE_CBC 6
-
-struct md_digest_list_s;
-
-struct gcry_md_context {
- int secure;
- FILE *debug;
- int finalized;
- struct md_digest_list_s *list;
- int bufcount;
- int bufsize;
- byte buffer[1];
-};
-
-typedef struct gcry_md_context *MD_HANDLE;
-
-#ifndef EXTERN_UNLESS_MAIN_MODULE
- #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
- #define EXTERN_UNLESS_MAIN_MODULE extern
- #else
- #define EXTERN_UNLESS_MAIN_MODULE
- #endif
-#endif
-EXTERN_UNLESS_MAIN_MODULE int g10c_debug_mode;
-EXTERN_UNLESS_MAIN_MODULE int g10_opt_verbose;
-EXTERN_UNLESS_MAIN_MODULE const char *g10_opt_homedir;
-
-
-/*-- dynload.c --*/
-void register_cipher_extension( const char *mainpgm, const char *fname );
-
-/*-- md.c --*/
-int string_to_digest_algo( const char *string );
-const char * digest_algo_to_string( int algo );
-int check_digest_algo( int algo );
-MD_HANDLE md_open( int algo, int secure );
-void md_enable( MD_HANDLE hd, int algo );
-MD_HANDLE md_copy( MD_HANDLE a );
-void md_reset( MD_HANDLE a );
-void md_close(MD_HANDLE a);
-void md_write( MD_HANDLE a, const byte *inbuf, size_t inlen);
-void md_final(MD_HANDLE a);
-byte *md_read( MD_HANDLE a, int algo );
-int md_digest( MD_HANDLE a, int algo, byte *buffer, int buflen );
-int md_get_algo( MD_HANDLE a );
-int md_algo_present( MD_HANDLE a, int algo );
-int md_digest_length( int algo );
-const byte *md_asn_oid( int algo, size_t *asnlen, size_t *mdlen );
-void md_start_debug( MD_HANDLE a, const char *suffix );
-void md_stop_debug( MD_HANDLE a );
-#define md_is_secure(a) ((a)->secure)
-#define md_putc(h,c) \
- do { \
- if( (h)->bufcount == (h)->bufsize ) \
- md_write( (h), NULL, 0 ); \
- (h)->buffer[(h)->bufcount++] = (c) & 0xff; \
- } while(0)
-
-void rmd160_hash_buffer (char *outbuf, const char *buffer, size_t length);
-
-
-/*-- cipher.c --*/
-int string_to_cipher_algo( const char *string );
-const char * cipher_algo_to_string( int algo );
-void disable_cipher_algo( int algo );
-int check_cipher_algo( int algo );
-unsigned cipher_get_keylen( int algo );
-unsigned cipher_get_blocksize( int algo );
-CIPHER_HANDLE cipher_open( int algo, int mode, int secure );
-void cipher_close( CIPHER_HANDLE c );
-int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen );
-void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen );
-void cipher_encrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes );
-void cipher_decrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes );
-void cipher_sync( CIPHER_HANDLE c );
-
-/*-- pubkey.c --*/
-#define PUBKEY_MAX_NPKEY 4
-#define PUBKEY_MAX_NSKEY 6
-#define PUBKEY_MAX_NSIG 2
-#define PUBKEY_MAX_NENC 2
-
-int string_to_pubkey_algo( const char *string );
-const char * pubkey_algo_to_string( int algo );
-void disable_pubkey_algo( int algo );
-int check_pubkey_algo( int algo );
-int check_pubkey_algo2( int algo, unsigned use );
-int pubkey_get_npkey( int algo );
-int pubkey_get_nskey( int algo );
-int pubkey_get_nsig( int algo );
-int pubkey_get_nenc( int algo );
-unsigned pubkey_nbits( int algo, MPI *pkey );
-int pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors );
-int pubkey_check_secret_key( int algo, MPI *skey );
-int pubkey_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey );
-int pubkey_decrypt( int algo, MPI *result, MPI *data, MPI *skey );
-int pubkey_sign( int algo, MPI *resarr, MPI hash, MPI *skey );
-int pubkey_verify( int algo, MPI hash, MPI *data, MPI *pkey,
- int (*cmp)(void *, MPI), void *opaque );
-
-/*-- smallprime.c --*/
-extern ushort small_prime_numbers[];
-
-/*-- primegen.c --*/
-void register_primegen_progress ( void (*cb)( void *, int), void *cb_data );
-MPI generate_secret_prime( unsigned nbits );
-MPI generate_public_prime( unsigned nbits );
-MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits,
- MPI g, MPI **factors );
-
-/*-- elsewhere --*/
-void register_pk_dsa_progress ( void (*cb)( void *, int), void *cb_data );
-void register_pk_elg_progress ( void (*cb)( void *, int), void *cb_data );
-
-#endif /*G10_CIPHER_H*/
diff --git a/include/distfiles b/include/distfiles
deleted file mode 100644
index fe9c41c7f..000000000
--- a/include/distfiles
+++ /dev/null
@@ -1,14 +0,0 @@
-cipher.h
-errors.h
-iobuf.h
-memory.h
-mpi.h
-ttyio.h
-types.h
-util.h
-i18n.h
-host2net.h
-http.h
-keyserver.h
-
-ChangeLog
diff --git a/include/http.h b/include/http.h
deleted file mode 100644
index 7e79ed2c1..000000000
--- a/include/http.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* http.h - HTTP protocol handler
- * Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_HTTP_H
-#define G10_HTTP_H 1
-
-#include "iobuf.h"
-
-struct uri_tuple {
- struct uri_tuple *next;
- const char *name; /* a pointer into name */
- char *value; /* a pointer to value (a Nul is always appended) */
- size_t valuelen; /* and the real length of the value */
- /* because the value may contain embedded Nuls */
-};
-typedef struct uri_tuple *URI_TUPLE;
-
-struct parsed_uri {
- /* all these pointers point into buffer; most stuff is not escaped */
- char *scheme; /* pointer to the scheme string (lowercase) */
- char *host; /* host (converted to lowercase) */
- ushort port; /* port (always set if the host is set) */
- char *path; /* the path */
- URI_TUPLE params; /* ";xxxxx" */
- URI_TUPLE query; /* "?xxx=yyy" */
- char buffer[1]; /* buffer which holds a (modified) copy of the URI */
-};
-typedef struct parsed_uri *PARSED_URI;
-
-typedef enum {
- HTTP_REQ_GET = 1,
- HTTP_REQ_HEAD = 2,
- HTTP_REQ_POST = 3
-} HTTP_REQ_TYPE;
-
-enum { /* put flag values into an enum, so that gdb can display them */
- HTTP_FLAG_TRY_PROXY = 1,
- HTTP_FLAG_NO_SHUTDOWN = 2
-};
-
-struct http_context {
- int initialized;
- unsigned int status_code;
- int sock;
- int in_data;
- IOBUF fp_read;
- IOBUF fp_write;
- int is_http_0_9;
- PARSED_URI uri;
- HTTP_REQ_TYPE req_type;
- byte *buffer; /* line buffer */
- unsigned buffer_size;
- unsigned int flags;
-};
-typedef struct http_context *HTTP_HD;
-
-int http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url,
- unsigned int flags );
-void http_start_data( HTTP_HD hd );
-int http_wait_response( HTTP_HD hd, unsigned int *ret_status );
-void http_close( HTTP_HD hd );
-
-int http_open_document( HTTP_HD hd, const char *document, unsigned int flags );
-
-#endif /*G10_HTTP_H*/
diff --git a/include/i18n.h b/include/i18n.h
deleted file mode 100644
index 0b270687a..000000000
--- a/include/i18n.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* i18n.h
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_I18N_H
-#define G10_I18N_H
-
-#ifdef USE_SIMPLE_GETTEXT
- int set_gettext_file( const char *filename );
- const char *gettext( const char *msgid );
-
- #define _(a) gettext (a)
- #define N_(a) (a)
-
-#else
-#ifdef HAVE_LOCALE_H
- #include <locale.h> /* suggested by Ernst Molitor */
-#endif
-
-#ifdef ENABLE_NLS
-#ifndef __riscos__
- #include <libintl.h>
-#else
- #include "libgettext.h"
-#endif /* __riscos__ */
- #define _(a) gettext (a)
- #ifdef gettext_noop
- #define N_(a) gettext_noop (a)
- #else
- #define N_(a) (a)
- #endif
-#else
- #define _(a) (a)
- #define N_(a) (a)
-#endif
-#endif /* !USE_SIMPLE_GETTEXT */
-
-#endif /*G10_I18N_H*/
diff --git a/include/iobuf.h b/include/iobuf.h
deleted file mode 100644
index f94cf4d28..000000000
--- a/include/iobuf.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* iobuf.h - I/O buffer
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef G10_IOBUF_H
-#define G10_IOBUF_H
-
-#include "types.h"
-
-
-#define DBG_IOBUF iobuf_debug_mode
-
-
-#define IOBUFCTRL_INIT 1
-#define IOBUFCTRL_FREE 2
-#define IOBUFCTRL_UNDERFLOW 3
-#define IOBUFCTRL_FLUSH 4
-#define IOBUFCTRL_DESC 5
-#define IOBUFCTRL_CANCEL 6
-#define IOBUFCTRL_USER 16
-
-typedef struct iobuf_struct *IOBUF;
-
-/* fixme: we should hide most of this stuff */
-struct iobuf_struct {
- int use; /* 1 input , 2 output, 3 temp */
- off_t nlimit;
- off_t nbytes; /* used together with nlimit */
- off_t ntotal; /* total bytes read (position of stream) */
- int nofast; /* used by the iobuf_get() */
- void *directfp;
- struct {
- size_t size; /* allocated size */
- size_t start; /* number of invalid bytes at the begin of the buffer */
- size_t len; /* currently filled to this size */
- byte *buf;
- } d;
- int filter_eof;
- int error;
- int (*filter)( void *opaque, int control,
- IOBUF chain, byte *buf, size_t *len);
- void *filter_ov; /* value for opaque */
- int filter_ov_owner;
- char *real_fname;
- IOBUF chain; /* next iobuf used for i/o if any (passed to filter) */
- int no, subno;
- const char *desc;
- void *opaque; /* can be used to hold any information */
- /* this value is copied to all instances */
- struct {
- size_t size; /* allocated size */
- size_t start; /* number of invalid bytes at the begin of the buffer */
- size_t len; /* currently filled to this size */
- byte *buf;
- } unget;
-};
-
-#ifndef EXTERN_UNLESS_MAIN_MODULE
- #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
- #define EXTERN_UNLESS_MAIN_MODULE extern
- #else
- #define EXTERN_UNLESS_MAIN_MODULE
- #endif
-#endif
-EXTERN_UNLESS_MAIN_MODULE int iobuf_debug_mode;
-
-void iobuf_enable_special_filenames ( int yes );
-IOBUF iobuf_alloc(int use, size_t bufsize);
-IOBUF iobuf_temp(void);
-IOBUF iobuf_temp_with_content( const char *buffer, size_t length );
-IOBUF iobuf_open( const char *fname );
-IOBUF iobuf_fdopen( int fd, const char *mode );
-IOBUF iobuf_sockopen( int fd, const char *mode );
-IOBUF iobuf_create( const char *fname );
-IOBUF iobuf_append( const char *fname );
-IOBUF iobuf_openrw( const char *fname );
-int iobuf_ioctl ( IOBUF a, int cmd, int intval, void *ptrval );
-int iobuf_close( IOBUF iobuf );
-int iobuf_cancel( IOBUF iobuf );
-
-int iobuf_push_filter( IOBUF a, int (*f)(void *opaque, int control,
- IOBUF chain, byte *buf, size_t *len), void *ov );
-int iobuf_push_filter2( IOBUF a,
- int (*f)(void *opaque, int control,
- IOBUF chain, byte *buf, size_t *len),
- void *ov, int rel_ov );
-int iobuf_flush(IOBUF a);
-void iobuf_clear_eof(IOBUF a);
-#define iobuf_set_error(a) do { (a)->error = 1; } while(0)
-#define iobuf_error(a) ((a)->error)
-
-void iobuf_set_limit( IOBUF a, off_t nlimit );
-
-off_t iobuf_tell( IOBUF a );
-int iobuf_seek( IOBUF a, off_t newpos );
-
-int iobuf_readbyte(IOBUF a);
-int iobuf_read(IOBUF a, byte *buf, unsigned buflen );
-unsigned iobuf_read_line( IOBUF a, byte **addr_of_buffer,
- unsigned *length_of_buffer, unsigned *max_length );
-int iobuf_peek(IOBUF a, byte *buf, unsigned buflen );
-int iobuf_writebyte(IOBUF a, unsigned c);
-int iobuf_write(IOBUF a, byte *buf, unsigned buflen );
-int iobuf_writestr(IOBUF a, const char *buf );
-
-void iobuf_flush_temp( IOBUF temp );
-int iobuf_write_temp( IOBUF a, IOBUF temp );
-size_t iobuf_temp_to_buffer( IOBUF a, byte *buffer, size_t buflen );
-void iobuf_unget_and_close_temp( IOBUF a, IOBUF temp );
-
-off_t iobuf_get_filelength( IOBUF a );
-#define IOBUF_FILELENGTH_LIMIT 0xffffffff
-const char *iobuf_get_real_fname( IOBUF a );
-const char *iobuf_get_fname( IOBUF a );
-
-void iobuf_set_block_mode( IOBUF a, size_t n );
-void iobuf_set_partial_block_mode( IOBUF a, size_t len );
-int iobuf_in_block_mode( IOBUF a );
-
-int iobuf_translate_file_handle ( int fd, int for_write );
-
-
-/* get a byte form the iobuf; must check for eof prior to this function
- * this function returns values in the range 0 .. 255 or -1 to indicate EOF
- * iobuf_get_noeof() does not return -1 to indicate EOF, but masks the
- * returned value to be in the range 0 ..255.
- */
-#define iobuf_get(a) \
- ( ((a)->nofast || (a)->d.start >= (a)->d.len )? \
- iobuf_readbyte((a)) : ( (a)->nbytes++, (a)->d.buf[(a)->d.start++] ) )
-#define iobuf_get_noeof(a) (iobuf_get((a))&0xff)
-
-/* write a byte to the iobuf and return true on write error
- * This macro does only write the low order byte
- */
-#define iobuf_put(a,c) iobuf_writebyte(a,c)
-
-#define iobuf_where(a) "[don't know]"
-#define iobuf_id(a) ((a)->no)
-
-#define iobuf_get_temp_buffer(a) ( (a)->d.buf )
-#define iobuf_get_temp_length(a) ( (a)->d.len )
-#define iobuf_is_temp(a) ( (a)->use == 3 )
-
-#endif /*G10_IOBUF_H*/
diff --git a/include/memory.h b/include/memory.h
deleted file mode 100644
index 6a364795b..000000000
--- a/include/memory.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* memory.h - memory allocation
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#ifndef G10_MEMORY_H
-#define G10_MEMORY_H
-
-#ifdef M_DEBUG
-#ifndef STR
- #define STR(v) #v
-#endif
-#ifndef __riscos__
- #define M_DBGINFO(a) __FUNCTION__ "["__FILE__ ":" STR(a) "]"
-#else /* __riscos__ */
- #define M_DBGINFO(a) "["__FILE__ ":" STR(a) "]"
-#endif /* __riscos__ */
-#define m_alloc(n) m_debug_alloc((n), M_DBGINFO( __LINE__ ) )
-#define m_alloc_clear(n) m_debug_alloc_clear((n), M_DBGINFO(__LINE__) )
-#define m_alloc_secure(n) m_debug_alloc((n), M_DBGINFO(__LINE__) )
-#define m_alloc_secure_clear(n) m_debug_alloc_secure_clear((n), M_DBGINFO(__LINE__) )
-#define m_realloc(n,m) m_debug_realloc((n),(m), M_DBGINFO(__LINE__) )
-#define m_free(n) m_debug_free((n), M_DBGINFO(__LINE__) )
-#define m_check(n) m_debug_check((n), M_DBGINFO(__LINE__) )
-/*#define m_copy(a) m_debug_copy((a), M_DBGINFO(__LINE__) )*/
-#define m_strdup(a) m_debug_strdup((a), M_DBGINFO(__LINE__) )
-
-void *m_debug_alloc( size_t n, const char *info );
-void *m_debug_alloc_clear( size_t n, const char *info );
-void *m_debug_alloc_secure( size_t n, const char *info );
-void *m_debug_alloc_secure_clear( size_t n, const char *info );
-void *m_debug_realloc( void *a, size_t n, const char *info );
-void m_debug_free( void *p, const char *info );
-void m_debug_check( const void *a, const char *info );
-/*void *m_debug_copy( const void *a, const char *info );*/
-char *m_debug_strdup( const char *a, const char *info );
-
-#else
-void *m_alloc( size_t n );
-void *m_alloc_clear( size_t n );
-void *m_alloc_secure( size_t n );
-void *m_alloc_secure_clear( size_t n );
-void *m_realloc( void *a, size_t n );
-void m_free( void *p );
-void m_check( const void *a );
-/*void *m_copy( const void *a );*/
-char *m_strdup( const char * a);
-#endif
-
-size_t m_size( const void *a );
-void m_print_stats(const char *prefix);
-
-/*-- secmem.c --*/
-void secmem_init( size_t npool );
-void secmem_term( void );
-void *secmem_malloc( size_t size );
-void *secmem_realloc( void *a, size_t newsize );
-void secmem_free( void *a );
-int m_is_secure( const void *p );
-void secmem_dump_stats(void);
-void secmem_set_flags( unsigned flags );
-unsigned secmem_get_flags(void);
-
-
-
-#define DBG_MEMORY memory_debug_mode
-#define DBG_MEMSTAT memory_stat_debug_mode
-
-#ifndef EXTERN_UNLESS_MAIN_MODULE
- #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
- #define EXTERN_UNLESS_MAIN_MODULE extern
- #else
- #define EXTERN_UNLESS_MAIN_MODULE
- #endif
-#endif
-EXTERN_UNLESS_MAIN_MODULE int memory_debug_mode;
-EXTERN_UNLESS_MAIN_MODULE int memory_stat_debug_mode;
-
-
-#endif /*G10_MEMORY_H*/
diff --git a/include/mpi.h b/include/mpi.h
deleted file mode 100644
index 7bb8271dc..000000000
--- a/include/mpi.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* mpi.h - Multi Precision Integers
- * Copyright (C) 1994, 1996, 1998, 1999,
- * 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#ifndef G10_MPI_H
-#define G10_MPI_H
-
-#include <config.h>
-#include <stdio.h>
-#include "iobuf.h"
-#include "types.h"
-#include "memory.h"
-
-#if BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_INT
- typedef unsigned int mpi_limb_t;
- typedef signed int mpi_limb_signed_t;
-#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG
- typedef unsigned long int mpi_limb_t;
- typedef signed long int mpi_limb_signed_t;
-#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG_LONG
- typedef unsigned long long int mpi_limb_t;
- typedef signed long long int mpi_limb_signed_t;
-#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_SHORT
- typedef unsigned short int mpi_limb_t;
- typedef signed short int mpi_limb_signed_t;
-#else
- #error BYTES_PER_MPI_LIMB does not match any C type
-#endif
-#define BITS_PER_MPI_LIMB (8*BYTES_PER_MPI_LIMB)
-
-#ifndef EXTERN_UNLESS_MAIN_MODULE
- #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
- #define EXTERN_UNLESS_MAIN_MODULE extern
- #else
- #define EXTERN_UNLESS_MAIN_MODULE
- #endif
-#endif
-
-#define DBG_MPI mpi_debug_mode
-EXTERN_UNLESS_MAIN_MODULE int mpi_debug_mode;
-
-
-struct gcry_mpi {
- int alloced; /* array size (# of allocated limbs) */
- int nlimbs; /* number of valid limbs */
- int nbits; /* the real number of valid bits (info only) */
- int sign; /* indicates a negative number */
- unsigned flags; /* bit 0: array must be allocated in secure memory space */
- /* bit 1: not used */
- /* bit 2: the limb is a pointer to some m_alloced data */
- mpi_limb_t *d; /* array with the limbs */
-};
-
-typedef struct gcry_mpi *MPI;
-
-#define MPI_NULL NULL
-
-#define mpi_get_nlimbs(a) ((a)->nlimbs)
-#define mpi_is_neg(a) ((a)->sign)
-
-/*-- mpiutil.c --*/
-
-#ifdef M_DEBUG
- #define mpi_alloc(n) mpi_debug_alloc((n), M_DBGINFO( __LINE__ ) )
- #define mpi_alloc_secure(n) mpi_debug_alloc_secure((n), M_DBGINFO( __LINE__ ) )
- #define mpi_alloc_like(n) mpi_debug_alloc_like((n), M_DBGINFO( __LINE__ ) )
- #define mpi_free(a) mpi_debug_free((a), M_DBGINFO(__LINE__) )
- #define mpi_resize(a,b) mpi_debug_resize((a),(b), M_DBGINFO(__LINE__) )
- #define mpi_copy(a) mpi_debug_copy((a), M_DBGINFO(__LINE__) )
- MPI mpi_debug_alloc( unsigned nlimbs, const char *info );
- MPI mpi_debug_alloc_secure( unsigned nlimbs, const char *info );
- MPI mpi_debug_alloc_like( MPI a, const char *info );
- void mpi_debug_free( MPI a, const char *info );
- void mpi_debug_resize( MPI a, unsigned nlimbs, const char *info );
- MPI mpi_debug_copy( MPI a, const char *info );
-#else
- MPI mpi_alloc( unsigned nlimbs );
- MPI mpi_alloc_secure( unsigned nlimbs );
- MPI mpi_alloc_like( MPI a );
- void mpi_free( MPI a );
- void mpi_resize( MPI a, unsigned nlimbs );
- MPI mpi_copy( MPI a );
-#endif
-#define mpi_is_opaque(a) ((a) && ((a)->flags&4))
-MPI mpi_set_opaque( MPI a, void *p, int len );
-void *mpi_get_opaque( MPI a, int *len );
-#define mpi_is_secure(a) ((a) && ((a)->flags&1))
-void mpi_set_secure( MPI a );
-void mpi_clear( MPI a );
-void mpi_set( MPI w, MPI u);
-void mpi_set_ui( MPI w, ulong u);
-MPI mpi_alloc_set_ui( unsigned long u);
-void mpi_m_check( MPI a );
-void mpi_swap( MPI a, MPI b);
-
-/*-- mpicoder.c --*/
-int mpi_write( IOBUF out, MPI a );
-#ifdef M_DEBUG
- #define mpi_read(a,b,c) mpi_debug_read((a),(b),(c), M_DBGINFO( __LINE__ ) )
- MPI mpi_debug_read(IOBUF inp, unsigned *nread, int secure, const char *info);
-#else
- MPI mpi_read(IOBUF inp, unsigned *nread, int secure);
-#endif
-MPI mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure);
-int mpi_fromstr(MPI val, const char *str);
-int mpi_print( FILE *fp, MPI a, int mode );
-void g10_log_mpidump( const char *text, MPI a );
-u32 mpi_get_keyid( MPI a, u32 *keyid );
-byte *mpi_get_buffer( MPI a, unsigned *nbytes, int *sign );
-byte *mpi_get_secure_buffer( MPI a, unsigned *nbytes, int *sign );
-void mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign );
-
-#define log_mpidump g10_log_mpidump
-
-/*-- mpi-add.c --*/
-void mpi_add_ui(MPI w, MPI u, ulong v );
-void mpi_add(MPI w, MPI u, MPI v);
-void mpi_addm(MPI w, MPI u, MPI v, MPI m);
-void mpi_sub_ui(MPI w, MPI u, ulong v );
-void mpi_sub( MPI w, MPI u, MPI v);
-void mpi_subm( MPI w, MPI u, MPI v, MPI m);
-
-/*-- mpi-mul.c --*/
-void mpi_mul_ui(MPI w, MPI u, ulong v );
-void mpi_mul_2exp( MPI w, MPI u, ulong cnt);
-void mpi_mul( MPI w, MPI u, MPI v);
-void mpi_mulm( MPI w, MPI u, MPI v, MPI m);
-
-/*-- mpi-div.c --*/
-ulong mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor );
-void mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor );
-void mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor );
-void mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor );
-void mpi_tdiv_r( MPI rem, MPI num, MPI den);
-void mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den);
-void mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count );
-int mpi_divisible_ui(MPI dividend, ulong divisor );
-
-/*-- mpi-gcd.c --*/
-int mpi_gcd( MPI g, MPI a, MPI b );
-
-/*-- mpi-pow.c --*/
-void mpi_pow( MPI w, MPI u, MPI v);
-void mpi_powm( MPI res, MPI base, MPI exp, MPI mod);
-
-/*-- mpi-mpow.c --*/
-void mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI mod);
-
-/*-- mpi-cmp.c --*/
-int mpi_cmp_ui( MPI u, ulong v );
-int mpi_cmp( MPI u, MPI v );
-
-/*-- mpi-scan.c --*/
-int mpi_getbyte( MPI a, unsigned idx );
-void mpi_putbyte( MPI a, unsigned idx, int value );
-unsigned mpi_trailing_zeros( MPI a );
-
-/*-- mpi-bit.c --*/
-void mpi_normalize( MPI a );
-unsigned mpi_get_nbits( MPI a );
-int mpi_test_bit( MPI a, unsigned n );
-void mpi_set_bit( MPI a, unsigned n );
-void mpi_set_highbit( MPI a, unsigned n );
-void mpi_clear_highbit( MPI a, unsigned n );
-void mpi_clear_bit( MPI a, unsigned n );
-void mpi_rshift( MPI x, MPI a, unsigned n );
-
-/*-- mpi-inv.c --*/
-void mpi_invm( MPI x, MPI u, MPI v );
-
-
-#endif /*G10_MPI_H*/
diff --git a/include/ttyio.h b/include/ttyio.h
deleted file mode 100644
index 08ca994c9..000000000
--- a/include/ttyio.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ttyio.h
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_TTYIO_H
-#define G10_TTYIO_H
-
-int tty_batchmode( int onoff );
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
- void tty_printf (const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
-#else
- void tty_printf (const char *fmt, ... );
-#endif
-void tty_print_string( byte *p, size_t n );
-void tty_print_utf8_string( byte *p, size_t n );
-void tty_print_utf8_string2( byte *p, size_t n, size_t max_n );
-char *tty_get( const char *prompt );
-char *tty_get_hidden( const char *prompt );
-void tty_kill_prompt(void);
-int tty_get_answer_is_yes( const char *prompt );
-int tty_no_terminal(int onoff);
-
-
-#endif /*G10_TTYIO_H*/
diff --git a/include/types.h b/include/types.h
deleted file mode 100644
index b41109ee5..000000000
--- a/include/types.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* types.h - some common typedefs
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_TYPES_H
-#define G10_TYPES_H
-
-
-/* The AC_CHECK_SIZEOF() in configure fails for some machines.
- * we provide some fallback values here */
-#if !SIZEOF_UNSIGNED_SHORT
- #undef SIZEOF_UNSIGNED_SHORT
- #define SIZEOF_UNSIGNED_SHORT 2
-#endif
-#if !SIZEOF_UNSIGNED_INT
- #undef SIZEOF_UNSIGNED_INT
- #define SIZEOF_UNSIGNED_INT 4
-#endif
-#if !SIZEOF_UNSIGNED_LONG
- #undef SIZEOF_UNSIGNED_LONG
- #define SIZEOF_UNSIGNED_LONG 4
-#endif
-
-
-#include <sys/types.h>
-
-
-#ifndef HAVE_BYTE_TYPEDEF
- #undef byte /* maybe there is a macro with this name */
- #ifndef __riscos__
- typedef unsigned char byte;
- #else
- /* Norcroft treats char = unsigned char as legal assignment
- but char* = unsigned char* as illegal assignment
- and the same applies to the signed variants as well */
- typedef char byte;
- #endif
- #define HAVE_BYTE_TYPEDEF
-#endif
-
-#ifndef HAVE_USHORT_TYPEDEF
- #undef ushort /* maybe there is a macro with this name */
- typedef unsigned short ushort;
- #define HAVE_USHORT_TYPEDEF
-#endif
-
-#ifndef HAVE_ULONG_TYPEDEF
- #undef ulong /* maybe there is a macro with this name */
- typedef unsigned long ulong;
- #define HAVE_ULONG_TYPEDEF
-#endif
-
-#ifndef HAVE_U16_TYPEDEF
- #undef u16 /* maybe there is a macro with this name */
- #if SIZEOF_UNSIGNED_INT == 2
- typedef unsigned int u16;
- #elif SIZEOF_UNSIGNED_SHORT == 2
- typedef unsigned short u16;
- #else
- #error no typedef for u16
- #endif
- #define HAVE_U16_TYPEDEF
-#endif
-
-#ifndef HAVE_U32_TYPEDEF
- #undef u32 /* maybe there is a macro with this name */
- #if SIZEOF_UNSIGNED_INT == 4
- typedef unsigned int u32;
- #elif SIZEOF_UNSIGNED_LONG == 4
- typedef unsigned long u32;
- #else
- #error no typedef for u32
- #endif
- #define HAVE_U32_TYPEDEF
-#endif
-
-/****************
- * Warning: Some systems segfault when this u64 typedef and
- * the dummy code in cipher/md.c is not available. Examples are
- * Solaris and IRIX.
- */
-#ifndef HAVE_U64_TYPEDEF
- #undef u64 /* maybe there is a macro with this name */
- #if SIZEOF_UNSIGNED_INT == 8
- typedef unsigned int u64;
- #define HAVE_U64_TYPEDEF
- #elif SIZEOF_UNSIGNED_LONG == 8
- typedef unsigned long u64;
- #define HAVE_U64_TYPEDEF
- #elif SIZEOF_UNSIGNED_LONG_LONG == 8
- typedef unsigned long long u64;
- #define HAVE_U64_TYPEDEF
- #endif
-#endif
-
-typedef union {
- int a;
- short b;
- char c[1];
- long d;
- #ifdef HAVE_U64_TYPEDEF
- u64 e;
- #endif
- float f;
- double g;
-} PROPERLY_ALIGNED_TYPE;
-
-typedef struct string_list {
- struct string_list *next;
- unsigned int flags;
- char d[1];
-} *STRLIST;
-
-
-#endif /*G10_TYPES_H*/
diff --git a/include/util.h b/include/util.h
deleted file mode 100644
index 8f7363908..000000000
--- a/include/util.h
+++ /dev/null
@@ -1,296 +0,0 @@
-/* util.h
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_UTIL_H
-#define G10_UTIL_H
-
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
-# include <stdarg.h>
-#endif
-
-#include "types.h"
-#include "errors.h"
-#include "types.h"
-#include "mpi.h"
-
-
-typedef struct {
- int *argc; /* pointer to argc (value subject to change) */
- char ***argv; /* pointer to argv (value subject to change) */
- unsigned flags; /* Global flags (DO NOT CHANGE) */
- int err; /* print error about last option */
- /* 1 = warning, 2 = abort */
- int r_opt; /* return option */
- int r_type; /* type of return value (0 = no argument found)*/
- union {
- int ret_int;
- long ret_long;
- ulong ret_ulong;
- char *ret_str;
- } r; /* Return values */
- struct {
- int idx;
- int inarg;
- int stopped;
- const char *last;
- void *aliases;
- const void *cur_alias;
- } internal; /* DO NOT CHANGE */
-} ARGPARSE_ARGS;
-
-typedef struct {
- int short_opt;
- const char *long_opt;
- unsigned flags;
- const char *description; /* optional option description */
-} ARGPARSE_OPTS;
-
-/*-- logger.c --*/
-void log_set_logfile( const char *name, int fd );
-FILE *log_stream(void);
-void g10_log_print_prefix(const char *text);
-void log_set_name( const char *name );
-const char *log_get_name(void);
-void log_set_pid( int pid );
-int log_get_errorcount( int clear );
-void log_inc_errorcount(void);
-int log_set_strict(int val);
-void g10_log_hexdump( const char *text, const char *buf, size_t len );
-
-#if defined (__riscos__) \
- || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ))
- void g10_log_bug( const char *fmt, ... )
- __attribute__ ((noreturn, format (printf,1,2)));
- void g10_log_bug0( const char *, int, const char * ) __attribute__ ((noreturn));
- void g10_log_fatal( const char *fmt, ... )
- __attribute__ ((noreturn, format (printf,1,2)));
- void g10_log_error( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
- void g10_log_info( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
- void g10_log_warning( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
- void g10_log_debug( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
- void g10_log_fatal_f( const char *fname, const char *fmt, ... )
- __attribute__ ((noreturn, format (printf,2,3)));
- void g10_log_error_f( const char *fname, const char *fmt, ... )
- __attribute__ ((format (printf,2,3)));
- void g10_log_info_f( const char *fname, const char *fmt, ... )
- __attribute__ ((format (printf,2,3)));
- void g10_log_debug_f( const char *fname, const char *fmt, ... )
- __attribute__ ((format (printf,2,3)));
-#ifndef __riscos__
- #define BUG() g10_log_bug0( __FILE__ , __LINE__, __FUNCTION__ )
-#else
- #define BUG() g10_log_bug0( __FILE__ , __LINE__, __func__ )
-#endif
-#else
- void g10_log_bug( const char *fmt, ... );
- void g10_log_bug0( const char *, int );
- void g10_log_fatal( const char *fmt, ... );
- void g10_log_error( const char *fmt, ... );
- void g10_log_info( const char *fmt, ... );
- void g10_log_warning( const char *fmt, ... );
- void g10_log_debug( const char *fmt, ... );
- void g10_log_fatal_f( const char *fname, const char *fmt, ... );
- void g10_log_error_f( const char *fname, const char *fmt, ... );
- void g10_log_info_f( const char *fname, const char *fmt, ... );
- void g10_log_debug_f( const char *fname, const char *fmt, ... );
- #define BUG() g10_log_bug0( __FILE__ , __LINE__ )
-#endif
-
-#define log_hexdump g10_log_hexdump
-#define log_bug g10_log_bug
-#define log_bug0 g10_log_bug0
-#define log_fatal g10_log_fatal
-#define log_error g10_log_error
-#define log_info g10_log_info
-#define log_warning g10_log_warning
-#define log_debug g10_log_debug
-#define log_fatal_f g10_log_fatal_f
-#define log_error_f g10_log_error_f
-#define log_info_f g10_log_info_f
-#define log_debug_f g10_log_debug_f
-
-
-/*-- errors.c --*/
-const char * g10_errstr( int no );
-
-/*-- argparse.c --*/
-int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts);
-int optfile_parse( FILE *fp, const char *filename, unsigned *lineno,
- ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts);
-void usage( int level );
-const char *default_strusage( int level );
-
-
-/*-- (main program) --*/
-const char *strusage( int level );
-
-
-/*-- dotlock.c --*/
-struct dotlock_handle;
-typedef struct dotlock_handle *DOTLOCK;
-
-void disable_dotlock(void);
-DOTLOCK create_dotlock( const char *file_to_lock );
-int make_dotlock( DOTLOCK h, long timeout );
-int release_dotlock( DOTLOCK h );
-void remove_lockfiles (void);
-
-/*-- fileutil.c --*/
-char * make_basename(const char *filepath);
-char * make_dirname(const char *filepath);
-char *make_filename( const char *first_part, ... );
-int compare_filenames( const char *a, const char *b );
-const char *print_fname_stdin( const char *s );
-const char *print_fname_stdout( const char *s );
-int is_file_compressed(const char *s, int *r_status);
-
-
-/*-- miscutil.c --*/
-u32 make_timestamp(void);
-u32 scan_isodatestr( const char *string );
-u32 add_days_to_timestamp( u32 stamp, u16 days );
-const char *strtimevalue( u32 stamp );
-const char *strtimestamp( u32 stamp ); /* GMT */
-const char *asctimestamp( u32 stamp ); /* localized */
-void print_string( FILE *fp, const byte *p, size_t n, int delim );
-void print_utf8_string( FILE *fp, const byte *p, size_t n );
-void print_utf8_string2( FILE *fp, const byte *p, size_t n, int delim);
-char *make_printable_string( const byte *p, size_t n, int delim );
-int answer_is_yes_no_default( const char *s, int def_answer );
-int answer_is_yes( const char *s );
-int answer_is_yes_no_quit( const char *s );
-
-/*-- strgutil.c --*/
-void free_strlist( STRLIST sl );
-#define FREE_STRLIST(a) do { free_strlist((a)); (a) = NULL ; } while(0)
-STRLIST add_to_strlist( STRLIST *list, const char *string );
-STRLIST add_to_strlist2( STRLIST *list, const char *string, int is_utf8 );
-STRLIST append_to_strlist( STRLIST *list, const char *string );
-STRLIST append_to_strlist2( STRLIST *list, const char *string, int is_utf8 );
-STRLIST strlist_prev( STRLIST head, STRLIST node );
-STRLIST strlist_last( STRLIST node );
-char *pop_strlist( STRLIST *list );
-const char *memistr( const char *buf, size_t buflen, const char *sub );
-const char *ascii_memistr( const char *buf, size_t buflen, const char *sub );
-char *mem2str( char *, const void *, size_t);
-char *trim_spaces( char *string );
-unsigned int trim_trailing_chars( byte *line, unsigned int len,
- const char *trimchars);
-unsigned int trim_trailing_ws( byte *line, unsigned len );
-unsigned int check_trailing_chars( const byte *line, unsigned int len,
- const char *trimchars );
-unsigned int check_trailing_ws( const byte *line, unsigned int len );
-int string_count_chr( const char *string, int c );
-int set_native_charset( const char *newset );
-const char* get_native_charset(void);
-char *native_to_utf8( const char *string );
-char *utf8_to_native( const char *string, size_t length, int delim);
-int check_utf8_string( const char *string );
-
-int ascii_isupper (int c);
-int ascii_islower (int c);
-int ascii_toupper (int c);
-int ascii_tolower (int c);
-int ascii_strcasecmp( const char *a, const char *b );
-int ascii_strncasecmp( const char *a, const char *b, size_t n);
-int ascii_memcasecmp( const char *a, const char *b, size_t n);
-
-#ifndef HAVE_STPCPY
-char *stpcpy(char *a,const char *b);
-#endif
-#ifndef HAVE_STRLWR
-char *strlwr(char *a);
-#endif
-#ifndef HAVE_STRSEP
-char *strsep (char **stringp, const char *delim);
-#endif
-#ifndef HAVE_STRCASECMP
-int strcasecmp( const char *, const char *b);
-#endif
-#ifndef HAVE_STRNCASECMP
-int strncasecmp (const char *, const char *b, size_t n);
-#endif
-#ifndef HAVE_STRTOUL
- #define strtoul(a,b,c) ((unsigned long)strtol((a),(b),(c)))
-#endif
-#ifndef HAVE_MEMMOVE
- #define memmove(d, s, n) bcopy((s), (d), (n))
-#endif
-
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
-/*-- w32reg.c --*/
-char *read_w32_registry_string( const char *root,
- const char *dir, const char *name );
-int write_w32_registry_string(const char *root, const char *dir,
- const char *name, const char *value);
-
-/*-- strgutil.c --*/
-int vasprintf ( char **result, const char *format, va_list args);
-#endif
-
-/**** other missing stuff ****/
-#ifndef HAVE_ATEXIT /* For SunOS */
- #define atexit(a) (on_exit((a),0))
-#endif
-
-#ifndef HAVE_RAISE
- #define raise(a) kill(getpid(), (a))
-#endif
-
-/******** some macros ************/
-#ifndef STR
- #define STR(v) #v
-#endif
-#define STR2(v) STR(v)
-#define DIM(v) (sizeof(v)/sizeof((v)[0]))
-#define DIMof(type,member) DIM(((type *)0)->member)
-
-/******* RISC OS stuff ***********/
-#ifdef __riscos__
-/* needed for strcasecmp() */
-#include <strings.h>
-/* needed for filename munging */
-#include <unixlib/local.h>
-/* needed for image file system feature */
-#include <unixlib/features.h>
-void riscos_global_defaults(void);
-#define RISCOS_GLOBAL_STATICS(a) const char *__dynamic_da_name = (a);
-void riscos_set_filetype(const char *filename, const char *mimetype);
-pid_t riscos_getpid(void);
-int riscos_kill(pid_t pid, int sig);
-int riscos_access(const char *path, int amode);
-int riscos_getchar(void);
-int fdopenfile(const char *filename, const int allow_write);
-void close_fds(void);
-int renamefile(const char *old, const char *new);
-char *gstrans(const char *old);
-void not_implemented(const char *feature);
-#ifdef DEBUG
-void dump_fdlist(void);
-void list_openfiles(void);
-#endif
-#ifndef __RISCOS__C__
- #define getpid riscos_getpid
- #define kill(a,b) riscos_kill((a),(b))
- #define access(a,b) riscos_access((a),(b))
-#endif /* !__RISCOS__C__ */
-#endif /* __riscos__ */
-
-#endif /*G10_UTIL_H*/
-
diff --git a/intl/ChangeLog b/intl/ChangeLog
deleted file mode 100644
index 84e2b37ec..000000000
--- a/intl/ChangeLog
+++ /dev/null
@@ -1,4 +0,0 @@
-2001-09-13 GNU <bug-gnu-utils@gnu.org>
-
- * Version 0.10.40 released.
-
diff --git a/intl/Makefile.in b/intl/Makefile.in
deleted file mode 100644
index 19ed4a7e0..000000000
--- a/intl/Makefile.in
+++ /dev/null
@@ -1,313 +0,0 @@
-# Makefile for directory with message catalog handling in GNU NLS Utilities.
-# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library 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.
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-
-SHELL = /bin/sh
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-top_builddir = ..
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-transform = @program_transform_name@
-libdir = @libdir@
-includedir = @includedir@
-datadir = @datadir@
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/intl
-aliaspath = $(localedir)
-subdir = intl
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-
-l = @INTL_LIBTOOL_SUFFIX_PREFIX@
-
-AR = ar
-CC = @CC@
-LIBTOOL = @LIBTOOL@
-RANLIB = @RANLIB@
-YACC = @INTLBISON@ -y -d
-YFLAGS = --name-prefix=__gettext
-
-DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
--DLIBDIR=\"$(libdir)\" @DEFS@
-CPPFLAGS = @CPPFLAGS@
-CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
-COMHDRS = gettext.h gettextP.h hash-string.h
-SOURCES = $(COMSRCS) intl-compat.c
-COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
-finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
-explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
-localcharset.c
-OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
-finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
-explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
-plural.$lo localcharset.$lo
-GETTOBJS = intl-compat.$lo
-DISTFILES.common = Makefile.in \
-config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
-DISTFILES.generated = plural.c
-DISTFILES.normal = VERSION
-DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc
-DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
-
-# Libtool's library version information for libintl.
-# Before making a gettext release, the gettext maintainer must change this
-# according to the libtool documentation, section "Library interface versions".
-# Maintainers of other packages that include the intl directory must *not*
-# change these values.
-LTV_CURRENT=1
-LTV_REVISION=1
-LTV_AGE=0
-
-.SUFFIXES:
-.SUFFIXES: .c .y .o .lo .sin .sed
-.c.o:
- $(COMPILE) $<
-.c.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) $<
-
-.y.c:
- $(YACC) $(YFLAGS) --output $@ $<
- rm -f $*.h
-
-.sin.sed:
- sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
- mv t-$@ $@
-
-INCLUDES = -I.. -I. -I$(top_srcdir)/intl
-
-all: all-@USE_INCLUDED_LIBINTL@
-all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
-all-no: all-no-@BUILD_INCLUDED_LIBINTL@
-all-no-yes: libgnuintl.$la
-all-no-no:
-
-libintl.a libgnuintl.a: $(OBJECTS)
- rm -f $@
- $(AR) cru $@ $(OBJECTS)
- $(RANLIB) $@
-
-libintl.la libgnuintl.la: $(OBJECTS)
- $(LIBTOOL) --mode=link \
- $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
- $(OBJECTS) @LIBICONV@ \
- -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
- -rpath $(libdir) \
- -no-undefined
-
-libintl.h: libgnuintl.h
- cp $(srcdir)/libgnuintl.h libintl.h
-
-charset.alias: config.charset
- $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
- mv t-$@ $@
-
-check: all
-
-# This installation goal is only used in GNU gettext. Packages which
-# only use the library should use install instead.
-
-# We must not install the libintl.h/libintl.a files if we are on a
-# system which has the GNU gettext() function in its C library or in a
-# separate library.
-# If you want to use the one which comes with this version of the
-# package, you have to use `configure --with-included-gettext'.
-install: install-exec install-data
-install-exec: all
- if test "$(PACKAGE)" = "gettext" \
- && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
- $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
- $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
- $(LIBTOOL) --mode=install \
- $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
- else \
- : ; \
- fi
- if test '@USE_INCLUDED_LIBINTL@' = yes; then \
- $(mkinstalldirs) $(DESTDIR)$(libdir); \
- temp=$(DESTDIR)$(libdir)/t-charset.alias; \
- dest=$(DESTDIR)$(libdir)/charset.alias; \
- if test -f $(DESTDIR)$(libdir)/charset.alias; then \
- orig=$(DESTDIR)$(libdir)/charset.alias; \
- sed -f ref-add.sed $$orig > $$temp; \
- $(INSTALL_DATA) $$temp $$dest; \
- rm -f $$temp; \
- else \
- if test @GLIBC21@ = no; then \
- orig=charset.alias; \
- sed -f ref-add.sed $$orig > $$temp; \
- $(INSTALL_DATA) $$temp $$dest; \
- rm -f $$temp; \
- fi; \
- fi; \
- $(mkinstalldirs) $(DESTDIR)$(localedir); \
- test -f $(DESTDIR)$(localedir)/locale.alias \
- && orig=$(DESTDIR)$(localedir)/locale.alias \
- || orig=$(srcdir)/locale.alias; \
- temp=$(DESTDIR)$(localedir)/t-locale.alias; \
- dest=$(DESTDIR)$(localedir)/locale.alias; \
- sed -f ref-add.sed $$orig > $$temp; \
- $(INSTALL_DATA) $$temp $$dest; \
- rm -f $$temp; \
- else \
- : ; \
- fi
-install-data: all
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
- $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
- dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \
- for file in $$dists; do \
- $(INSTALL_DATA) $(srcdir)/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
- dists="$(DISTFILES.generated)"; \
- for file in $$dists; do \
- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
- $(INSTALL_DATA) $$dir/$$file \
- $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- dists="$(DISTFILES.obsolete)"; \
- for file in $$dists; do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall:
- if test "$(PACKAGE)" = "gettext" \
- && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
- rm -f $(DESTDIR)$(includedir)/libintl.h; \
- $(LIBTOOL) --mode=uninstall \
- rm -f $(DESTDIR)$(libdir)/libintl.$la; \
- else \
- : ; \
- fi
- if test '@USE_INCLUDED_LIBINTL@' = yes; then \
- if test -f $(DESTDIR)$(libdir)/charset.alias; then \
- temp=$(DESTDIR)$(libdir)/t-charset.alias; \
- dest=$(DESTDIR)$(libdir)/charset.alias; \
- sed -f ref-del.sed $$dest > $$temp; \
- if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
- rm -f $$dest; \
- else \
- $(INSTALL_DATA) $$temp $$dest; \
- fi; \
- rm -f $$temp; \
- fi; \
- if test -f $(DESTDIR)$(localedir)/locale.alias; then \
- temp=$(DESTDIR)$(localedir)/t-locale.alias; \
- dest=$(DESTDIR)$(localedir)/locale.alias; \
- sed -f ref-del.sed $$dest > $$temp; \
- if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
- rm -f $$dest; \
- else \
- $(INSTALL_DATA) $$temp $$dest; \
- fi; \
- rm -f $$temp; \
- fi; \
- else \
- : ; \
- fi
- if test "$(PACKAGE)" = "gettext"; then \
- for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
- rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
- done; \
- else \
- : ; \
- fi
-
-info dvi:
-
-$(OBJECTS): ../config.h libgnuintl.h
-bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
-dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
-
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
-
-id: ID
-
-ID: $(HEADERS) $(SOURCES)
- here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
-
-
-mostlyclean:
- rm -f *.a *.la *.o *.lo core core.*
- rm -f libintl.h charset.alias ref-add.sed ref-del.sed
- rm -f -r .libs _libs
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile ID TAGS
- if test "$(PACKAGE)" = gettext; then \
- rm -f ChangeLog.inst $(DISTFILES.normal); \
- else \
- : ; \
- fi
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-
-# GNU gettext needs not contain the file `VERSION' but contains some
-# other files which should not be distributed in other packages.
-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: Makefile
- if test "$(PACKAGE)" = gettext; then \
- additional="$(DISTFILES.gettext)"; \
- else \
- additional="$(DISTFILES.normal)"; \
- fi; \
- $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
- for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
- ln $$dir/$$file $(distdir) 2> /dev/null \
- || cp -p $$dir/$$file $(distdir); \
- done
-
-Makefile: Makefile.in ../config.status
- cd .. \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
deleted file mode 100644
index cb8a01a78..000000000
--- a/intl/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-GNU gettext library from gettext-0.10.40
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
deleted file mode 100644
index c6a9bd164..000000000
--- a/intl/bindtextdom.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/* Implementation of the bindtextdomain(3) function
- Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-#include "gettextP.h"
-
-#ifdef _LIBC
-/* We have to handle multi-threaded applications. */
-# include <bits/libc-lock.h>
-#else
-/* Provide dummy implementation if this is outside glibc. */
-# define __libc_rwlock_define(CLASS, NAME)
-# define __libc_rwlock_wrlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
- names than the internal variables in GNU libc, otherwise programs
- using libintl.a cannot be linked statically. */
-#if !defined _LIBC
-# define _nl_default_dirname _nl_default_dirname__
-# define _nl_domain_bindings _nl_domain_bindings__
-#endif
-
-/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
-#ifndef offsetof
-# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Contains the default location of the message catalogs. */
-extern const char _nl_default_dirname[];
-
-/* List with bindings of specific domains. */
-extern struct binding *_nl_domain_bindings;
-
-/* Lock variable to protect the global data in the gettext implementation. */
-__libc_rwlock_define (extern, _nl_state_lock)
-
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define BINDTEXTDOMAIN __bindtextdomain
-# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
-# ifndef strdup
-# define strdup(str) __strdup (str)
-# endif
-#else
-# define BINDTEXTDOMAIN bindtextdomain__
-# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
-#endif
-
-/* Prototypes for local functions. */
-static void set_binding_values PARAMS ((const char *domainname,
- const char **dirnamep,
- const char **codesetp));
-
-/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
- to be used for the DOMAINNAME message catalog.
- If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
- modified, only the current value is returned.
- If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
- modified nor returned. */
-static void
-set_binding_values (domainname, dirnamep, codesetp)
- const char *domainname;
- const char **dirnamep;
- const char **codesetp;
-{
- struct binding *binding;
- int modified;
-
- /* Some sanity checks. */
- if (domainname == NULL || domainname[0] == '\0')
- {
- if (dirnamep)
- *dirnamep = NULL;
- if (codesetp)
- *codesetp = NULL;
- return;
- }
-
- __libc_rwlock_wrlock (_nl_state_lock);
-
- modified = 0;
-
- for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
- {
- int compare = strcmp (domainname, binding->domainname);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It is not in the list. */
- binding = NULL;
- break;
- }
- }
-
- if (binding != NULL)
- {
- if (dirnamep)
- {
- const char *dirname = *dirnamep;
-
- if (dirname == NULL)
- /* The current binding has be to returned. */
- *dirnamep = binding->dirname;
- else
- {
- /* The domain is already bound. If the new value and the old
- one are equal we simply do nothing. Otherwise replace the
- old binding. */
- char *result = binding->dirname;
- if (strcmp (dirname, result) != 0)
- {
- if (strcmp (dirname, _nl_default_dirname) == 0)
- result = (char *) _nl_default_dirname;
- else
- {
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (dirname);
-#else
- size_t len = strlen (dirname) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result != NULL, 1))
- memcpy (result, dirname, len);
-#endif
- }
-
- if (__builtin_expect (result != NULL, 1))
- {
- if (binding->dirname != _nl_default_dirname)
- free (binding->dirname);
-
- binding->dirname = result;
- modified = 1;
- }
- }
- *dirnamep = result;
- }
- }
-
- if (codesetp)
- {
- const char *codeset = *codesetp;
-
- if (codeset == NULL)
- /* The current binding has be to returned. */
- *codesetp = binding->codeset;
- else
- {
- /* The domain is already bound. If the new value and the old
- one are equal we simply do nothing. Otherwise replace the
- old binding. */
- char *result = binding->codeset;
- if (result == NULL || strcmp (codeset, result) != 0)
- {
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (codeset);
-#else
- size_t len = strlen (codeset) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result != NULL, 1))
- memcpy (result, codeset, len);
-#endif
-
- if (__builtin_expect (result != NULL, 1))
- {
- if (binding->codeset != NULL)
- free (binding->codeset);
-
- binding->codeset = result;
- binding->codeset_cntr++;
- modified = 1;
- }
- }
- *codesetp = result;
- }
- }
- }
- else if ((dirnamep == NULL || *dirnamep == NULL)
- && (codesetp == NULL || *codesetp == NULL))
- {
- /* Simply return the default values. */
- if (dirnamep)
- *dirnamep = _nl_default_dirname;
- if (codesetp)
- *codesetp = NULL;
- }
- else
- {
- /* We have to create a new binding. */
- size_t len = strlen (domainname) + 1;
- struct binding *new_binding =
- (struct binding *) malloc (offsetof (struct binding, domainname) + len);
-
- if (__builtin_expect (new_binding == NULL, 0))
- goto failed;
-
- memcpy (new_binding->domainname, domainname, len);
-
- if (dirnamep)
- {
- const char *dirname = *dirnamep;
-
- if (dirname == NULL)
- /* The default value. */
- dirname = _nl_default_dirname;
- else
- {
- if (strcmp (dirname, _nl_default_dirname) == 0)
- dirname = _nl_default_dirname;
- else
- {
- char *result;
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (dirname);
- if (__builtin_expect (result == NULL, 0))
- goto failed_dirname;
-#else
- size_t len = strlen (dirname) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result == NULL, 0))
- goto failed_dirname;
- memcpy (result, dirname, len);
-#endif
- dirname = result;
- }
- }
- *dirnamep = dirname;
- new_binding->dirname = (char *) dirname;
- }
- else
- /* The default value. */
- new_binding->dirname = (char *) _nl_default_dirname;
-
- new_binding->codeset_cntr = 0;
-
- if (codesetp)
- {
- const char *codeset = *codesetp;
-
- if (codeset != NULL)
- {
- char *result;
-
-#if defined _LIBC || defined HAVE_STRDUP
- result = strdup (codeset);
- if (__builtin_expect (result == NULL, 0))
- goto failed_codeset;
-#else
- size_t len = strlen (codeset) + 1;
- result = (char *) malloc (len);
- if (__builtin_expect (result == NULL, 0))
- goto failed_codeset;
- memcpy (result, codeset, len);
-#endif
- codeset = result;
- new_binding->codeset_cntr++;
- }
- *codesetp = codeset;
- new_binding->codeset = (char *) codeset;
- }
- else
- new_binding->codeset = NULL;
-
- /* Now enqueue it. */
- if (_nl_domain_bindings == NULL
- || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
- {
- new_binding->next = _nl_domain_bindings;
- _nl_domain_bindings = new_binding;
- }
- else
- {
- binding = _nl_domain_bindings;
- while (binding->next != NULL
- && strcmp (domainname, binding->next->domainname) > 0)
- binding = binding->next;
-
- new_binding->next = binding->next;
- binding->next = new_binding;
- }
-
- modified = 1;
-
- /* Here we deal with memory allocation failures. */
- if (0)
- {
- failed_codeset:
- if (new_binding->dirname != _nl_default_dirname)
- free (new_binding->dirname);
- failed_dirname:
- free (new_binding);
- failed:
- if (dirnamep)
- *dirnamep = NULL;
- if (codesetp)
- *codesetp = NULL;
- }
- }
-
- /* If we modified any binding, we flush the caches. */
- if (modified)
- ++_nl_msg_cat_cntr;
-
- __libc_rwlock_unlock (_nl_state_lock);
-}
-
-/* Specify that the DOMAINNAME message catalog will be found
- in DIRNAME rather than in the system locale data base. */
-char *
-BINDTEXTDOMAIN (domainname, dirname)
- const char *domainname;
- const char *dirname;
-{
- set_binding_values (domainname, &dirname, NULL);
- return (char *) dirname;
-}
-
-/* Specify the character encoding in which the messages from the
- DOMAINNAME message catalog will be returned. */
-char *
-BIND_TEXTDOMAIN_CODESET (domainname, codeset)
- const char *domainname;
- const char *codeset;
-{
- set_binding_values (domainname, NULL, &codeset);
- return (char *) codeset;
-}
-
-#ifdef _LIBC
-/* Aliases for function names in GNU C Library. */
-weak_alias (__bindtextdomain, bindtextdomain);
-weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
-#endif
diff --git a/intl/config.charset b/intl/config.charset
deleted file mode 100755
index f4f2611c5..000000000
--- a/intl/config.charset
+++ /dev/null
@@ -1,438 +0,0 @@
-#! /bin/sh
-# Output a system dependent table of character encoding aliases.
-#
-# Copyright (C) 2000-2001 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library 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.
-#
-# The table consists of lines of the form
-# ALIAS CANONICAL
-#
-# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
-# ALIAS is compared in a case sensitive way.
-#
-# CANONICAL is the GNU canonical name for this character encoding.
-# It must be an encoding supported by libiconv. Support by GNU libc is
-# also desirable. CANONICAL is case insensitive. Usually an upper case
-# MIME charset name is preferred.
-# The current list of GNU canonical charset names is as follows.
-#
-# name used by which systems a MIME name?
-# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
-# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
-# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
-# ISO-8859-3 glibc yes
-# ISO-8859-4 osf solaris freebsd yes
-# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
-# ISO-8859-6 glibc aix hpux solaris yes
-# ISO-8859-7 glibc aix hpux irix osf solaris yes
-# ISO-8859-8 glibc aix hpux osf solaris yes
-# ISO-8859-9 glibc aix hpux irix osf solaris yes
-# ISO-8859-13 glibc
-# ISO-8859-15 glibc aix osf solaris freebsd
-# KOI8-R glibc solaris freebsd yes
-# KOI8-U glibc freebsd yes
-# CP437 dos
-# CP775 dos
-# CP850 aix osf dos
-# CP852 dos
-# CP855 dos
-# CP856 aix
-# CP857 dos
-# CP861 dos
-# CP862 dos
-# CP864 dos
-# CP865 dos
-# CP866 freebsd dos
-# CP869 dos
-# CP874 win32 dos
-# CP922 aix
-# CP932 aix win32 dos
-# CP943 aix
-# CP949 osf win32 dos
-# CP950 win32 dos
-# CP1046 aix
-# CP1124 aix
-# CP1129 aix
-# CP1250 win32
-# CP1251 glibc win32
-# CP1252 aix win32
-# CP1253 win32
-# CP1254 win32
-# CP1255 win32
-# CP1256 win32
-# CP1257 win32
-# GB2312 glibc aix hpux irix solaris freebsd yes
-# EUC-JP glibc aix hpux irix osf solaris freebsd yes
-# EUC-KR glibc aix hpux irix osf solaris freebsd yes
-# EUC-TW glibc aix hpux irix osf solaris
-# BIG5 glibc aix hpux osf solaris freebsd yes
-# BIG5-HKSCS glibc
-# GBK aix osf win32 dos
-# GB18030 glibc
-# SHIFT_JIS hpux osf solaris freebsd yes
-# JOHAB glibc win32
-# TIS-620 glibc aix hpux osf solaris
-# VISCII glibc yes
-# HP-ROMAN8 hpux
-# HP-ARABIC8 hpux
-# HP-GREEK8 hpux
-# HP-HEBREW8 hpux
-# HP-TURKISH8 hpux
-# HP-KANA8 hpux
-# DEC-KANJI osf
-# DEC-HANYU osf
-# UTF-8 glibc aix hpux osf solaris yes
-#
-# Note: Names which are not marked as being a MIME name should not be used in
-# Internet protocols for information interchange (mail, news, etc.).
-#
-# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
-# must understand both names and treat them as equivalent.
-#
-# The first argument passed to this file is the canonical host specification,
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-
-host="$1"
-os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
-echo "# This file contains a table of character encoding aliases,"
-echo "# suitable for operating system '${os}'."
-echo "# It was automatically generated from config.charset."
-# List of references, updated during installation:
-echo "# Packages using this file: "
-case "$os" in
- linux* | *-gnu*)
- # With glibc-2.1 or newer, we don't need any canonicalization,
- # because glibc has iconv and both glibc and libiconv support all
- # GNU canonical names directly. Therefore, the Makefile does not
- # need to install the alias file at all.
- # The following applies only to glibc-2.0.x and older libcs.
- echo "ISO_646.IRV:1983 ASCII"
- ;;
- aix*)
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-6 ISO-8859-6"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-8 ISO-8859-8"
- echo "ISO8859-9 ISO-8859-9"
- echo "ISO8859-15 ISO-8859-15"
- echo "IBM-850 CP850"
- echo "IBM-856 CP856"
- echo "IBM-921 ISO-8859-13"
- echo "IBM-922 CP922"
- echo "IBM-932 CP932"
- echo "IBM-943 CP943"
- echo "IBM-1046 CP1046"
- echo "IBM-1124 CP1124"
- echo "IBM-1129 CP1129"
- echo "IBM-1252 CP1252"
- echo "IBM-eucCN GB2312"
- echo "IBM-eucJP EUC-JP"
- echo "IBM-eucKR EUC-KR"
- echo "IBM-eucTW EUC-TW"
- echo "big5 BIG5"
- echo "GBK GBK"
- echo "TIS-620 TIS-620"
- echo "UTF-8 UTF-8"
- ;;
- hpux*)
- echo "iso88591 ISO-8859-1"
- echo "iso88592 ISO-8859-2"
- echo "iso88595 ISO-8859-5"
- echo "iso88596 ISO-8859-6"
- echo "iso88597 ISO-8859-7"
- echo "iso88598 ISO-8859-8"
- echo "iso88599 ISO-8859-9"
- echo "iso885915 ISO-8859-15"
- echo "roman8 HP-ROMAN8"
- echo "arabic8 HP-ARABIC8"
- echo "greek8 HP-GREEK8"
- echo "hebrew8 HP-HEBREW8"
- echo "turkish8 HP-TURKISH8"
- echo "kana8 HP-KANA8"
- echo "tis620 TIS-620"
- echo "big5 BIG5"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- echo "hp15CN GB2312"
- #echo "ccdc ?" # what is this?
- echo "SJIS SHIFT_JIS"
- echo "utf8 UTF-8"
- ;;
- irix*)
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-9 ISO-8859-9"
- echo "eucCN GB2312"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- ;;
- osf*)
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-4 ISO-8859-4"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-8 ISO-8859-8"
- echo "ISO8859-9 ISO-8859-9"
- echo "ISO8859-15 ISO-8859-15"
- echo "cp850 CP850"
- echo "big5 BIG5"
- echo "dechanyu DEC-HANYU"
- echo "dechanzi GB2312"
- echo "deckanji DEC-KANJI"
- echo "deckorean EUC-KR"
- echo "eucJP EUC-JP"
- echo "eucKR EUC-KR"
- echo "eucTW EUC-TW"
- echo "GBK GBK"
- echo "KSC5601 CP949"
- echo "sdeckanji EUC-JP"
- echo "SJIS SHIFT_JIS"
- echo "TACTIS TIS-620"
- echo "UTF-8 UTF-8"
- ;;
- solaris*)
- echo "646 ASCII"
- echo "ISO8859-1 ISO-8859-1"
- echo "ISO8859-2 ISO-8859-2"
- echo "ISO8859-4 ISO-8859-4"
- echo "ISO8859-5 ISO-8859-5"
- echo "ISO8859-6 ISO-8859-6"
- echo "ISO8859-7 ISO-8859-7"
- echo "ISO8859-8 ISO-8859-8"
- echo "ISO8859-9 ISO-8859-9"
- echo "ISO8859-15 ISO-8859-15"
- echo "koi8-r KOI8-R"
- echo "BIG5 BIG5"
- echo "gb2312 GB2312"
- echo "cns11643 EUC-TW"
- echo "5601 EUC-KR"
- echo "eucJP EUC-JP"
- echo "PCK SHIFT_JIS"
- echo "TIS620.2533 TIS-620"
- #echo "sun_eu_greek ?" # what is this?
- echo "UTF-8 UTF-8"
- ;;
- freebsd*)
- # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
- # localcharset.c falls back to using the full locale name
- # from the environment variables.
- echo "C ASCII"
- echo "US-ASCII ASCII"
- for l in la_LN lt_LN; do
- echo "$l.ASCII ASCII"
- done
- for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
- fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
- lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
- echo "$l.ISO_8859-1 ISO-8859-1"
- echo "$l.DIS_8859-15 ISO-8859-15"
- done
- for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
- echo "$l.ISO_8859-2 ISO-8859-2"
- done
- for l in la_LN lt_LT; do
- echo "$l.ISO_8859-4 ISO-8859-4"
- done
- for l in ru_RU ru_SU; do
- echo "$l.KOI8-R KOI8-R"
- echo "$l.ISO_8859-5 ISO-8859-5"
- echo "$l.CP866 CP866"
- done
- echo "uk_UA.KOI8-U KOI8-U"
- echo "zh_TW.BIG5 BIG5"
- echo "zh_TW.Big5 BIG5"
- echo "zh_CN.EUC GB2312"
- echo "ja_JP.EUC EUC-JP"
- echo "ja_JP.SJIS SHIFT_JIS"
- echo "ja_JP.Shift_JIS SHIFT_JIS"
- echo "ko_KR.EUC EUC-KR"
- ;;
- beos*)
- # BeOS has a single locale, and it has UTF-8 encoding.
- echo "* UTF-8"
- ;;
- msdosdjgpp*)
- # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
- # localcharset.c falls back to using the full locale name
- # from the environment variables.
- echo "#"
- echo "# The encodings given here may not all be correct."
- echo "# If you find that the encoding given for your language and"
- echo "# country is not the one your DOS machine actually uses, just"
- echo "# correct it in this file, and send a mail to"
- echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
- echo "# and Bruno Haible <haible@clisp.cons.org>."
- echo "#"
- echo "C ASCII"
- # ISO-8859-1 languages
- echo "ca CP850"
- echo "ca_ES CP850"
- echo "da CP865" # not CP850 ??
- echo "da_DK CP865" # not CP850 ??
- echo "de CP850"
- echo "de_AT CP850"
- echo "de_CH CP850"
- echo "de_DE CP850"
- echo "en CP850"
- echo "en_AU CP850" # not CP437 ??
- echo "en_CA CP850"
- echo "en_GB CP850"
- echo "en_NZ CP437"
- echo "en_US CP437"
- echo "en_ZA CP850" # not CP437 ??
- echo "es CP850"
- echo "es_AR CP850"
- echo "es_BO CP850"
- echo "es_CL CP850"
- echo "es_CO CP850"
- echo "es_CR CP850"
- echo "es_CU CP850"
- echo "es_DO CP850"
- echo "es_EC CP850"
- echo "es_ES CP850"
- echo "es_GT CP850"
- echo "es_HN CP850"
- echo "es_MX CP850"
- echo "es_NI CP850"
- echo "es_PA CP850"
- echo "es_PY CP850"
- echo "es_PE CP850"
- echo "es_SV CP850"
- echo "es_UY CP850"
- echo "es_VE CP850"
- echo "et CP850"
- echo "et_EE CP850"
- echo "eu CP850"
- echo "eu_ES CP850"
- echo "fi CP850"
- echo "fi_FI CP850"
- echo "fr CP850"
- echo "fr_BE CP850"
- echo "fr_CA CP850"
- echo "fr_CH CP850"
- echo "fr_FR CP850"
- echo "ga CP850"
- echo "ga_IE CP850"
- echo "gd CP850"
- echo "gd_GB CP850"
- echo "gl CP850"
- echo "gl_ES CP850"
- echo "id CP850" # not CP437 ??
- echo "id_ID CP850" # not CP437 ??
- echo "is CP861" # not CP850 ??
- echo "is_IS CP861" # not CP850 ??
- echo "it CP850"
- echo "it_CH CP850"
- echo "it_IT CP850"
- echo "lt CP775"
- echo "lt_LT CP775"
- echo "lv CP775"
- echo "lv_LV CP775"
- echo "nb CP865" # not CP850 ??
- echo "nb_NO CP865" # not CP850 ??
- echo "nl CP850"
- echo "nl_BE CP850"
- echo "nl_NL CP850"
- echo "nn CP865" # not CP850 ??
- echo "nn_NO CP865" # not CP850 ??
- echo "no CP865" # not CP850 ??
- echo "no_NO CP865" # not CP850 ??
- echo "pt CP850"
- echo "pt_BR CP850"
- echo "pt_PT CP850"
- echo "sv CP850"
- echo "sv_SE CP850"
- # ISO-8859-2 languages
- echo "cs CP852"
- echo "cs_CZ CP852"
- echo "hr CP852"
- echo "hr_HR CP852"
- echo "hu CP852"
- echo "hu_HU CP852"
- echo "pl CP852"
- echo "pl_PL CP852"
- echo "ro CP852"
- echo "ro_RO CP852"
- echo "sk CP852"
- echo "sk_SK CP852"
- echo "sl CP852"
- echo "sl_SI CP852"
- echo "sq CP852"
- echo "sq_AL CP852"
- echo "sr CP852" # CP852 or CP866 or CP855 ??
- echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
- # ISO-8859-3 languages
- echo "mt CP850"
- echo "mt_MT CP850"
- # ISO-8859-5 languages
- echo "be CP866"
- echo "be_BE CP866"
- echo "bg CP866" # not CP855 ??
- echo "bg_BG CP866" # not CP855 ??
- echo "mk CP866" # not CP855 ??
- echo "mk_MK CP866" # not CP855 ??
- echo "ru KOI8-R" # not CP866 ??
- echo "ru_RU KOI8-R" # not CP866 ??
- # ISO-8859-6 languages
- echo "ar CP864"
- echo "ar_AE CP864"
- echo "ar_DZ CP864"
- echo "ar_EG CP864"
- echo "ar_IQ CP864"
- echo "ar_IR CP864"
- echo "ar_JO CP864"
- echo "ar_KW CP864"
- echo "ar_MA CP864"
- echo "ar_OM CP864"
- echo "ar_QA CP864"
- echo "ar_SA CP864"
- echo "ar_SY CP864"
- # ISO-8859-7 languages
- echo "el CP869"
- echo "el_GR CP869"
- # ISO-8859-8 languages
- echo "he CP862"
- echo "he_IL CP862"
- # ISO-8859-9 languages
- echo "tr CP857"
- echo "tr_TR CP857"
- # Japanese
- echo "ja CP932"
- echo "ja_JP CP932"
- # Chinese
- echo "zh_CN GBK"
- echo "zh_TW CP950" # not CP938 ??
- # Korean
- echo "kr CP949" # not CP934 ??
- echo "kr_KR CP949" # not CP934 ??
- # Thai
- echo "th CP874"
- echo "th_TH CP874"
- # Other
- echo "eo CP850"
- echo "eo_EO CP850"
- ;;
-esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
deleted file mode 100644
index b7c96523d..000000000
--- a/intl/dcgettext.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Implementation of the dcgettext(3) function.
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DCGETTEXT __dcgettext
-# define DCIGETTEXT __dcigettext
-#else
-# define DCGETTEXT dcgettext__
-# define DCIGETTEXT dcigettext__
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-char *
-DCGETTEXT (domainname, msgid, category)
- const char *domainname;
- const char *msgid;
- int category;
-{
- return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dcgettext, dcgettext);
-#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
deleted file mode 100644
index 6acde195f..000000000
--- a/intl/dcigettext.c
+++ /dev/null
@@ -1,1259 +0,0 @@
-/* Implementation of the internal dcigettext function.
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-#endif
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(val) errno = (val)
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-
-#include <string.h>
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include <locale.h>
-
-#if defined HAVE_SYS_PARAM_H || defined _LIBC
-# include <sys/param.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-#include "hash-string.h"
-
-/* Thread safetyness. */
-#ifdef _LIBC
-# include <bits/libc-lock.h>
-#else
-/* Provide dummy implementation if this is outside glibc. */
-# define __libc_lock_define_initialized(CLASS, NAME)
-# define __libc_lock_lock(NAME)
-# define __libc_lock_unlock(NAME)
-# define __libc_rwlock_define_initialized(CLASS, NAME)
-# define __libc_rwlock_rdlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* Alignment of types. */
-#if defined __GNUC__ && __GNUC__ >= 2
-# define alignof(TYPE) __alignof__ (TYPE)
-#else
-# define alignof(TYPE) \
- ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
- names than the internal variables in GNU libc, otherwise programs
- using libintl.a cannot be linked statically. */
-#if !defined _LIBC
-# define _nl_default_default_domain _nl_default_default_domain__
-# define _nl_current_default_domain _nl_current_default_domain__
-# define _nl_default_dirname _nl_default_dirname__
-# define _nl_domain_bindings _nl_domain_bindings__
-#endif
-
-/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
-#ifndef offsetof
-# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# define getcwd __getcwd
-# ifndef stpcpy
-# define stpcpy __stpcpy
-# endif
-# define tfind __tfind
-#else
-# if !defined HAVE_GETCWD
-char *getwd ();
-# define getcwd(buf, max) getwd (buf)
-# else
-char *getcwd ();
-# endif
-# ifndef HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
-# endif
-# ifndef HAVE_MEMPCPY
-static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
-# endif
-#endif
-
-/* Amount to increase buffer size by in each try. */
-#define PATH_INCR 32
-
-/* The following is from pathmax.h. */
-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
- PATH_MAX but might cause redefinition warnings when sys/param.h is
- later included (as on MORE/BSD 4.3). */
-#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
-# include <limits.h>
-#endif
-
-#ifndef _POSIX_PATH_MAX
-# define _POSIX_PATH_MAX 255
-#endif
-
-#if !defined PATH_MAX && defined _PC_PATH_MAX
-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
-#endif
-
-/* Don't include sys/param.h if it already has been. */
-#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
-# include <sys/param.h>
-#endif
-
-#if !defined PATH_MAX && defined MAXPATHLEN
-# define PATH_MAX MAXPATHLEN
-#endif
-
-#ifndef PATH_MAX
-# define PATH_MAX _POSIX_PATH_MAX
-#endif
-
-/* Pathname support.
- ISSLASH(C) tests whether C is a directory separator character.
- IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
- it may be concatenated to a directory pathname.
- IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
- */
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
- /* Win32, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-# define HAS_DEVICE(P) \
- ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
- && (P)[1] == ':')
-# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
-# define IS_PATH_WITH_DIR(P) \
- (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
-#else
- /* Unix */
-# define ISSLASH(C) ((C) == '/')
-# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
-# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
-#endif
-
-/* XPG3 defines the result of `setlocale (category, NULL)' as:
- ``Directs `setlocale()' to query `category' and return the current
- setting of `local'.''
- However it does not specify the exact format. Neither do SUSV2 and
- ISO C 99. So we can use this feature only on selected systems (e.g.
- those using GNU C Library). */
-#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
-# define HAVE_LOCALE_NULL
-#endif
-
-/* This is the type used for the search tree where known translations
- are stored. */
-struct known_translation_t
-{
- /* Domain in which to search. */
- char *domainname;
-
- /* The category. */
- int category;
-
- /* State of the catalog counter at the point the string was found. */
- int counter;
-
- /* Catalog where the string was found. */
- struct loaded_l10nfile *domain;
-
- /* And finally the translation. */
- const char *translation;
- size_t translation_length;
-
- /* Pointer to the string in question. */
- char msgid[ZERO];
-};
-
-/* Root of the search tree with known translations. We can use this
- only if the system provides the `tsearch' function family. */
-#if defined HAVE_TSEARCH || defined _LIBC
-# include <search.h>
-
-static void *root;
-
-# ifdef _LIBC
-# define tsearch __tsearch
-# endif
-
-/* Function to compare two entries in the table of known translations. */
-static int transcmp PARAMS ((const void *p1, const void *p2));
-static int
-transcmp (p1, p2)
- const void *p1;
- const void *p2;
-{
- const struct known_translation_t *s1;
- const struct known_translation_t *s2;
- int result;
-
- s1 = (const struct known_translation_t *) p1;
- s2 = (const struct known_translation_t *) p2;
-
- result = strcmp (s1->msgid, s2->msgid);
- if (result == 0)
- {
- result = strcmp (s1->domainname, s2->domainname);
- if (result == 0)
- /* We compare the category last (though this is the cheapest
- operation) since it is hopefully always the same (namely
- LC_MESSAGES). */
- result = s1->category - s2->category;
- }
-
- return result;
-}
-#endif
-
-/* Name of the default domain used for gettext(3) prior any call to
- textdomain(3). The default value for this is "messages". */
-const char _nl_default_default_domain[] = "messages";
-
-/* Value used as the default domain for gettext(3). */
-const char *_nl_current_default_domain = _nl_default_default_domain;
-
-/* Contains the default location of the message catalogs. */
-const char _nl_default_dirname[] = LOCALEDIR;
-
-/* List with bindings of specific domains created by bindtextdomain()
- calls. */
-struct binding *_nl_domain_bindings;
-
-/* Prototypes for local functions. */
-static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
- unsigned long int n,
- const char *translation,
- size_t translation_len))
- internal_function;
-static unsigned long int plural_eval PARAMS ((struct expression *pexp,
- unsigned long int n))
- internal_function;
-static const char *category_to_name PARAMS ((int category)) internal_function;
-static const char *guess_category_value PARAMS ((int category,
- const char *categoryname))
- internal_function;
-
-
-/* For those loosing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-/* Nothing has to be done. */
-# define ADD_BLOCK(list, address) /* nothing */
-# define FREE_BLOCKS(list) /* nothing */
-#else
-struct block_list
-{
- void *address;
- struct block_list *next;
-};
-# define ADD_BLOCK(list, addr) \
- do { \
- struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
- /* If we cannot get a free block we cannot add the new element to \
- the list. */ \
- if (newp != NULL) { \
- newp->address = (addr); \
- newp->next = (list); \
- (list) = newp; \
- } \
- } while (0)
-# define FREE_BLOCKS(list) \
- do { \
- while (list != NULL) { \
- struct block_list *old = list; \
- list = list->next; \
- free (old); \
- } \
- } while (0)
-# undef alloca
-# define alloca(size) (malloc (size))
-#endif /* have alloca */
-
-
-#ifdef _LIBC
-/* List of blocks allocated for translations. */
-typedef struct transmem_list
-{
- struct transmem_list *next;
- char data[ZERO];
-} transmem_block_t;
-static struct transmem_list *transmem_list;
-#else
-typedef unsigned char transmem_block_t;
-#endif
-
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DCIGETTEXT __dcigettext
-#else
-# define DCIGETTEXT dcigettext__
-#endif
-
-/* Lock variable to protect the global data in the gettext implementation. */
-#ifdef _LIBC
-__libc_rwlock_define_initialized (, _nl_state_lock)
-#endif
-
-/* Checking whether the binaries runs SUID must be done and glibc provides
- easier methods therefore we make a difference here. */
-#ifdef _LIBC
-# define ENABLE_SECURE __libc_enable_secure
-# define DETERMINE_SECURE
-#else
-# ifndef HAVE_GETUID
-# define getuid() 0
-# endif
-# ifndef HAVE_GETGID
-# define getgid() 0
-# endif
-# ifndef HAVE_GETEUID
-# define geteuid() getuid()
-# endif
-# ifndef HAVE_GETEGID
-# define getegid() getgid()
-# endif
-static int enable_secure;
-# define ENABLE_SECURE (enable_secure == 1)
-# define DETERMINE_SECURE \
- if (enable_secure == 0) \
- { \
- if (getuid () != geteuid () || getgid () != getegid ()) \
- enable_secure = 1; \
- else \
- enable_secure = -1; \
- }
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current
- CATEGORY locale and, if PLURAL is nonzero, search over string
- depending on the plural form determined by N. */
-char *
-DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
- const char *domainname;
- const char *msgid1;
- const char *msgid2;
- int plural;
- unsigned long int n;
- int category;
-{
-#ifndef HAVE_ALLOCA
- struct block_list *block_list = NULL;
-#endif
- struct loaded_l10nfile *domain;
- struct binding *binding;
- const char *categoryname;
- const char *categoryvalue;
- char *dirname, *xdomainname;
- char *single_locale;
- char *retval;
- size_t retlen;
- int saved_errno;
-#if defined HAVE_TSEARCH || defined _LIBC
- struct known_translation_t *search;
- struct known_translation_t **foundp = NULL;
- size_t msgid_len;
-#endif
- size_t domainname_len;
-
- /* If no real MSGID is given return NULL. */
- if (msgid1 == NULL)
- return NULL;
-
- __libc_rwlock_rdlock (_nl_state_lock);
-
- /* If DOMAINNAME is NULL, we are interested in the default domain. If
- CATEGORY is not LC_MESSAGES this might not make much sense but the
- definition left this undefined. */
- if (domainname == NULL)
- domainname = _nl_current_default_domain;
-
-#if defined HAVE_TSEARCH || defined _LIBC
- msgid_len = strlen (msgid1) + 1;
-
- /* Try to find the translation among those which we found at
- some time. */
- search = (struct known_translation_t *)
- alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
- memcpy (search->msgid, msgid1, msgid_len);
- search->domainname = (char *) domainname;
- search->category = category;
-
- foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
- if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
- {
- /* Now deal with plural. */
- if (plural)
- retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
- (*foundp)->translation_length);
- else
- retval = (char *) (*foundp)->translation;
-
- __libc_rwlock_unlock (_nl_state_lock);
- return retval;
- }
-#endif
-
- /* Preserve the `errno' value. */
- saved_errno = errno;
-
- /* See whether this is a SUID binary or not. */
- DETERMINE_SECURE;
-
- /* First find matching binding. */
- for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
- {
- int compare = strcmp (domainname, binding->domainname);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It is not in the list. */
- binding = NULL;
- break;
- }
- }
-
- if (binding == NULL)
- dirname = (char *) _nl_default_dirname;
- else if (IS_ABSOLUTE_PATH (binding->dirname))
- dirname = binding->dirname;
- else
- {
- /* We have a relative path. Make it absolute now. */
- size_t dirname_len = strlen (binding->dirname) + 1;
- size_t path_max;
- char *ret;
-
- path_max = (unsigned int) PATH_MAX;
- path_max += 2; /* The getcwd docs say to do this. */
-
- for (;;)
- {
- dirname = (char *) alloca (path_max + dirname_len);
- ADD_BLOCK (block_list, dirname);
-
- __set_errno (0);
- ret = getcwd (dirname, path_max);
- if (ret != NULL || errno != ERANGE)
- break;
-
- path_max += path_max / 2;
- path_max += PATH_INCR;
- }
-
- if (ret == NULL)
- {
- /* We cannot get the current working directory. Don't signal an
- error but simply return the default string. */
- FREE_BLOCKS (block_list);
- __libc_rwlock_unlock (_nl_state_lock);
- __set_errno (saved_errno);
- return (plural == 0
- ? (char *) msgid1
- /* Use the Germanic plural rule. */
- : n == 1 ? (char *) msgid1 : (char *) msgid2);
- }
-
- stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
- }
-
- /* Now determine the symbolic name of CATEGORY and its value. */
- categoryname = category_to_name (category);
- categoryvalue = guess_category_value (category, categoryname);
-
- domainname_len = strlen (domainname);
- xdomainname = (char *) alloca (strlen (categoryname)
- + domainname_len + 5);
- ADD_BLOCK (block_list, xdomainname);
-
- stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
- domainname, domainname_len),
- ".mo");
-
- /* Creating working area. */
- single_locale = (char *) alloca (strlen (categoryvalue) + 1);
- ADD_BLOCK (block_list, single_locale);
-
-
- /* Search for the given string. This is a loop because we perhaps
- got an ordered list of languages to consider for the translation. */
- while (1)
- {
- /* Make CATEGORYVALUE point to the next element of the list. */
- while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
- ++categoryvalue;
- if (categoryvalue[0] == '\0')
- {
- /* The whole contents of CATEGORYVALUE has been searched but
- no valid entry has been found. We solve this situation
- by implicitly appending a "C" entry, i.e. no translation
- will take place. */
- single_locale[0] = 'C';
- single_locale[1] = '\0';
- }
- else
- {
- char *cp = single_locale;
- while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
- *cp++ = *categoryvalue++;
- *cp = '\0';
-
- /* When this is a SUID binary we must not allow accessing files
- outside the dedicated directories. */
- if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
- /* Ingore this entry. */
- continue;
- }
-
- /* If the current locale value is C (or POSIX) we don't load a
- domain. Return the MSGID. */
- if (strcmp (single_locale, "C") == 0
- || strcmp (single_locale, "POSIX") == 0)
- {
- FREE_BLOCKS (block_list);
- __libc_rwlock_unlock (_nl_state_lock);
- __set_errno (saved_errno);
- return (plural == 0
- ? (char *) msgid1
- /* Use the Germanic plural rule. */
- : n == 1 ? (char *) msgid1 : (char *) msgid2);
- }
-
-
- /* Find structure describing the message catalog matching the
- DOMAINNAME and CATEGORY. */
- domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
-
- if (domain != NULL)
- {
- retval = _nl_find_msg (domain, binding, msgid1, &retlen);
-
- if (retval == NULL)
- {
- int cnt;
-
- for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
- {
- retval = _nl_find_msg (domain->successor[cnt], binding,
- msgid1, &retlen);
-
- if (retval != NULL)
- {
- domain = domain->successor[cnt];
- break;
- }
- }
- }
-
- if (retval != NULL)
- {
- /* Found the translation of MSGID1 in domain DOMAIN:
- starting at RETVAL, RETLEN bytes. */
- FREE_BLOCKS (block_list);
- __set_errno (saved_errno);
-#if defined HAVE_TSEARCH || defined _LIBC
- if (foundp == NULL)
- {
- /* Create a new entry and add it to the search tree. */
- struct known_translation_t *newp;
-
- newp = (struct known_translation_t *)
- malloc (offsetof (struct known_translation_t, msgid)
- + msgid_len + domainname_len + 1);
- if (newp != NULL)
- {
- newp->domainname =
- mempcpy (newp->msgid, msgid1, msgid_len);
- memcpy (newp->domainname, domainname, domainname_len + 1);
- newp->category = category;
- newp->counter = _nl_msg_cat_cntr;
- newp->domain = domain;
- newp->translation = retval;
- newp->translation_length = retlen;
-
- /* Insert the entry in the search tree. */
- foundp = (struct known_translation_t **)
- tsearch (newp, &root, transcmp);
- if (foundp == NULL
- || __builtin_expect (*foundp != newp, 0))
- /* The insert failed. */
- free (newp);
- }
- }
- else
- {
- /* We can update the existing entry. */
- (*foundp)->counter = _nl_msg_cat_cntr;
- (*foundp)->domain = domain;
- (*foundp)->translation = retval;
- (*foundp)->translation_length = retlen;
- }
-#endif
- /* Now deal with plural. */
- if (plural)
- retval = plural_lookup (domain, n, retval, retlen);
-
- __libc_rwlock_unlock (_nl_state_lock);
- return retval;
- }
- }
- }
- /* NOTREACHED */
-}
-
-
-char *
-internal_function
-_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
- struct loaded_l10nfile *domain_file;
- struct binding *domainbinding;
- const char *msgid;
- size_t *lengthp;
-{
- struct loaded_domain *domain;
- size_t act;
- char *result;
- size_t resultlen;
-
- if (domain_file->decided == 0)
- _nl_load_domain (domain_file, domainbinding);
-
- if (domain_file->data == NULL)
- return NULL;
-
- domain = (struct loaded_domain *) domain_file->data;
-
- /* Locate the MSGID and its translation. */
- if (domain->hash_size > 2 && domain->hash_tab != NULL)
- {
- /* Use the hashing table. */
- nls_uint32 len = strlen (msgid);
- nls_uint32 hash_val = hash_string (msgid);
- nls_uint32 idx = hash_val % domain->hash_size;
- nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
-
- while (1)
- {
- nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
-
- if (nstr == 0)
- /* Hash table entry is empty. */
- return NULL;
-
- /* Compare msgid with the original string at index nstr-1.
- We compare the lengths with >=, not ==, because plural entries
- are represented by strings with an embedded NUL. */
- if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
- && (strcmp (msgid,
- domain->data + W (domain->must_swap,
- domain->orig_tab[nstr - 1].offset))
- == 0))
- {
- act = nstr - 1;
- goto found;
- }
-
- if (idx >= domain->hash_size - incr)
- idx -= domain->hash_size - incr;
- else
- idx += incr;
- }
- /* NOTREACHED */
- }
- else
- {
- /* Try the default method: binary search in the sorted array of
- messages. */
- size_t top, bottom;
-
- bottom = 0;
- top = domain->nstrings;
- while (bottom < top)
- {
- int cmp_val;
-
- act = (bottom + top) / 2;
- cmp_val = strcmp (msgid, (domain->data
- + W (domain->must_swap,
- domain->orig_tab[act].offset)));
- if (cmp_val < 0)
- top = act;
- else if (cmp_val > 0)
- bottom = act + 1;
- else
- goto found;
- }
- /* No translation was found. */
- return NULL;
- }
-
- found:
- /* The translation was found at index ACT. If we have to convert the
- string to use a different character set, this is the time. */
- result = ((char *) domain->data
- + W (domain->must_swap, domain->trans_tab[act].offset));
- resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
-
-#if defined _LIBC || HAVE_ICONV
- if (domain->codeset_cntr
- != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
- {
- /* The domain's codeset has changed through bind_textdomain_codeset()
- since the message catalog was initialized or last accessed. We
- have to reinitialize the converter. */
- _nl_free_domain_conv (domain);
- _nl_init_domain_conv (domain_file, domain, domainbinding);
- }
-
- if (
-# ifdef _LIBC
- domain->conv != (__gconv_t) -1
-# else
-# if HAVE_ICONV
- domain->conv != (iconv_t) -1
-# endif
-# endif
- )
- {
- /* We are supposed to do a conversion. First allocate an
- appropriate table with the same structure as the table
- of translations in the file, where we can put the pointers
- to the converted strings in.
- There is a slight complication with plural entries. They
- are represented by consecutive NUL terminated strings. We
- handle this case by converting RESULTLEN bytes, including
- NULs. */
-
- if (domain->conv_tab == NULL
- && ((domain->conv_tab = (char **) calloc (domain->nstrings,
- sizeof (char *)))
- == NULL))
- /* Mark that we didn't succeed allocating a table. */
- domain->conv_tab = (char **) -1;
-
- if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
- /* Nothing we can do, no more memory. */
- goto converted;
-
- if (domain->conv_tab[act] == NULL)
- {
- /* We haven't used this string so far, so it is not
- translated yet. Do this now. */
- /* We use a bit more efficient memory handling.
- We allocate always larger blocks which get used over
- time. This is faster than many small allocations. */
- __libc_lock_define_initialized (static, lock)
-# define INITIAL_BLOCK_SIZE 4080
- static unsigned char *freemem;
- static size_t freemem_size;
-
- const unsigned char *inbuf;
- unsigned char *outbuf;
- int malloc_count;
-# ifndef _LIBC
- transmem_block_t *transmem_list = NULL;
-# endif
-
- __libc_lock_lock (lock);
-
- inbuf = (const unsigned char *) result;
- outbuf = freemem + sizeof (size_t);
-
- malloc_count = 0;
- while (1)
- {
- transmem_block_t *newmem;
-# ifdef _LIBC
- size_t non_reversible;
- int res;
-
- if (freemem_size < sizeof (size_t))
- goto resize_freemem;
-
- res = __gconv (domain->conv,
- &inbuf, inbuf + resultlen,
- &outbuf,
- outbuf + freemem_size - sizeof (size_t),
- &non_reversible);
-
- if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
- break;
-
- if (res != __GCONV_FULL_OUTPUT)
- {
- __libc_lock_unlock (lock);
- goto converted;
- }
-
- inbuf = result;
-# else
-# if HAVE_ICONV
- const char *inptr = (const char *) inbuf;
- size_t inleft = resultlen;
- char *outptr = (char *) outbuf;
- size_t outleft;
-
- if (freemem_size < sizeof (size_t))
- goto resize_freemem;
-
- outleft = freemem_size - sizeof (size_t);
- if (iconv (domain->conv,
- (ICONV_CONST char **) &inptr, &inleft,
- &outptr, &outleft)
- != (size_t) (-1))
- {
- outbuf = (unsigned char *) outptr;
- break;
- }
- if (errno != E2BIG)
- {
- __libc_lock_unlock (lock);
- goto converted;
- }
-# endif
-# endif
-
- resize_freemem:
- /* We must allocate a new buffer or resize the old one. */
- if (malloc_count > 0)
- {
- ++malloc_count;
- freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
- newmem = (transmem_block_t *) realloc (transmem_list,
- freemem_size);
-# ifdef _LIBC
- if (newmem != NULL)
- transmem_list = transmem_list->next;
- else
- {
- struct transmem_list *old = transmem_list;
-
- transmem_list = transmem_list->next;
- free (old);
- }
-# endif
- }
- else
- {
- malloc_count = 1;
- freemem_size = INITIAL_BLOCK_SIZE;
- newmem = (transmem_block_t *) malloc (freemem_size);
- }
- if (__builtin_expect (newmem == NULL, 0))
- {
- freemem = NULL;
- freemem_size = 0;
- __libc_lock_unlock (lock);
- goto converted;
- }
-
-# ifdef _LIBC
- /* Add the block to the list of blocks we have to free
- at some point. */
- newmem->next = transmem_list;
- transmem_list = newmem;
-
- freemem = newmem->data;
- freemem_size -= offsetof (struct transmem_list, data);
-# else
- transmem_list = newmem;
- freemem = newmem;
-# endif
-
- outbuf = freemem + sizeof (size_t);
- }
-
- /* We have now in our buffer a converted string. Put this
- into the table of conversions. */
- *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
- domain->conv_tab[act] = (char *) freemem;
- /* Shrink freemem, but keep it aligned. */
- freemem_size -= outbuf - freemem;
- freemem = outbuf;
- freemem += freemem_size & (alignof (size_t) - 1);
- freemem_size = freemem_size & ~ (alignof (size_t) - 1);
-
- __libc_lock_unlock (lock);
- }
-
- /* Now domain->conv_tab[act] contains the translation of all
- the plural variants. */
- result = domain->conv_tab[act] + sizeof (size_t);
- resultlen = *(size_t *) domain->conv_tab[act];
- }
-
- converted:
- /* The result string is converted. */
-
-#endif /* _LIBC || HAVE_ICONV */
-
- *lengthp = resultlen;
- return result;
-}
-
-
-/* Look up a plural variant. */
-static char *
-internal_function
-plural_lookup (domain, n, translation, translation_len)
- struct loaded_l10nfile *domain;
- unsigned long int n;
- const char *translation;
- size_t translation_len;
-{
- struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
- unsigned long int index;
- const char *p;
-
- index = plural_eval (domaindata->plural, n);
- if (index >= domaindata->nplurals)
- /* This should never happen. It means the plural expression and the
- given maximum value do not match. */
- index = 0;
-
- /* Skip INDEX strings at TRANSLATION. */
- p = translation;
- while (index-- > 0)
- {
-#ifdef _LIBC
- p = __rawmemchr (p, '\0');
-#else
- p = strchr (p, '\0');
-#endif
- /* And skip over the NUL byte. */
- p++;
-
- if (p >= translation + translation_len)
- /* This should never happen. It means the plural expression
- evaluated to a value larger than the number of variants
- available for MSGID1. */
- return (char *) translation;
- }
- return (char *) p;
-}
-
-
-/* Function to evaluate the plural expression and return an index value. */
-static unsigned long int
-internal_function
-plural_eval (pexp, n)
- struct expression *pexp;
- unsigned long int n;
-{
- switch (pexp->nargs)
- {
- case 0:
- switch (pexp->operation)
- {
- case var:
- return n;
- case num:
- return pexp->val.num;
- default:
- break;
- }
- /* NOTREACHED */
- break;
- case 1:
- {
- /* pexp->operation must be lnot. */
- unsigned long int arg = plural_eval (pexp->val.args[0], n);
- return ! arg;
- }
- case 2:
- {
- unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
- if (pexp->operation == lor)
- return leftarg || plural_eval (pexp->val.args[1], n);
- else if (pexp->operation == land)
- return leftarg && plural_eval (pexp->val.args[1], n);
- else
- {
- unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
-
- switch (pexp->operation)
- {
- case mult:
- return leftarg * rightarg;
- case divide:
- return leftarg / rightarg;
- case module:
- return leftarg % rightarg;
- case plus:
- return leftarg + rightarg;
- case minus:
- return leftarg - rightarg;
- case less_than:
- return leftarg < rightarg;
- case greater_than:
- return leftarg > rightarg;
- case less_or_equal:
- return leftarg <= rightarg;
- case greater_or_equal:
- return leftarg >= rightarg;
- case equal:
- return leftarg == rightarg;
- case not_equal:
- return leftarg != rightarg;
- default:
- break;
- }
- }
- /* NOTREACHED */
- break;
- }
- case 3:
- {
- /* pexp->operation must be qmop. */
- unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
- return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
- }
- }
- /* NOTREACHED */
- return 0;
-}
-
-
-/* Return string representation of locale CATEGORY. */
-static const char *
-internal_function
-category_to_name (category)
- int category;
-{
- const char *retval;
-
- switch (category)
- {
-#ifdef LC_COLLATE
- case LC_COLLATE:
- retval = "LC_COLLATE";
- break;
-#endif
-#ifdef LC_CTYPE
- case LC_CTYPE:
- retval = "LC_CTYPE";
- break;
-#endif
-#ifdef LC_MONETARY
- case LC_MONETARY:
- retval = "LC_MONETARY";
- break;
-#endif
-#ifdef LC_NUMERIC
- case LC_NUMERIC:
- retval = "LC_NUMERIC";
- break;
-#endif
-#ifdef LC_TIME
- case LC_TIME:
- retval = "LC_TIME";
- break;
-#endif
-#ifdef LC_MESSAGES
- case LC_MESSAGES:
- retval = "LC_MESSAGES";
- break;
-#endif
-#ifdef LC_RESPONSE
- case LC_RESPONSE:
- retval = "LC_RESPONSE";
- break;
-#endif
-#ifdef LC_ALL
- case LC_ALL:
- /* This might not make sense but is perhaps better than any other
- value. */
- retval = "LC_ALL";
- break;
-#endif
- default:
- /* If you have a better idea for a default value let me know. */
- retval = "LC_XXX";
- }
-
- return retval;
-}
-
-/* Guess value of current locale from value of the environment variables. */
-static const char *
-internal_function
-guess_category_value (category, categoryname)
- int category;
- const char *categoryname;
-{
- const char *language;
- const char *retval;
-
- /* The highest priority value is the `LANGUAGE' environment
- variable. But we don't use the value if the currently selected
- locale is the C locale. This is a GNU extension. */
- language = getenv ("LANGUAGE");
- if (language != NULL && language[0] == '\0')
- language = NULL;
-
- /* We have to proceed with the POSIX methods of looking to `LC_ALL',
- `LC_xxx', and `LANG'. On some systems this can be done by the
- `setlocale' function itself. */
-#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
- retval = setlocale (category, NULL);
-#else
- /* Setting of LC_ALL overwrites all other. */
- retval = getenv ("LC_ALL");
- if (retval == NULL || retval[0] == '\0')
- {
- /* Next comes the name of the desired category. */
- retval = getenv (categoryname);
- if (retval == NULL || retval[0] == '\0')
- {
- /* Last possibility is the LANG environment variable. */
- retval = getenv ("LANG");
- if (retval == NULL || retval[0] == '\0')
- /* We use C as the default domain. POSIX says this is
- implementation defined. */
- return "C";
- }
- }
-#endif
-
- return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
-}
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library. So we
- avoid the non-standard function stpcpy. In GNU C Library this
- function is available, though. Also allow the symbol HAVE_STPCPY
- to be defined. */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (dest, src)
- char *dest;
- const char *src;
-{
- while ((*dest++ = *src++) != '\0')
- /* Do nothing. */ ;
- return dest - 1;
-}
-#endif
-
-#if !_LIBC && !HAVE_MEMPCPY
-static void *
-mempcpy (dest, src, n)
- void *dest;
- const void *src;
- size_t n;
-{
- return (void *) ((char *) memcpy (dest, src, n) + n);
-}
-#endif
-
-
-#ifdef _LIBC
-/* If we want to free all resources we have to do some work at
- program's end. */
-static void __attribute__ ((unused))
-free_mem (void)
-{
- void *old;
-
- while (_nl_domain_bindings != NULL)
- {
- struct binding *oldp = _nl_domain_bindings;
- _nl_domain_bindings = _nl_domain_bindings->next;
- if (oldp->dirname != _nl_default_dirname)
- /* Yes, this is a pointer comparison. */
- free (oldp->dirname);
- free (oldp->codeset);
- free (oldp);
- }
-
- if (_nl_current_default_domain != _nl_default_default_domain)
- /* Yes, again a pointer comparison. */
- free ((char *) _nl_current_default_domain);
-
- /* Remove the search tree with the known translations. */
- __tdestroy (root, free);
- root = NULL;
-
- while (transmem_list != NULL)
- {
- old = transmem_list;
- transmem_list = transmem_list->next;
- free (old);
- }
-}
-
-text_set_element (__libc_subfreeres, free_mem);
-#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
deleted file mode 100644
index c16af2126..000000000
--- a/intl/dcngettext.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Implementation of the dcngettext(3) function.
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DCNGETTEXT __dcngettext
-# define DCIGETTEXT __dcigettext
-#else
-# define DCNGETTEXT dcngettext__
-# define DCIGETTEXT dcigettext__
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
- locale. */
-char *
-DCNGETTEXT (domainname, msgid1, msgid2, n, category)
- const char *domainname;
- const char *msgid1;
- const char *msgid2;
- unsigned long int n;
- int category;
-{
- return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dcngettext, dcngettext);
-#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
deleted file mode 100644
index 3651207a0..000000000
--- a/intl/dgettext.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Implementation of the dgettext(3) function.
- Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <locale.h>
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DGETTEXT __dgettext
-# define DCGETTEXT __dcgettext
-#else
-# define DGETTEXT dgettext__
-# define DCGETTEXT dcgettext__
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog of the current
- LC_MESSAGES locale. */
-char *
-DGETTEXT (domainname, msgid)
- const char *domainname;
- const char *msgid;
-{
- return DCGETTEXT (domainname, msgid, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dgettext, dgettext);
-#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
deleted file mode 100644
index f214e95b4..000000000
--- a/intl/dngettext.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Implementation of the dngettext(3) function.
- Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <locale.h>
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define DNGETTEXT __dngettext
-# define DCNGETTEXT __dcngettext
-#else
-# define DNGETTEXT dngettext__
-# define DCNGETTEXT dcngettext__
-#endif
-
-/* Look up MSGID in the DOMAINNAME message catalog of the current
- LC_MESSAGES locale and skip message according to the plural form. */
-char *
-DNGETTEXT (domainname, msgid1, msgid2, n)
- const char *domainname;
- const char *msgid1;
- const char *msgid2;
- unsigned long int n;
-{
- return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__dngettext, dngettext);
-#endif
diff --git a/intl/finddomain.c b/intl/finddomain.c
deleted file mode 100644
index 2f103d556..000000000
--- a/intl/finddomain.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* Handle list of needed message catalogs
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@gnu.org>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-/* List of already loaded domains. */
-static struct loaded_l10nfile *_nl_loaded_domains;
-
-
-/* Return a data structure describing the message catalog described by
- the DOMAINNAME and CATEGORY parameters with respect to the currently
- established bindings. */
-struct loaded_l10nfile *
-internal_function
-_nl_find_domain (dirname, locale, domainname, domainbinding)
- const char *dirname;
- char *locale;
- const char *domainname;
- struct binding *domainbinding;
-{
- struct loaded_l10nfile *retval;
- const char *language;
- const char *modifier;
- const char *territory;
- const char *codeset;
- const char *normalized_codeset;
- const char *special;
- const char *sponsor;
- const char *revision;
- const char *alias_value;
- int mask;
-
- /* LOCALE can consist of up to four recognized parts for the XPG syntax:
-
- language[_territory[.codeset]][@modifier]
-
- and six parts for the CEN syntax:
-
- language[_territory][+audience][+special][,[sponsor][_revision]]
-
- Beside the first part all of them are allowed to be missing. If
- the full specified locale is not found, the less specific one are
- looked for. The various parts will be stripped off according to
- the following order:
- (1) revision
- (2) sponsor
- (3) special
- (4) codeset
- (5) normalized codeset
- (6) territory
- (7) audience/modifier
- */
-
- /* If we have already tested for this locale entry there has to
- be one data set in the list of loaded domains. */
- retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
- strlen (dirname) + 1, 0, locale, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, domainname, 0);
- if (retval != NULL)
- {
- /* We know something about this locale. */
- int cnt;
-
- if (retval->decided == 0)
- _nl_load_domain (retval, domainbinding);
-
- if (retval->data != NULL)
- return retval;
-
- for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
- {
- if (retval->successor[cnt]->decided == 0)
- _nl_load_domain (retval->successor[cnt], domainbinding);
-
- if (retval->successor[cnt]->data != NULL)
- break;
- }
- return cnt >= 0 ? retval : NULL;
- /* NOTREACHED */
- }
-
- /* See whether the locale value is an alias. If yes its value
- *overwrites* the alias name. No test for the original value is
- done. */
- alias_value = _nl_expand_alias (locale);
- if (alias_value != NULL)
- {
-#if defined _LIBC || defined HAVE_STRDUP
- locale = strdup (alias_value);
- if (locale == NULL)
- return NULL;
-#else
- size_t len = strlen (alias_value) + 1;
- locale = (char *) malloc (len);
- if (locale == NULL)
- return NULL;
-
- memcpy (locale, alias_value, len);
-#endif
- }
-
- /* Now we determine the single parts of the locale name. First
- look for the language. Termination symbols are `_' and `@' if
- we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
- mask = _nl_explode_name (locale, &language, &modifier, &territory,
- &codeset, &normalized_codeset, &special,
- &sponsor, &revision);
-
- /* Create all possible locale entries which might be interested in
- generalization. */
- retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
- strlen (dirname) + 1, mask, language, territory,
- codeset, normalized_codeset, modifier, special,
- sponsor, revision, domainname, 1);
- if (retval == NULL)
- /* This means we are out of core. */
- return NULL;
-
- if (retval->decided == 0)
- _nl_load_domain (retval, domainbinding);
- if (retval->data == NULL)
- {
- int cnt;
- for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
- {
- if (retval->successor[cnt]->decided == 0)
- _nl_load_domain (retval->successor[cnt], domainbinding);
- if (retval->successor[cnt]->data != NULL)
- break;
- }
- }
-
- /* The room for an alias was dynamically allocated. Free it now. */
- if (alias_value != NULL)
- free (locale);
-
- /* The space for normalized_codeset is dynamically allocated. Free it. */
- if (mask & XPG_NORM_CODESET)
- free ((void *) normalized_codeset);
-
- return retval;
-}
-
-
-#ifdef _LIBC
-static void __attribute__ ((unused))
-free_mem (void)
-{
- struct loaded_l10nfile *runp = _nl_loaded_domains;
-
- while (runp != NULL)
- {
- struct loaded_l10nfile *here = runp;
- if (runp->data != NULL)
- _nl_unload_domain ((struct loaded_domain *) runp->data);
- runp = runp->next;
- free ((char *) here->filename);
- free (here);
- }
-}
-
-text_set_element (__libc_subfreeres, free_mem);
-#endif
diff --git a/intl/gettext.c b/intl/gettext.c
deleted file mode 100644
index 22a6c2453..000000000
--- a/intl/gettext.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Implementation of gettext(3) function.
- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef _LIBC
-# define __need_NULL
-# include <stddef.h>
-#else
-# include <stdlib.h> /* Just for NULL. */
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define GETTEXT __gettext
-# define DCGETTEXT __dcgettext
-#else
-# define GETTEXT gettext__
-# define DCGETTEXT dcgettext__
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-char *
-GETTEXT (msgid)
- const char *msgid;
-{
- return DCGETTEXT (NULL, msgid, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__gettext, gettext);
-#endif
diff --git a/intl/gettext.h b/intl/gettext.h
deleted file mode 100644
index 6f5d76055..000000000
--- a/intl/gettext.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Description of GNU message catalog format: general file layout.
- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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 _GETTEXT_H
-#define _GETTEXT_H 1
-
-#if HAVE_LIMITS_H || _LIBC
-# include <limits.h>
-#endif
-
-/* @@ end of prolog @@ */
-
-/* The magic number of the GNU message catalog format. */
-#define _MAGIC 0x950412de
-#define _MAGIC_SWAPPED 0xde120495
-
-/* Revision number of the currently used .mo (binary) file format. */
-#define MO_REVISION_NUMBER 0
-
-/* The following contortions are an attempt to use the C preprocessor
- to determine an unsigned integral type that is 32 bits wide. An
- alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
- as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
- when cross-compiling. */
-
-#if __STDC__
-# define UINT_MAX_32_BITS 4294967295U
-#else
-# define UINT_MAX_32_BITS 0xFFFFFFFF
-#endif
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-#ifndef UINT_MAX
-# define UINT_MAX UINT_MAX_32_BITS
-#endif
-
-#if UINT_MAX == UINT_MAX_32_BITS
-typedef unsigned nls_uint32;
-#else
-# if USHRT_MAX == UINT_MAX_32_BITS
-typedef unsigned short nls_uint32;
-# else
-# if ULONG_MAX == UINT_MAX_32_BITS
-typedef unsigned long nls_uint32;
-# else
- /* The following line is intended to throw an error. Using #error is
- not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-#endif
-
-
-/* Header for binary .mo file format. */
-struct mo_file_header
-{
- /* The magic number. */
- nls_uint32 magic;
- /* The revision number of the file format. */
- nls_uint32 revision;
- /* The number of strings pairs. */
- nls_uint32 nstrings;
- /* Offset of table with start offsets of original strings. */
- nls_uint32 orig_tab_offset;
- /* Offset of table with start offsets of translation strings. */
- nls_uint32 trans_tab_offset;
- /* Size of hashing table. */
- nls_uint32 hash_tab_size;
- /* Offset of first hashing entry. */
- nls_uint32 hash_tab_offset;
-};
-
-struct string_desc
-{
- /* Length of addressed string. */
- nls_uint32 length;
- /* Offset of string in file. */
- nls_uint32 offset;
-};
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettext.h */
diff --git a/intl/gettextP.h b/intl/gettextP.h
deleted file mode 100644
index 43de1cd47..000000000
--- a/intl/gettextP.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Header describing internals of libintl library.
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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 _GETTEXTP_H
-#define _GETTEXTP_H
-
-#include <stddef.h> /* Get size_t. */
-
-#ifdef _LIBC
-# include "../iconv/gconv_int.h"
-#else
-# if HAVE_ICONV
-# include <iconv.h>
-# endif
-#endif
-
-#include "loadinfo.h"
-
-#include "gettext.h" /* Get nls_uint32. */
-
-/* @@ end of prolog @@ */
-
-#ifndef PARAMS
-# if __STDC__
-# define PARAMS(args) args
-# else
-# define PARAMS(args) ()
-# endif
-#endif
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-/* Tell the compiler when a conditional or integer expression is
- almost always true or almost always false. */
-#ifndef HAVE_BUILTIN_EXPECT
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-#ifndef W
-# define W(flag, data) ((flag) ? SWAP (data) : (data))
-#endif
-
-
-#ifdef _LIBC
-# include <byteswap.h>
-# define SWAP(i) bswap_32 (i)
-#else
-static inline nls_uint32
-SWAP (i)
- nls_uint32 i;
-{
- return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
-}
-#endif
-
-
-/* This is the representation of the expressions to determine the
- plural form. */
-struct expression
-{
- int nargs; /* Number of arguments. */
- enum operator
- {
- /* Without arguments: */
- var, /* The variable "n". */
- num, /* Decimal number. */
- /* Unary operators: */
- lnot, /* Logical NOT. */
- /* Binary operators: */
- mult, /* Multiplication. */
- divide, /* Division. */
- module, /* Module operation. */
- plus, /* Addition. */
- minus, /* Subtraction. */
- less_than, /* Comparison. */
- greater_than, /* Comparison. */
- less_or_equal, /* Comparison. */
- greater_or_equal, /* Comparison. */
- equal, /* Comparision for equality. */
- not_equal, /* Comparision for inequality. */
- land, /* Logical AND. */
- lor, /* Logical OR. */
- /* Ternary operators: */
- qmop /* Question mark operator. */
- } operation;
- union
- {
- unsigned long int num; /* Number value for `num'. */
- struct expression *args[3]; /* Up to three arguments. */
- } val;
-};
-
-/* This is the data structure to pass information to the parser and get
- the result in a thread-safe way. */
-struct parse_args
-{
- const char *cp;
- struct expression *res;
-};
-
-
-/* The representation of an opened message catalog. */
-struct loaded_domain
-{
- const char *data;
- int use_mmap;
- size_t mmap_size;
- int must_swap;
- nls_uint32 nstrings;
- struct string_desc *orig_tab;
- struct string_desc *trans_tab;
- nls_uint32 hash_size;
- nls_uint32 *hash_tab;
- int codeset_cntr;
-#ifdef _LIBC
- __gconv_t conv;
-#else
-# if HAVE_ICONV
- iconv_t conv;
-# endif
-#endif
- char **conv_tab;
-
- struct expression *plural;
- unsigned long int nplurals;
-};
-
-/* We want to allocate a string at the end of the struct. But ISO C
- doesn't allow zero sized arrays. */
-#ifdef __GNUC__
-# define ZERO 0
-#else
-# define ZERO 1
-#endif
-
-/* A set of settings bound to a message domain. Used to store settings
- from bindtextdomain() and bind_textdomain_codeset(). */
-struct binding
-{
- struct binding *next;
- char *dirname;
- int codeset_cntr; /* Incremented each time codeset changes. */
- char *codeset;
- char domainname[ZERO];
-};
-
-/* A counter which is incremented each time some previous translations
- become invalid.
- This variable is part of the external ABI of the GNU libintl. */
-extern int _nl_msg_cat_cntr;
-
-struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
- char *__locale,
- const char *__domainname,
- struct binding *__domainbinding))
- internal_function;
-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
- struct binding *__domainbinding))
- internal_function;
-void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
- internal_function;
-const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
- struct loaded_domain *__domain,
- struct binding *__domainbinding))
- internal_function;
-void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
- internal_function;
-
-char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
- struct binding *domainbinding,
- const char *msgid, size_t *lengthp))
- internal_function;
-
-#ifdef _LIBC
-extern char *__gettext PARAMS ((const char *__msgid));
-extern char *__dgettext PARAMS ((const char *__domainname,
- const char *__msgid));
-extern char *__dcgettext PARAMS ((const char *__domainname,
- const char *__msgid, int __category));
-extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
- unsigned long int __n));
-extern char *__dngettext PARAMS ((const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int n));
-extern char *__dcngettext PARAMS ((const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category));
-extern char *__dcigettext PARAMS ((const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- int __plural, unsigned long int __n,
- int __category));
-extern char *__textdomain PARAMS ((const char *__domainname));
-extern char *__bindtextdomain PARAMS ((const char *__domainname,
- const char *__dirname));
-extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
- const char *__codeset));
-#else
-extern char *gettext__ PARAMS ((const char *__msgid));
-extern char *dgettext__ PARAMS ((const char *__domainname,
- const char *__msgid));
-extern char *dcgettext__ PARAMS ((const char *__domainname,
- const char *__msgid, int __category));
-extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
- unsigned long int __n));
-extern char *dngettext__ PARAMS ((const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n));
-extern char *dcngettext__ PARAMS ((const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category));
-extern char *dcigettext__ PARAMS ((const char *__domainname,
- const char *__msgid1, const char *__msgid2,
- int __plural, unsigned long int __n,
- int __category));
-extern char *textdomain__ PARAMS ((const char *__domainname));
-extern char *bindtextdomain__ PARAMS ((const char *__domainname,
- const char *__dirname));
-extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
- const char *__codeset));
-#endif
-
-#ifdef _LIBC
-extern void __gettext_free_exp PARAMS ((struct expression *exp))
- internal_function;
-extern int __gettextparse PARAMS ((void *arg));
-#else
-extern void gettext_free_exp__ PARAMS ((struct expression *exp))
- internal_function;
-extern int gettextparse__ PARAMS ((void *arg));
-#endif
-
-/* @@ begin of epilog @@ */
-
-#endif /* gettextP.h */
diff --git a/intl/hash-string.h b/intl/hash-string.h
deleted file mode 100644
index ccb7acca6..000000000
--- a/intl/hash-string.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Description of GNU message catalog format: string hashing function.
- Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* @@ end of prolog @@ */
-
-#ifndef PARAMS
-# if __STDC__
-# define PARAMS(Args) Args
-# else
-# define PARAMS(Args) ()
-# endif
-#endif
-
-/* We assume to have `unsigned long int' value with at least 32 bits. */
-#define HASHWORDBITS 32
-
-
-/* Defines the so called `hashpjw' function by P.J. Weinberger
- [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
- 1986, 1987 Bell Telephone Laboratories, Inc.] */
-static unsigned long int hash_string PARAMS ((const char *__str_param));
-
-static inline unsigned long int
-hash_string (str_param)
- const char *str_param;
-{
- unsigned long int hval, g;
- const char *str = str_param;
-
- /* Compute the hash value for the given string. */
- hval = 0;
- while (*str != '\0')
- {
- hval <<= 4;
- hval += (unsigned long int) *str++;
- g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
- if (g != 0)
- {
- hval ^= g >> (HASHWORDBITS - 8);
- hval ^= g;
- }
- }
- return hval;
-}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
deleted file mode 100644
index 0a06ce947..000000000
--- a/intl/intl-compat.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
- Library.
- Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libgnuintl.h"
-#include "gettextP.h"
-
-/* @@ end of prolog @@ */
-
-/* This file redirects the gettext functions (without prefix or suffix) to
- those defined in the included GNU gettext library (with "__" suffix).
- It is compiled into libintl when the included GNU gettext library is
- configured --with-included-gettext.
-
- This redirection works also in the case that the system C library or
- the system libintl library contain gettext/textdomain/... functions.
- If it didn't, we would need to add preprocessor level redirections to
- libgnuintl.h of the following form:
-
-# define gettext gettext__
-# define dgettext dgettext__
-# define dcgettext dcgettext__
-# define ngettext ngettext__
-# define dngettext dngettext__
-# define dcngettext dcngettext__
-# define textdomain textdomain__
-# define bindtextdomain bindtextdomain__
-# define bind_textdomain_codeset bind_textdomain_codeset__
-
- How does this redirection work? There are two cases.
- A. When libintl.a is linked into an executable, it works because
- functions defined in the executable always override functions in
- the shared libraries.
- B. When libintl.so is used, it works because
- 1. those systems defining gettext/textdomain/... in the C library
- (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
- ELF systems and define these symbols as weak, thus explicitly
- letting other shared libraries override it.
- 2. those systems defining gettext/textdomain/... in a standalone
- libintl.so library (namely, Solaris 2.3 and newer) have this
- shared library in /usr/lib, and the linker will search /usr/lib
- *after* the directory where the GNU gettext library is installed.
-
- A third case, namely when libintl.a is linked into a shared library
- whose name is not libintl.so, is not supported. In this case, on
- Solaris, when -lintl precedes the linker option for the shared library
- containing GNU gettext, the system's gettext would indeed override
- the GNU gettext. Anyone doing this kind of stuff must be clever enough
- to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
- command line. */
-
-
-#undef gettext
-#undef dgettext
-#undef dcgettext
-#undef ngettext
-#undef dngettext
-#undef dcngettext
-#undef textdomain
-#undef bindtextdomain
-#undef bind_textdomain_codeset
-
-
-char *
-gettext (msgid)
- const char *msgid;
-{
- return gettext__ (msgid);
-}
-
-
-char *
-dgettext (domainname, msgid)
- const char *domainname;
- const char *msgid;
-{
- return dgettext__ (domainname, msgid);
-}
-
-
-char *
-dcgettext (domainname, msgid, category)
- const char *domainname;
- const char *msgid;
- int category;
-{
- return dcgettext__ (domainname, msgid, category);
-}
-
-
-char *
-ngettext (msgid1, msgid2, n)
- const char *msgid1;
- const char *msgid2;
- unsigned long int n;
-{
- return ngettext__ (msgid1, msgid2, n);
-}
-
-
-char *
-dngettext (domainname, msgid1, msgid2, n)
- const char *domainname;
- const char *msgid1;
- const char *msgid2;
- unsigned long int n;
-{
- return dngettext__ (domainname, msgid1, msgid2, n);
-}
-
-
-char *
-dcngettext (domainname, msgid1, msgid2, n, category)
- const char *domainname;
- const char *msgid1;
- const char *msgid2;
- unsigned long int n;
- int category;
-{
- return dcngettext__ (domainname, msgid1, msgid2, n, category);
-}
-
-
-char *
-textdomain (domainname)
- const char *domainname;
-{
- return textdomain__ (domainname);
-}
-
-
-char *
-bindtextdomain (domainname, dirname)
- const char *domainname;
- const char *dirname;
-{
- return bindtextdomain__ (domainname, dirname);
-}
-
-
-char *
-bind_textdomain_codeset (domainname, codeset)
- const char *domainname;
- const char *codeset;
-{
- return bind_textdomain_codeset__ (domainname, codeset);
-}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
deleted file mode 100644
index 533e94be8..000000000
--- a/intl/l10nflist.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* Tell glibc's <string.h> to provide a prototype for stpcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
-
-#if defined _LIBC || defined HAVE_ARGZ_H
-# include <argz.h>
-#endif
-#include <ctype.h>
-#include <sys/types.h>
-#include <stdlib.h>
-
-#include "loadinfo.h"
-
-/* On some strange systems still no definition of NULL is found. Sigh! */
-#ifndef NULL
-# if defined __STDC__ && __STDC__
-# define NULL ((void *) 0)
-# else
-# define NULL 0
-# endif
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# ifndef stpcpy
-# define stpcpy(dest, src) __stpcpy(dest, src)
-# endif
-#else
-# ifndef HAVE_STPCPY
-static char *stpcpy PARAMS ((char *dest, const char *src));
-# endif
-#endif
-
-/* Define function which are usually not available. */
-
-#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
-/* Returns the number of strings in ARGZ. */
-static size_t argz_count__ PARAMS ((const char *argz, size_t len));
-
-static size_t
-argz_count__ (argz, len)
- const char *argz;
- size_t len;
-{
- size_t count = 0;
- while (len > 0)
- {
- size_t part_len = strlen (argz);
- argz += part_len + 1;
- len -= part_len + 1;
- count++;
- }
- return count;
-}
-# undef __argz_count
-# define __argz_count(argz, len) argz_count__ (argz, len)
-#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
-
-#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
-/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
- except the last into the character SEP. */
-static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
-
-static void
-argz_stringify__ (argz, len, sep)
- char *argz;
- size_t len;
- int sep;
-{
- while (len > 0)
- {
- size_t part_len = strlen (argz);
- argz += part_len;
- len -= part_len + 1;
- if (len > 0)
- *argz++ = sep;
- }
-}
-# undef __argz_stringify
-# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
-#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
-
-#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
-static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
- const char *entry));
-
-static char *
-argz_next__ (argz, argz_len, entry)
- char *argz;
- size_t argz_len;
- const char *entry;
-{
- if (entry)
- {
- if (entry < argz + argz_len)
- entry = strchr (entry, '\0') + 1;
-
- return entry >= argz + argz_len ? NULL : (char *) entry;
- }
- else
- if (argz_len > 0)
- return argz;
- else
- return 0;
-}
-# undef __argz_next
-# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
-#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
-
-
-/* Return number of bits set in X. */
-static int pop PARAMS ((int x));
-
-static inline int
-pop (x)
- int x;
-{
- /* We assume that no more than 16 bits are used. */
- x = ((x & ~0x5555) >> 1) + (x & 0x5555);
- x = ((x & ~0x3333) >> 2) + (x & 0x3333);
- x = ((x >> 4) + x) & 0x0f0f;
- x = ((x >> 8) + x) & 0xff;
-
- return x;
-}
-
-
-struct loaded_l10nfile *
-_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
- territory, codeset, normalized_codeset, modifier, special,
- sponsor, revision, filename, do_allocate)
- struct loaded_l10nfile **l10nfile_list;
- const char *dirlist;
- size_t dirlist_len;
- int mask;
- const char *language;
- const char *territory;
- const char *codeset;
- const char *normalized_codeset;
- const char *modifier;
- const char *special;
- const char *sponsor;
- const char *revision;
- const char *filename;
- int do_allocate;
-{
- char *abs_filename;
- struct loaded_l10nfile *last = NULL;
- struct loaded_l10nfile *retval;
- char *cp;
- size_t entries;
- int cnt;
-
- /* Allocate room for the full file name. */
- abs_filename = (char *) malloc (dirlist_len
- + strlen (language)
- + ((mask & TERRITORY) != 0
- ? strlen (territory) + 1 : 0)
- + ((mask & XPG_CODESET) != 0
- ? strlen (codeset) + 1 : 0)
- + ((mask & XPG_NORM_CODESET) != 0
- ? strlen (normalized_codeset) + 1 : 0)
- + (((mask & XPG_MODIFIER) != 0
- || (mask & CEN_AUDIENCE) != 0)
- ? strlen (modifier) + 1 : 0)
- + ((mask & CEN_SPECIAL) != 0
- ? strlen (special) + 1 : 0)
- + (((mask & CEN_SPONSOR) != 0
- || (mask & CEN_REVISION) != 0)
- ? (1 + ((mask & CEN_SPONSOR) != 0
- ? strlen (sponsor) + 1 : 0)
- + ((mask & CEN_REVISION) != 0
- ? strlen (revision) + 1 : 0)) : 0)
- + 1 + strlen (filename) + 1);
-
- if (abs_filename == NULL)
- return NULL;
-
- retval = NULL;
- last = NULL;
-
- /* Construct file name. */
- memcpy (abs_filename, dirlist, dirlist_len);
- __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
- cp = abs_filename + (dirlist_len - 1);
- *cp++ = '/';
- cp = stpcpy (cp, language);
-
- if ((mask & TERRITORY) != 0)
- {
- *cp++ = '_';
- cp = stpcpy (cp, territory);
- }
- if ((mask & XPG_CODESET) != 0)
- {
- *cp++ = '.';
- cp = stpcpy (cp, codeset);
- }
- if ((mask & XPG_NORM_CODESET) != 0)
- {
- *cp++ = '.';
- cp = stpcpy (cp, normalized_codeset);
- }
- if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
- {
- /* This component can be part of both syntaces but has different
- leading characters. For CEN we use `+', else `@'. */
- *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
- cp = stpcpy (cp, modifier);
- }
- if ((mask & CEN_SPECIAL) != 0)
- {
- *cp++ = '+';
- cp = stpcpy (cp, special);
- }
- if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
- {
- *cp++ = ',';
- if ((mask & CEN_SPONSOR) != 0)
- cp = stpcpy (cp, sponsor);
- if ((mask & CEN_REVISION) != 0)
- {
- *cp++ = '_';
- cp = stpcpy (cp, revision);
- }
- }
-
- *cp++ = '/';
- stpcpy (cp, filename);
-
- /* Look in list of already loaded domains whether it is already
- available. */
- last = NULL;
- for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
- if (retval->filename != NULL)
- {
- int compare = strcmp (retval->filename, abs_filename);
- if (compare == 0)
- /* We found it! */
- break;
- if (compare < 0)
- {
- /* It's not in the list. */
- retval = NULL;
- break;
- }
-
- last = retval;
- }
-
- if (retval != NULL || do_allocate == 0)
- {
- free (abs_filename);
- return retval;
- }
-
- retval = (struct loaded_l10nfile *)
- malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
- * (1 << pop (mask))
- * sizeof (struct loaded_l10nfile *)));
- if (retval == NULL)
- return NULL;
-
- retval->filename = abs_filename;
- retval->decided = (__argz_count (dirlist, dirlist_len) != 1
- || ((mask & XPG_CODESET) != 0
- && (mask & XPG_NORM_CODESET) != 0));
- retval->data = NULL;
-
- if (last == NULL)
- {
- retval->next = *l10nfile_list;
- *l10nfile_list = retval;
- }
- else
- {
- retval->next = last->next;
- last->next = retval;
- }
-
- entries = 0;
- /* If the DIRLIST is a real list the RETVAL entry corresponds not to
- a real file. So we have to use the DIRLIST separation mechanism
- of the inner loop. */
- cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
- for (; cnt >= 0; --cnt)
- if ((cnt & ~mask) == 0
- && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
- && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
- {
- /* Iterate over all elements of the DIRLIST. */
- char *dir = NULL;
-
- while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
- != NULL)
- retval->successor[entries++]
- = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
- language, territory, codeset,
- normalized_codeset, modifier, special,
- sponsor, revision, filename, 1);
- }
- retval->successor[entries] = NULL;
-
- return retval;
-}
-
-/* Normalize codeset name. There is no standard for the codeset
- names. Normalization allows the user to use any of the common
- names. The return value is dynamically allocated and has to be
- freed by the caller. */
-const char *
-_nl_normalize_codeset (codeset, name_len)
- const char *codeset;
- size_t name_len;
-{
- int len = 0;
- int only_digit = 1;
- char *retval;
- char *wp;
- size_t cnt;
-
- for (cnt = 0; cnt < name_len; ++cnt)
- if (isalnum (codeset[cnt]))
- {
- ++len;
-
- if (isalpha (codeset[cnt]))
- only_digit = 0;
- }
-
- retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
-
- if (retval != NULL)
- {
- if (only_digit)
- wp = stpcpy (retval, "iso");
- else
- wp = retval;
-
- for (cnt = 0; cnt < name_len; ++cnt)
- if (isalpha (codeset[cnt]))
- *wp++ = tolower (codeset[cnt]);
- else if (isdigit (codeset[cnt]))
- *wp++ = codeset[cnt];
-
- *wp = '\0';
- }
-
- return (const char *) retval;
-}
-
-
-/* @@ begin of epilog @@ */
-
-/* We don't want libintl.a to depend on any other library. So we
- avoid the non-standard function stpcpy. In GNU C Library this
- function is available, though. Also allow the symbol HAVE_STPCPY
- to be defined. */
-#if !_LIBC && !HAVE_STPCPY
-static char *
-stpcpy (dest, src)
- char *dest;
- const char *src;
-{
- while ((*dest++ = *src++) != '\0')
- /* Do nothing. */ ;
- return dest - 1;
-}
-#endif
diff --git a/intl/libgettext.h b/intl/libgettext.h
deleted file mode 100644
index c5be54a80..000000000
--- a/intl/libgettext.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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 _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option. */
-#if ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions. */
-# include <libintl.h>
-
-#else
-
-# define gettext(Msgid) (Msgid)
-# define dgettext(Domainname, Msgid) (Msgid)
-# define dcgettext(Domainname, Msgid, Category) (Msgid)
-# define ngettext(Msgid1, Msgid2, N) \
- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
-# define textdomain(Domainname) ((char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
-
-#endif
-
-/* For automatical extraction of messages sometimes no real
- translation is needed. Instead the string itself is the result. */
-#define gettext_noop(Str) (Str)
-
-#endif /* _LIBGETTEXT_H */
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
deleted file mode 100644
index b8612607b..000000000
--- a/intl/loadinfo.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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 _LOADINFO_H
-#define _LOADINFO_H 1
-
-#ifndef PARAMS
-# if __STDC__
-# define PARAMS(args) args
-# else
-# define PARAMS(args) ()
-# endif
-#endif
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-/* Tell the compiler when a conditional or integer expression is
- almost always true or almost always false. */
-#ifndef HAVE_BUILTIN_EXPECT
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-/* Separator in PATH like lists of pathnames. */
-#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
- /* Win32, OS/2, DOS */
-# define PATH_SEPARATOR ';'
-#else
- /* Unix */
-# define PATH_SEPARATOR ':'
-#endif
-
-/* Encoding of locale name parts. */
-#define CEN_REVISION 1
-#define CEN_SPONSOR 2
-#define CEN_SPECIAL 4
-#define XPG_NORM_CODESET 8
-#define XPG_CODESET 16
-#define TERRITORY 32
-#define CEN_AUDIENCE 64
-#define XPG_MODIFIER 128
-
-#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
-#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
-
-
-struct loaded_l10nfile
-{
- const char *filename;
- int decided;
-
- const void *data;
-
- struct loaded_l10nfile *next;
- struct loaded_l10nfile *successor[1];
-};
-
-
-/* Normalize codeset name. There is no standard for the codeset
- names. Normalization allows the user to use any of the common
- names. The return value is dynamically allocated and has to be
- freed by the caller. */
-extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
- size_t name_len));
-
-extern struct loaded_l10nfile *
-_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
- const char *dirlist, size_t dirlist_len, int mask,
- const char *language, const char *territory,
- const char *codeset,
- const char *normalized_codeset,
- const char *modifier, const char *special,
- const char *sponsor, const char *revision,
- const char *filename, int do_allocate));
-
-
-extern const char *_nl_expand_alias PARAMS ((const char *name));
-
-/* normalized_codeset is dynamically allocated and has to be freed by
- the caller. */
-extern int _nl_explode_name PARAMS ((char *name, const char **language,
- const char **modifier,
- const char **territory,
- const char **codeset,
- const char **normalized_codeset,
- const char **special,
- const char **sponsor,
- const char **revision));
-
-extern char *_nl_find_language PARAMS ((const char *name));
-
-#endif /* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
deleted file mode 100644
index f99ebee3a..000000000
--- a/intl/loadmsgcat.c
+++ /dev/null
@@ -1,567 +0,0 @@
-/* Load needed message catalogs.
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#ifdef _LIBC
-# include <langinfo.h>
-# include <locale.h>
-#endif
-
-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
- || (defined _LIBC && defined _POSIX_MAPPED_FILES)
-# include <sys/mman.h>
-# undef HAVE_MMAP
-# define HAVE_MMAP 1
-#else
-# undef HAVE_MMAP
-#endif
-
-#include "gettext.h"
-#include "gettextP.h"
-
-#ifdef _LIBC
-# include "../locale/localeinfo.h"
-#endif
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ISO C functions. This is required by the standard
- because some ISO C functions will require linking with this object
- file and the name space must not be polluted. */
-# define open __open
-# define close __close
-# define read __read
-# define mmap __mmap
-# define munmap __munmap
-#endif
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define PLURAL_PARSE __gettextparse
-#else
-# define PLURAL_PARSE gettextparse__
-#endif
-
-/* For those losing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-# define freea(p) /* nothing */
-#else
-# define alloca(n) malloc (n)
-# define freea(p) free (p)
-#endif
-
-/* For systems that distinguish between text and binary I/O.
- O_BINARY is usually declared in <fcntl.h>. */
-#if !defined O_BINARY && defined _O_BINARY
- /* For MSC-compatible compilers. */
-# define O_BINARY _O_BINARY
-# define O_TEXT _O_TEXT
-#endif
-#ifdef __BEOS__
- /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
-# undef O_BINARY
-# undef O_TEXT
-#endif
-/* On reasonable systems, binary I/O is the default. */
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-/* We need a sign, whether a new catalog was loaded, which can be associated
- with all translations. This is important if the translations are
- cached by one of GCC's features. */
-int _nl_msg_cat_cntr;
-
-#if (defined __GNUC__ && !defined __APPLE_CC__) \
- || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
-
-/* These structs are the constant expression for the germanic plural
- form determination. It represents the expression "n != 1". */
-static const struct expression plvar =
-{
- .nargs = 0,
- .operation = var,
-};
-static const struct expression plone =
-{
- .nargs = 0,
- .operation = num,
- .val =
- {
- .num = 1
- }
-};
-static struct expression germanic_plural =
-{
- .nargs = 2,
- .operation = not_equal,
- .val =
- {
- .args =
- {
- [0] = (struct expression *) &plvar,
- [1] = (struct expression *) &plone
- }
- }
-};
-
-# define INIT_GERMANIC_PLURAL()
-
-#else
-
-/* For compilers without support for ISO C 99 struct/union initializers:
- Initialization at run-time. */
-
-static struct expression plvar;
-static struct expression plone;
-static struct expression germanic_plural;
-
-static void
-init_germanic_plural ()
-{
- if (plone.val.num == 0)
- {
- plvar.nargs = 0;
- plvar.operation = var;
-
- plone.nargs = 0;
- plone.operation = num;
- plone.val.num = 1;
-
- germanic_plural.nargs = 2;
- germanic_plural.operation = not_equal;
- germanic_plural.val.args[0] = &plvar;
- germanic_plural.val.args[1] = &plone;
- }
-}
-
-# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
-
-#endif
-
-
-/* Initialize the codeset dependent parts of an opened message catalog.
- Return the header entry. */
-const char *
-internal_function
-_nl_init_domain_conv (domain_file, domain, domainbinding)
- struct loaded_l10nfile *domain_file;
- struct loaded_domain *domain;
- struct binding *domainbinding;
-{
- /* Find out about the character set the file is encoded with.
- This can be found (in textual form) in the entry "". If this
- entry does not exist or if this does not contain the `charset='
- information, we will assume the charset matches the one the
- current locale and we don't have to perform any conversion. */
- char *nullentry;
- size_t nullentrylen;
-
- /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
- domain->codeset_cntr =
- (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
-#ifdef _LIBC
- domain->conv = (__gconv_t) -1;
-#else
-# if HAVE_ICONV
- domain->conv = (iconv_t) -1;
-# endif
-#endif
- domain->conv_tab = NULL;
-
- /* Get the header entry. */
- nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
-
- if (nullentry != NULL)
- {
-#if defined _LIBC || HAVE_ICONV
- const char *charsetstr;
-
- charsetstr = strstr (nullentry, "charset=");
- if (charsetstr != NULL)
- {
- size_t len;
- char *charset;
- const char *outcharset;
-
- charsetstr += strlen ("charset=");
- len = strcspn (charsetstr, " \t\n");
-
- charset = (char *) alloca (len + 1);
-# if defined _LIBC || HAVE_MEMPCPY
- *((char *) mempcpy (charset, charsetstr, len)) = '\0';
-# else
- memcpy (charset, charsetstr, len);
- charset[len] = '\0';
-# endif
-
- /* The output charset should normally be determined by the
- locale. But sometimes the locale is not used or not correctly
- set up, so we provide a possibility for the user to override
- this. Moreover, the value specified through
- bind_textdomain_codeset overrides both. */
- if (domainbinding != NULL && domainbinding->codeset != NULL)
- outcharset = domainbinding->codeset;
- else
- {
- outcharset = getenv ("OUTPUT_CHARSET");
- if (outcharset == NULL || outcharset[0] == '\0')
- {
-# ifdef _LIBC
- outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
-# else
-# if HAVE_ICONV
- extern const char *locale_charset (void);
- outcharset = locale_charset ();
-# endif
-# endif
- }
- }
-
-# ifdef _LIBC
- /* We always want to use transliteration. */
- outcharset = norm_add_slashes (outcharset, "TRANSLIT");
- charset = norm_add_slashes (charset, NULL);
- if (__gconv_open (outcharset, charset, &domain->conv,
- GCONV_AVOID_NOCONV)
- != __GCONV_OK)
- domain->conv = (__gconv_t) -1;
-# else
-# if HAVE_ICONV
- /* When using GNU libiconv, we want to use transliteration. */
-# if _LIBICONV_VERSION >= 0x0105
- len = strlen (outcharset);
- {
- char *tmp = (char *) alloca (len + 10 + 1);
- memcpy (tmp, outcharset, len);
- memcpy (tmp + len, "//TRANSLIT", 10 + 1);
- outcharset = tmp;
- }
-# endif
- domain->conv = iconv_open (outcharset, charset);
-# if _LIBICONV_VERSION >= 0x0105
- freea (outcharset);
-# endif
-# endif
-# endif
-
- freea (charset);
- }
-#endif /* _LIBC || HAVE_ICONV */
- }
-
- return nullentry;
-}
-
-/* Frees the codeset dependent parts of an opened message catalog. */
-void
-internal_function
-_nl_free_domain_conv (domain)
- struct loaded_domain *domain;
-{
- if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
- free (domain->conv_tab);
-
-#ifdef _LIBC
- if (domain->conv != (__gconv_t) -1)
- __gconv_close (domain->conv);
-#else
-# if HAVE_ICONV
- if (domain->conv != (iconv_t) -1)
- iconv_close (domain->conv);
-# endif
-#endif
-}
-
-/* Load the message catalogs specified by FILENAME. If it is no valid
- message catalog do nothing. */
-void
-internal_function
-_nl_load_domain (domain_file, domainbinding)
- struct loaded_l10nfile *domain_file;
- struct binding *domainbinding;
-{
- int fd;
- size_t size;
-#ifdef _LIBC
- struct stat64 st;
-#else
- struct stat st;
-#endif
- struct mo_file_header *data = (struct mo_file_header *) -1;
- int use_mmap = 0;
- struct loaded_domain *domain;
- const char *nullentry;
-
- domain_file->decided = 1;
- domain_file->data = NULL;
-
- /* Note that it would be useless to store domainbinding in domain_file
- because domainbinding might be == NULL now but != NULL later (after
- a call to bind_textdomain_codeset). */
-
- /* If the record does not represent a valid locale the FILENAME
- might be NULL. This can happen when according to the given
- specification the locale file name is different for XPG and CEN
- syntax. */
- if (domain_file->filename == NULL)
- return;
-
- /* Try to open the addressed file. */
- fd = open (domain_file->filename, O_RDONLY | O_BINARY);
- if (fd == -1)
- return;
-
- /* We must know about the size of the file. */
- if (
-#ifdef _LIBC
- __builtin_expect (fstat64 (fd, &st) != 0, 0)
-#else
- __builtin_expect (fstat (fd, &st) != 0, 0)
-#endif
- || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
- || __builtin_expect (size < sizeof (struct mo_file_header), 0))
- {
- /* Something went wrong. */
- close (fd);
- return;
- }
-
-#ifdef HAVE_MMAP
- /* Now we are ready to load the file. If mmap() is available we try
- this first. If not available or it failed we try to load it. */
- data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
- MAP_PRIVATE, fd, 0);
-
- if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
- {
- /* mmap() call was successful. */
- close (fd);
- use_mmap = 1;
- }
-#endif
-
- /* If the data is not yet available (i.e. mmap'ed) we try to load
- it manually. */
- if (data == (struct mo_file_header *) -1)
- {
- size_t to_read;
- char *read_ptr;
-
- data = (struct mo_file_header *) malloc (size);
- if (data == NULL)
- return;
-
- to_read = size;
- read_ptr = (char *) data;
- do
- {
- long int nb = (long int) read (fd, read_ptr, to_read);
- if (nb <= 0)
- {
-#ifdef EINTR
- if (nb == -1 && errno == EINTR)
- continue;
-#endif
- close (fd);
- return;
- }
- read_ptr += nb;
- to_read -= nb;
- }
- while (to_read > 0);
-
- close (fd);
- }
-
- /* Using the magic number we can test whether it really is a message
- catalog file. */
- if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
- 0))
- {
- /* The magic number is wrong: not a message catalog file. */
-#ifdef HAVE_MMAP
- if (use_mmap)
- munmap ((caddr_t) data, size);
- else
-#endif
- free (data);
- return;
- }
-
- domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
- if (domain == NULL)
- return;
- domain_file->data = domain;
-
- domain->data = (char *) data;
- domain->use_mmap = use_mmap;
- domain->mmap_size = size;
- domain->must_swap = data->magic != _MAGIC;
-
- /* Fill in the information about the available tables. */
- switch (W (domain->must_swap, data->revision))
- {
- case 0:
- domain->nstrings = W (domain->must_swap, data->nstrings);
- domain->orig_tab = (struct string_desc *)
- ((char *) data + W (domain->must_swap, data->orig_tab_offset));
- domain->trans_tab = (struct string_desc *)
- ((char *) data + W (domain->must_swap, data->trans_tab_offset));
- domain->hash_size = W (domain->must_swap, data->hash_tab_size);
- domain->hash_tab = (nls_uint32 *)
- ((char *) data + W (domain->must_swap, data->hash_tab_offset));
- break;
- default:
- /* This is an invalid revision. */
-#ifdef HAVE_MMAP
- if (use_mmap)
- munmap ((caddr_t) data, size);
- else
-#endif
- free (data);
- free (domain);
- domain_file->data = NULL;
- return;
- }
-
- /* Now initialize the character set converter from the character set
- the file is encoded with (found in the header entry) to the domain's
- specified character set or the locale's character set. */
- nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
-
- /* Also look for a plural specification. */
- if (nullentry != NULL)
- {
- const char *plural;
- const char *nplurals;
-
- plural = strstr (nullentry, "plural=");
- nplurals = strstr (nullentry, "nplurals=");
- if (plural == NULL || nplurals == NULL)
- goto no_plural;
- else
- {
- /* First get the number. */
- char *endp;
- unsigned long int n;
- struct parse_args args;
-
- nplurals += 9;
- while (*nplurals != '\0' && isspace (*nplurals))
- ++nplurals;
-#if defined HAVE_STRTOUL || defined _LIBC
- n = strtoul (nplurals, &endp, 10);
-#else
- for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
- n = n * 10 + (*endp - '0');
-#endif
- domain->nplurals = n;
- if (nplurals == endp)
- goto no_plural;
-
- /* Due to the restrictions bison imposes onto the interface of the
- scanner function we have to put the input string and the result
- passed up from the parser into the same structure which address
- is passed down to the parser. */
- plural += 7;
- args.cp = plural;
- if (PLURAL_PARSE (&args) != 0)
- goto no_plural;
- domain->plural = args.res;
- }
- }
- else
- {
- /* By default we are using the Germanic form: singular form only
- for `one', the plural form otherwise. Yes, this is also what
- English is using since English is a Germanic language. */
- no_plural:
- INIT_GERMANIC_PLURAL ();
- domain->plural = &germanic_plural;
- domain->nplurals = 2;
- }
-}
-
-
-#ifdef _LIBC
-void
-internal_function
-_nl_unload_domain (domain)
- struct loaded_domain *domain;
-{
- if (domain->plural != &germanic_plural)
- __gettext_free_exp (domain->plural);
-
- _nl_free_domain_conv (domain);
-
-# ifdef _POSIX_MAPPED_FILES
- if (domain->use_mmap)
- munmap ((caddr_t) domain->data, domain->mmap_size);
- else
-# endif /* _POSIX_MAPPED_FILES */
- free ((void *) domain->data);
-
- free (domain);
-}
-#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
deleted file mode 100644
index 61f8f3e85..000000000
--- a/intl/localcharset.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-
- Copyright (C) 2000-2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* Written by Bruno Haible <haible@clisp.cons.org>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if HAVE_STDDEF_H
-# include <stddef.h>
-#endif
-
-#include <stdio.h>
-#if HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# undef WIN32 /* avoid warning on mingw32 */
-# define WIN32
-#endif
-
-#ifndef WIN32
-# if HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-# else
-# if HAVE_SETLOCALE
-# include <locale.h>
-# endif
-# endif
-#else /* WIN32 */
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
-
-#ifndef ISSLASH
-# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-#endif
-
-/* The following static variable is declared 'volatile' to avoid a
- possible multithread problem in the function get_charset_aliases. If we
- are running in a threaded environment, and if two threads initialize
- 'charset_aliases' simultaneously, both will produce the same value,
- and everything will be ok if the two assignments to 'charset_aliases'
- are atomic. But I don't know what will happen if the two assignments mix. */
-#if __STDC__ != 1
-# define volatile /* empty */
-#endif
-/* Pointer to the contents of the charset.alias file, if it has already been
- read, else NULL. Its format is:
- ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
-static const char * volatile charset_aliases;
-
-/* Return a pointer to the contents of the charset.alias file. */
-static const char *
-get_charset_aliases ()
-{
- const char *cp;
-
- cp = charset_aliases;
- if (cp == NULL)
- {
-#ifndef WIN32
- FILE *fp;
- const char *dir = LIBDIR;
- const char *base = "charset.alias";
- char *file_name;
-
- /* Concatenate dir and base into freshly allocated file_name. */
- {
- size_t dir_len = strlen (dir);
- size_t base_len = strlen (base);
- int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
- file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
- if (file_name != NULL)
- {
- memcpy (file_name, dir, dir_len);
- if (add_slash)
- file_name[dir_len] = DIRECTORY_SEPARATOR;
- memcpy (file_name + dir_len + add_slash, base, base_len + 1);
- }
- }
-
- if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
- /* Out of memory or file not found, treat it as empty. */
- cp = "";
- else
- {
- /* Parse the file's contents. */
- int c;
- char buf1[50+1];
- char buf2[50+1];
- char *res_ptr = NULL;
- size_t res_size = 0;
- size_t l1, l2;
-
- for (;;)
- {
- c = getc (fp);
- if (c == EOF)
- break;
- if (c == '\n' || c == ' ' || c == '\t')
- continue;
- if (c == '#')
- {
- /* Skip comment, to end of line. */
- do
- c = getc (fp);
- while (!(c == EOF || c == '\n'));
- if (c == EOF)
- break;
- continue;
- }
- ungetc (c, fp);
- if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
- break;
- l1 = strlen (buf1);
- l2 = strlen (buf2);
- if (res_size == 0)
- {
- res_size = l1 + 1 + l2 + 1;
- res_ptr = malloc (res_size + 1);
- }
- else
- {
- res_size += l1 + 1 + l2 + 1;
- res_ptr = realloc (res_ptr, res_size + 1);
- }
- if (res_ptr == NULL)
- {
- /* Out of memory. */
- res_size = 0;
- break;
- }
- strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
- strcpy (res_ptr + res_size - (l2 + 1), buf2);
- }
- fclose (fp);
- if (res_size == 0)
- cp = "";
- else
- {
- *(res_ptr + res_size) = '\0';
- cp = res_ptr;
- }
- }
-
- if (file_name != NULL)
- free (file_name);
-
-#else /* WIN32 */
-
- /* To avoid the troubles of installing a separate file in the same
- directory as the DLL and of retrieving the DLL's directory at
- runtime, simply inline the aliases here. */
-
- cp = "CP936" "\0" "GBK" "\0"
- "CP1361" "\0" "JOHAB" "\0";
-#endif
-
- charset_aliases = cp;
- }
-
- return cp;
-}
-
-/* Determine the current locale's character encoding, and canonicalize it
- into one of the canonical names listed in config.charset.
- The result must not be freed; it is statically allocated.
- If the canonical name cannot be determined, the result is a non-canonical
- name. */
-
-#ifdef STATIC
-STATIC
-#endif
-const char *
-locale_charset ()
-{
- const char *codeset;
- const char *aliases;
-
-#ifndef WIN32
-
-# if HAVE_LANGINFO_CODESET
-
- /* Most systems support nl_langinfo (CODESET) nowadays. */
- codeset = nl_langinfo (CODESET);
-
-# else
-
- /* On old systems which lack it, use setlocale or getenv. */
- const char *locale = NULL;
-
- /* But most old systems don't have a complete set of locales. Some
- (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
- use setlocale here; it would return "C" when it doesn't support the
- locale name the user has set. */
-# if HAVE_SETLOCALE && 0
- locale = setlocale (LC_CTYPE, NULL);
-# endif
- if (locale == NULL || locale[0] == '\0')
- {
- locale = getenv ("LC_ALL");
- if (locale == NULL || locale[0] == '\0')
- {
- locale = getenv ("LC_CTYPE");
- if (locale == NULL || locale[0] == '\0')
- locale = getenv ("LANG");
- }
- }
-
- /* On some old systems, one used to set locale = "iso8859_1". On others,
- you set it to "language_COUNTRY.charset". In any case, we resolve it
- through the charset.alias file. */
- codeset = locale;
-
-# endif
-
-#else /* WIN32 */
-
- static char buf[2 + 10 + 1];
-
- /* Win32 has a function returning the locale's codepage as a number. */
- sprintf (buf, "CP%u", GetACP ());
- codeset = buf;
-
-#endif
-
- if (codeset == NULL)
- /* The canonical name cannot be determined. */
- codeset = "";
-
- /* Resolve alias. */
- for (aliases = get_charset_aliases ();
- *aliases != '\0';
- aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
- if (strcmp (codeset, aliases) == 0
- || (aliases[0] == '*' && aliases[1] == '\0'))
- {
- codeset = aliases + strlen (aliases) + 1;
- break;
- }
-
- return codeset;
-}
diff --git a/intl/localealias.c b/intl/localealias.c
deleted file mode 100644
index 91e7acc9c..000000000
--- a/intl/localealias.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/* Handle aliases for locale names.
- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* Tell glibc's <string.h> to provide a prototype for mempcpy().
- This must come before <config.h> because <config.h> may include
- <features.h>, and once <features.h> has been included, it's too late. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-# define HAVE_ALLOCA 1
-#else
-# if defined HAVE_ALLOCA_H || defined _LIBC
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifndef alloca
-char *alloca ();
-# endif
-# endif
-# endif
-#endif
-
-#include <stdlib.h>
-
-#include <string.h>
-#if !HAVE_STRCHR && !defined _LIBC
-# ifndef strchr
-# define strchr index
-# endif
-#endif
-
-#include "gettextP.h"
-
-/* @@ end of prolog @@ */
-
-#ifdef _LIBC
-/* Rename the non ANSI C functions. This is required by the standard
- because some ANSI C functions will require linking with this object
- file and the name space must not be polluted. */
-# define strcasecmp __strcasecmp
-
-# ifndef mempcpy
-# define mempcpy __mempcpy
-# endif
-# define HAVE_MEMPCPY 1
-
-/* We need locking here since we can be called from different places. */
-# include <bits/libc-lock.h>
-
-__libc_lock_define_initialized (static, lock);
-#endif
-
-#ifndef internal_function
-# define internal_function
-#endif
-
-/* For those losing systems which don't have `alloca' we have to add
- some additional code emulating it. */
-#ifdef HAVE_ALLOCA
-# define freea(p) /* nothing */
-#else
-# define alloca(n) malloc (n)
-# define freea(p) free (p)
-#endif
-
-#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
-# undef fgets
-# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
-#endif
-#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
-# undef feof
-# define feof(s) feof_unlocked (s)
-#endif
-
-
-struct alias_map
-{
- const char *alias;
- const char *value;
-};
-
-
-static char *string_space;
-static size_t string_space_act;
-static size_t string_space_max;
-static struct alias_map *map;
-static size_t nmap;
-static size_t maxmap;
-
-
-/* Prototypes for local functions. */
-static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
- internal_function;
-static int extend_alias_table PARAMS ((void));
-static int alias_compare PARAMS ((const struct alias_map *map1,
- const struct alias_map *map2));
-
-
-const char *
-_nl_expand_alias (name)
- const char *name;
-{
- static const char *locale_alias_path = LOCALE_ALIAS_PATH;
- struct alias_map *retval;
- const char *result = NULL;
- size_t added;
-
-#ifdef _LIBC
- __libc_lock_lock (lock);
-#endif
-
- do
- {
- struct alias_map item;
-
- item.alias = name;
-
- if (nmap > 0)
- retval = (struct alias_map *) bsearch (&item, map, nmap,
- sizeof (struct alias_map),
- (int (*) PARAMS ((const void *,
- const void *))
- ) alias_compare);
- else
- retval = NULL;
-
- /* We really found an alias. Return the value. */
- if (retval != NULL)
- {
- result = retval->value;
- break;
- }
-
- /* Perhaps we can find another alias file. */
- added = 0;
- while (added == 0 && locale_alias_path[0] != '\0')
- {
- const char *start;
-
- while (locale_alias_path[0] == PATH_SEPARATOR)
- ++locale_alias_path;
- start = locale_alias_path;
-
- while (locale_alias_path[0] != '\0'
- && locale_alias_path[0] != PATH_SEPARATOR)
- ++locale_alias_path;
-
- if (start < locale_alias_path)
- added = read_alias_file (start, locale_alias_path - start);
- }
- }
- while (added != 0);
-
-#ifdef _LIBC
- __libc_lock_unlock (lock);
-#endif
-
- return result;
-}
-
-
-static size_t
-internal_function
-read_alias_file (fname, fname_len)
- const char *fname;
- int fname_len;
-{
- FILE *fp;
- char *full_fname;
- size_t added;
- static const char aliasfile[] = "/locale.alias";
-
- full_fname = (char *) alloca (fname_len + sizeof aliasfile);
-#ifdef HAVE_MEMPCPY
- mempcpy (mempcpy (full_fname, fname, fname_len),
- aliasfile, sizeof aliasfile);
-#else
- memcpy (full_fname, fname, fname_len);
- memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
-#endif
-
- fp = fopen (full_fname, "r");
- freea (full_fname);
- if (fp == NULL)
- return 0;
-
- added = 0;
- while (!feof (fp))
- {
- /* It is a reasonable approach to use a fix buffer here because
- a) we are only interested in the first two fields
- b) these fields must be usable as file names and so must not
- be that long
- */
- char buf[BUFSIZ];
- char *alias;
- char *value;
- char *cp;
-
- if (fgets (buf, sizeof buf, fp) == NULL)
- /* EOF reached. */
- break;
-
- /* Possibly not the whole line fits into the buffer. Ignore
- the rest of the line. */
- if (strchr (buf, '\n') == NULL)
- {
- char altbuf[BUFSIZ];
- do
- if (fgets (altbuf, sizeof altbuf, fp) == NULL)
- /* Make sure the inner loop will be left. The outer loop
- will exit at the `feof' test. */
- break;
- while (strchr (altbuf, '\n') == NULL);
- }
-
- cp = buf;
- /* Ignore leading white space. */
- while (isspace (cp[0]))
- ++cp;
-
- /* A leading '#' signals a comment line. */
- if (cp[0] != '\0' && cp[0] != '#')
- {
- alias = cp++;
- while (cp[0] != '\0' && !isspace (cp[0]))
- ++cp;
- /* Terminate alias name. */
- if (cp[0] != '\0')
- *cp++ = '\0';
-
- /* Now look for the beginning of the value. */
- while (isspace (cp[0]))
- ++cp;
-
- if (cp[0] != '\0')
- {
- size_t alias_len;
- size_t value_len;
-
- value = cp++;
- while (cp[0] != '\0' && !isspace (cp[0]))
- ++cp;
- /* Terminate value. */
- if (cp[0] == '\n')
- {
- /* This has to be done to make the following test
- for the end of line possible. We are looking for
- the terminating '\n' which do not overwrite here. */
- *cp++ = '\0';
- *cp = '\n';
- }
- else if (cp[0] != '\0')
- *cp++ = '\0';
-
- if (nmap >= maxmap)
- if (__builtin_expect (extend_alias_table (), 0))
- return added;
-
- alias_len = strlen (alias) + 1;
- value_len = strlen (value) + 1;
-
- if (string_space_act + alias_len + value_len > string_space_max)
- {
- /* Increase size of memory pool. */
- size_t new_size = (string_space_max
- + (alias_len + value_len > 1024
- ? alias_len + value_len : 1024));
- char *new_pool = (char *) realloc (string_space, new_size);
- if (new_pool == NULL)
- return added;
-
- if (__builtin_expect (string_space != new_pool, 0))
- {
- size_t i;
-
- for (i = 0; i < nmap; i++)
- {
- map[i].alias += new_pool - string_space;
- map[i].value += new_pool - string_space;
- }
- }
-
- string_space = new_pool;
- string_space_max = new_size;
- }
-
- map[nmap].alias = memcpy (&string_space[string_space_act],
- alias, alias_len);
- string_space_act += alias_len;
-
- map[nmap].value = memcpy (&string_space[string_space_act],
- value, value_len);
- string_space_act += value_len;
-
- ++nmap;
- ++added;
- }
- }
- }
-
- /* Should we test for ferror()? I think we have to silently ignore
- errors. --drepper */
- fclose (fp);
-
- if (added > 0)
- qsort (map, nmap, sizeof (struct alias_map),
- (int (*) PARAMS ((const void *, const void *))) alias_compare);
-
- return added;
-}
-
-
-static int
-extend_alias_table ()
-{
- size_t new_size;
- struct alias_map *new_map;
-
- new_size = maxmap == 0 ? 100 : 2 * maxmap;
- new_map = (struct alias_map *) realloc (map, (new_size
- * sizeof (struct alias_map)));
- if (new_map == NULL)
- /* Simply don't extend: we don't have any more core. */
- return -1;
-
- map = new_map;
- maxmap = new_size;
- return 0;
-}
-
-
-#ifdef _LIBC
-static void __attribute__ ((unused))
-free_mem (void)
-{
- if (string_space != NULL)
- free (string_space);
- if (map != NULL)
- free (map);
-}
-text_set_element (__libc_subfreeres, free_mem);
-#endif
-
-
-static int
-alias_compare (map1, map2)
- const struct alias_map *map1;
- const struct alias_map *map2;
-{
-#if defined _LIBC || defined HAVE_STRCASECMP
- return strcasecmp (map1->alias, map2->alias);
-#else
- const unsigned char *p1 = (const unsigned char *) map1->alias;
- const unsigned char *p2 = (const unsigned char *) map2->alias;
- unsigned char c1, c2;
-
- if (p1 == p2)
- return 0;
-
- do
- {
- /* I know this seems to be odd but the tolower() function in
- some systems libc cannot handle nonalpha characters. */
- c1 = isupper (*p1) ? tolower (*p1) : *p1;
- c2 = isupper (*p2) ? tolower (*p2) : *p2;
- if (c1 == '\0')
- break;
- ++p1;
- ++p2;
- }
- while (c1 == c2);
-
- return c1 - c2;
-#endif
-}
diff --git a/intl/ngettext.c b/intl/ngettext.c
deleted file mode 100644
index fb3ec5a91..000000000
--- a/intl/ngettext.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Implementation of ngettext(3) function.
- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef _LIBC
-# define __need_NULL
-# include <stddef.h>
-#else
-# include <stdlib.h> /* Just for NULL. */
-#endif
-
-#include "gettextP.h"
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-
-#include <locale.h>
-
-/* @@ end of prolog @@ */
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define NGETTEXT __ngettext
-# define DCNGETTEXT __dcngettext
-#else
-# define NGETTEXT ngettext__
-# define DCNGETTEXT dcngettext__
-#endif
-
-/* Look up MSGID in the current default message catalog for the current
- LC_MESSAGES locale. If not found, returns MSGID itself (the default
- text). */
-char *
-NGETTEXT (msgid1, msgid2, n)
- const char *msgid1;
- const char *msgid2;
- unsigned long int n;
-{
- return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__ngettext, ngettext);
-#endif
diff --git a/intl/plural.c b/intl/plural.c
deleted file mode 100644
index 640d43cc5..000000000
--- a/intl/plural.c
+++ /dev/null
@@ -1,1326 +0,0 @@
-
-/* A Bison parser, made from plural.y
- by GNU Bison version 1.28 */
-
-#define YYBISON 1 /* Identify Bison output. */
-
-#define yyparse __gettextparse
-#define yylex __gettextlex
-#define yyerror __gettexterror
-#define yylval __gettextlval
-#define yychar __gettextchar
-#define yydebug __gettextdebug
-#define yynerrs __gettextnerrs
-#define EQUOP2 257
-#define CMPOP2 258
-#define ADDOP2 259
-#define MULOP2 260
-#define NUMBER 261
-
-#line 1 "plural.y"
-
-/* Expression parsing for plural form selection.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* The bison generated parser uses alloca. AIX 3 forces us to put this
- declaration at the beginning of the file. The declaration in bison's
- skeleton file comes too late. This must come before <config.h>
- because <config.h> may include arbitrary system headers. */
-#if defined _AIX && !defined __GNUC__
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include "gettextP.h"
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define FREE_EXPRESSION __gettext_free_exp
-#else
-# define FREE_EXPRESSION gettext_free_exp__
-# define __gettextparse gettextparse__
-#endif
-
-#define YYLEX_PARAM &((struct parse_args *) arg)->cp
-#define YYPARSE_PARAM arg
-
-#line 53 "plural.y"
-typedef union {
- unsigned long int num;
- enum operator op;
- struct expression *exp;
-} YYSTYPE;
-#line 59 "plural.y"
-
-/* Prototypes for local functions. */
-static struct expression *new_exp PARAMS ((int nargs, enum operator op,
- struct expression * const *args));
-static inline struct expression *new_exp_0 PARAMS ((enum operator op));
-static inline struct expression *new_exp_1 PARAMS ((enum operator op,
- struct expression *right));
-static struct expression *new_exp_2 PARAMS ((enum operator op,
- struct expression *left,
- struct expression *right));
-static inline struct expression *new_exp_3 PARAMS ((enum operator op,
- struct expression *bexp,
- struct expression *tbranch,
- struct expression *fbranch));
-static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
-static void yyerror PARAMS ((const char *str));
-
-/* Allocation of expressions. */
-
-static struct expression *
-new_exp (nargs, op, args)
- int nargs;
- enum operator op;
- struct expression * const *args;
-{
- int i;
- struct expression *newp;
-
- /* If any of the argument could not be malloc'ed, just return NULL. */
- for (i = nargs - 1; i >= 0; i--)
- if (args[i] == NULL)
- goto fail;
-
- /* Allocate a new expression. */
- newp = (struct expression *) malloc (sizeof (*newp));
- if (newp != NULL)
- {
- newp->nargs = nargs;
- newp->operation = op;
- for (i = nargs - 1; i >= 0; i--)
- newp->val.args[i] = args[i];
- return newp;
- }
-
- fail:
- for (i = nargs - 1; i >= 0; i--)
- FREE_EXPRESSION (args[i]);
-
- return NULL;
-}
-
-static inline struct expression *
-new_exp_0 (op)
- enum operator op;
-{
- return new_exp (0, op, NULL);
-}
-
-static inline struct expression *
-new_exp_1 (op, right)
- enum operator op;
- struct expression *right;
-{
- struct expression *args[1];
-
- args[0] = right;
- return new_exp (1, op, args);
-}
-
-static struct expression *
-new_exp_2 (op, left, right)
- enum operator op;
- struct expression *left;
- struct expression *right;
-{
- struct expression *args[2];
-
- args[0] = left;
- args[1] = right;
- return new_exp (2, op, args);
-}
-
-static inline struct expression *
-new_exp_3 (op, bexp, tbranch, fbranch)
- enum operator op;
- struct expression *bexp;
- struct expression *tbranch;
- struct expression *fbranch;
-{
- struct expression *args[3];
-
- args[0] = bexp;
- args[1] = tbranch;
- args[2] = fbranch;
- return new_exp (3, op, args);
-}
-
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define YYFINAL 27
-#define YYFLAG -32768
-#define YYNTBASE 16
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
-
-static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 10, 2, 2, 2, 2, 5, 2, 14,
- 15, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 12, 2, 2,
- 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 13,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 4, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 6, 7, 8, 9,
- 11
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = { 0,
- 0, 2, 8, 12, 16, 20, 24, 28, 32, 35,
- 37, 39
-};
-
-static const short yyrhs[] = { 17,
- 0, 17, 3, 17, 12, 17, 0, 17, 4, 17,
- 0, 17, 5, 17, 0, 17, 6, 17, 0, 17,
- 7, 17, 0, 17, 8, 17, 0, 17, 9, 17,
- 0, 10, 17, 0, 13, 0, 11, 0, 14, 17,
- 15, 0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
- 178, 186, 190, 194, 198, 202, 206, 210, 214, 218,
- 222, 227
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'",
-"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'",
-"start","exp", NULL
-};
-#endif
-
-static const short yyr1[] = { 0,
- 16, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17
-};
-
-static const short yyr2[] = { 0,
- 1, 5, 3, 3, 3, 3, 3, 3, 2, 1,
- 1, 3
-};
-
-static const short yydefact[] = { 0,
- 0, 11, 10, 0, 1, 9, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 0, 3, 4, 5, 6,
- 7, 8, 0, 2, 0, 0, 0
-};
-
-static const short yydefgoto[] = { 25,
- 5
-};
-
-static const short yypact[] = { -9,
- -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9,
- -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26,
- -3,-32768, -9, 34, 21, 53,-32768
-};
-
-static const short yypgoto[] = {-32768,
- -1
-};
-
-
-#define YYLAST 53
-
-
-static const short yytable[] = { 6,
- 1, 2, 7, 3, 4, 14, 16, 17, 18, 19,
- 20, 21, 22, 8, 9, 10, 11, 12, 13, 14,
- 26, 24, 12, 13, 14, 15, 8, 9, 10, 11,
- 12, 13, 14, 13, 14, 23, 8, 9, 10, 11,
- 12, 13, 14, 10, 11, 12, 13, 14, 11, 12,
- 13, 14, 27
-};
-
-static const short yycheck[] = { 1,
- 10, 11, 4, 13, 14, 9, 8, 9, 10, 11,
- 12, 13, 14, 3, 4, 5, 6, 7, 8, 9,
- 0, 23, 7, 8, 9, 15, 3, 4, 5, 6,
- 7, 8, 9, 8, 9, 12, 3, 4, 5, 6,
- 7, 8, 9, 5, 6, 7, 8, 9, 6, 7,
- 8, 9, 0
-};
-#define YYPURE 1
-
-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
-#line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
-/* This file comes from bison-1.28. */
-
-/* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-
-/* This is the parser code that is written into each bison parser
- when the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
-#ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
-#include <alloca.h>
-#else /* not sparc */
-/* We think this test detects Watcom and Microsoft C. */
-/* This used to test MSDOS, but that is a bad idea
- since that symbol is in the user namespace. */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
- instead, just don't use alloca. */
-#include <malloc.h>
-#endif
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
- So I turned it off. rms, 2 May 1997. */
-/* #include <malloc.h> */
- #pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
- and on HPUX 10. Eventually we can turn this on. */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#endif /* __hpux */
-#endif
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
-
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
-#else
-#define YYSTACK_ALLOC malloc
-#endif
-
-/* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY -2
-#define YYEOF 0
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrlab1
-/* Like YYERROR except do call yyerror.
- This remains here temporarily to ease the
- transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-#define YYFAIL goto yyerrlab
-#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(token, value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { yychar = (token), yylval = (value); \
- yychar1 = YYTRANSLATE (yychar); \
- YYPOPSTACK; \
- goto yybackup; \
- } \
- else \
- { yyerror ("syntax error: cannot back up"); YYERROR; } \
-while (0)
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-#ifndef YYPURE
-#define YYLEX yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int yychar; /* the lookahead symbol */
-YYSTYPE yylval; /* the semantic value of the */
- /* lookahead symbol */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc; /* location data for the lookahead */
- /* symbol */
-#endif
-
-int yynerrs; /* number of parse errors so far */
-#endif /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug; /* nonzero means print parse trace */
-/* Since this is uninitialized, it does not stop multiple parsers
- from coexisting. */
-#endif
-
-/* YYINITDEPTH indicates the initial size of the parser's stacks */
-
-#ifndef YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH is the maximum size the stacks can grow to
- (effective only if the built-in stack extension method is used). */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Define __yy_memcpy. Note that the size argument
- should be passed with type unsigned int, because that is what the non-GCC
- definitions require. With GCC, __builtin_memcpy takes an arg
- of type size_t, but it can handle unsigned int. */
-
-#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
-#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
-#else /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__yy_memcpy (to, from, count)
- char *to;
- char *from;
- unsigned int count;
-{
- register char *f = from;
- register char *t = to;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__yy_memcpy (char *to, char *from, unsigned int count)
-{
- register char *t = to;
- register char *f = from;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#endif
-#endif
-
-#line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
- into yyparse. The argument should have type void *.
- It should actually point to an object.
- Grammar actions can access the variable by casting it
- to the proper pointer type. */
-
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes. */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int yyparse (void *);
-#else
-int yyparse (void);
-#endif
-#endif
-
-int
-yyparse(YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
-{
- register int yystate;
- register int yyn;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- int yyerrstatus; /* number of tokens to shift before error messages enabled */
- int yychar1 = 0; /* lookahead token as an internal (translated) token number */
-
- short yyssa[YYINITDEPTH]; /* the state stack */
- YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
-
- short *yyss = yyssa; /* refer to the stacks thru separate pointers */
- YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
- YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
- YYLTYPE *yyls = yylsa;
- YYLTYPE *yylsp;
-
-#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK (yyvsp--, yyssp--)
-#endif
-
- int yystacksize = YYINITDEPTH;
- int yyfree_stacks = 0;
-
-#ifdef YYPURE
- int yychar;
- YYSTYPE yylval;
- int yynerrs;
-#ifdef YYLSP_NEEDED
- YYLTYPE yylloc;
-#endif
-#endif
-
- YYSTYPE yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
-
- int yylen;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Starting parse\n");
-#endif
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss - 1;
- yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
- yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in yystate . */
-/* In all cases, when you get here, the value and location stacks
- have just been pushed. so pushing a state here evens the stacks. */
-yynewstate:
-
- *++yyssp = yystate;
-
- if (yyssp >= yyss + yystacksize - 1)
- {
- /* Give user a chance to reallocate the stack */
- /* Use copies of these so that the &'s don't force the real ones into memory. */
- YYSTYPE *yyvs1 = yyvs;
- short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
- YYLTYPE *yyls1 = yyls;
-#endif
-
- /* Get the current used size of the three stacks, in elements. */
- int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
-#ifdef YYLSP_NEEDED
- /* This used to be a conditional around just the two extra args,
- but that might be undefined if yyoverflow is a macro. */
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yyls1, size * sizeof (*yylsp),
- &yystacksize);
-#else
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yystacksize);
-#endif
-
- yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
- yyls = yyls1;
-#endif
-#else /* no yyoverflow */
- /* Extend the stack our own way. */
- if (yystacksize >= YYMAXDEPTH)
- {
- yyerror("parser stack overflow");
- if (yyfree_stacks)
- {
- free (yyss);
- free (yyvs);
-#ifdef YYLSP_NEEDED
- free (yyls);
-#endif
- }
- return 2;
- }
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
- yyfree_stacks = 1;
-#endif
- yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
- __yy_memcpy ((char *)yyss, (char *)yyss1,
- size * (unsigned int) sizeof (*yyssp));
- yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
- __yy_memcpy ((char *)yyvs, (char *)yyvs1,
- size * (unsigned int) sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
- yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
- __yy_memcpy ((char *)yyls, (char *)yyls1,
- size * (unsigned int) sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + size - 1;
- yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
- yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
- if (yyssp >= yyss + yystacksize - 1)
- YYABORT;
- }
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
- goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state. */
-/* Read a lookahead token if we need one and don't already have one. */
-/* yyresume: */
-
- /* First try to decide what to do without reference to lookahead token. */
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* yychar is either YYEMPTY or YYEOF
- or a valid token in external form. */
-
- if (yychar == YYEMPTY)
- {
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Reading a token: ");
-#endif
- yychar = YYLEX;
- }
-
- /* Convert token to internal form (in yychar1) for indexing tables with */
-
- if (yychar <= 0) /* This means end of input. */
- {
- yychar1 = 0;
- yychar = YYEOF; /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Now at end of input.\n");
-#endif
- }
- else
- {
- yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
- /* Give the individual parser a way to print the precise meaning
- of a token, for further debugging info. */
-#ifdef YYPRINT
- YYPRINT (stderr, yychar, yylval);
-#endif
- fprintf (stderr, ")\n");
- }
-#endif
- }
-
- yyn += yychar1;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
- goto yydefault;
-
- yyn = yytable[yyn];
-
- /* yyn is what to do for this token type in this state.
- Negative => reduce, -yyn is rule number.
- Positive => shift, yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
-
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrlab;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Shift the lookahead token. */
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
- /* Discard the token being shifted unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
-#endif
-
- /* count tokens shifted since error; after three, turn off error status. */
- if (yyerrstatus) yyerrstatus--;
-
- yystate = yyn;
- goto yynewstate;
-
-/* Do the default action for the current state. */
-yydefault:
-
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
-
-/* Do a reduction. yyn is the number of a rule to reduce with. */
-yyreduce:
- yylen = yyr2[yyn];
- if (yylen > 0)
- yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- int i;
-
- fprintf (stderr, "Reducing via rule %d (line %d), ",
- yyn, yyrline[yyn]);
-
- /* Print the symbols being reduced, and their result. */
- for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
- fprintf (stderr, "%s ", yytname[yyrhs[i]]);
- fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
- }
-#endif
-
-
- switch (yyn) {
-
-case 1:
-#line 179 "plural.y"
-{
- if (yyvsp[0].exp == NULL)
- YYABORT;
- ((struct parse_args *) arg)->res = yyvsp[0].exp;
- ;
- break;}
-case 2:
-#line 187 "plural.y"
-{
- yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 3:
-#line 191 "plural.y"
-{
- yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 4:
-#line 195 "plural.y"
-{
- yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 5:
-#line 199 "plural.y"
-{
- yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 6:
-#line 203 "plural.y"
-{
- yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 7:
-#line 207 "plural.y"
-{
- yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 8:
-#line 211 "plural.y"
-{
- yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
- ;
- break;}
-case 9:
-#line 215 "plural.y"
-{
- yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
- ;
- break;}
-case 10:
-#line 219 "plural.y"
-{
- yyval.exp = new_exp_0 (var);
- ;
- break;}
-case 11:
-#line 223 "plural.y"
-{
- if ((yyval.exp = new_exp_0 (num)) != NULL)
- yyval.exp->val.num = yyvsp[0].num;
- ;
- break;}
-case 12:
-#line 228 "plural.y"
-{
- yyval.exp = yyvsp[-1].exp;
- ;
- break;}
-}
- /* the action file gets copied in in place of this dollarsign */
-#line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
-
- yyvsp -= yylen;
- yyssp -= yylen;
-#ifdef YYLSP_NEEDED
- yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "state stack now");
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
- *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
- yylsp++;
- if (yylen == 0)
- {
- yylsp->first_line = yylloc.first_line;
- yylsp->first_column = yylloc.first_column;
- yylsp->last_line = (yylsp-1)->last_line;
- yylsp->last_column = (yylsp-1)->last_column;
- yylsp->text = 0;
- }
- else
- {
- yylsp->last_line = (yylsp+yylen-1)->last_line;
- yylsp->last_column = (yylsp+yylen-1)->last_column;
- }
-#endif
-
- /* Now "shift" the result of the reduction.
- Determine what state that goes to,
- based on the state we popped back to
- and the rule number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTBASE];
-
- goto yynewstate;
-
-yyerrlab: /* here on detecting error */
-
- if (! yyerrstatus)
- /* If not already recovering from an error, report this error. */
- {
- ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
- yyn = yypact[yystate];
-
- if (yyn > YYFLAG && yyn < YYLAST)
- {
- int size = 0;
- char *msg;
- int x, count;
-
- count = 0;
- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
- for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- size += strlen(yytname[x]) + 15, count++;
- msg = (char *) malloc(size + 15);
- if (msg != 0)
- {
- strcpy(msg, "parse error");
-
- if (count < 5)
- {
- count = 0;
- for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- {
- strcat(msg, count == 0 ? ", expecting `" : " or `");
- strcat(msg, yytname[x]);
- strcat(msg, "'");
- count++;
- }
- }
- yyerror(msg);
- free(msg);
- }
- else
- yyerror ("parse error; also virtual memory exceeded");
- }
- else
-#endif /* YYERROR_VERBOSE */
- yyerror("parse error");
- }
-
- goto yyerrlab1;
-yyerrlab1: /* here on error raised explicitly by an action */
-
- if (yyerrstatus == 3)
- {
- /* if just tried and failed to reuse lookahead token after an error, discard it. */
-
- /* return failure if at end of input */
- if (yychar == YYEOF)
- YYABORT;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
- yychar = YYEMPTY;
- }
-
- /* Else will try to reuse lookahead token
- after shifting the error token. */
-
- yyerrstatus = 3; /* Each real token shifted decrements this */
-
- goto yyerrhandle;
-
-yyerrdefault: /* current state does not do anything special for the error token. */
-
-#if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
- yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
- if (yyn) goto yydefault;
-#endif
-
-yyerrpop: /* pop the current state because it cannot handle the error token */
-
- if (yyssp == yyss) YYABORT;
- yyvsp--;
- yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
- yylsp--;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "Error: state stack now");
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
-yyerrhandle:
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yyerrdefault;
-
- yyn += YYTERROR;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
- goto yyerrdefault;
-
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrpop;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrpop;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Shifting error token, ");
-#endif
-
- *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
-#endif
-
- yystate = yyn;
- goto yynewstate;
-
- yyacceptlab:
- /* YYACCEPT comes here. */
- if (yyfree_stacks)
- {
- free (yyss);
- free (yyvs);
-#ifdef YYLSP_NEEDED
- free (yyls);
-#endif
- }
- return 0;
-
- yyabortlab:
- /* YYABORT comes here. */
- if (yyfree_stacks)
- {
- free (yyss);
- free (yyvs);
-#ifdef YYLSP_NEEDED
- free (yyls);
-#endif
- }
- return 1;
-}
-#line 233 "plural.y"
-
-
-void
-internal_function
-FREE_EXPRESSION (exp)
- struct expression *exp;
-{
- if (exp == NULL)
- return;
-
- /* Handle the recursive case. */
- switch (exp->nargs)
- {
- case 3:
- FREE_EXPRESSION (exp->val.args[2]);
- /* FALLTHROUGH */
- case 2:
- FREE_EXPRESSION (exp->val.args[1]);
- /* FALLTHROUGH */
- case 1:
- FREE_EXPRESSION (exp->val.args[0]);
- /* FALLTHROUGH */
- default:
- break;
- }
-
- free (exp);
-}
-
-
-static int
-yylex (lval, pexp)
- YYSTYPE *lval;
- const char **pexp;
-{
- const char *exp = *pexp;
- int result;
-
- while (1)
- {
- if (exp[0] == '\0')
- {
- *pexp = exp;
- return YYEOF;
- }
-
- if (exp[0] != ' ' && exp[0] != '\t')
- break;
-
- ++exp;
- }
-
- result = *exp++;
- switch (result)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- {
- unsigned long int n = result - '0';
- while (exp[0] >= '0' && exp[0] <= '9')
- {
- n *= 10;
- n += exp[0] - '0';
- ++exp;
- }
- lval->num = n;
- result = NUMBER;
- }
- break;
-
- case '=':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = equal;
- result = EQUOP2;
- }
- else
- result = YYERRCODE;
- break;
-
- case '!':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = not_equal;
- result = EQUOP2;
- }
- break;
-
- case '&':
- case '|':
- if (exp[0] == result)
- ++exp;
- else
- result = YYERRCODE;
- break;
-
- case '<':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = less_or_equal;
- }
- else
- lval->op = less_than;
- result = CMPOP2;
- break;
-
- case '>':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = greater_or_equal;
- }
- else
- lval->op = greater_than;
- result = CMPOP2;
- break;
-
- case '*':
- lval->op = mult;
- result = MULOP2;
- break;
-
- case '/':
- lval->op = divide;
- result = MULOP2;
- break;
-
- case '%':
- lval->op = module;
- result = MULOP2;
- break;
-
- case '+':
- lval->op = plus;
- result = ADDOP2;
- break;
-
- case '-':
- lval->op = minus;
- result = ADDOP2;
- break;
-
- case 'n':
- case '?':
- case ':':
- case '(':
- case ')':
- /* Nothing, just return the character. */
- break;
-
- case ';':
- case '\n':
- case '\0':
- /* Be safe and let the user call this function again. */
- --exp;
- result = YYEOF;
- break;
-
- default:
- result = YYERRCODE;
-#if YYDEBUG != 0
- --exp;
-#endif
- break;
- }
-
- *pexp = exp;
-
- return result;
-}
-
-
-static void
-yyerror (str)
- const char *str;
-{
- /* Do nothing. We don't print error messages here. */
-}
diff --git a/intl/plural.y b/intl/plural.y
deleted file mode 100644
index be049a6d4..000000000
--- a/intl/plural.y
+++ /dev/null
@@ -1,413 +0,0 @@
-%{
-/* Expression parsing for plural form selection.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library 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. */
-
-/* The bison generated parser uses alloca. AIX 3 forces us to put this
- declaration at the beginning of the file. The declaration in bison's
- skeleton file comes too late. This must come before <config.h>
- because <config.h> may include arbitrary system headers. */
-#if defined _AIX && !defined __GNUC__
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include "gettextP.h"
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define FREE_EXPRESSION __gettext_free_exp
-#else
-# define FREE_EXPRESSION gettext_free_exp__
-# define __gettextparse gettextparse__
-#endif
-
-#define YYLEX_PARAM &((struct parse_args *) arg)->cp
-#define YYPARSE_PARAM arg
-%}
-%pure_parser
-%expect 10
-
-%union {
- unsigned long int num;
- enum operator op;
- struct expression *exp;
-}
-
-%{
-/* Prototypes for local functions. */
-static struct expression *new_exp PARAMS ((int nargs, enum operator op,
- struct expression * const *args));
-static inline struct expression *new_exp_0 PARAMS ((enum operator op));
-static inline struct expression *new_exp_1 PARAMS ((enum operator op,
- struct expression *right));
-static struct expression *new_exp_2 PARAMS ((enum operator op,
- struct expression *left,
- struct expression *right));
-static inline struct expression *new_exp_3 PARAMS ((enum operator op,
- struct expression *bexp,
- struct expression *tbranch,
- struct expression *fbranch));
-static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
-static void yyerror PARAMS ((const char *str));
-
-/* Allocation of expressions. */
-
-static struct expression *
-new_exp (nargs, op, args)
- int nargs;
- enum operator op;
- struct expression * const *args;
-{
- int i;
- struct expression *newp;
-
- /* If any of the argument could not be malloc'ed, just return NULL. */
- for (i = nargs - 1; i >= 0; i--)
- if (args[i] == NULL)
- goto fail;
-
- /* Allocate a new expression. */
- newp = (struct expression *) malloc (sizeof (*newp));
- if (newp != NULL)
- {
- newp->nargs = nargs;
- newp->operation = op;
- for (i = nargs - 1; i >= 0; i--)
- newp->val.args[i] = args[i];
- return newp;
- }
-
- fail:
- for (i = nargs - 1; i >= 0; i--)
- FREE_EXPRESSION (args[i]);
-
- return NULL;
-}
-
-static inline struct expression *
-new_exp_0 (op)
- enum operator op;
-{
- return new_exp (0, op, NULL);
-}
-
-static inline struct expression *
-new_exp_1 (op, right)
- enum operator op;
- struct expression *right;
-{
- struct expression *args[1];
-
- args[0] = right;
- return new_exp (1, op, args);
-}
-
-static struct expression *
-new_exp_2 (op, left, right)
- enum operator op;
- struct expression *left;
- struct expression *right;
-{
- struct expression *args[2];
-
- args[0] = left;
- args[1] = right;
- return new_exp (2, op, args);
-}
-
-static inline struct expression *
-new_exp_3 (op, bexp, tbranch, fbranch)
- enum operator op;
- struct expression *bexp;
- struct expression *tbranch;
- struct expression *fbranch;
-{
- struct expression *args[3];
-
- args[0] = bexp;
- args[1] = tbranch;
- args[2] = fbranch;
- return new_exp (3, op, args);
-}
-
-%}
-
-/* This declares that all operators have the same associativity and the
- precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
- There is no unary minus and no bitwise operators.
- Operators with the same syntactic behaviour have been merged into a single
- token, to save space in the array generated by bison. */
-%right '?' /* ? */
-%left '|' /* || */
-%left '&' /* && */
-%left EQUOP2 /* == != */
-%left CMPOP2 /* < > <= >= */
-%left ADDOP2 /* + - */
-%left MULOP2 /* * / % */
-%right '!' /* ! */
-
-%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
-%token <num> NUMBER
-%type <exp> exp
-
-%%
-
-start: exp
- {
- if ($1 == NULL)
- YYABORT;
- ((struct parse_args *) arg)->res = $1;
- }
- ;
-
-exp: exp '?' exp ':' exp
- {
- $$ = new_exp_3 (qmop, $1, $3, $5);
- }
- | exp '|' exp
- {
- $$ = new_exp_2 (lor, $1, $3);
- }
- | exp '&' exp
- {
- $$ = new_exp_2 (land, $1, $3);
- }
- | exp EQUOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | exp CMPOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | exp ADDOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | exp MULOP2 exp
- {
- $$ = new_exp_2 ($2, $1, $3);
- }
- | '!' exp
- {
- $$ = new_exp_1 (lnot, $2);
- }
- | 'n'
- {
- $$ = new_exp_0 (var);
- }
- | NUMBER
- {
- if (($$ = new_exp_0 (num)) != NULL)
- $$->val.num = $1;
- }
- | '(' exp ')'
- {
- $$ = $2;
- }
- ;
-
-%%
-
-void
-internal_function
-FREE_EXPRESSION (exp)
- struct expression *exp;
-{
- if (exp == NULL)
- return;
-
- /* Handle the recursive case. */
- switch (exp->nargs)
- {
- case 3:
- FREE_EXPRESSION (exp->val.args[2]);
- /* FALLTHROUGH */
- case 2:
- FREE_EXPRESSION (exp->val.args[1]);
- /* FALLTHROUGH */
- case 1:
- FREE_EXPRESSION (exp->val.args[0]);
- /* FALLTHROUGH */
- default:
- break;
- }
-
- free (exp);
-}
-
-
-static int
-yylex (lval, pexp)
- YYSTYPE *lval;
- const char **pexp;
-{
- const char *exp = *pexp;
- int result;
-
- while (1)
- {
- if (exp[0] == '\0')
- {
- *pexp = exp;
- return YYEOF;
- }
-
- if (exp[0] != ' ' && exp[0] != '\t')
- break;
-
- ++exp;
- }
-
- result = *exp++;
- switch (result)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- {
- unsigned long int n = result - '0';
- while (exp[0] >= '0' && exp[0] <= '9')
- {
- n *= 10;
- n += exp[0] - '0';
- ++exp;
- }
- lval->num = n;
- result = NUMBER;
- }
- break;
-
- case '=':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = equal;
- result = EQUOP2;
- }
- else
- result = YYERRCODE;
- break;
-
- case '!':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = not_equal;
- result = EQUOP2;
- }
- break;
-
- case '&':
- case '|':
- if (exp[0] == result)
- ++exp;
- else
- result = YYERRCODE;
- break;
-
- case '<':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = less_or_equal;
- }
- else
- lval->op = less_than;
- result = CMPOP2;
- break;
-
- case '>':
- if (exp[0] == '=')
- {
- ++exp;
- lval->op = greater_or_equal;
- }
- else
- lval->op = greater_than;
- result = CMPOP2;
- break;
-
- case '*':
- lval->op = mult;
- result = MULOP2;
- break;
-
- case '/':
- lval->op = divide;
- result = MULOP2;
- break;
-
- case '%':
- lval->op = module;
- result = MULOP2;
- break;
-
- case '+':
- lval->op = plus;
- result = ADDOP2;
- break;
-
- case '-':
- lval->op = minus;
- result = ADDOP2;
- break;
-
- case 'n':
- case '?':
- case ':':
- case '(':
- case ')':
- /* Nothing, just return the character. */
- break;
-
- case ';':
- case '\n':
- case '\0':
- /* Be safe and let the user call this function again. */
- --exp;
- result = YYEOF;
- break;
-
- default:
- result = YYERRCODE;
-#if YYDEBUG != 0
- --exp;
-#endif
- break;
- }
-
- *pexp = exp;
-
- return result;
-}
-
-
-static void
-yyerror (str)
- const char *str;
-{
- /* Do nothing. We don't print error messages here. */
-}
diff --git a/intl/textdomain.c b/intl/textdomain.c
deleted file mode 100644
index 2e420ad77..000000000
--- a/intl/textdomain.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Implementation of the textdomain(3) function.
- Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "libgnuintl.h"
-#endif
-#include "gettextP.h"
-
-#ifdef _LIBC
-/* We have to handle multi-threaded applications. */
-# include <bits/libc-lock.h>
-#else
-/* Provide dummy implementation if this is outside glibc. */
-# define __libc_rwlock_define(CLASS, NAME)
-# define __libc_rwlock_wrlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
- names than the internal variables in GNU libc, otherwise programs
- using libintl.a cannot be linked statically. */
-#if !defined _LIBC
-# define _nl_default_default_domain _nl_default_default_domain__
-# define _nl_current_default_domain _nl_current_default_domain__
-#endif
-
-/* @@ end of prolog @@ */
-
-/* Name of the default text domain. */
-extern const char _nl_default_default_domain[];
-
-/* Default text domain in which entries for gettext(3) are to be found. */
-extern const char *_nl_current_default_domain;
-
-
-/* Names for the libintl functions are a problem. They must not clash
- with existing names and they should follow ANSI C. But this source
- code is also used in GNU C Library where the names have a __
- prefix. So we have to make a difference here. */
-#ifdef _LIBC
-# define TEXTDOMAIN __textdomain
-# ifndef strdup
-# define strdup(str) __strdup (str)
-# endif
-#else
-# define TEXTDOMAIN textdomain__
-#endif
-
-/* Lock variable to protect the global data in the gettext implementation. */
-__libc_rwlock_define (extern, _nl_state_lock)
-
-/* Set the current default message catalog to DOMAINNAME.
- If DOMAINNAME is null, return the current default.
- If DOMAINNAME is "", reset to the default of "messages". */
-char *
-TEXTDOMAIN (domainname)
- const char *domainname;
-{
- char *new_domain;
- char *old_domain;
-
- /* A NULL pointer requests the current setting. */
- if (domainname == NULL)
- return (char *) _nl_current_default_domain;
-
- __libc_rwlock_wrlock (_nl_state_lock);
-
- old_domain = (char *) _nl_current_default_domain;
-
- /* If domain name is the null string set to default domain "messages". */
- if (domainname[0] == '\0'
- || strcmp (domainname, _nl_default_default_domain) == 0)
- {
- _nl_current_default_domain = _nl_default_default_domain;
- new_domain = (char *) _nl_current_default_domain;
- }
- else if (strcmp (domainname, old_domain) == 0)
- /* This can happen and people will use it to signal that some
- environment variable changed. */
- new_domain = old_domain;
- else
- {
- /* If the following malloc fails `_nl_current_default_domain'
- will be NULL. This value will be returned and so signals we
- are out of core. */
-#if defined _LIBC || defined HAVE_STRDUP
- new_domain = strdup (domainname);
-#else
- size_t len = strlen (domainname) + 1;
- new_domain = (char *) malloc (len);
- if (new_domain != NULL)
- memcpy (new_domain, domainname, len);
-#endif
-
- if (new_domain != NULL)
- _nl_current_default_domain = new_domain;
- }
-
- /* We use this possibility to signal a change of the loaded catalogs
- since this is most likely the case and there is no other easy we
- to do it. Do it only when the call was successful. */
- if (new_domain != NULL)
- {
- ++_nl_msg_cat_cntr;
-
- if (old_domain != new_domain && old_domain != _nl_default_default_domain)
- free (old_domain);
- }
-
- __libc_rwlock_unlock (_nl_state_lock);
-
- return new_domain;
-}
-
-#ifdef _LIBC
-/* Alias for function name in GNU C Library. */
-weak_alias (__textdomain, textdomain);
-#endif
diff --git a/kbx/ChangeLog b/kbx/ChangeLog
deleted file mode 100644
index 351ec5d13..000000000
--- a/kbx/ChangeLog
+++ /dev/null
@@ -1,102 +0,0 @@
-2002-08-10 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c (blob_cmp_fpr_part): New.
- (has_short_kid, has_long_kid): Implemented.
-
-2002-07-22 Werner Koch <wk@gnupg.org>
-
- * keybox-defs.h: New BLOBTYPTE_EMPTY.
- * keybox-dump.c (_keybox_dump_blob): Handle new type.
- * keybox-file.c (_keybox_read_blob): Skip over empty blobs. Store
- the file offset.
- * keybox-blob.c (_keybox_new_blob): Add new arg OFF.
- (_keybox_get_blob_fileoffset): New.
- * keybox-update.c (keybox_delete): Implemented.
-
-2002-06-19 Werner Koch <wk@gnupg.org>
-
- * keybox-init.c (keybox_set_ephemeral): New.
- * keybox-blob.c (create_blob_header): Store epheermal flag.
- (_keybox_create_x509_blob): Pass epheermal flag on.
- * keybox-update.c (keybox_insert_cert): Ditto.
- * keybox-search.c (blob_get_blob_flags): New.
- (keybox_search): Ignore ephemeral blobs when not in ephemeral mode.
-
- * keybox-dump.c (_keybox_dump_blob): Print blob flags as strings.
-
-2002-02-25 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c (blob_cmp_mail): Use case-insensitive compare
- because mail addresses are in general case insensitive (well
- RFC2822 allows for case sensitive mailbox parts, but this is in
- general considired a Bad Thing). Add additional substr parameter
- to allow for substring matches within the mail address. Change
- all callers to pass this along.
- (blob_cmp_name): Likewise but do the case-insensitive search only
- in sub string mode.
- (keybox_search): Implement MAILSUB and SUBSTR mode.
-
-2002-01-21 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c (keybox_search): Allow KEYDB_SEARCH_MODE_FPR20.
-
-2002-01-15 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c (blob_cmp_fpr): New.
- (has_fingerprint): Implemented;
-
-2001-12-20 Werner Koch <wk@gnupg.org>
-
- * keybox-blob.c (_keybox_create_x509_blob): Skip the leading
- parenthesis of the serial number's S-exp.
- (_keybox_create_x509_blob): And fixed length calculation.
- (create_blob_header): Don't add an offset when writing the serial.
-
-2001-12-18 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (AM_CPPFLAGS): Add flags for libksba
-
- * keybox-blob.c (_keybox_create_x509_blob): Use
- gcry_sexp_canon_len to get the length of the serial number.
- (_keybox_release_blob): Need to use a new serialbuf to free the memory.
-
-2001-12-17 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c: Changed the way the serial number is
- represented.
-
-2001-12-15 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c (blob_cmp_name): There is no terminating 0 stored
- for the uid; fixed length compare.
-
-2001-12-14 Werner Koch <wk@gnupg.org>
-
- * keybox-blob.c (x509_email_kludge): New.
- (_keybox_create_x509_blob): Insert an extra email address if the
- subject's DN has an email part.
- * keybox-defs.h: Added the xtoi_2 and digitp macros.
-
-2001-12-13 Werner Koch <wk@gnupg.org>
-
- * keybox-search.c (blob_cmp_name): Kludge to allow searching for
- more than one name.
- (has_subject_or_alt): New.
- (blob_cmp_mail): New.
- (has_mail): New.
- (keybox_search): Implemented exact search and exact mail search.
-
- * kbx/keybox-blob.c (_keybox_create_x509_blob): Insert alternate
- names.
-
-
- Copyright 2001 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
\ No newline at end of file
diff --git a/kbx/Makefile.am b/kbx/Makefile.am
deleted file mode 100644
index 4e7170379..000000000
--- a/kbx/Makefile.am
+++ /dev/null
@@ -1,53 +0,0 @@
-# Keybox Makefile
-# Copyright (C) 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-localedir = $(datadir)/locale
-INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
-
-EXTRA_DIST = mkerrors
-AM_CPPFLAGS = $(KSBA_CFLAGS) $(LIBGCRYPT_CLFAGS)
-BUILT_SOURCES = keybox-errors.c
-
-noinst_LIBRARIES = libkeybox.a
-bin_PROGRAMS = kbxutil
-
-common_sources = \
- keybox.h keybox-defs.h keybox-search-desc.h \
- keybox-util.c \
- keybox-errors.c \
- keybox-init.c \
- keybox-blob.c \
- keybox-file.c \
- keybox-search.c \
- keybox-update.c \
- keybox-dump.c
-
-
-libkeybox_a_SOURCES = $(common_sources)
-
-kbxutil_SOURCES = kbxutil.c $(common_sources)
-kbxutil_LDADD = ../jnlib/libjnlib.a $(KSBA_LIBS) $(LIBGCRYPT_LIBS)
-
-keybox-errors.c : keybox.h mkerrors
- $(srcdir)/mkerrors < $(srcdir)/keybox.h > keybox-errors.c
-
-
-
diff --git a/kbx/kbxutil.c b/kbx/kbxutil.c
deleted file mode 100644
index b733b81c8..000000000
--- a/kbx/kbxutil.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/* kbxutil.c - The Keybox utility
- * Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include <gcrypt.h>
-
-#include "../jnlib/logging.h"
-#include "../jnlib/argparse.h"
-#include "../jnlib/stringhelp.h"
-#include "../common/i18n.h"
-#include "keybox-defs.h"
-
-enum cmd_and_opt_values {
- aNull = 0,
- oArmor = 'a',
- oDryRun = 'n',
- oOutput = 'o',
- oQuiet = 'q',
- oVerbose = 'v',
-
- aNoSuchCmd = 500, /* force other values not to be a letter */
- aFindByFpr,
- aFindByKid,
- aFindByUid,
-
- oDebug,
- oDebugAll,
-
- oNoArmor,
-
-
- aTest
-};
-
-
-static ARGPARSE_OPTS opts[] = {
- { 300, NULL, 0, N_("@Commands:\n ") },
-
- { aFindByFpr, "find-by-fpr", 0, "|FPR| find key using it's fingerprnt" },
- { aFindByKid, "find-by-kid", 0, "|KID| find key using it's keyid" },
- { aFindByUid, "find-by-uid", 0, "|NAME| find key by user name" },
-
- { 301, NULL, 0, N_("@\nOptions:\n ") },
-
- { oArmor, "armor", 0, N_("create ascii armored output")},
- { oArmor, "armour", 0, "@" },
- { oOutput, "output", 2, N_("use as output file")},
- { oVerbose, "verbose", 0, N_("verbose") },
- { oQuiet, "quiet", 0, N_("be somewhat more quiet") },
- { oDryRun, "dry-run", 0, N_("do not make any changes") },
-
- { oDebug, "debug" ,4|16, N_("set debugging flags")},
- { oDebugAll, "debug-all" ,0, N_("enable full debugging")},
-
- {0} /* end of list */
-};
-
-
-void myexit (int rc);
-
-int keybox_errors_seen = 0;
-
-
-static const char *
-my_strusage( int level )
-{
- const char *p;
- switch( level ) {
- case 11: p = "kbxutil (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p =
- _("Please report bugs to " PACKAGE_BUGREPORT ".\n");
- break;
- case 1:
- case 40: p =
- _("Usage: kbxutil [options] [files] (-h for help)");
- break;
- case 41: p =
- _("Syntax: kbxutil [options] [files]\n"
- "list, export, import Keybox data\n");
- break;
-
-
- default: p = NULL;
- }
- return p;
-}
-
-
-static void
-i18n_init(void)
-{
- #ifdef USE_SIMPLE_GETTEXT
- set_gettext_file( PACKAGE );
- #else
- #ifdef ENABLE_NLS
- #ifdef HAVE_LC_MESSAGES
- setlocale( LC_TIME, "" );
- setlocale( LC_MESSAGES, "" );
- #else
- setlocale( LC_ALL, "" );
- #endif
- bindtextdomain( PACKAGE, LOCALEDIR );
- textdomain( PACKAGE );
- #endif
- #endif
-}
-
-
-/* static void */
-/* wrong_args( const char *text ) */
-/* { */
-/* log_error("usage: kbxutil %s\n", text); */
-/* myexit ( 1 ); */
-/* } */
-
-
-#if 0
-static int
-hextobyte( const byte *s )
-{
- int c;
-
- if( *s >= '0' && *s <= '9' )
- c = 16 * (*s - '0');
- else if( *s >= 'A' && *s <= 'F' )
- c = 16 * (10 + *s - 'A');
- else if( *s >= 'a' && *s <= 'f' )
- c = 16 * (10 + *s - 'a');
- else
- return -1;
- s++;
- if( *s >= '0' && *s <= '9' )
- c += *s - '0';
- else if( *s >= 'A' && *s <= 'F' )
- c += 10 + *s - 'A';
- else if( *s >= 'a' && *s <= 'f' )
- c += 10 + *s - 'a';
- else
- return -1;
- return c;
-}
-#endif
-
-#if 0
-static char *
-format_fingerprint ( const char *s )
-{
- int i, c;
- byte fpr[20];
-
- for (i=0; i < 20 && *s; ) {
- if ( *s == ' ' || *s == '\t' ) {
- s++;
- continue;
- }
- c = hextobyte(s);
- if (c == -1) {
- return NULL;
- }
- fpr[i++] = c;
- s += 2;
- }
- return gcry_xstrdup ( fpr );
-}
-#endif
-
-#if 0
-static int
-format_keyid ( const char *s, u32 *kid )
-{
- char helpbuf[9];
- switch ( strlen ( s ) ) {
- case 8:
- kid[0] = 0;
- kid[1] = strtoul( s, NULL, 16 );
- return 10;
-
- case 16:
- mem2str( helpbuf, s, 9 );
- kid[0] = strtoul( helpbuf, NULL, 16 );
- kid[1] = strtoul( s+8, NULL, 16 );
- return 11;
- }
- return 0; /* error */
-}
-#endif
-
-
-int
-main( int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
- enum cmd_and_opt_values cmd = 0;
-
- set_strusage( my_strusage );
- /*log_set_name("kbxutil"); fixme */
-#if 0
- /* check that the libraries are suitable. Do it here because
- * the option parse may need services of the library */
- if ( !gcry_check_version ( "1.1.4" ) )
- {
- log_fatal(_("libgcrypt is too old (need %s, have %s)\n"),
- "1.1.4", gcry_check_version(NULL) );
- }
-#endif
-
- /*create_dotlock(NULL); register locking cleanup */
- i18n_init();
-
- /* We need to use the gcry malloc function because jnlib does use them */
- keybox_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
- ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free );
-
-
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
- while (arg_parse( &pargs, opts) )
- {
- switch (pargs.r_opt)
- {
- case oVerbose:
- /*opt.verbose++;*/
- /*gcry_control( GCRYCTL_SET_VERBOSITY, (int)opt.verbose );*/
- break;
- case oDebug:
- /*opt.debug |= pargs.r.ret_ulong; */
- break;
- case oDebugAll:
- /*opt.debug = ~0;*/
- break;
-
- case aFindByFpr:
- case aFindByKid:
- case aFindByUid:
- cmd = pargs.r_opt;
- break;
-
- default:
- pargs.err = 2;
- break;
- }
- }
- if (log_get_errorcount(0) )
- myexit(2);
-
- if (!cmd)
- { /* default is to list a KBX file */
- if (!argc)
- _keybox_dump_file (NULL, stdout);
- else
- {
- for (; argc; argc--, argv++)
- _keybox_dump_file (*argv, stdout);
- }
- }
-#if 0
- else if ( cmd == aFindByFpr ) {
- char *fpr;
- if ( argc != 2 )
- wrong_args ("kbxfile foingerprint");
- fpr = format_fingerprint ( argv[1] );
- if ( !fpr )
- log_error ("invalid formatted fingerprint\n");
- else {
- kbxfile_search_by_fpr ( argv[0], fpr );
- gcry_free ( fpr );
- }
- }
- else if ( cmd == aFindByKid ) {
- u32 kid[2];
- int mode;
-
- if ( argc != 2 )
- wrong_args ("kbxfile short-or-long-keyid");
- mode = format_keyid ( argv[1], kid );
- if ( !mode )
- log_error ("invalid formatted keyID\n");
- else {
- kbxfile_search_by_kid ( argv[0], kid, mode );
- }
- }
- else if ( cmd == aFindByUid ) {
- if ( argc != 2 )
- wrong_args ("kbxfile userID");
- kbxfile_search_by_uid ( argv[0], argv[1] );
- }
-#endif
- else
- log_error ("unsupported action\n");
-
- myexit(0);
- return 8; /*NEVER REACHED*/
-}
-
-
-void
-myexit( int rc )
-{
- /* if( opt.debug & DBG_MEMSTAT_VALUE ) {*/
-/* gcry_control( GCRYCTL_DUMP_MEMORY_STATS ); */
-/* gcry_control( GCRYCTL_DUMP_RANDOM_STATS ); */
- /* }*/
-/* if( opt.debug ) */
-/* gcry_control( GCRYCTL_DUMP_SECMEM_STATS ); */
- rc = rc? rc : log_get_errorcount(0)? 2 :
- keybox_errors_seen? 1 : 0;
- exit(rc );
-}
-
-
diff --git a/kbx/keybox-blob.c b/kbx/keybox-blob.c
deleted file mode 100644
index 48e2b5b87..000000000
--- a/kbx/keybox-blob.c
+++ /dev/null
@@ -1,1007 +0,0 @@
-/* keybox-blob.c - KBX Blob handling
- * Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-/* The keybox data formats
-
-The KeyBox uses an augmented OpenPGP/X.509 key format. This makes
-random access to a keyblock/Certificate easier and also gives the
-opportunity to store additional information (e.g. the fingerprint)
-along with the key. All integers are stored in network byte order,
-offsets are counted from the beginning of the Blob.
-
-The first record of a plain KBX file has a special format:
-
- u32 length of the first record
- byte Blob type (1)
- byte version number (1)
- byte reserved
- byte reserved
- u32 magic 'KBXf'
- byte pgp_marginals used for validity calculation of this file
- byte pgp_completes ditto.
- byte pgp_cert_depth ditto.
-
-The OpenPGP and X.509 blob are verry similiar, things which are
-X.509 specific are noted like [X.509: xxx]
-
- u32 length of this blob (including these 4 bytes)
- byte Blob type (2) [X509: 3]
- byte version number of this blob type (1)
- u16 Blob flags
- bit 0 = contains secret key material
- bit 1 = ephemeral blob (e.g. used while quering external resources)
-
- u32 offset to the OpenPGP keyblock or X509 DER encoded certificate
- u32 and its length
- u16 number of keys (at least 1!) [X509: always 1]
- u16 size of additional key information
- n times:
- b20 The keys fingerprint
- (fingerprints are always 20 bytes, MD5 left padded with zeroes)
- u32 offset to the n-th key's keyID (a keyID is always 8 byte)
- or 0 if not known which is the case opnly for X509.
- u16 special key flags
- bit 0 =
- u16 reserved
- u16 size of serialnumber(may be zero)
- n u16 (see above) bytes of serial number
- u16 number of user IDs
- u16 size of additional user ID information
- n times:
- u32 offset to the n-th user ID
- u32 length of this user ID.
- u16 special user ID flags.
- bit 0 =
- byte validity
- byte reserved
- [For X509, the first user ID is the ISsuer, the second the subject
- and the others are subjectAltNames]
- u16 number of signatures
- u16 size of signature information (4)
- u32 expiration time of signature with some special values:
- 0x00000000 = not checked
- 0x00000001 = missing key
- 0x00000002 = bad signature
- 0x10000000 = valid and expires at some date in 1978.
- 0xffffffff = valid and does not expire
- u8 assigned ownertrust [X509: no used]
- u8 all_validity [X509: no used]
- u16 reserved
- u32 recheck_after
- u32 Newest timestamp in the keyblock (useful for KS syncronsiation?)
- u32 Blob created at
- u32 size of reserved space (not including this field)
- reserved space
-
- Here we might want to put other data
-
- Here comes the keyblock
-
- maybe we put a signature here later.
-
- b16 MD5 checksum (useful for KS syncronisation), we might also want to use
- a mac here.
- b4 resevered
-
-*/
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <gcrypt.h>
-
-#ifdef KEYBOX_WITH_OPENPGP
-/* include stuff to parse the packets */
-#endif
-#ifdef KEYBOX_WITH_X509
-#include <ksba.h>
-#endif
-
-#include "keybox-defs.h"
-
-
-/* special values of the signature status */
-#define SF_NONE(a) ( !(a) )
-#define SF_NOKEY(a) ((a) & (1<<0))
-#define SF_BAD(a) ((a) & (1<<1))
-#define SF_VALID(a) ((a) & (1<<29))
-
-
-struct membuf {
- size_t len;
- size_t size;
- char *buf;
- int out_of_core;
-};
-
-
-/* #if MAX_FINGERPRINT_LEN < 20 */
-/* #error fingerprints are 20 bytes */
-/* #endif */
-
-struct keyboxblob_key {
- char fpr[20];
- u32 off_kid;
- ulong off_kid_addr;
- u16 flags;
-};
-struct keyboxblob_uid {
- ulong off_addr;
- char *name; /* used only with x509 */
- u32 len;
- u16 flags;
- byte validity;
-};
-
-struct keyid_list {
- struct keyid_list *next;
- int seqno;
- byte kid[8];
-};
-
-struct fixup_list {
- struct fixup_list *next;
- u32 off;
- u32 val;
-};
-
-
-struct keyboxblob {
- byte *blob;
- size_t bloblen;
- off_t fileoffset;
-
- /* stuff used only by keybox_create_blob */
- unsigned char *serialbuf;
- const unsigned char *serial;
- size_t seriallen;
- int nkeys;
- struct keyboxblob_key *keys;
- int nuids;
- struct keyboxblob_uid *uids;
- int nsigs;
- u32 *sigs;
- struct fixup_list *fixups;
- int fixup_out_of_core;
-
- struct keyid_list *temp_kids;
- struct membuf bufbuf; /* temporary store for the blob */
- struct membuf *buf;
-};
-
-
-
-/* A simple implemnation of a dynamic buffer. Use init_membuf() to
- create a buffer, put_membuf to append bytes and get_membuf to
- release and return the buffer. Allocation errors are detected but
- only returned at the final get_membuf(), this helps not to clutter
- the code with out of core checks. */
-
-static void
-init_membuf (struct membuf *mb, int initiallen)
-{
- mb->len = 0;
- mb->size = initiallen;
- mb->out_of_core = 0;
- mb->buf = xtrymalloc (initiallen);
- if (!mb->buf)
- mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
- if (mb->out_of_core)
- return;
-
- if (mb->len + len >= mb->size)
- {
- char *p;
-
- mb->size += len + 1024;
- p = xtryrealloc (mb->buf, mb->size);
- if (!p)
- {
- mb->out_of_core = 1;
- return;
- }
- mb->buf = p;
- }
- memcpy (mb->buf + mb->len, buf, len);
- mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
- char *p;
-
- if (mb->out_of_core)
- {
- xfree (mb->buf);
- mb->buf = NULL;
- return NULL;
- }
-
- p = mb->buf;
- *len = mb->len;
- mb->buf = NULL;
- mb->out_of_core = 1; /* don't allow a reuse */
- return p;
-}
-
-
-static void
-put8 (struct membuf *mb, byte a )
-{
- put_membuf (mb, &a, 1);
-}
-
-static void
-put16 (struct membuf *mb, u16 a )
-{
- unsigned char tmp[2];
- tmp[0] = a>>8;
- tmp[1] = a;
- put_membuf (mb, tmp, 2);
-}
-
-static void
-put32 (struct membuf *mb, u32 a )
-{
- unsigned char tmp[4];
- tmp[0] = a>>24;
- tmp[1] = a>>16;
- tmp[2] = a>>8;
- tmp[3] = a;
- put_membuf (mb, tmp, 4);
-}
-
-
-/* Store a value in the fixup list */
-static void
-add_fixup (KEYBOXBLOB blob, u32 off, u32 val)
-{
- struct fixup_list *fl;
-
- if (blob->fixup_out_of_core)
- return;
-
- fl = xtrycalloc(1, sizeof *fl);
- if (!fl)
- blob->fixup_out_of_core = 1;
- else
- {
- fl->off = off;
- fl->val = val;
- fl->next = blob->fixups;
- blob->fixups = fl;
- }
-}
-
-
-/*
- Some wrappers
-*/
-
-static u32
-make_timestamp (void)
-{
- return time(NULL);
-}
-
-
-
-#ifdef KEYBOX_WITH_OPENPGP
-/*
- OpenPGP specific stuff
-*/
-
-
-/*
- We must store the keyid at some place because we can't calculate the
- offset yet. This is only used for v3 keyIDs. Function returns an
- index value for later fixup or -1 for out of core. The value must be
- a non-zero value */
-static int
-pgp_temp_store_kid (KEYBOXBLOB blob, PKT_public_key *pk)
-{
- struct keyid_list *k, *r;
-
- k = xtrymalloc (sizeof *k);
- if (!k)
- return -1;
- k->kid[0] = pk->keyid[0] >> 24 ;
- k->kid[1] = pk->keyid[0] >> 16 ;
- k->kid[2] = pk->keyid[0] >> 8 ;
- k->kid[3] = pk->keyid[0] ;
- k->kid[4] = pk->keyid[0] >> 24 ;
- k->kid[5] = pk->keyid[0] >> 16 ;
- k->kid[6] = pk->keyid[0] >> 8 ;
- k->kid[7] = pk->keyid[0] ;
- k->seqno = 0;
- k->next = blob->temp_kids;
- blob->temp_kids = k;
- for (r=k; r; r = r->next)
- k->seqno++;
-
- return k->seqno;
-}
-
-static int
-pgp_create_key_part (KEYBOXBLOB blob, KBNODE keyblock)
-{
- KBNODE node;
- size_t fprlen;
- int n;
-
- for (n=0, node = keyblock; node; node = node->next)
- {
- if ( node->pkt->pkttype == PKT_PUBLIC_KEY
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- {
- PKT_public_key *pk = node->pkt->pkt.public_key;
- char tmp[20];
-
- fingerprint_from_pk (pk, tmp , &fprlen);
- memcpy (blob->keys[n].fpr, tmp, 20);
- if ( fprlen != 20 ) /*v3 fpr - shift right and fill with zeroes*/
- {
- assert (fprlen == 16);
- memmove (blob->keys[n].fpr+4, blob->keys[n].fpr, 16);
- memset (blob->keys[n].fpr, 0, 4);
- blob->keys[n].off_kid = pgp_temp_store_kid (blob, pk);
- }
- else
- {
- blob->keys[n].off_kid = 0; /* will be fixed up later */
- }
- blob->keys[n].flags = 0;
- n++;
- }
- else if ( node->pkt->pkttype == PKT_SECRET_KEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY )
- {
- never_reached (); /* actually not yet implemented */
- }
- }
- assert (n == blob->nkeys);
- return 0;
-}
-
-static int
-pgp_create_uid_part (KEYBOXBLOB blob, KBNODE keyblock)
-{
- KBNODE node;
- int n;
-
- for (n=0, node = keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_USER_ID)
- {
- PKT_user_id *u = node->pkt->pkt.user_id;
-
- blob->uids[n].len = u->len;
- blob->uids[n].flags = 0;
- blob->uids[n].validity = 0;
- n++;
- }
- }
- assert (n == blob->nuids);
- return 0;
-}
-
-static int
-pgp_create_sig_part (KEYBOXBLOB blob, KBNODE keyblock)
-{
- KBNODE node;
- int n;
-
- for (n=0, node = keyblock; node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_SIGNATURE)
- {
- PKT_signature *sig = node->pkt->pkt.signature;
-
- blob->sigs[n] = 0; /* FIXME: check the signature here */
- n++;
- }
- }
- assert( n == blob->nsigs );
- return 0;
-}
-
-static int
-pgp_create_blob_keyblock (KEYBOXBLOB blob, KBNODE keyblock)
-{
- struct membuf *a = blob->buf;
- KBNODE node;
- int rc;
- int n;
- u32 kbstart = a->len;
-
- add_fixup (blob, kbstart);
-
- for (n = 0, node = keyblock; node; node = node->next)
- {
- rc = build_packet ( a, node->pkt );
- if ( rc ) {
- gpg_log_error ("build_packet(%d) for keyboxblob failed: %s\n",
- node->pkt->pkttype, gpg_errstr(rc) );
- return GPGERR_WRITE_FILE;
- }
- if ( node->pkt->pkttype == PKT_USER_ID )
- {
- PKT_user_id *u = node->pkt->pkt.user_id;
- /* build_packet has set the offset of the name into u ;
- * now we can do the fixup */
- add_fixup (blob, blob->uids[n].off_addr, u->stored_at);
- n++;
- }
- }
- assert (n == blob->nuids);
-
- add_fixup (blob, a->len - kbstart);
- return 0;
-}
-
-#endif /*KEYBOX_WITH_OPENPGP*/
-
-
-#ifdef KEYBOX_WITH_X509
-/*
- X.509 specific stuff
- */
-
-/* Write the raw certificate out */
-static int
-x509_create_blob_cert (KEYBOXBLOB blob, KsbaCert cert)
-{
- struct membuf *a = blob->buf;
- const unsigned char *image;
- size_t length;
- u32 kbstart = a->len;
-
- /* Store our offset for later fixup */
- add_fixup (blob, 8, kbstart);
-
- image = ksba_cert_get_image (cert, &length);
- if (!image)
- return KEYBOX_General_Error;
- put_membuf (a, image, length);
-
- add_fixup (blob, 12, a->len - kbstart);
- return 0;
-}
-
-#endif /*KEYBOX_WITH_X509*/
-
-/* Write a stored keyID out to the buffer */
-static void
-write_stored_kid (KEYBOXBLOB blob, int seqno)
-{
- struct keyid_list *r;
-
- for ( r = blob->temp_kids; r; r = r->next )
- {
- if (r->seqno == seqno )
- {
- put_membuf (blob->buf, r->kid, 8);
- return;
- }
- }
- never_reached ();
-}
-
-/* Release a list of key IDs */
-static void
-release_kid_list (struct keyid_list *kl)
-{
- struct keyid_list *r, *r2;
-
- for ( r = kl; r; r = r2 )
- {
- r2 = r->next;
- xfree (r);
- }
-}
-
-
-
-static int
-create_blob_header (KEYBOXBLOB blob, int blobtype, int as_ephemeral)
-{
- struct membuf *a = blob->buf;
- int i;
-
- put32 ( a, 0 ); /* blob length, needs fixup */
- put8 ( a, blobtype);
- put8 ( a, 1 ); /* blob type version */
- put16 ( a, as_ephemeral? 2:0 ); /* blob flags */
-
- put32 ( a, 0 ); /* offset to the raw data, needs fixup */
- put32 ( a, 0 ); /* length of the raw data, needs fixup */
-
- put16 ( a, blob->nkeys );
- put16 ( a, 20 + 4 + 2 + 2 ); /* size of key info */
- for ( i=0; i < blob->nkeys; i++ )
- {
- put_membuf (a, blob->keys[i].fpr, 20);
- blob->keys[i].off_kid_addr = a->len;
- put32 ( a, 0 ); /* offset to keyid, fixed up later */
- put16 ( a, blob->keys[i].flags );
- put16 ( a, 0 ); /* reserved */
- }
-
- put16 (a, blob->seriallen); /*fixme: check that it fits into 16 bits*/
- if (blob->serial)
- put_membuf (a, blob->serial, blob->seriallen);
-
- put16 ( a, blob->nuids );
- put16 ( a, 4 + 4 + 2 + 1 + 1 ); /* size of uid info */
- for (i=0; i < blob->nuids; i++)
- {
- blob->uids[i].off_addr = a->len;
- put32 ( a, 0 ); /* offset to userid, fixed up later */
- put32 ( a, blob->uids[i].len );
- put16 ( a, blob->uids[i].flags );
- put8 ( a, 0 ); /* validity */
- put8 ( a, 0 ); /* reserved */
- }
-
- put16 ( a, blob->nsigs );
- put16 ( a, 4 ); /* size of sig info */
- for (i=0; i < blob->nsigs; i++)
- {
- put32 ( a, blob->sigs[i]);
- }
-
- put8 ( a, 0 ); /* assigned ownertrust */
- put8 ( a, 0 ); /* validity of all user IDs */
- put16 ( a, 0 ); /* reserved */
- put32 ( a, 0 ); /* time of next recheck */
- put32 ( a, 0 ); /* newest timestamp (none) */
- put32 ( a, make_timestamp() ); /* creation time */
- put32 ( a, 0 ); /* size of reserved space */
- /* reserved space (which is currently of size 0) */
-
- /* space where we write keyIDs and and other stuff so that the
- pointers can actually point to somewhere */
- if (blobtype == BLOBTYPE_PGP)
- {
- /* We need to store the keyids for all pgp v3 keys because those key
- IDs are not part of the fingerprint. While we are doing that, we
- fixup all the keyID offsets */
- for (i=0; i < blob->nkeys; i++ )
- {
- if (blob->keys[i].off_kid)
- { /* this is a v3 one */
- add_fixup (blob, blob->keys[i].off_kid_addr, a->len);
- write_stored_kid (blob, blob->keys[i].off_kid);
- }
- else
- { /* the better v4 key IDs - just store an offset 8 bytes back */
- add_fixup (blob, blob->keys[i].off_kid_addr,
- blob->keys[i].off_kid_addr - 8);
- }
- }
- }
-
- if (blobtype == BLOBTYPE_X509)
- {
- /* We don't want to point to ASN.1 encoded UserIDs (DNs) but to
- the utf-8 string represenation of them */
- for (i=0; i < blob->nuids; i++ )
- {
- if (blob->uids[i].name)
- { /* this is a v3 one */
- add_fixup (blob, blob->uids[i].off_addr, a->len);
- put_membuf (blob->buf, blob->uids[i].name, blob->uids[i].len);
- }
- }
- }
-
- return 0;
-}
-
-
-
-static int
-create_blob_trailer (KEYBOXBLOB blob)
-{
- return 0;
-}
-
-
-static int
-create_blob_finish (KEYBOXBLOB blob)
-{
- struct membuf *a = blob->buf;
- byte *p;
- char *pp;
- int i;
- size_t n;
-
- /* write a placeholder for the checksum */
- for (i = 0; i < 16; i++ )
- put32 (a, 0); /* Hmmm: why put32() ?? */
-
- /* get the memory area */
- p = get_membuf (a, &n);
- if (!p)
- return KEYBOX_Out_Of_Core;
- assert (n >= 20);
-
- /* fixup the length */
- add_fixup (blob, 0, n);
-
- /* do the fixups */
- if (blob->fixup_out_of_core)
- return KEYBOX_Out_Of_Core;
-
- {
- struct fixup_list *fl;
- for (fl = blob->fixups; fl; fl = fl->next)
- {
- assert (fl->off+4 <= n);
- p[fl->off+0] = fl->val >> 24;
- p[fl->off+1] = fl->val >> 16;
- p[fl->off+2] = fl->val >> 8;
- p[fl->off+3] = fl->val;
- }
- }
-
- /* calculate and store the MD5 checksum */
- gcry_md_hash_buffer (GCRY_MD_MD5, p + n - 16, p, n - 16);
-
- pp = xtrymalloc (n);
- if ( !pp )
- return KEYBOX_Out_Of_Core;
- memcpy (pp , p, n);
- blob->blob = pp;
- blob->bloblen = n;
-
- return 0;
-}
-
-
-#ifdef KEYBOX_WITH_OPENPGP
-
-int
-_keybox_create_pgp_blob (KEYBOXBLOB *r_blob, KBNODE keyblock, int as_ephemeral)
-{
- int rc = 0;
- KBNODE node;
- KEYBOXBLOB blob;
-
- *r_blob = NULL;
- blob = xtrycalloc (1, sizeof *blob);
- if( !blob )
- return KEYBOX_Out_Of_Core;
-
- /* fixme: Do some sanity checks on the keyblock */
-
- /* count userids and keys so that we can allocate the arrays */
- for (node = keyblock; node; node = node->next)
- {
- switch (node->pkt->pkttype)
- {
- case PKT_PUBLIC_KEY:
- case PKT_SECRET_KEY:
- case PKT_PUBLIC_SUBKEY:
- case PKT_SECRET_SUBKEY: blob->nkeys++; break;
- case PKT_USER_ID: blob->nuids++; break;
- case PKT_SIGNATURE: blob->nsigs++; break;
- default: break;
- }
- }
-
- blob->keys = xtrycalloc (blob->nkeys, sizeof *blob->keys );
- blob->uids = xtrycalloc (blob->nuids, sizeof *blob->uids );
- blob->sigs = xtrycalloc (blob->nsigs, sizeof *blob->sigs );
- if (!blob->keys || !blob->uids || !blob->sigs)
- {
- rc = KEYBOX_Out_Of_Core;
- goto leave;
- }
-
- rc = pgp_create_key_part ( blob, keyblock );
- if (rc)
- goto leave;
- rc = pgp_create_uid_part ( blob, keyblock );
- if (rc)
- goto leave;
- rc = pgp_create_sig_part ( blob, keyblock );
- if (rc)
- goto leave;
-
- init_membuf (&blob->bufbuf, 1024);
- blob->buf = &blob->bufbuf;
- rc = create_blob_header (blob, BLOBTYPE_OPENPGP, as_ephemeral);
- if (rc)
- goto leave;
- rc = pgp_create_blob_keyblock (blob, keyblock);
- if (rc)
- goto leave;
- rc = create_blob_trailer (blob);
- if (rc)
- goto leave;
- rc = create_blob_finish ( blob );
- if (rc)
- goto leave;
-
-
- leave:
- release_kid_list (blob->temp_kids);
- blob->temp_kids = NULL;
- if (rc)
- {
- keybox_release_blob (blob);
- *r_blob = NULL;
- }
- else
- {
- *r_blob = blob;
- }
- return rc;
-}
-#endif /*KEYBOX_WITH_OPENPGP*/
-
-#ifdef KEYBOX_WITH_X509
-
-/* return an allocated string with the email address extracted from a
- DN */
-static char *
-x509_email_kludge (const char *name)
-{
- const unsigned char *p;
- unsigned char *buf;
- int n;
-
- if (strncmp (name, "1.2.840.113549.1.9.1=#", 22))
- return NULL;
- /* This looks pretty much like an email address in the subject's DN
- we use this to add an additional user ID entry. This way,
- openSSL generated keys get a nicer and usable listing */
- name += 22;
- for (n=0, p=name; hexdigitp (p) && hexdigitp (p+1); p +=2, n++)
- ;
- if (*p != '#' || !n)
- return NULL;
- buf = xtrymalloc (n+3);
- if (!buf)
- return NULL; /* oops, out of core */
- *buf = '<';
- for (n=1, p=name; *p != '#'; p +=2, n++)
- buf[n] = xtoi_2 (p);
- buf[n++] = '>';
- buf[n] = 0;
- return buf;
-}
-
-
-
-/* Note: We should move calculation of the digest into libksba and
- remove that parameter */
-int
-_keybox_create_x509_blob (KEYBOXBLOB *r_blob, KsbaCert cert,
- unsigned char *sha1_digest, int as_ephemeral)
-{
- int i, rc = 0;
- KEYBOXBLOB blob;
- unsigned char *p;
- unsigned char **names = NULL;
- size_t max_names;
-
- *r_blob = NULL;
- blob = xtrycalloc (1, sizeof *blob);
- if( !blob )
- return KEYBOX_Out_Of_Core;
-
- p = ksba_cert_get_serial (cert);
- if (p)
- {
- size_t n, len;
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- if (n < 2)
- {
- xfree (p);
- return KEYBOX_General_Error;
- }
- blob->serialbuf = p;
- p++; n--; /* skip '(' */
- for (len=0; n && *p && *p != ':' && digitp (p); n--, p++)
- len = len*10 + atoi_1 (p);
- if (*p != ':')
- {
- xfree (blob->serialbuf);
- blob->serialbuf = NULL;
- return KEYBOX_General_Error;
- }
- p++;
- blob->serial = p;
- blob->seriallen = len;
- }
-
- blob->nkeys = 1;
-
- /* create list of names */
- blob->nuids = 0;
- max_names = 100;
- names = xtrymalloc (max_names * sizeof *names);
- if (!names)
- {
- rc = KEYBOX_Out_Of_Core;
- goto leave;
- }
- p = ksba_cert_get_issuer (cert, 0);
- if (!p)
- {
- rc = KEYBOX_Missing_Value;
- goto leave;
- }
- names[blob->nuids++] = p;
- for (i=0; (p = ksba_cert_get_subject (cert, i)); i++)
- {
-
- if (blob->nuids >= max_names)
- {
- unsigned char **tmp;
-
- max_names += 100;
- tmp = xtryrealloc (names, max_names * sizeof *names);
- if (!tmp)
- {
- rc = KEYBOX_Out_Of_Core;
- goto leave;
- }
- }
- names[blob->nuids++] = p;
- if (!i && (p=x509_email_kludge (p)))
- names[blob->nuids++] = p; /* due to !i we don't need to check bounds*/
- }
-
- /* space for signature information */
- blob->nsigs = 1;
-
- blob->keys = xtrycalloc (blob->nkeys, sizeof *blob->keys );
- blob->uids = xtrycalloc (blob->nuids, sizeof *blob->uids );
- blob->sigs = xtrycalloc (blob->nsigs, sizeof *blob->sigs );
- if (!blob->keys || !blob->uids || !blob->sigs)
- {
- rc = KEYBOX_Out_Of_Core;
- goto leave;
- }
-
- memcpy (blob->keys[0].fpr, sha1_digest, 20);
- blob->keys[0].off_kid = 0; /* We don't have keyids */
- blob->keys[0].flags = 0;
-
- /* issuer and subject names */
- for (i=0; i < blob->nuids; i++)
- {
- blob->uids[i].name = names[i];
- blob->uids[i].len = strlen(names[i]);
- names[i] = NULL;
- blob->uids[i].flags = 0;
- blob->uids[i].validity = 0;
- }
- xfree (names);
- names = NULL;
-
- /* signatures */
- blob->sigs[0] = 0; /* not yet checked */
-
- /* Create a temporary buffer for further processing */
- init_membuf (&blob->bufbuf, 1024);
- blob->buf = &blob->bufbuf;
- /* write out what we already have */
- rc = create_blob_header (blob, BLOBTYPE_X509, as_ephemeral);
- if (rc)
- goto leave;
- rc = x509_create_blob_cert (blob, cert);
- if (rc)
- goto leave;
- rc = create_blob_trailer (blob);
- if (rc)
- goto leave;
- rc = create_blob_finish ( blob );
- if (rc)
- goto leave;
-
-
- leave:
- release_kid_list (blob->temp_kids);
- blob->temp_kids = NULL;
- if (blob && names)
- {
- for (i=0; i < blob->nuids; i++)
- xfree (names[i]);
- }
- xfree (names);
- if (rc)
- {
- _keybox_release_blob (blob);
- *r_blob = NULL;
- }
- else
- {
- *r_blob = blob;
- }
- return rc;
-}
-#endif /*KEYBOX_WITH_X509*/
-
-
-
-int
-_keybox_new_blob (KEYBOXBLOB *r_blob, char *image, size_t imagelen, off_t off)
-{
- KEYBOXBLOB blob;
-
- *r_blob = NULL;
- blob = xtrycalloc (1, sizeof *blob);
- if (!blob)
- return KEYBOX_Out_Of_Core;
-
- blob->blob = image;
- blob->bloblen = imagelen;
- blob->fileoffset = off;
- *r_blob = blob;
- return 0;
-}
-
-void
-_keybox_release_blob (KEYBOXBLOB blob)
-{
- int i;
- if (!blob)
- return;
- /* hmmm: release membuf here?*/
- xfree (blob->keys );
- xfree (blob->serialbuf);
- for (i=0; i < blob->nuids; i++)
- xfree (blob->uids[i].name);
- xfree (blob->uids );
- xfree (blob->sigs );
- xfree (blob->blob );
- xfree (blob );
-}
-
-
-
-const char *
-_keybox_get_blob_image ( KEYBOXBLOB blob, size_t *n )
-{
- *n = blob->bloblen;
- return blob->blob;
-}
-
-off_t
-_keybox_get_blob_fileoffset (KEYBOXBLOB blob)
-{
- return blob->fileoffset;
-}
-
diff --git a/kbx/keybox-defs.h b/kbx/keybox-defs.h
deleted file mode 100644
index 1c66020f7..000000000
--- a/kbx/keybox-defs.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/* keybox-defs.h - interal Keybox defintions
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 KEYBOX_DEFS_H
-#define KEYBOX_DEFS_H 1
-
-#include <sys/types.h> /* off_t */
-#include "keybox.h"
-
-#ifndef HAVE_BYTE_TYPEDEF
-typedef unsigned char byte; /* fixme */
-#endif
-#ifndef HAVE_U16_TYPEDEF
-typedef unsigned short u16; /* fixme */
-#endif
-#ifndef HAVE_U32_TYPEDEF
-typedef unsigned int u32; /* fixme */
-#endif
-
-enum {
- BLOBTYPE_EMPTY = 0,
- BLOBTYPE_HEADER = 1,
- BLOBTYPE_PGP = 2,
- BLOBTYPE_X509 = 3
-};
-
-
-typedef struct keyboxblob *KEYBOXBLOB;
-
-
-typedef struct keybox_name *KB_NAME;
-typedef struct keybox_name const * CONST_KB_NAME;
-struct keybox_name {
- struct keybox_name *next;
- int secret;
- /*DOTLOCK lockhd;*/
- int is_locked;
- int did_full_scan;
- char fname[1];
-};
-
-
-
-struct keybox_handle {
- CONST_KB_NAME kb;
- int secret; /* this is for a secret keybox */
- FILE *fp;
- int eof;
- int error;
- int ephemeral;
- struct {
- KEYBOXBLOB blob;
- off_t offset;
- size_t pk_no;
- size_t uid_no;
- unsigned int n_packets; /*used for delete and update*/
- } found;
- struct {
- char *name;
- char *pattern;
- } word_match;
-};
-
-
-/* Don't know whether this is needed: */
-/* static struct { */
-/* const char *homedir; */
-/* int dry_run; */
-/* int quiet; */
-/* int verbose; */
-/* int preserve_permissions; */
-/* } keybox_opt; */
-
-
-/*-- keybox-blob.c --*/
-#ifdef KEYBOX_WITH_OPENPGP
- /* fixme */
-#endif /*KEYBOX_WITH_OPENPGP*/
-#ifdef KEYBOX_WITH_X509
-int _keybox_create_x509_blob (KEYBOXBLOB *r_blob, KsbaCert cert,
- unsigned char *sha1_digest, int as_ephemeral);
-#endif /*KEYBOX_WITH_X509*/
-
-int _keybox_new_blob (KEYBOXBLOB *r_blob, char *image, size_t imagelen,
- off_t off);
-void _keybox_release_blob (KEYBOXBLOB blob);
-const char *_keybox_get_blob_image (KEYBOXBLOB blob, size_t *n);
-off_t _keybox_get_blob_fileoffset (KEYBOXBLOB blob);
-
-/*-- keybox-file.c --*/
-int _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp);
-int _keybox_write_blob (KEYBOXBLOB blob, FILE *fp);
-
-/*-- keybox-dump.c --*/
-int _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp);
-int _keybox_dump_file (const char *filename, FILE *outfp);
-
-
-/*-- keybox-util.c --*/
-void *_keybox_malloc (size_t n);
-void *_keybox_calloc (size_t n, size_t m);
-void *_keybox_realloc (void *p, size_t n);
-void _keybox_free (void *p);
-
-#define xtrymalloc(a) _keybox_malloc ((a))
-#define xtrycalloc(a,b) _keybox_calloc ((a),(b))
-#define xtryrealloc(a,b) _keybox_realloc((a),(b))
-#define xfree(a) _keybox_free ((a))
-
-
-#define DIM(v) (sizeof(v)/sizeof((v)[0]))
-#define DIMof(type,member) DIM(((type *)0)->member)
-#ifndef STR
- #define STR(v) #v
-#endif
-#define STR2(v) STR(v)
-
-/*
- a couple of handy macros
-*/
-
-#define return_if_fail(expr) do { \
- if (!(expr)) { \
- fprintf (stderr, "%s:%d: assertion `%s' failed\n", \
- __FILE__, __LINE__, #expr ); \
- return; \
- } } while (0)
-#define return_null_if_fail(expr) do { \
- if (!(expr)) { \
- fprintf (stderr, "%s:%d: assertion `%s' failed\n", \
- __FILE__, __LINE__, #expr ); \
- return NULL; \
- } } while (0)
-#define return_val_if_fail(expr,val) do { \
- if (!(expr)) { \
- fprintf (stderr, "%s:%d: assertion `%s' failed\n", \
- __FILE__, __LINE__, #expr ); \
- return (val); \
- } } while (0)
-#define never_reached() do { \
- fprintf (stderr, "%s:%d: oops; should never get here\n", \
- __FILE__, __LINE__ ); \
- } while (0)
-
-
-/* some macros to replace ctype ones and avoid locale problems */
-#define digitp(p) (*(p) >= '0' && *(p) <= '9')
-#define hexdigitp(a) (digitp (a) \
- || (*(a) >= 'A' && *(a) <= 'F') \
- || (*(a) >= 'a' && *(a) <= 'f'))
-/* the atoi macros assume that the buffer has only valid digits */
-#define atoi_1(p) (*(p) - '0' )
-#define atoi_2(p) ((atoi_1(p) * 10) + atoi_1((p)+1))
-#define atoi_4(p) ((atoi_2(p) * 100) + atoi_2((p)+2))
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-#endif /*KEYBOX_DEFS_H*/
-
-
diff --git a/kbx/keybox-dump.c b/kbx/keybox-dump.c
deleted file mode 100644
index 4fb3a4eb2..000000000
--- a/kbx/keybox-dump.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/* keybox-dump.c - Debug helpers
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "keybox-defs.h"
-
-static ulong
-get32 (const byte *buffer)
-{
- ulong a;
- a = *buffer << 24;
- a |= buffer[1] << 16;
- a |= buffer[2] << 8;
- a |= buffer[3];
- return a;
-}
-
-static ulong
-get16 (const byte *buffer)
-{
- ulong a;
- a = *buffer << 8;
- a |= buffer[1];
- return a;
-}
-
-void
-print_string (FILE *fp, const byte *p, size_t n, int delim)
-{
- for ( ; n; n--, p++ )
- {
- if (*p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim)
- {
- putc('\\', fp);
- if( *p == '\n' )
- putc('n', fp);
- else if( *p == '\r' )
- putc('r', fp);
- else if( *p == '\f' )
- putc('f', fp);
- else if( *p == '\v' )
- putc('v', fp);
- else if( *p == '\b' )
- putc('b', fp);
- else if( !*p )
- putc('0', fp);
- else
- fprintf(fp, "x%02x", *p );
- }
- else
- putc(*p, fp);
- }
-}
-
-
-static int
-dump_header_blob (const byte *buffer, size_t length, FILE *fp)
-{
- fprintf (fp, "Version: %d\n", buffer[5]);
- if ( memcmp (buffer+8, "KBXf", 4))
- fprintf (fp, "[Error: invalid magic number]\n");
- return 0;
-}
-
-
-/* Dump one block to FP */
-int
-_keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
-{
- const byte *buffer;
- size_t length;
- int type;
- ulong n, nkeys, keyinfolen;
- ulong nuids, uidinfolen;
- ulong nsigs, siginfolen;
- ulong rawdata_off, rawdata_len;
- ulong nserial;
- const byte *p;
-
- buffer = _keybox_get_blob_image (blob, &length);
-
- if (length < 40)
- {
- fprintf (fp, "[blob too short]\n");
- return -1;
- }
-
- n = get32( buffer );
- if (n > length)
- fprintf (fp, "[blob larger than length - output truncated]\n");
- else
- length = n; /* ignore the rest */
-
- fprintf (fp, "Length: %lu\n", n );
- type = buffer[4];
- switch (type)
- {
- case BLOBTYPE_EMPTY:
- fprintf (fp, "Type: Empty\n");
- return 0;
-
- case BLOBTYPE_HEADER:
- fprintf (fp, "Type: Header\n");
- return dump_header_blob (buffer, length, fp);
- case BLOBTYPE_PGP:
- fprintf (fp, "Type: OpenPGP\n");
- break;
- case BLOBTYPE_X509:
- fprintf (fp, "Type: X.509\n");
- break;
- default:
- fprintf (fp, "Type: %d\n", type);
- fprintf (fp, "[can't dump this blob type]\n");
- return 0;
- }
- fprintf (fp, "Version: %d\n", buffer[5]);
-
- n = get16 (buffer + 6);
- fprintf( fp, "Blob-Flags: %04lX", n);
- if (n)
- {
- int any = 0;
-
- fputs (" (", fp);
- if ((n & 1))
- {
- fputs ("secret", fp);
- any++;
- }
- if ((n & 2))
- {
- if (any)
- putc (',', fp);
- fputs ("ephemeral", fp);
- any++;
- }
- putc (')', fp);
- }
- putc ('\n', fp);
-
- rawdata_off = get32 (buffer + 8);
- rawdata_len = get32 (buffer + 12);
-
- fprintf( fp, "Data-Offset: %lu\n", rawdata_off );
- fprintf( fp, "Data-Length: %lu\n", rawdata_len );
-
- nkeys = get16 (buffer + 16);
- fprintf (fp, "Key-Count: %lu\n", nkeys );
- if (!nkeys)
- fprintf (fp, "[Error: no keys]\n");
- if (nkeys > 1 && type == BLOBTYPE_X509)
- fprintf (fp, "[Error: only one key allowed for X509]\n");
-
- keyinfolen = get16 (buffer + 18 );
- fprintf (fp, "Key-Info-Length: %lu\n", keyinfolen);
- /* fixme: check bounds */
- p = buffer + 20;
- for (n=0; n < nkeys; n++, p += keyinfolen)
- {
- int i;
- ulong kidoff, kflags;
-
- fprintf (fp, "Key-Fpr[%lu]: ", n );
- for (i=0; i < 20; i++ )
- fprintf (fp, "%02X", p[i]);
- kidoff = get32 (p + 20);
- fprintf (fp, "\nKey-Kid-Off[%lu]: %lu\n", n, kidoff );
- fprintf (fp, "Key-Kid[%lu]: ", n );
- /* fixme: check bounds */
- for (i=0; i < 8; i++ )
- fprintf (fp, "%02X", buffer[kidoff+i] );
- kflags = get16 (p + 24 );
- fprintf( fp, "\nKey-Flags[%lu]: %04lX\n", n, kflags);
- }
-
- /* serial number */
- fputs ("Serial-No: ", fp);
- nserial = get16 (p);
- p += 2;
- if (!nserial)
- fputs ("none", fp);
- else
- {
- for (; nserial; nserial--, p++)
- fprintf (fp, "%02X", *p);
- }
- putc ('\n', fp);
-
- /* user IDs */
- nuids = get16 (p);
- fprintf (fp, "Uid-Count: %lu\n", nuids );
- uidinfolen = get16 (p + 2);
- fprintf (fp, "Uid-Info-Length: %lu\n", uidinfolen);
- /* fixme: check bounds */
- p += 4;
- for (n=0; n < nuids; n++, p += uidinfolen)
- {
- ulong uidoff, uidlen, uflags;
-
- uidoff = get32( p );
- uidlen = get32( p+4 );
- if (type == BLOBTYPE_X509 && !n)
- {
- fprintf (fp, "Issuer-Off: %lu\n", uidoff );
- fprintf (fp, "Issuer-Len: %lu\n", uidlen );
- fprintf (fp, "Issuer: \"");
- }
- else if (type == BLOBTYPE_X509 && n == 1)
- {
- fprintf (fp, "Subject-Off: %lu\n", uidoff );
- fprintf (fp, "Subject-Len: %lu\n", uidlen );
- fprintf (fp, "Subject: \"");
- }
- else
- {
- fprintf (fp, "Uid-Off[%lu]: %lu\n", n, uidoff );
- fprintf (fp, "Uid-Len[%lu]: %lu\n", n, uidlen );
- fprintf (fp, "Uid[%lu]: \"", n );
- }
- print_string (fp, buffer+uidoff, uidlen, '\"');
- fputs ("\"\n", fp);
- uflags = get16 (p + 8);
- if (type == BLOBTYPE_X509 && !n)
- {
- fprintf (fp, "Issuer-Flags: %04lX\n", uflags );
- fprintf (fp, "Issuer-Validity: %d\n", p[10] );
- }
- else if (type == BLOBTYPE_X509 && n == 1)
- {
- fprintf (fp, "Subject-Flags: %04lX\n", uflags );
- fprintf (fp, "Subject-Validity: %d\n", p[10] );
- }
- else
- {
- fprintf (fp, "Uid-Flags[%lu]: %04lX\n", n, uflags );
- fprintf (fp, "Uid-Validity[%lu]: %d\n", n, p[10] );
- }
- }
-
- nsigs = get16 (p);
- fprintf (fp, "Sig-Count: %lu\n", nsigs );
- siginfolen = get16 (p + 2);
- fprintf (fp, "Sig-Info-Length: %lu\n", siginfolen );
- /* fixme: check bounds */
- p += 4;
- for (n=0; n < nsigs; n++, p += siginfolen)
- {
- ulong sflags;
-
- sflags = get32 (p);
- fprintf (fp, "Sig-Expire[%lu]: ", n );
- if (!sflags)
- fputs ("[not checked]", fp);
- else if (sflags == 1 )
- fputs ("[missing key]", fp);
- else if (sflags == 2 )
- fputs ("[bad signature]", fp);
- else if (sflags < 0x10000000)
- fprintf (fp, "[bad flag %0lx]", sflags);
- else if (sflags == 0xffffffff)
- fputs ("0", fp );
- else
- fputs ("a time"/*strtimestamp( sflags )*/, fp );
- putc ('\n', fp );
- }
-
- fprintf (fp, "Ownertrust: %d\n", p[0] );
- fprintf (fp, "All-Validity: %d\n", p[1] );
- p += 4;
- n = get32 (p); p += 4;
- fprintf (fp, "Recheck-After: %s\n", /*n? strtimestamp(n) :*/ "0" );
- n = get32 (p ); p += 4;
- fprintf( fp, "Latest-Timestamp: %s\n", "0"/*strtimestamp(n)*/ );
- n = get32 (p ); p += 4;
- fprintf (fp, "Created-At: %s\n", "0"/*strtimestamp(n)*/ );
- n = get32 (p ); p += 4;
- fprintf (fp, "Reserved-Space: %lu\n", n );
-
- /* check that the keyblock is at the correct offset and other bounds */
- /*fprintf (fp, "Blob-Checksum: [MD5-hash]\n");*/
- return 0;
-}
-
-
-
-int
-_keybox_dump_file (const char *filename, FILE *outfp)
-{
- FILE *fp;
- KEYBOXBLOB blob;
- int rc;
- unsigned long count = 0;
-
- if (!filename)
- {
- filename = "-";
- fp = stdin;
- }
- else
- fp = fopen (filename, "rb");
- if (!fp)
- {
- fprintf (outfp, "can't open `%s': %s\n", filename, strerror(errno));
- return KEYBOX_File_Error;
- }
-
- while ( !(rc = _keybox_read_blob (&blob, fp)) )
- {
- fprintf (outfp, "BEGIN-RECORD: %lu\n", count );
- _keybox_dump_blob (blob, outfp);
- _keybox_release_blob (blob);
- fprintf (outfp, "END-RECORD\n");
- count++;
- }
- if (rc == -1)
- rc = 0;
- if (rc)
- fprintf (outfp, "error reading `%s': %s\n", filename,
- rc == KEYBOX_Read_Error? keybox_strerror(rc):strerror (errno));
-
- if (fp != stdin)
- fclose (fp);
- return rc;
-}
diff --git a/kbx/keybox-file.c b/kbx/keybox-file.c
deleted file mode 100644
index bbbf78e3c..000000000
--- a/kbx/keybox-file.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* keybox-file.c - file oeprations
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "keybox-defs.h"
-
-/* Read a block at the current postion and return it in r_blob.
- r_blob may be NULL to simply skip the current block */
-int
-_keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp)
-{
- char *image;
- size_t imagelen = 0;
- int c1, c2, c3, c4, type;
- int rc;
- off_t off;
-
- again:
- *r_blob = NULL;
- off = ftello (fp);
- if (off == (off_t)-1)
- return KEYBOX_Read_Error;
-
- if ((c1 = getc (fp)) == EOF
- || (c2 = getc (fp)) == EOF
- || (c3 = getc (fp)) == EOF
- || (c4 = getc (fp)) == EOF
- || (type = getc (fp)) == EOF)
- {
- if ( c1 == EOF && !ferror (fp) )
- return -1; /* eof */
- return KEYBOX_Read_Error;
- }
-
- imagelen = (c1 << 24) | (c2 << 16) | (c3 << 8 ) | c4;
- if (imagelen > 500000) /* sanity check */
- return KEYBOX_Blob_Too_Large;
-
- if (imagelen < 5)
- return KEYBOX_Blob_Too_Short;
-
- if (!type)
- {
- /* special treatment for empty blobs. */
- if (fseek (fp, imagelen-5, SEEK_CUR))
- return KEYBOX_Read_Error;
- goto again;
- }
-
- image = xtrymalloc (imagelen);
- if (!image)
- return KEYBOX_Out_Of_Core;
-
- image[0] = c1; image[1] = c2; image[2] = c3; image[3] = c4; image[4] = type;
- if (fread (image+5, imagelen-5, 1, fp) != 1)
- {
- xfree (image);
- return KEYBOX_Read_Error;
- }
-
- rc = r_blob? _keybox_new_blob (r_blob, image, imagelen, off) : 0;
- if (rc || !r_blob)
- xfree (image);
- return rc;
-}
-
-
-/* Write the block to the current file position */
-int
-_keybox_write_blob (KEYBOXBLOB blob, FILE *fp)
-{
- const char *image;
- size_t length;
-
- image = _keybox_get_blob_image (blob, &length);
- if (fwrite (image, length, 1, fp) != 1)
- {
- return KEYBOX_Write_Error;
- }
- return 0;
-}
diff --git a/kbx/keybox-init.c b/kbx/keybox-init.c
deleted file mode 100644
index b1d279999..000000000
--- a/kbx/keybox-init.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* keybox-init.c - Initalization of the library
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include "keybox-defs.h"
-
-#define compare_filenames strcmp
-
-static KB_NAME kb_names;
-
-
-/*
- Register a filename for plain keybox files. Returns a pointer to be
- used to create a handles etc or NULL to indicate that it has already
- been registered */
-void *
-keybox_register_file (const char *fname, int secret)
-{
- KB_NAME kr;
-
- for (kr=kb_names; kr; kr = kr->next)
- {
- if ( !compare_filenames (kr->fname, fname) )
- return NULL; /* already registered */
- }
-
- kr = xtrymalloc (sizeof *kr + strlen (fname));
- if (!kr)
- return NULL;
- strcpy (kr->fname, fname);
- kr->secret = !!secret;
- /* kr->lockhd = NULL;*/
- kr->is_locked = 0;
- kr->did_full_scan = 0;
- /* keep a list of all issued pointers */
- kr->next = kb_names;
- kb_names = kr;
-
- /* create the offset table the first time a function here is used */
-/* if (!kb_offtbl) */
-/* kb_offtbl = new_offset_hash_table (); */
-
- return kr;
-}
-
-int
-keybox_is_writable (void *token)
-{
- KB_NAME r = token;
-
- return r? !access (r->fname, W_OK) : 0;
-}
-
-
-
-/* Create a new handle for the resource associated with TOKEN. SECRET
- is just a cross-check.
-
- The returned handle must be released using keybox_release (). */
-KEYBOX_HANDLE
-keybox_new (void *token, int secret)
-{
- KEYBOX_HANDLE hd;
- KB_NAME resource = token;
-
- assert (resource && !resource->secret == !secret);
- hd = xtrycalloc (1, sizeof *hd);
- if (hd)
- {
- hd->kb = resource;
- hd->secret = !!secret;
- }
- return hd;
-}
-
-void
-keybox_release (KEYBOX_HANDLE hd)
-{
- if (!hd)
- return;
- _keybox_release_blob (hd->found.blob);
- xfree (hd->word_match.name);
- xfree (hd->word_match.pattern);
- xfree (hd);
-}
-
-
-const char *
-keybox_get_resource_name (KEYBOX_HANDLE hd)
-{
- if (!hd || !hd->kb)
- return NULL;
- return hd->kb->fname;
-}
-
-int
-keybox_set_ephemeral (KEYBOX_HANDLE hd, int yes)
-{
- if (!hd)
- return KEYBOX_Invalid_Handle;
- hd->ephemeral = yes;
- return 0;
-}
-
diff --git a/kbx/keybox-search.c b/kbx/keybox-search.c
deleted file mode 100644
index 126364f5b..000000000
--- a/kbx/keybox-search.c
+++ /dev/null
@@ -1,810 +0,0 @@
-/* keybox-search.c - Search operations
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include "../jnlib/stringhelp.h" /* ascii_xxxx() */
-#include "keybox-defs.h"
-
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-struct sn_array_s {
- int snlen;
- unsigned char *sn;
-};
-
-
-
-static ulong
-get32 (const byte *buffer)
-{
- ulong a;
- a = *buffer << 24;
- a |= buffer[1] << 16;
- a |= buffer[2] << 8;
- a |= buffer[3];
- return a;
-}
-
-static ulong
-get16 (const byte *buffer)
-{
- ulong a;
- a = *buffer << 8;
- a |= buffer[1];
- return a;
-}
-
-
-
-static int
-blob_get_type (KEYBOXBLOB blob)
-{
- const unsigned char *buffer;
- size_t length;
-
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 40)
- return -1; /* blob too short */
-
- return buffer[4];
-}
-
-static unsigned int
-blob_get_blob_flags (KEYBOXBLOB blob)
-{
- const unsigned char *buffer;
- size_t length;
-
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 8)
- return 0; /* oops */
-
- return get16 (buffer + 6);
-}
-
-
-static int
-blob_cmp_sn (KEYBOXBLOB blob, const unsigned char *sn, int snlen)
-{
- const unsigned char *buffer;
- size_t length;
- size_t pos, off;
- size_t nkeys, keyinfolen;
- size_t nserial;
-
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 40)
- return 0; /* blob too short */
-
- /*keys*/
- nkeys = get16 (buffer + 16);
- keyinfolen = get16 (buffer + 18 );
- if (keyinfolen < 28)
- return 0; /* invalid blob */
- pos = 20 + keyinfolen*nkeys;
- if (pos+2 > length)
- return 0; /* out of bounds */
-
- /*serial*/
- nserial = get16 (buffer+pos);
- off = pos + 2;
- if (off+nserial > length)
- return 0; /* out of bounds */
-
- return nserial == snlen && !memcmp (buffer+off, sn, snlen);
-}
-
-
-static int
-blob_cmp_fpr (KEYBOXBLOB blob, const unsigned char *fpr)
-{
- const unsigned char *buffer;
- size_t length;
- size_t pos, off;
- size_t nkeys, keyinfolen;
- int idx;
-
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 40)
- return 0; /* blob too short */
-
- /*keys*/
- nkeys = get16 (buffer + 16);
- keyinfolen = get16 (buffer + 18 );
- if (keyinfolen < 28)
- return 0; /* invalid blob */
- pos = 20;
- if (pos + keyinfolen*nkeys > length)
- return 0; /* out of bounds */
-
- for (idx=0; idx < nkeys; idx++)
- {
- off = pos + idx*keyinfolen;
- if (!memcmp (buffer + off, fpr, 20))
- return 1; /* found */
- }
- return 0; /* not found */
-}
-
-static int
-blob_cmp_fpr_part (KEYBOXBLOB blob, const unsigned char *fpr,
- int fproff, int fprlen)
-{
- const unsigned char *buffer;
- size_t length;
- size_t pos, off;
- size_t nkeys, keyinfolen;
- int idx;
-
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 40)
- return 0; /* blob too short */
-
- /*keys*/
- nkeys = get16 (buffer + 16);
- keyinfolen = get16 (buffer + 18 );
- if (keyinfolen < 28)
- return 0; /* invalid blob */
- pos = 20;
- if (pos + keyinfolen*nkeys > length)
- return 0; /* out of bounds */
-
- for (idx=0; idx < nkeys; idx++)
- {
- off = pos + idx*keyinfolen;
- if (!memcmp (buffer + off + fproff, fpr, fprlen))
- return 1; /* found */
- }
- return 0; /* not found */
-}
-
-
-static int
-blob_cmp_name (KEYBOXBLOB blob, int idx,
- const char *name, size_t namelen, int substr)
-{
- const unsigned char *buffer;
- size_t length;
- size_t pos, off, len;
- size_t nkeys, keyinfolen;
- size_t nuids, uidinfolen;
- size_t nserial;
-
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 40)
- return 0; /* blob too short */
-
- /*keys*/
- nkeys = get16 (buffer + 16);
- keyinfolen = get16 (buffer + 18 );
- if (keyinfolen < 28)
- return 0; /* invalid blob */
- pos = 20 + keyinfolen*nkeys;
- if (pos+2 > length)
- return 0; /* out of bounds */
-
- /*serial*/
- nserial = get16 (buffer+pos);
- pos += 2 + nserial;
- if (pos+4 > length)
- return 0; /* out of bounds */
-
- /* user ids*/
- nuids = get16 (buffer + pos); pos += 2;
- uidinfolen = get16 (buffer + pos); pos += 2;
- if (uidinfolen < 12 /* should add a: || nuidinfolen > MAX_UIDINFOLEN */)
- return 0; /* invalid blob */
- if (pos + uidinfolen*nuids > length)
- return 0; /* out of bounds */
-
- if (idx < 0)
- { /* compare all names starting with that (negated) index */
- idx = -idx;
-
- for ( ;idx < nuids; idx++)
- {
- size_t mypos = pos;
-
- mypos += idx*uidinfolen;
- off = get32 (buffer+mypos);
- len = get32 (buffer+mypos+4);
- if (off+len > length)
- return 0; /* error: better stop here out of bounds */
- if (len < 2)
- continue; /* empty name or 0 not stored */
- len--;
- if (substr)
- {
- if (ascii_memcasemem (buffer+off, len, name, namelen))
- return 1; /* found */
- }
- else
- {
- if (len == namelen && !memcmp (buffer+off, name, len))
- return 1; /* found */
- }
- }
- return 0; /* not found */
- }
- else
- {
- if (idx > nuids)
- return 0; /* no user ID with that idx */
- pos += idx*uidinfolen;
- off = get32 (buffer+pos);
- len = get32 (buffer+pos+4);
- if (off+len > length)
- return 0; /* out of bounds */
- if (len < 1)
- return 0; /* empty name */
-
- if (substr)
- {
- return !!ascii_memcasemem (buffer+off, len, name, namelen);
- }
- else
- {
- return len == namelen && !memcmp (buffer+off, name, len);
- }
- }
-}
-
-
-/* compare all email addresses of the subject. With SUBSTR given as
- True a substring search is done in the mail address */
-static int
-blob_cmp_mail (KEYBOXBLOB blob, const char *name, size_t namelen, int substr)
-{
- const unsigned char *buffer;
- size_t length;
- size_t pos, off, len;
- size_t nkeys, keyinfolen;
- size_t nuids, uidinfolen;
- size_t nserial;
- int idx;
-
- /* fixme: this code is common to blob_cmp_mail */
- buffer = _keybox_get_blob_image (blob, &length);
- if (length < 40)
- return 0; /* blob too short */
-
- /*keys*/
- nkeys = get16 (buffer + 16);
- keyinfolen = get16 (buffer + 18 );
- if (keyinfolen < 28)
- return 0; /* invalid blob */
- pos = 20 + keyinfolen*nkeys;
- if (pos+2 > length)
- return 0; /* out of bounds */
-
- /*serial*/
- nserial = get16 (buffer+pos);
- pos += 2 + nserial;
- if (pos+4 > length)
- return 0; /* out of bounds */
-
- /* user ids*/
- nuids = get16 (buffer + pos); pos += 2;
- uidinfolen = get16 (buffer + pos); pos += 2;
- if (uidinfolen < 12 /* should add a: || nuidinfolen > MAX_UIDINFOLEN */)
- return 0; /* invalid blob */
- if (pos + uidinfolen*nuids > length)
- return 0; /* out of bounds */
-
- if (namelen < 1)
- return 0;
-
- for (idx=1 ;idx < nuids; idx++)
- {
- size_t mypos = pos;
-
- mypos += idx*uidinfolen;
- off = get32 (buffer+mypos);
- len = get32 (buffer+mypos+4);
- if (off+len > length)
- return 0; /* error: better stop here out of bounds */
- if (len < 2 || buffer[off] != '<')
- continue; /* empty name or trailing 0 not stored */
- len--; /* one back */
- if ( len < 3 || buffer[off+len] != '>')
- continue; /* not a proper email address */
- len--;
- if (substr)
- {
- if (ascii_memcasemem (buffer+off+1, len, name, namelen))
- return 1; /* found */
- }
- else
- {
- if (len == namelen && !ascii_memcasecmp (buffer+off+1, name, len))
- return 1; /* found */
- }
- }
- return 0; /* not found */
-}
-
-
-
-
-/*
- The has_foo functions are used as helpers for search
-*/
-static int
-has_short_kid (KEYBOXBLOB blob, const unsigned char *kid)
-{
- return blob_cmp_fpr_part (blob, kid+4, 16, 4);
-}
-
-static int
-has_long_kid (KEYBOXBLOB blob, const unsigned char *kid)
-{
- return blob_cmp_fpr_part (blob, kid, 12, 8);
-}
-
-static int
-has_fingerprint (KEYBOXBLOB blob, const unsigned char *fpr)
-{
- return blob_cmp_fpr (blob, fpr);
-}
-
-
-static int
-has_issuer (KEYBOXBLOB blob, const char *name)
-{
- size_t namelen;
-
- return_val_if_fail (name, 0);
-
- if (blob_get_type (blob) != BLOBTYPE_X509)
- return 0;
-
- namelen = strlen (name);
- return blob_cmp_name (blob, 0 /* issuer */, name, namelen, 0);
-}
-
-static int
-has_issuer_sn (KEYBOXBLOB blob, const char *name,
- const unsigned char *sn, int snlen)
-{
- size_t namelen;
-
- return_val_if_fail (name, 0);
- return_val_if_fail (sn, 0);
-
- if (blob_get_type (blob) != BLOBTYPE_X509)
- return 0;
-
- namelen = strlen (name);
-
- return (blob_cmp_sn (blob, sn, snlen)
- && blob_cmp_name (blob, 0 /* issuer */, name, namelen, 0));
-}
-
-static int
-has_sn (KEYBOXBLOB blob, const unsigned char *sn, int snlen)
-{
- return_val_if_fail (sn, 0);
-
- if (blob_get_type (blob) != BLOBTYPE_X509)
- return 0;
- return blob_cmp_sn (blob, sn, snlen);
-}
-
-static int
-has_subject (KEYBOXBLOB blob, const char *name)
-{
- size_t namelen;
-
- return_val_if_fail (name, 0);
-
- if (blob_get_type (blob) != BLOBTYPE_X509)
- return 0;
-
- namelen = strlen (name);
- return blob_cmp_name (blob, 1 /* subject */, name, namelen, 0);
-}
-
-static int
-has_subject_or_alt (KEYBOXBLOB blob, const char *name, int substr)
-{
- size_t namelen;
-
- return_val_if_fail (name, 0);
-
- if (blob_get_type (blob) != BLOBTYPE_X509)
- return 0;
-
- namelen = strlen (name);
- return blob_cmp_name (blob, -1 /* all subject names*/, name,
- namelen, substr);
-}
-
-
-static int
-has_mail (KEYBOXBLOB blob, const char *name, int substr)
-{
- size_t namelen;
-
- return_val_if_fail (name, 0);
-
- if (blob_get_type (blob) != BLOBTYPE_X509)
- return 0;
-
- namelen = strlen (name);
- if (namelen && name[namelen-1] == '>')
- namelen--;
- return blob_cmp_mail (blob, name, namelen, substr);
-}
-
-
-static void
-release_sn_array (struct sn_array_s *array, size_t size)
-{
- size_t n;
-
- for (n=0; n < size; n++)
- xfree (array[n].sn);
- xfree (array);
-}
-
-
-/*
-
- The search API
-
-*/
-
-int
-keybox_search_reset (KEYBOX_HANDLE hd)
-{
- if (!hd)
- return KEYBOX_Invalid_Value;
-
- if (hd->found.blob)
- {
- _keybox_release_blob (hd->found.blob);
- hd->found.blob = NULL;
- }
-
- if (hd->fp)
- {
- fclose (hd->fp);
- hd->fp = NULL;
- }
- hd->error = 0;
- hd->eof = 0;
- return 0;
-}
-
-
-/* Note: When in ephemeral mode the search function does visit all
- blobs but in standard mode, blobs flagged as ephemeral are ignored. */
-int
-keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc)
-{
- int rc;
- size_t n;
- int need_words, any_skip;
- KEYBOXBLOB blob = NULL;
- struct sn_array_s *sn_array = NULL;
-
- if (!hd)
- return KEYBOX_Invalid_Value;
-
- /* clear last found result */
- if (hd->found.blob)
- {
- _keybox_release_blob (hd->found.blob);
- hd->found.blob = NULL;
- }
-
- if (hd->error)
- return hd->error; /* still in error state */
- if (hd->eof)
- return -1; /* still EOF */
-
- /* figure out what information we need */
- need_words = any_skip = 0;
- for (n=0; n < ndesc; n++)
- {
- switch (desc[n].mode)
- {
- case KEYDB_SEARCH_MODE_WORDS:
- need_words = 1;
- break;
- case KEYDB_SEARCH_MODE_FIRST:
- /* always restart the search in this mode */
- keybox_search_reset (hd);
- break;
- default:
- break;
- }
- if (desc[n].skipfnc)
- any_skip = 1;
- if (desc[n].snlen == -1 && !sn_array)
- {
- sn_array = xtrycalloc (ndesc, sizeof *sn_array);
- if (!sn_array)
- return (hd->error = KEYBOX_Out_Of_Core);
- }
- }
-
- if (!hd->fp)
- {
- hd->fp = fopen (hd->kb->fname, "rb");
- if (!hd->fp)
- {
- xfree (sn_array);
- return (hd->error = KEYBOX_File_Open_Error);
- }
- }
-
- /* kludge: we need to convert an SN given as hexstring to it's
- binary representation - in some cases we are not able to store it
- in the search descriptor, because due to its usgae it is not
- possible to free allocated memory */
- if (sn_array)
- {
- const unsigned char *s;
- int i, odd;
- size_t snlen;
-
- for (n=0; n < ndesc; n++)
- {
- if (!desc[n].sn)
- ;
- else if (desc[n].snlen == -1)
- {
- unsigned char *sn;
-
- s = desc[n].sn;
- for (i=0; *s && *s != '/'; s++, i++)
- ;
- odd = (i & 1);
- snlen = (i+1)/2;
- sn_array[n].sn = xtrymalloc (snlen);
- if (!sn_array[n].sn)
- {
- release_sn_array (sn_array, n);
- return (hd->error = KEYBOX_Out_Of_Core);
- }
- sn_array[n].snlen = snlen;
- sn = sn_array[n].sn;
- s = desc[n].sn;
- if (odd)
- {
- *sn++ = xtoi_1 (s);
- s++;
- }
- for (; *s && *s != '/'; s += 2)
- *sn++ = xtoi_2 (s);
- }
- else
- {
- const unsigned char *sn;
-
- sn = desc[n].sn;
- snlen = desc[n].snlen;
- sn_array[n].sn = xtrymalloc (snlen);
- if (!sn_array[n].sn)
- {
- release_sn_array (sn_array, n);
- return (hd->error = KEYBOX_Out_Of_Core);
- }
- sn_array[n].snlen = snlen;
- memcpy (sn_array[n].sn, sn, snlen);
- }
- }
- }
-
-
- for (;;)
- {
- unsigned int blobflags;
-
- _keybox_release_blob (blob); blob = NULL;
- rc = _keybox_read_blob (&blob, hd->fp);
- if (rc)
- break;
-
- blobflags = blob_get_blob_flags (blob);
- if (!hd->ephemeral && (blobflags & 2))
- continue; /* not in ephemeral mode but blob is flagged ephemeral */
-
- for (n=0; n < ndesc; n++)
- {
- switch (desc[n].mode)
- {
- case KEYDB_SEARCH_MODE_NONE:
- never_reached ();
- break;
- case KEYDB_SEARCH_MODE_EXACT:
- if (has_subject_or_alt (blob, desc[n].u.name, 0))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_MAIL:
- if (has_mail (blob, desc[n].u.name, 0))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_MAILSUB:
- if (has_mail (blob, desc[n].u.name, 1))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_SUBSTR:
- if (has_subject_or_alt (blob, desc[n].u.name, 1))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_MAILEND:
- case KEYDB_SEARCH_MODE_WORDS:
- never_reached (); /* not yet implemented */
- break;
- case KEYDB_SEARCH_MODE_ISSUER:
- if (has_issuer (blob, desc[n].u.name))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_ISSUER_SN:
- if (has_issuer_sn (blob, desc[n].u.name,
- sn_array? sn_array[n].sn : desc[n].sn,
- sn_array? sn_array[n].snlen : desc[n].snlen))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_SN:
- if (has_sn (blob, sn_array? sn_array[n].sn : desc[n].sn,
- sn_array? sn_array[n].snlen : desc[n].snlen))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_SUBJECT:
- if (has_subject (blob, desc[n].u.name))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_SHORT_KID:
- if (has_short_kid (blob, desc[n].u.kid))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_LONG_KID:
- if (has_long_kid (blob, desc[n].u.kid))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_FPR:
- case KEYDB_SEARCH_MODE_FPR20:
- if (has_fingerprint (blob, desc[n].u.fpr))
- goto found;
- break;
- case KEYDB_SEARCH_MODE_FIRST:
- goto found;
- break;
- case KEYDB_SEARCH_MODE_NEXT:
- goto found;
- break;
- default:
- rc = KEYBOX_Invalid_Value;
- goto found;
- }
- }
- continue;
- found:
- for (n=any_skip?0:ndesc; n < ndesc; n++)
- {
-/* if (desc[n].skipfnc */
-/* && desc[n].skipfnc (desc[n].skipfncvalue, aki)) */
-/* break; */
- }
- if (n == ndesc)
- break; /* got it */
- }
-
- if (!rc)
- {
- hd->found.blob = blob;
- }
- else if (rc == -1)
- {
- _keybox_release_blob (blob);
- hd->eof = 1;
- }
- else
- {
- _keybox_release_blob (blob);
- hd->error = rc;
- }
-
- if (sn_array)
- release_sn_array (sn_array, ndesc);
-
- return rc;
-}
-
-
-
-
-/*
- Functions to return a certificate or a keyblock. To be used after
- a successful search operation.
-*/
-#ifdef KEYBOX_WITH_X509
-/*
- Return the last found cert. Caller must free it.
- */
-int
-keybox_get_cert (KEYBOX_HANDLE hd, KsbaCert *r_cert)
-{
- const unsigned char *buffer;
- size_t length;
- size_t cert_off, cert_len;
- KsbaReader reader = NULL;
- KsbaCert cert = NULL;
- int rc;
-
- if (!hd)
- return KEYBOX_Invalid_Value;
- if (!hd->found.blob)
- return KEYBOX_Nothing_Found;
-
- if (blob_get_type (hd->found.blob) != BLOBTYPE_X509)
- return KEYBOX_Wrong_Blob_Type;
-
- buffer = _keybox_get_blob_image (hd->found.blob, &length);
- if (length < 40)
- return KEYBOX_Blob_Too_Short;
- cert_off = get32 (buffer+8);
- cert_len = get32 (buffer+12);
- if (cert_off+cert_len > length)
- return KEYBOX_Blob_Too_Short;
-
- reader = ksba_reader_new ();
- if (!reader)
- return KEYBOX_Out_Of_Core;
- rc = ksba_reader_set_mem (reader, buffer+cert_off, cert_len);
- if (rc)
- {
- ksba_reader_release (reader);
- /* fixme: need to map the error codes */
- return KEYBOX_General_Error;
- }
-
- cert = ksba_cert_new ();
- if (!cert)
- {
- ksba_reader_release (reader);
- return KEYBOX_Out_Of_Core;
- }
-
- rc = ksba_cert_read_der (cert, reader);
- if (rc)
- {
- ksba_cert_release (cert);
- ksba_reader_release (reader);
- /* fixme: need to map the error codes */
- return KEYBOX_General_Error;
- }
-
- *r_cert = cert;
- ksba_reader_release (reader);
- return 0;
-}
-
-#endif /*KEYBOX_WITH_X509*/
diff --git a/kbx/keybox-update.c b/kbx/keybox-update.c
deleted file mode 100644
index 8b189bbed..000000000
--- a/kbx/keybox-update.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* keybox-update.c - keybox update operations
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "keybox-defs.h"
-
-#define EXTSEP_S "."
-
-
-static int
-create_tmp_file (const char *template,
- char **r_bakfname, char **r_tmpfname, FILE **r_fp)
-{
- char *bakfname, *tmpfname;
-
- *r_bakfname = NULL;
- *r_tmpfname = NULL;
-
-# ifdef USE_ONLY_8DOT3
- /* Here is another Windoze bug?:
- * you cant rename("pubring.kbx.tmp", "pubring.kbx");
- * but rename("pubring.kbx.tmp", "pubring.aaa");
- * works. So we replace .kbx by .bak or .tmp
- */
- if (strlen (template) > 4
- && !strcmp (template+strlen(template)-4, EXTSEP_S "kbx") )
- {
- bakfname = xtrymalloc (strlen (template) + 1);
- if (!bakfname)
- return KEYBOX_Out_Of_Core;
- strcpy (bakfname, template);
- strcpy (bakfname+strlen(template)-4, EXTSEP_S "bak");
-
- tmpfname = xtrymalloc (strlen (template) + 1);
- if (!tmpfname)
- {
- xfree (bakfname);
- return KEYBOX_Out_Of_Core;
- }
- strcpy (tmpfname,template);
- strcpy (tmpfname + strlen (template)-4, EXTSEP_S "tmp");
- }
- else
- { /* file does not end with kbx; hmmm */
- bakfname = xtrymalloc ( strlen (template) + 5);
- if (!bakfname)
- return KEYBOX_Out_Of_Core;
- strcpy (stpcpy (bakfname, template), EXTSEP_S "bak");
-
- tmpfname = xtrymalloc ( strlen (template) + 5);
- if (!tmpfname)
- {
- xfree (bakfname);
- return KEYBOX_Out_Of_Core;
- }
- strcpy (stpcpy (tmpfname, template), EXTSEP_S "tmp");
- }
-# else /* Posix file names */
- bakfname = xtrymalloc (strlen (template) + 2);
- if (!bakfname)
- return KEYBOX_Out_Of_Core;
- strcpy (stpcpy (bakfname,template),"~");
-
- tmpfname = xtrymalloc ( strlen (template) + 5);
- if (!tmpfname)
- {
- xfree (bakfname);
- return KEYBOX_Out_Of_Core;
- }
- strcpy (stpcpy (tmpfname,template), EXTSEP_S "tmp");
-# endif /* Posix filename */
-
- *r_fp = fopen (tmpfname, "wb");
- if (!*r_fp)
- {
- xfree (tmpfname);
- xfree (bakfname);
- return KEYBOX_File_Create_Error;
- }
-
- *r_bakfname = bakfname;
- *r_tmpfname = tmpfname;
- return 0;
-}
-
-
-static int
-rename_tmp_file (const char *bakfname, const char *tmpfname,
- const char *fname, int secret )
-{
- int rc=0;
-
- /* restrict the permissions for secret keyboxs */
-#ifndef HAVE_DOSISH_SYSTEM
-/* if (secret && !opt.preserve_permissions) */
-/* { */
-/* if (chmod (tmpfname, S_IRUSR | S_IWUSR) ) */
-/* { */
-/* log_debug ("chmod of `%s' failed: %s\n", */
-/* tmpfname, strerror(errno) ); */
-/* return KEYBOX_Write_File; */
-/* } */
-/* } */
-#endif
-
- /* fixme: invalidate close caches (not used with stdio)*/
-/* iobuf_ioctl (NULL, 2, 0, (char*)tmpfname ); */
-/* iobuf_ioctl (NULL, 2, 0, (char*)bakfname ); */
-/* iobuf_ioctl (NULL, 2, 0, (char*)fname ); */
-
- /* first make a backup file except for secret keyboxs */
- if (!secret)
- {
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- remove (bakfname);
-#endif
- if (rename (fname, bakfname) )
- {
- return KEYBOX_File_Error;
- }
- }
-
- /* then rename the file */
-#if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- remove (fname);
-#endif
- if (rename (tmpfname, fname) )
- {
- rc = KEYBOX_File_Error;
- if (secret)
- {
-/* log_info ("WARNING: 2 files with confidential" */
-/* " information exists.\n"); */
-/* log_info ("%s is the unchanged one\n", fname ); */
-/* log_info ("%s is the new one\n", tmpfname ); */
-/* log_info ("Please fix this possible security flaw\n"); */
- }
- return rc;
- }
-
- return 0;
-}
-
-
-
-/* Perform insert/delete/update operation.
- mode 1 = insert
- 2 = delete
- 3 = update
-*/
-static int
-blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
- int secret, off_t start_offset, unsigned int n_packets )
-{
- FILE *fp, *newfp;
- int rc=0;
- char *bakfname = NULL;
- char *tmpfname = NULL;
- char buffer[4096];
- int nread, nbytes;
-
- /* Open the source file. Because we do a rename, we have to check the
- permissions of the file */
- if (access (fname, W_OK))
- return KEYBOX_Write_Error;
-
- fp = fopen (fname, "rb");
- if (mode == 1 && !fp && errno == ENOENT)
- { /* insert mode but file does not exist: create a new keybox file */
- newfp = fopen (fname, "wb");
- if (!newfp )
- {
- return KEYBOX_File_Create_Error;
- }
-
- rc = _keybox_write_blob (blob, newfp);
- if (rc)
- {
- return rc;
- }
- if ( fclose (newfp) )
- {
- return KEYBOX_File_Create_Error;
- }
-
-/* if (chmod( fname, S_IRUSR | S_IWUSR )) */
-/* { */
-/* log_debug ("%s: chmod failed: %s\n", fname, strerror(errno) ); */
-/* return KEYBOX_File_Error; */
-/* } */
- return 0; /* ready */
- }
-
- if (!fp)
- {
- rc = KEYBOX_File_Open_Error;
- goto leave;
- }
-
- /* create the new file */
- rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
- if (rc)
- {
- fclose(fp);
- goto leave;
- }
-
- /* prepare for insert */
- if (mode == 1)
- {
- /* copy everything to the new file */
- while ( (nread = fread (buffer, 1, DIM(buffer), fp)) > 0 )
- {
- if (fwrite (buffer, nread, 1, newfp) != 1)
- {
- rc = KEYBOX_Write_Error;
- goto leave;
- }
- }
- if (ferror (fp))
- {
- rc = KEYBOX_Read_Error;
- goto leave;
- }
- }
-
- /* prepare for delete or update */
- if ( mode == 2 || mode == 3 )
- {
- off_t current = 0;
-
- /* copy first part to the new file */
- while ( current < start_offset )
- {
- nbytes = DIM(buffer);
- if (current + nbytes > start_offset)
- nbytes = start_offset - current;
- nread = fread (buffer, 1, nbytes, fp);
- if (!fread)
- break;
- current += nread;
-
- if (fwrite (buffer, nread, 1, newfp) != 1)
- {
- rc = KEYBOX_Write_Error;
- goto leave;
- }
- }
- if (ferror (fp))
- {
- rc = KEYBOX_Read_Error;
- goto leave;
- }
-
- /* skip this blob */
- rc = _keybox_read_blob (NULL, fp);
- if (rc)
- return rc;
- }
-
- /* Do an insert or update */
- if ( mode == 1 || mode == 3 )
- {
- rc = _keybox_write_blob (blob, newfp);
- if (rc)
- return rc;
- }
-
- /* copy the rest of the packet for an delete or update */
- if (mode == 2 || mode == 3)
- {
- while ( (nread = fread (buffer, 1, DIM(buffer), fp)) > 0 )
- {
- if (fwrite (buffer, nread, 1, newfp) != 1)
- {
- rc = KEYBOX_Write_Error;
- goto leave;
- }
- }
- if (ferror (fp))
- {
- rc = KEYBOX_Read_Error;
- goto leave;
- }
- }
-
- /* close both files */
- if (fclose(fp))
- {
- rc = KEYBOX_File_Close_Error;
- fclose (newfp);
- goto leave;
- }
- if (fclose(newfp))
- {
- rc = KEYBOX_File_Close_Error;
- goto leave;
- }
-
- rc = rename_tmp_file (bakfname, tmpfname, fname, secret);
-
- leave:
- xfree(bakfname);
- xfree(tmpfname);
- return rc;
-}
-
-
-
-
-#ifdef KEYBOX_WITH_X509
-int
-keybox_insert_cert (KEYBOX_HANDLE hd, KsbaCert cert,
- unsigned char *sha1_digest)
-{
- int rc;
- const char *fname;
- KEYBOXBLOB blob;
-
- if (!hd)
- return KEYBOX_Invalid_Handle;
- if (!hd->kb)
- return KEYBOX_Invalid_Handle;
- fname = hd->kb->fname;
- if (!fname)
- return KEYBOX_Invalid_Handle;
-
- /* close this one otherwise we will mess up the position for a next
- search. Fixme: it would be better to adjust the position after
- the write opertions. */
- if (hd->fp)
- {
- fclose (hd->fp);
- hd->fp = NULL;
- }
-
- rc = _keybox_create_x509_blob (&blob, cert, sha1_digest, hd->ephemeral);
- if (!rc)
- {
- rc = blob_filecopy (1, fname, blob, hd->secret, 0, 0 );
- _keybox_release_blob (blob);
- /* if (!rc && !hd->secret && kb_offtbl) */
- /* { */
- /* update_offset_hash_table_from_kb (kb_offtbl, kb, 0); */
- /* } */
- }
- return rc;
-}
-
-int
-keybox_update_cert (KEYBOX_HANDLE hd, KsbaCert cert,
- unsigned char *sha1_digest)
-{
- return -1;
-}
-
-
-#endif /*KEYBOX_WITH_X509*/
-
-
-int
-keybox_delete (KEYBOX_HANDLE hd)
-{
- off_t off;
- const char *fname;
- FILE *fp;
- int rc;
-
- if (!hd)
- return KEYBOX_Invalid_Value;
- if (!hd->found.blob)
- return KEYBOX_Nothing_Found;
- if (!hd->kb)
- return KEYBOX_Invalid_Handle;
- fname = hd->kb->fname;
- if (!fname)
- return KEYBOX_Invalid_Handle;
-
- off = _keybox_get_blob_fileoffset (hd->found.blob);
- if (off == (off_t)-1)
- return KEYBOX_General_Error;
- off += 4;
-
- if (hd->fp)
- {
- fclose (hd->fp);
- hd->fp = NULL;
- }
-
- fp = fopen (hd->kb->fname, "r+b");
- if (!fp)
- return KEYBOX_File_Open_Error;
-
- if (fseeko (fp, off, SEEK_SET))
- rc = KEYBOX_Write_Error;
- else if (putc (0, fp) == EOF)
- rc = KEYBOX_Write_Error;
- else
- rc = 0;
-
- if (fclose (fp))
- {
- if (!rc)
- rc = KEYBOX_File_Close_Error;
- }
-
- return rc;
-}
-
-
diff --git a/kbx/keybox.h b/kbx/keybox.h
deleted file mode 100644
index a763ec837..000000000
--- a/kbx/keybox.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* keybox.h - Keybox operations
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 KEYBOX_H
-#define KEYBOX_H 1
-#ifdef __cplusplus
-extern "C" {
-#if 0
- }
-#endif
-#endif
-
-#include "keybox-search-desc.h"
-
-#define KEYBOX_WITH_OPENPGP 1
-#define KEYBOX_WITH_X509 1
-
-
-#ifdef KEYBOX_WITH_OPENPGP
-# undef KEYBOX_WITH_OPENPGP
-/*#include <lib-to-handle-gpg-data-structs.h>*/
-#endif
-
-#ifdef KEYBOX_WITH_X509
-# include <ksba.h>
-#endif
-
-
-typedef enum {
- KEYBOX_No_Error = 0,
- KEYBOX_General_Error = 1,
- KEYBOX_Out_Of_Core = 2,
- KEYBOX_Invalid_Value = 3,
- KEYBOX_Timeout = 4,
- KEYBOX_Read_Error = 5,
- KEYBOX_Write_Error = 6,
- KEYBOX_File_Error = 7,
- KEYBOX_Blob_Too_Short = 8,
- KEYBOX_Blob_Too_Large = 9,
- KEYBOX_Invalid_Handle = 10,
- KEYBOX_File_Create_Error = 11,
- KEYBOX_File_Open_Error = 12,
- KEYBOX_File_Close_Error = 13,
- KEYBOX_Nothing_Found = 14,
- KEYBOX_Wrong_Blob_Type = 15,
- KEYBOX_Missing_Value = 16,
-} KeyboxError;
-
-
-
-typedef struct keybox_handle *KEYBOX_HANDLE;
-
-
-/*-- keybox-init.c --*/
-void *keybox_register_file (const char *fname, int secret);
-int keybox_is_writable (void *token);
-
-KEYBOX_HANDLE keybox_new (void *token, int secret);
-void keybox_release (KEYBOX_HANDLE hd);
-const char *keybox_get_resource_name (KEYBOX_HANDLE hd);
-int keybox_set_ephemeral (KEYBOX_HANDLE hd, int yes);
-
-
-/*-- keybox-search.c --*/
-#ifdef KEYBOX_WITH_X509
-int keybox_get_cert (KEYBOX_HANDLE hd, KsbaCert *ret_cert);
-#endif /*KEYBOX_WITH_X509*/
-
-int keybox_search_reset (KEYBOX_HANDLE hd);
-int keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc);
-
-
-/*-- keybox-update.c --*/
-#ifdef KEYBOX_WITH_X509
-int keybox_insert_cert (KEYBOX_HANDLE hd, KsbaCert cert,
- unsigned char *sha1_digest);
-int keybox_update_cert (KEYBOX_HANDLE hd, KsbaCert cert,
- unsigned char *sha1_digest);
-#endif /*KEYBOX_WITH_X509*/
-
-int keybox_delete (KEYBOX_HANDLE hd);
-
-
-/*-- --*/
-
-#if 0
-int keybox_lock (KEYBOX_HANDLE hd, int yes);
-int keybox_get_keyblock (KEYBOX_HANDLE hd, KBNODE *ret_kb);
-int keybox_locate_writable (KEYBOX_HANDLE hd);
-int keybox_search_reset (KEYBOX_HANDLE hd);
-int keybox_search (KEYBOX_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc);
-int keybox_rebuild_cache (void *);
-#endif
-
-
-/*-- keybox-util.c --*/
-void keybox_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
- void *(*new_realloc_func)(void *p, size_t n),
- void (*new_free_func)(void*) );
-
-/*-- keybox-errors.c (built) --*/
-const char *keybox_strerror (KeyboxError err);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*KEYBOX_H*/
diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog
deleted file mode 100644
index a24a6e7ef..000000000
--- a/keyserver/ChangeLog
+++ /dev/null
@@ -1,291 +0,0 @@
-2002-10-14 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (write_quoted): Use %-encoding instead of
- \-encoding.
- (parse_hkp_index): Use new keyserver key listing format, and add
- support for disabled keys via include-disabled.
-
- * gpgkeys_ldap.c (get_key): Don't print keysize unless it's >0.
- (printquoted): Use %-encoding instead of \-encoding.
- (search_key): Use new keyserver key listing format.
-
-2002-10-08 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (search_key, main): Make sure LDAP values are
- freed in case of error.
-
- * gpgkeys_ldap.c (fail_all): New function to unwind a keylist and
- error each item.
- (main): Call fail_all from here, as needed. Also add a NO_MEMORY
- error in an appropriate place and fix error return code.
- (ldap_err_to_gpg_err): Add KEYSERVER_UNREACHABLE.
-
- * gpgkeys_hkp.c (fail_all): New function to unwind a keylist and
- error each item.
- (main): Call fail_all from here. Also add a NO_MEMORY error in an
- appropriate place.
- (get_key): Use new UNREACHABLE error for network errors.
-
-2002-09-26 Werner Koch <wk@gnupg.org>
-
- * gpgkeys_ldap.c (send_key): Removed non-constant initializers.
-
-2002-09-24 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (ldap_err_to_gpg_err, ldap_to_gpg_err, send_key,
- get_key, search_key, main): Some minor error reporting
- enhancements for use with GPA (show reasons for KEY FAILED).
-
- * gpgkeys_hkp.c (send_key, get_key, search_key, main): Some minor
- error reporting enhancements for use with GPA (show reasons for
- KEY FAILED).
-
-2002-09-20 Werner Koch <wk@gnupg.org>
-
- * gpgkeys_hkp.c (handle_old_hkp_index): s/input/inp/ to avoid
- shadowing warning.
-
-2002-09-19 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (get_key, handle_old_hkp_index, search_key):
- Properly handle line truncation.
-
-2002-09-16 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_mailto.in: Add quasi-RFC-2368 mailto:email@addr?from=
- syntax so people can set their own email address to respond to.
-
- * gpgkeys_hkp.c (get_key): Properly respond with KEY FAILED (to
- gpg) and "key not found" (to user) on failure.
-
-2002-09-13 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c: (search_key, handle_old_hkp_index): Try and
- request a machine-readable key index. If the server supports
- this, pass it through. If the server does not support it, parse
- the "index" page.
-
-2002-09-12 Stefan Bellon <sbellon@sbellon.de>
-
- * gpgkeys_hkp.c: Tidied up RISC OS initializations.
-
-2002-09-12 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (main): Remove warning - this is no longer
- experimental code.
-
-2002-09-09 Werner Koch <wk@gnupg.org>
-
- * gpgkeys_hkp.c (send_key, get_key, search_key): Check return
- value of malloc.
- (dehtmlize): Use ascii_tolower to protect against weird locales.
- Cast the argument for isspace for the sake of broken HP/UXes.
- (search_key): Check return value of realloc.
-
-2002-09-09 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (get_key): Some compilers (RISC OS, HPUX c89)
- don't like using variables as array initializers.
-
- * gpgkeys_hkp.c (send_key): Use CRLF in headers.
-
-2002-08-28 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (parse_hkp_index): Use same types on all
- platforms. This was probably leftover from earlier code where the
- typing mattered.
-
- * gpgkeys_hkp.c: Overall cleanup from iobuf conversion. Be
- consistent in m_alloc and malloc usage. Remove include-disabled
- (meaningless on HKP). RISC OS tweak.
-
-2002-08-27 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c, Makefile.am: Convert over to using iobufs.
-
- * gpgkeys_hkp.c (http_get, http_post): Use CRLF for line endings.
-
- * gpgkeys_hkp.c: Include util.h on RISC OS as per Stefan. Include
- a replacement for hstrerror() for those platforms (such as RISC
- OS) that don't have it.
-
-2002-08-26 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: May as well include gpgkeys_hkp.c in the
- distribution now. It works well enough without proxies, and isn't
- built by default. It would be good to get some test experience
- with it.
-
- * gpgkeys_hkp.c (main): Don't warn about include-subkeys - it
- isn't unsupported, it's actually non-meaningful in the context of
- HKP (yet).
-
- * gpgkeys_hkp.c (parse_hkp_index, dehtmlize): Move HTML
- functionality into new "dehtmlize" function. Remove HTML before
- trying to parse each line from the keyserver. If the keyserver
- provides key type information in the listing, use it. (Copy over
- from g10/hkp.c).
-
-2002-08-19 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (get_key, parse_hkp_index): Bring over latest code
- from g10/hkp.c.
-
- * gpgkeys_ldap.c (get_key): Fix cosmetic URL display problem
- (extra ":" at the end).
-
-2002-08-03 Stefan Bellon <sbellon@sbellon.de>
-
- * gpgkeys_ldap.c: Tidied up RISC OS initializations.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c: "Warning" -> "WARNING"
-
-2002-07-24 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: Install keyserver helpers in @GNUPG_LIBEXECDIR@
-
-2002-07-15 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (send_key, get_key, main): Consult the server
- version string to determine whether to use pgpKey or pgpKeyV2.
-
-2002-07-09 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_mailto.in: Use new OPAQUE tag for non net-path URIs.
- Fail more elegantly if there is no email address to send to. Show
- the GnuPG version in the message body.
-
-2002-07-04 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (get_key), gpgkeys_hkp.c (get_key): Display
- keyserver URI as a URI, but only if verbose.
-
-2002-07-01 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (parse_hkp_index): Error if the keyserver returns
- an unparseable HKP response.
-
- * gpgkeys_hkp.c (main): Warn on honor-http-proxy,
- broken-http-proxy, and include-subkeys (not supported yet).
-
- * gpgkeys_ldap.c (main), gpgkeys_hkp.c (http_connect, main): Fix
- some shadowing warnings.
-
-2002-06-11 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: Don't hard-code the LDAP libraries - get them from
- LDAPLIBS via configure. Also, gpgkeys_hkp is a program, not a
- script.
-
-2002-06-10 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (include_subkeys): Default "include-subkeys" to
- off, since GnuPG now defaults it to on.
-
-2002-06-06 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_hkp.c (parse_hkp_index): Type tweaks.
-
- * gpgkeys_hkp.c (main): Add experimental code warning.
-
-2002-06-05 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am, gpgkeys_hkp.c (new): Experimental HKP keyserver
- interface.
-
-2002-05-08 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c: Include <lber.h> if we absolutely must. This
- helps when compiling against a very old OpenLDAP.
-
-2002-04-29 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_mailto.in: Properly handle key requests in full
- fingerprint form.
-
-2002-03-29 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (printquoted): Quote backslashes within keyserver
- search responses.
-
-2002-02-25 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap (get_key): LDAP keyservers do not support v3
- fingerprints, so error out if someone tries. Actually, they don't
- support any fingerprints, but at least we can calculate a keyid
- from a v4 fingerprint.
-
-2002-02-23 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap: Clarify the notion of a partial failure. This is
- possible if more than one key is being handled in a batch, and one
- fails while the other succeeds. Note that a search that comes up
- with no results is not a failure - that is a valid response of "no
- answer".
-
- * gpgkeys_ldap.c (get_key): Allow GnuPG to send us full v4
- fingerprints, long key ids, or short key ids while fetching.
- Since the LDAP server doesn't actually handle fingerprints, chop
- them down to long key ids for actual use.
-
- * gpgkeys_ldap.c (main, get_key): When searching for a keyid,
- search for subkeys as well as primary keys. This is mostly
- significant when automatically fetching the key based on the id in
- a header (i.e. "signature made by...."). "no-include-subkeys"
- disables.
-
-2002-02-14 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c: Fix compiler warning.
-
- * gpgkeys_ldap.c: Be much more robust with mangled input files.
-
-2001-12-28 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_mailto.in: Use the new OUTOFBAND indicator so gpg knows
- not to try and import anything. Also turn on perl -w for
- warnings.
-
- * gpgkeys_ldap.c (main): If we're using temp files (rather than
- stdin/stdout), make sure the file is closed when we're done.
-
-2001-12-20 David Shaw <dshaw@jabberwocky.com>
-
- * Properly free the LDAP response when we're done with it.
-
- * Now that we handle multiple keys, we must remove duplicates as
- the LDAP keyserver returns keys with multiple user IDs multiple
- times.
-
- * Properly handle multiple keys with the same key ID (it's really
- rare, so fetch "0xDEADBEEF" to test this).
-
-2001-12-17 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c, gpgkeys_mailto.in: Fix GNU capitalization
- issues. Prefix log messages with "gpgkeys" to clarify which
- program is generating them.
-
-2001-12-14 David Shaw <dshaw@jabberwocky.com>
-
- * gpgkeys_ldap.c (search_key): Use unsigned int rather than uint
- for portability.
-
-2001-12-04 David Shaw <dshaw@jabberwocky.com>
-
- * Initial version of gpgkeys_ldap (LDAP keyserver helper) and
- gpgkeys_mailto (email keyserver helper)
-
-
- Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
\ No newline at end of file
diff --git a/keyserver/Makefile.am b/keyserver/Makefile.am
deleted file mode 100644
index 6ef15d801..000000000
--- a/keyserver/Makefile.am
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-INCLUDES = -I$(top_srcdir)/include
-EXTRA_PROGRAMS = gpgkeys_ldap gpgkeys_hkp
-EXTRA_SCRIPTS = gpgkeys_mailto
-libexecdir = @GNUPG_LIBEXECDIR@
-
-# We don't need the libs the regular GPG binaries do
-LIBS=
-
-libexec_PROGRAMS = @GPGKEYS_LDAP@ @GPGKEYS_HKP@
-libexec_SCRIPTS = @GPGKEYS_MAILTO@
-noinst_SCRIPTS = gpgkeys_test
-
-gpgkeys_ldap_LDADD = @LDAPLIBS@ @NETLIBS@
-gpgkeys_hkp_LDADD = ../util/libutil.a @NETLIBS@
diff --git a/keyserver/gpgkeys_hkp.c b/keyserver/gpgkeys_hkp.c
deleted file mode 100644
index f5a0ed0ca..000000000
--- a/keyserver/gpgkeys_hkp.c
+++ /dev/null
@@ -1,1062 +0,0 @@
-/* gpgkeys_hkp.c - talk to an HKP keyserver
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#define INCLUDED_BY_MAIN_MODULE 1
-#include "util.h"
-#include "http.h"
-#include "keyserver.h"
-
-#define GET 0
-#define SEND 1
-#define SEARCH 2
-#define MAX_LINE 80
-
-int verbose=0,include_revoked=0,include_disabled=0;
-unsigned int http_flags=0;
-char host[80]={'\0'},port[10]={'\0'};
-FILE *input=NULL,*output=NULL,*console=NULL;
-
-struct keylist
-{
- char str[MAX_LINE];
- struct keylist *next;
-};
-
-#ifdef __riscos__
-RISCOS_GLOBAL_STATICS("HKP Keyfetcher Heap")
-#endif /* __riscos__ */
-
-int
-urlencode_filter( void *opaque, int control,
- IOBUF a, byte *buf, size_t *ret_len)
-{
- size_t size = *ret_len;
- int rc=0;
-
- if( control == IOBUFCTRL_FLUSH ) {
- const byte *p;
- for(p=buf; size; p++, size-- ) {
- if( isalnum(*p) || *p == '-' )
- iobuf_put( a, *p );
- else if( *p == ' ' )
- iobuf_put( a, '+' );
- else {
- char numbuf[5];
- sprintf(numbuf, "%%%02X", *p );
- iobuf_writestr(a, numbuf );
- }
- }
- }
- else if( control == IOBUFCTRL_DESC )
- *(char**)buf = "urlencode_filter";
- return rc;
-}
-
-int
-send_key(int *eof)
-{
- int rc,gotit=0,ret=KEYSERVER_INTERNAL_ERROR;
- char keyid[17];
- char *request;
- struct http_context hd;
- unsigned int status;
- IOBUF temp = iobuf_temp();
- char line[MAX_LINE];
-
- request=malloc(strlen(host)+100);
- if(!request)
- {
- fprintf(console,"gpgkeys: out of memory\n");
- return KEYSERVER_NO_MEMORY;
- }
-
- iobuf_push_filter(temp,urlencode_filter,NULL);
-
- /* Read and throw away input until we see the BEGIN */
-
- while(fgets(line,MAX_LINE,input)!=NULL)
- if(sscanf(line,"KEY %16s BEGIN\n",keyid)==1)
- {
- gotit=1;
- break;
- }
-
- if(!gotit)
- {
- /* i.e. eof before the KEY BEGIN was found. This isn't an
- error. */
- *eof=1;
- ret=KEYSERVER_OK;
- goto fail;
- }
-
- gotit=0;
-
- /* Now slurp up everything until we see the END */
-
- while(fgets(line,MAX_LINE,input))
- if(sscanf(line,"KEY %16s END\n",keyid)==1)
- {
- gotit=1;
- break;
- }
- else
- if(iobuf_writestr(temp,line))
- {
- fprintf(console,"gpgkeys: internal iobuf error\n");
- goto fail;
- }
-
- if(!gotit)
- {
- fprintf(console,"gpgkeys: no KEY %s END found\n",keyid);
- *eof=1;
- ret=KEYSERVER_KEY_INCOMPLETE;
- goto fail;
- }
-
- iobuf_flush_temp(temp);
-
- sprintf(request,"x-hkp://%s%s%s/pks/add",
- host,port[0]?":":"",port[0]?port:"");
-
- if(verbose>2)
- fprintf(console,"gpgkeys: HTTP URL is \"%s\"\n",request);
-
- rc=http_open(&hd,HTTP_REQ_POST,request,http_flags);
- if(rc)
- {
- fprintf(console,"gpgkeys: unable to connect to `%s'\n",host);
- goto fail;
- }
-
- sprintf(request,"Content-Length: %u\r\n",
- (unsigned)iobuf_get_temp_length(temp)+9);
- iobuf_writestr(hd.fp_write,request);
-
- http_start_data(&hd);
-
- iobuf_writestr(hd.fp_write,"keytext=");
- iobuf_write(hd.fp_write,
- iobuf_get_temp_buffer(temp),iobuf_get_temp_length(temp));
- iobuf_put(hd.fp_write,'\n');
-
- rc=http_wait_response(&hd,&status);
- if(rc)
- {
- fprintf(console,"gpgkeys: error sending to `%s': %s\n",
- host,g10_errstr(rc));
- goto fail;
- }
-
- if((status/100)!=2)
- {
- fprintf(console,"gpgkeys: remote server returned error %d\n",status);
- fprintf(output,"KEY %s FAILED %d\n",keyid,ret);
- goto fail;
- }
-
- fprintf(output,"KEY %s SENT\n",keyid);
-
- ret=KEYSERVER_OK;
-
- fail:
- free(request);
- iobuf_close(temp);
- http_close(&hd);
-
- return ret;
-}
-
-int
-get_key(char *getkey)
-{
- int rc,gotit=0;
- char search[29];
- char *request;
- struct http_context hd;
-
- /* Build the search string. HKP only uses the short key IDs. */
-
- if(strncmp(getkey,"0x",2)==0)
- getkey+=2;
-
- if(strlen(getkey)==32)
- {
- fprintf(console,
- "gpgkeys: HKP keyservers do not support v3 fingerprints\n");
- fprintf(output,"KEY 0x%s BEGIN\n",getkey);
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_NOT_SUPPORTED);
- return KEYSERVER_NOT_SUPPORTED;
- }
-
- if(strlen(getkey)>8)
- {
- char *offset=&getkey[strlen(getkey)-8];
-
- /* fingerprint or long key id. Take the last 8 characters and
- treat it like a short key id */
-
- sprintf(search,"0x%.8s",offset);
- }
- else
- {
- /* short key id */
-
- sprintf(search,"0x%.8s",getkey);
- }
-
- fprintf(output,"KEY 0x%s BEGIN\n",getkey);
-
- if(verbose)
- fprintf(console,"gpgkeys: requesting key 0x%s from hkp://%s%s%s\n",
- getkey,host,port[0]?":":"",port[0]?port:"");
-
- request=malloc(strlen(host)+100);
- if(!request)
- {
- fprintf(console,"gpgkeys: out of memory\n");
- return KEYSERVER_NO_MEMORY;
- }
-
- sprintf(request,"x-hkp://%s%s%s/pks/lookup?op=get&search=%s",
- host,port[0]?":":"",port[0]?port:"", search);
-
- if(verbose>2)
- fprintf(console,"gpgkeys: HTTP URL is \"%s\"\n",request);
-
- rc=http_open_document(&hd,request,http_flags);
- if(rc!=0)
- {
- fprintf(console,"gpgkeys: HKP fetch error: %s\n",
- rc==G10ERR_NETWORK?strerror(errno):g10_errstr(rc));
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,
- rc==G10ERR_NETWORK?KEYSERVER_UNREACHABLE:KEYSERVER_INTERNAL_ERROR);
- }
- else
- {
- unsigned int maxlen=1024,buflen;
- byte *line=NULL;
-
- while(iobuf_read_line(hd.fp_read,&line,&buflen,&maxlen))
- {
- maxlen=1024;
-
- if(gotit)
- {
- fprintf(output,line);
- if(strcmp(line,"-----END PGP PUBLIC KEY BLOCK-----\n")==0)
- break;
- }
- else
- if(strcmp(line,"-----BEGIN PGP PUBLIC KEY BLOCK-----\n")==0)
- {
- fprintf(output,line);
- gotit=1;
- }
- }
-
- if(gotit)
- fprintf(output,"KEY 0x%s END\n",getkey);
- else
- {
- fprintf(console,"gpgkeys: key %s not found on keyserver\n",getkey);
- fprintf(output,"KEY 0x%s FAILED %d\n",
- getkey,KEYSERVER_KEY_NOT_FOUND);
- }
-
- m_free(line);
- }
-
- free(request);
-
- return KEYSERVER_OK;
-}
-
-/* Remove anything <between brackets> and de-urlencode in place. Note
- that this requires all brackets to be closed on the same line. It
- also means that the result is never larger than the input. */
-void
-dehtmlize(char *line)
-{
- int parsedindex=0;
- char *parsed=line;
-
- while(*line!='\0')
- {
- switch(*line)
- {
- case '<':
- while(*line!='>' && *line!='\0')
- line++;
-
- if(*line!='\0')
- line++;
- break;
-
- case '&':
- if((*(line+1)!='\0' && ascii_tolower(*(line+1))=='l') &&
- (*(line+2)!='\0' && ascii_tolower(*(line+2))=='t') &&
- (*(line+3)!='\0' && *(line+3)==';'))
- {
- parsed[parsedindex++]='<';
- line+=4;
- break;
- }
- else if((*(line+1)!='\0' && ascii_tolower(*(line+1))=='g') &&
- (*(line+2)!='\0' && ascii_tolower(*(line+2))=='t') &&
- (*(line+3)!='\0' && *(line+3)==';'))
- {
- parsed[parsedindex++]='>';
- line+=4;
- break;
- }
- else if((*(line+1)!='\0' && ascii_tolower(*(line+1))=='a') &&
- (*(line+2)!='\0' && ascii_tolower(*(line+2))=='m') &&
- (*(line+3)!='\0' && ascii_tolower(*(line+3))=='p') &&
- (*(line+4)!='\0' && *(line+4)==';'))
- {
- parsed[parsedindex++]='&';
- line+=5;
- break;
- }
-
- default:
- parsed[parsedindex++]=*line;
- line++;
- break;
- }
- }
-
- parsed[parsedindex]='\0';
-
- /* Chop off any trailing whitespace. Note that the HKP servers have
- \r\n as line endings, and the NAI HKP servers have just \n. */
-
- if(parsedindex>0)
- {
- parsedindex--;
- while(isspace(((unsigned char *)parsed)[parsedindex]))
- {
- parsed[parsedindex]='\0';
- parsedindex--;
- }
- }
-}
-
-int
-write_quoted(IOBUF a, const char *buf, char delim)
-{
- char quoted[5];
-
- sprintf(quoted,"%%%02X",delim);
-
- while(*buf)
- {
- if(*buf==delim)
- {
- if(iobuf_writestr(a,quoted))
- return -1;
- }
- else if(*buf=='%')
- {
- if(iobuf_writestr(a,"%25"))
- return -1;
- }
- else
- {
- if(iobuf_writebyte(a,*buf))
- return -1;
- }
-
- buf++;
- }
-
- return 0;
-}
-
-/* pub 2048/<a href="/pks/lookup?op=get&search=0x3CB3B415">3CB3B415</a> 1998/04/03 David M. Shaw &lt;<a href="/pks/lookup?op=get&search=0x3CB3B415">dshaw@jabberwocky.com</a>&gt; */
-
-/* Luckily enough, both the HKP server and NAI HKP interface to their
- LDAP server are close enough in output so the same function can
- parse them both. */
-
-int
-parse_hkp_index(IOBUF buffer,char *line)
-{
- int ret=0;
-
- /* printf("Open %d, LINE: \"%s\"\n",open,line); */
-
- dehtmlize(line);
-
- /* printf("Now open %d, LINE: \"%s\"\n",open,line); */
-
- if(line[0]=='\0')
- return 0;
- else if(ascii_strncasecmp(line,"pub",3)==0)
- {
- char *tok,*keyid,*uid=NULL,number[15];
- int bits=0,type=0,disabled=0,revoked=0;
- u32 createtime=0;
-
- line+=3;
-
- if(*line=='-')
- {
- disabled=1;
- if(!include_disabled)
- return 0;
- }
-
- line++;
-
- tok=strsep(&line,"/");
- if(tok==NULL)
- return ret;
-
- if(tok[strlen(tok)-1]=='R')
- type=1;
- else if(tok[strlen(tok)-1]=='D')
- type=17;
-
- bits=atoi(tok);
-
- keyid=strsep(&line," ");
-
- tok=strsep(&line," ");
- if(tok!=NULL)
- {
- char *temp=tok;
-
- /* The date parser wants '-' instead of '/', so... */
- while(*temp!='\0')
- {
- if(*temp=='/')
- *temp='-';
-
- temp++;
- }
-
- createtime=scan_isodatestr(tok);
- }
-
- if(line!=NULL)
- {
- while(*line==' ' && *line!='\0')
- line++;
-
- if(*line!='\0')
- {
- if(strncmp(line,"*** KEY REVOKED ***",19)==0)
- {
- revoked=1;
- if(!include_revoked)
- return 0;
- }
- else
- uid=line;
- }
- }
-
- if(keyid)
- {
- iobuf_writestr(buffer,"pub:");
-
- write_quoted(buffer,keyid,':');
-
- iobuf_writestr(buffer,":");
-
- if(type)
- {
- sprintf(number,"%d",type);
- write_quoted(buffer,number,':');
- }
-
- iobuf_writestr(buffer,":");
-
- if(bits)
- {
- sprintf(number,"%d",bits);
- write_quoted(buffer,number,':');
- }
-
- iobuf_writestr(buffer,":");
-
- if(createtime)
- {
- sprintf(number,"%d",createtime);
- write_quoted(buffer,number,':');
- }
-
- iobuf_writestr(buffer,"::");
-
- if(revoked)
- write_quoted(buffer,"r",':');
-
- if(disabled)
- write_quoted(buffer,"d",':');
-
- if(uid)
- {
- iobuf_writestr(buffer,"\nuid:");
- write_quoted(buffer,uid,':');
- }
-
- iobuf_writestr(buffer,"\n");
-
- ret=1;
- }
- }
- else if(ascii_strncasecmp(line," ",3)==0)
- {
- while(*line==' ' && *line!='\0')
- line++;
-
- if(*line!='\0')
- {
- iobuf_writestr(buffer,"uid:");
- write_quoted(buffer,line,':');
- iobuf_writestr(buffer,"\n");
- }
- }
-
-#if 0
- else if(open)
- {
- /* Try and catch some bastardization of HKP. If we don't have
- certain unchanging landmarks, we can't reliably parse the
- response. This only complains about problems within the key
- section itself. Headers and footers should not matter. */
-
- fprintf(console,"gpgkeys: this keyserver does not support searching\n");
- ret=-1;
- }
-#endif
-
- return ret;
-}
-
-void
-handle_old_hkp_index(IOBUF inp)
-{
- int ret,rc,count=0;
- unsigned int buflen;
- byte *line=NULL;
- IOBUF buffer=iobuf_temp();
-
- do
- {
- unsigned int maxlen=1024;
-
- /* This is a judgement call. Is it better to slurp up all the
- results before prompting the user? On the one hand, it
- probably makes the keyserver happier to not be blocked on
- sending for a long time while the user picks a key. On the
- other hand, it might be nice for the server to be able to
- stop sending before a large search result page is
- complete. */
-
- rc=iobuf_read_line(inp,&line,&buflen,&maxlen);
-
- ret=parse_hkp_index(buffer,line);
- if(ret==-1)
- break;
-
- if(rc!=0)
- count+=ret;
- }
- while(rc!=0);
-
- m_free(line);
-
- if(ret>-1)
- fprintf(output,"info:1:%d\n%s",count,iobuf_get_temp_buffer(buffer));
-
- iobuf_close(buffer);
-}
-
-int
-search_key(char *searchkey)
-{
- int max=0,len=0,ret=KEYSERVER_INTERNAL_ERROR,rc;
- struct http_context hd;
- char *search=NULL,*request=NULL,*skey=searchkey;
-
- fprintf(output,"SEARCH %s BEGIN\n",searchkey);
-
- /* Build the search string. It's going to need url-encoding. */
-
- while(*skey!='\0')
- {
- if(max-len<3)
- {
- max+=100;
- search=realloc(search,max+1); /* Note +1 for \0 */
- if (!search)
- {
- fprintf(console,"gpgkeys: out of memory\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
- }
-
- if(isalnum(*skey) || *skey=='-')
- search[len++]=*skey;
- else if(*skey==' ')
- search[len++]='+';
- else
- {
- sprintf(&search[len],"%%%02X",*skey);
- len+=3;
- }
-
- skey++;
- }
-
- search[len]='\0';
-
- fprintf(console,("gpgkeys: searching for \"%s\" from HKP server %s\n"),
- searchkey,host);
-
- request=malloc(strlen(host)+100+strlen(search));
- if(!request)
- {
- fprintf(console,"gpgkeys: out of memory\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- sprintf(request,"x-hkp://%s%s%s/pks/lookup?op=index&options=mr&search=%s",
- host,port[0]?":":"",port[0]?port:"",search);
-
- if(verbose>2)
- fprintf(console,"gpgkeys: HTTP URL is \"%s\"\n",request);
-
- rc=http_open_document(&hd,request,http_flags);
- if(rc)
- {
- fprintf(console,"gpgkeys: can't search keyserver `%s': %s\n",
- host,rc==G10ERR_NETWORK?strerror(errno):g10_errstr(rc));
- }
- else
- {
- unsigned int maxlen=1024,buflen;
- byte *line=NULL;
-
- /* Is it a pksd that knows how to handle machine-readable
- format? */
-
- rc=iobuf_read_line(hd.fp_read,&line,&buflen,&maxlen);
- if(line[0]=='<')
- handle_old_hkp_index(hd.fp_read);
- else
- do
- {
- fprintf(output,"%s",line);
- maxlen=1024;
- rc=iobuf_read_line(hd.fp_read,&line,&buflen,&maxlen);
- }
- while(rc!=0);
-
- m_free(line);
-
- http_close(&hd);
-
- fprintf(output,"SEARCH %s END\n",searchkey);
-
- ret=KEYSERVER_OK;
- }
-
- fail:
-
- free(request);
- free(search);
-
- if(ret!=KEYSERVER_OK)
- fprintf(output,"SEARCH %s FAILED %d\n",searchkey,ret);
-
- return ret;
-}
-
-void
-fail_all(struct keylist *keylist,int action,int err)
-{
- if(!keylist)
- return;
-
- if(action==SEARCH)
- {
- fprintf(output,"SEARCH ");
- while(keylist)
- {
- fprintf(output,"%s ",keylist->str);
- keylist=keylist->next;
- }
- fprintf(output,"FAILED %d\n",err);
- }
- else
- while(keylist)
- {
- fprintf(output,"KEY %s FAILED %d\n",keylist->str,err);
- keylist=keylist->next;
- }
-}
-
-int
-main(int argc,char *argv[])
-{
- int arg,action=-1,ret=KEYSERVER_INTERNAL_ERROR;
- char line[MAX_LINE];
- int failed=0;
- struct keylist *keylist=NULL,*keyptr=NULL;
-
-#ifdef __riscos__
- riscos_global_defaults();
-#endif
-
- console=stderr;
-
- while((arg=getopt(argc,argv,"ho:"))!=-1)
- switch(arg)
- {
- default:
- case 'h':
- fprintf(console,"-h\thelp\n");
- fprintf(console,"-o\toutput to this file\n");
- return KEYSERVER_OK;
-
- case 'o':
- output=fopen(optarg,"w");
- if(output==NULL)
- {
- fprintf(console,"gpgkeys: Cannot open output file \"%s\": %s\n",
- optarg,strerror(errno));
- return KEYSERVER_INTERNAL_ERROR;
- }
-
- break;
- }
-
- if(argc>optind)
- {
- input=fopen(argv[optind],"r");
- if(input==NULL)
- {
- fprintf(console,"gpgkeys: Cannot open input file \"%s\": %s\n",
- argv[optind],strerror(errno));
- return KEYSERVER_INTERNAL_ERROR;
- }
- }
-
- if(input==NULL)
- input=stdin;
-
- if(output==NULL)
- output=stdout;
-
- /* Get the command and info block */
-
- while(fgets(line,MAX_LINE,input)!=NULL)
- {
- int version;
- char commandstr[7];
- char optionstr[30];
- char hash;
-
- if(line[0]=='\n')
- break;
-
- if(sscanf(line,"%c",&hash)==1 && hash=='#')
- continue;
-
- if(sscanf(line,"COMMAND %6s\n",commandstr)==1)
- {
- commandstr[6]='\0';
-
- if(strcasecmp(commandstr,"get")==0)
- action=GET;
- else if(strcasecmp(commandstr,"send")==0)
- action=SEND;
- else if(strcasecmp(commandstr,"search")==0)
- action=SEARCH;
-
- continue;
- }
-
- if(sscanf(line,"HOST %79s\n",host)==1)
- {
- host[79]='\0';
- continue;
- }
-
- if(sscanf(line,"PORT %9s\n",port)==1)
- {
- port[9]='\0';
- continue;
- }
-
- if(sscanf(line,"VERSION %d\n",&version)==1)
- {
- if(version!=KEYSERVER_PROTO_VERSION)
- {
- ret=KEYSERVER_VERSION_ERROR;
- goto fail;
- }
-
- continue;
- }
-
- if(sscanf(line,"OPTION %29s\n",optionstr)==1)
- {
- int no=0;
- char *start=&optionstr[0];
-
- optionstr[29]='\0';
-
- if(strncasecmp(optionstr,"no-",3)==0)
- {
- no=1;
- start=&optionstr[3];
- }
-
- if(strcasecmp(start,"verbose")==0)
- {
- if(no)
- verbose--;
- else
- verbose++;
- }
- else if(strcasecmp(start,"include-revoked")==0)
- {
- if(no)
- include_revoked=0;
- else
- include_revoked=1;
- }
- else if(strcasecmp(start,"include-disabled")==0)
- {
- if(no)
- include_disabled=0;
- else
- include_disabled=1;
- }
- else if(strcasecmp(start,"honor-http-proxy")==0)
- {
- if(no)
- http_flags&=~HTTP_FLAG_TRY_PROXY;
- else
- http_flags|=HTTP_FLAG_TRY_PROXY;
-
- }
- else if(strcasecmp(start,"broken-http-proxy")==0)
- {
- if(no)
- http_flags&=~HTTP_FLAG_NO_SHUTDOWN;
- else
- http_flags|=HTTP_FLAG_NO_SHUTDOWN;
- }
-
- continue;
- }
- }
-
- /* If it's a GET or a SEARCH, the next thing to come in is the
- keyids. If it's a SEND, then there are no keyids. */
-
- if(action==SEND)
- while(fgets(line,MAX_LINE,input)!=NULL && line[0]!='\n');
- else if(action==GET || action==SEARCH)
- {
- for(;;)
- {
- struct keylist *work;
-
- if(fgets(line,MAX_LINE,input)==NULL)
- break;
- else
- {
- if(line[0]=='\n')
- break;
-
- work=malloc(sizeof(struct keylist));
- if(work==NULL)
- {
- fprintf(console,"gpgkeys: out of memory while "
- "building key list\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- strcpy(work->str,line);
-
- /* Trim the trailing \n */
- work->str[strlen(line)-1]='\0';
-
- work->next=NULL;
-
- /* Always attach at the end to keep the list in proper
- order for searching */
- if(keylist==NULL)
- keylist=work;
- else
- keyptr->next=work;
-
- keyptr=work;
- }
- }
- }
- else
- {
- fprintf(console,"gpgkeys: no keyserver command specified\n");
- goto fail;
- }
-
- /* Send the response */
-
- fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION);
- fprintf(output,"PROGRAM %s\n\n",VERSION);
-
- if(verbose>1)
- {
- fprintf(console,"Host:\t\t%s\n",host);
- if(port[0])
- fprintf(console,"Port:\t\t%s\n",port);
- fprintf(console,"Command:\t%s\n",action==GET?"GET":
- action==SEND?"SEND":"SEARCH");
- }
-
-#if 0
- if(verbose>1)
- {
- vals=ldap_get_values(ldap,res,"software");
- if(vals!=NULL)
- {
- fprintf(console,"Server: \t%s\n",vals[0]);
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,res,"version");
- if(vals!=NULL)
- {
- fprintf(console,"Version:\t%s\n",vals[0]);
- ldap_value_free(vals);
- }
- }
-#endif
-
- switch(action)
- {
- case GET:
- keyptr=keylist;
-
- while(keyptr!=NULL)
- {
- if(get_key(keyptr->str)!=KEYSERVER_OK)
- failed++;
-
- keyptr=keyptr->next;
- }
- break;
-
- case SEND:
- {
- int eof=0;
-
- do
- {
- if(send_key(&eof)!=KEYSERVER_OK)
- failed++;
- }
- while(!eof);
- }
- break;
-
- case SEARCH:
- {
- char *searchkey=NULL;
- int len=0;
-
- /* To search, we stick a space in between each key to search
- for. */
-
- keyptr=keylist;
- while(keyptr!=NULL)
- {
- len+=strlen(keyptr->str)+1;
- keyptr=keyptr->next;
- }
-
- searchkey=malloc(len+1);
- if(searchkey==NULL)
- {
- ret=KEYSERVER_NO_MEMORY;
- fail_all(keylist,action,KEYSERVER_NO_MEMORY);
- goto fail;
- }
-
- searchkey[0]='\0';
-
- keyptr=keylist;
- while(keyptr!=NULL)
- {
- strcat(searchkey,keyptr->str);
- strcat(searchkey," ");
- keyptr=keyptr->next;
- }
-
- /* Nail that last space */
- searchkey[strlen(searchkey)-1]='\0';
-
- if(search_key(searchkey)!=KEYSERVER_OK)
- failed++;
-
- free(searchkey);
- }
-
- break;
- }
-
- if(!failed)
- ret=KEYSERVER_OK;
-
- fail:
- while(keylist!=NULL)
- {
- struct keylist *current=keylist;
- keylist=keylist->next;
- free(current);
- }
-
- if(input!=stdin)
- fclose(input);
-
- if(output!=stdout)
- fclose(output);
-
- return ret;
-}
diff --git a/keyserver/gpgkeys_ldap.c b/keyserver/gpgkeys_ldap.c
deleted file mode 100644
index ad8f0cf13..000000000
--- a/keyserver/gpgkeys_ldap.c
+++ /dev/null
@@ -1,1107 +0,0 @@
-/* gpgkeys_ldap.c - talk to a LDAP keyserver
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#ifdef NEED_LBER_H
-#include <lber.h>
-#endif
-#include <ldap.h>
-#include "keyserver.h"
-
-#ifdef __riscos__
-#include "util.h"
-#endif
-
-#define GET 0
-#define SEND 1
-#define SEARCH 2
-#define MAX_LINE 80
-
-int verbose=0,include_disabled=0,include_revoked=0,include_subkeys=0;
-char *basekeyspacedn=NULL;
-char host[80]={'\0'};
-char portstr[10]={'\0'};
-char *pgpkeystr="pgpKey";
-FILE *input=NULL,*output=NULL,*console=NULL;
-LDAP *ldap=NULL;
-
-struct keylist
-{
- char str[MAX_LINE];
- struct keylist *next;
-};
-
-#ifdef __riscos__
-RISCOS_GLOBAL_STATICS("LDAP Keyfetcher Heap")
-#endif /* __riscos__ */
-
-int
-ldap_err_to_gpg_err(int err)
-{
- int ret;
-
- switch(err)
- {
- case LDAP_ALREADY_EXISTS:
- ret=KEYSERVER_KEY_EXISTS;
- break;
-
- case LDAP_SERVER_DOWN:
- ret=KEYSERVER_UNREACHABLE;
- break;
-
- default:
- ret=KEYSERVER_GENERAL_ERROR;
- break;
- }
-
- return ret;
-}
-
-int
-ldap_to_gpg_err(LDAP *ld)
-{
-#if defined(HAVE_LDAP_GET_OPTION)
-
- int err;
-
- if(ldap_get_option(ld,LDAP_OPT_ERROR_NUMBER,&err)==0)
- return ldap_err_to_gpg_err(err);
- else
- return KEYSERVER_GENERAL_ERROR;
-
-#elif defined(HAVE_LDAP_LD_ERRNO)
-
- return ldap_err_to_gpg_err(ld->ld_errno);
-
-#else
-
- /* We should never get here since the LDAP library should always
- have either ldap_get_option or ld_errno, but just in case... */
- return KEYSERVER_GENERAL_ERROR;
-
-#endif
-}
-
-int
-send_key(int *eof)
-{
- int err,gotit=0,keysize=1,ret=KEYSERVER_INTERNAL_ERROR;
- char *dn=NULL,line[MAX_LINE],*key[2]={NULL,NULL};
- char keyid[17];
- LDAPMod mod, *attrs[2];
-
- memset (&mod, 0, sizeof mod);
- mod.mod_op = LDAP_MOD_ADD;
- mod.mod_type = pgpkeystr;
- mod.mod_values = key;
- attrs[0] = &mod;
- attrs[1] = NULL;
-
- dn=malloc(strlen("pgpCertid=virtual,")+strlen(basekeyspacedn)+1);
- if(dn==NULL)
- {
- fprintf(console,"gpgkeys: can't allocate memory for keyserver record\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- strcpy(dn,"pgpCertid=virtual,");
- strcat(dn,basekeyspacedn);
-
- key[0]=malloc(1);
- if(key[0]==NULL)
- {
- fprintf(console,"gpgkeys: unable to allocate memory for key\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- key[0][0]='\0';
-
- /* Read and throw away stdin until we see the BEGIN */
-
- while(fgets(line,MAX_LINE,input)!=NULL)
- if(sscanf(line,"KEY %16s BEGIN\n",keyid)==1)
- {
- gotit=1;
- break;
- }
-
- if(!gotit)
- {
- /* i.e. eof before the KEY BEGIN was found. This isn't an
- error. */
- *eof=1;
- ret=KEYSERVER_OK;
- goto fail;
- }
-
- gotit=0;
-
- /* Now slurp up everything until we see the END */
-
- while(fgets(line,MAX_LINE,input)!=NULL)
- if(sscanf(line,"KEY %16s END\n",keyid)==1)
- {
- gotit=1;
- break;
- }
- else
- {
- keysize+=strlen(line);
- key[0]=realloc(key[0],keysize);
- if(key[0]==NULL)
- {
- fprintf(console,"gpgkeys: unable to reallocate for key\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- strcat(key[0],line);
- }
-
- if(!gotit)
- {
- fprintf(console,"gpgkeys: no KEY %s END found\n",keyid);
- *eof=1;
- ret=KEYSERVER_KEY_INCOMPLETE;
- goto fail;
- }
-
- err=ldap_add_s(ldap,dn,attrs);
- if(err!=LDAP_SUCCESS)
- {
- fprintf(console,"gpgkeys: error adding key %s to keyserver: %s\n",
- keyid,ldap_err2string(err));
- ret=ldap_err_to_gpg_err(err);
- goto fail;
- }
-
- ret=KEYSERVER_OK;
-
- fail:
-
- free(key[0]);
- free(dn);
-
- if(ret!=0)
- fprintf(output,"KEY %s FAILED %d\n",keyid,ret);
-
- /* Not a fatal error */
- if(ret==KEYSERVER_KEY_EXISTS)
- ret=KEYSERVER_OK;
-
- return ret;
-}
-
-/* Note that key-not-found is not a fatal error */
-int
-get_key(char *getkey)
-{
- char **vals;
- LDAPMessage *res,*each;
- int ret=KEYSERVER_INTERNAL_ERROR,err,count;
- struct keylist *dupelist=NULL;
- char search[62];
- char *attrs[]={"replaceme","pgpuserid","pgpkeyid","pgpcertid","pgprevoked",
- "pgpdisabled","pgpkeycreatetime","modifytimestamp",
- "pgpkeysize","pgpkeytype",NULL};
- attrs[0]=pgpkeystr; /* Some compilers don't like using variables as
- array initializers. */
-
- /* Build the search string */
-
- /* GPG can send us a v4 fingerprint, a v3 or v4 long key id, or a v3
- or v4 short key id */
-
- if(strncmp(getkey,"0x",2)==0)
- getkey+=2;
-
- if(strlen(getkey)==32)
- {
- fprintf(console,
- "gpgkeys: LDAP keyservers do not support v3 fingerprints\n");
- fprintf(output,"KEY 0x%s BEGIN\n",getkey);
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_NOT_SUPPORTED);
- return KEYSERVER_NOT_SUPPORTED;
- }
-
- if(strlen(getkey)>16)
- {
- char *offset=&getkey[strlen(getkey)-16];
-
- /* fingerprint. Take the last 16 characters and treat it like a
- long key id */
-
- if(include_subkeys)
- sprintf(search,"(|(pgpcertid=%.16s)(pgpsubkeyid=%.16s))",
- offset,offset);
- else
- sprintf(search,"(pgpcertid=%.16s)",offset);
- }
- else if(strlen(getkey)>8)
- {
- /* long key id */
-
- if(include_subkeys)
- sprintf(search,"(|(pgpcertid=%.16s)(pgpsubkeyid=%.16s))",
- getkey,getkey);
- else
- sprintf(search,"(pgpcertid=%.16s)",getkey);
- }
- else
- {
- /* short key id */
-
- sprintf(search,"(pgpkeyid=%.8s)",getkey);
- }
-
- fprintf(output,"KEY 0x%s BEGIN\n",getkey);
-
- if(verbose>2)
- fprintf(console,"gpgkeys: LDAP fetch for: %s\n",search);
-
- if(!verbose)
- attrs[1]=NULL;
-
- if(verbose)
- fprintf(console,"gpgkeys: requesting key 0x%s from ldap://%s%s%s\n",
- getkey,host,portstr[0]?":":"",portstr[0]?portstr:"");
-
- err=ldap_search_s(ldap,basekeyspacedn,
- LDAP_SCOPE_SUBTREE,search,attrs,0,&res);
- if(err!=0)
- {
- int errtag=ldap_err_to_gpg_err(err);
-
- fprintf(console,"gpgkeys: LDAP search error: %s\n",ldap_err2string(err));
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,errtag);
- return errtag;
- }
-
- count=ldap_count_entries(ldap,res);
- if(count<1)
- {
- fprintf(console,"gpgkeys: key %s not found on keyserver\n",getkey);
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_KEY_NOT_FOUND);
- }
- else
- {
- /* There may be more than one unique result for a given keyID,
- so we should fetch them all (test this by fetching short key
- id 0xDEADBEEF). */
-
- each=ldap_first_entry(ldap,res);
- while(each!=NULL)
- {
- struct keylist *keyptr=dupelist;
-
- /* Use the long keyid to remove duplicates. The LDAP server
- returns the same keyid more than once if there are
- multiple user IDs on the key. Note that this does NOT
- mean that a keyid that exists multiple times on the
- keyserver will not be fetched. It means that each KEY,
- no matter how many user IDs share it's keyid, will be
- fetched only once. If a keyid that belongs to more than
- one key is fetched, the server quite properly responds
- with all matching keys. -ds */
-
- vals=ldap_get_values(ldap,each,"pgpcertid");
- if(vals!=NULL)
- {
- while(keyptr!=NULL)
- {
- if(strcasecmp(keyptr->str,vals[0])==0)
- break;
-
- keyptr=keyptr->next;
- }
-
- if(!keyptr)
- {
- /* it's not a duplicate, so add it */
-
- keyptr=malloc(sizeof(struct keylist));
- if(keyptr==NULL)
- {
- fprintf(console,"gpgkeys: out of memory when deduping "
- "key list\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- strncpy(keyptr->str,vals[0],MAX_LINE);
- keyptr->str[MAX_LINE-1]='\0';
-
- keyptr->next=dupelist;
- dupelist=keyptr;
- keyptr=NULL;
- }
-
- ldap_value_free(vals);
- }
-
- if(!keyptr) /* it's not a duplicate */
- {
- if(verbose)
- {
- vals=ldap_get_values(ldap,each,"pgpuserid");
- if(vals!=NULL)
- {
- /* This is wrong, as the user ID is UTF8. A
- better way to handle this would be to send it
- over to gpg and display it on that side of
- the pipe. */
- fprintf(console,"\nUser ID:\t%s\n",vals[0]);
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgprevoked");
- if(vals!=NULL)
- {
- if(atoi(vals[0])==1)
- fprintf(console,"\t\t** KEY REVOKED **\n");
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgpdisabled");
- if(vals!=NULL)
- {
- if(atoi(vals[0])==1)
- fprintf(console,"\t\t** KEY DISABLED **\n");
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgpkeyid");
- if(vals!=NULL)
- {
- fprintf(console,"Short key ID:\t%s\n",vals[0]);
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgpcertid");
- if(vals!=NULL)
- {
- fprintf(console,"Long key ID:\t%s\n",vals[0]);
- ldap_value_free(vals);
- }
-
- /* YYYYMMDDHHmmssZ */
-
- vals=ldap_get_values(ldap,each,"pgpkeycreatetime");
- if(vals!=NULL)
- {
- if(strlen(vals[0])==15)
- fprintf(console,"Key created:\t%.2s/%.2s/%.4s\n",
- &vals[0][4],&vals[0][6],vals[0]);
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"modifytimestamp");
- if(vals!=NULL)
- {
- if(strlen(vals[0])==15)
- fprintf(console,"Key modified:\t%.2s/%.2s/%.4s\n",
- &vals[0][4],&vals[0][6],vals[0]);
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgpkeysize");
- if(vals!=NULL)
- {
- if(atoi(vals[0])>0)
- fprintf(console,"Key size:\t%d\n",atoi(vals[0]));
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgpkeytype");
- if(vals!=NULL)
- {
- fprintf(console,"Key type:\t%s\n",vals[0]);
- ldap_value_free(vals);
- }
- }
-
- vals=ldap_get_values(ldap,each,pgpkeystr);
- if(vals==NULL)
- {
- int errtag=ldap_to_gpg_err(ldap);
-
- fprintf(console,"gpgkeys: unable to retrieve key %s "
- "from keyserver\n",getkey);
- fprintf(output,"KEY 0x%s FAILED %d\n",getkey,errtag);
- }
- else
- {
- fprintf(output,"%sKEY 0x%s END\n",vals[0],getkey);
-
- ldap_value_free(vals);
- }
- }
-
- each=ldap_next_entry(ldap,each);
- }
- }
-
- ret=KEYSERVER_OK;
-
- fail:
- ldap_msgfree(res);
-
- /* free up the dupe checker */
- while(dupelist!=NULL)
- {
- struct keylist *keyptr=dupelist;
-
- dupelist=keyptr->next;
- free(keyptr);
- }
-
- return ret;
-}
-
-time_t
-ldap2epochtime(const char *timestr)
-{
- struct tm pgptime;
-
- memset(&pgptime,0,sizeof(pgptime));
-
- /* YYYYMMDDHHmmssZ */
-
- sscanf(timestr,"%4d%2d%2d%2d%2d%2d",
- &pgptime.tm_year,
- &pgptime.tm_mon,
- &pgptime.tm_mday,
- &pgptime.tm_hour,
- &pgptime.tm_min,
- &pgptime.tm_sec);
-
- pgptime.tm_year-=1900;
- pgptime.tm_isdst=-1;
- pgptime.tm_mon--;
-
- return mktime(&pgptime);
-}
-
-void
-printquoted(FILE *stream,char *string,char delim)
-{
- while(*string)
- {
- if(*string==delim || *string=='%')
- fprintf(stream,"%%%02x",*string);
- else
- fputc(*string,stream);
-
- string++;
- }
-}
-
-/* Returns 0 on success and -1 on error. Note that key-not-found is
- not an error! */
-int
-search_key(char *searchkey)
-{
- char **vals;
- LDAPMessage *res,*each;
- int err,count;
- /* The maxium size of the search, including the optional stuff and
- the trailing \0 */
- char search[2+12+MAX_LINE+2+15+14+1+1];
- char *attrs[]={"pgpcertid","pgpuserid","pgprevoked","pgpdisabled",
- "pgpkeycreatetime","pgpkeyexpiretime","modifytimestamp",
- "pgpkeysize","pgpkeytype",NULL};
-
- fprintf(output,"SEARCH %s BEGIN\n",searchkey);
-
- /* Build the search string */
-
- sprintf(search,"%s(pgpuserid=*%s*)%s%s%s",
- (!(include_disabled&&include_revoked))?"(&":"",
- searchkey,
- include_disabled?"":"(pgpdisabled=0)",
- include_revoked?"":"(pgprevoked=0)",
- !(include_disabled&&include_revoked)?")":"");
-
- if(verbose>2)
- fprintf(console,"gpgkeys: LDAP search for: %s\n",search);
-
- fprintf(console,("gpgkeys: searching for \"%s\" from LDAP server %s\n"),
- searchkey,host);
-
- err=ldap_search_s(ldap,basekeyspacedn,
- LDAP_SCOPE_SUBTREE,search,attrs,0,&res);
- if(err!=0)
- {
- int errtag=ldap_err_to_gpg_err(err);
-
- fprintf(output,"SEARCH %s FAILED %d\n",searchkey,errtag);
- fprintf(console,"gpgkeys: LDAP search error: %s\n",ldap_err2string(err));
- return errtag;
- }
-
- count=ldap_count_entries(ldap,res);
-
- if(count<1)
- fprintf(output,"info:1:0\n");
- else
- {
- fprintf(output,"info:1:%d\n",count);
-
- each=ldap_first_entry(ldap,res);
- while(each!=NULL)
- {
- fprintf(output,"pub:");
-
- vals=ldap_get_values(ldap,each,"pgpcertid");
- if(vals!=NULL)
- {
- fprintf(output,"%s",vals[0]);
- ldap_value_free(vals);
- }
-
- fputc(':',output);
-
- vals=ldap_get_values(ldap,each,"pgpkeytype");
- if(vals!=NULL)
- {
- /* The LDAP server doesn't exactly handle this well. */
- if(strcasecmp(vals[0],"RSA")==0)
- fprintf(output,"1");
- else if(strcasecmp(vals[0],"DSS/DH")==0)
- fprintf(output,"17");
- ldap_value_free(vals);
- }
-
- fputc(':',output);
-
- vals=ldap_get_values(ldap,each,"pgpkeysize");
- if(vals!=NULL)
- {
- /* Not sure why, but some keys are listed with a key size of
- 0. Treat that like an unknown. */
- if(atoi(vals[0])>0)
- fprintf(output,"%d",atoi(vals[0]));
- ldap_value_free(vals);
- }
-
- fputc(':',output);
-
- /* YYYYMMDDHHmmssZ */
-
- vals=ldap_get_values(ldap,each,"pgpkeycreatetime");
- if(vals!=NULL && strlen(vals[0])==15)
- {
- fprintf(output,"%u",(unsigned int)ldap2epochtime(vals[0]));
- ldap_value_free(vals);
- }
-
- fputc(':',output);
-
- vals=ldap_get_values(ldap,each,"pgpkeyexpiretime");
- if(vals!=NULL && strlen(vals[0])==15)
- {
- fprintf(output,"%u",(unsigned int)ldap2epochtime(vals[0]));
- ldap_value_free(vals);
- }
-
- fputc(':',output);
-
- vals=ldap_get_values(ldap,each,"pgprevoked");
- if(vals!=NULL)
- {
- if(atoi(vals[0])==1)
- fprintf(output,"r");
- ldap_value_free(vals);
- }
-
- vals=ldap_get_values(ldap,each,"pgpdisabled");
- if(vals!=NULL)
- {
- if(atoi(vals[0])==1)
- fprintf(output,"d");
- ldap_value_free(vals);
- }
-
- fputc(':',output);
-
- vals=ldap_get_values(ldap,each,"modifytimestamp");
- if(vals!=NULL && strlen(vals[0])==15)
- {
- fprintf(output,"%u",(unsigned int)ldap2epochtime(vals[0]));
- ldap_value_free(vals);
- }
-
- fprintf(output,"\nuid:");
-
- vals=ldap_get_values(ldap,each,"pgpuserid");
- if(vals!=NULL)
- {
- /* Need to escape any colons */
- printquoted(output,vals[0],':');
- ldap_value_free(vals);
- }
-
- fprintf(output,"\n");
-
- each=ldap_next_entry(ldap,each);
- }
- }
-
- ldap_msgfree(res);
-
- fprintf(output,"SEARCH %s END\n",searchkey);
-
- return KEYSERVER_OK;
-}
-
-void
-fail_all(struct keylist *keylist,int action,int err)
-{
- if(!keylist)
- return;
-
- if(action==SEARCH)
- {
- fprintf(output,"SEARCH ");
- while(keylist)
- {
- fprintf(output,"%s ",keylist->str);
- keylist=keylist->next;
- }
- fprintf(output,"FAILED %d\n",err);
- }
- else
- while(keylist)
- {
- fprintf(output,"KEY %s FAILED %d\n",keylist->str,err);
- keylist=keylist->next;
- }
-}
-
-int
-main(int argc,char *argv[])
-{
- int port=0,arg,err,action=-1,ret=KEYSERVER_INTERNAL_ERROR;
- char line[MAX_LINE],**vals;
- int version,failed=0;
- char *attrs[]={"basekeyspacedn","version","software",NULL};
- LDAPMessage *res;
- struct keylist *keylist=NULL,*keyptr=NULL;
-
-#ifdef __riscos__
- riscos_global_defaults();
-#endif
-
- console=stderr;
-
- while((arg=getopt(argc,argv,"ho:"))!=-1)
- switch(arg)
- {
- default:
- case 'h':
- fprintf(console,"-h\thelp\n");
- fprintf(console,"-o\toutput to this file\n");
- return KEYSERVER_OK;
-
- case 'o':
- output=fopen(optarg,"w");
- if(output==NULL)
- {
- fprintf(console,"gpgkeys: Cannot open output file \"%s\": %s\n",
- optarg,strerror(errno));
- return KEYSERVER_INTERNAL_ERROR;
- }
-
- break;
- }
-
- if(argc>optind)
- {
- input=fopen(argv[optind],"r");
- if(input==NULL)
- {
- fprintf(console,"gpgkeys: Cannot open input file \"%s\": %s\n",
- argv[optind],strerror(errno));
- return KEYSERVER_INTERNAL_ERROR;
- }
- }
-
- if(input==NULL)
- input=stdin;
-
- if(output==NULL)
- output=stdout;
-
- /* Get the command and info block */
-
- while(fgets(line,MAX_LINE,input)!=NULL)
- {
- char commandstr[7];
- char optionstr[30];
- char hash;
-
- if(line[0]=='\n')
- break;
-
- if(sscanf(line,"%c",&hash)==1 && hash=='#')
- continue;
-
- if(sscanf(line,"COMMAND %6s\n",commandstr)==1)
- {
- commandstr[6]='\0';
-
- if(strcasecmp(commandstr,"get")==0)
- action=GET;
- else if(strcasecmp(commandstr,"send")==0)
- action=SEND;
- else if(strcasecmp(commandstr,"search")==0)
- action=SEARCH;
-
- continue;
- }
-
- if(sscanf(line,"HOST %79s\n",host)==1)
- {
- host[79]='\0';
- continue;
- }
-
- if(sscanf(line,"PORT %9s\n",portstr)==1)
- {
- portstr[9]='\0';
- port=atoi(portstr);
- continue;
- }
-
- if(sscanf(line,"VERSION %d\n",&version)==1)
- {
- if(version!=KEYSERVER_PROTO_VERSION)
- {
- ret=KEYSERVER_VERSION_ERROR;
- goto fail;
- }
-
- continue;
- }
-
- if(sscanf(line,"OPTION %29s\n",optionstr)==1)
- {
- int no=0;
- char *start=&optionstr[0];
-
- optionstr[29]='\0';
-
- if(strncasecmp(optionstr,"no-",3)==0)
- {
- no=1;
- start=&optionstr[3];
- }
-
- if(strcasecmp(start,"verbose")==0)
- {
- if(no)
- verbose--;
- else
- verbose++;
- }
- else if(strcasecmp(start,"include-disabled")==0)
- {
- if(no)
- include_disabled=0;
- else
- include_disabled=1;
- }
- else if(strcasecmp(start,"include-revoked")==0)
- {
- if(no)
- include_revoked=0;
- else
- include_revoked=1;
- }
- else if(strcasecmp(start,"include-subkeys")==0)
- {
- if(no)
- include_subkeys=0;
- else
- include_subkeys=1;
- }
-
- continue;
- }
- }
-
- /* If it's a GET or a SEARCH, the next thing to come in is the
- keyids. If it's a SEND, then there are no keyids. */
-
- if(action==SEND)
- while(fgets(line,MAX_LINE,input)!=NULL && line[0]!='\n');
- else if(action==GET || action==SEARCH)
- {
- for(;;)
- {
- struct keylist *work;
-
- if(fgets(line,MAX_LINE,input)==NULL)
- break;
- else
- {
- if(line[0]=='\n')
- break;
-
- work=malloc(sizeof(struct keylist));
- if(work==NULL)
- {
- fprintf(console,"gpgkeys: out of memory while "
- "building key list\n");
- ret=KEYSERVER_NO_MEMORY;
- goto fail;
- }
-
- strcpy(work->str,line);
-
- /* Trim the trailing \n */
- work->str[strlen(line)-1]='\0';
-
- work->next=NULL;
-
- /* Always attach at the end to keep the list in proper
- order for searching */
- if(keylist==NULL)
- keylist=work;
- else
- keyptr->next=work;
-
- keyptr=work;
- }
- }
- }
- else
- {
- fprintf(console,"gpgkeys: no keyserver command specified\n");
- goto fail;
- }
-
- /* Send the response */
-
- fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION);
- fprintf(output,"PROGRAM %s\n\n",VERSION);
-
- if(verbose>1)
- {
- fprintf(console,"Host:\t\t%s\n",host);
- if(port)
- fprintf(console,"Port:\t\t%d\n",port);
- fprintf(console,"Command:\t%s\n",action==GET?"GET":
- action==SEND?"SEND":"SEARCH");
- }
-
- /* Note that this tries all A records on a given host (or at least,
- OpenLDAP does). */
- ldap=ldap_init(host,port);
- if(ldap==NULL)
- {
- fprintf(console,"gpgkeys: internal LDAP init error: %s\n",
- strerror(errno));
- fail_all(keylist,action,KEYSERVER_INTERNAL_ERROR);
- goto fail;
- }
-
- err=ldap_simple_bind_s(ldap,NULL,NULL);
- if(err!=0)
- {
- fprintf(console,"gpgkeys: internal LDAP bind error: %s\n",
- ldap_err2string(err));
- fail_all(keylist,action,ldap_err_to_gpg_err(err));
- goto fail;
- }
-
- /* Get the magic info record */
-
- err=ldap_search_s(ldap,"cn=PGPServerInfo",LDAP_SCOPE_BASE,
- "(objectclass=*)",attrs,0,&res);
- if(err!=0)
- {
- fprintf(console,"gpgkeys: error retrieving LDAP server info: %s\n",
- ldap_err2string(err));
- fail_all(keylist,action,ldap_err_to_gpg_err(err));
- goto fail;
- }
-
- if(ldap_count_entries(ldap,res)!=1)
- {
- fprintf(console,"gpgkeys: more than one serverinfo record\n");
- fail_all(keylist,action,KEYSERVER_INTERNAL_ERROR);
- goto fail;
- }
-
- if(verbose>1)
- {
- vals=ldap_get_values(ldap,res,"software");
- if(vals!=NULL)
- {
- fprintf(console,"Server: \t%s\n",vals[0]);
- ldap_value_free(vals);
- }
- }
-
- vals=ldap_get_values(ldap,res,"version");
- if(vals!=NULL)
- {
- if(verbose>1)
- fprintf(console,"Version:\t%s\n",vals[0]);
-
- /* If the version is high enough, use the new pgpKeyV2
- attribute. This design if iffy at best, but it matches how
- PGP does it. I figure the NAI folks assumed that there would
- never be a LDAP keyserver vendor with a different numbering
- scheme. */
- if(atoi(vals[0])>1)
- pgpkeystr="pgpKeyV2";
-
- ldap_value_free(vals);
- }
-
- /* This is always "OU=ACTIVE,O=PGP KEYSPACE,C=US", but it might not
- be in the future. */
-
- vals=ldap_get_values(ldap,res,"basekeyspacedn");
- if(vals!=NULL)
- {
- basekeyspacedn=strdup(vals[0]);
- ldap_value_free(vals);
- if(basekeyspacedn==NULL)
- {
- fprintf(console,"gpgkeys: can't allocate string space "
- "for LDAP base\n");
- fail_all(keylist,action,KEYSERVER_NO_MEMORY);
- goto fail;
- }
- }
-
- ldap_msgfree(res);
-
- switch(action)
- {
- case GET:
- keyptr=keylist;
-
- while(keyptr!=NULL)
- {
- if(get_key(keyptr->str)!=KEYSERVER_OK)
- failed++;
-
- keyptr=keyptr->next;
- }
- break;
-
- case SEND:
- {
- int eof=0;
-
- do
- {
- if(send_key(&eof)!=KEYSERVER_OK)
- failed++;
- }
- while(!eof);
- }
- break;
-
- case SEARCH:
- {
- char *searchkey=NULL;
- int len=0;
-
- /* To search, we stick a * in between each key to search for.
- This means that if the user enters words, they'll get
- "enters*words". If the user "enters words", they'll get
- "enters words" */
-
- keyptr=keylist;
- while(keyptr!=NULL)
- {
- len+=strlen(keyptr->str)+1;
- keyptr=keyptr->next;
- }
-
- searchkey=malloc(len+1);
- if(searchkey==NULL)
- {
- ret=KEYSERVER_NO_MEMORY;
- fail_all(keylist,action,KEYSERVER_NO_MEMORY);
- goto fail;
- }
-
- searchkey[0]='\0';
-
- keyptr=keylist;
- while(keyptr!=NULL)
- {
- strcat(searchkey,keyptr->str);
- strcat(searchkey,"*");
- keyptr=keyptr->next;
- }
-
- /* Nail that last "*" */
- searchkey[strlen(searchkey)-1]='\0';
-
- if(search_key(searchkey)!=KEYSERVER_OK)
- failed++;
-
- free(searchkey);
- }
-
- break;
- }
-
- if(!failed)
- ret=KEYSERVER_OK;
-
- fail:
-
- while(keylist!=NULL)
- {
- struct keylist *current=keylist;
- keylist=keylist->next;
- free(current);
- }
-
- if(input!=stdin)
- fclose(input);
-
- if(output!=stdout)
- fclose(output);
-
- if(ldap!=NULL)
- ldap_unbind_s(ldap);
-
- free(basekeyspacedn);
-
- return ret;
-}
diff --git a/keyserver/gpgkeys_mailto.in b/keyserver/gpgkeys_mailto.in
deleted file mode 100755
index 9086de419..000000000
--- a/keyserver/gpgkeys_mailto.in
+++ /dev/null
@@ -1,202 +0,0 @@
-#!@PERL@ -w
-
-# gpgkeys_mailto - talk to a email keyserver
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 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
-
-use Getopt::Std;
-$sendmail="@SENDMAIL@ -t";
-
-###
-
-getopts('o:');
-
-if(defined($opt_o))
-{
- open(STDOUT,">$opt_o") || die "Can't open output file $opt_o\n";
-}
-
-if(@ARGV)
-{
- open(STDIN,$ARGV[0]) || die "Can't open input file $ARGV[0]\n";
-}
-
-($login,$name)=(getpwuid($<))[0,6];
-
-$from="$name <$login>";
-
-while(<STDIN>)
-{
- last if($_ eq "\n");
-
- if(/^COMMAND (\w+)/)
- {
- $command=$1;
- }
-
- if(/^OPAQUE (\S+)/)
- {
- $address=$1;
- }
-
- if(/^PROGRAM (\S+)/)
- {
- $program=$1;
- }
-
- if(/^OPTION (\w+)/)
- {
- if($1=~/^verbose$/i)
- {
- $verbose++;
- }
- elsif($1=~/^no-verbose$/i)
- {
- $verbose--;
- }
- }
-}
-
-$program="(unknown)" if(!defined($program));
-
-if(!defined($address))
-{
- print STDERR "gpgkeys: no address provided\n";
- exit(1);
-}
-
-# decode $address
-
-($address,$args)=split(/\?/,$address);
-
-if(defined($args))
-{
- @pairs = split(/&/, $args);
- foreach $pair (@pairs)
- {
- ($hdr, $val) = split(/=/, $pair);
- $hdr =~ tr/+/ /;
- $hdr =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- $val =~ tr/+/ /;
- $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
-# we only handle "from" right now
- if($hdr=~/^from$/i)
- {
- $from=$val;
- last;
- }
- }
-}
-
-while(<STDIN>)
-{
- last if($_ eq "\n");
-
- chomp;
-
- push(@keys,$_);
-}
-
-# Send response
-
-print "VERSION 0\n";
-print "OPTION OUTOFBAND\n\n";
-
-# Email keyservers get and search the same way
-
-if($command=~/get/i || $command=~/search/i)
-{
- if($command=~/search/i)
- {
- print "COUNT 0\n";
- }
-
- foreach $key (@keys)
- {
- open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n";
- print MAIL "From: $from\n";
- print MAIL "To: $address\n";
- if($command=~/get/i)
- {
- # mail keyservers don't like long-form keyids
-
- if(substr($key,0,2) eq "0x")
- {
- $key=substr($key,2);
- }
-
- if(length($key)>8)
- {
- $key=substr($key,-8);
- }
-
- print MAIL "Subject: GET 0x$key\n\n";
- }
- else
- {
- print MAIL "Subject: GET $key\n\n";
- }
- print MAIL "GnuPG $program email keyserver request\n";
- close(MAIL);
-
- # Tell GnuPG not to expect a key
- print "KEY $key OUTOFBAND\n";
-
- if($verbose)
- {
- print STDERR "gpgkeys: key $key requested from $address\n";
- }
- }
-}
-
-if($command=~/send/i)
-{
- while(!eof(STDIN))
- {
- open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n";
- print MAIL "From: $name <$login>\n";
- print MAIL "To: $address\n";
- print MAIL "Subject: ADD\n\n";
-
- while(<STDIN>)
- {
- if(/^KEY (\w+) BEGIN$/)
- {
- $key=$1;
- last;
- }
- }
-
- while(<STDIN>)
- {
- if(/^KEY \w+ END$/)
- {
- last;
- }
-
- print MAIL;
- }
-
- close(MAIL);
-
- if($verbose)
- {
- print STDERR "gpgkeys: key $key sent to $address\n";
- }
- }
-}
diff --git a/keyserver/gpgkeys_test.in b/keyserver/gpgkeys_test.in
deleted file mode 100755
index 09c14bfd4..000000000
--- a/keyserver/gpgkeys_test.in
+++ /dev/null
@@ -1,79 +0,0 @@
-#!@PERL@
-
-# gpgkeys_test - keyserver code tester
-# Copyright (C) 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 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
-
-use Getopt::Std;
-
-$|=1;
-
-print STDERR "gpgkeys_test starting\n";
-
-getopts('o:');
-
-if(defined($opt_o))
-{
- print STDERR "Using output file $opt_o\n";
- open(STDOUT,">$opt_o") || die "Can't open output file $opt_o\n";
-}
-
-if(@ARGV)
-{
- print STDERR "Using input file $ARGV[0]\n";
- open(STDIN,$ARGV[0]) || die "Can't open input file $ARGV[0]\n";
-}
-
-# Get the command block
-
-print STDERR "Command block:\n";
-
-while(<STDIN>)
-{
- last if($_ eq "\n");
- print STDERR "--command-> $_";
-
- if(/^COMMAND (\w+)/)
- {
- $command=$1;
- }
-}
-
-# Get the keylist block
-
-print STDERR "Keylist block:\n";
-
-while(<STDIN>)
-{
- last if($_ eq "\n");
- print STDERR "--keylist-> $_";
-}
-
-# If it's a SEND, then get the key material
-
-if($command eq "SEND")
-{
- print STDERR "Key material to send:\n";
-
- while(<STDIN>)
- {
- print STDERR "$_";
- }
-}
-
-printf STDERR "gpgkeys_test finished\n";
diff --git a/mpi/ChangeLog b/mpi/ChangeLog
deleted file mode 100644
index f1e2e459e..000000000
--- a/mpi/ChangeLog
+++ /dev/null
@@ -1,390 +0,0 @@
-2002-10-17 Werner Koch <wk@gnupg.org>
-
- * config.links (powerpc-apple-darwin6.1): Disable assembler
- due to non-working modules/as. Suggested by Gordon Worley.
-
-2002-10-02 David Shaw <dshaw@jabberwocky.com>
-
- * longlong.h: Some whitespace changes in HPPA to fix assembler
- problems on HP-UX. From David Ellement.
-
-2002-09-20 Werner Koch <wk@gnupg.org>
-
- * mpicoder.c (do_get_buffer): Avoid zero length allocation.
- Checked that all callers behave properly when NBYTES returns 0 as
- the length of the allocated buffer.
-
-2002-09-10 Werner Koch <wk@gnupg.org>
-
- * mpi-bit.c (mpi_normalize): Replaced the check for protected by
- is_opaque.
- (mpi_get_nbits): Removed the special case for protected MPIs.
- * mpicoder.c (do_get_buffer): Likewise.
- (mpi_print): Removed the nbit_info printing.
-
-2002-09-03 Werner Koch <wk@gnupg.org>
-
- * mpicoder.c (mpi_set_buffer): Cast all left operands of a shift
- to a larger type so that 16 bit CPUs don't suffer from an
- overflow. Suggested by TOGAWA Satoshi.
-
-2002-08-24 David Shaw <dshaw@jabberwocky.com>
-
- * longlong.h: Remove space between \ and newline. gcc is
- complaining.
-
-2002-08-13 Werner Koch <wk@gnupg.org>
-
- * mpicoder.c (do_get_buffer): Don't remove leading zeros if the
- MPI is marked as protected.
-
-2002-08-02 Timo Schulz <ts@winpt.org>
-
- * mpicoder.c: Add a '\n' to all log_bug functions.
-
-2002-08-01 Werner Koch <wk@gnupg.org>
-
- * config.links: Added case for sparc64-netbsd. Suggested by
- ww@styx.org.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * config.links: Add special rule for OpenBSD on x86 to use special
- i386-openbsd files. OpenBSD (at least until version 3.1) has an
- older assembler that won't work with the files in i386.
-
-2002-07-24 Stefan Bellon <sbellon@sbellon.de>
-
- * longlong.h [__riscos__]: Removed #pragma which is not needed
- anymore since the K&R multiline strings are gone.
-
-2002-07-24 Werner Koch <wk@gnupg.org>
-
- * longlong.h: Replaced all K&R multiline strings by ISO ones for
- the sake of modern compilers. Suggested by Marco Parrone.
-
-2002-05-10 Stefan Bellon <sbellon@sbellon.de>
-
- * mpiutil.c (mpi_alloc_like/mpi_debug_alloc_like): Added code
- for M_DEBUG.
-
-2002-04-18 Werner Koch <wk@gnupg.org>
-
- * i386/syntax.h (ALIGN): Removed parens from definition
- * i386/mpih-add1.S, i386/mpih-sub1.S, i386/mpih-rshift.S,
- i386/mpih-lshift.S: Minor syntax changes suggested by Mark Pettit
- after comparing the files with those for GMP 4.
-
-2001-11-08 Werner Koch <wk@gnupg.org>
-
- * config.links (mpi_sflags): Add extra rule for sparc64-sun-solaris2.
-
-2001-08-20 Werner Koch <wk@gnupg.org>
-
- * longlong.h [__riscos__]: Need a special pragma here.
-
-2001-08-09 Werner Koch <wk@gnupg.org>
-
- * config.links: Added configuraton for powerpc-openbsd. By Peter
- Valchev
-
-2001-07-09 Werner Koch <wk@gnupg.org>
-
- * config.links: Changed the way the list of files to be
- symlinked is returned.
-
-2001-05-27 Werner Koch <wk@gnupg.org>
-
- * hppa/, hppa1.1/, pa7100/ : Use .label command instead of labels
- because there syntax changed. By Matthew Wilcox.
-
-2001-05-06 Werner Koch <wk@gnupg.org>
-
- * longlong.h: Fixes for ARM by Phil Blundell.
-
-2001-04-17 Werner Koch <wk@gnupg.org>
-
- Updated copyright notices.
-
-2001-03-24 Werner Koch <wk@gnupg.org>
-
- * mpi-mul.c (mpi_mul): Make sure that secret temporary results are
- not stored in w. Suggested by Florian Weimer.
-
-2001-03-18 Werner Koch <wk@gnupg.org>
-
- * config.links: Use i386 code for i386. According to tests by
- Kevin Ryde the i586 code runs slow on i386 CPUs. Ditto for i786.
-
-2000-10-24 Werner Koch <wk@gnupg.org>
-
- * mips3/: Changed a few comments to C-style. By Jeff Long.
-
-2000-10-13 Werner Koch <wk@gnupg.org>
-
- * mpi.h: Removed the inclusion of mpi-asm-defs.h because this
- makes some trouble when doing a VPATH build. configure now
- takes care of it.
-
-2000-10-12 Werner Koch <wk@gnupg.org>
-
- * generic/mpi-asm-defs.h: New.
- * mips3/mpi-asm-defs.h: New.
- * config.links: Create a link to one of the above files.
-
-Wed Jul 19 11:26:43 CEST 2000 Werner Koch <wk@>
-
- * config.links: Support for powerpc--netbsd by Gabriel Rosenkoetter.
-
-Wed Mar 22 13:50:24 CET 2000 Werner Koch <wk@openit.de>
-
- * config.links: Add support for FreeBSD 5 and made the case stmt
- looking nicer. From Jun Kuriyama.
-
-Fri Mar 17 17:50:25 CET 2000 Werner Koch <wk@openit.de>
-
- * config.links (sparc64-unknown-linux-gnu): use udic module.
- From Adam Mitchell.
-
-2000-03-14 12:03:56 Werner Koch (wk@habibti.openit.de)
-
- * Makefile.am: Do not use .s and .S files but a temp names, so that
- OSes with caseinsensitive filenames do work. From Frank Donahoe.
-
-Tue Mar 7 18:45:31 CET 2000 Werner Koch <wk@gnupg.de>
-
- * mpih-mul.c (mpihelp_mul_karatsuba_case): It seems that the
- untested part works fine. Removed the debugging message.
-
- * longlong.h (umul_ppmm): Fixes for ARM-4. By Sean MacLennan.
-
- * config.links: Add support for NetBSD.
-
-Thu Jan 13 19:31:58 CET 2000 Werner Koch <wk@gnupg.de>
-
- * mpi-internal.h (karatsuba_ctx): New.
- * mpih-mul.c (mpihelp_release_karatsuba_ctx): New.
- (mpihelp_mul_karatsuba_case): New.
- (mpihelp_mul): Splitted to make use of the new functions.
- * mpi-pow.c (mpi_powm): Make use of the new splitted function
- to avoid multiple allocation of temporary memory during the
- karatsuba operations.
-
- * mpi_mpow.c: Removed the unused Barrett code.
-
-Sun Dec 19 15:22:26 CET 1999 Werner Koch <wk@gnupg.de>
-
- * power/ : Converted more comments to C comments because some AS
- complain about ' in comments.
-
-Thu Dec 16 10:07:58 CET 1999 Werner Koch <wk@gnupg.de>
-
- * Makefile.am: c/SFLAGS/ASFLAGS/. This has only been used by the
- powerpc and actually never passed the -Wa,foo to the cc.
-
-Thu Dec 9 10:31:05 CET 1999 Werner Koch <wk@gnupg.de>
-
- * power/: Add all files from GMP for this CPU.
-
- * config.links: Support for BSDI 4.x. By Wayne Chapeskie.
- (sparc8): Made the search path the same as sparc9
-
- * mpih-div.c (mpihelp_divrem): The MPN_COPY_DECR copied one
- elemnat too many. This is gmp2.0.2p9.txt patch.
-
-Sat Oct 9 20:34:41 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * Makefile.am: Removed libtool.
-
-Mon Aug 30 20:38:33 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.links: Add case label for DJGPP
-
-Wed Jul 14 19:42:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * Makefile.am: Use .s files as temporaries, disabled other .S rules.
-
-Wed Jul 7 13:08:40 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * mpicoder.c (g10_log_mpidump): New.
-
- * Makefile.am: Support for libtool.
-
-Fri Jul 2 11:45:54 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * mpi-bit.c (mpi_lshift_limbs,mpi_rshift_limbs): New.
- * mpi-mpow.c (barrett_mulm): New but diabled.
-
-Tue Jun 1 16:01:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.links (i[56]86*-*-freebsdelf*): New.
-
-Sun May 23 14:20:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.links (sysdep.h): Not any more conditionally created.
-
-Tue May 4 15:47:53 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpiutil.c (mpi_alloc_like): New.
-
-Mon Apr 26 17:48:15 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpih-add.c, mpih-sub.c: Removed
- * mpi-inline.c: New.
- * mpi-inline.h: Make it usable by mpi-inline.c.
-
-Sun Apr 18 10:11:28 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpih-mul.c (mpihelp_mul_n): Fixed use of memory region.
- (mpihelp_mul): Ditto.
-
-Wed Apr 7 20:51:39 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Explicit rules to invoke cpp on *.S
-
-Mon Mar 8 20:47:17 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.links: Take advantage of the with_symbol_underscore macro.
- Add support for freebsd 4.
-
-Wed Feb 24 11:07:27 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mips3/mpih-sub1.S: Removed left over junk in last line. (Should I
- blame me or my editor?).
-
-Sat Feb 13 12:04:43 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Removed the +=. Add MPI_OPT_FLAGS.
-
-Sat Jan 9 16:02:23 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpi-cmp.c (mpi_cmp_ui): Normalized the arg.
-
-Thu Jan 7 18:00:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpi-bit.c (mpi_normalize): New.
- (mpi_get_nbits): Normalize the MPI.
- * mpi-bit.c (mpi_cmp): Normalize the MPI before the compare.
-
-
-Tue Dec 8 13:15:16 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.links: Moved the case for powerpc*linux
- * powerpcp32/*.S: Removed some underscores.
-
-Thu Nov 26 07:27:52 1998 Werner Koch <werner.koch@guug.de>
-
- * config.links: Support for ppc with ELF
- * powerpc32/syntax.h: New.
- * powerpc32/*.S: Applied ELF patches (glibc patches)
-
-Tue Nov 10 19:31:37 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * power*/ : Started with stuff for PPC
- * config.links: Some stuff for PPC.
- * generic/udiv-w-sdiv.c: New but disabled.
-
-Tue Oct 27 12:37:46 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links (freebsd): Fixes for FreeBSD 3.0
-
-Wed Oct 14 09:59:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links (freebsd): ELF patches from Jun Kuriyama.
-
-Thu Oct 8 13:28:17 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpi-mpow.c (mpi_mulpowm): Fixed mem leak (m_free/mpi_free).
-
-Thu Sep 17 18:08:50 1998 Werner Koch (wk@(none))
-
- * hppa1.1/udiv-qrnnd.S: Fix from Steffen Zahn for HPUX 10.20
-
-Thu Aug 6 16:39:28 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * mpi-bit.c (mpi_set_bytes): Removed.
-
-Wed Aug 5 15:11:12 1998 Werner Koch (wk@(none))
-
- * mpicoder.c (mpi_read_from_buffer): New.
-
- * mpiutil.c (mpi_set_opaque): New.
- (mpi_get_opaque): New.
- (mpi_copy): Changed to support opauqe flag
- (mpi_free): Ditto.
-
-Sat Jul 4 10:11:11 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpiutil.c (mpi_clear): Reset flags.
- (mpi_set): Ditto.
- (mpi_alloc_secure): Set flag to 1 and not ored the 1 in, tsss..
-
-Fri Jun 26 11:19:06 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpiutil.c (mpi_alloc): set nbits to 0.
- (mpi_alloc_secure): Ditto.
- (mpi_clear): Ditto.
-
-Thu Jun 25 11:50:01 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mips3/*.S: New
-
-Mon May 18 13:47:06 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links: split mpih-shift into mpih-[lr]shift and
- changed all implementations.
- * mpi/alpha: add some new assembler stuff.
-
-Wed May 13 11:04:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links: Add support for MIPS
-
-Thu Apr 9 11:31:36 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpicoder.c (mpi_get_secure_buffer): New.
-
-Wed Apr 8 09:44:33 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links: Applied small fix from Ulf Möller.
-
-Mon Apr 6 12:38:52 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpicoder.c (mpi_get_buffer): Removed returned leading zeroes
- and changed all callers.
-
-Tue Mar 10 13:40:34 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpi-bit.c (mpi_clear_highbit): New.
-
-Mon Mar 2 19:29:00 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * Makefile.am (DISTCLEANFILES): New
-
-Thu Feb 26 06:48:54 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links (X86_BROKEN_ALIGN): Added for some systems.
-
-Mon Feb 23 12:21:40 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mpi/m68k/mpih-shift.S (Lspecial): Changed duplicate symbol.
-
-Mon Feb 16 13:00:27 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.links : Add detection of m68k cpus
-
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/mpi/Makefile.am b/mpi/Makefile.am
deleted file mode 100644
index 56cf47a52..000000000
--- a/mpi/Makefile.am
+++ /dev/null
@@ -1,79 +0,0 @@
-# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-
-INCLUDES = -I.. -I$(top_srcdir)/include
-CFLAGS = @CFLAGS@ @MPI_OPT_FLAGS@
-ASFLAGS = @MPI_SFLAGS@
-
-EXTRA_DIST = config.links
-DISTCLEANFILES = mpi-asm-defs.h \
- mpih-add1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S \
- mpih-lshift.S mpih-rshift.S mpih-sub1.S asm-syntax.h sysdep.h
-# Note: we only use .S files so we should delete all left over .s
-CLEANFILES = _*.s
-
-noinst_LIBRARIES = libmpi.a
-
-# libmpi_a_LDFLAGS =
-libmpi_a_SOURCES = longlong.h \
- mpi-add.c \
- mpi-bit.c \
- mpi-cmp.c \
- mpi-div.c \
- mpi-gcd.c \
- mpi-internal.h \
- mpi-inline.h \
- mpi-inline.c \
- mpi-inv.c \
- mpi-mul.c \
- mpi-pow.c \
- mpi-mpow.c \
- mpi-scan.c \
- mpicoder.c \
- mpih-cmp.c \
- mpih-div.c \
- mpih-mul.c \
- mpiutil.c \
- g10m.c
-
-# Note this objects are actually links, the sourcefiles are
-# distributed by special code in dist-hook
-common_asm_objects = mpih-mul1.o \
- mpih-mul2.o \
- mpih-mul3.o \
- mpih-add1.o \
- mpih-sub1.o \
- mpih-lshift.o \
- mpih-rshift.o
-
-libmpi_a_DEPENDENCIES = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@
-libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@
-
-# cancel the default rules used by libtool which do not really
-# work and add one to cpp .S files
-.S.o:
- $(CPP) $(INCLUDES) $(DEFS) $< | grep -v '^#' > _$*.s
- $(COMPILE) -c _$*.s
- mv -f _$*.o $*.o
-
-.S.lo:
-
-
diff --git a/mpi/alpha/README b/mpi/alpha/README
deleted file mode 100644
index 55c0a2917..000000000
--- a/mpi/alpha/README
+++ /dev/null
@@ -1,53 +0,0 @@
-This directory contains mpn functions optimized for DEC Alpha processors.
-
-RELEVANT OPTIMIZATION ISSUES
-
-EV4
-
-1. This chip has very limited store bandwidth. The on-chip L1 cache is
-write-through, and a cache line is transfered from the store buffer to the
-off-chip L2 in as much 15 cycles on most systems. This delay hurts
-mpn_add_n, mpn_sub_n, mpn_lshift, and mpn_rshift.
-
-2. Pairing is possible between memory instructions and integer arithmetic
-instructions.
-
-3. mulq and umulh is documented to have a latency of 23 cycles, but 2 of
-these cycles are pipelined. Thus, multiply instructions can be issued at a
-rate of one each 21nd cycle.
-
-EV5
-
-1. The memory bandwidth of this chip seems excellent, both for loads and
-stores. Even when the working set is larger than the on-chip L1 and L2
-caches, the perfromance remain almost unaffected.
-
-2. mulq has a measured latency of 13 cycles and an issue rate of 1 each 8th
-cycle. umulh has a measured latency of 15 cycles and an issue rate of 1
-each 10th cycle. But the exact timing is somewhat confusing.
-
-3. mpn_add_n. With 4-fold unrolling, we need 37 instructions, whereof 12
- are memory operations. This will take at least
- ceil(37/2) [dual issue] + 1 [taken branch] = 20 cycles
- We have 12 memory cycles, plus 4 after-store conflict cycles, or 16 data
- cache cycles, which should be completely hidden in the 20 issue cycles.
- The computation is inherently serial, with these dependencies:
- addq
- / \
- addq cmpult
- | |
- cmpult |
- \ /
- or
- I.e., there is a 4 cycle path for each limb, making 16 cycles the absolute
- minimum. We could replace the `or' with a cmoveq/cmovne, which would save
- a cycle on EV5, but that might waste a cycle on EV4. Also, cmov takes 2
- cycles.
- addq
- / \
- addq cmpult
- | \
- cmpult -> cmovne
-
-STATUS
-
diff --git a/mpi/alpha/distfiles b/mpi/alpha/distfiles
deleted file mode 100644
index f2ab9fc3c..000000000
--- a/mpi/alpha/distfiles
+++ /dev/null
@@ -1,11 +0,0 @@
-README
-mpih-add1.S
-mpih-sub1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-
-udiv-qrnnd.S
-
diff --git a/mpi/alpha/mpih-add1.S b/mpi/alpha/mpih-add1.S
deleted file mode 100644
index a2ee8eb17..000000000
--- a/mpi/alpha/mpih-add1.S
+++ /dev/null
@@ -1,124 +0,0 @@
-/* alpha add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- * Copyright (C) 1995, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, ($16)
- * mpi_ptr_t s1_ptr, ($17)
- * mpi_ptr_t s2_ptr, ($18)
- * mpi_size_t size) ($19)
- */
-
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_add_n
- .ent mpihelp_add_n
-mpihelp_add_n:
- .frame $30,0,$26,0
-
- ldq $3,0($17)
- ldq $4,0($18)
-
- subq $19,1,$19
- and $19,4-1,$2 # number of limbs in first loop
- bis $31,$31,$0
- beq $2,.L0 # if multiple of 4 limbs, skip first loop
-
- subq $19,$2,$19
-
-.Loop0: subq $2,1,$2
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,0($16)
- or $0,$1,$0
-
- addq $17,8,$17
- addq $18,8,$18
- bis $5,$5,$3
- bis $6,$6,$4
- addq $16,8,$16
- bne $2,.Loop0
-
-.L0: beq $19,.Lend
-
- .align 3
-.Loop: subq $19,4,$19
-
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,0($16)
- or $0,$1,$0
-
- ldq $3,16($17)
- addq $6,$0,$6
- ldq $4,16($18)
- cmpult $6,$0,$1
- addq $5,$6,$6
- cmpult $6,$5,$0
- stq $6,8($16)
- or $0,$1,$0
-
- ldq $5,24($17)
- addq $4,$0,$4
- ldq $6,24($18)
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,16($16)
- or $0,$1,$0
-
- ldq $3,32($17)
- addq $6,$0,$6
- ldq $4,32($18)
- cmpult $6,$0,$1
- addq $5,$6,$6
- cmpult $6,$5,$0
- stq $6,24($16)
- or $0,$1,$0
-
- addq $17,32,$17
- addq $18,32,$18
- addq $16,32,$16
- bne $19,.Loop
-
-.Lend: addq $4,$0,$4
- cmpult $4,$0,$1
- addq $3,$4,$4
- cmpult $4,$3,$0
- stq $4,0($16)
- or $0,$1,$0
- ret $31,($26),1
-
- .end mpihelp_add_n
-
diff --git a/mpi/alpha/mpih-lshift.S b/mpi/alpha/mpih-lshift.S
deleted file mode 100644
index 4ce4879af..000000000
--- a/mpi/alpha/mpih-lshift.S
+++ /dev/null
@@ -1,123 +0,0 @@
-/* alpha - left shift
- *
- * Copyright (C) 1994, 1995, 1998, 2001 Free Software Foundation, Inc.
- *
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (r16)
- * mpi_ptr_t up, (r17)
- * mpi_size_t usize, (r18)
- * unsigned cnt) (r19)
- *
- * This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling,
- * it would take 4 cycles/limb. It should be possible to get down to 3
- * cycles/limb since both ldq and stq can be paired with the other used
- * instructions. But there are many restrictions in the 21064 pipeline that
- * makes it hard, if not impossible, to get down to 3 cycles/limb:
- *
- * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay.
- * 2. Only aligned instruction pairs can be paired.
- * 3. The store buffer or silo might not be able to deal with the bandwidth.
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_lshift
- .ent mpihelp_lshift
-mpihelp_lshift:
- .frame $30,0,$26,0
-
- s8addq $18,$17,$17 # make r17 point at end of s1
- ldq $4,-8($17) # load first limb
- subq $17,8,$17
- subq $31,$19,$7
- s8addq $18,$16,$16 # make r16 point at end of RES
- subq $18,1,$18
- and $18,4-1,$20 # number of limbs in first loop
- srl $4,$7,$0 # compute function result
-
- beq $20,.L0
- subq $18,$20,$18
-
- .align 3
-.Loop0:
- ldq $3,-8($17)
- subq $16,8,$16
- subq $17,8,$17
- subq $20,1,$20
- sll $4,$19,$5
- srl $3,$7,$6
- bis $3,$3,$4
- bis $5,$6,$8
- stq $8,0($16)
- bne $20,.Loop0
-
-.L0: beq $18,.Lend
-
- .align 3
-.Loop: ldq $3,-8($17)
- subq $16,32,$16
- subq $18,4,$18
- sll $4,$19,$5
- srl $3,$7,$6
-
- ldq $4,-16($17)
- sll $3,$19,$1
- bis $5,$6,$8
- stq $8,24($16)
- srl $4,$7,$2
-
- ldq $3,-24($17)
- sll $4,$19,$5
- bis $1,$2,$8
- stq $8,16($16)
- srl $3,$7,$6
-
- ldq $4,-32($17)
- sll $3,$19,$1
- bis $5,$6,$8
- stq $8,8($16)
- srl $4,$7,$2
-
- subq $17,32,$17
- bis $1,$2,$8
- stq $8,0($16)
-
- bgt $18,.Loop
-
-.Lend: sll $4,$19,$8
- stq $8,-8($16)
- ret $31,($26),1
- .end mpihelp_lshift
-
-
diff --git a/mpi/alpha/mpih-mul1.S b/mpi/alpha/mpih-mul1.S
deleted file mode 100644
index e62ccbdb7..000000000
--- a/mpi/alpha/mpih-mul1.S
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Alpha 21064 mpih-mul1.S -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (r16)
- * mpi_ptr_t s1_ptr, (r17)
- * mpi_size_t s1_size, (r18)
- * mpi_limb_t s2_limb) (r19)
- *
- * This code runs at 42 cycles/limb on the EV4 and 18 cycles/limb on the EV5.
- *
- * To improve performance for long multiplications, we would use
- * 'fetch' for S1 and 'fetch_m' for RES. It's not obvious how to use
- * these instructions without slowing down the general code: 1. We can
- * only have two prefetches in operation at any time in the Alpha
- * architecture. 2. There will seldom be any special alignment
- * between RES_PTR and S1_PTR. Maybe we can simply divide the current
- * loop into an inner and outer loop, having the inner loop handle
- * exactly one prefetch block?
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_mul_1
- .ent mpihelp_mul_1 2
-mpihelp_mul_1:
- .frame $30,0,$26
-
- ldq $2,0($17) # $2 = s1_limb
- subq $18,1,$18 # size--
- mulq $2,$19,$3 # $3 = prod_low
- bic $31,$31,$4 # clear cy_limb
- umulh $2,$19,$0 # $0 = prod_high
- beq $18,Lend1 # jump if size was == 1
- ldq $2,8($17) # $2 = s1_limb
- subq $18,1,$18 # size--
- stq $3,0($16)
- beq $18,Lend2 # jump if size was == 2
-
- .align 3
-Loop: mulq $2,$19,$3 # $3 = prod_low
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- subq $18,1,$18 # size--
- umulh $2,$19,$4 # $4 = cy_limb
- ldq $2,16($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- stq $3,8($16)
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- addq $16,8,$16 # res_ptr++
- bne $18,Loop
-
-Lend2: mulq $2,$19,$3 # $3 = prod_low
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- umulh $2,$19,$4 # $4 = cy_limb
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- stq $3,8($16)
- addq $4,$0,$0 # cy_limb = prod_high + cy
- ret $31,($26),1
-Lend1: stq $3,0($16)
- ret $31,($26),1
-
- .end mpihelp_mul_1
-
-
diff --git a/mpi/alpha/mpih-mul2.S b/mpi/alpha/mpih-mul2.S
deleted file mode 100644
index 595af99d3..000000000
--- a/mpi/alpha/mpih-mul2.S
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Alpha 21064 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r16)
- * mpi_ptr_t s1_ptr, (r17)
- * mpi_size_t s1_size, (r18)
- * mpi_limb_t s2_limb) (r19)
- *
- * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
- */
-
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_addmul_1
- .ent mpihelp_addmul_1 2
-mpihelp_addmul_1:
- .frame $30,0,$26
-
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- umulh $2,$19,$0 # $0 = prod_high
- beq $18,.Lend1 # jump if size was == 1
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- addq $5,$3,$3
- cmpult $3,$5,$4
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- beq $18,.Lend2 # jump if size was == 2
-
- .align 3
-.Loop: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- subq $18,1,$18 # size--
- umulh $2,$19,$4 # $4 = cy_limb
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- addq $5,$3,$3
- cmpult $3,$5,$5
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- addq $5,$0,$0 # combine carries
- bne $18,.Loop
-
-.Lend2: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- umulh $2,$19,$4 # $4 = cy_limb
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- addq $5,$3,$3
- cmpult $3,$5,$5
- stq $3,0($16)
- addq $5,$0,$0 # combine carries
- addq $4,$0,$0 # cy_limb = prod_high + cy
- ret $31,($26),1
-.Lend1: addq $5,$3,$3
- cmpult $3,$5,$5
- stq $3,0($16)
- addq $0,$5,$0
- ret $31,($26),1
-
- .end mpihelp_addmul_1
-
diff --git a/mpi/alpha/mpih-mul3.S b/mpi/alpha/mpih-mul3.S
deleted file mode 100644
index fa3df92a5..000000000
--- a/mpi/alpha/mpih-mul3.S
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Alpha 21064 submul_1 -- Multiply a limb vector with a limb and
- * subtract the result from a second limb vector.
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (r16 )
- * mpi_ptr_t s1_ptr, (r17 )
- * mpi_size_t s1_size, (r18 )
- * mpi_limb_t s2_limb) (r19 )
- *
- * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5.
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_submul_1
- .ent mpihelp_submul_1 2
-mpihelp_submul_1:
- .frame $30,0,$26
-
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- umulh $2,$19,$0 # $0 = prod_high
- beq $18,.Lend1 # jump if size was == 1
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- subq $18,1,$18 # size--
- subq $5,$3,$3
- cmpult $5,$3,$4
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- beq $18,.Lend2 # jump if size was == 2
-
- .align 3
-.Loop: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- subq $18,1,$18 # size--
- umulh $2,$19,$4 # $4 = cy_limb
- ldq $2,0($17) # $2 = s1_limb
- addq $17,8,$17 # s1_ptr++
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- subq $5,$3,$3
- cmpult $5,$3,$5
- stq $3,0($16)
- addq $16,8,$16 # res_ptr++
- addq $5,$0,$0 # combine carries
- bne $18,.Loop
-
-.Lend2: mulq $2,$19,$3 # $3 = prod_low
- ldq $5,0($16) # $5 = *res_ptr
- addq $4,$0,$0 # cy_limb = cy_limb + 'cy'
- umulh $2,$19,$4 # $4 = cy_limb
- addq $3,$0,$3 # $3 = cy_limb + prod_low
- cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low)
- subq $5,$3,$3
- cmpult $5,$3,$5
- stq $3,0($16)
- addq $5,$0,$0 # combine carries
- addq $4,$0,$0 # cy_limb = prod_high + cy
- ret $31,($26),1
-.Lend1: subq $5,$3,$3
- cmpult $5,$3,$5
- stq $3,0($16)
- addq $0,$5,$0
- ret $31,($26),1
-
- .end mpihelp_submul_1
-
diff --git a/mpi/alpha/mpih-rshift.S b/mpi/alpha/mpih-rshift.S
deleted file mode 100644
index e15542de5..000000000
--- a/mpi/alpha/mpih-rshift.S
+++ /dev/null
@@ -1,120 +0,0 @@
-/* alpha rshift
- * Copyright (C) 1994, 1995, 1998, 1999,
- * 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (r16)
- * mpi_ptr_t up, (r17)
- * mpi_size_t usize, (r18)
- * unsigned cnt) (r19)
- *
- * This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling,
- * it would take 4 cycles/limb. It should be possible to get down to 3
- * cycles/limb since both ldq and stq can be paired with the other used
- * instructions. But there are many restrictions in the 21064 pipeline that
- * makes it hard, if not impossible, to get down to 3 cycles/limb:
- *
- * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay.
- * 2. Only aligned instruction pairs can be paired.
- * 3. The store buffer or silo might not be able to deal with the bandwidth.
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_rshift
- .ent mpihelp_rshift
-mpihelp_rshift:
- .frame $30,0,$26,0
-
- ldq $4,0($17) # load first limb
- addq $17,8,$17
- subq $31,$19,$7
- subq $18,1,$18
- and $18,4-1,$20 # number of limbs in first loop
- sll $4,$7,$0 # compute function result
-
- beq $20,.R0
- subq $18,$20,$18
-
- .align 3
-.Roop0:
- ldq $3,0($17)
- addq $16,8,$16
- addq $17,8,$17
- subq $20,1,$20
- srl $4,$19,$5
- sll $3,$7,$6
- bis $3,$3,$4
- bis $5,$6,$8
- stq $8,-8($16)
- bne $20,.Roop0
-
-.R0: beq $18,.Rend
-
- .align 3
-.Roop: ldq $3,0($17)
- addq $16,32,$16
- subq $18,4,$18
- srl $4,$19,$5
- sll $3,$7,$6
-
- ldq $4,8($17)
- srl $3,$19,$1
- bis $5,$6,$8
- stq $8,-32($16)
- sll $4,$7,$2
-
- ldq $3,16($17)
- srl $4,$19,$5
- bis $1,$2,$8
- stq $8,-24($16)
- sll $3,$7,$6
-
- ldq $4,24($17)
- srl $3,$19,$1
- bis $5,$6,$8
- stq $8,-16($16)
- sll $4,$7,$2
-
- addq $17,32,$17
- bis $1,$2,$8
- stq $8,-8($16)
-
- bgt $18,.Roop
-
-.Rend: srl $4,$19,$8
- stq $8,0($16)
- ret $31,($26),1
- .end mpihelp_rshift
-
diff --git a/mpi/alpha/mpih-sub1.S b/mpi/alpha/mpih-sub1.S
deleted file mode 100644
index a32b470e2..000000000
--- a/mpi/alpha/mpih-sub1.S
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Alpha sub_n -- Subtract two limb vectors of the same length > 0 and
- * store difference in a third limb vector.
- * Copyright (C) 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (r16)
- * mpi_ptr_t s1_ptr, (r17)
- * mpi_ptr_t s2_ptr, (r18)
- * mpi_size_t size) (r19)
- */
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl mpihelp_sub_n
- .ent mpihelp_sub_n
-mpihelp_sub_n:
- .frame $30,0,$26,0
-
- ldq $3,0($17)
- ldq $4,0($18)
-
- subq $19,1,$19
- and $19,4-1,$2 # number of limbs in first loop
- bis $31,$31,$0
- beq $2,.L0 # if multiple of 4 limbs, skip first loop
-
- subq $19,$2,$19
-
-.Loop0: subq $2,1,$2
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,0($16)
- or $0,$1,$0
-
- addq $17,8,$17
- addq $18,8,$18
- bis $5,$5,$3
- bis $6,$6,$4
- addq $16,8,$16
- bne $2,.Loop0
-
-.L0: beq $19,.Lend
-
- .align 3
-.Loop: subq $19,4,$19
-
- ldq $5,8($17)
- addq $4,$0,$4
- ldq $6,8($18)
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,0($16)
- or $0,$1,$0
-
- ldq $3,16($17)
- addq $6,$0,$6
- ldq $4,16($18)
- cmpult $6,$0,$1
- subq $5,$6,$6
- cmpult $5,$6,$0
- stq $6,8($16)
- or $0,$1,$0
-
- ldq $5,24($17)
- addq $4,$0,$4
- ldq $6,24($18)
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,16($16)
- or $0,$1,$0
-
- ldq $3,32($17)
- addq $6,$0,$6
- ldq $4,32($18)
- cmpult $6,$0,$1
- subq $5,$6,$6
- cmpult $5,$6,$0
- stq $6,24($16)
- or $0,$1,$0
-
- addq $17,32,$17
- addq $18,32,$18
- addq $16,32,$16
- bne $19,.Loop
-
-.Lend: addq $4,$0,$4
- cmpult $4,$0,$1
- subq $3,$4,$4
- cmpult $3,$4,$0
- stq $4,0($16)
- or $0,$1,$0
- ret $31,($26),1
-
- .end mpihelp_sub_n
-
-
diff --git a/mpi/alpha/udiv-qrnnd.S b/mpi/alpha/udiv-qrnnd.S
deleted file mode 100644
index 0079c3cae..000000000
--- a/mpi/alpha/udiv-qrnnd.S
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Alpha 21064 __udiv_qrnnd
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
- .set noreorder
- .set noat
-.text
- .align 3
- .globl __udiv_qrnnd
- .ent __udiv_qrnnd
-__udiv_qrnnd:
- .frame $30,0,$26,0
- .prologue 0
-#define cnt $2
-#define tmp $3
-#define rem_ptr $16
-#define n1 $17
-#define n0 $18
-#define d $19
-#define qb $20
-
- ldiq cnt,16
- blt d,.Largedivisor
-
-.Loop1: cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule d,n1,qb
- subq n1,d,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- subq cnt,1,cnt
- bgt cnt,.Loop1
- stq n1,0(rem_ptr)
- bis $31,n0,$0
- ret $31,($26),1
-
-.Largedivisor:
- and n0,1,$4
-
- srl n0,1,n0
- sll n1,63,tmp
- or tmp,n0,n0
- srl n1,1,n1
-
- and d,1,$6
- srl d,1,$5
- addq $5,$6,$5
-
-.Loop2: cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- cmplt n0,0,tmp
- addq n1,n1,n1
- bis n1,tmp,n1
- addq n0,n0,n0
- cmpule $5,n1,qb
- subq n1,$5,tmp
- cmovne qb,tmp,n1
- bis n0,qb,n0
- subq cnt,1,cnt
- bgt cnt,.Loop2
-
- addq n1,n1,n1
- addq $4,n1,n1
- bne $6,.LOdd
- stq n1,0(rem_ptr)
- bis $31,n0,$0
- ret $31,($26),1
-
-.LOdd:
- /* q' in n0. r' in n1 */
- addq n1,n0,n1
- cmpult n1,n0,tmp # tmp := carry from addq
- beq tmp,.LLp6
- addq n0,1,n0
- subq n1,d,n1
-.LLp6: cmpult n1,d,tmp
- bne tmp,.LLp7
- addq n0,1,n0
- subq n1,d,n1
-.LLp7:
- stq n1,0(rem_ptr)
- bis $31,n0,$0
- ret $31,($26),1
-
- .end __udiv_qrnnd
diff --git a/mpi/config.links b/mpi/config.links
deleted file mode 100644
index 7350a76b0..000000000
--- a/mpi/config.links
+++ /dev/null
@@ -1,328 +0,0 @@
-# config.links - helper for ../configure
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-# sourced by ../configure to get the list of files to link
-# this should set $mpi_ln_list.
-# Note: this is called from the above directory.
-
-
-mpi_extra_modules=
-mpi_sflags=
-
-test -d ./mpi || mkdir ./mpi
-
-echo '/* created by config.links - do not edit */' >./mpi/asm-syntax.h
-
-if test "$try_asm_modules" = "yes" ; then
-case "${target}" in
- powerpc-apple-darwin6.1)
- echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h
- path=""
- ;;
-
- i[3467]86*-*-freebsd*-elf | \
- i[3467]86*-*-freebsd[3-9]* | \
- i[3467]86*-*-freebsdelf* | \
- i[3467]86*-*-netbsd* )
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
- i586*-*-freebsd*-elf | \
- i586*-*-freebsd[3-9]* | \
- i586*-*-freebsdelf* | \
- i586*-*-netbsd* | \
- pentium-*-netbsd* | \
- pentiumpro-*-netbsd*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i586 i386"
- ;;
- i[34]86*-*-bsdi4*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
-# Use old assembler syntax for OpenBSD as their assembler is really old.
- i[34567]86*-*-openbsd*)
- echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
- echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386-openbsd/syntax.h >>./mpi/asm-syntax.h
- path="i386-openbsd"
- ;;
- i[3467]86*-*-linuxaout* | \
- i[3467]86*-*-linuxoldld* | \
- i[3467]86*-*-*bsd*)
- echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
- echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
- i586*-*-linuxaout* | \
- i586*-*-linuxoldld* | \
- i586*-*-*bsd*)
- echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
- echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i586 i386"
- ;;
- i[3467]86*-msdosdjgpp*)
- echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
- i586*-msdosdjgpp*)
- echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i586 i386"
- ;;
- i[3467]86*-*-*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i386"
- ;;
- i586*-*-* | \
- pentium-*-* | \
- pentiumpro-*-*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h
- path="i586 i386"
- ;;
- alpha*-*-*)
- echo '/* configured for alpha */' >>./mpi/asm-syntax.h
- path="alpha"
- mpi_extra_modules="udiv-qrnnd"
- ;;
- hppa7000*-*-*)
- echo '/* configured for HPPA (pa7000) */' >>./mpi/asm-syntax.h
- path="hppa1.1 hppa"
- mpi_extra_modules="udiv-qrnnd"
- ;;
- hppa1.0*-*-*)
- echo '/* configured for HPPA 1.0 */' >>./mpi/asm-syntax.h
- path="hppa"
- mpi_extra_modules="udiv-qrnnd"
- ;;
- hppa*-*-*) # assume pa7100
- echo '/* configured for HPPA (pa7100) */' >>./mpi/asm-syntax.h
- path="pa7100 hppa1.1 hppa"
- mpi_extra_modules="udiv-qrnnd"
- ;;
- sparc64-*-linux-gnu)
- # An extra rule because we have an report for this one only.
- # Should be compared against the next GMP version
- echo '/* configured for sparc64-*-linux-gnu */' >>./mpi/asm-syntax.h
- path="sparc32v8 sparc32"
- mpi_extra_modules="udiv"
- ;;
- sparc64-sun-solaris2*)
- # Got a report that udiv is missing, so we try this one
- echo '/* configured for sparc64-sun-solaris2 */' >>./mpi/asm-syntax.h
- path="sparc32v8 sparc32"
- mpi_extra_modules="udiv"
- ;;
- sparc64-*-netbsd)
- # There are no sparc64 assembler modules that work, so
- # just use generic C functions
- echo '/* configured for sparc64-*netbsd */' >>./mpi/asm-syntax.h
- path=""
- ;;
- sparc9*-*-* | \
- sparc64*-*-* | \
- ultrasparc*-*-* )
- echo '/* configured for sparc9 or higher */' >>./mpi/asm-syntax.h
- path="sparc32v8 sparc32"
- ;;
- sparc8*-*-* | \
- microsparc*-*-*)
- echo '/* configured for sparc8 */' >>./mpi/asm-syntax.h
- path="sparc32v8 sparc32"
- ;;
- supersparc*-*-*)
- echo '/* configured for supersparc */' >>./mpi/asm-syntax.h
- path="supersparc sparc32v8 sparc32"
- mpi_extra_modules="udiv"
- ;;
- sparc*-*-*)
- echo '/* configured for sparc */' >>./mpi/asm-syntax.h
- path="sparc32"
- mpi_extra_modules="udiv"
- ;;
- mips[34]*-*-* | \
- mips*-*-irix6*)
- echo '/* configured for MIPS3 */' >>./mpi/asm-syntax.h
- path="mips3"
- ;;
- mips*-*-*)
- echo '/* configured for MIPS2 */' >>./mpi/asm-syntax.h
- path="mips2"
- ;;
-
- # Motorola 68k configurations. Let m68k mean 68020-68040.
- # mc68000 or mc68060 configurations need to be specified explicitly
- m680[234]0*-*-linuxaout* | \
- m68k*-*-linuxaout*)
- echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- path="m68k/mc68020 m68k"
- ;;
- m68060*-*-linuxaout*)
- echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- path="m68k"
- ;;
- m680[234]0*-*-linux* | \
- m68k*-*-linux*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- ;;
- m68060*-*-linux*)
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- path="m68k"
- ;;
- m68k-atari-mint)
- echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- path="m68k/mc68020 m68k"
- ;;
- m68000*-*-* | \
- m68060*-*-*)
- echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- path="m68k/mc68000"
- ;;
- m680[234]0*-*-* | \
- m68k*-*-*)
- echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h
- path="m68k/mc68020 m68k"
- ;;
-
- powerpc*-*-linux*)
- echo '/* configured for powerpc/ELF */' >>./mpi/asm-syntax.h
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/powerpc32/syntax.h >>./mpi/asm-syntax.h
- path="powerpc32"
- ;;
-
- powerpc*-*-netbsd* | powerpc*-*-openbsd*)
- echo '/* configured {Open,Net}BSD on powerpc */' >>./mpi/asm-syntax.h
- echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h
- cat $srcdir/mpi/powerpc32/syntax.h >>./mpi/asm-syntax.h
- mpi_sflags="-Wa,-mppc"
- path="powerpc32"
- ;;
-
- rs6000-*-aix[456789]* | \
- rs6000-*-aix3.2.[456789])
- mpi_sflags="-Wa,-mpwr"
- path="power"
- mpi_extra_modules="udiv-w-sdiv"
- ;;
- rs6000-*-* | \
- power-*-* | \
- power2-*-*)
- mpi_sflags="-Wa,-mppc"
- path="power"
- mpi_extra_modules="udiv-w-sdiv"
- ;;
- powerpc-ibm-aix4.2.* )
- # I am not sure about this one but a machine identified by
- # powerpc-ibm-aix4.2.1.0 cannot use the powerpc32 code.
- mpi_sflags="-Wa,-mpwr"
- path="power"
- mpi_extra_modules="udiv-w-sdiv"
- ;;
- ppc601-*-*)
- mpi_sflags="-Wa,-mppc"
- path="power powerpc32"
- ;;
- ppc60[234]*-*-* | \
- powerpc*-*-*)
- mpi_sflags="-Wa,-mppc"
- path="powerpc32"
- ;;
- ppc620-*-* | \
- powerpc64*-*-*)
- mpi_sflags="-Wa,-mppc"
- path="powerpc64"
- ;;
-
- *)
- echo '/* No assembler modules configured */' >>./mpi/asm-syntax.h
- path=""
- ;;
-esac
-else
- echo '/* Assembler modules disabled on request */' >>./mpi/asm-syntax.h
- path=""
-fi
-
-
-# Make sysdep.h
-echo '/* created by config.links - do not edit */' >./mpi/sysdep.h
-if test x$ac_cv_sys_symbol_underscore = xyes; then
- cat <<EOF >>./mpi/sysdep.h
-#if __STDC__
-#define C_SYMBOL_NAME(name) _##name
-#else
-#define C_SYMBOL_NAME(name) _/**/name
-#endif
-EOF
-else
- cat <<EOF >>./mpi/sysdep.h
-#define C_SYMBOL_NAME(name) name
-EOF
-fi
-
-
-# fixme: grep these modules from Makefile.in
-mpi_ln_modules="${mpi_extra_modules} mpih-add1 mpih-mul1 mpih-mul2 mpih-mul3 \
- mpih-lshift mpih-rshift mpih-sub1"
-
-mpi_ln_objects=
-mpi_ln_list=
-
-# try to get file to link from the assembler subdirectory and
-# if this fails get it from the generic subdirectory.
-path="$path generic"
-for fn in $mpi_ln_modules ; do
- mpi_ln_objects="$mpi_ln_objects $fn.o"
- for dir in $path ; do
- rm -f $srcdir/mpi/$fn.[Sc]
- if test -f $srcdir/mpi/$dir/$fn.S ; then
- mpi_ln_list="$mpi_ln_list mpi/$fn.S:mpi/$dir/$fn.S"
- break;
- elif test -f $srcdir/mpi/$dir/$fn.c ; then
- mpi_ln_list="$mpi_ln_list mpi/$fn.c:mpi/$dir/$fn.c"
- break;
- fi
- done
-done
-
-# Same thing for the file which defines the limb size
-path="$path generic"
-for dir in $path ; do
- rm -f $srcdir/mpi/mpi-asm-defs.h
- if test -f $srcdir/mpi/$dir/mpi-asm-defs.h ; then
- mpi_ln_list="$mpi_ln_list mpi/mpi-asm-defs.h:mpi/$dir/mpi-asm-defs.h"
- break;
- fi
-done
diff --git a/mpi/g10m.c b/mpi/g10m.c
deleted file mode 100644
index ea6696dc7..000000000
--- a/mpi/g10m.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* g10m.c - Wrapper for MPI
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi.h"
-#include "util.h"
-
-/* FIXME: The modules should use functions from libgcrypt */
-
-const char *g10m_revision_string(int dummy) { return "$Revision$"; }
-
-MPI
-g10m_new( unsigned nbits )
-{
- return mpi_alloc( (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
-}
-
-MPI
-g10m_new_secure( unsigned nbits )
-{
- return mpi_alloc_secure( (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
-}
-
-void
-g10m_release( MPI a )
-{
- mpi_free(a);
-}
-
-void
-g10m_resize( MPI a, unsigned nbits )
-{
- mpi_resize( a, (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB );
-}
-
-MPI g10m_copy( MPI a ) { return mpi_copy( a ); }
-void g10m_swap( MPI a, MPI b) { mpi_swap( a, b ); }
-void g10m_set( MPI w, MPI u) { mpi_set( w, u ); }
-void g10m_set_ui( MPI w, ulong u ) { mpi_set_ui( w, u ); }
-
-int g10m_cmp( MPI u, MPI v ) { return mpi_cmp( u, v ); }
-int g10m_cmp_ui( MPI u, ulong v ) { return mpi_cmp_ui( u, v ); }
-
-void g10m_add(MPI w, MPI u, MPI v) { mpi_add( w, u, v ); }
-void g10m_add_ui(MPI w, MPI u, ulong v ) { mpi_add_ui( w, u, v ); }
-void g10m_sub( MPI w, MPI u, MPI v) { mpi_sub( w, u, v ); }
-void g10m_sub_ui(MPI w, MPI u, ulong v ) { mpi_sub_ui( w, u, v ); }
-
-void g10m_mul( MPI w, MPI u, MPI v) { mpi_mul( w, u, v ); }
-void g10m_mulm( MPI w, MPI u, MPI v, MPI m) { mpi_mulm( w, u, v, m ); }
-void g10m_mul_2exp( MPI w, MPI u, ulong cnt) { mpi_mul_2exp( w, u, cnt ); }
-void g10m_mul_ui(MPI w, MPI u, ulong v ) { mpi_mul_ui( w, u, v ); }
-
-void g10m_fdiv_q( MPI q, MPI d, MPI r ) { mpi_fdiv_q( q, d, r ); }
-
-void g10m_powm( MPI r, MPI b, MPI e, MPI m) { mpi_powm( r, b, e, m ); }
-
-int g10m_gcd( MPI g, MPI a, MPI b ) { return mpi_gcd( g, a, b ); }
-int g10m_invm( MPI x, MPI u, MPI v ) { mpi_invm( x, u, v ); return 0; }
-
-unsigned g10m_get_nbits( MPI a ) { return mpi_get_nbits( a ); }
-
-unsigned
-g10m_get_size( MPI a )
-{
- return mpi_get_nlimbs( a ) * BITS_PER_MPI_LIMB;
-}
-
-
-void
-g10m_set_buffer( MPI a, const char *buffer, unsigned nbytes, int sign )
-{
- mpi_set_buffer( a, buffer, nbytes, sign );
-}
-
-
diff --git a/mpi/generic/distfiles b/mpi/generic/distfiles
deleted file mode 100644
index 649e829b7..000000000
--- a/mpi/generic/distfiles
+++ /dev/null
@@ -1,10 +0,0 @@
-mpih-add1.c
-mpih-mul1.c
-mpih-mul2.c
-mpih-mul3.c
-mpih-lshift.c
-mpih-rshift.c
-mpih-sub1.c
-udiv-w-sdiv.c
-mpi-asm-defs.h
-
diff --git a/mpi/generic/mpi-asm-defs.h b/mpi/generic/mpi-asm-defs.h
deleted file mode 100644
index 13424e280..000000000
--- a/mpi/generic/mpi-asm-defs.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* This file defines some basic constants for the MPI machinery. We
- * need to define the types on a per-CPU basis, so it is done with
- * this file here. */
-#define BYTES_PER_MPI_LIMB (SIZEOF_UNSIGNED_LONG)
-
-
-
-
-
-
diff --git a/mpi/generic/mpih-add1.c b/mpi/generic/mpih-add1.c
deleted file mode 100644
index d9c3cbb66..000000000
--- a/mpi/generic/mpih-add1.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* mpihelp-add_1.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1997, 1998,
- * 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-mpi_limb_t
-mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_ptr_t s2_ptr, mpi_size_t size)
-{
- mpi_limb_t x, y, cy;
- mpi_size_t j;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- the loop becomes faster. */
- j = -size;
-
- /* Offset the base pointers to compensate for the negative indices. */
- s1_ptr -= j;
- s2_ptr -= j;
- res_ptr -= j;
-
- cy = 0;
- do {
- y = s2_ptr[j];
- x = s1_ptr[j];
- y += cy; /* add previous carry to one addend */
- cy = y < cy; /* get out carry from that addition */
- y += x; /* add other addend */
- cy += y < x; /* get out carry from that add, combine */
- res_ptr[j] = y;
- } while( ++j );
-
- return cy;
-}
-
diff --git a/mpi/generic/mpih-lshift.c b/mpi/generic/mpih-lshift.c
deleted file mode 100644
index fba8c052e..000000000
--- a/mpi/generic/mpih-lshift.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* mpihelp-lshift.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
- * and store the USIZE least significant digits of the result at WP.
- * Return the bits shifted out from the most significant digit.
- *
- * Argument constraints:
- * 1. 0 < CNT < BITS_PER_MP_LIMB
- * 2. If the result is to be written over the input, WP must be >= UP.
- */
-
-mpi_limb_t
-mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
- unsigned int cnt)
-{
- mpi_limb_t high_limb, low_limb;
- unsigned sh_1, sh_2;
- mpi_size_t i;
- mpi_limb_t retval;
-
- sh_1 = cnt;
- wp += 1;
- sh_2 = BITS_PER_MPI_LIMB - sh_1;
- i = usize - 1;
- low_limb = up[i];
- retval = low_limb >> sh_2;
- high_limb = low_limb;
- while( --i >= 0 ) {
- low_limb = up[i];
- wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
- high_limb = low_limb;
- }
- wp[i] = high_limb << sh_1;
-
- return retval;
-}
-
-
diff --git a/mpi/generic/mpih-mul1.c b/mpi/generic/mpih-mul1.c
deleted file mode 100644
index 83a81add0..000000000
--- a/mpi/generic/mpih-mul1.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* mpihelp-mul_1.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-mpi_limb_t
-mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_limb_t s2_limb)
-{
- mpi_limb_t cy_limb;
- mpi_size_t j;
- mpi_limb_t prod_high, prod_low;
-
- /* The loop counter and index J goes from -S1_SIZE to -1. This way
- * the loop becomes faster. */
- j = -s1_size;
-
- /* Offset the base pointers to compensate for the negative indices. */
- s1_ptr -= j;
- res_ptr -= j;
-
- cy_limb = 0;
- do {
- umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb );
- prod_low += cy_limb;
- cy_limb = (prod_low < cy_limb?1:0) + prod_high;
- res_ptr[j] = prod_low;
- } while( ++j );
-
- return cy_limb;
-}
-
diff --git a/mpi/generic/mpih-mul2.c b/mpi/generic/mpih-mul2.c
deleted file mode 100644
index ff8f998f2..000000000
--- a/mpi/generic/mpih-mul2.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* mpihelp-mul_2.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-mpi_limb_t
-mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t cy_limb;
- mpi_size_t j;
- mpi_limb_t prod_high, prod_low;
- mpi_limb_t x;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- * the loop becomes faster. */
- j = -s1_size;
- res_ptr -= j;
- s1_ptr -= j;
-
- cy_limb = 0;
- do {
- umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb );
-
- prod_low += cy_limb;
- cy_limb = (prod_low < cy_limb?1:0) + prod_high;
-
- x = res_ptr[j];
- prod_low = x + prod_low;
- cy_limb += prod_low < x?1:0;
- res_ptr[j] = prod_low;
- } while ( ++j );
- return cy_limb;
-}
-
-
diff --git a/mpi/generic/mpih-mul3.c b/mpi/generic/mpih-mul3.c
deleted file mode 100644
index 80eedcc4c..000000000
--- a/mpi/generic/mpih-mul3.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* mpihelp-mul_3.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-mpi_limb_t
-mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t cy_limb;
- mpi_size_t j;
- mpi_limb_t prod_high, prod_low;
- mpi_limb_t x;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- * the loop becomes faster. */
- j = -s1_size;
- res_ptr -= j;
- s1_ptr -= j;
-
- cy_limb = 0;
- do {
- umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb);
-
- prod_low += cy_limb;
- cy_limb = (prod_low < cy_limb?1:0) + prod_high;
-
- x = res_ptr[j];
- prod_low = x - prod_low;
- cy_limb += prod_low > x?1:0;
- res_ptr[j] = prod_low;
- } while( ++j );
-
- return cy_limb;
-}
-
-
diff --git a/mpi/generic/mpih-rshift.c b/mpi/generic/mpih-rshift.c
deleted file mode 100644
index be73adfb8..000000000
--- a/mpi/generic/mpih-rshift.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* mpih-rshift.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1998, 1999,
- * 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GNUPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-
-/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
- * and store the USIZE least significant limbs of the result at WP.
- * The bits shifted out to the right are returned.
- *
- * Argument constraints:
- * 1. 0 < CNT < BITS_PER_MP_LIMB
- * 2. If the result is to be written over the input, WP must be <= UP.
- */
-
-mpi_limb_t
-mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt)
-{
- mpi_limb_t high_limb, low_limb;
- unsigned sh_1, sh_2;
- mpi_size_t i;
- mpi_limb_t retval;
-
- sh_1 = cnt;
- wp -= 1;
- sh_2 = BITS_PER_MPI_LIMB - sh_1;
- high_limb = up[0];
- retval = high_limb << sh_2;
- low_limb = high_limb;
- for( i=1; i < usize; i++) {
- high_limb = up[i];
- wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
- low_limb = high_limb;
- }
- wp[i] = low_limb >> sh_1;
-
- return retval;
-}
-
diff --git a/mpi/generic/mpih-sub1.c b/mpi/generic/mpih-sub1.c
deleted file mode 100644
index c618fee49..000000000
--- a/mpi/generic/mpih-sub1.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* mpihelp-add_2.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-mpi_limb_t
-mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_ptr_t s2_ptr, mpi_size_t size)
-{
- mpi_limb_t x, y, cy;
- mpi_size_t j;
-
- /* The loop counter and index J goes from -SIZE to -1. This way
- the loop becomes faster. */
- j = -size;
-
- /* Offset the base pointers to compensate for the negative indices. */
- s1_ptr -= j;
- s2_ptr -= j;
- res_ptr -= j;
-
- cy = 0;
- do {
- y = s2_ptr[j];
- x = s1_ptr[j];
- y += cy; /* add previous carry to subtrahend */
- cy = y < cy; /* get out carry from that addition */
- y = x - y; /* main subtract */
- cy += y > x; /* get out carry from the subtract, combine */
- res_ptr[j] = y;
- } while( ++j );
-
- return cy;
-}
-
-
diff --git a/mpi/generic/udiv-w-sdiv.c b/mpi/generic/udiv-w-sdiv.c
deleted file mode 100644
index dd0285037..000000000
--- a/mpi/generic/udiv-w-sdiv.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* mpihelp_udiv_w_sdiv -- implement udiv_qrnnd on machines with only signed
- * division.
- * Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
- * Contributed by Peter L. Montgomery.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-#if 0 /* not yet ported to MPI */
-
-mpi_limb_t
-mpihelp_udiv_w_sdiv( mpi_limp_t *rp,
- mpi_limp_t *a1,
- mpi_limp_t *a0,
- mpi_limp_t *d )
-{
- mp_limb_t q, r;
- mp_limb_t c0, c1, b1;
-
- if ((mpi_limb_signed_t) d >= 0)
- {
- if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 1)))
- {
- /* dividend, divisor, and quotient are nonnegative */
- sdiv_qrnnd (q, r, a1, a0, d);
- }
- else
- {
- /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */
- sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (BITS_PER_MP_LIMB - 1));
- /* Divide (c1*2^32 + c0) by d */
- sdiv_qrnnd (q, r, c1, c0, d);
- /* Add 2^31 to quotient */
- q += (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1);
- }
- }
- else
- {
- b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */
- c1 = a1 >> 1; /* A/2 */
- c0 = (a1 << (BITS_PER_MP_LIMB - 1)) + (a0 >> 1);
-
- if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */
- {
- sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */
-
- r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */
- if ((d & 1) != 0)
- {
- if (r >= q)
- r = r - q;
- else if (q - r <= d)
- {
- r = r - q + d;
- q--;
- }
- else
- {
- r = r - q + 2*d;
- q -= 2;
- }
- }
- }
- else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */
- {
- c1 = (b1 - 1) - c1;
- c0 = ~c0; /* logical NOT */
-
- sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */
-
- q = ~q; /* (A/2)/b1 */
- r = (b1 - 1) - r;
-
- r = 2*r + (a0 & 1); /* A/(2*b1) */
-
- if ((d & 1) != 0)
- {
- if (r >= q)
- r = r - q;
- else if (q - r <= d)
- {
- r = r - q + d;
- q--;
- }
- else
- {
- r = r - q + 2*d;
- q -= 2;
- }
- }
- }
- else /* Implies c1 = b1 */
- { /* Hence a1 = d - 1 = 2*b1 - 1 */
- if (a0 >= -d)
- {
- q = -1;
- r = a0 + d;
- }
- else
- {
- q = -2;
- r = a0 + 2*d;
- }
- }
- }
-
- *rp = r;
- return q;
-}
-
-#endif
-
diff --git a/mpi/hppa/README b/mpi/hppa/README
deleted file mode 100644
index 5a2d5fd97..000000000
--- a/mpi/hppa/README
+++ /dev/null
@@ -1,84 +0,0 @@
-This directory contains mpn functions for various HP PA-RISC chips. Code
-that runs faster on the PA7100 and later implementations, is in the pa7100
-directory.
-
-RELEVANT OPTIMIZATION ISSUES
-
- Load and Store timing
-
-On the PA7000 no memory instructions can issue the two cycles after a store.
-For the PA7100, this is reduced to one cycle.
-
-The PA7100 has a lookup-free cache, so it helps to schedule loads and the
-dependent instruction really far from each other.
-
-STATUS
-
-1. mpn_mul_1 could be improved to 6.5 cycles/limb on the PA7100, using the
- instructions bwlow (but some sw pipelining is needed to avoid the
- xmpyu-fstds delay):
-
- fldds s1_ptr
-
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
-
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
-
- addc
- stws res_ptr
- addc
- stws res_ptr
-
- addib Loop
-
-2. mpn_addmul_1 could be improved from the current 10 to 7.5 cycles/limb
- (asymptotically) on the PA7100, using the instructions below. With proper
- sw pipelining and the unrolling level below, the speed becomes 8
- cycles/limb.
-
- fldds s1_ptr
- fldds s1_ptr
-
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
- xmpyu
- fstds N(%r30)
-
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- ldws N(%r30)
- addc
- addc
- addc
- addc
- addc %r0,%r0,cy-limb
-
- ldws res_ptr
- ldws res_ptr
- ldws res_ptr
- ldws res_ptr
- add
- stws res_ptr
- addc
- stws res_ptr
- addc
- stws res_ptr
- addc
- stws res_ptr
-
- addib
diff --git a/mpi/hppa/distfiles b/mpi/hppa/distfiles
deleted file mode 100644
index 7f24205d3..000000000
--- a/mpi/hppa/distfiles
+++ /dev/null
@@ -1,7 +0,0 @@
-README
-udiv-qrnnd.S
-mpih-add1.S
-mpih-sub1.S
-mpih-lshift.S
-mpih-rshift.S
-
diff --git a/mpi/hppa/mpih-add1.S b/mpi/hppa/mpih-add1.S
deleted file mode 100644
index 7a2a2c2cb..000000000
--- a/mpi/hppa/mpih-add1.S
+++ /dev/null
@@ -1,72 +0,0 @@
-/* hppa add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Fee Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (gr26)
- * mpi_ptr_t s1_ptr, (gr25)
- * mpi_ptr_t s2_ptr, (gr24)
- * mpi_size_t size) (gr23)
- *
- * One might want to unroll this as for other processors, but it turns
- * out that the data cache contention after a store makes such
- * unrolling useless. We can't come under 5 cycles/limb anyway.
- */
-
- .code
- .export mpihelp_add_n
- .label mpihelp_add_n
- .proc
- .callinfo frame=0,no_calls
- .entry
-
- ldws,ma 4(0,%r25),%r20
- ldws,ma 4(0,%r24),%r19
-
- addib,= -1,%r23,L$end ; check for (SIZE == 1)
- add %r20,%r19,%r28 ; add first limbs ignoring cy
-
- .label L$loop
- ldws,ma 4(0,%r25),%r20
- ldws,ma 4(0,%r24),%r19
- stws,ma %r28,4(0,%r26)
- addib,<> -1,%r23,L$loop
- addc %r20,%r19,%r28
-
- .label L$end
- stws %r28,0(0,%r26)
- bv 0(%r2)
- addc %r0,%r0,%r28
-
- .exit
- .procend
diff --git a/mpi/hppa/mpih-lshift.S b/mpi/hppa/mpih-lshift.S
deleted file mode 100644
index 6a8b2c4ce..000000000
--- a/mpi/hppa/mpih-lshift.S
+++ /dev/null
@@ -1,77 +0,0 @@
-/* hppa lshift
- *
- * Copyright (C) 1992, 1994, 1998
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (gr26)
- * mpi_ptr_t up, (gr25)
- * mpi_size_t usize, (gr24)
- * unsigned cnt) (gr23)
- */
-
- .code
- .export mpihelp_lshift
- .label mpihelp_lshift
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- sh2add %r24,%r25,%r25
- sh2add %r24,%r26,%r26
- ldws,mb -4(0,%r25),%r22
- subi 32,%r23,%r1
- mtsar %r1
- addib,= -1,%r24,L$0004
- vshd %r0,%r22,%r28 ; compute carry out limb
- ldws,mb -4(0,%r25),%r29
- addib,= -1,%r24,L$0002
- vshd %r22,%r29,%r20
-
- .label L$loop
- ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- addib,= -1,%r24,L$0003
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- addib,<> -1,%r24,L$loop
- vshd %r22,%r29,%r20
-
- .label L$0002
- stws,mb %r20,-4(0,%r26)
- vshd %r29,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
- .label L$0003
- stws,mb %r20,-4(0,%r26)
- .label L$0004
- vshd %r22,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
-
- .exit
- .procend
-
-
-
diff --git a/mpi/hppa/mpih-rshift.S b/mpi/hppa/mpih-rshift.S
deleted file mode 100644
index b1e6a6795..000000000
--- a/mpi/hppa/mpih-rshift.S
+++ /dev/null
@@ -1,73 +0,0 @@
-/* hppa rshift
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (gr26)
- * mpi_ptr_t up, (gr25)
- * mpi_size_t usize, (gr24)
- * unsigned cnt) (gr23)
- */
-
- .code
- .export mpihelp_rshift
- .label mpihelp_rshift
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- ldws,ma 4(0,%r25),%r22
- mtsar %r23
- addib,= -1,%r24,L$r004
- vshd %r22,%r0,%r28 ; compute carry out limb
- ldws,ma 4(0,%r25),%r29
- addib,= -1,%r24,L$r002
- vshd %r29,%r22,%r20
-
- .label L$roop
- ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- addib,= -1,%r24,L$r003
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- addib,<> -1,%r24,L$roop
- vshd %r29,%r22,%r20
-
- .label L$r002
- stws,ma %r20,4(0,%r26)
- vshd %r0,%r29,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
- .label L$r003
- stws,ma %r20,4(0,%r26)
- .label L$r004
- vshd %r0,%r22,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
-
- .exit
- .procend
-
diff --git a/mpi/hppa/mpih-sub1.S b/mpi/hppa/mpih-sub1.S
deleted file mode 100644
index 870009e95..000000000
--- a/mpi/hppa/mpih-sub1.S
+++ /dev/null
@@ -1,80 +0,0 @@
-/* hppa sub_n -- Sub two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (gr26)
- * mpi_ptr_t s1_ptr, (gr25)
- * mpi_ptr_t s2_ptr, (gr24)
- * mpi_size_t size) (gr23)
- *
- * One might want to unroll this as for other processors, but it turns
- * out that the data cache contention after a store makes such
- * unrolling useless. We can't come under 5 cycles/limb anyway.
- */
-
-
- .code
- .export mpihelp_sub_n
- .label mpihelp_sub_n
- .proc
- .callinfo frame=0,no_calls
- .entry
-
- ldws,ma 4(0,%r25),%r20
- ldws,ma 4(0,%r24),%r19
-
- addib,= -1,%r23,L$end ; check for (SIZE == 1)
- sub %r20,%r19,%r28 ; subtract first limbs ignoring cy
-
- .label L$loop
- ldws,ma 4(0,%r25),%r20
- ldws,ma 4(0,%r24),%r19
- stws,ma %r28,4(0,%r26)
- addib,<> -1,%r23,L$loop
- subb %r20,%r19,%r28
-
- .label L$end
- stws %r28,0(0,%r26)
- addc %r0,%r0,%r28
- bv 0(%r2)
- subi 1,%r28,%r28
-
- .exit
- .procend
-
-
-
diff --git a/mpi/hppa/udiv-qrnnd.S b/mpi/hppa/udiv-qrnnd.S
deleted file mode 100644
index c8a52412b..000000000
--- a/mpi/hppa/udiv-qrnnd.S
+++ /dev/null
@@ -1,298 +0,0 @@
-/* HP-PA __udiv_qrnnd division support, used from longlong.h.
- * This version runs fast on pre-PA7000 CPUs.
- *
- * Copyright (C) 1993, 1994, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-/* INPUT PARAMETERS
- * rem_ptr gr26
- * n1 gr25
- * n0 gr24
- * d gr23
- *
- * The code size is a bit excessive. We could merge the last two ds;addc
- * sequences by simply moving the "bb,< Odd" instruction down. The only
- * trouble is the FFFFFFFF code that would need some hacking.
- */
-
- .code
- .export __udiv_qrnnd
- .label __udiv_qrnnd
- .proc
- .callinfo frame=0,no_calls
- .entry
-
- comb,< %r23,0,L$largedivisor
- sub %r0,%r23,%r1 ; clear cy as side-effect
- ds %r0,%r1,%r0
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r24
- ds %r25,%r23,%r25
- addc %r24,%r24,%r28
- ds %r25,%r23,%r25
- comclr,>= %r25,%r0,%r0
- addl %r25,%r23,%r25
- stws %r25,0(0,%r26)
- bv 0(%r2)
- addc %r28,%r28,%r28
-
- .label L$largedivisor
- extru %r24,31,1,%r19 ; r19 = n0 & 1
- bb,< %r23,31,L$odd
- extru %r23,30,31,%r22 ; r22 = d >> 1
- shd %r25,%r24,1,%r24 ; r24 = new n0
- extru %r25,30,31,%r25 ; r25 = new n1
- sub %r0,%r22,%r21
- ds %r0,%r21,%r0
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- comclr,>= %r25,%r0,%r0
- addl %r25,%r22,%r25
- sh1addl %r25,%r19,%r25
- stws %r25,0(0,%r26)
- bv 0(%r2)
- addc %r24,%r24,%r28
-
- .label L$odd
- addib,sv,n 1,%r22,L$FF.. ; r22 = (d / 2 + 1)
- shd %r25,%r24,1,%r24 ; r24 = new n0
- extru %r25,30,31,%r25 ; r25 = new n1
- sub %r0,%r22,%r21
- ds %r0,%r21,%r0
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r24
- ds %r25,%r22,%r25
- addc %r24,%r24,%r28
- comclr,>= %r25,%r0,%r0
- addl %r25,%r22,%r25
- sh1addl %r25,%r19,%r25
-; We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
- add,nuv %r28,%r25,%r25
- addl %r25,%r1,%r25
- addc %r0,%r28,%r28
- sub,<< %r25,%r23,%r0
- addl %r25,%r1,%r25
- stws %r25,0(0,%r26)
- bv 0(%r2)
- addc %r0,%r28,%r28
-
-; This is just a special case of the code above.
-; We come here when d == 0xFFFFFFFF
- .label L$FF..
- add,uv %r25,%r24,%r24
- sub,<< %r24,%r23,%r0
- ldo 1(%r24),%r24
- stws %r24,0(0,%r26)
- bv 0(%r2)
- addc %r0,%r25,%r28
-
- .exit
- .procend
diff --git a/mpi/hppa1.1/distfiles b/mpi/hppa1.1/distfiles
deleted file mode 100644
index d68227ac7..000000000
--- a/mpi/hppa1.1/distfiles
+++ /dev/null
@@ -1,5 +0,0 @@
-udiv-qrnnd.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-
diff --git a/mpi/hppa1.1/mpih-mul1.S b/mpi/hppa1.1/mpih-mul1.S
deleted file mode 100644
index ac9baced4..000000000
--- a/mpi/hppa1.1/mpih-mul1.S
+++ /dev/null
@@ -1,115 +0,0 @@
-/* hppa1.1 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1993, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (r26)
- * mpi_ptr_t s1_ptr, (r25)
- * mpi_size_t s1_size, (r24)
- * mpi_limb_t s2_limb) (r23)
- *
- *
- *
- * This runs at 9 cycles/limb on a PA7000. With the used instructions, it can
- * not become faster due to data cache contention after a store. On the
- * PA7100 it runs at 7 cycles/limb, and that can not be improved either, since
- * only the xmpyu does not need the integer pipeline, so the only dual-issue
- * we will get are addc+xmpyu. Unrolling would not help either CPU.
- *
- * We could use fldds to read two limbs at a time from the S1 array, and that
- * could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and
- * PA7100, respectively. We don't do that since it does not seem worth the
- * (alignment) troubles...
- *
- * At least the PA7100 is rumored to be able to deal with cache-misses
- * without stalling instruction issue. If this is true, and the cache is
- * actually also lockup-free, we should use a deeper software pipeline, and
- * load from S1 very early! (The loads and stores to -12(sp) will surely be
- * in the cache.)
- */
-
- .code
- .export mpihelp_mul_1
- .label mpihelp_mul_1
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- ldo 64(%r30),%r30
- fldws,ma 4(%r25),%fr5
- stw %r23,-16(%r30) ; move s2_limb ...
- addib,= -1,%r24,L$just_one_limb
- fldws -16(%r30),%fr4 ; ... into fr4
- add %r0,%r0,%r0 ; clear carry
- xmpyu %fr4,%fr5,%fr6
- fldws,ma 4(%r25),%fr7
- fstds %fr6,-16(%r30)
- xmpyu %fr4,%fr7,%fr8
- ldw -12(%r30),%r19 ; least significant limb in product
- ldw -16(%r30),%r28
-
- fstds %fr8,-16(%r30)
- addib,= -1,%r24,L$end
- ldw -12(%r30),%r1
-
-; Main loop
- .label L$loop
- fldws,ma 4(%r25),%fr5
- stws,ma %r19,4(%r26)
- addc %r28,%r1,%r19
- xmpyu %fr4,%fr5,%fr6
- ldw -16(%r30),%r28
- fstds %fr6,-16(%r30)
- addib,<> -1,%r24,L$loop
- ldw -12(%r30),%r1
-
- .label L$end
- stws,ma %r19,4(%r26)
- addc %r28,%r1,%r19
- ldw -16(%r30),%r28
- stws,ma %r19,4(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .label L$just_one_limb
- xmpyu %fr4,%fr5,%fr6
- fstds %fr6,-16(%r30)
- ldw -16(%r30),%r28
- ldo -64(%r30),%r30
- bv 0(%r2)
- fstws %fr6R,0(%r26)
-
- .exit
- .procend
-
-
diff --git a/mpi/hppa1.1/mpih-mul2.S b/mpi/hppa1.1/mpih-mul2.S
deleted file mode 100644
index c73397e3e..000000000
--- a/mpi/hppa1.1/mpih-mul2.S
+++ /dev/null
@@ -1,117 +0,0 @@
-/* hppa1.1 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1993, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r26)
- * mpi_ptr_t s1_ptr, (r25)
- * mpi_size_t s1_size, (r24)
- * mpi_limb_t s2_limb) (r23)
- *
- * This runs at 11 cycles/limb on a PA7000. With the used instructions, it
- * can not become faster due to data cache contention after a store. On the
- * PA7100 it runs at 10 cycles/limb, and that can not be improved either,
- * since only the xmpyu does not need the integer pipeline, so the only
- * dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb
- * on the PA7100.
- *
- * There are some ideas described in mul1.S that applies to this code too.
- */
-
- .code
- .export mpihelp_addmul_1
- .label mpihelp_addmul_1
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- ldo 64(%r30),%r30
- fldws,ma 4(%r25),%fr5
- stw %r23,-16(%r30) ; move s2_limb ...
- addib,= -1,%r24,L$just_one_limb
- fldws -16(%r30),%fr4 ; ... into fr4
- add %r0,%r0,%r0 ; clear carry
- xmpyu %fr4,%fr5,%fr6
- fldws,ma 4(%r25),%fr7
- fstds %fr6,-16(%r30)
- xmpyu %fr4,%fr7,%fr8
- ldw -12(%r30),%r19 ; least significant limb in product
- ldw -16(%r30),%r28
-
- fstds %fr8,-16(%r30)
- addib,= -1,%r24,L$end
- ldw -12(%r30),%r1
-
-; Main loop
- .label L$loop
- ldws 0(%r26),%r29
- fldws,ma 4(%r25),%fr5
- add %r29,%r19,%r19
- stws,ma %r19,4(%r26)
- addc %r28,%r1,%r19
- xmpyu %fr4,%fr5,%fr6
- ldw -16(%r30),%r28
- fstds %fr6,-16(%r30)
- addc %r0,%r28,%r28
- addib,<> -1,%r24,L$loop
- ldw -12(%r30),%r1
-
- .label L$end
- ldw 0(%r26),%r29
- add %r29,%r19,%r19
- stws,ma %r19,4(%r26)
- addc %r28,%r1,%r19
- ldw -16(%r30),%r28
- ldws 0(%r26),%r29
- addc %r0,%r28,%r28
- add %r29,%r19,%r19
- stws,ma %r19,4(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .label L$just_one_limb
- xmpyu %fr4,%fr5,%fr6
- ldw 0(%r26),%r29
- fstds %fr6,-16(%r30)
- ldw -12(%r30),%r1
- ldw -16(%r30),%r28
- add %r29,%r1,%r19
- stw %r19,0(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .exit
- .procend
-
-
diff --git a/mpi/hppa1.1/mpih-mul3.S b/mpi/hppa1.1/mpih-mul3.S
deleted file mode 100644
index f9ccb1b57..000000000
--- a/mpi/hppa1.1/mpih-mul3.S
+++ /dev/null
@@ -1,127 +0,0 @@
-/* hppa1.1 submul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1993, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (r26)
- * mpi_ptr_t s1_ptr, (r25)
- * mpi_size_t s1_size, (r24)
- * mpi_limb_t s2_limb) (r23)
- *
- *
- * This runs at 12 cycles/limb on a PA7000. With the used instructions, it
- * can not become faster due to data cache contention after a store. On the
- * PA7100 it runs at 11 cycles/limb, and that can not be improved either,
- * since only the xmpyu does not need the integer pipeline, so the only
- * dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb
- * on the PA7100.
- *
- * There are some ideas described in mul1.S that applies to this code too.
- *
- * It seems possible to make this run as fast as addmul_1, if we use
- * sub,>>= %r29,%r19,%r22
- * addi 1,%r28,%r28
- * but that requires reworking the hairy software pipeline...
- */
-
-
- .code
- .export mpihelp_submul_1
- .label mpihelp_submul_1
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- ldo 64(%r30),%r30
- fldws,ma 4(%r25),%fr5
- stw %r23,-16(%r30) ; move s2_limb ...
- addib,= -1,%r24,L$just_one_limb
- fldws -16(%r30),%fr4 ; ... into fr4
- add %r0,%r0,%r0 ; clear carry
- xmpyu %fr4,%fr5,%fr6
- fldws,ma 4(%r25),%fr7
- fstds %fr6,-16(%r30)
- xmpyu %fr4,%fr7,%fr8
- ldw -12(%r30),%r19 ; least significant limb in product
- ldw -16(%r30),%r28
-
- fstds %fr8,-16(%r30)
- addib,= -1,%r24,L$end
- ldw -12(%r30),%r1
-
-; Main loop
- .label L$loop
- ldws 0(%r26),%r29
- fldws,ma 4(%r25),%fr5
- sub %r29,%r19,%r22
- add %r22,%r19,%r0
- stws,ma %r22,4(%r26)
- addc %r28,%r1,%r19
- xmpyu %fr4,%fr5,%fr6
- ldw -16(%r30),%r28
- fstds %fr6,-16(%r30)
- addc %r0,%r28,%r28
- addib,<> -1,%r24,L$loop
- ldw -12(%r30),%r1
-
- .label L$end
- ldw 0(%r26),%r29
- sub %r29,%r19,%r22
- add %r22,%r19,%r0
- stws,ma %r22,4(%r26)
- addc %r28,%r1,%r19
- ldw -16(%r30),%r28
- ldws 0(%r26),%r29
- addc %r0,%r28,%r28
- sub %r29,%r19,%r22
- add %r22,%r19,%r0
- stws,ma %r22,4(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .label L$just_one_limb
- xmpyu %fr4,%fr5,%fr6
- ldw 0(%r26),%r29
- fstds %fr6,-16(%r30)
- ldw -12(%r30),%r1
- ldw -16(%r30),%r28
- sub %r29,%r1,%r22
- add %r22,%r1,%r0
- stw %r22,0(%r26)
- addc %r0,%r28,%r28
- bv 0(%r2)
- ldo -64(%r30),%r30
-
- .exit
- .procend
-
diff --git a/mpi/hppa1.1/udiv-qrnnd.S b/mpi/hppa1.1/udiv-qrnnd.S
deleted file mode 100644
index a1643d707..000000000
--- a/mpi/hppa1.1/udiv-qrnnd.S
+++ /dev/null
@@ -1,90 +0,0 @@
-/* HP-PA __udiv_qrnnd division support, used from longlong.h.
- * This version runs fast on PA 7000 and later.
- *
- * Copyright (C) 1993, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-/* INPUT PARAMETERS
- * rem_ptr gr26
- * n1 gr25
- * n0 gr24
- * d gr23
- */
-
- .code
- .label L$0000
- .word 0x43f00000
- .word 0x0
- .export __udiv_qrnnd
- .label __udiv_qrnnd
- .proc
- .callinfo frame=64,no_calls
- .entry
- ldo 64(%r30),%r30
-
- stws %r25,-16(0,%r30) ; n_hi
- stws %r24,-12(0,%r30) ; n_lo
- ldil L'L$0000,%r19 ; '
- ldo R'L$0000(%r19),%r19 ; '
- fldds -16(0,%r30),%fr5
- stws %r23,-12(0,%r30)
- comib,<= 0,%r25,L$1
- fcnvxf,dbl,dbl %fr5,%fr5
- fldds 0(0,%r19),%fr4
- fadd,dbl %fr4,%fr5,%fr5
- .label L$1
- fcpy,sgl %fr0,%fr6L
- fldws -12(0,%r30),%fr6R
- fcnvxf,dbl,dbl %fr6,%fr4
-
- fdiv,dbl %fr5,%fr4,%fr5
-
- fcnvfx,dbl,dbl %fr5,%fr4
- fstws %fr4R,-16(%r30)
- xmpyu %fr4R,%fr6R,%fr6
- ldws -16(%r30),%r28
- fstds %fr6,-16(0,%r30)
- ldws -12(0,%r30),%r21
- ldws -16(0,%r30),%r20
- sub %r24,%r21,%r22
- subb %r25,%r20,%r19
- comib,= 0,%r19,L$2
- ldo -64(%r30),%r30
-
- add %r22,%r23,%r22
- ldo -1(%r28),%r28
- .label L$2
- bv 0(%r2)
- stws %r22,0(0,%r26)
-
- .exit
- .procend
-
-
diff --git a/mpi/i386-openbsd/README b/mpi/i386-openbsd/README
deleted file mode 100644
index 0b13a7405..000000000
--- a/mpi/i386-openbsd/README
+++ /dev/null
@@ -1,3 +0,0 @@
-These are special i386 files for use on OpenBSD, which (at least until
-version 3.1) has an older assembler that won't work with the files in
-i386.
diff --git a/mpi/i386-openbsd/distfiles b/mpi/i386-openbsd/distfiles
deleted file mode 100644
index 88d2a30c7..000000000
--- a/mpi/i386-openbsd/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-mpih-sub1.S
-syntax.h
-
diff --git a/mpi/i386-openbsd/mpih-add1.S b/mpi/i386-openbsd/mpih-add1.S
deleted file mode 100644
index 3b3b23c8c..000000000
--- a/mpi/i386-openbsd/mpih-add1.S
+++ /dev/null
@@ -1,118 +0,0 @@
-/* i80386 add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_add_n)
-C_SYMBOL_NAME(mpihelp_add_n:)
- pushl %edi
- pushl %esi
-
- movl 12(%esp),%edi /* res_ptr */
- movl 16(%esp),%esi /* s1_ptr */
- movl 20(%esp),%edx /* s2_ptr */
- movl 24(%esp),%ecx /* size */
-
- movl %ecx,%eax
- shrl $3,%ecx /* compute count for unrolled loop */
- negl %eax
- andl $7,%eax /* get index where to start loop */
- jz Loop /* necessary special case for 0 */
- incl %ecx /* adjust loop count */
- shll $2,%eax /* adjustment for pointers... */
- subl %eax,%edi /* ... since they are offset ... */
- subl %eax,%esi /* ... by a constant when we ... */
- subl %eax,%edx /* ... enter the loop */
- shrl $2,%eax /* restore previous value */
-#ifdef PIC
-/* Calculate start address in loop for PIC. Due to limitations in some
- assemblers, Loop-L0-3 cannot be put into the leal */
- call L0
-L0: leal (%eax,%eax,8),%eax
- addl (%esp),%eax
- addl $(Loop-L0-3),%eax
- addl $4,%esp
-#else
-/* Calculate start address in loop for non-PIC. */
- leal (Loop - 3)(%eax,%eax,8),%eax
-#endif
- jmp *%eax /* jump into loop */
- ALIGN (3)
-Loop: movl (%esi),%eax
- adcl (%edx),%eax
- movl %eax,(%edi)
- movl 4(%esi),%eax
- adcl 4(%edx),%eax
- movl %eax,4(%edi)
- movl 8(%esi),%eax
- adcl 8(%edx),%eax
- movl %eax,8(%edi)
- movl 12(%esi),%eax
- adcl 12(%edx),%eax
- movl %eax,12(%edi)
- movl 16(%esi),%eax
- adcl 16(%edx),%eax
- movl %eax,16(%edi)
- movl 20(%esi),%eax
- adcl 20(%edx),%eax
- movl %eax,20(%edi)
- movl 24(%esi),%eax
- adcl 24(%edx),%eax
- movl %eax,24(%edi)
- movl 28(%esi),%eax
- adcl 28(%edx),%eax
- movl %eax,28(%edi)
- leal 32(%edi),%edi
- leal 32(%esi),%esi
- leal 32(%edx),%edx
- decl %ecx
- jnz Loop
-
- sbbl %eax,%eax
- negl %eax
-
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386-openbsd/mpih-lshift.S b/mpi/i386-openbsd/mpih-lshift.S
deleted file mode 100644
index 5e6387a4f..000000000
--- a/mpi/i386-openbsd/mpih-lshift.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* i80386 lshift
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_lshift)
-C_SYMBOL_NAME(mpihelp_lshift:)
- pushl %edi
- pushl %esi
- pushl %ebx
-
- movl 16(%esp),%edi /* res_ptr */
- movl 20(%esp),%esi /* s_ptr */
- movl 24(%esp),%edx /* size */
- movl 28(%esp),%ecx /* cnt */
-
- subl $4,%esi /* adjust s_ptr */
-
- movl (%esi,%edx,4),%ebx /* read most significant limb */
- xorl %eax,%eax
- shldl %cl,%ebx,%eax /* compute carry limb */
- decl %edx
- jz Lend
- pushl %eax /* push carry limb onto stack */
- testb $1,%edx
- jnz L1 /* enter loop in the middle */
- movl %ebx,%eax
-
- ALIGN (3)
-Loop: movl (%esi,%edx,4),%ebx /* load next lower limb */
- shldl %cl,%ebx,%eax /* compute result limb */
- movl %eax,(%edi,%edx,4) /* store it */
- decl %edx
-L1: movl (%esi,%edx,4),%eax
- shldl %cl,%eax,%ebx
- movl %ebx,(%edi,%edx,4)
- decl %edx
- jnz Loop
-
- shll %cl,%eax /* compute least significant limb */
- movl %eax,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-Lend: shll %cl,%ebx /* compute least significant limb */
- movl %ebx,(%edi) /* store it */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386-openbsd/mpih-mul1.S b/mpi/i386-openbsd/mpih-mul1.S
deleted file mode 100644
index cf87046f5..000000000
--- a/mpi/i386-openbsd/mpih-mul1.S
+++ /dev/null
@@ -1,86 +0,0 @@
-/* i80386 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_mul_1)
-C_SYMBOL_NAME(mpihelp_mul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386-openbsd/mpih-mul2.S b/mpi/i386-openbsd/mpih-mul2.S
deleted file mode 100644
index f134af70e..000000000
--- a/mpi/i386-openbsd/mpih-mul2.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* i80386 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_addmul_1)
-C_SYMBOL_NAME(mpihelp_addmul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(adc,l ,R(edx),$0)
- INSN2(add,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386-openbsd/mpih-mul3.S b/mpi/i386-openbsd/mpih-mul3.S
deleted file mode 100644
index 2907ed039..000000000
--- a/mpi/i386-openbsd/mpih-mul3.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* i80386 submul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_submul_1)
-C_SYMBOL_NAME(mpihelp_submul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(adc,l ,R(edx),$0)
- INSN2(sub,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386-openbsd/mpih-rshift.S b/mpi/i386-openbsd/mpih-rshift.S
deleted file mode 100644
index 9718204c7..000000000
--- a/mpi/i386-openbsd/mpih-rshift.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/* i80386 rshift
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_rshift)
-C_SYMBOL_NAME(mpihelp_rshift:)
- pushl %edi
- pushl %esi
- pushl %ebx
-
- movl 16(%esp),%edi /* wp */
- movl 20(%esp),%esi /* up */
- movl 24(%esp),%edx /* usize */
- movl 28(%esp),%ecx /* cnt */
-
- leal -4(%edi,%edx,4),%edi
- leal (%esi,%edx,4),%esi
- negl %edx
-
- movl (%esi,%edx,4),%ebx /* read least significant limb */
- xorl %eax,%eax
- shrdl %cl,%ebx,%eax /* compute carry limb */
- incl %edx
- jz Lend2
- pushl %eax /* push carry limb onto stack */
- testb $1,%edx
- jnz L2 /* enter loop in the middle */
- movl %ebx,%eax
-
- ALIGN (3)
-Loop2: movl (%esi,%edx,4),%ebx /* load next higher limb */
- shrdl %cl,%ebx,%eax /* compute result limb */
- movl %eax,(%edi,%edx,4) /* store it */
- incl %edx
-L2: movl (%esi,%edx,4),%eax
- shrdl %cl,%eax,%ebx
- movl %ebx,(%edi,%edx,4)
- incl %edx
- jnz Loop2
-
- shrl %cl,%eax /* compute most significant limb */
- movl %eax,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-Lend2: shrl %cl,%ebx /* compute most significant limb */
- movl %ebx,(%edi) /* store it */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386-openbsd/mpih-sub1.S b/mpi/i386-openbsd/mpih-sub1.S
deleted file mode 100644
index 169c53950..000000000
--- a/mpi/i386-openbsd/mpih-sub1.S
+++ /dev/null
@@ -1,119 +0,0 @@
-/* i80386 sub_n -- Sub two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_sub_n)
-C_SYMBOL_NAME(mpihelp_sub_n:)
- pushl %edi
- pushl %esi
-
- movl 12(%esp),%edi /* res_ptr */
- movl 16(%esp),%esi /* s1_ptr */
- movl 20(%esp),%edx /* s2_ptr */
- movl 24(%esp),%ecx /* size */
-
- movl %ecx,%eax
- shrl $3,%ecx /* compute count for unrolled loop */
- negl %eax
- andl $7,%eax /* get index where to start loop */
- jz Loop /* necessary special case for 0 */
- incl %ecx /* adjust loop count */
- shll $2,%eax /* adjustment for pointers... */
- subl %eax,%edi /* ... since they are offset ... */
- subl %eax,%esi /* ... by a constant when we ... */
- subl %eax,%edx /* ... enter the loop */
- shrl $2,%eax /* restore previous value */
-#ifdef PIC
-/* Calculate start address in loop for PIC. Due to limitations in some
- assemblers, Loop-L0-3 cannot be put into the leal */
- call L0
-L0: leal (%eax,%eax,8),%eax
- addl (%esp),%eax
- addl $(Loop-L0-3),%eax
- addl $4,%esp
-#else
-/* Calculate start address in loop for non-PIC. */
- leal (Loop - 3)(%eax,%eax,8),%eax
-#endif
- jmp *%eax /* jump into loop */
- ALIGN (3)
-Loop: movl (%esi),%eax
- sbbl (%edx),%eax
- movl %eax,(%edi)
- movl 4(%esi),%eax
- sbbl 4(%edx),%eax
- movl %eax,4(%edi)
- movl 8(%esi),%eax
- sbbl 8(%edx),%eax
- movl %eax,8(%edi)
- movl 12(%esi),%eax
- sbbl 12(%edx),%eax
- movl %eax,12(%edi)
- movl 16(%esi),%eax
- sbbl 16(%edx),%eax
- movl %eax,16(%edi)
- movl 20(%esi),%eax
- sbbl 20(%edx),%eax
- movl %eax,20(%edi)
- movl 24(%esi),%eax
- sbbl 24(%edx),%eax
- movl %eax,24(%edi)
- movl 28(%esi),%eax
- sbbl 28(%edx),%eax
- movl %eax,28(%edi)
- leal 32(%edi),%edi
- leal 32(%esi),%esi
- leal 32(%edx),%edx
- decl %ecx
- jnz Loop
-
- sbbl %eax,%eax
- negl %eax
-
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386-openbsd/syntax.h b/mpi/i386-openbsd/syntax.h
deleted file mode 100644
index 5a2c7b232..000000000
--- a/mpi/i386-openbsd/syntax.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* syntax.h -- Definitions for x86 syntax variations.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#undef ALIGN
-
-#if defined (BSD_SYNTAX) || defined (ELF_SYNTAX)
-#define R(r) %r
-#define MEM(base)(base)
-#define MEM_DISP(base,displacement)displacement(R(base))
-#define MEM_INDEX(base,index,size)(R(base),R(index),size)
-#ifdef __STDC__
-#define INSN1(mnemonic,size_suffix,dst)mnemonic##size_suffix dst
-#define INSN2(mnemonic,size_suffix,dst,src)mnemonic##size_suffix src,dst
-#else
-#define INSN1(mnemonic,size_suffix,dst)mnemonic/**/size_suffix dst
-#define INSN2(mnemonic,size_suffix,dst,src)mnemonic/**/size_suffix src,dst
-#endif
-#define TEXT .text
-#if defined (BSD_SYNTAX)
-#define ALIGN(log) .align log
-#endif
-#if defined (ELF_SYNTAX)
-#define ALIGN(log) .align 1<<(log)
-#endif
-#define GLOBL .globl
-#endif
-
-#ifdef INTEL_SYNTAX
-#define R(r) r
-#define MEM(base)[base]
-#define MEM_DISP(base,displacement)[base+(displacement)]
-#define MEM_INDEX(base,index,size)[base+index*size]
-#define INSN1(mnemonic,size_suffix,dst)mnemonic dst
-#define INSN2(mnemonic,size_suffix,dst,src)mnemonic dst,src
-#define TEXT .text
-#define ALIGN(log) .align log
-#define GLOBL .globl
-#endif
-
-#ifdef X86_BROKEN_ALIGN
-#undef ALIGN
-#define ALIGN(log) .align log,0x90
-#endif
diff --git a/mpi/i386/distfiles b/mpi/i386/distfiles
deleted file mode 100644
index 88d2a30c7..000000000
--- a/mpi/i386/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-mpih-sub1.S
-syntax.h
-
diff --git a/mpi/i386/mpih-add1.S b/mpi/i386/mpih-add1.S
deleted file mode 100644
index da7e7f8b3..000000000
--- a/mpi/i386/mpih-add1.S
+++ /dev/null
@@ -1,118 +0,0 @@
-/* i80386 add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_add_n)
-C_SYMBOL_NAME(mpihelp_add_n:)
- pushl %edi
- pushl %esi
-
- movl 12(%esp),%edi /* res_ptr */
- movl 16(%esp),%esi /* s1_ptr */
- movl 20(%esp),%edx /* s2_ptr */
- movl 24(%esp),%ecx /* size */
-
- movl %ecx,%eax
- shrl $3,%ecx /* compute count for unrolled loop */
- negl %eax
- andl $7,%eax /* get index where to start loop */
- jz Loop /* necessary special case for 0 */
- incl %ecx /* adjust loop count */
- shll $2,%eax /* adjustment for pointers... */
- subl %eax,%edi /* ... since they are offset ... */
- subl %eax,%esi /* ... by a constant when we ... */
- subl %eax,%edx /* ... enter the loop */
- shrl $2,%eax /* restore previous value */
-#ifdef PIC
-/* Calculate start address in loop for PIC. Due to limitations in some
- assemblers, Loop-L0-3 cannot be put into the leal */
- call L0
-L0: leal (%eax,%eax,8),%eax
- addl (%esp),%eax
- addl $(Loop-L0-3),%eax
- addl $4,%esp
-#else
-/* Calculate start address in loop for non-PIC. */
- leal Loop-3(%eax,%eax,8),%eax
-#endif
- jmp *%eax /* jump into loop */
- ALIGN (3)
-Loop: movl (%esi),%eax
- adcl (%edx),%eax
- movl %eax,(%edi)
- movl 4(%esi),%eax
- adcl 4(%edx),%eax
- movl %eax,4(%edi)
- movl 8(%esi),%eax
- adcl 8(%edx),%eax
- movl %eax,8(%edi)
- movl 12(%esi),%eax
- adcl 12(%edx),%eax
- movl %eax,12(%edi)
- movl 16(%esi),%eax
- adcl 16(%edx),%eax
- movl %eax,16(%edi)
- movl 20(%esi),%eax
- adcl 20(%edx),%eax
- movl %eax,20(%edi)
- movl 24(%esi),%eax
- adcl 24(%edx),%eax
- movl %eax,24(%edi)
- movl 28(%esi),%eax
- adcl 28(%edx),%eax
- movl %eax,28(%edi)
- leal 32(%edi),%edi
- leal 32(%esi),%esi
- leal 32(%edx),%edx
- decl %ecx
- jnz Loop
-
- sbbl %eax,%eax
- negl %eax
-
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386/mpih-lshift.S b/mpi/i386/mpih-lshift.S
deleted file mode 100644
index a7dad2c96..000000000
--- a/mpi/i386/mpih-lshift.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* i80386 lshift
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_lshift)
-C_SYMBOL_NAME(mpihelp_lshift:)
- pushl %edi
- pushl %esi
- pushl %ebx
-
- movl 16(%esp),%edi /* res_ptr */
- movl 20(%esp),%esi /* s_ptr */
- movl 24(%esp),%edx /* size */
- movl 28(%esp),%ecx /* cnt */
-
- subl $4,%esi /* adjust s_ptr */
-
- movl (%esi,%edx,4),%ebx /* read most significant limb */
- xorl %eax,%eax
- shldl %ebx,%eax /* compute carry limb */
- decl %edx
- jz Lend
- pushl %eax /* push carry limb onto stack */
- testb $1,%dl
- jnz L1 /* enter loop in the middle */
- movl %ebx,%eax
-
- ALIGN (3)
-Loop: movl (%esi,%edx,4),%ebx /* load next lower limb */
- shldl %ebx,%eax /* compute result limb */
- movl %eax,(%edi,%edx,4) /* store it */
- decl %edx
-L1: movl (%esi,%edx,4),%eax
- shldl %eax,%ebx
- movl %ebx,(%edi,%edx,4)
- decl %edx
- jnz Loop
-
- shll %cl,%eax /* compute least significant limb */
- movl %eax,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-Lend: shll %cl,%ebx /* compute least significant limb */
- movl %ebx,(%edi) /* store it */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386/mpih-mul1.S b/mpi/i386/mpih-mul1.S
deleted file mode 100644
index cf87046f5..000000000
--- a/mpi/i386/mpih-mul1.S
+++ /dev/null
@@ -1,86 +0,0 @@
-/* i80386 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_mul_1)
-C_SYMBOL_NAME(mpihelp_mul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386/mpih-mul2.S b/mpi/i386/mpih-mul2.S
deleted file mode 100644
index f134af70e..000000000
--- a/mpi/i386/mpih-mul2.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* i80386 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_addmul_1)
-C_SYMBOL_NAME(mpihelp_addmul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(adc,l ,R(edx),$0)
- INSN2(add,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386/mpih-mul3.S b/mpi/i386/mpih-mul3.S
deleted file mode 100644
index 2907ed039..000000000
--- a/mpi/i386/mpih-mul3.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* i80386 submul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_submul_1)
-C_SYMBOL_NAME(mpihelp_submul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-Loop:
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
- INSN1(mul,l ,R(s2_limb))
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(adc,l ,R(edx),$0)
- INSN2(sub,l ,MEM_INDEX(res_ptr,size,4),R(eax))
- INSN2(adc,l ,R(edx),$0)
- INSN2(mov,l ,R(ebx),R(edx))
-
- INSN1(inc,l ,R(size))
- INSN1(jnz, ,Loop)
- INSN2(mov,l ,R(eax),R(ebx))
-
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i386/mpih-rshift.S b/mpi/i386/mpih-rshift.S
deleted file mode 100644
index 4886a98ca..000000000
--- a/mpi/i386/mpih-rshift.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/* i80386 rshift
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_rshift)
-C_SYMBOL_NAME(mpihelp_rshift:)
- pushl %edi
- pushl %esi
- pushl %ebx
-
- movl 16(%esp),%edi /* wp */
- movl 20(%esp),%esi /* up */
- movl 24(%esp),%edx /* usize */
- movl 28(%esp),%ecx /* cnt */
-
- leal -4(%edi,%edx,4),%edi
- leal (%esi,%edx,4),%esi
- negl %edx
-
- movl (%esi,%edx,4),%ebx /* read least significant limb */
- xorl %eax,%eax
- shrdl %ebx,%eax /* compute carry limb */
- incl %edx
- jz Lend2
- pushl %eax /* push carry limb onto stack */
- testb $1,%dl
- jnz L2 /* enter loop in the middle */
- movl %ebx,%eax
-
- ALIGN (3)
-Loop2: movl (%esi,%edx,4),%ebx /* load next higher limb */
- shrdl %ebx,%eax /* compute result limb */
- movl %eax,(%edi,%edx,4) /* store it */
- incl %edx
-L2: movl (%esi,%edx,4),%eax
- shrdl %eax,%ebx
- movl %ebx,(%edi,%edx,4)
- incl %edx
- jnz Loop2
-
- shrl %cl,%eax /* compute most significant limb */
- movl %eax,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-Lend2: shrl %cl,%ebx /* compute most significant limb */
- movl %ebx,(%edi) /* store it */
-
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386/mpih-sub1.S b/mpi/i386/mpih-sub1.S
deleted file mode 100644
index 2339334fe..000000000
--- a/mpi/i386/mpih-sub1.S
+++ /dev/null
@@ -1,119 +0,0 @@
-/* i80386 sub_n -- Sub two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_sub_n)
-C_SYMBOL_NAME(mpihelp_sub_n:)
- pushl %edi
- pushl %esi
-
- movl 12(%esp),%edi /* res_ptr */
- movl 16(%esp),%esi /* s1_ptr */
- movl 20(%esp),%edx /* s2_ptr */
- movl 24(%esp),%ecx /* size */
-
- movl %ecx,%eax
- shrl $3,%ecx /* compute count for unrolled loop */
- negl %eax
- andl $7,%eax /* get index where to start loop */
- jz Loop /* necessary special case for 0 */
- incl %ecx /* adjust loop count */
- shll $2,%eax /* adjustment for pointers... */
- subl %eax,%edi /* ... since they are offset ... */
- subl %eax,%esi /* ... by a constant when we ... */
- subl %eax,%edx /* ... enter the loop */
- shrl $2,%eax /* restore previous value */
-#ifdef PIC
-/* Calculate start address in loop for PIC. Due to limitations in some
- assemblers, Loop-L0-3 cannot be put into the leal */
- call L0
-L0: leal (%eax,%eax,8),%eax
- addl (%esp),%eax
- addl $(Loop-L0-3),%eax
- addl $4,%esp
-#else
-/* Calculate start address in loop for non-PIC. */
- leal Loop-3(%eax,%eax,8),%eax
-#endif
- jmp *%eax /* jump into loop */
- ALIGN (3)
-Loop: movl (%esi),%eax
- sbbl (%edx),%eax
- movl %eax,(%edi)
- movl 4(%esi),%eax
- sbbl 4(%edx),%eax
- movl %eax,4(%edi)
- movl 8(%esi),%eax
- sbbl 8(%edx),%eax
- movl %eax,8(%edi)
- movl 12(%esi),%eax
- sbbl 12(%edx),%eax
- movl %eax,12(%edi)
- movl 16(%esi),%eax
- sbbl 16(%edx),%eax
- movl %eax,16(%edi)
- movl 20(%esi),%eax
- sbbl 20(%edx),%eax
- movl %eax,20(%edi)
- movl 24(%esi),%eax
- sbbl 24(%edx),%eax
- movl %eax,24(%edi)
- movl 28(%esi),%eax
- sbbl 28(%edx),%eax
- movl %eax,28(%edi)
- leal 32(%edi),%edi
- leal 32(%esi),%esi
- leal 32(%edx),%edx
- decl %ecx
- jnz Loop
-
- sbbl %eax,%eax
- negl %eax
-
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i386/syntax.h b/mpi/i386/syntax.h
deleted file mode 100644
index 035c01960..000000000
--- a/mpi/i386/syntax.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* syntax.h -- Definitions for x86 syntax variations.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#undef ALIGN
-
-#if defined (BSD_SYNTAX) || defined (ELF_SYNTAX)
-#define R(r) %r
-#define MEM(base)(base)
-#define MEM_DISP(base,displacement)displacement(R(base))
-#define MEM_INDEX(base,index,size)(R(base),R(index),size)
-#ifdef __STDC__
-#define INSN1(mnemonic,size_suffix,dst)mnemonic##size_suffix dst
-#define INSN2(mnemonic,size_suffix,dst,src)mnemonic##size_suffix src,dst
-#else
-#define INSN1(mnemonic,size_suffix,dst)mnemonic/**/size_suffix dst
-#define INSN2(mnemonic,size_suffix,dst,src)mnemonic/**/size_suffix src,dst
-#endif
-#define TEXT .text
-#if defined (BSD_SYNTAX)
-#define ALIGN(log) .align log
-#endif
-#if defined (ELF_SYNTAX)
-#define ALIGN(log) .align 1<<log
-#endif
-#define GLOBL .globl
-#endif
-
-#ifdef INTEL_SYNTAX
-#define R(r) r
-#define MEM(base)[base]
-#define MEM_DISP(base,displacement)[base+(displacement)]
-#define MEM_INDEX(base,index,size)[base+index*size]
-#define INSN1(mnemonic,size_suffix,dst)mnemonic dst
-#define INSN2(mnemonic,size_suffix,dst,src)mnemonic dst,src
-#define TEXT .text
-#define ALIGN(log) .align log
-#define GLOBL .globl
-#endif
-
-#ifdef X86_BROKEN_ALIGN
-#undef ALIGN
-#define ALIGN(log) .align log,0x90
-#endif
diff --git a/mpi/i586/README b/mpi/i586/README
deleted file mode 100644
index d73b08268..000000000
--- a/mpi/i586/README
+++ /dev/null
@@ -1,26 +0,0 @@
-This directory contains mpn functions optimized for Intel Pentium
-processors.
-
-RELEVANT OPTIMIZATION ISSUES
-
-1. Pentium doesn't allocate cache lines on writes, unlike most other modern
-processors. Since the functions in the mpn class do array writes, we have to
-handle allocating the destination cache lines by reading a word from it in the
-loops, to achieve the best performance.
-
-2. Pairing of memory operations requires that the two issued operations refer
-to different cache banks. The simplest way to insure this is to read/write
-two words from the same object. If we make operations on different objects,
-they might or might not be to the same cache bank.
-
-STATUS
-
-1. mpn_lshift and mpn_rshift run at about 6 cycles/limb, but the Pentium
-documentation indicates that they should take only 43/8 = 5.375 cycles/limb,
-or 5 cycles/limb asymptotically.
-
-2. mpn_add_n and mpn_sub_n run at asymptotically 2 cycles/limb. Due to loop
-overhead and other delays (cache refill?), they run at or near 2.5 cycles/limb.
-
-3. mpn_mul_1, mpn_addmul_1, mpn_submul_1 all run 1 cycle faster than they
-should...
diff --git a/mpi/i586/distfiles b/mpi/i586/distfiles
deleted file mode 100644
index 8f821fbfb..000000000
--- a/mpi/i586/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-mpih-sub1.S
-README
-
diff --git a/mpi/i586/mpih-add1.S b/mpi/i586/mpih-add1.S
deleted file mode 100644
index 248b0c0b2..000000000
--- a/mpi/i586/mpih-add1.S
+++ /dev/null
@@ -1,135 +0,0 @@
-/* i80586 add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_add_n)
-C_SYMBOL_NAME(mpihelp_add_n:)
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s1_ptr */
- movl 28(%esp),%ebp /* s2_ptr */
- movl 32(%esp),%ecx /* size */
-
- movl (%ebp),%ebx
-
- decl %ecx
- movl %ecx,%edx
- shrl $3,%ecx
- andl $7,%edx
- testl %ecx,%ecx /* zero carry flag */
- jz Lend
- pushl %edx
-
- ALIGN (3)
-Loop: movl 28(%edi),%eax /* fetch destination cache line */
- leal 32(%edi),%edi
-
-L1: movl (%esi),%eax
- movl 4(%esi),%edx
- adcl %ebx,%eax
- movl 4(%ebp),%ebx
- adcl %ebx,%edx
- movl 8(%ebp),%ebx
- movl %eax,-32(%edi)
- movl %edx,-28(%edi)
-
-L2: movl 8(%esi),%eax
- movl 12(%esi),%edx
- adcl %ebx,%eax
- movl 12(%ebp),%ebx
- adcl %ebx,%edx
- movl 16(%ebp),%ebx
- movl %eax,-24(%edi)
- movl %edx,-20(%edi)
-
-L3: movl 16(%esi),%eax
- movl 20(%esi),%edx
- adcl %ebx,%eax
- movl 20(%ebp),%ebx
- adcl %ebx,%edx
- movl 24(%ebp),%ebx
- movl %eax,-16(%edi)
- movl %edx,-12(%edi)
-
-L4: movl 24(%esi),%eax
- movl 28(%esi),%edx
- adcl %ebx,%eax
- movl 28(%ebp),%ebx
- adcl %ebx,%edx
- movl 32(%ebp),%ebx
- movl %eax,-8(%edi)
- movl %edx,-4(%edi)
-
- leal 32(%esi),%esi
- leal 32(%ebp),%ebp
- decl %ecx
- jnz Loop
-
- popl %edx
-Lend:
- decl %edx /* test %edx w/o clobbering carry */
- js Lend2
- incl %edx
-Loop2:
- leal 4(%edi),%edi
- movl (%esi),%eax
- adcl %ebx,%eax
- movl 4(%ebp),%ebx
- movl %eax,-4(%edi)
- leal 4(%esi),%esi
- leal 4(%ebp),%ebp
- decl %edx
- jnz Loop2
-Lend2:
- movl (%esi),%eax
- adcl %ebx,%eax
- movl %eax,(%edi)
-
- sbbl %eax,%eax
- negl %eax
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-
diff --git a/mpi/i586/mpih-lshift.S b/mpi/i586/mpih-lshift.S
deleted file mode 100644
index ed040912d..000000000
--- a/mpi/i586/mpih-lshift.S
+++ /dev/null
@@ -1,231 +0,0 @@
-/* i80586 lshift
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_lshift)
-C_SYMBOL_NAME(mpihelp_lshift:)
-
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s_ptr */
- movl 28(%esp),%ebp /* size */
- movl 32(%esp),%ecx /* cnt */
-
-/* We can use faster code for shift-by-1 under certain conditions. */
- cmp $1,%ecx
- jne Lnormal
- leal 4(%esi),%eax
- cmpl %edi,%eax
- jnc Lspecial /* jump if s_ptr + 1 >= res_ptr */
- leal (%esi,%ebp,4),%eax
- cmpl %eax,%edi
- jnc Lspecial /* jump if res_ptr >= s_ptr + size */
-
-Lnormal:
- leal -4(%edi,%ebp,4),%edi
- leal -4(%esi,%ebp,4),%esi
-
- movl (%esi),%edx
- subl $4,%esi
- xorl %eax,%eax
- shldl %cl,%edx,%eax /* compute carry limb */
- pushl %eax /* push carry limb onto stack */
-
- decl %ebp
- pushl %ebp
- shrl $3,%ebp
- jz Lend
-
- movl (%edi),%eax /* fetch destination cache line */
-
- ALIGN (2)
-Loop: movl -28(%edi),%eax /* fetch destination cache line */
- movl %edx,%ebx
-
- movl (%esi),%eax
- movl -4(%esi),%edx
- shldl %cl,%eax,%ebx
- shldl %cl,%edx,%eax
- movl %ebx,(%edi)
- movl %eax,-4(%edi)
-
- movl -8(%esi),%ebx
- movl -12(%esi),%eax
- shldl %cl,%ebx,%edx
- shldl %cl,%eax,%ebx
- movl %edx,-8(%edi)
- movl %ebx,-12(%edi)
-
- movl -16(%esi),%edx
- movl -20(%esi),%ebx
- shldl %cl,%edx,%eax
- shldl %cl,%ebx,%edx
- movl %eax,-16(%edi)
- movl %edx,-20(%edi)
-
- movl -24(%esi),%eax
- movl -28(%esi),%edx
- shldl %cl,%eax,%ebx
- shldl %cl,%edx,%eax
- movl %ebx,-24(%edi)
- movl %eax,-28(%edi)
-
- subl $32,%esi
- subl $32,%edi
- decl %ebp
- jnz Loop
-
-Lend: popl %ebp
- andl $7,%ebp
- jz Lend2
-Loop2: movl (%esi),%eax
- shldl %cl,%eax,%edx
- movl %edx,(%edi)
- movl %eax,%edx
- subl $4,%esi
- subl $4,%edi
- decl %ebp
- jnz Loop2
-
-Lend2: shll %cl,%edx /* compute least significant limb */
- movl %edx,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-/* We loop from least significant end of the arrays, which is only
- permissable if the source and destination don't overlap, since the
- function is documented to work for overlapping source and destination.
-*/
-
-Lspecial:
- movl (%esi),%edx
- addl $4,%esi
-
- decl %ebp
- pushl %ebp
- shrl $3,%ebp
-
- addl %edx,%edx
- incl %ebp
- decl %ebp
- jz LLend
-
- movl (%edi),%eax /* fetch destination cache line */
-
- ALIGN (2)
-LLoop: movl 28(%edi),%eax /* fetch destination cache line */
- movl %edx,%ebx
-
- movl (%esi),%eax
- movl 4(%esi),%edx
- adcl %eax,%eax
- movl %ebx,(%edi)
- adcl %edx,%edx
- movl %eax,4(%edi)
-
- movl 8(%esi),%ebx
- movl 12(%esi),%eax
- adcl %ebx,%ebx
- movl %edx,8(%edi)
- adcl %eax,%eax
- movl %ebx,12(%edi)
-
- movl 16(%esi),%edx
- movl 20(%esi),%ebx
- adcl %edx,%edx
- movl %eax,16(%edi)
- adcl %ebx,%ebx
- movl %edx,20(%edi)
-
- movl 24(%esi),%eax
- movl 28(%esi),%edx
- adcl %eax,%eax
- movl %ebx,24(%edi)
- adcl %edx,%edx
- movl %eax,28(%edi)
-
- leal 32(%esi),%esi /* use leal not to clobber carry */
- leal 32(%edi),%edi
- decl %ebp
- jnz LLoop
-
-LLend: popl %ebp
- sbbl %eax,%eax /* save carry in %eax */
- andl $7,%ebp
- jz LLend2
- addl %eax,%eax /* restore carry from eax */
-LLoop2: movl %edx,%ebx
- movl (%esi),%edx
- adcl %edx,%edx
- movl %ebx,(%edi)
-
- leal 4(%esi),%esi /* use leal not to clobber carry */
- leal 4(%edi),%edi
- decl %ebp
- jnz LLoop2
-
- jmp LL1
-LLend2: addl %eax,%eax /* restore carry from eax */
-LL1: movl %edx,(%edi) /* store last limb */
-
- sbbl %eax,%eax
- negl %eax
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-
diff --git a/mpi/i586/mpih-mul1.S b/mpi/i586/mpih-mul1.S
deleted file mode 100644
index 42bcde6bd..000000000
--- a/mpi/i586/mpih-mul1.S
+++ /dev/null
@@ -1,91 +0,0 @@
-/* i80586 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_mul_1)
-C_SYMBOL_NAME(mpihelp_mul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-
-Loop: INSN2(adc,l ,R(ebx),$0)
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
-
- INSN1(mul,l ,R(s2_limb))
-
- INSN2(add,l ,R(ebx),R(eax))
-
- INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
- INSN1(inc,l ,R(size))
-
- INSN2(mov,l ,R(ebx),R(edx))
- INSN1(jnz, ,Loop)
-
- INSN2(adc,l ,R(ebx),$0)
- INSN2(mov,l ,R(eax),R(ebx))
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i586/mpih-mul2.S b/mpi/i586/mpih-mul2.S
deleted file mode 100644
index 54c5df96b..000000000
--- a/mpi/i586/mpih-mul2.S
+++ /dev/null
@@ -1,95 +0,0 @@
-/* i80586 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_addmul_1)
-C_SYMBOL_NAME(mpihelp_addmul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-
-Loop: INSN2(adc,l ,R(ebx),$0)
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
-
- INSN1(mul,l ,R(s2_limb))
-
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(mov,l ,R(ebx),MEM_INDEX(res_ptr,size,4))
-
- INSN2(adc,l ,R(edx),$0)
- INSN2(add,l ,R(ebx),R(eax))
-
- INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
- INSN1(inc,l ,R(size))
-
- INSN2(mov,l ,R(ebx),R(edx))
- INSN1(jnz, ,Loop)
-
- INSN2(adc,l ,R(ebx),$0)
- INSN2(mov,l ,R(eax),R(ebx))
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i586/mpih-mul3.S b/mpi/i586/mpih-mul3.S
deleted file mode 100644
index 0d61ff267..000000000
--- a/mpi/i586/mpih-mul3.S
+++ /dev/null
@@ -1,95 +0,0 @@
-/* i80586 submul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-#define res_ptr edi
-#define s1_ptr esi
-#define size ecx
-#define s2_limb ebp
-
- TEXT
- ALIGN (3)
- GLOBL C_SYMBOL_NAME(mpihelp_submul_1)
-C_SYMBOL_NAME(mpihelp_submul_1:)
-
- INSN1(push,l ,R(edi))
- INSN1(push,l ,R(esi))
- INSN1(push,l ,R(ebx))
- INSN1(push,l ,R(ebp))
-
- INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
- INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
- INSN2(mov,l ,R(size),MEM_DISP(esp,28))
- INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
-
- INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
- INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
- INSN1(neg,l ,R(size))
- INSN2(xor,l ,R(ebx),R(ebx))
- ALIGN (3)
-
-Loop: INSN2(adc,l ,R(ebx),$0)
- INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
-
- INSN1(mul,l ,R(s2_limb))
-
- INSN2(add,l ,R(eax),R(ebx))
- INSN2(mov,l ,R(ebx),MEM_INDEX(res_ptr,size,4))
-
- INSN2(adc,l ,R(edx),$0)
- INSN2(sub,l ,R(ebx),R(eax))
-
- INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
- INSN1(inc,l ,R(size))
-
- INSN2(mov,l ,R(ebx),R(edx))
- INSN1(jnz, ,Loop)
-
- INSN2(adc,l ,R(ebx),$0)
- INSN2(mov,l ,R(eax),R(ebx))
- INSN1(pop,l ,R(ebp))
- INSN1(pop,l ,R(ebx))
- INSN1(pop,l ,R(esi))
- INSN1(pop,l ,R(edi))
- ret
-
diff --git a/mpi/i586/mpih-rshift.S b/mpi/i586/mpih-rshift.S
deleted file mode 100644
index 2e3316216..000000000
--- a/mpi/i586/mpih-rshift.S
+++ /dev/null
@@ -1,230 +0,0 @@
-/* i80586 rshift
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_rshift)
-C_SYMBOL_NAME(mpihelp_rshift:)
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s_ptr */
- movl 28(%esp),%ebp /* size */
- movl 32(%esp),%ecx /* cnt */
-
-/* We can use faster code for shift-by-1 under certain conditions. */
- cmp $1,%ecx
- jne Rnormal
- leal 4(%edi),%eax
- cmpl %esi,%eax
- jnc Rspecial /* jump if res_ptr + 1 >= s_ptr */
- leal (%edi,%ebp,4),%eax
- cmpl %eax,%esi
- jnc Rspecial /* jump if s_ptr >= res_ptr + size */
-
-Rnormal:
- movl (%esi),%edx
- addl $4,%esi
- xorl %eax,%eax
- shrdl %cl,%edx,%eax /* compute carry limb */
- pushl %eax /* push carry limb onto stack */
-
- decl %ebp
- pushl %ebp
- shrl $3,%ebp
- jz Rend
-
- movl (%edi),%eax /* fetch destination cache line */
-
- ALIGN (2)
-Roop: movl 28(%edi),%eax /* fetch destination cache line */
- movl %edx,%ebx
-
- movl (%esi),%eax
- movl 4(%esi),%edx
- shrdl %cl,%eax,%ebx
- shrdl %cl,%edx,%eax
- movl %ebx,(%edi)
- movl %eax,4(%edi)
-
- movl 8(%esi),%ebx
- movl 12(%esi),%eax
- shrdl %cl,%ebx,%edx
- shrdl %cl,%eax,%ebx
- movl %edx,8(%edi)
- movl %ebx,12(%edi)
-
- movl 16(%esi),%edx
- movl 20(%esi),%ebx
- shrdl %cl,%edx,%eax
- shrdl %cl,%ebx,%edx
- movl %eax,16(%edi)
- movl %edx,20(%edi)
-
- movl 24(%esi),%eax
- movl 28(%esi),%edx
- shrdl %cl,%eax,%ebx
- shrdl %cl,%edx,%eax
- movl %ebx,24(%edi)
- movl %eax,28(%edi)
-
- addl $32,%esi
- addl $32,%edi
- decl %ebp
- jnz Roop
-
-Rend: popl %ebp
- andl $7,%ebp
- jz Rend2
-Roop2: movl (%esi),%eax
- shrdl %cl,%eax,%edx /* compute result limb */
- movl %edx,(%edi)
- movl %eax,%edx
- addl $4,%esi
- addl $4,%edi
- decl %ebp
- jnz Roop2
-
-Rend2: shrl %cl,%edx /* compute most significant limb */
- movl %edx,(%edi) /* store it */
-
- popl %eax /* pop carry limb */
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
-/* We loop from least significant end of the arrays, which is only
- permissable if the source and destination don't overlap, since the
- function is documented to work for overlapping source and destination.
-*/
-
-Rspecial:
- leal -4(%edi,%ebp,4),%edi
- leal -4(%esi,%ebp,4),%esi
-
- movl (%esi),%edx
- subl $4,%esi
-
- decl %ebp
- pushl %ebp
- shrl $3,%ebp
-
- shrl $1,%edx
- incl %ebp
- decl %ebp
- jz RLend
-
- movl (%edi),%eax /* fetch destination cache line */
-
- ALIGN (2)
-RLoop: movl -28(%edi),%eax /* fetch destination cache line */
- movl %edx,%ebx
-
- movl (%esi),%eax
- movl -4(%esi),%edx
- rcrl $1,%eax
- movl %ebx,(%edi)
- rcrl $1,%edx
- movl %eax,-4(%edi)
-
- movl -8(%esi),%ebx
- movl -12(%esi),%eax
- rcrl $1,%ebx
- movl %edx,-8(%edi)
- rcrl $1,%eax
- movl %ebx,-12(%edi)
-
- movl -16(%esi),%edx
- movl -20(%esi),%ebx
- rcrl $1,%edx
- movl %eax,-16(%edi)
- rcrl $1,%ebx
- movl %edx,-20(%edi)
-
- movl -24(%esi),%eax
- movl -28(%esi),%edx
- rcrl $1,%eax
- movl %ebx,-24(%edi)
- rcrl $1,%edx
- movl %eax,-28(%edi)
-
- leal -32(%esi),%esi /* use leal not to clobber carry */
- leal -32(%edi),%edi
- decl %ebp
- jnz RLoop
-
-RLend: popl %ebp
- sbbl %eax,%eax /* save carry in %eax */
- andl $7,%ebp
- jz RLend2
- addl %eax,%eax /* restore carry from eax */
-RLoop2: movl %edx,%ebx
- movl (%esi),%edx
- rcrl $1,%edx
- movl %ebx,(%edi)
-
- leal -4(%esi),%esi /* use leal not to clobber carry */
- leal -4(%edi),%edi
- decl %ebp
- jnz RLoop2
-
- jmp RL1
-RLend2: addl %eax,%eax /* restore carry from eax */
-RL1: movl %edx,(%edi) /* store last limb */
-
- movl $0,%eax
- rcrl $1,%eax
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/i586/mpih-sub1.S b/mpi/i586/mpih-sub1.S
deleted file mode 100644
index a54be0e91..000000000
--- a/mpi/i586/mpih-sub1.S
+++ /dev/null
@@ -1,144 +0,0 @@
-/* i80586 sub_n -- Sub two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 12)
- * mpi_size_t size) (sp + 16)
- */
-
-
-.text
- ALIGN (3)
- .globl C_SYMBOL_NAME(mpihelp_sub_n)
-C_SYMBOL_NAME(mpihelp_sub_n:)
-
- pushl %edi
- pushl %esi
- pushl %ebx
- pushl %ebp
-
- movl 20(%esp),%edi /* res_ptr */
- movl 24(%esp),%esi /* s1_ptr */
- movl 28(%esp),%ebp /* s2_ptr */
- movl 32(%esp),%ecx /* size */
-
- movl (%ebp),%ebx
-
- decl %ecx
- movl %ecx,%edx
- shrl $3,%ecx
- andl $7,%edx
- testl %ecx,%ecx /* zero carry flag */
- jz Lend
- pushl %edx
-
- ALIGN (3)
-Loop: movl 28(%edi),%eax /* fetch destination cache line */
- leal 32(%edi),%edi
-
-L1: movl (%esi),%eax
- movl 4(%esi),%edx
- sbbl %ebx,%eax
- movl 4(%ebp),%ebx
- sbbl %ebx,%edx
- movl 8(%ebp),%ebx
- movl %eax,-32(%edi)
- movl %edx,-28(%edi)
-
-L2: movl 8(%esi),%eax
- movl 12(%esi),%edx
- sbbl %ebx,%eax
- movl 12(%ebp),%ebx
- sbbl %ebx,%edx
- movl 16(%ebp),%ebx
- movl %eax,-24(%edi)
- movl %edx,-20(%edi)
-
-L3: movl 16(%esi),%eax
- movl 20(%esi),%edx
- sbbl %ebx,%eax
- movl 20(%ebp),%ebx
- sbbl %ebx,%edx
- movl 24(%ebp),%ebx
- movl %eax,-16(%edi)
- movl %edx,-12(%edi)
-
-L4: movl 24(%esi),%eax
- movl 28(%esi),%edx
- sbbl %ebx,%eax
- movl 28(%ebp),%ebx
- sbbl %ebx,%edx
- movl 32(%ebp),%ebx
- movl %eax,-8(%edi)
- movl %edx,-4(%edi)
-
- leal 32(%esi),%esi
- leal 32(%ebp),%ebp
- decl %ecx
- jnz Loop
-
- popl %edx
-Lend:
- decl %edx /* test %edx w/o clobbering carry */
- js Lend2
- incl %edx
-Loop2:
- leal 4(%edi),%edi
- movl (%esi),%eax
- sbbl %ebx,%eax
- movl 4(%ebp),%ebx
- movl %eax,-4(%edi)
- leal 4(%esi),%esi
- leal 4(%ebp),%ebp
- decl %edx
- jnz Loop2
-Lend2:
- movl (%esi),%eax
- sbbl %ebx,%eax
- movl %eax,(%edi)
-
- sbbl %eax,%eax
- negl %eax
-
- popl %ebp
- popl %ebx
- popl %esi
- popl %edi
- ret
-
diff --git a/mpi/longlong.h b/mpi/longlong.h
deleted file mode 100644
index 2976a0e22..000000000
--- a/mpi/longlong.h
+++ /dev/null
@@ -1,1499 +0,0 @@
-/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
- Note: I added some stuff for use with gnupg
-
-Copyright (C) 1991, 1992, 1993, 1994, 1996, 1998,
- 2000, 2001, 2002 Free Software Foundation, Inc.
-
-This file is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-This file is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with this file; see the file COPYING.LIB. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA. */
-
-/* You have to define the following before including this file:
-
- UWtype -- An unsigned type, default type for operations (typically a "word")
- UHWtype -- An unsigned type, at least half the size of UWtype.
- UDWtype -- An unsigned type, at least twice as large a UWtype
- W_TYPE_SIZE -- size in bits of UWtype
-
- SItype, USItype -- Signed and unsigned 32 bit types.
- DItype, UDItype -- Signed and unsigned 64 bit types.
-
- On a 32 bit machine UWtype should typically be USItype;
- on a 64 bit machine, UWtype should typically be UDItype.
-*/
-
-#define __BITS4 (W_TYPE_SIZE / 4)
-#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
-#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
-#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
-
-/* This is used to make sure no undesirable sharing between different libraries
- that use this file takes place. */
-#ifndef __MPN
-#define __MPN(x) __##x
-#endif
-
-/* Define auxiliary asm macros.
-
- 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two
- UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype
- word product in HIGH_PROD and LOW_PROD.
-
- 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
- UDWtype product. This is just a variant of umul_ppmm.
-
- 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator) divides a UDWtype, composed by the UWtype integers
- HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
- in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less
- than DENOMINATOR for correct operation. If, in addition, the most
- significant bit of DENOMINATOR must be 1, then the pre-processor symbol
- UDIV_NEEDS_NORMALIZATION is defined to 1.
-
- 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator). Like udiv_qrnnd but the numbers are signed. The quotient
- is rounded towards 0.
-
- 5) count_leading_zeros(count, x) counts the number of zero-bits from the
- msb to the first non-zero bit in the UWtype X. This is the number of
- steps X needs to be shifted left to set the msb. Undefined for X == 0,
- unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
-
- 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
- from the least significant end.
-
- 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
- high_addend_2, low_addend_2) adds two UWtype integers, composed by
- HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
- respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow
- (i.e. carry out) is not stored anywhere, and is lost.
-
- 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
- high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
- composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
- LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE
- and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
- and is lost.
-
- If any of these macros are left undefined for a particular CPU,
- C macros are used. */
-
-/* The CPUs come in alphabetical order below.
-
- Please add support for more CPUs here, or improve the current support
- for the CPUs below! */
-
-#if defined (__GNUC__) && !defined (NO_ASM)
-
-/* We sometimes need to clobber "cc" with gcc2, but that would not be
- understood by gcc1. Use cpp to avoid major code duplication. */
-#if __GNUC__ < 2
-#define __CLOBBER_CC
-#define __AND_CLOBBER_CC
-#else /* __GNUC__ >= 2 */
-#define __CLOBBER_CC : "cc"
-#define __AND_CLOBBER_CC , "cc"
-#endif /* __GNUC__ < 2 */
-
-
-/***************************************
- ************** A29K *****************
- ***************************************/
-#if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %1,%4,%5\n" \
- "addc %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %1,%4,%5\n" \
- "subc %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("multiplu %0,%1,%2" \
- : "=r" ((USItype)(xl)) \
- : "r" (__m0), \
- "r" (__m1)); \
- __asm__ ("multmu %0,%1,%2" \
- : "=r" ((USItype)(xh)) \
- : "r" (__m0), \
- "r" (__m1)); \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("dividu %0,%3,%4" \
- : "=r" ((USItype)(q)), \
- "=q" ((USItype)(r)) \
- : "1" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "r" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x)))
-#define COUNT_LEADING_ZEROS_0 32
-#endif /* __a29k__ */
-
-
-#if defined (__alpha) && W_TYPE_SIZE == 64
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- UDItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("umulh %r1,%2,%0" \
- : "=r" ((UDItype) ph) \
- : "%rJ" (__m0), \
- "rI" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 46
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { UDItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern UDItype __udiv_qrnnd ();
-#define UDIV_TIME 220
-#endif /* LONGLONG_STANDALONE */
-#endif /* __alpha */
-
-/***************************************
- ************** ARM ******************
- ***************************************/
-#if defined (__arm__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds %1, %4, %5\n" \
- "adc %0, %2, %3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subs %1, %4, %5\n" \
- "sbc %0, %2, %3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#if defined __ARM_ARCH_2__ || defined __ARM_ARCH_3__
-#define umul_ppmm(xh, xl, a, b) \
- __asm__ ("%@ Inlined umul_ppmm\n" \
- "mov %|r0, %2, lsr #16 @ AAAA\n" \
- "mov %|r2, %3, lsr #16 @ BBBB\n" \
- "bic %|r1, %2, %|r0, lsl #16 @ aaaa\n" \
- "bic %0, %3, %|r2, lsl #16 @ bbbb\n" \
- "mul %1, %|r1, %|r2 @ aaaa * BBBB\n" \
- "mul %|r2, %|r0, %|r2 @ AAAA * BBBB\n" \
- "mul %|r1, %0, %|r1 @ aaaa * bbbb\n" \
- "mul %0, %|r0, %0 @ AAAA * bbbb\n" \
- "adds %|r0, %1, %0 @ central sum\n" \
- "addcs %|r2, %|r2, #65536\n" \
- "adds %1, %|r1, %|r0, lsl #16\n" \
- "adc %0, %|r2, %|r0, lsr #16" \
- : "=&r" ((USItype)(xh)), \
- "=r" ((USItype)(xl)) \
- : "r" ((USItype)(a)), \
- "r" ((USItype)(b)) \
- : "r0", "r1", "r2")
-#else
-#define umul_ppmm(xh, xl, a, b) \
- __asm__ ("%@ Inlined umul_ppmm\n" \
- "umull %r1, %r0, %r2, %r3" \
- : "=&r" ((USItype)(xh)), \
- "=r" ((USItype)(xl)) \
- : "r" ((USItype)(a)), \
- "r" ((USItype)(b)) \
- : "r0", "r1")
-#endif
-#define UMUL_TIME 20
-#define UDIV_TIME 100
-#endif /* __arm__ */
-
-/***************************************
- ************** CLIPPER **************
- ***************************************/
-#if defined (__clipper__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("mulwux %2,%0" \
- : "=r" (__xx.__ll) \
- : "%0" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define smul_ppmm(w1, w0, u, v) \
- ({union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("mulwx %2,%0" \
- : "=r" (__xx.__ll) \
- : "%0" ((SItype)(u)), \
- "r" ((SItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("mulwux %2,%0" \
- : "=r" (__w) \
- : "%0" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- __w; })
-#endif /* __clipper__ */
-
-
-/***************************************
- ************** GMICRO ***************
- ***************************************/
-#if defined (__gmicro__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add.w %5,%1\n" \
- "addx %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub.w %5,%1\n" \
- "subx %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- __asm__ ("mulx %3,%0,%1" \
- : "=g" ((USItype)(ph)), \
- "=r" ((USItype)(pl)) \
- : "%0" ((USItype)(m0)), \
- "g" ((USItype)(m1)))
-#define udiv_qrnnd(q, r, nh, nl, d) \
- __asm__ ("divx %4,%0,%1" \
- : "=g" ((USItype)(q)), \
- "=r" ((USItype)(r)) \
- : "1" ((USItype)(nh)), \
- "0" ((USItype)(nl)), \
- "g" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("bsch/1 %1,%0" \
- : "=g" (count) \
- : "g" ((USItype)(x)), \
- "0" ((USItype)0))
-#endif
-
-
-/***************************************
- ************** HPPA *****************
- ***************************************/
-#if defined (__hppa) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ (" add %4,%5,%1\n" \
- " addc %2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rM" ((USItype)(ah)), \
- "rM" ((USItype)(bh)), \
- "%rM" ((USItype)(al)), \
- "rM" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ (" sub %4,%5,%1\n" \
- " subb %2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rM" ((USItype)(ah)), \
- "rM" ((USItype)(bh)), \
- "rM" ((USItype)(al)), \
- "rM" ((USItype)(bl)))
-#if defined (_PA_RISC1_1)
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ (" xmpyu %1,%2,%0" \
- : "=*f" (__xx.__ll) \
- : "*f" ((USItype)(u)), \
- "*f" ((USItype)(v))); \
- (wh) = __xx.__i.__h; \
- (wl) = __xx.__i.__l; \
- } while (0)
-#define UMUL_TIME 8
-#define UDIV_TIME 60
-#else
-#define UMUL_TIME 40
-#define UDIV_TIME 80
-#endif
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { USItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern USItype __udiv_qrnnd ();
-#endif /* LONGLONG_STANDALONE */
-#define count_leading_zeros(count, x) \
- do { \
- USItype __tmp; \
- __asm__ ( \
- " ldi 1,%0 \n" \
- " extru,= %1,15,16,%%r0 ; Bits 31..16 zero? \n" \
- " extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n" \
- " ldo 16(%0),%0 ; Yes. Perform add. \n" \
- " extru,= %1,23,8,%%r0 ; Bits 15..8 zero? \n" \
- " extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n" \
- " ldo 8(%0),%0 ; Yes. Perform add. \n" \
- " extru,= %1,27,4,%%r0 ; Bits 7..4 zero? \n" \
- " extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n" \
- " ldo 4(%0),%0 ; Yes. Perform add. \n" \
- " extru,= %1,29,2,%%r0 ; Bits 3..2 zero? \n" \
- " extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n" \
- " ldo 2(%0),%0 ; Yes. Perform add. \n" \
- " extru %1,30,1,%1 ; Extract bit 1. \n" \
- " sub %0,%1,%0 ; Subtract it. " \
- : "=r" (count), "=r" (__tmp) : "1" (x)); \
- } while (0)
-#endif /* hppa */
-
-
-/***************************************
- ************** I370 *****************
- ***************************************/
-#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mr %0,%3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (__m0), \
- "r" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define smul_ppmm(xh, xl, m0, m1) \
- do { \
- union {DItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("mr %0,%3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (m0), \
- "r" (m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
- __asm__ ("dr %0,%2" \
- : "=r" (__xx.__ll) \
- : "0" (__xx.__ll), "r" (d)); \
- (q) = __xx.__i.__l; (r) = __xx.__i.__h; \
- } while (0)
-#endif
-
-
-/***************************************
- ************** I386 *****************
- ***************************************/
-#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl %5,%1\n" \
- "adcl %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl %5,%1\n" \
- "sbbl %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mull %3" \
- : "=a" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "%0" ((USItype)(u)), \
- "rm" ((USItype)(v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divl %4" \
- : "=a" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "rm" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("bsrl %1,%0" \
- : "=r" (__cbtmp) : "rm" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define count_trailing_zeros(count, x) \
- __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x)))
-#ifndef UMUL_TIME
-#define UMUL_TIME 40
-#endif
-#ifndef UDIV_TIME
-#define UDIV_TIME 40
-#endif
-#endif /* 80x86 */
-
-
-/***************************************
- ************** I860 *****************
- ***************************************/
-#if defined (__i860__) && W_TYPE_SIZE == 32
-#define rshift_rhlc(r,h,l,c) \
- __asm__ ("shr %3,r0,r0\n" \
- "shrd %1,%2,%0" \
- "=r" (r) : "r" (h), "r" (l), "rn" (c))
-#endif /* i860 */
-
-/***************************************
- ************** I960 *****************
- ***************************************/
-#if defined (__i960__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("cmpo 1,0\n" \
- "addc %5,%4,%1\n" \
- "addc %3,%2,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%dI" ((USItype)(ah)), \
- "dI" ((USItype)(bh)), \
- "%dI" ((USItype)(al)), \
- "dI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("cmpo 0,0\n" \
- "subc %5,%4,%1\n" \
- "subc %3,%2,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "dI" ((USItype)(ah)), \
- "dI" ((USItype)(bh)), \
- "dI" ((USItype)(al)), \
- "dI" ((USItype)(bl)))
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__xx.__ll) \
- : "%dI" ((USItype)(u)), \
- "dI" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__w) \
- : "%dI" ((USItype)(u)), \
- "dI" ((USItype)(v))); \
- __w; })
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __nn; \
- __nn.__i.__h = (nh); __nn.__i.__l = (nl); \
- __asm__ ("ediv %d,%n,%0" \
- : "=d" (__rq.__ll) \
- : "dI" (__nn.__ll), \
- "dI" ((USItype)(d))); \
- (r) = __rq.__i.__l; (q) = __rq.__i.__h; \
- } while (0)
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("scanbit %1,%0" \
- : "=r" (__cbtmp) \
- : "r" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define COUNT_LEADING_ZEROS_0 (-32) /* sic */
-#if defined (__i960mx) /* what is the proper symbol to test??? */
-#define rshift_rhlc(r,h,l,c) \
- do { \
- union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __nn; \
- __nn.__i.__h = (h); __nn.__i.__l = (l); \
- __asm__ ("shre %2,%1,%0" \
- : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \
- }
-#endif /* i960mx */
-#endif /* i960 */
-
-
-/***************************************
- ************** 68000 ****************
- ***************************************/
-#if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add%.l %5,%1\n" \
- "addx%.l %3,%0" \
- : "=d" ((USItype)(sh)), \
- "=&d" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "d" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub%.l %5,%1\n" \
- "subx%.l %3,%0" \
- : "=d" ((USItype)(sh)), \
- "=&d" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "d" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mulu%.l %3,%1:%0" \
- : "=d" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "%0" ((USItype)(u)), \
- "dmi" ((USItype)(v)))
-#define UMUL_TIME 45
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divu%.l %4,%1:%0" \
- : "=d" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "dmi" ((USItype)(d)))
-#define UDIV_TIME 90
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divs%.l %4,%1:%0" \
- : "=d" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "dmi" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("bfffo %1{%b2:%b2},%0" \
- : "=d" ((USItype)(count)) \
- : "od" ((USItype)(x)), "n" (0))
-#define COUNT_LEADING_ZEROS_0 32
-#else /* not mc68020 */
-#define umul_ppmm(xh, xl, a, b) \
- do { USItype __umul_tmp1, __umul_tmp2; \
- __asm__ ("| Inlined umul_ppmm \n" \
- " move%.l %5,%3 \n" \
- " move%.l %2,%0 \n" \
- " move%.w %3,%1 \n" \
- " swap %3 \n" \
- " swap %0 \n" \
- " mulu %2,%1 \n" \
- " mulu %3,%0 \n" \
- " mulu %2,%3 \n" \
- " swap %2 \n" \
- " mulu %5,%2 \n" \
- " add%.l %3,%2 \n" \
- " jcc 1f \n" \
- " add%.l %#0x10000,%0 \n" \
- "1: move%.l %2,%3 \n" \
- " clr%.w %2 \n" \
- " swap %2 \n" \
- " swap %3 \n" \
- " clr%.w %3 \n" \
- " add%.l %3,%1 \n" \
- " addx%.l %2,%0 \n" \
- " | End inlined umul_ppmm" \
- : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)), \
- "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \
- : "%2" ((USItype)(a)), "d" ((USItype)(b))); \
- } while (0)
-#define UMUL_TIME 100
-#define UDIV_TIME 400
-#endif /* not mc68020 */
-#endif /* mc68000 */
-
-
-/***************************************
- ************** 88000 ****************
- ***************************************/
-#if defined (__m88000__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addu.co %1,%r4,%r5\n" \
- "addu.ci %0,%r2,%r3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rJ" ((USItype)(ah)), \
- "rJ" ((USItype)(bh)), \
- "%rJ" ((USItype)(al)), \
- "rJ" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subu.co %1,%r4,%r5\n" \
- "subu.ci %0,%r2,%r3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rJ" ((USItype)(ah)), \
- "rJ" ((USItype)(bh)), \
- "rJ" ((USItype)(al)), \
- "rJ" ((USItype)(bl)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("ff1 %0,%1" \
- : "=r" (__cbtmp) \
- : "r" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define COUNT_LEADING_ZEROS_0 63 /* sic */
-#if defined (__m88110__)
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __x; \
- __asm__ ("mulu.d %0,%1,%2" : "=r" (__x.__ll) : "r" (u), "r" (v)); \
- (wh) = __x.__i.__h; \
- (wl) = __x.__i.__l; \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __x, __q; \
- __x.__i.__h = (n1); __x.__i.__l = (n0); \
- __asm__ ("divu.d %0,%1,%2" \
- : "=r" (__q.__ll) : "r" (__x.__ll), "r" (d)); \
- (r) = (n0) - __q.__l * (d); (q) = __q.__l; })
-#define UMUL_TIME 5
-#define UDIV_TIME 25
-#else
-#define UMUL_TIME 17
-#define UDIV_TIME 150
-#endif /* __m88110__ */
-#endif /* __m88000__ */
-
-/***************************************
- ************** MIPS *****************
- ***************************************/
-#if defined (__mips__) && W_TYPE_SIZE == 32
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("multu %2,%3" \
- : "=l" ((USItype)(w0)), \
- "=h" ((USItype)(w1)) \
- : "d" ((USItype)(u)), \
- "d" ((USItype)(v)))
-#else
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("multu %2,%3 \n" \
- "mflo %0 \n" \
- "mfhi %1" \
- : "=d" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "d" ((USItype)(u)), \
- "d" ((USItype)(v)))
-#endif
-#define UMUL_TIME 10
-#define UDIV_TIME 100
-#endif /* __mips__ */
-
-/***************************************
- ************** MIPS/64 **************
- ***************************************/
-#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("dmultu %2,%3" \
- : "=l" ((UDItype)(w0)), \
- "=h" ((UDItype)(w1)) \
- : "d" ((UDItype)(u)), \
- "d" ((UDItype)(v)))
-#else
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("dmultu %2,%3 \n" \
- "mflo %0 \n" \
- "mfhi %1" \
- : "=d" ((UDItype)(w0)), \
- "=d" ((UDItype)(w1)) \
- : "d" ((UDItype)(u)), \
- "d" ((UDItype)(v)))
-#endif
-#define UMUL_TIME 20
-#define UDIV_TIME 140
-#endif /* __mips__ */
-
-
-/***************************************
- ************** 32000 ****************
- ***************************************/
-#if defined (__ns32000__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("meid %2,%0" \
- : "=g" (__xx.__ll) \
- : "%0" ((USItype)(u)), \
- "g" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("meid %2,%0" \
- : "=g" (__w) \
- : "%0" ((USItype)(u)), \
- "g" ((USItype)(v))); \
- __w; })
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
- __asm__ ("deid %2,%0" \
- : "=g" (__xx.__ll) \
- : "0" (__xx.__ll), \
- "g" ((USItype)(d))); \
- (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
-#define count_trailing_zeros(count,x) \
- do {
- __asm__ ("ffsd %2,%0" \
- : "=r" ((USItype) (count)) \
- : "0" ((USItype) 0), \
- "r" ((USItype) (x))); \
- } while (0)
-#endif /* __ns32000__ */
-
-
-/***************************************
- ************** PPC ******************
- ***************************************/
-#if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
- __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- else \
- __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (ah) && (ah) == 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else \
- __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- } while (0)
-#define count_leading_zeros(count, x) \
- __asm__ ("{cntlz|cntlzw} %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x)))
-#define COUNT_LEADING_ZEROS_0 32
-#if defined (_ARCH_PPC)
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhwu %0,%1,%2" \
- : "=r" ((USItype) ph) \
- : "%r" (__m0), \
- "r" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
- do { \
- SItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhw %0,%1,%2" \
- : "=r" ((SItype) ph) \
- : "%r" (__m0), \
- "r" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define SMUL_TIME 14
-#define UDIV_TIME 120
-#else
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mul %0,%2,%3" \
- : "=r" ((USItype)(xh)), \
- "=q" ((USItype)(xl)) \
- : "r" (__m0), \
- "r" (__m1)); \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 8
-#define smul_ppmm(xh, xl, m0, m1) \
- __asm__ ("mul %0,%2,%3" \
- : "=r" ((SItype)(xh)), \
- "=q" ((SItype)(xl)) \
- : "r" (m0), \
- "r" (m1))
-#define SMUL_TIME 4
-#define sdiv_qrnnd(q, r, nh, nl, d) \
- __asm__ ("div %0,%2,%4" \
- : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \
- : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d)))
-#define UDIV_TIME 100
-#endif
-#endif /* Power architecture variants. */
-
-
-/***************************************
- ************** PYR ******************
- ***************************************/
-#if defined (__pyr__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addw %5,%1 \n" \
- "addwc %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subw %5,%1 \n" \
- "subwb %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-/* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("movw %1,%R0 \n" \
- "uemul %2,%0" \
- : "=&r" (__xx.__ll) \
- : "g" ((USItype) (u)), \
- "g" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#endif /* __pyr__ */
-
-
-/***************************************
- ************** RT/ROMP **************
- ***************************************/
-#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("a %1,%5 \n" \
- "ae %0,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "r" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("s %1,%5\n" \
- "se %0,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "r" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ( \
- "s r2,r2 \n" \
- "mts r10,%2 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "m r2,%3 \n" \
- "cas %0,r2,r0 \n" \
- "mfs r10,%1" \
- : "=r" ((USItype)(ph)), \
- "=r" ((USItype)(pl)) \
- : "%r" (__m0), \
- "r" (__m1) \
- : "r2"); \
- (ph) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 20
-#define UDIV_TIME 200
-#define count_leading_zeros(count, x) \
- do { \
- if ((x) >= 0x10000) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x) >> 16)); \
- else \
- { \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x))); \
- (count) += 16; \
- } \
- } while (0)
-#endif /* RT/ROMP */
-
-
-/***************************************
- ************** SH2 ******************
- ***************************************/
-#if defined (__sh2__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ( \
- "dmulu.l %2,%3\n" \
- "sts macl,%1\n" \
- "sts mach,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)) \
- : "macl", "mach")
-#define UMUL_TIME 5
-#endif
-
-/***************************************
- ************** SPARC ****************
- ***************************************/
-#if defined (__sparc__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addcc %r4,%5,%1\n" \
- "addx %r2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rJ" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%rJ" ((USItype)(al)), \
- "rI" ((USItype)(bl)) \
- __CLOBBER_CC)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subcc %r4,%5,%1\n" \
- "subx %r2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rJ" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "rJ" ((USItype)(al)), \
- "rI" ((USItype)(bl)) \
- __CLOBBER_CC)
-#if defined (__sparc_v8__)
-/* Don't match immediate range because, 1) it is not often useful,
- 2) the 'I' flag thinks of the range as a 13 bit signed interval,
- while we want to match a 13 bit interval, sign extended to 32 bits,
- but INTERPRETED AS UNSIGNED. */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)))
-#define UMUL_TIME 5
-#ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { \
- USItype __q; \
- __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \
- : "=r" ((USItype)(__q)) \
- : "r" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "r" ((USItype)(d))); \
- (r) = (n0) - __q * (d); \
- (q) = __q; \
- } while (0)
-#define UDIV_TIME 25
-#endif /* SUPERSPARC */
-#else /* ! __sparc_v8__ */
-#if defined (__sparclite__)
-/* This has hardware multiply but not divide. It also has two additional
- instructions scan (ffs from high bit) and divscc. */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)))
-#define UMUL_TIME 5
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("! Inlined udiv_qrnnd \n" \
- " wr %%g0,%2,%%y ! Not a delayed write for sparclite \n" \
- " tst %%g0 \n" \
- " divscc %3,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%%g1 \n" \
- " divscc %%g1,%4,%0 \n" \
- " rd %%y,%1 \n" \
- " bl,a 1f \n" \
- " add %1,%4,%1 \n" \
- "1: ! End of inline udiv_qrnnd" \
- : "=r" ((USItype)(q)), \
- "=r" ((USItype)(r)) \
- : "r" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "rI" ((USItype)(d)) \
- : "%g1" __AND_CLOBBER_CC)
-#define UDIV_TIME 37
-#define count_leading_zeros(count, x) \
- __asm__ ("scan %1,0,%0" \
- : "=r" ((USItype)(x)) \
- : "r" ((USItype)(count)))
-/* Early sparclites return 63 for an argument of 0, but they warn that future
- implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0
- undefined. */
-#endif /* __sparclite__ */
-#endif /* __sparc_v8__ */
-/* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */
-#ifndef umul_ppmm
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("! Inlined umul_ppmm \n" \
- " wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr \n" \
- " sra %3,31,%%g2 ! Don't move this insn \n" \
- " and %2,%%g2,%%g2 ! Don't move this insn \n" \
- " andcc %%g0,0,%%g1 ! Don't move this insn \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,%3,%%g1 \n" \
- " mulscc %%g1,0,%%g1 \n" \
- " add %%g1,%%g2,%0 \n" \
- " rd %%y,%1" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "%rI" ((USItype)(u)), \
- "r" ((USItype)(v)) \
- : "%g1", "%g2" __AND_CLOBBER_CC)
-#define UMUL_TIME 39 /* 39 instructions */
-#endif
-#ifndef udiv_qrnnd
-#ifndef LONGLONG_STANDALONE
-#define udiv_qrnnd(q, r, n1, n0, d) \
- do { USItype __r; \
- (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
- (r) = __r; \
- } while (0)
-extern USItype __udiv_qrnnd ();
-#define UDIV_TIME 140
-#endif /* LONGLONG_STANDALONE */
-#endif /* udiv_qrnnd */
-#endif /* __sparc__ */
-
-
-/***************************************
- ************** VAX ******************
- ***************************************/
-#if defined (__vax__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl2 %5,%1\n" \
- "adwc %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl2 %5,%1\n" \
- "sbwc %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("emul %1,%2,$0,%0" \
- : "=g" (__xx.__ll) \
- : "g" (__m0), \
- "g" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
- __asm__ ("ediv %3,%2,%0,%1" \
- : "=g" (q), "=g" (r) \
- : "g" (__xx.__ll), "g" (d)); \
- } while (0)
-#endif /* __vax__ */
-
-
-/***************************************
- ************** Z8000 ****************
- ***************************************/
-#if defined (__z8000__) && W_TYPE_SIZE == 16
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \
- : "=r" ((unsigned int)(sh)), \
- "=&r" ((unsigned int)(sl)) \
- : "%0" ((unsigned int)(ah)), \
- "r" ((unsigned int)(bh)), \
- "%1" ((unsigned int)(al)), \
- "rQR" ((unsigned int)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \
- : "=r" ((unsigned int)(sh)), \
- "=&r" ((unsigned int)(sl)) \
- : "0" ((unsigned int)(ah)), \
- "r" ((unsigned int)(bh)), \
- "1" ((unsigned int)(al)), \
- "rQR" ((unsigned int)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union {long int __ll; \
- struct {unsigned int __h, __l;} __i; \
- } __xx; \
- unsigned int __m0 = (m0), __m1 = (m1); \
- __asm__ ("mult %S0,%H3" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "%1" (__m0), \
- "rQR" (__m1)); \
- (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
- (xh) += ((((signed int) __m0 >> 15) & __m1) \
- + (((signed int) __m1 >> 15) & __m0)); \
- } while (0)
-#endif /* __z8000__ */
-
-#endif /* __GNUC__ */
-
-
-/***************************************
- *********** Generic Versions ********
- ***************************************/
-#if !defined (umul_ppmm) && defined (__umulsidi3)
-#define umul_ppmm(ph, pl, m0, m1) \
- { \
- UDWtype __ll = __umulsidi3 (m0, m1); \
- ph = (UWtype) (__ll >> W_TYPE_SIZE); \
- pl = (UWtype) __ll; \
- }
-#endif
-
-#if !defined (__umulsidi3)
-#define __umulsidi3(u, v) \
- ({UWtype __hi, __lo; \
- umul_ppmm (__hi, __lo, u, v); \
- ((UDWtype) __hi << W_TYPE_SIZE) | __lo; })
-#endif
-
-/* If this machine has no inline assembler, use C macros. */
-
-#if !defined (add_ssaaaa)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) + (bl); \
- (sh) = (ah) + (bh) + (__x < (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (sub_ddmmss)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- UWtype __x; \
- __x = (al) - (bl); \
- (sh) = (ah) - (bh) - (__x > (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (umul_ppmm)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- UWtype __x0, __x1, __x2, __x3; \
- UHWtype __ul, __vl, __uh, __vh; \
- UWtype __u = (u), __v = (v); \
- \
- __ul = __ll_lowpart (__u); \
- __uh = __ll_highpart (__u); \
- __vl = __ll_lowpart (__v); \
- __vh = __ll_highpart (__v); \
- \
- __x0 = (UWtype) __ul * __vl; \
- __x1 = (UWtype) __ul * __vh; \
- __x2 = (UWtype) __uh * __vl; \
- __x3 = (UWtype) __uh * __vh; \
- \
- __x1 += __ll_highpart (__x0);/* this can't give carry */ \
- __x1 += __x2; /* but this indeed can */ \
- if (__x1 < __x2) /* did we get it? */ \
- __x3 += __ll_B; /* yes, add it in the proper pos. */ \
- \
- (w1) = __x3 + __ll_highpart (__x1); \
- (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\
- } while (0)
-#endif
-
-#if !defined (umul_ppmm)
-#define smul_ppmm(w1, w0, u, v) \
- do { \
- UWtype __w1; \
- UWtype __m0 = (u), __m1 = (v); \
- umul_ppmm (__w1, w0, __m0, __m1); \
- (w1) = __w1 - (-(__m0 >> (W_TYPE_SIZE - 1)) & __m1) \
- - (-(__m1 >> (W_TYPE_SIZE - 1)) & __m0); \
- } while (0)
-#endif
-
-/* Define this unconditionally, so it can be used for debugging. */
-#define __udiv_qrnnd_c(q, r, n1, n0, d) \
- do { \
- UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \
- __d1 = __ll_highpart (d); \
- __d0 = __ll_lowpart (d); \
- \
- __r1 = (n1) % __d1; \
- __q1 = (n1) / __d1; \
- __m = (UWtype) __q1 * __d0; \
- __r1 = __r1 * __ll_B | __ll_highpart (n0); \
- if (__r1 < __m) \
- { \
- __q1--, __r1 += (d); \
- if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
- if (__r1 < __m) \
- __q1--, __r1 += (d); \
- } \
- __r1 -= __m; \
- \
- __r0 = __r1 % __d1; \
- __q0 = __r1 / __d1; \
- __m = (UWtype) __q0 * __d0; \
- __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
- if (__r0 < __m) \
- { \
- __q0--, __r0 += (d); \
- if (__r0 >= (d)) \
- if (__r0 < __m) \
- __q0--, __r0 += (d); \
- } \
- __r0 -= __m; \
- \
- (q) = (UWtype) __q1 * __ll_B | __q0; \
- (r) = __r0; \
- } while (0)
-
-/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
- __udiv_w_sdiv (defined in libgcc or elsewhere). */
-#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- UWtype __r; \
- (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \
- (r) = __r; \
- } while (0)
-#endif
-
-/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */
-#if !defined (udiv_qrnnd)
-#define UDIV_NEEDS_NORMALIZATION 1
-#define udiv_qrnnd __udiv_qrnnd_c
-#endif
-
-#if !defined (count_leading_zeros)
-extern
-#ifdef __STDC__
-const
-#endif
-unsigned char __clz_tab[];
-#define MPI_INTERNAL_NEED_CLZ_TAB 1
-#define count_leading_zeros(count, x) \
- do { \
- UWtype __xr = (x); \
- UWtype __a; \
- \
- if (W_TYPE_SIZE <= 32) \
- { \
- __a = __xr < ((UWtype) 1 << 2*__BITS4) \
- ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4) \
- : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\
- } \
- else \
- { \
- for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \
- if (((__xr >> __a) & 0xff) != 0) \
- break; \
- } \
- \
- (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
- } while (0)
-/* This version gives a well-defined value for zero. */
-#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
-#endif
-
-#if !defined (count_trailing_zeros)
-/* Define count_trailing_zeros using count_leading_zeros. The latter might be
- defined in asm, but if it is not, the C version above is good enough. */
-#define count_trailing_zeros(count, x) \
- do { \
- UWtype __ctz_x = (x); \
- UWtype __ctz_c; \
- count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \
- (count) = W_TYPE_SIZE - 1 - __ctz_c; \
- } while (0)
-#endif
-
-#ifndef UDIV_NEEDS_NORMALIZATION
-#define UDIV_NEEDS_NORMALIZATION 0
-#endif
diff --git a/mpi/m68k/distfiles b/mpi/m68k/distfiles
deleted file mode 100644
index 4c0967b84..000000000
--- a/mpi/m68k/distfiles
+++ /dev/null
@@ -1,8 +0,0 @@
-syntax.h
-mpih-lshift.S
-mpih-rshift.S
-mpih-add1.S
-mpih-sub1.S
-
-
-
diff --git a/mpi/m68k/mc68020/distfiles b/mpi/m68k/mc68020/distfiles
deleted file mode 100644
index fc7df9fa3..000000000
--- a/mpi/m68k/mc68020/distfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
diff --git a/mpi/m68k/mc68020/mpih-mul1.S b/mpi/m68k/mc68020/mpih-mul1.S
deleted file mode 100644
index 4872b9ba7..000000000
--- a/mpi/m68k/mc68020/mpih-mul1.S
+++ /dev/null
@@ -1,106 +0,0 @@
-/* mc68020 __mpn_mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_mul_1)
-
-C_SYMBOL_NAME(mpihelp_mul_1:)
-PROLOG(mpihelp_mul_1)
-
-#define res_ptr a0
-#define s1_ptr a1
-#define s1_size d2
-#define s2_limb d4
-
-/* Save used registers on the stack. */
- moveml R(d2)-R(d4),MEM_PREDEC(sp)
-#if 0
- movel R(d2),MEM_PREDEC(sp)
- movel R(d3),MEM_PREDEC(sp)
- movel R(d4),MEM_PREDEC(sp)
-#endif
-
-/* Copy the arguments to registers. Better use movem? */
- movel MEM_DISP(sp,16),R(res_ptr)
- movel MEM_DISP(sp,20),R(s1_ptr)
- movel MEM_DISP(sp,24),R(s1_size)
- movel MEM_DISP(sp,28),R(s2_limb)
-
- eorw #1,R(s1_size)
- clrl R(d1)
- lsrl #1,R(s1_size)
- bcc L(L1)
- subql #1,R(s1_size)
- subl R(d0),R(d0) /* (d0,cy) <= (0,0) */
-
-L(Loop:)
- movel MEM_POSTINC(s1_ptr),R(d3)
- mulul R(s2_limb),R(d1):R(d3)
- addxl R(d0),R(d3)
- movel R(d3),MEM_POSTINC(res_ptr)
-L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
- mulul R(s2_limb),R(d0):R(d3)
- addxl R(d1),R(d3)
- movel R(d3),MEM_POSTINC(res_ptr)
-
- dbf R(s1_size),L(Loop)
- clrl R(d3)
- addxl R(d3),R(d0)
- subl #0x10000,R(s1_size)
- bcc L(Loop)
-
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d4)
-#if 0
- movel MEM_POSTINC(sp),R(d4)
- movel MEM_POSTINC(sp),R(d3)
- movel MEM_POSTINC(sp),R(d2)
-#endif
- rts
-EPILOG(mpihelp_mul_1)
-
-
diff --git a/mpi/m68k/mc68020/mpih-mul2.S b/mpi/m68k/mc68020/mpih-mul2.S
deleted file mode 100644
index 7c492ffb2..000000000
--- a/mpi/m68k/mc68020/mpih-mul2.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_addmul_1)
-
-C_SYMBOL_NAME(mpihelp_addmul_1:)
-PROLOG(mpihelp_addmul_1)
-
-#define res_ptr a0
-#define s1_ptr a1
-#define s1_size d2
-#define s2_limb d4
-
-/* Save used registers on the stack. */
- moveml R(d2)-R(d5),MEM_PREDEC(sp)
-
-/* Copy the arguments to registers. Better use movem? */
- movel MEM_DISP(sp,20),R(res_ptr)
- movel MEM_DISP(sp,24),R(s1_ptr)
- movel MEM_DISP(sp,28),R(s1_size)
- movel MEM_DISP(sp,32),R(s2_limb)
-
- eorw #1,R(s1_size)
- clrl R(d1)
- clrl R(d5)
- lsrl #1,R(s1_size)
- bcc L(L1)
- subql #1,R(s1_size)
- subl R(d0),R(d0) /* (d0,cy) <= (0,0) */
-
-L(Loop:)
- movel MEM_POSTINC(s1_ptr),R(d3)
- mulul R(s2_limb),R(d1):R(d3)
- addxl R(d0),R(d3)
- addxl R(d5),R(d1)
- addl R(d3),MEM_POSTINC(res_ptr)
-L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
- mulul R(s2_limb),R(d0):R(d3)
- addxl R(d1),R(d3)
- addxl R(d5),R(d0)
- addl R(d3),MEM_POSTINC(res_ptr)
-
- dbf R(s1_size),L(Loop)
- addxl R(d5),R(d0)
- subl #0x10000,R(s1_size)
- bcc L(Loop)
-
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d5)
-
- rts
-EPILOG(mpihelp_addmul_1)
-
diff --git a/mpi/m68k/mc68020/mpih-mul3.S b/mpi/m68k/mc68020/mpih-mul3.S
deleted file mode 100644
index 1e4ac45d6..000000000
--- a/mpi/m68k/mc68020/mpih-mul3.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
- * the result from a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_size_t s1_size, (sp + 12)
- * mpi_limb_t s2_limb) (sp + 16)
- */
-
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_submul_1)
-
-C_SYMBOL_NAME(mpihelp_submul_1:)
-PROLOG(mpihelp_submul_1)
-
-#define res_ptr a0
-#define s1_ptr a1
-#define s1_size d2
-#define s2_limb d4
-
-/* Save used registers on the stack. */
- moveml R(d2)-R(d5),MEM_PREDEC(sp)
-
-/* Copy the arguments to registers. Better use movem? */
- movel MEM_DISP(sp,20),R(res_ptr)
- movel MEM_DISP(sp,24),R(s1_ptr)
- movel MEM_DISP(sp,28),R(s1_size)
- movel MEM_DISP(sp,32),R(s2_limb)
-
- eorw #1,R(s1_size)
- clrl R(d1)
- clrl R(d5)
- lsrl #1,R(s1_size)
- bcc L(L1)
- subql #1,R(s1_size)
- subl R(d0),R(d0) /* (d0,cy) <= (0,0) */
-
-L(Loop:)
- movel MEM_POSTINC(s1_ptr),R(d3)
- mulul R(s2_limb),R(d1):R(d3)
- addxl R(d0),R(d3)
- addxl R(d5),R(d1)
- subl R(d3),MEM_POSTINC(res_ptr)
-L(L1:) movel MEM_POSTINC(s1_ptr),R(d3)
- mulul R(s2_limb),R(d0):R(d3)
- addxl R(d1),R(d3)
- addxl R(d5),R(d0)
- subl R(d3),MEM_POSTINC(res_ptr)
-
- dbf R(s1_size),L(Loop)
- addxl R(d5),R(d0)
- subl #0x10000,R(s1_size)
- bcc L(Loop)
-
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d5)
-
- rts
-EPILOG(mpihelp_submul_1)
-
-
diff --git a/mpi/m68k/mpih-add1.S b/mpi/m68k/mpih-add1.S
deleted file mode 100644
index 1e9cc6406..000000000
--- a/mpi/m68k/mpih-add1.S
+++ /dev/null
@@ -1,94 +0,0 @@
-/* mc68020 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1992, 1994,1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 16)
- * mpi_size_t size) (sp + 12)
- */
-
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_add_n)
-
-C_SYMBOL_NAME(mpihelp_add_n:)
-PROLOG(mpihelp_add_n)
- /* Save used registers on the stack. */
- movel R(d2),MEM_PREDEC(sp)
- movel R(a2),MEM_PREDEC(sp)
-
- /* Copy the arguments to registers. Better use movem? */
- movel MEM_DISP(sp,12),R(a2)
- movel MEM_DISP(sp,16),R(a0)
- movel MEM_DISP(sp,20),R(a1)
- movel MEM_DISP(sp,24),R(d2)
-
- eorw #1,R(d2)
- lsrl #1,R(d2)
- bcc L(L1)
- subql #1,R(d2) /* clears cy as side effect */
-
-L(Loop:)
- movel MEM_POSTINC(a0),R(d0)
- movel MEM_POSTINC(a1),R(d1)
- addxl R(d1),R(d0)
- movel R(d0),MEM_POSTINC(a2)
-L(L1:) movel MEM_POSTINC(a0),R(d0)
- movel MEM_POSTINC(a1),R(d1)
- addxl R(d1),R(d0)
- movel R(d0),MEM_POSTINC(a2)
-
- dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */
- subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */
- subl #0x10000,R(d2)
- bcs L(L2)
- addl R(d0),R(d0) /* restore cy */
- bra L(Loop)
-
-L(L2:)
- negl R(d0)
-
- /* Restore used registers from stack frame. */
- movel MEM_POSTINC(sp),R(a2)
- movel MEM_POSTINC(sp),R(d2)
-
- rts
-EPILOG(mpihelp_add_n)
-
-
diff --git a/mpi/m68k/mpih-lshift.S b/mpi/m68k/mpih-lshift.S
deleted file mode 100644
index cc9dfba69..000000000
--- a/mpi/m68k/mpih-lshift.S
+++ /dev/null
@@ -1,166 +0,0 @@
-/* mc68020 lshift -- Shift left a low-level natural-number integer.
- *
- * Copyright (C) 1996, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-#define res_ptr a1
-#define s_ptr a0
-#define s_size d6
-#define cnt d4
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_lshift)
-
-C_SYMBOL_NAME(mpihelp_lshift:)
-PROLOG(mpihelp_lshift)
-
- /* Save used registers on the stack. */
- moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
-
- /* Copy the arguments to registers. */
- movel MEM_DISP(sp,28),R(res_ptr)
- movel MEM_DISP(sp,32),R(s_ptr)
- movel MEM_DISP(sp,36),R(s_size)
- movel MEM_DISP(sp,40),R(cnt)
-
- moveql #1,R(d5)
- cmpl R(d5),R(cnt)
- bne L(Lnormal)
- cmpl R(s_ptr),R(res_ptr)
- bls L(Lspecial) /* jump if s_ptr >= res_ptr */
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
- lea MEM_INDX1(s_ptr,s_size,l,4),R(a2)
-#else /* not mc68020 */
- movel R(s_size),R(d0)
- asll #2,R(d0)
- lea MEM_INDX(s_ptr,d0,l),R(a2)
-#endif
- cmpl R(res_ptr),R(a2)
- bls L(Lspecial) /* jump if res_ptr >= s_ptr + s_size */
-
-L(Lnormal:)
- moveql #32,R(d5)
- subl R(cnt),R(d5)
-
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
- lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
- lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
-#else /* not mc68000 */
- movel R(s_size),R(d0)
- asll #2,R(d0)
- addl R(s_size),R(s_ptr)
- addl R(s_size),R(res_ptr)
-#endif
- movel MEM_PREDEC(s_ptr),R(d2)
- movel R(d2),R(d0)
- lsrl R(d5),R(d0) /* compute carry limb */
-
- lsll R(cnt),R(d2)
- movel R(d2),R(d1)
- subql #1,R(s_size)
- beq L(Lend)
- lsrl #1,R(s_size)
- bcs L(L1)
- subql #1,R(s_size)
-
-L(Loop:)
- movel MEM_PREDEC(s_ptr),R(d2)
- movel R(d2),R(d3)
- lsrl R(d5),R(d3)
- orl R(d3),R(d1)
- movel R(d1),MEM_PREDEC(res_ptr)
- lsll R(cnt),R(d2)
-L(L1:)
- movel MEM_PREDEC(s_ptr),R(d1)
- movel R(d1),R(d3)
- lsrl R(d5),R(d3)
- orl R(d3),R(d2)
- movel R(d2),MEM_PREDEC(res_ptr)
- lsll R(cnt),R(d1)
-
- dbf R(s_size),L(Loop)
- subl #0x10000,R(s_size)
- bcc L(Loop)
-
-L(Lend:)
- movel R(d1),MEM_PREDEC(res_ptr) /* store least significant limb */
-
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
- rts
-
-/* We loop from least significant end of the arrays, which is only
- permissable if the source and destination don't overlap, since the
- function is documented to work for overlapping source and destination. */
-
-L(Lspecial:)
- clrl R(d0) /* initialize carry */
- eorw #1,R(s_size)
- lsrl #1,R(s_size)
- bcc L(LL1)
- subql #1,R(s_size)
-
-L(LLoop:)
- movel MEM_POSTINC(s_ptr),R(d2)
- addxl R(d2),R(d2)
- movel R(d2),MEM_POSTINC(res_ptr)
-L(LL1:)
- movel MEM_POSTINC(s_ptr),R(d2)
- addxl R(d2),R(d2)
- movel R(d2),MEM_POSTINC(res_ptr)
-
- dbf R(s_size),L(LLoop)
- addxl R(d0),R(d0) /* save cy in lsb */
- subl #0x10000,R(s_size)
- bcs L(LLend)
- lsrl #1,R(d0) /* restore cy */
- bra L(LLoop)
-
-L(LLend:)
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
- rts
-EPILOG(mpihelp_lshift)
-
-
-
-
-
diff --git a/mpi/m68k/mpih-rshift.S b/mpi/m68k/mpih-rshift.S
deleted file mode 100644
index cc86166a7..000000000
--- a/mpi/m68k/mpih-rshift.S
+++ /dev/null
@@ -1,164 +0,0 @@
-/* mc68020 rshift -- Shift right a low-level natural-number integer.
- *
- * Copyright (C) 1996, 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (sp + 4)
- * mpi_ptr_t up, (sp + 8)
- * mpi_size_t usize, (sp + 12)
- * unsigned cnt) (sp + 16)
- */
-
-#define res_ptr a1
-#define s_ptr a0
-#define s_size d6
-#define cnt d4
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_rshift)
-
-C_SYMBOL_NAME(mpihelp_rshift:)
-PROLOG(mpihelp_rshift)
- /* Save used registers on the stack. */
- moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
-
- /* Copy the arguments to registers. */
- movel MEM_DISP(sp,28),R(res_ptr)
- movel MEM_DISP(sp,32),R(s_ptr)
- movel MEM_DISP(sp,36),R(s_size)
- movel MEM_DISP(sp,40),R(cnt)
-
- moveql #1,R(d5)
- cmpl R(d5),R(cnt)
- bne L(Rnormal)
- cmpl R(res_ptr),R(s_ptr)
- bls L(Rspecial) /* jump if res_ptr >= s_ptr */
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
- lea MEM_INDX1(res_ptr,s_size,l,4),R(a2)
-#else /* not mc68020 */
- movel R(s_size),R(d0)
- asll #2,R(d0)
- lea MEM_INDX(res_ptr,d0,l),R(a2)
-#endif
- cmpl R(s_ptr),R(a2)
- bls L(Rspecial) /* jump if s_ptr >= res_ptr + s_size */
-
-L(Rnormal:)
- moveql #32,R(d5)
- subl R(cnt),R(d5)
- movel MEM_POSTINC(s_ptr),R(d2)
- movel R(d2),R(d0)
- lsll R(d5),R(d0) /* compute carry limb */
-
- lsrl R(cnt),R(d2)
- movel R(d2),R(d1)
- subql #1,R(s_size)
- beq L(Rend)
- lsrl #1,R(s_size)
- bcs L(R1)
- subql #1,R(s_size)
-
-L(Roop:)
- movel MEM_POSTINC(s_ptr),R(d2)
- movel R(d2),R(d3)
- lsll R(d5),R(d3)
- orl R(d3),R(d1)
- movel R(d1),MEM_POSTINC(res_ptr)
- lsrl R(cnt),R(d2)
-L(R1:)
- movel MEM_POSTINC(s_ptr),R(d1)
- movel R(d1),R(d3)
- lsll R(d5),R(d3)
- orl R(d3),R(d2)
- movel R(d2),MEM_POSTINC(res_ptr)
- lsrl R(cnt),R(d1)
-
- dbf R(s_size),L(Roop)
- subl #0x10000,R(s_size)
- bcc L(Roop)
-
-L(Rend:)
- movel R(d1),MEM(res_ptr) /* store most significant limb */
-
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
- rts
-
-/* We loop from most significant end of the arrays, which is only
- permissable if the source and destination don't overlap, since the
- function is documented to work for overlapping source and destination. */
-
-L(Rspecial:)
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
- lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
- lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
-#else /* not mc68000 */
- movel R(s_size),R(d0)
- asll #2,R(d0)
- addl R(s_size),R(s_ptr)
- addl R(s_size),R(res_ptr)
-#endif
-
- clrl R(d0) /* initialize carry */
- eorw #1,R(s_size)
- lsrl #1,R(s_size)
- bcc L(LR1)
- subql #1,R(s_size)
-
-L(LRoop:)
- movel MEM_PREDEC(s_ptr),R(d2)
- roxrl #1,R(d2)
- movel R(d2),MEM_PREDEC(res_ptr)
-L(LR1:)
- movel MEM_PREDEC(s_ptr),R(d2)
- roxrl #1,R(d2)
- movel R(d2),MEM_PREDEC(res_ptr)
-
- dbf R(s_size),L(LRoop)
- roxrl #1,R(d0) /* save cy in msb */
- subl #0x10000,R(s_size)
- bcs L(LRend)
- addl R(d0),R(d0) /* restore cy */
- bra L(LRoop)
-
-L(LRend:)
-/* Restore used registers from stack frame. */
- moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
- rts
-EPILOG(mpihelp_rshift)
-
-
-
-
diff --git a/mpi/m68k/mpih-sub1.S b/mpi/m68k/mpih-sub1.S
deleted file mode 100644
index 1847fbd65..000000000
--- a/mpi/m68k/mpih-sub1.S
+++ /dev/null
@@ -1,93 +0,0 @@
-/* mc68020 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
- * store difference in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4)
- * mpi_ptr_t s1_ptr, (sp + 8)
- * mpi_ptr_t s2_ptr, (sp + 16)
- * mpi_size_t size) (sp + 12)
- */
-
-
- TEXT
- ALIGN
- GLOBL C_SYMBOL_NAME(mpihelp_sub_n)
-
-C_SYMBOL_NAME(mpihelp_sub_n:)
-PROLOG(mpihelp_sub_n)
-/* Save used registers on the stack. */
- movel R(d2),MEM_PREDEC(sp)
- movel R(a2),MEM_PREDEC(sp)
-
-/* Copy the arguments to registers. Better use movem? */
- movel MEM_DISP(sp,12),R(a2)
- movel MEM_DISP(sp,16),R(a0)
- movel MEM_DISP(sp,20),R(a1)
- movel MEM_DISP(sp,24),R(d2)
-
- eorw #1,R(d2)
- lsrl #1,R(d2)
- bcc L(L1)
- subql #1,R(d2) /* clears cy as side effect */
-
-L(Loop:)
- movel MEM_POSTINC(a0),R(d0)
- movel MEM_POSTINC(a1),R(d1)
- subxl R(d1),R(d0)
- movel R(d0),MEM_POSTINC(a2)
-L(L1:) movel MEM_POSTINC(a0),R(d0)
- movel MEM_POSTINC(a1),R(d1)
- subxl R(d1),R(d0)
- movel R(d0),MEM_POSTINC(a2)
-
- dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */
- subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */
- subl #0x10000,R(d2)
- bcs L(L2)
- addl R(d0),R(d0) /* restore cy */
- bra L(Loop)
-
-L(L2:)
- negl R(d0)
-
-/* Restore used registers from stack frame. */
- movel MEM_POSTINC(sp),R(a2)
- movel MEM_POSTINC(sp),R(d2)
-
- rts
-EPILOG(mpihelp_sub_n)
-
-
diff --git a/mpi/m68k/syntax.h b/mpi/m68k/syntax.h
deleted file mode 100644
index 316518fef..000000000
--- a/mpi/m68k/syntax.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* asm.h -- Definitions for 68k syntax variations.
- *
- * Copyright (C) 1992, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-#undef ALIGN
-
-#ifdef MIT_SYNTAX
-#define PROLOG(name)
-#define EPILOG(name)
-#define R(r)r
-#define MEM(base)base@
-#define MEM_DISP(base,displacement)base@(displacement)
-#define MEM_INDX(base,idx,size_suffix)base@(idx:size_suffix)
-#define MEM_INDX1(base,idx,size_suffix,scale)base@(idx:size_suffix:scale)
-#define MEM_PREDEC(memory_base)memory_base@-
-#define MEM_POSTINC(memory_base)memory_base@+
-#define L(label) label
-#define TEXT .text
-#define ALIGN .even
-#define GLOBL .globl
-#define moveql moveq
-/* Use variable sized opcodes. */
-#define bcc jcc
-#define bcs jcs
-#define bls jls
-#define beq jeq
-#define bne jne
-#define bra jra
-#endif
-
-#ifdef SONY_SYNTAX
-#define PROLOG(name)
-#define EPILOG(name)
-#define R(r)r
-#define MEM(base)(base)
-#define MEM_DISP(base,displacement)(displacement,base)
-#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix)
-#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale)
-#define MEM_PREDEC(memory_base)-(memory_base)
-#define MEM_POSTINC(memory_base)(memory_base)+
-#define L(label) label
-#define TEXT .text
-#define ALIGN .even
-#define GLOBL .globl
-#endif
-
-#ifdef MOTOROLA_SYNTAX
-#define PROLOG(name)
-#define EPILOG(name)
-#define R(r)r
-#define MEM(base)(base)
-#define MEM_DISP(base,displacement)(displacement,base)
-#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix)
-#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale)
-#define MEM_PREDEC(memory_base)-(memory_base)
-#define MEM_POSTINC(memory_base)(memory_base)+
-#define L(label) label
-#define TEXT
-#define ALIGN
-#define GLOBL XDEF
-#define lea LEA
-#define movel MOVE.L
-#define moveml MOVEM.L
-#define moveql MOVEQ.L
-#define cmpl CMP.L
-#define orl OR.L
-#define clrl CLR.L
-#define eorw EOR.W
-#define lsrl LSR.L
-#define lsll LSL.L
-#define roxrl ROXR.L
-#define roxll ROXL.L
-#define addl ADD.L
-#define addxl ADDX.L
-#define addql ADDQ.L
-#define subl SUB.L
-#define subxl SUBX.L
-#define subql SUBQ.L
-#define negl NEG.L
-#define mulul MULU.L
-#define bcc BCC
-#define bcs BCS
-#define bls BLS
-#define beq BEQ
-#define bne BNE
-#define bra BRA
-#define dbf DBF
-#define rts RTS
-#define d0 D0
-#define d1 D1
-#define d2 D2
-#define d3 D3
-#define d4 D4
-#define d5 D5
-#define d6 D6
-#define d7 D7
-#define a0 A0
-#define a1 A1
-#define a2 A2
-#define a3 A3
-#define a4 A4
-#define a5 A5
-#define a6 A6
-#define a7 A7
-#define sp SP
-#endif
-
-#ifdef ELF_SYNTAX
-#define PROLOG(name) .type name,@function
-#define EPILOG(name) .size name,.-name
-#define MEM(base)(R(base))
-#define MEM_DISP(base,displacement)(displacement,R(base))
-#define MEM_PREDEC(memory_base)-(R(memory_base))
-#define MEM_POSTINC(memory_base)(R(memory_base))+
-#ifdef __STDC__
-#define R_(r)%##r
-#define R(r)R_(r)
-#define MEM_INDX_(base,idx,size_suffix)(R(base),R(idx##.##size_suffix))
-#define MEM_INDX(base,idx,size_suffix)MEM_INDX_(base,idx,size_suffix)
-#define MEM_INDX1_(base,idx,size_suffix,scale)(R(base),R(idx##.##size_suffix*scale))
-#define MEM_INDX1(base,idx,size_suffix,scale)MEM_INDX1_(base,idx,size_suffix,scale)
-#define L(label) .##label
-#else
-#define R(r)%/**/r
-#define MEM_INDX(base,idx,size_suffix)(R(base),R(idx).size_suffix)
-#define MEM_INDX1(base,idx,size_suffix,scale)(R(base),R(idx).size_suffix*scale)
-#define L(label) ./**/label
-#endif
-#define TEXT .text
-#define ALIGN .align 2
-#define GLOBL .globl
-#define bcc jbcc
-#define bcs jbcs
-#define bls jbls
-#define beq jbeq
-#define bne jbne
-#define bra jbra
-#endif
-
-#if defined (SONY_SYNTAX) || defined (ELF_SYNTAX)
-#define movel move.l
-#define moveml movem.l
-#define moveql moveq.l
-#define cmpl cmp.l
-#define orl or.l
-#define clrl clr.l
-#define eorw eor.w
-#define lsrl lsr.l
-#define lsll lsl.l
-#define roxrl roxr.l
-#define roxll roxl.l
-#define addl add.l
-#define addxl addx.l
-#define addql addq.l
-#define subl sub.l
-#define subxl subx.l
-#define subql subq.l
-#define negl neg.l
-#define mulul mulu.l
-#endif
diff --git a/mpi/mips3/README b/mpi/mips3/README
deleted file mode 100644
index e94b2c746..000000000
--- a/mpi/mips3/README
+++ /dev/null
@@ -1,23 +0,0 @@
-This directory contains mpn functions optimized for MIPS3. Example of
-processors that implement MIPS3 are R4000, R4400, R4600, R4700, and R8000.
-
-RELEVANT OPTIMIZATION ISSUES
-
-1. On the R4000 and R4400, branches, both the plain and the "likely" ones,
- take 3 cycles to execute. (The fastest possible loop will take 4 cycles,
- because of the delay insn.)
-
- On the R4600, branches takes a single cycle
-
- On the R8000, branches often take no noticable cycles, as they are
- executed in a separate function unit..
-
-2. The R4000 and R4400 have a load latency of 4 cycles.
-
-3. On the R4000 and R4400, multiplies take a data-dependent number of
- cycles, contrary to the SGI documentation. There seem to be 3 or 4
- possible latencies.
-
-STATUS
-
-Good...
diff --git a/mpi/mips3/distfiles b/mpi/mips3/distfiles
deleted file mode 100644
index 85260fc8e..000000000
--- a/mpi/mips3/distfiles
+++ /dev/null
@@ -1,10 +0,0 @@
-README
-mpih-add1.S
-mpih-sub1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-mpi-asm-defs.h
-
diff --git a/mpi/mips3/mpi-asm-defs.h b/mpi/mips3/mpi-asm-defs.h
deleted file mode 100644
index 2d9a9c1f2..000000000
--- a/mpi/mips3/mpi-asm-defs.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* This file defines some basic constants for the MPI machinery. We
- * need to define the types on a per-CPU basis, so it is done with
- * this file here. */
-#define BYTES_PER_MPI_LIMB 8
-
-
-
-
-
-
diff --git a/mpi/mips3/mpih-add1.S b/mpi/mips3/mpih-add1.S
deleted file mode 100644
index a998420d7..000000000
--- a/mpi/mips3/mpih-add1.S
+++ /dev/null
@@ -1,124 +0,0 @@
-/* mips3 add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1995, 1998, 2000
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, ($4)
- * mpi_ptr_t s1_ptr, ($5)
- * mpi_ptr_t s2_ptr, ($6)
- * mpi_size_t size) ($7)
- */
-
- .text
- .align 2
- .globl mpihelp_add_n
- .ent mpihelp_add_n
-mpihelp_add_n:
- .set noreorder
- .set nomacro
-
- ld $10,0($5)
- ld $11,0($6)
-
- daddiu $7,$7,-1
- and $9,$7,4-1 # number of limbs in first loop
- beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
- move $2,$0
-
- dsubu $7,$7,$9
-
-.Loop0: daddiu $9,$9,-1
- ld $12,8($5)
- daddu $11,$11,$2
- ld $13,8($6)
- sltu $8,$11,$2
- daddu $11,$10,$11
- sltu $2,$11,$10
- sd $11,0($4)
- or $2,$2,$8
-
- daddiu $5,$5,8
- daddiu $6,$6,8
- move $10,$12
- move $11,$13
- bne $9,$0,.Loop0
- daddiu $4,$4,8
-
-.L0: beq $7,$0,.Lend
- nop
-
-.Loop: daddiu $7,$7,-4
-
- ld $12,8($5)
- daddu $11,$11,$2
- ld $13,8($6)
- sltu $8,$11,$2
- daddu $11,$10,$11
- sltu $2,$11,$10
- sd $11,0($4)
- or $2,$2,$8
-
- ld $10,16($5)
- daddu $13,$13,$2
- ld $11,16($6)
- sltu $8,$13,$2
- daddu $13,$12,$13
- sltu $2,$13,$12
- sd $13,8($4)
- or $2,$2,$8
-
- ld $12,24($5)
- daddu $11,$11,$2
- ld $13,24($6)
- sltu $8,$11,$2
- daddu $11,$10,$11
- sltu $2,$11,$10
- sd $11,16($4)
- or $2,$2,$8
-
- ld $10,32($5)
- daddu $13,$13,$2
- ld $11,32($6)
- sltu $8,$13,$2
- daddu $13,$12,$13
- sltu $2,$13,$12
- sd $13,24($4)
- or $2,$2,$8
-
- daddiu $5,$5,32
- daddiu $6,$6,32
-
- bne $7,$0,.Loop
- daddiu $4,$4,32
-
-.Lend: daddu $11,$11,$2
- sltu $8,$11,$2
- daddu $11,$10,$11
- sltu $2,$11,$10
- sd $11,0($4)
- j $31
- or $2,$2,$8
-
- .end mpihelp_add_n
-
diff --git a/mpi/mips3/mpih-lshift.S b/mpi/mips3/mpih-lshift.S
deleted file mode 100644
index 112383f90..000000000
--- a/mpi/mips3/mpih-lshift.S
+++ /dev/null
@@ -1,97 +0,0 @@
-/* mips3 lshift
- *
- * Copyright (C) 1995, 1998, 2000,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, ($4)
- * mpi_ptr_t up, ($5)
- * mpi_size_t usize, ($6)
- * unsigned cnt) ($7)
- */
-
- .text
- .align 2
- .globl mpihelp_lshift
- .ent mpihelp_lshift
-mpihelp_lshift:
- .set noreorder
- .set nomacro
-
- dsll $2,$6,3
- daddu $5,$5,$2 # make r5 point at end of src
- ld $10,-8($5) # load first limb
- dsubu $13,$0,$7
- daddu $4,$4,$2 # make r4 point at end of res
- daddiu $6,$6,-1
- and $9,$6,4-1 # number of limbs in first loop
- beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
- dsrl $2,$10,$13 # compute function result
-
- dsubu $6,$6,$9
-
-.Loop0: ld $3,-16($5)
- daddiu $4,$4,-8
- daddiu $5,$5,-8
- daddiu $9,$9,-1
- dsll $11,$10,$7
- dsrl $12,$3,$13
- move $10,$3
- or $8,$11,$12
- bne $9,$0,.Loop0
- sd $8,0($4)
-
-.L0: beq $6,$0,.Lend
- nop
-
-.Loop: ld $3,-16($5)
- daddiu $4,$4,-32
- daddiu $6,$6,-4
- dsll $11,$10,$7
- dsrl $12,$3,$13
-
- ld $10,-24($5)
- dsll $14,$3,$7
- or $8,$11,$12
- sd $8,24($4)
- dsrl $9,$10,$13
-
- ld $3,-32($5)
- dsll $11,$10,$7
- or $8,$14,$9
- sd $8,16($4)
- dsrl $12,$3,$13
-
- ld $10,-40($5)
- dsll $14,$3,$7
- or $8,$11,$12
- sd $8,8($4)
- dsrl $9,$10,$13
-
- daddiu $5,$5,-32
- or $8,$14,$9
- bgtz $6,.Loop
- sd $8,0($4)
-
-.Lend: dsll $8,$10,$7
- j $31
- sd $8,-8($4)
- .end mpihelp_lshift
diff --git a/mpi/mips3/mpih-mul1.S b/mpi/mips3/mpih-mul1.S
deleted file mode 100644
index 70409e8db..000000000
--- a/mpi/mips3/mpih-mul1.S
+++ /dev/null
@@ -1,89 +0,0 @@
-/* mips3 mpih-mul1.S -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998, 2000
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (r4)
- * mpi_ptr_t s1_ptr, (r5)
- * mpi_size_t s1_size, (r6)
- * mpi_limb_t s2_limb) (r7)
- */
-
- .text
- .align 4
- .globl mpihelp_mul_1
- .ent mpihelp_mul_1
-mpihelp_mul_1:
- .set noreorder
- .set nomacro
-
-/* # warm up phase 0 */
- ld $8,0($5)
-
-/* # warm up phase 1 */
- daddiu $5,$5,8
- dmultu $8,$7
-
- daddiu $6,$6,-1
- beq $6,$0,$LC0
- move $2,$0 # zero cy2
-
- daddiu $6,$6,-1
- beq $6,$0,$LC1
- ld $8,0($5) # load new s1 limb as early as possible
-
-Loop: mflo $10
- mfhi $9
- daddiu $5,$5,8
- daddu $10,$10,$2 # add old carry limb to low product limb
- dmultu $8,$7
- ld $8,0($5) # load new s1 limb as early as possible
- daddiu $6,$6,-1 # decrement loop counter
- sltu $2,$10,$2 # carry from previous addition -> $2
- sd $10,0($4)
- daddiu $4,$4,8
- bne $6,$0,Loop
- daddu $2,$9,$2 # add high product limb and carry from addition
-
-/* # cool down phase 1 */
-$LC1: mflo $10
- mfhi $9
- daddu $10,$10,$2
- sltu $2,$10,$2
- dmultu $8,$7
- sd $10,0($4)
- daddiu $4,$4,8
- daddu $2,$9,$2 # add high product limb and carry from addition
-
-/* # cool down phase 0 */
-$LC0: mflo $10
- mfhi $9
- daddu $10,$10,$2
- sltu $2,$10,$2
- sd $10,0($4)
- j $31
- daddu $2,$9,$2 # add high product limb and carry from addition
-
- .end mpihelp_mul_1
-
diff --git a/mpi/mips3/mpih-mul2.S b/mpi/mips3/mpih-mul2.S
deleted file mode 100644
index 1bddd0530..000000000
--- a/mpi/mips3/mpih-mul2.S
+++ /dev/null
@@ -1,101 +0,0 @@
-/* MIPS3 addmul_1 -- Multiply a limb vector with a single limb and
- * add the product to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998, 2000
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r4)
- * mpi_ptr_t s1_ptr, (r5)
- * mpi_size_t s1_size, (r6)
- * mpi_limb_t s2_limb) (r7)
- */
-
- .text
- .align 4
- .globl mpihelp_addmul_1
- .ent mpihelp_addmul_1
-mpihelp_addmul_1:
- .set noreorder
- .set nomacro
-
-/* # warm up phase 0 */
- ld $8,0($5)
-
-/* # warm up phase 1 */
- daddiu $5,$5,8
- dmultu $8,$7
-
- daddiu $6,$6,-1
- beq $6,$0,$LC0
- move $2,$0 # zero cy2
-
- daddiu $6,$6,-1
- beq $6,$0,$LC1
- ld $8,0($5) # load new s1 limb as early as possible
-
-Loop: ld $10,0($4)
- mflo $3
- mfhi $9
- daddiu $5,$5,8
- daddu $3,$3,$2 # add old carry limb to low product limb
- dmultu $8,$7
- ld $8,0($5) # load new s1 limb as early as possible
- daddiu $6,$6,-1 # decrement loop counter
- sltu $2,$3,$2 # carry from previous addition -> $2
- daddu $3,$10,$3
- sltu $10,$3,$10
- daddu $2,$2,$10
- sd $3,0($4)
- daddiu $4,$4,8
- bne $6,$0,Loop
- daddu $2,$9,$2 # add high product limb and carry from addition
-
-/* # cool down phase 1 */
-$LC1: ld $10,0($4)
- mflo $3
- mfhi $9
- daddu $3,$3,$2
- sltu $2,$3,$2
- dmultu $8,$7
- daddu $3,$10,$3
- sltu $10,$3,$10
- daddu $2,$2,$10
- sd $3,0($4)
- daddiu $4,$4,8
- daddu $2,$9,$2 # add high product limb and carry from addition
-
-/* # cool down phase 0 */
-$LC0: ld $10,0($4)
- mflo $3
- mfhi $9
- daddu $3,$3,$2
- sltu $2,$3,$2
- daddu $3,$10,$3
- sltu $10,$3,$10
- daddu $2,$2,$10
- sd $3,0($4)
- j $31
- daddu $2,$9,$2 # add high product limb and carry from addition
-
- .end mpihelp_addmul_1
-
diff --git a/mpi/mips3/mpih-mul3.S b/mpi/mips3/mpih-mul3.S
deleted file mode 100644
index 82fe47d53..000000000
--- a/mpi/mips3/mpih-mul3.S
+++ /dev/null
@@ -1,101 +0,0 @@
-/* MIPS3 submul_1 -- Multiply a limb vector with a single limb and
- * subtract the product from a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998, 2000
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (r4)
- * mpi_ptr_t s1_ptr, (r5)
- * mpi_size_t s1_size, (r6)
- * mpi_limb_t s2_limb) (r7)
- */
-
- .text
- .align 4
- .globl mpihelp_submul_1
- .ent mpihelp_submul_1
-mpihelp_submul_1:
- .set noreorder
- .set nomacro
-
-/* # warm up phase 0 */
- ld $8,0($5)
-
-/* # warm up phase 1 */
- daddiu $5,$5,8
- dmultu $8,$7
-
- daddiu $6,$6,-1
- beq $6,$0,$LC0
- move $2,$0 # zero cy2
-
- daddiu $6,$6,-1
- beq $6,$0,$LC1
- ld $8,0($5) # load new s1 limb as early as possible
-
-Loop: ld $10,0($4)
- mflo $3
- mfhi $9
- daddiu $5,$5,8
- daddu $3,$3,$2 # add old carry limb to low product limb
- dmultu $8,$7
- ld $8,0($5) # load new s1 limb as early as possible
- daddiu $6,$6,-1 # decrement loop counter
- sltu $2,$3,$2 # carry from previous addition -> $2
- dsubu $3,$10,$3
- sgtu $10,$3,$10
- daddu $2,$2,$10
- sd $3,0($4)
- daddiu $4,$4,8
- bne $6,$0,Loop
- daddu $2,$9,$2 # add high product limb and carry from addition
-
-/* # cool down phase 1 */
-$LC1: ld $10,0($4)
- mflo $3
- mfhi $9
- daddu $3,$3,$2
- sltu $2,$3,$2
- dmultu $8,$7
- dsubu $3,$10,$3
- sgtu $10,$3,$10
- daddu $2,$2,$10
- sd $3,0($4)
- daddiu $4,$4,8
- daddu $2,$9,$2 # add high product limb and carry from addition
-
-/* # cool down phase 0 */
-$LC0: ld $10,0($4)
- mflo $3
- mfhi $9
- daddu $3,$3,$2
- sltu $2,$3,$2
- dsubu $3,$10,$3
- sgtu $10,$3,$10
- daddu $2,$2,$10
- sd $3,0($4)
- j $31
- daddu $2,$9,$2 # add high product limb and carry from addition
-
- .end mpihelp_submul_1
-
diff --git a/mpi/mips3/mpih-rshift.S b/mpi/mips3/mpih-rshift.S
deleted file mode 100644
index 74a6cc96d..000000000
--- a/mpi/mips3/mpih-rshift.S
+++ /dev/null
@@ -1,95 +0,0 @@
-/* mips3 rshift
- *
- * Copyright (C) 1995, 1998, 2000
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, ($4)
- * mpi_ptr_t up, ($5)
- * mpi_size_t usize, ($6)
- * unsigned cnt) ($7)
- */
-
- .text
- .align 2
- .globl mpihelp_rshift
- .ent mpihelp_rshift
-mpihelp_rshift:
- .set noreorder
- .set nomacro
-
- ld $10,0($5) # load first limb
- dsubu $13,$0,$7
- daddiu $6,$6,-1
- and $9,$6,4-1 # number of limbs in first loop
- beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
- dsll $2,$10,$13 # compute function result
-
- dsubu $6,$6,$9
-
-.Loop0: ld $3,8($5)
- daddiu $4,$4,8
- daddiu $5,$5,8
- daddiu $9,$9,-1
- dsrl $11,$10,$7
- dsll $12,$3,$13
- move $10,$3
- or $8,$11,$12
- bne $9,$0,.Loop0
- sd $8,-8($4)
-
-.L0: beq $6,$0,.Lend
- nop
-
-.Loop: ld $3,8($5)
- daddiu $4,$4,32
- daddiu $6,$6,-4
- dsrl $11,$10,$7
- dsll $12,$3,$13
-
- ld $10,16($5)
- dsrl $14,$3,$7
- or $8,$11,$12
- sd $8,-32($4)
- dsll $9,$10,$13
-
- ld $3,24($5)
- dsrl $11,$10,$7
- or $8,$14,$9
- sd $8,-24($4)
- dsll $12,$3,$13
-
- ld $10,32($5)
- dsrl $14,$3,$7
- or $8,$11,$12
- sd $8,-16($4)
- dsll $9,$10,$13
-
- daddiu $5,$5,32
- or $8,$14,$9
- bgtz $6,.Loop
- sd $8,-8($4)
-
-.Lend: dsrl $8,$10,$7
- j $31
- sd $8,0($4)
- .end mpihelp_rshift
-
diff --git a/mpi/mips3/mpih-sub1.S b/mpi/mips3/mpih-sub1.S
deleted file mode 100644
index 72f506ea2..000000000
--- a/mpi/mips3/mpih-sub1.S
+++ /dev/null
@@ -1,125 +0,0 @@
-/* mips3 sub_n -- Subtract two limb vectors of the same length > 0 and
- * store difference in a third limb vector.
- *
- * Copyright (C) 1995, 1998, 1999, 2000,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (r4)
- * mpi_ptr_t s1_ptr, (r5)
- * mpi_ptr_t s2_ptr, (r6)
- * mpi_size_t size) (r7)
- */
-
-
- .text
- .align 2
- .globl mpihelp_sub_n
- .ent mpihelp_sub_n
-mpihelp_sub_n:
- .set noreorder
- .set nomacro
-
- ld $10,0($5)
- ld $11,0($6)
-
- daddiu $7,$7,-1
- and $9,$7,4-1 # number of limbs in first loop
- beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop
- move $2,$0
-
- dsubu $7,$7,$9
-
-.Loop0: daddiu $9,$9,-1
- ld $12,8($5)
- daddu $11,$11,$2
- ld $13,8($6)
- sltu $8,$11,$2
- dsubu $11,$10,$11
- sltu $2,$10,$11
- sd $11,0($4)
- or $2,$2,$8
-
- daddiu $5,$5,8
- daddiu $6,$6,8
- move $10,$12
- move $11,$13
- bne $9,$0,.Loop0
- daddiu $4,$4,8
-
-.L0: beq $7,$0,.Lend
- nop
-
-.Loop: daddiu $7,$7,-4
-
- ld $12,8($5)
- daddu $11,$11,$2
- ld $13,8($6)
- sltu $8,$11,$2
- dsubu $11,$10,$11
- sltu $2,$10,$11
- sd $11,0($4)
- or $2,$2,$8
-
- ld $10,16($5)
- daddu $13,$13,$2
- ld $11,16($6)
- sltu $8,$13,$2
- dsubu $13,$12,$13
- sltu $2,$12,$13
- sd $13,8($4)
- or $2,$2,$8
-
- ld $12,24($5)
- daddu $11,$11,$2
- ld $13,24($6)
- sltu $8,$11,$2
- dsubu $11,$10,$11
- sltu $2,$10,$11
- sd $11,16($4)
- or $2,$2,$8
-
- ld $10,32($5)
- daddu $13,$13,$2
- ld $11,32($6)
- sltu $8,$13,$2
- dsubu $13,$12,$13
- sltu $2,$12,$13
- sd $13,24($4)
- or $2,$2,$8
-
- daddiu $5,$5,32
- daddiu $6,$6,32
-
- bne $7,$0,.Loop
- daddiu $4,$4,32
-
-.Lend: daddu $11,$11,$2
- sltu $8,$11,$2
- dsubu $11,$10,$11
- sltu $2,$10,$11
- sd $11,0($4)
- j $31
- or $2,$2,$8
-
- .end mpihelp_sub_n
-
diff --git a/mpi/mpi-add.c b/mpi/mpi-add.c
deleted file mode 100644
index bbd1ac70e..000000000
--- a/mpi/mpi-add.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/* mpi-add.c - MPI functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "mpi-internal.h"
-
-
-/****************
- * Add the unsigned integer V to the mpi-integer U and store the
- * result in W. U and V may be the same.
- */
-void
-mpi_add_ui(MPI w, MPI u, unsigned long v )
-{
- mpi_ptr_t wp, up;
- mpi_size_t usize, wsize;
- int usign, wsign;
-
- usize = u->nlimbs;
- usign = u->sign;
- wsign = 0;
-
- /* If not space for W (and possible carry), increase space. */
- wsize = usize + 1;
- if( w->alloced < wsize )
- mpi_resize(w, wsize);
-
- /* These must be after realloc (U may be the same as W). */
- up = u->d;
- wp = w->d;
-
- if( !usize ) { /* simple */
- wp[0] = v;
- wsize = v? 1:0;
- }
- else if( !usign ) { /* mpi is not negative */
- mpi_limb_t cy;
- cy = mpihelp_add_1(wp, up, usize, v);
- wp[usize] = cy;
- wsize = usize + cy;
- }
- else { /* The signs are different. Need exact comparison to determine
- * which operand to subtract from which. */
- if( usize == 1 && up[0] < v ) {
- wp[0] = v - up[0];
- wsize = 1;
- }
- else {
- mpihelp_sub_1(wp, up, usize, v);
- /* Size can decrease with at most one limb. */
- wsize = usize - (wp[usize-1]==0);
- wsign = 1;
- }
- }
-
- w->nlimbs = wsize;
- w->sign = wsign;
-}
-
-
-void
-mpi_add(MPI w, MPI u, MPI v)
-{
- mpi_ptr_t wp, up, vp;
- mpi_size_t usize, vsize, wsize;
- int usign, vsign, wsign;
-
- if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */
- usize = v->nlimbs;
- usign = v->sign;
- vsize = u->nlimbs;
- vsign = u->sign;
- wsize = usize + 1;
- RESIZE_IF_NEEDED(w, wsize);
- /* These must be after realloc (u or v may be the same as w). */
- up = v->d;
- vp = u->d;
- }
- else {
- usize = u->nlimbs;
- usign = u->sign;
- vsize = v->nlimbs;
- vsign = v->sign;
- wsize = usize + 1;
- RESIZE_IF_NEEDED(w, wsize);
- /* These must be after realloc (u or v may be the same as w). */
- up = u->d;
- vp = v->d;
- }
- wp = w->d;
- wsign = 0;
-
- if( !vsize ) { /* simple */
- MPN_COPY(wp, up, usize );
- wsize = usize;
- wsign = usign;
- }
- else if( usign != vsign ) { /* different sign */
- /* This test is right since USIZE >= VSIZE */
- if( usize != vsize ) {
- mpihelp_sub(wp, up, usize, vp, vsize);
- wsize = usize;
- MPN_NORMALIZE(wp, wsize);
- wsign = usign;
- }
- else if( mpihelp_cmp(up, vp, usize) < 0 ) {
- mpihelp_sub_n(wp, vp, up, usize);
- wsize = usize;
- MPN_NORMALIZE(wp, wsize);
- if( !usign )
- wsign = 1;
- }
- else {
- mpihelp_sub_n(wp, up, vp, usize);
- wsize = usize;
- MPN_NORMALIZE(wp, wsize);
- if( usign )
- wsign = 1;
- }
- }
- else { /* U and V have same sign. Add them. */
- mpi_limb_t cy = mpihelp_add(wp, up, usize, vp, vsize);
- wp[usize] = cy;
- wsize = usize + cy;
- if( usign )
- wsign = 1;
- }
-
- w->nlimbs = wsize;
- w->sign = wsign;
-}
-
-
-/****************
- * Subtract the unsigned integer V from the mpi-integer U and store the
- * result in W.
- */
-void
-mpi_sub_ui(MPI w, MPI u, unsigned long v )
-{
- mpi_ptr_t wp, up;
- mpi_size_t usize, wsize;
- int usign, wsign;
-
- usize = u->nlimbs;
- usign = u->sign;
- wsign = 0;
-
- /* If not space for W (and possible carry), increase space. */
- wsize = usize + 1;
- if( w->alloced < wsize )
- mpi_resize(w, wsize);
-
- /* These must be after realloc (U may be the same as W). */
- up = u->d;
- wp = w->d;
-
- if( !usize ) { /* simple */
- wp[0] = v;
- wsize = v? 1:0;
- wsign = 1;
- }
- else if( usign ) { /* mpi and v are negative */
- mpi_limb_t cy;
- cy = mpihelp_add_1(wp, up, usize, v);
- wp[usize] = cy;
- wsize = usize + cy;
- }
- else { /* The signs are different. Need exact comparison to determine
- * which operand to subtract from which. */
- if( usize == 1 && up[0] < v ) {
- wp[0] = v - up[0];
- wsize = 1;
- wsign = 1;
- }
- else {
- mpihelp_sub_1(wp, up, usize, v);
- /* Size can decrease with at most one limb. */
- wsize = usize - (wp[usize-1]==0);
- }
- }
-
- w->nlimbs = wsize;
- w->sign = wsign;
-}
-
-void
-mpi_sub(MPI w, MPI u, MPI v)
-{
- if( w == v ) {
- MPI vv = mpi_copy(v);
- vv->sign = !vv->sign;
- mpi_add( w, u, vv );
- mpi_free(vv);
- }
- else {
- /* fixme: this is not thread-save (we temp. modify v) */
- v->sign = !v->sign;
- mpi_add( w, u, v );
- v->sign = !v->sign;
- }
-}
-
-
-void
-mpi_addm( MPI w, MPI u, MPI v, MPI m)
-{
- mpi_add(w, u, v);
- mpi_fdiv_r( w, w, m );
-}
-
-void
-mpi_subm( MPI w, MPI u, MPI v, MPI m)
-{
- mpi_sub(w, u, v);
- mpi_fdiv_r( w, w, m );
-}
-
diff --git a/mpi/mpi-bit.c b/mpi/mpi-bit.c
deleted file mode 100644
index 440e35212..000000000
--- a/mpi/mpi-bit.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* mpi-bit.c - MPI bit level fucntions
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-#ifdef MPI_INTERNAL_NEED_CLZ_TAB
-#ifdef __STDC__
-const
-#endif
-unsigned char
-__clz_tab[] =
-{
- 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-};
-#endif
-
-
-#define A_LIMB_1 ((mpi_limb_t)1)
-
-
-/****************
- * Sometimes we have MSL (most significant limbs) which are 0;
- * this is for some reasons not good, so this function removes them.
- */
-void
-mpi_normalize( MPI a )
-{
- if( mpi_is_opaque (a) )
- return;
-
- for( ; a->nlimbs && !a->d[a->nlimbs-1]; a->nlimbs-- )
- ;
-}
-
-
-
-/****************
- * Return the number of bits in A.
- */
-unsigned
-mpi_get_nbits( MPI a )
-{
- unsigned n;
-
- mpi_normalize( a );
- if( a->nlimbs ) {
- mpi_limb_t alimb = a->d[a->nlimbs-1];
- if( alimb )
- count_leading_zeros( n, alimb );
- else
- n = BITS_PER_MPI_LIMB;
- n = BITS_PER_MPI_LIMB - n + (a->nlimbs-1) * BITS_PER_MPI_LIMB;
- }
- else
- n = 0;
- return n;
-}
-
-
-/****************
- * Test whether bit N is set.
- */
-int
-mpi_test_bit( MPI a, unsigned n )
-{
- unsigned limbno, bitno;
- mpi_limb_t limb;
-
- limbno = n / BITS_PER_MPI_LIMB;
- bitno = n % BITS_PER_MPI_LIMB;
-
- if( limbno >= a->nlimbs )
- return 0; /* too far left: this is a 0 */
- limb = a->d[limbno];
- return (limb & (A_LIMB_1 << bitno))? 1: 0;
-}
-
-
-/****************
- * Set bit N of A.
- */
-void
-mpi_set_bit( MPI a, unsigned n )
-{
- unsigned limbno, bitno;
-
- limbno = n / BITS_PER_MPI_LIMB;
- bitno = n % BITS_PER_MPI_LIMB;
-
- if( limbno >= a->nlimbs ) { /* resize */
- if( a->alloced >= limbno )
- mpi_resize(a, limbno+1 );
- a->nlimbs = limbno+1;
- }
- a->d[limbno] |= (A_LIMB_1<<bitno);
-}
-
-/****************
- * Set bit N of A. and clear all bits above
- */
-void
-mpi_set_highbit( MPI a, unsigned n )
-{
- unsigned limbno, bitno;
-
- limbno = n / BITS_PER_MPI_LIMB;
- bitno = n % BITS_PER_MPI_LIMB;
-
- if( limbno >= a->nlimbs ) { /* resize */
- if( a->alloced >= limbno )
- mpi_resize(a, limbno+1 );
- a->nlimbs = limbno+1;
- }
- a->d[limbno] |= (A_LIMB_1<<bitno);
- for( bitno++; bitno < BITS_PER_MPI_LIMB; bitno++ )
- a->d[limbno] &= ~(A_LIMB_1 << bitno);
- a->nlimbs = limbno+1;
-}
-
-/****************
- * clear bit N of A and all bits above
- */
-void
-mpi_clear_highbit( MPI a, unsigned n )
-{
- unsigned limbno, bitno;
-
- limbno = n / BITS_PER_MPI_LIMB;
- bitno = n % BITS_PER_MPI_LIMB;
-
- if( limbno >= a->nlimbs )
- return; /* not allocated, so need to clear bits :-) */
-
- for( ; bitno < BITS_PER_MPI_LIMB; bitno++ )
- a->d[limbno] &= ~(A_LIMB_1 << bitno);
- a->nlimbs = limbno+1;
-}
-
-/****************
- * Clear bit N of A.
- */
-void
-mpi_clear_bit( MPI a, unsigned n )
-{
- unsigned limbno, bitno;
-
- limbno = n / BITS_PER_MPI_LIMB;
- bitno = n % BITS_PER_MPI_LIMB;
-
- if( limbno >= a->nlimbs )
- return; /* don't need to clear this bit, it's to far to left */
- a->d[limbno] &= ~(A_LIMB_1 << bitno);
-}
-
-
-/****************
- * Shift A by N bits to the right
- * FIXME: should use alloc_limb if X and A are same.
- */
-void
-mpi_rshift( MPI x, MPI a, unsigned n )
-{
- mpi_ptr_t xp;
- mpi_size_t xsize;
-
- xsize = a->nlimbs;
- x->sign = a->sign;
- RESIZE_IF_NEEDED(x, xsize);
- xp = x->d;
-
- if( xsize ) {
- mpihelp_rshift( xp, a->d, xsize, n);
- MPN_NORMALIZE( xp, xsize);
- }
- x->nlimbs = xsize;
-}
-
-
-/****************
- * Shift A by COUNT limbs to the left
- * This is used only within the MPI library
- */
-void
-mpi_lshift_limbs( MPI a, unsigned int count )
-{
- mpi_ptr_t ap = a->d;
- int n = a->nlimbs;
- int i;
-
- if( !count || !n )
- return;
-
- RESIZE_IF_NEEDED( a, n+count );
-
- for( i = n-1; i >= 0; i-- )
- ap[i+count] = ap[i];
- for(i=0; i < count; i++ )
- ap[i] = 0;
- a->nlimbs += count;
-}
-
-
-/****************
- * Shift A by COUNT limbs to the right
- * This is used only within the MPI library
- */
-void
-mpi_rshift_limbs( MPI a, unsigned int count )
-{
- mpi_ptr_t ap = a->d;
- mpi_size_t n = a->nlimbs;
- unsigned int i;
-
- if( count >= n ) {
- a->nlimbs = 0;
- return;
- }
-
- for( i = 0; i < n - count; i++ )
- ap[i] = ap[i+count];
- ap[i] = 0;
- a->nlimbs -= count;
-}
-
-
diff --git a/mpi/mpi-cmp.c b/mpi/mpi-cmp.c
deleted file mode 100644
index 612198885..000000000
--- a/mpi/mpi-cmp.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* mpi-cmp.c - MPI functions
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-int
-mpi_cmp_ui( MPI u, unsigned long v )
-{
- mpi_limb_t limb = v;
-
- mpi_normalize( u );
- if( !u->nlimbs && !limb )
- return 0;
- if( u->sign )
- return -1;
- if( u->nlimbs > 1 )
- return 1;
-
- if( u->d[0] == limb )
- return 0;
- else if( u->d[0] > limb )
- return 1;
- else
- return -1;
-}
-
-int
-mpi_cmp( MPI u, MPI v )
-{
- mpi_size_t usize, vsize;
- int cmp;
-
- mpi_normalize( u );
- mpi_normalize( v );
- usize = u->nlimbs;
- vsize = v->nlimbs;
- if( !u->sign && v->sign )
- return 1;
- if( u->sign && !v->sign )
- return -1;
- if( usize != vsize && !u->sign && !v->sign )
- return usize - vsize;
- if( usize != vsize && u->sign && v->sign )
- return vsize + usize;
- if( !usize )
- return 0;
- if( !(cmp=mpihelp_cmp( u->d, v->d, usize )) )
- return 0;
- if( (cmp < 0?1:0) == (u->sign?1:0))
- return 1;
- return -1;
-}
-
-
diff --git a/mpi/mpi-div.c b/mpi/mpi-div.c
deleted file mode 100644
index a86df2daf..000000000
--- a/mpi/mpi-div.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/* mpi-div.c - MPI functions
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-
-void
-mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor )
-{
- int divisor_sign = divisor->sign;
- MPI temp_divisor = NULL;
-
- /* We need the original value of the divisor after the remainder has been
- * preliminary calculated. We have to copy it to temporary space if it's
- * the same variable as REM. */
- if( rem == divisor ) {
- temp_divisor = mpi_copy( divisor );
- divisor = temp_divisor;
- }
-
- mpi_tdiv_r( rem, dividend, divisor );
-
- if( ((divisor_sign?1:0) ^ (dividend->sign?1:0)) && rem->nlimbs )
- mpi_add( rem, rem, divisor);
-
- if( temp_divisor )
- mpi_free(temp_divisor);
-}
-
-
-
-/****************
- * Division rounding the quotient towards -infinity.
- * The remainder gets the same sign as the denominator.
- * rem is optional
- */
-
-ulong
-mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor )
-{
- mpi_limb_t rlimb;
-
- rlimb = mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor );
- if( rlimb && dividend->sign )
- rlimb = divisor - rlimb;
-
- if( rem ) {
- rem->d[0] = rlimb;
- rem->nlimbs = rlimb? 1:0;
- }
- return rlimb;
-}
-
-
-void
-mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor )
-{
- MPI tmp = mpi_alloc( mpi_get_nlimbs(quot) );
- mpi_fdiv_qr( quot, tmp, dividend, divisor);
- mpi_free(tmp);
-}
-
-void
-mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor )
-{
- int divisor_sign = divisor->sign;
- MPI temp_divisor = NULL;
-
- if( quot == divisor || rem == divisor ) {
- temp_divisor = mpi_copy( divisor );
- divisor = temp_divisor;
- }
-
- mpi_tdiv_qr( quot, rem, dividend, divisor );
-
- if( (divisor_sign ^ dividend->sign) && rem->nlimbs ) {
- mpi_sub_ui( quot, quot, 1 );
- mpi_add( rem, rem, divisor);
- }
-
- if( temp_divisor )
- mpi_free(temp_divisor);
-}
-
-
-/* If den == quot, den needs temporary storage.
- * If den == rem, den needs temporary storage.
- * If num == quot, num needs temporary storage.
- * If den has temporary storage, it can be normalized while being copied,
- * i.e no extra storage should be allocated.
- */
-
-void
-mpi_tdiv_r( MPI rem, MPI num, MPI den)
-{
- mpi_tdiv_qr(NULL, rem, num, den );
-}
-
-void
-mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den)
-{
- mpi_ptr_t np, dp;
- mpi_ptr_t qp, rp;
- mpi_size_t nsize = num->nlimbs;
- mpi_size_t dsize = den->nlimbs;
- mpi_size_t qsize, rsize;
- mpi_size_t sign_remainder = num->sign;
- mpi_size_t sign_quotient = num->sign ^ den->sign;
- unsigned normalization_steps;
- mpi_limb_t q_limb;
- mpi_ptr_t marker[5];
- int markidx=0;
-
- /* Ensure space is enough for quotient and remainder.
- * We need space for an extra limb in the remainder, because it's
- * up-shifted (normalized) below. */
- rsize = nsize + 1;
- mpi_resize( rem, rsize);
-
- qsize = rsize - dsize; /* qsize cannot be bigger than this. */
- if( qsize <= 0 ) {
- if( num != rem ) {
- rem->nlimbs = num->nlimbs;
- rem->sign = num->sign;
- MPN_COPY(rem->d, num->d, nsize);
- }
- if( quot ) {
- /* This needs to follow the assignment to rem, in case the
- * numerator and quotient are the same. */
- quot->nlimbs = 0;
- quot->sign = 0;
- }
- return;
- }
-
- if( quot )
- mpi_resize( quot, qsize);
-
- /* Read pointers here, when reallocation is finished. */
- np = num->d;
- dp = den->d;
- rp = rem->d;
-
- /* Optimize division by a single-limb divisor. */
- if( dsize == 1 ) {
- mpi_limb_t rlimb;
- if( quot ) {
- qp = quot->d;
- rlimb = mpihelp_divmod_1( qp, np, nsize, dp[0] );
- qsize -= qp[qsize - 1] == 0;
- quot->nlimbs = qsize;
- quot->sign = sign_quotient;
- }
- else
- rlimb = mpihelp_mod_1( np, nsize, dp[0] );
- rp[0] = rlimb;
- rsize = rlimb != 0?1:0;
- rem->nlimbs = rsize;
- rem->sign = sign_remainder;
- return;
- }
-
-
- if( quot ) {
- qp = quot->d;
- /* Make sure QP and NP point to different objects. Otherwise the
- * numerator would be gradually overwritten by the quotient limbs. */
- if(qp == np) { /* Copy NP object to temporary space. */
- np = marker[markidx++] = mpi_alloc_limb_space(nsize,
- mpi_is_secure(quot));
- MPN_COPY(np, qp, nsize);
- }
- }
- else /* Put quotient at top of remainder. */
- qp = rp + dsize;
-
- count_leading_zeros( normalization_steps, dp[dsize - 1] );
-
- /* Normalize the denominator, i.e. make its most significant bit set by
- * shifting it NORMALIZATION_STEPS bits to the left. Also shift the
- * numerator the same number of steps (to keep the quotient the same!).
- */
- if( normalization_steps ) {
- mpi_ptr_t tp;
- mpi_limb_t nlimb;
-
- /* Shift up the denominator setting the most significant bit of
- * the most significant word. Use temporary storage not to clobber
- * the original contents of the denominator. */
- tp = marker[markidx++] = mpi_alloc_limb_space(dsize,mpi_is_secure(den));
- mpihelp_lshift( tp, dp, dsize, normalization_steps );
- dp = tp;
-
- /* Shift up the numerator, possibly introducing a new most
- * significant word. Move the shifted numerator in the remainder
- * meanwhile. */
- nlimb = mpihelp_lshift(rp, np, nsize, normalization_steps);
- if( nlimb ) {
- rp[nsize] = nlimb;
- rsize = nsize + 1;
- }
- else
- rsize = nsize;
- }
- else {
- /* The denominator is already normalized, as required. Copy it to
- * temporary space if it overlaps with the quotient or remainder. */
- if( dp == rp || (quot && (dp == qp))) {
- mpi_ptr_t tp;
-
- tp = marker[markidx++] = mpi_alloc_limb_space(dsize, mpi_is_secure(den));
- MPN_COPY( tp, dp, dsize );
- dp = tp;
- }
-
- /* Move the numerator to the remainder. */
- if( rp != np )
- MPN_COPY(rp, np, nsize);
-
- rsize = nsize;
- }
-
- q_limb = mpihelp_divrem( qp, 0, rp, rsize, dp, dsize );
-
- if( quot ) {
- qsize = rsize - dsize;
- if(q_limb) {
- qp[qsize] = q_limb;
- qsize += 1;
- }
-
- quot->nlimbs = qsize;
- quot->sign = sign_quotient;
- }
-
- rsize = dsize;
- MPN_NORMALIZE (rp, rsize);
-
- if( normalization_steps && rsize ) {
- mpihelp_rshift(rp, rp, rsize, normalization_steps);
- rsize -= rp[rsize - 1] == 0?1:0;
- }
-
- rem->nlimbs = rsize;
- rem->sign = sign_remainder;
- while( markidx )
- mpi_free_limb_space(marker[--markidx]);
-}
-
-void
-mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count )
-{
- mpi_size_t usize, wsize;
- mpi_size_t limb_cnt;
-
- usize = u->nlimbs;
- limb_cnt = count / BITS_PER_MPI_LIMB;
- wsize = usize - limb_cnt;
- if( limb_cnt >= usize )
- w->nlimbs = 0;
- else {
- mpi_ptr_t wp;
- mpi_ptr_t up;
-
- RESIZE_IF_NEEDED( w, wsize );
- wp = w->d;
- up = u->d;
-
- count %= BITS_PER_MPI_LIMB;
- if( count ) {
- mpihelp_rshift( wp, up + limb_cnt, wsize, count );
- wsize -= !wp[wsize - 1];
- }
- else {
- MPN_COPY_INCR( wp, up + limb_cnt, wsize);
- }
-
- w->nlimbs = wsize;
- }
-}
-
-/****************
- * Check whether dividend is divisible by divisor
- * (note: divisor must fit into a limb)
- */
-int
-mpi_divisible_ui(MPI dividend, ulong divisor )
-{
- return !mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor );
-}
-
diff --git a/mpi/mpi-gcd.c b/mpi/mpi-gcd.c
deleted file mode 100644
index efd703b32..000000000
--- a/mpi/mpi-gcd.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* mpi-gcd.c - MPI functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-/****************
- * Find the greatest common divisor G of A and B.
- * Return: true if this 1, false in all other cases
- */
-int
-mpi_gcd( MPI g, MPI xa, MPI xb )
-{
- MPI a, b;
-
- a = mpi_copy(xa);
- b = mpi_copy(xb);
-
- /* TAOCP Vol II, 4.5.2, Algorithm A */
- a->sign = 0;
- b->sign = 0;
- while( mpi_cmp_ui( b, 0 ) ) {
- mpi_fdiv_r( g, a, b ); /* g used as temorary variable */
- mpi_set(a,b);
- mpi_set(b,g);
- }
- mpi_set(g, a);
-
- mpi_free(a);
- mpi_free(b);
- return !mpi_cmp_ui( g, 1);
-}
-
-
-
diff --git a/mpi/mpi-inline.c b/mpi/mpi-inline.c
deleted file mode 100644
index 787d897dd..000000000
--- a/mpi/mpi-inline.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* mpi-inline.c
- * Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/* put the inline functions as real functions into the lib */
-#define G10_MPI_INLINE_DECL
-
-#include "mpi-internal.h"
-
-/* always include the header becuase it is only
- * included by mpi-internal if __GCC__ is defined but we
- * need it here in all cases and the above definition of
- * of the macro allows us to do so
- */
-#include "mpi-inline.h"
-
diff --git a/mpi/mpi-inline.h b/mpi/mpi-inline.h
deleted file mode 100644
index 02481b67c..000000000
--- a/mpi/mpi-inline.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* mpi-inline.h - Internal to the Multi Precision Integers
- * Copyright (C) 1994, 1996, 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#ifndef G10_MPI_INLINE_H
-#define G10_MPI_INLINE_H
-
-#ifndef G10_MPI_INLINE_DECL
- #define G10_MPI_INLINE_DECL extern __inline__
-#endif
-
-G10_MPI_INLINE_DECL mpi_limb_t
-mpihelp_add_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb)
-{
- mpi_limb_t x;
-
- x = *s1_ptr++;
- s2_limb += x;
- *res_ptr++ = s2_limb;
- if( s2_limb < x ) { /* sum is less than the left operand: handle carry */
- while( --s1_size ) {
- x = *s1_ptr++ + 1; /* add carry */
- *res_ptr++ = x; /* and store */
- if( x ) /* not 0 (no overflow): we can stop */
- goto leave;
- }
- return 1; /* return carry (size of s1 to small) */
- }
-
- leave:
- if( res_ptr != s1_ptr ) { /* not the same variable */
- mpi_size_t i; /* copy the rest */
- for( i=0; i < s1_size-1; i++ )
- res_ptr[i] = s1_ptr[i];
- }
- return 0; /* no carry */
-}
-
-
-
-G10_MPI_INLINE_DECL mpi_limb_t
-mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size)
-{
- mpi_limb_t cy = 0;
-
- if( s2_size )
- cy = mpihelp_add_n( res_ptr, s1_ptr, s2_ptr, s2_size );
-
- if( s1_size - s2_size )
- cy = mpihelp_add_1( res_ptr + s2_size, s1_ptr + s2_size,
- s1_size - s2_size, cy);
- return cy;
-}
-
-
-G10_MPI_INLINE_DECL mpi_limb_t
-mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb )
-{
- mpi_limb_t x;
-
- x = *s1_ptr++;
- s2_limb = x - s2_limb;
- *res_ptr++ = s2_limb;
- if( s2_limb > x ) {
- while( --s1_size ) {
- x = *s1_ptr++;
- *res_ptr++ = x - 1;
- if( x )
- goto leave;
- }
- return 1;
- }
-
- leave:
- if( res_ptr != s1_ptr ) {
- mpi_size_t i;
- for( i=0; i < s1_size-1; i++ )
- res_ptr[i] = s1_ptr[i];
- }
- return 0;
-}
-
-
-
-G10_MPI_INLINE_DECL mpi_limb_t
-mpihelp_sub( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size)
-{
- mpi_limb_t cy = 0;
-
- if( s2_size )
- cy = mpihelp_sub_n(res_ptr, s1_ptr, s2_ptr, s2_size);
-
- if( s1_size - s2_size )
- cy = mpihelp_sub_1(res_ptr + s2_size, s1_ptr + s2_size,
- s1_size - s2_size, cy);
- return cy;
-}
-
-
-#endif /*G10_MPI_INLINE_H*/
diff --git a/mpi/mpi-internal.h b/mpi/mpi-internal.h
deleted file mode 100644
index 60d9e09ee..000000000
--- a/mpi/mpi-internal.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/* mpi-internal.h - Internal to the Multi Precision Integers
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- * Copyright (C) 1998, 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#ifndef G10_MPI_INTERNAL_H
-#define G10_MPI_INTERNAL_H
-
-#include "mpi.h"
-
-/* If KARATSUBA_THRESHOLD is not already defined, define it to a
- * value which is good on most machines. */
-
-/* tested 4, 16, 32 and 64, where 16 gave the best performance when
- * checking a 768 and a 1024 bit ElGamal signature.
- * (wk 22.12.97) */
-#ifndef KARATSUBA_THRESHOLD
- #define KARATSUBA_THRESHOLD 16
-#endif
-
-/* The code can't handle KARATSUBA_THRESHOLD smaller than 2. */
-#if KARATSUBA_THRESHOLD < 2
- #undef KARATSUBA_THRESHOLD
- #define KARATSUBA_THRESHOLD 2
-#endif
-
-
-typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */
-typedef int mpi_size_t; /* (must be a signed type) */
-
-#define ABS(x) (x >= 0 ? x : -x)
-#define MIN(l,o) ((l) < (o) ? (l) : (o))
-#define MAX(h,i) ((h) > (i) ? (h) : (i))
-#define RESIZE_IF_NEEDED(a,b) \
- do { \
- if( (a)->alloced < (b) ) \
- mpi_resize((a), (b)); \
- } while(0)
-
-/* Copy N limbs from S to D. */
-#define MPN_COPY( d, s, n) \
- do { \
- mpi_size_t _i; \
- for( _i = 0; _i < (n); _i++ ) \
- (d)[_i] = (s)[_i]; \
- } while(0)
-
-#define MPN_COPY_INCR( d, s, n) \
- do { \
- mpi_size_t _i; \
- for( _i = 0; _i < (n); _i++ ) \
- (d)[_i] = (d)[_i]; \
- } while (0)
-
-#define MPN_COPY_DECR( d, s, n ) \
- do { \
- mpi_size_t _i; \
- for( _i = (n)-1; _i >= 0; _i--) \
- (d)[_i] = (s)[_i]; \
- } while(0)
-
-/* Zero N limbs at D */
-#define MPN_ZERO(d, n) \
- do { \
- int _i; \
- for( _i = 0; _i < (n); _i++ ) \
- (d)[_i] = 0; \
- } while (0)
-
-#define MPN_NORMALIZE(d, n) \
- do { \
- while( (n) > 0 ) { \
- if( (d)[(n)-1] ) \
- break; \
- (n)--; \
- } \
- } while(0)
-
-#define MPN_NORMALIZE_NOT_ZERO(d, n) \
- do { \
- for(;;) { \
- if( (d)[(n)-1] ) \
- break; \
- (n)--; \
- } \
- } while(0)
-
-#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
- do { \
- if( (size) < KARATSUBA_THRESHOLD ) \
- mul_n_basecase (prodp, up, vp, size); \
- else \
- mul_n (prodp, up, vp, size, tspace); \
- } while (0);
-
-
-/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest
- * limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
- * If this would yield overflow, DI should be the largest possible number
- * (i.e., only ones). For correct operation, the most significant bit of D
- * has to be set. Put the quotient in Q and the remainder in R.
- */
-#define UDIV_QRNND_PREINV(q, r, nh, nl, d, di) \
- do { \
- mpi_limb_t _q, _ql, _r; \
- mpi_limb_t _xh, _xl; \
- umul_ppmm (_q, _ql, (nh), (di)); \
- _q += (nh); /* DI is 2**BITS_PER_MPI_LIMB too small */ \
- umul_ppmm (_xh, _xl, _q, (d)); \
- sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \
- if( _xh ) { \
- sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
- _q++; \
- if( _xh) { \
- sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
- _q++; \
- } \
- } \
- if( _r >= (d) ) { \
- _r -= (d); \
- _q++; \
- } \
- (r) = _r; \
- (q) = _q; \
- } while (0)
-
-
-/*-- mpiutil.c --*/
-#ifdef M_DEBUG
- #define mpi_alloc_limb_space(n,f) mpi_debug_alloc_limb_space((n),(f), M_DBGINFO( __LINE__ ) )
- #define mpi_free_limb_space(n) mpi_debug_free_limb_space((n), M_DBGINFO( __LINE__ ) )
- mpi_ptr_t mpi_debug_alloc_limb_space( unsigned nlimbs, int sec, const char *info );
- void mpi_debug_free_limb_space( mpi_ptr_t a, const char *info );
-#else
- mpi_ptr_t mpi_alloc_limb_space( unsigned nlimbs, int sec );
- void mpi_free_limb_space( mpi_ptr_t a );
-#endif
-void mpi_assign_limb_space( MPI a, mpi_ptr_t ap, unsigned nlimbs );
-
-/*-- mpi-bit.c --*/
-void mpi_rshift_limbs( MPI a, unsigned int count );
-void mpi_lshift_limbs( MPI a, unsigned int count );
-
-
-/*-- mpihelp-add.c --*/
-mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb );
-mpi_limb_t mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_ptr_t s2_ptr, mpi_size_t size);
-mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size);
-
-/*-- mpihelp-sub.c --*/
-mpi_limb_t mpihelp_sub_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb );
-mpi_limb_t mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_ptr_t s2_ptr, mpi_size_t size);
-mpi_limb_t mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
- mpi_ptr_t s2_ptr, mpi_size_t s2_size);
-
-/*-- mpihelp-cmp.c --*/
-int mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size );
-
-/*-- mpihelp-mul.c --*/
-
-struct karatsuba_ctx {
- struct karatsuba_ctx *next;
- mpi_ptr_t tspace;
- mpi_size_t tspace_size;
- mpi_ptr_t tp;
- mpi_size_t tp_size;
-};
-
-void mpihelp_release_karatsuba_ctx( struct karatsuba_ctx *ctx );
-
-mpi_limb_t mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb);
-mpi_limb_t mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb);
-void mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp,
- mpi_size_t size);
-mpi_limb_t mpihelp_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize,
- mpi_ptr_t vp, mpi_size_t vsize);
-void mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size );
-void mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size,
- mpi_ptr_t tspace);
-
-void mpihelp_mul_karatsuba_case( mpi_ptr_t prodp,
- mpi_ptr_t up, mpi_size_t usize,
- mpi_ptr_t vp, mpi_size_t vsize,
- struct karatsuba_ctx *ctx );
-
-
-/*-- mpihelp-mul_1.c (or xxx/cpu/ *.S) --*/
-mpi_limb_t mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
- mpi_size_t s1_size, mpi_limb_t s2_limb);
-
-/*-- mpihelp-div.c --*/
-mpi_limb_t mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb);
-mpi_limb_t mpihelp_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs,
- mpi_ptr_t np, mpi_size_t nsize,
- mpi_ptr_t dp, mpi_size_t dsize);
-mpi_limb_t mpihelp_divmod_1( mpi_ptr_t quot_ptr,
- mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb);
-
-/*-- mpihelp-shift.c --*/
-mpi_limb_t mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
- unsigned cnt);
-mpi_limb_t mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
- unsigned cnt);
-
-
-/* Define stuff for longlong.h. */
-#define W_TYPE_SIZE BITS_PER_MPI_LIMB
- typedef mpi_limb_t UWtype;
- typedef unsigned int UHWtype;
-#if defined (__GNUC__)
- typedef unsigned int UQItype __attribute__ ((mode (QI)));
- typedef int SItype __attribute__ ((mode (SI)));
- typedef unsigned int USItype __attribute__ ((mode (SI)));
- typedef int DItype __attribute__ ((mode (DI)));
- typedef unsigned int UDItype __attribute__ ((mode (DI)));
-#else
- typedef unsigned char UQItype;
- typedef long SItype;
- typedef unsigned long USItype;
-#endif
-
-#ifdef __GNUC__
- #include "mpi-inline.h"
-#endif
-
-#endif /*G10_MPI_INTERNAL_H*/
diff --git a/mpi/mpi-inv.c b/mpi/mpi-inv.c
deleted file mode 100644
index ad41cf2a5..000000000
--- a/mpi/mpi-inv.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* mpi-inv.c - MPI functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-
-/****************
- * Calculate the multiplicative inverse X of A mod N
- * That is: Find the solution x for
- * 1 = (a*x) mod n
- */
-void
-mpi_invm( MPI x, MPI a, MPI n )
-{
- #if 0
- MPI u, v, u1, u2, u3, v1, v2, v3, q, t1, t2, t3;
- MPI ta, tb, tc;
-
- u = mpi_copy(a);
- v = mpi_copy(n);
- u1 = mpi_alloc_set_ui(1);
- u2 = mpi_alloc_set_ui(0);
- u3 = mpi_copy(u);
- v1 = mpi_alloc_set_ui(0);
- v2 = mpi_alloc_set_ui(1);
- v3 = mpi_copy(v);
- q = mpi_alloc( mpi_get_nlimbs(u)+1 );
- t1 = mpi_alloc( mpi_get_nlimbs(u)+1 );
- t2 = mpi_alloc( mpi_get_nlimbs(u)+1 );
- t3 = mpi_alloc( mpi_get_nlimbs(u)+1 );
- while( mpi_cmp_ui( v3, 0 ) ) {
- mpi_fdiv_q( q, u3, v3 );
- mpi_mul(t1, v1, q); mpi_mul(t2, v2, q); mpi_mul(t3, v3, q);
- mpi_sub(t1, u1, t1); mpi_sub(t2, u2, t2); mpi_sub(t3, u3, t3);
- mpi_set(u1, v1); mpi_set(u2, v2); mpi_set(u3, v3);
- mpi_set(v1, t1); mpi_set(v2, t2); mpi_set(v3, t3);
- }
- /* log_debug("result:\n");
- log_mpidump("q =", q );
- log_mpidump("u1=", u1);
- log_mpidump("u2=", u2);
- log_mpidump("u3=", u3);
- log_mpidump("v1=", v1);
- log_mpidump("v2=", v2); */
- mpi_set(x, u1);
-
- mpi_free(u1);
- mpi_free(u2);
- mpi_free(u3);
- mpi_free(v1);
- mpi_free(v2);
- mpi_free(v3);
- mpi_free(q);
- mpi_free(t1);
- mpi_free(t2);
- mpi_free(t3);
- mpi_free(u);
- mpi_free(v);
- #elif 0
- /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X)
- * modified according to Michael Penk's solution for Exercice 35 */
-
- /* FIXME: we can simplify this in most cases (see Knuth) */
- MPI u, v, u1, u2, u3, v1, v2, v3, t1, t2, t3;
- unsigned k;
- int sign;
-
- u = mpi_copy(a);
- v = mpi_copy(n);
- for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) {
- mpi_rshift(u, u, 1);
- mpi_rshift(v, v, 1);
- }
-
-
- u1 = mpi_alloc_set_ui(1);
- u2 = mpi_alloc_set_ui(0);
- u3 = mpi_copy(u);
- v1 = mpi_copy(v); /* !-- used as const 1 */
- v2 = mpi_alloc( mpi_get_nlimbs(u) ); mpi_sub( v2, u1, u );
- v3 = mpi_copy(v);
- if( mpi_test_bit(u, 0) ) { /* u is odd */
- t1 = mpi_alloc_set_ui(0);
- t2 = mpi_alloc_set_ui(1); t2->sign = 1;
- t3 = mpi_copy(v); t3->sign = !t3->sign;
- goto Y4;
- }
- else {
- t1 = mpi_alloc_set_ui(1);
- t2 = mpi_alloc_set_ui(0);
- t3 = mpi_copy(u);
- }
- do {
- do {
- if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */
- mpi_add(t1, t1, v);
- mpi_sub(t2, t2, u);
- }
- mpi_rshift(t1, t1, 1);
- mpi_rshift(t2, t2, 1);
- mpi_rshift(t3, t3, 1);
- Y4:
- ;
- } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */
-
- if( !t3->sign ) {
- mpi_set(u1, t1);
- mpi_set(u2, t2);
- mpi_set(u3, t3);
- }
- else {
- mpi_sub(v1, v, t1);
- sign = u->sign; u->sign = !u->sign;
- mpi_sub(v2, u, t2);
- u->sign = sign;
- sign = t3->sign; t3->sign = !t3->sign;
- mpi_set(v3, t3);
- t3->sign = sign;
- }
- mpi_sub(t1, u1, v1);
- mpi_sub(t2, u2, v2);
- mpi_sub(t3, u3, v3);
- if( t1->sign ) {
- mpi_add(t1, t1, v);
- mpi_sub(t2, t2, u);
- }
- } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */
- /* mpi_lshift( u3, k ); */
- mpi_set(x, u1);
-
- mpi_free(u1);
- mpi_free(u2);
- mpi_free(u3);
- mpi_free(v1);
- mpi_free(v2);
- mpi_free(v3);
- mpi_free(t1);
- mpi_free(t2);
- mpi_free(t3);
- #else
- /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X)
- * modified according to Michael Penk's solution for Exercice 35
- * with further enhancement */
- MPI u, v, u1, u2=NULL, u3, v1, v2=NULL, v3, t1, t2=NULL, t3;
- unsigned k;
- int sign;
- int odd ;
-
- u = mpi_copy(a);
- v = mpi_copy(n);
-
- for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) {
- mpi_rshift(u, u, 1);
- mpi_rshift(v, v, 1);
- }
- odd = mpi_test_bit(v,0);
-
- u1 = mpi_alloc_set_ui(1);
- if( !odd )
- u2 = mpi_alloc_set_ui(0);
- u3 = mpi_copy(u);
- v1 = mpi_copy(v);
- if( !odd ) {
- v2 = mpi_alloc( mpi_get_nlimbs(u) );
- mpi_sub( v2, u1, u ); /* U is used as const 1 */
- }
- v3 = mpi_copy(v);
- if( mpi_test_bit(u, 0) ) { /* u is odd */
- t1 = mpi_alloc_set_ui(0);
- if( !odd ) {
- t2 = mpi_alloc_set_ui(1); t2->sign = 1;
- }
- t3 = mpi_copy(v); t3->sign = !t3->sign;
- goto Y4;
- }
- else {
- t1 = mpi_alloc_set_ui(1);
- if( !odd )
- t2 = mpi_alloc_set_ui(0);
- t3 = mpi_copy(u);
- }
- do {
- do {
- if( !odd ) {
- if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */
- mpi_add(t1, t1, v);
- mpi_sub(t2, t2, u);
- }
- mpi_rshift(t1, t1, 1);
- mpi_rshift(t2, t2, 1);
- mpi_rshift(t3, t3, 1);
- }
- else {
- if( mpi_test_bit(t1, 0) )
- mpi_add(t1, t1, v);
- mpi_rshift(t1, t1, 1);
- mpi_rshift(t3, t3, 1);
- }
- Y4:
- ;
- } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */
-
- if( !t3->sign ) {
- mpi_set(u1, t1);
- if( !odd )
- mpi_set(u2, t2);
- mpi_set(u3, t3);
- }
- else {
- mpi_sub(v1, v, t1);
- sign = u->sign; u->sign = !u->sign;
- if( !odd )
- mpi_sub(v2, u, t2);
- u->sign = sign;
- sign = t3->sign; t3->sign = !t3->sign;
- mpi_set(v3, t3);
- t3->sign = sign;
- }
- mpi_sub(t1, u1, v1);
- if( !odd )
- mpi_sub(t2, u2, v2);
- mpi_sub(t3, u3, v3);
- if( t1->sign ) {
- mpi_add(t1, t1, v);
- if( !odd )
- mpi_sub(t2, t2, u);
- }
- } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */
- /* mpi_lshift( u3, k ); */
- mpi_set(x, u1);
-
- mpi_free(u1);
- mpi_free(v1);
- mpi_free(t1);
- if( !odd ) {
- mpi_free(u2);
- mpi_free(v2);
- mpi_free(t2);
- }
- mpi_free(u3);
- mpi_free(v3);
- mpi_free(t3);
-
- mpi_free(u);
- mpi_free(v);
- #endif
-}
-
-
-
diff --git a/mpi/mpi-mpow.c b/mpi/mpi-mpow.c
deleted file mode 100644
index 7c46fc65c..000000000
--- a/mpi/mpi-mpow.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* mpi-mpow.c - MPI functions
- * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-#include <assert.h>
-
-static int
-build_index( MPI *exparray, int k, int i, int t )
-{
- int j, bitno;
- int index = 0;
-
- bitno = t-i;
- for(j=k-1; j >= 0; j-- ) {
- index <<= 1;
- if( mpi_test_bit( exparray[j], bitno ) )
- index |= 1;
- }
- return index;
-}
-
-/****************
- * RES = (BASE[0] ^ EXP[0]) * (BASE[1] ^ EXP[1]) * ... * mod M
- */
-void
-mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI m)
-{
- int k; /* number of elements */
- int t; /* bit size of largest exponent */
- int i, j, idx;
- MPI *G; /* table with precomputed values of size 2^k */
- MPI tmp;
-
- for(k=0; basearray[k]; k++ )
- ;
- assert(k);
- for(t=0, i=0; (tmp=exparray[i]); i++ ) {
- j = mpi_get_nbits(tmp);
- if( j > t )
- t = j;
- }
- assert(i==k);
- assert(t);
- assert( k < 10 );
-
- G = m_alloc_clear( (1<<k) * sizeof *G );
- /* and calculate */
- tmp = mpi_alloc( mpi_get_nlimbs(m)+1 );
- mpi_set_ui( res, 1 );
- for(i = 1; i <= t; i++ ) {
- mpi_mulm(tmp, res, res, m );
- idx = build_index( exparray, k, i, t );
- assert( idx >= 0 && idx < (1<<k) );
- if( !G[idx] ) {
- if( !idx )
- G[0] = mpi_alloc_set_ui( 1 );
- else {
- for(j=0; j < k; j++ ) {
- if( (idx & (1<<j) ) ) {
- if( !G[idx] )
- G[idx] = mpi_copy( basearray[j] );
- else
- mpi_mulm( G[idx], G[idx], basearray[j], m );
- }
- }
- if( !G[idx] )
- G[idx] = mpi_alloc(0);
- }
- }
- mpi_mulm(res, tmp, G[idx], m );
- }
-
- /* cleanup */
- mpi_free(tmp);
- for(i=0; i < (1<<k); i++ )
- mpi_free(G[i]);
- m_free(G);
-}
-
-
diff --git a/mpi/mpi-mul.c b/mpi/mpi-mul.c
deleted file mode 100644
index 8748a3863..000000000
--- a/mpi/mpi-mul.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* mpi-mul.c - MPI functions
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- * Copyright (C) 1998, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-
-
-void
-mpi_mul_ui( MPI prod, MPI mult, unsigned long small_mult )
-{
- mpi_size_t size, prod_size;
- mpi_ptr_t prod_ptr;
- mpi_limb_t cy;
- int sign;
-
- size = mult->nlimbs;
- sign = mult->sign;
-
- if( !size || !small_mult ) {
- prod->nlimbs = 0;
- prod->sign = 0;
- return;
- }
-
- prod_size = size + 1;
- if( prod->alloced < prod_size )
- mpi_resize( prod, prod_size );
- prod_ptr = prod->d;
-
- cy = mpihelp_mul_1( prod_ptr, mult->d, size, (mpi_limb_t)small_mult );
- if( cy )
- prod_ptr[size++] = cy;
- prod->nlimbs = size;
- prod->sign = sign;
-}
-
-
-void
-mpi_mul_2exp( MPI w, MPI u, unsigned long cnt)
-{
- mpi_size_t usize, wsize, limb_cnt;
- mpi_ptr_t wp;
- mpi_limb_t wlimb;
- int usign, wsign;
-
- usize = u->nlimbs;
- usign = u->sign;
-
- if( !usize ) {
- w->nlimbs = 0;
- w->sign = 0;
- return;
- }
-
- limb_cnt = cnt / BITS_PER_MPI_LIMB;
- wsize = usize + limb_cnt + 1;
- if( w->alloced < wsize )
- mpi_resize(w, wsize );
- wp = w->d;
- wsize = usize + limb_cnt;
- wsign = usign;
-
- cnt %= BITS_PER_MPI_LIMB;
- if( cnt ) {
- wlimb = mpihelp_lshift( wp + limb_cnt, u->d, usize, cnt );
- if( wlimb ) {
- wp[wsize] = wlimb;
- wsize++;
- }
- }
- else {
- MPN_COPY_DECR( wp + limb_cnt, u->d, usize );
- }
-
- /* Zero all whole limbs at low end. Do it here and not before calling
- * mpn_lshift, not to lose for U == W. */
- MPN_ZERO( wp, limb_cnt );
-
- w->nlimbs = wsize;
- w->sign = wsign;
-}
-
-
-
-void
-mpi_mul( MPI w, MPI u, MPI v)
-{
- mpi_size_t usize, vsize, wsize;
- mpi_ptr_t up, vp, wp;
- mpi_limb_t cy;
- int usign, vsign, usecure, vsecure, sign_product;
- int assign_wp=0;
- mpi_ptr_t tmp_limb=NULL;
-
-
- if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */
- usize = v->nlimbs;
- usign = v->sign;
- usecure = mpi_is_secure(v);
- up = v->d;
- vsize = u->nlimbs;
- vsign = u->sign;
- vsecure = mpi_is_secure(u);
- vp = u->d;
- }
- else {
- usize = u->nlimbs;
- usign = u->sign;
- usecure = mpi_is_secure(u);
- up = u->d;
- vsize = v->nlimbs;
- vsign = v->sign;
- vsecure = mpi_is_secure(v);
- vp = v->d;
- }
- sign_product = usign ^ vsign;
- wp = w->d;
-
- /* Ensure W has space enough to store the result. */
- wsize = usize + vsize;
- if ( !mpi_is_secure (w) && (mpi_is_secure (u) || mpi_is_secure (v)) ) {
- /* w is not allocated in secure space but u or v is. To make sure
- * that no temporray results are stored in w, we temporary use
- * a newly allocated limb space for w */
- wp = mpi_alloc_limb_space( wsize, 1 );
- assign_wp = 2; /* mark it as 2 so that we can later copy it back to
- * mormal memory */
- }
- else if( w->alloced < wsize ) {
- if( wp == up || wp == vp ) {
- wp = mpi_alloc_limb_space( wsize, mpi_is_secure(w) );
- assign_wp = 1;
- }
- else {
- mpi_resize(w, wsize );
- wp = w->d;
- }
- }
- else { /* Make U and V not overlap with W. */
- if( wp == up ) {
- /* W and U are identical. Allocate temporary space for U. */
- up = tmp_limb = mpi_alloc_limb_space( usize, usecure );
- /* Is V identical too? Keep it identical with U. */
- if( wp == vp )
- vp = up;
- /* Copy to the temporary space. */
- MPN_COPY( up, wp, usize );
- }
- else if( wp == vp ) {
- /* W and V are identical. Allocate temporary space for V. */
- vp = tmp_limb = mpi_alloc_limb_space( vsize, vsecure );
- /* Copy to the temporary space. */
- MPN_COPY( vp, wp, vsize );
- }
- }
-
- if( !vsize )
- wsize = 0;
- else {
- cy = mpihelp_mul( wp, up, usize, vp, vsize );
- wsize -= cy? 0:1;
- }
-
- if( assign_wp ) {
- if (assign_wp == 2) {
- /* copy the temp wp from secure memory back to normal memory */
- mpi_ptr_t tmp_wp = mpi_alloc_limb_space (wsize, 0);
- MPN_COPY (tmp_wp, wp, wsize);
- mpi_free_limb_space (wp);
- wp = tmp_wp;
- }
- mpi_assign_limb_space( w, wp, wsize );
- }
- w->nlimbs = wsize;
- w->sign = sign_product;
- if( tmp_limb )
- mpi_free_limb_space( tmp_limb );
-}
-
-
-void
-mpi_mulm( MPI w, MPI u, MPI v, MPI m)
-{
- mpi_mul(w, u, v);
- mpi_fdiv_r( w, w, m );
-}
-
diff --git a/mpi/mpi-pow.c b/mpi/mpi-pow.c
deleted file mode 100644
index d65258b0f..000000000
--- a/mpi/mpi-pow.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* mpi-pow.c - MPI functions
- * Copyright (C) 1994, 1996, 1998, 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-#include <assert.h>
-
-
-/****************
- * RES = BASE ^ EXP mod MOD
- */
-void
-mpi_powm( MPI res, MPI base, MPI exp, MPI mod)
-{
- mpi_ptr_t rp, ep, mp, bp;
- mpi_size_t esize, msize, bsize, rsize;
- int esign, msign, bsign, rsign;
- int esec, msec, bsec, rsec;
- mpi_size_t size;
- int mod_shift_cnt;
- int negative_result;
- mpi_ptr_t mp_marker=NULL, bp_marker=NULL, ep_marker=NULL;
- mpi_ptr_t xp_marker=NULL;
- int assign_rp=0;
- mpi_ptr_t tspace = NULL;
- mpi_size_t tsize=0; /* to avoid compiler warning */
- /* fixme: we should check that the warning is void*/
-
- esize = exp->nlimbs;
- msize = mod->nlimbs;
- size = 2 * msize;
- esign = exp->sign;
- msign = mod->sign;
-
- esec = mpi_is_secure(exp);
- msec = mpi_is_secure(mod);
- bsec = mpi_is_secure(base);
- rsec = mpi_is_secure(res);
-
- rp = res->d;
- ep = exp->d;
-
- if( !msize )
- msize = 1 / msize; /* provoke a signal */
-
- if( !esize ) {
- /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0
- * depending on if MOD equals 1. */
- rp[0] = 1;
- res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1;
- res->sign = 0;
- goto leave;
- }
-
- /* Normalize MOD (i.e. make its most significant bit set) as required by
- * mpn_divrem. This will make the intermediate values in the calculation
- * slightly larger, but the correct result is obtained after a final
- * reduction using the original MOD value. */
- mp = mp_marker = mpi_alloc_limb_space(msize, msec);
- count_leading_zeros( mod_shift_cnt, mod->d[msize-1] );
- if( mod_shift_cnt )
- mpihelp_lshift( mp, mod->d, msize, mod_shift_cnt );
- else
- MPN_COPY( mp, mod->d, msize );
-
- bsize = base->nlimbs;
- bsign = base->sign;
- if( bsize > msize ) { /* The base is larger than the module. Reduce it. */
- /* Allocate (BSIZE + 1) with space for remainder and quotient.
- * (The quotient is (bsize - msize + 1) limbs.) */
- bp = bp_marker = mpi_alloc_limb_space( bsize + 1, bsec );
- MPN_COPY( bp, base->d, bsize );
- /* We don't care about the quotient, store it above the remainder,
- * at BP + MSIZE. */
- mpihelp_divrem( bp + msize, 0, bp, bsize, mp, msize );
- bsize = msize;
- /* Canonicalize the base, since we are going to multiply with it
- * quite a few times. */
- MPN_NORMALIZE( bp, bsize );
- }
- else
- bp = base->d;
-
- if( !bsize ) {
- res->nlimbs = 0;
- res->sign = 0;
- goto leave;
- }
-
- if( res->alloced < size ) {
- /* We have to allocate more space for RES. If any of the input
- * parameters are identical to RES, defer deallocation of the old
- * space. */
- if( rp == ep || rp == mp || rp == bp ) {
- rp = mpi_alloc_limb_space( size, rsec );
- assign_rp = 1;
- }
- else {
- mpi_resize( res, size );
- rp = res->d;
- }
- }
- else { /* Make BASE, EXP and MOD not overlap with RES. */
- if( rp == bp ) {
- /* RES and BASE are identical. Allocate temp. space for BASE. */
- assert( !bp_marker );
- bp = bp_marker = mpi_alloc_limb_space( bsize, bsec );
- MPN_COPY(bp, rp, bsize);
- }
- if( rp == ep ) {
- /* RES and EXP are identical. Allocate temp. space for EXP. */
- ep = ep_marker = mpi_alloc_limb_space( esize, esec );
- MPN_COPY(ep, rp, esize);
- }
- if( rp == mp ) {
- /* RES and MOD are identical. Allocate temporary space for MOD.*/
- assert( !mp_marker );
- mp = mp_marker = mpi_alloc_limb_space( msize, msec );
- MPN_COPY(mp, rp, msize);
- }
- }
-
- MPN_COPY( rp, bp, bsize );
- rsize = bsize;
- rsign = bsign;
-
- {
- mpi_size_t i;
- mpi_ptr_t xp = xp_marker = mpi_alloc_limb_space( 2 * (msize + 1), msec );
- int c;
- mpi_limb_t e;
- mpi_limb_t carry_limb;
- struct karatsuba_ctx karactx;
-
- memset( &karactx, 0, sizeof karactx );
- negative_result = (ep[0] & 1) && base->sign;
-
- i = esize - 1;
- e = ep[i];
- count_leading_zeros (c, e);
- e = (e << c) << 1; /* shift the exp bits to the left, lose msb */
- c = BITS_PER_MPI_LIMB - 1 - c;
-
- /* Main loop.
- *
- * Make the result be pointed to alternately by XP and RP. This
- * helps us avoid block copying, which would otherwise be necessary
- * with the overlap restrictions of mpihelp_divmod. With 50% probability
- * the result after this loop will be in the area originally pointed
- * by RP (==RES->d), and with 50% probability in the area originally
- * pointed to by XP.
- */
-
- for(;;) {
- while( c ) {
- mpi_ptr_t tp;
- mpi_size_t xsize;
-
- /*mpihelp_mul_n(xp, rp, rp, rsize);*/
- if( rsize < KARATSUBA_THRESHOLD )
- mpih_sqr_n_basecase( xp, rp, rsize );
- else {
- if( !tspace ) {
- tsize = 2 * rsize;
- tspace = mpi_alloc_limb_space( tsize, 0 );
- }
- else if( tsize < (2*rsize) ) {
- mpi_free_limb_space( tspace );
- tsize = 2 * rsize;
- tspace = mpi_alloc_limb_space( tsize, 0 );
- }
- mpih_sqr_n( xp, rp, rsize, tspace );
- }
-
- xsize = 2 * rsize;
- if( xsize > msize ) {
- mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize);
- xsize = msize;
- }
-
- tp = rp; rp = xp; xp = tp;
- rsize = xsize;
-
- if( (mpi_limb_signed_t)e < 0 ) {
- /*mpihelp_mul( xp, rp, rsize, bp, bsize );*/
- if( bsize < KARATSUBA_THRESHOLD ) {
- mpihelp_mul( xp, rp, rsize, bp, bsize );
- }
- else {
- mpihelp_mul_karatsuba_case(
- xp, rp, rsize, bp, bsize, &karactx );
- }
-
- xsize = rsize + bsize;
- if( xsize > msize ) {
- mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize);
- xsize = msize;
- }
-
- tp = rp; rp = xp; xp = tp;
- rsize = xsize;
- }
- e <<= 1;
- c--;
- }
-
- i--;
- if( i < 0 )
- break;
- e = ep[i];
- c = BITS_PER_MPI_LIMB;
- }
-
- /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT
- * steps. Adjust the result by reducing it with the original MOD.
- *
- * Also make sure the result is put in RES->d (where it already
- * might be, see above).
- */
- if( mod_shift_cnt ) {
- carry_limb = mpihelp_lshift( res->d, rp, rsize, mod_shift_cnt);
- rp = res->d;
- if( carry_limb ) {
- rp[rsize] = carry_limb;
- rsize++;
- }
- }
- else {
- MPN_COPY( res->d, rp, rsize);
- rp = res->d;
- }
-
- if( rsize >= msize ) {
- mpihelp_divrem(rp + msize, 0, rp, rsize, mp, msize);
- rsize = msize;
- }
-
- /* Remove any leading zero words from the result. */
- if( mod_shift_cnt )
- mpihelp_rshift( rp, rp, rsize, mod_shift_cnt);
- MPN_NORMALIZE (rp, rsize);
-
- mpihelp_release_karatsuba_ctx( &karactx );
- }
-
- if( negative_result && rsize ) {
- if( mod_shift_cnt )
- mpihelp_rshift( mp, mp, msize, mod_shift_cnt);
- mpihelp_sub( rp, mp, msize, rp, rsize);
- rsize = msize;
- rsign = msign;
- MPN_NORMALIZE(rp, rsize);
- }
- res->nlimbs = rsize;
- res->sign = rsign;
-
- leave:
- if( assign_rp ) mpi_assign_limb_space( res, rp, size );
- if( mp_marker ) mpi_free_limb_space( mp_marker );
- if( bp_marker ) mpi_free_limb_space( bp_marker );
- if( ep_marker ) mpi_free_limb_space( ep_marker );
- if( xp_marker ) mpi_free_limb_space( xp_marker );
- if( tspace ) mpi_free_limb_space( tspace );
-}
-
diff --git a/mpi/mpi-scan.c b/mpi/mpi-scan.c
deleted file mode 100644
index abebe2208..000000000
--- a/mpi/mpi-scan.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/* mpi-scan.c - MPI functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-/****************
- * Scan through an mpi and return byte for byte. a -1 is returned to indicate
- * the end of the mpi. Scanning is done from the lsb to the msb, returned
- * values are in the range of 0 .. 255.
- *
- * FIXME: This code is VERY ugly!
- */
-int
-mpi_getbyte( MPI a, unsigned idx )
-{
- int i, j;
- unsigned n;
- mpi_ptr_t ap;
- mpi_limb_t limb;
-
- ap = a->d;
- for(n=0,i=0; i < a->nlimbs; i++ ) {
- limb = ap[i];
- for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ )
- if( n == idx )
- return (limb >> j*8) & 0xff;
- }
- return -1;
-}
-
-
-/****************
- * Put a value at position IDX into A. idx counts from lsb to msb
- */
-void
-mpi_putbyte( MPI a, unsigned idx, int xc )
-{
- int i, j;
- unsigned n;
- mpi_ptr_t ap;
- mpi_limb_t limb, c;
-
- c = xc & 0xff;
- ap = a->d;
- for(n=0,i=0; i < a->alloced; i++ ) {
- limb = ap[i];
- for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ )
- if( n == idx ) {
- #if BYTES_PER_MPI_LIMB == 4
- if( j == 0 )
- limb = (limb & 0xffffff00) | c;
- else if( j == 1 )
- limb = (limb & 0xffff00ff) | (c<<8);
- else if( j == 2 )
- limb = (limb & 0xff00ffff) | (c<<16);
- else
- limb = (limb & 0x00ffffff) | (c<<24);
- #elif BYTES_PER_MPI_LIMB == 8
- if( j == 0 )
- limb = (limb & 0xffffffffffffff00) | c;
- else if( j == 1 )
- limb = (limb & 0xffffffffffff00ff) | (c<<8);
- else if( j == 2 )
- limb = (limb & 0xffffffffff00ffff) | (c<<16);
- else if( j == 3 )
- limb = (limb & 0xffffffff00ffffff) | (c<<24);
- else if( j == 4 )
- limb = (limb & 0xffffff00ffffffff) | (c<<32);
- else if( j == 5 )
- limb = (limb & 0xffff00ffffffffff) | (c<<40);
- else if( j == 6 )
- limb = (limb & 0xff00ffffffffffff) | (c<<48);
- else
- limb = (limb & 0x00ffffffffffffff) | (c<<56);
- #else
- #error please enhance this function, its ugly - i know.
- #endif
- if( a->nlimbs <= i )
- a->nlimbs = i+1;
- ap[i] = limb;
- return;
- }
- }
- abort(); /* index out of range */
-}
-
-
-/****************
- * Count the number of zerobits at the low end of A
- */
-unsigned
-mpi_trailing_zeros( MPI a )
-{
- unsigned n, count = 0;
-
- for(n=0; n < a->nlimbs; n++ ) {
- if( a->d[n] ) {
- unsigned nn;
- mpi_limb_t alimb = a->d[n];
-
- count_trailing_zeros( nn, alimb );
- count += nn;
- break;
- }
- count += BITS_PER_MPI_LIMB;
- }
- return count;
-
-}
-
-
diff --git a/mpi/mpicoder.c b/mpi/mpicoder.c
deleted file mode 100644
index 8cb1538c0..000000000
--- a/mpi/mpicoder.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/* mpicoder.c - Coder for the external representation of MPIs
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "mpi.h"
-#include "mpi-internal.h"
-#include "iobuf.h"
-#include "memory.h"
-#include "util.h"
-
-#ifdef M_DEBUG
- #undef mpi_read
-#endif
-
-#define MAX_EXTERN_MPI_BITS 16384
-
-/****************
- * write an mpi to out.
- */
-int
-mpi_write( IOBUF out, MPI a )
-{
- int rc;
- unsigned nbits = mpi_get_nbits(a);
- byte *p, *buf;
- unsigned n;
-
- if( nbits > MAX_EXTERN_MPI_BITS )
- log_bug("mpi_encode: mpi too large (%u bits)\n", nbits);
-
- iobuf_put(out, (nbits >>8) );
- iobuf_put(out, (nbits) );
-
- p = buf = mpi_get_buffer( a, &n, NULL );
- rc = iobuf_write( out, p, n );
- m_free(buf);
- return rc;
-}
-
-
-/****************
- * Read an external representation of an mpi and return the MPI
- * The external format is a 16 bit unsigned value stored in network byte order,
- * giving the number of bits for the following integer. The integer is stored
- * with MSB first (left padded with zeroes to align on a byte boundary).
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_read(IOBUF inp, unsigned *ret_nread, int secure, const char *info)
-#else
-mpi_read(IOBUF inp, unsigned *ret_nread, int secure)
-#endif
-{
- int c, i, j;
- unsigned nbits, nbytes, nlimbs, nread=0;
- mpi_limb_t a;
- MPI val = MPI_NULL;
-
- if( (c = iobuf_get(inp)) == -1 )
- goto leave;
- nbits = c << 8;
- if( (c = iobuf_get(inp)) == -1 )
- goto leave;
- nbits |= c;
- if( nbits > MAX_EXTERN_MPI_BITS ) {
- log_error("mpi too large (%u bits)\n", nbits);
- goto leave;
- }
- nread = 2;
-
- nbytes = (nbits+7) / 8;
- nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;
- #ifdef M_DEBUG
- val = secure? mpi_debug_alloc_secure( nlimbs, info )
- : mpi_debug_alloc( nlimbs, info );
- #else
- val = secure? mpi_alloc_secure( nlimbs )
- : mpi_alloc( nlimbs );
- #endif
- i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
- i %= BYTES_PER_MPI_LIMB;
- val->nbits = nbits;
- j= val->nlimbs = nlimbs;
- val->sign = 0;
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
- a <<= 8;
- a |= iobuf_get(inp) & 0xff; nread++;
- }
- i = 0;
- val->d[j-1] = a;
- }
-
- leave:
- if( nread > *ret_nread )
- log_bug("mpi crosses packet border\n");
- else
- *ret_nread = nread;
- return val;
-}
-
-
-MPI
-mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure)
-{
- int i, j;
- unsigned nbits, nbytes, nlimbs, nread=0;
- mpi_limb_t a;
- MPI val = MPI_NULL;
-
- if( *ret_nread < 2 )
- goto leave;
- nbits = buffer[0] << 8 | buffer[1];
- if( nbits > MAX_EXTERN_MPI_BITS ) {
- log_error("mpi too large (%u bits)\n", nbits);
- goto leave;
- }
- buffer += 2;
- nread = 2;
-
- nbytes = (nbits+7) / 8;
- nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;
- val = secure? mpi_alloc_secure( nlimbs )
- : mpi_alloc( nlimbs );
- i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
- i %= BYTES_PER_MPI_LIMB;
- val->nbits = nbits;
- j= val->nlimbs = nlimbs;
- val->sign = 0;
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
- if( ++nread > *ret_nread )
- log_bug("mpi larger than buffer\n");
- a <<= 8;
- a |= *buffer++;
- }
- i = 0;
- val->d[j-1] = a;
- }
-
- leave:
- *ret_nread = nread;
- return val;
-}
-
-
-/****************
- * Make an mpi from a character string.
- */
-int
-mpi_fromstr(MPI val, const char *str)
-{
- int hexmode=0, sign=0, prepend_zero=0, i, j, c, c1, c2;
- unsigned nbits, nbytes, nlimbs;
- mpi_limb_t a;
-
- if( *str == '-' ) {
- sign = 1;
- str++;
- }
- if( *str == '0' && str[1] == 'x' )
- hexmode = 1;
- else
- return 1; /* other bases are not yet supported */
- str += 2;
-
- nbits = strlen(str)*4;
- if( nbits % 8 )
- prepend_zero = 1;
- nbytes = (nbits+7) / 8;
- nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB;
- if( val->alloced < nlimbs )
- mpi_resize(val, nlimbs );
- i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB;
- i %= BYTES_PER_MPI_LIMB;
- j= val->nlimbs = nlimbs;
- val->sign = sign;
- for( ; j > 0; j-- ) {
- a = 0;
- for(; i < BYTES_PER_MPI_LIMB; i++ ) {
- if( prepend_zero ) {
- c1 = '0';
- prepend_zero = 0;
- }
- else
- c1 = *str++;
- assert(c1);
- c2 = *str++;
- assert(c2);
- if( c1 >= '0' && c1 <= '9' )
- c = c1 - '0';
- else if( c1 >= 'a' && c1 <= 'f' )
- c = c1 - 'a' + 10;
- else if( c1 >= 'A' && c1 <= 'F' )
- c = c1 - 'A' + 10;
- else {
- mpi_clear(val);
- return 1;
- }
- c <<= 4;
- if( c2 >= '0' && c2 <= '9' )
- c |= c2 - '0';
- else if( c2 >= 'a' && c2 <= 'f' )
- c |= c2 - 'a' + 10;
- else if( c2 >= 'A' && c2 <= 'F' )
- c |= c2 - 'A' + 10;
- else {
- mpi_clear(val);
- return 1;
- }
- a <<= 8;
- a |= c;
- }
- i = 0;
- val->d[j-1] = a;
- }
-
- return 0;
-}
-
-
-/****************
- * print an MPI to the given stream and return the number of characters
- * printed.
- */
-int
-mpi_print( FILE *fp, MPI a, int mode )
-{
- int i, n=0;
-
- if( a == MPI_NULL )
- return fprintf(fp, "[MPI_NULL]");
- if( !mode ) {
- unsigned int n1;
-
- n1 = mpi_get_nbits(a);
- n += fprintf(fp, "[%u bits]", n1);
- }
- else {
- if( a->sign )
- putc('-', fp);
-#if BYTES_PER_MPI_LIMB == 2
-#define X "4"
-#elif BYTES_PER_MPI_LIMB == 4
-#define X "8"
-#elif BYTES_PER_MPI_LIMB == 8
-#define X "16"
-#else
-#error please define the format here
-#endif
- for(i=a->nlimbs; i > 0 ; i-- ) {
- n += fprintf(fp, i!=a->nlimbs? "%0" X "lX":"%lX", (ulong)a->d[i-1]);
-#undef X
- }
- if( !a->nlimbs )
- putc('0', fp );
- }
- return n;
-}
-
-
-void
-g10_log_mpidump( const char *text, MPI a )
-{
- FILE *fp = log_stream();
-
- g10_log_print_prefix(text);
- mpi_print(fp, a, 1 );
- fputc('\n', fp);
-}
-
-/****************
- * Special function to get the low 8 bytes from an mpi.
- * This can be used as a keyid; KEYID is an 2 element array.
- * Return the low 4 bytes.
- */
-u32
-mpi_get_keyid( MPI a, u32 *keyid )
-{
-#if BYTES_PER_MPI_LIMB == 4
- if( keyid ) {
- keyid[0] = a->nlimbs >= 2? a->d[1] : 0;
- keyid[1] = a->nlimbs >= 1? a->d[0] : 0;
- }
- return a->nlimbs >= 1? a->d[0] : 0;
-#elif BYTES_PER_MPI_LIMB == 8
- if( keyid ) {
- keyid[0] = a->nlimbs? (u32)(a->d[0] >> 32) : 0;
- keyid[1] = a->nlimbs? (u32)(a->d[0] & 0xffffffff) : 0;
- }
- return a->nlimbs? (u32)(a->d[0] & 0xffffffff) : 0;
-#else
- #error Make this function work with other LIMB sizes
-#endif
-}
-
-
-/****************
- * Return an m_alloced buffer with the MPI (msb first).
- * NBYTES receives the length of this buffer. Caller must free the
- * return string (This function does return a 0 byte buffer with NBYTES
- * set to zero if the value of A is zero. If sign is not NULL, it will
- * be set to the sign of the A.
- */
-static byte *
-do_get_buffer( MPI a, unsigned *nbytes, int *sign, int force_secure )
-{
- byte *p, *buffer;
- mpi_limb_t alimb;
- int i;
- unsigned int n;
-
- if( sign )
- *sign = a->sign;
- *nbytes = n = a->nlimbs * BYTES_PER_MPI_LIMB;
- if (!n)
- n++; /* avoid zero length allocation */
- p = buffer = force_secure || mpi_is_secure(a) ? m_alloc_secure(n)
- : m_alloc(n);
-
- for(i=a->nlimbs-1; i >= 0; i-- ) {
- alimb = a->d[i];
-#if BYTES_PER_MPI_LIMB == 4
- *p++ = alimb >> 24;
- *p++ = alimb >> 16;
- *p++ = alimb >> 8;
- *p++ = alimb ;
-#elif BYTES_PER_MPI_LIMB == 8
- *p++ = alimb >> 56;
- *p++ = alimb >> 48;
- *p++ = alimb >> 40;
- *p++ = alimb >> 32;
- *p++ = alimb >> 24;
- *p++ = alimb >> 16;
- *p++ = alimb >> 8;
- *p++ = alimb ;
-#else
-#error please implement for this limb size.
-#endif
- }
-
- /* this is sub-optimal but we need to do the shift operation
- * because the caller has to free the returned buffer */
- for(p=buffer; !*p && *nbytes; p++, --*nbytes )
- ;
- if( p != buffer )
- memmove(buffer,p, *nbytes);
-
- return buffer;
-}
-
-
-byte *
-mpi_get_buffer( MPI a, unsigned *nbytes, int *sign )
-{
- return do_get_buffer( a, nbytes, sign, 0 );
-}
-
-byte *
-mpi_get_secure_buffer( MPI a, unsigned *nbytes, int *sign )
-{
- return do_get_buffer( a, nbytes, sign, 1 );
-}
-
-/****************
- * Use BUFFER to update MPI.
- */
-void
-mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign )
-{
- const byte *p;
- mpi_limb_t alimb;
- int nlimbs;
- int i;
-
- nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB;
- RESIZE_IF_NEEDED(a, nlimbs);
- a->sign = sign;
-
- for(i=0, p = buffer+nbytes-1; p >= buffer+BYTES_PER_MPI_LIMB; ) {
- #if BYTES_PER_MPI_LIMB == 4
- alimb = (mpi_limb_t)*p-- ;
- alimb |= (mpi_limb_t)*p-- << 8 ;
- alimb |= (mpi_limb_t)*p-- << 16 ;
- alimb |= (mpi_limb_t)*p-- << 24 ;
- #elif BYTES_PER_MPI_LIMB == 8
- alimb = (mpi_limb_t)*p-- ;
- alimb |= (mpi_limb_t)*p-- << 8 ;
- alimb |= (mpi_limb_t)*p-- << 16 ;
- alimb |= (mpi_limb_t)*p-- << 24 ;
- alimb |= (mpi_limb_t)*p-- << 32 ;
- alimb |= (mpi_limb_t)*p-- << 40 ;
- alimb |= (mpi_limb_t)*p-- << 48 ;
- alimb |= (mpi_limb_t)*p-- << 56 ;
- #else
- #error please implement for this limb size.
- #endif
- a->d[i++] = alimb;
- }
- if( p >= buffer ) {
- #if BYTES_PER_MPI_LIMB == 4
- alimb = *p-- ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 8 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 16 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 24 ;
- #elif BYTES_PER_MPI_LIMB == 8
- alimb = (mpi_limb_t)*p-- ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 8 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 16 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 24 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 32 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 40 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 48 ;
- if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 56 ;
- #else
- #error please implement for this limb size.
- #endif
- a->d[i++] = alimb;
- }
- a->nlimbs = i;
- assert( i == nlimbs );
-}
-
diff --git a/mpi/mpih-cmp.c b/mpi/mpih-cmp.c
deleted file mode 100644
index 03d41557c..000000000
--- a/mpi/mpih-cmp.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* mpihelp-sub.c - MPI helper functions
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "mpi-internal.h"
-
-/****************
- * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
- * There are no restrictions on the relative sizes of
- * the two arguments.
- * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2.
- */
-int
-mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size )
-{
- mpi_size_t i;
- mpi_limb_t op1_word, op2_word;
-
- for( i = size - 1; i >= 0 ; i--) {
- op1_word = op1_ptr[i];
- op2_word = op2_ptr[i];
- if( op1_word != op2_word )
- goto diff;
- }
- return 0;
-
- diff:
- /* This can *not* be simplified to
- * op2_word - op2_word
- * since that expression might give signed overflow. */
- return (op1_word > op2_word) ? 1 : -1;
-}
-
diff --git a/mpi/mpih-div.c b/mpi/mpih-div.c
deleted file mode 100644
index 6eb0e1a34..000000000
--- a/mpi/mpih-div.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/* mpihelp-div.c - MPI helper functions
- * Copyright (C) 1994, 1996 Free Software Foundation, Inc.
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-#ifndef UMUL_TIME
- #define UMUL_TIME 1
-#endif
-#ifndef UDIV_TIME
- #define UDIV_TIME UMUL_TIME
-#endif
-
-/* FIXME: We should be using invert_limb (or invert_normalized_limb)
- * here (not udiv_qrnnd).
- */
-
-mpi_limb_t
-mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb)
-{
- mpi_size_t i;
- mpi_limb_t n1, n0, r;
- int dummy;
-
- /* Botch: Should this be handled at all? Rely on callers? */
- if( !dividend_size )
- return 0;
-
- /* If multiplication is much faster than division, and the
- * dividend is large, pre-invert the divisor, and use
- * only multiplications in the inner loop.
- *
- * This test should be read:
- * Does it ever help to use udiv_qrnnd_preinv?
- * && Does what we save compensate for the inversion overhead?
- */
- if( UDIV_TIME > (2 * UMUL_TIME + 6)
- && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) {
- int normalization_steps;
-
- count_leading_zeros( normalization_steps, divisor_limb );
- if( normalization_steps ) {
- mpi_limb_t divisor_limb_inverted;
-
- divisor_limb <<= normalization_steps;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- *
- * Special case for DIVISOR_LIMB == 100...000.
- */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t)0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for( i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV(dummy, r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb, divisor_limb_inverted);
- n1 = n0;
- }
- UDIV_QRNND_PREINV(dummy, r, r,
- n1 << normalization_steps,
- divisor_limb, divisor_limb_inverted);
- return r >> normalization_steps;
- }
- else {
- mpi_limb_t divisor_limb_inverted;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- *
- * Special case for DIVISOR_LIMB == 100...000.
- */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t)0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if( r >= divisor_limb )
- r = 0;
- else
- i--;
-
- for( ; i >= 0; i--) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV(dummy, r, r,
- n0, divisor_limb, divisor_limb_inverted);
- }
- return r;
- }
- }
- else {
- if( UDIV_NEEDS_NORMALIZATION ) {
- int normalization_steps;
-
- count_leading_zeros(normalization_steps, divisor_limb);
- if( normalization_steps ) {
- divisor_limb <<= normalization_steps;
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for(i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd (dummy, r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb);
- n1 = n0;
- }
- udiv_qrnnd (dummy, r, r,
- n1 << normalization_steps,
- divisor_limb);
- return r >> normalization_steps;
- }
- }
- /* No normalization needed, either because udiv_qrnnd doesn't require
- * it, or because DIVISOR_LIMB is already normalized. */
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if(r >= divisor_limb)
- r = 0;
- else
- i--;
-
- for(; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd (dummy, r, r, n0, divisor_limb);
- }
- return r;
- }
-}
-
-/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write
- * the NSIZE-DSIZE least significant quotient limbs at QP
- * and the DSIZE long remainder at NP. If QEXTRA_LIMBS is
- * non-zero, generate that many fraction bits and append them after the
- * other quotient limbs.
- * Return the most significant limb of the quotient, this is always 0 or 1.
- *
- * Preconditions:
- * 0. NSIZE >= DSIZE.
- * 1. The most significant bit of the divisor must be set.
- * 2. QP must either not overlap with the input operands at all, or
- * QP + DSIZE >= NP must hold true. (This means that it's
- * possible to put the quotient in the high part of NUM, right after the
- * remainder in NUM.
- * 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero.
- */
-
-mpi_limb_t
-mpihelp_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs,
- mpi_ptr_t np, mpi_size_t nsize,
- mpi_ptr_t dp, mpi_size_t dsize)
-{
- mpi_limb_t most_significant_q_limb = 0;
-
- switch(dsize) {
- case 0:
- /* We are asked to divide by zero, so go ahead and do it! (To make
- the compiler not remove this statement, return the value.) */
- return 1 / dsize;
-
- case 1:
- {
- mpi_size_t i;
- mpi_limb_t n1;
- mpi_limb_t d;
-
- d = dp[0];
- n1 = np[nsize - 1];
-
- if( n1 >= d ) {
- n1 -= d;
- most_significant_q_limb = 1;
- }
-
- qp += qextra_limbs;
- for( i = nsize - 2; i >= 0; i--)
- udiv_qrnnd( qp[i], n1, n1, np[i], d );
- qp -= qextra_limbs;
-
- for( i = qextra_limbs - 1; i >= 0; i-- )
- udiv_qrnnd (qp[i], n1, n1, 0, d);
-
- np[0] = n1;
- }
- break;
-
- case 2:
- {
- mpi_size_t i;
- mpi_limb_t n1, n0, n2;
- mpi_limb_t d1, d0;
-
- np += nsize - 2;
- d1 = dp[1];
- d0 = dp[0];
- n1 = np[1];
- n0 = np[0];
-
- if( n1 >= d1 && (n1 > d1 || n0 >= d0) ) {
- sub_ddmmss (n1, n0, n1, n0, d1, d0);
- most_significant_q_limb = 1;
- }
-
- for( i = qextra_limbs + nsize - 2 - 1; i >= 0; i-- ) {
- mpi_limb_t q;
- mpi_limb_t r;
-
- if( i >= qextra_limbs )
- np--;
- else
- np[0] = 0;
-
- if( n1 == d1 ) {
- /* Q should be either 111..111 or 111..110. Need special
- * treatment of this rare case as normal division would
- * give overflow. */
- q = ~(mpi_limb_t)0;
-
- r = n0 + d1;
- if( r < d1 ) { /* Carry in the addition? */
- add_ssaaaa( n1, n0, r - d0, np[0], 0, d0 );
- qp[i] = q;
- continue;
- }
- n1 = d0 - (d0 != 0?1:0);
- n0 = -d0;
- }
- else {
- udiv_qrnnd (q, r, n1, n0, d1);
- umul_ppmm (n1, n0, d0, q);
- }
-
- n2 = np[0];
- q_test:
- if( n1 > r || (n1 == r && n0 > n2) ) {
- /* The estimated Q was too large. */
- q--;
- sub_ddmmss (n1, n0, n1, n0, 0, d0);
- r += d1;
- if( r >= d1 ) /* If not carry, test Q again. */
- goto q_test;
- }
-
- qp[i] = q;
- sub_ddmmss (n1, n0, r, n2, n1, n0);
- }
- np[1] = n1;
- np[0] = n0;
- }
- break;
-
- default:
- {
- mpi_size_t i;
- mpi_limb_t dX, d1, n0;
-
- np += nsize - dsize;
- dX = dp[dsize - 1];
- d1 = dp[dsize - 2];
- n0 = np[dsize - 1];
-
- if( n0 >= dX ) {
- if(n0 > dX || mpihelp_cmp(np, dp, dsize - 1) >= 0 ) {
- mpihelp_sub_n(np, np, dp, dsize);
- n0 = np[dsize - 1];
- most_significant_q_limb = 1;
- }
- }
-
- for( i = qextra_limbs + nsize - dsize - 1; i >= 0; i--) {
- mpi_limb_t q;
- mpi_limb_t n1, n2;
- mpi_limb_t cy_limb;
-
- if( i >= qextra_limbs ) {
- np--;
- n2 = np[dsize];
- }
- else {
- n2 = np[dsize - 1];
- MPN_COPY_DECR (np + 1, np, dsize - 1);
- np[0] = 0;
- }
-
- if( n0 == dX ) {
- /* This might over-estimate q, but it's probably not worth
- * the extra code here to find out. */
- q = ~(mpi_limb_t)0;
- }
- else {
- mpi_limb_t r;
-
- udiv_qrnnd(q, r, n0, np[dsize - 1], dX);
- umul_ppmm(n1, n0, d1, q);
-
- while( n1 > r || (n1 == r && n0 > np[dsize - 2])) {
- q--;
- r += dX;
- if( r < dX ) /* I.e. "carry in previous addition?" */
- break;
- n1 -= n0 < d1;
- n0 -= d1;
- }
- }
-
- /* Possible optimization: We already have (q * n0) and (1 * n1)
- * after the calculation of q. Taking advantage of that, we
- * could make this loop make two iterations less. */
- cy_limb = mpihelp_submul_1(np, dp, dsize, q);
-
- if( n2 != cy_limb ) {
- mpihelp_add_n(np, np, dp, dsize);
- q--;
- }
-
- qp[i] = q;
- n0 = np[dsize - 1];
- }
- }
- }
-
- return most_significant_q_limb;
-}
-
-
-/****************
- * Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
- * Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR.
- * Return the single-limb remainder.
- * There are no constraints on the value of the divisor.
- *
- * QUOT_PTR and DIVIDEND_PTR might point to the same limb.
- */
-
-mpi_limb_t
-mpihelp_divmod_1( mpi_ptr_t quot_ptr,
- mpi_ptr_t dividend_ptr, mpi_size_t dividend_size,
- mpi_limb_t divisor_limb)
-{
- mpi_size_t i;
- mpi_limb_t n1, n0, r;
- int dummy;
-
- if( !dividend_size )
- return 0;
-
- /* If multiplication is much faster than division, and the
- * dividend is large, pre-invert the divisor, and use
- * only multiplications in the inner loop.
- *
- * This test should be read:
- * Does it ever help to use udiv_qrnnd_preinv?
- * && Does what we save compensate for the inversion overhead?
- */
- if( UDIV_TIME > (2 * UMUL_TIME + 6)
- && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) {
- int normalization_steps;
-
- count_leading_zeros( normalization_steps, divisor_limb );
- if( normalization_steps ) {
- mpi_limb_t divisor_limb_inverted;
-
- divisor_limb <<= normalization_steps;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- */
- /* Special case for DIVISOR_LIMB == 100...000. */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t)0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for( i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV( quot_ptr[i + 1], r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb, divisor_limb_inverted);
- n1 = n0;
- }
- UDIV_QRNND_PREINV( quot_ptr[0], r, r,
- n1 << normalization_steps,
- divisor_limb, divisor_limb_inverted);
- return r >> normalization_steps;
- }
- else {
- mpi_limb_t divisor_limb_inverted;
-
- /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
- * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
- * most significant bit (with weight 2**N) implicit.
- */
- /* Special case for DIVISOR_LIMB == 100...000. */
- if( !(divisor_limb << 1) )
- divisor_limb_inverted = ~(mpi_limb_t) 0;
- else
- udiv_qrnnd(divisor_limb_inverted, dummy,
- -divisor_limb, 0, divisor_limb);
-
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if( r >= divisor_limb )
- r = 0;
- else
- quot_ptr[i--] = 0;
-
- for( ; i >= 0; i-- ) {
- n0 = dividend_ptr[i];
- UDIV_QRNND_PREINV( quot_ptr[i], r, r,
- n0, divisor_limb, divisor_limb_inverted);
- }
- return r;
- }
- }
- else {
- if(UDIV_NEEDS_NORMALIZATION) {
- int normalization_steps;
-
- count_leading_zeros (normalization_steps, divisor_limb);
- if( normalization_steps ) {
- divisor_limb <<= normalization_steps;
-
- n1 = dividend_ptr[dividend_size - 1];
- r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps);
-
- /* Possible optimization:
- * if (r == 0
- * && divisor_limb > ((n1 << normalization_steps)
- * | (dividend_ptr[dividend_size - 2] >> ...)))
- * ...one division less...
- */
- for( i = dividend_size - 2; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd (quot_ptr[i + 1], r, r,
- ((n1 << normalization_steps)
- | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))),
- divisor_limb);
- n1 = n0;
- }
- udiv_qrnnd (quot_ptr[0], r, r,
- n1 << normalization_steps,
- divisor_limb);
- return r >> normalization_steps;
- }
- }
- /* No normalization needed, either because udiv_qrnnd doesn't require
- * it, or because DIVISOR_LIMB is already normalized. */
- i = dividend_size - 1;
- r = dividend_ptr[i];
-
- if(r >= divisor_limb)
- r = 0;
- else
- quot_ptr[i--] = 0;
-
- for(; i >= 0; i--) {
- n0 = dividend_ptr[i];
- udiv_qrnnd( quot_ptr[i], r, r, n0, divisor_limb );
- }
- return r;
- }
-}
-
-
diff --git a/mpi/mpih-mul.c b/mpi/mpih-mul.c
deleted file mode 100644
index db6c1aeb8..000000000
--- a/mpi/mpih-mul.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/* mpihelp-mul.c - MPI helper functions
- * Copyright (C) 1994, 1996, 1998, 1999,
- * 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "mpi-internal.h"
-#include "longlong.h"
-
-
-
-#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
- do { \
- if( (size) < KARATSUBA_THRESHOLD ) \
- mul_n_basecase (prodp, up, vp, size); \
- else \
- mul_n (prodp, up, vp, size, tspace); \
- } while (0);
-
-#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
- do { \
- if ((size) < KARATSUBA_THRESHOLD) \
- mpih_sqr_n_basecase (prodp, up, size); \
- else \
- mpih_sqr_n (prodp, up, size, tspace); \
- } while (0);
-
-
-
-
-/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP),
- * both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are
- * always stored. Return the most significant limb.
- *
- * Argument constraints:
- * 1. PRODP != UP and PRODP != VP, i.e. the destination
- * must be distinct from the multiplier and the multiplicand.
- *
- *
- * Handle simple cases with traditional multiplication.
- *
- * This is the most critical code of multiplication. All multiplies rely
- * on this, both small and huge. Small ones arrive here immediately. Huge
- * ones arrive here as this is the base case for Karatsuba's recursive
- * algorithm below.
- */
-
-static mpi_limb_t
-mul_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up,
- mpi_ptr_t vp, mpi_size_t size)
-{
- mpi_size_t i;
- mpi_limb_t cy;
- mpi_limb_t v_limb;
-
- /* Multiply by the first limb in V separately, as the result can be
- * stored (not added) to PROD. We also avoid a loop for zeroing. */
- v_limb = vp[0];
- if( v_limb <= 1 ) {
- if( v_limb == 1 )
- MPN_COPY( prodp, up, size );
- else
- MPN_ZERO( prodp, size );
- cy = 0;
- }
- else
- cy = mpihelp_mul_1( prodp, up, size, v_limb );
-
- prodp[size] = cy;
- prodp++;
-
- /* For each iteration in the outer loop, multiply one limb from
- * U with one limb from V, and add it to PROD. */
- for( i = 1; i < size; i++ ) {
- v_limb = vp[i];
- if( v_limb <= 1 ) {
- cy = 0;
- if( v_limb == 1 )
- cy = mpihelp_add_n(prodp, prodp, up, size);
- }
- else
- cy = mpihelp_addmul_1(prodp, up, size, v_limb);
-
- prodp[size] = cy;
- prodp++;
- }
-
- return cy;
-}
-
-
-static void
-mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp,
- mpi_size_t size, mpi_ptr_t tspace )
-{
- if( size & 1 ) {
- /* The size is odd, and the code below doesn't handle that.
- * Multiply the least significant (size - 1) limbs with a recursive
- * call, and handle the most significant limb of S1 and S2
- * separately.
- * A slightly faster way to do this would be to make the Karatsuba
- * code below behave as if the size were even, and let it check for
- * odd size in the end. I.e., in essence move this code to the end.
- * Doing so would save us a recursive call, and potentially make the
- * stack grow a lot less.
- */
- mpi_size_t esize = size - 1; /* even size */
- mpi_limb_t cy_limb;
-
- MPN_MUL_N_RECURSE( prodp, up, vp, esize, tspace );
- cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, vp[esize] );
- prodp[esize + esize] = cy_limb;
- cy_limb = mpihelp_addmul_1( prodp + esize, vp, size, up[esize] );
- prodp[esize + size] = cy_limb;
- }
- else {
- /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm.
- *
- * Split U in two pieces, U1 and U0, such that
- * U = U0 + U1*(B**n),
- * and V in V1 and V0, such that
- * V = V0 + V1*(B**n).
- *
- * UV is then computed recursively using the identity
- *
- * 2n n n n
- * UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V
- * 1 1 1 0 0 1 0 0
- *
- * Where B = 2**BITS_PER_MP_LIMB.
- */
- mpi_size_t hsize = size >> 1;
- mpi_limb_t cy;
- int negflg;
-
- /* Product H. ________________ ________________
- * |_____U1 x V1____||____U0 x V0_____|
- * Put result in upper part of PROD and pass low part of TSPACE
- * as new TSPACE.
- */
- MPN_MUL_N_RECURSE(prodp + size, up + hsize, vp + hsize, hsize, tspace);
-
- /* Product M. ________________
- * |_(U1-U0)(V0-V1)_|
- */
- if( mpihelp_cmp(up + hsize, up, hsize) >= 0 ) {
- mpihelp_sub_n(prodp, up + hsize, up, hsize);
- negflg = 0;
- }
- else {
- mpihelp_sub_n(prodp, up, up + hsize, hsize);
- negflg = 1;
- }
- if( mpihelp_cmp(vp + hsize, vp, hsize) >= 0 ) {
- mpihelp_sub_n(prodp + hsize, vp + hsize, vp, hsize);
- negflg ^= 1;
- }
- else {
- mpihelp_sub_n(prodp + hsize, vp, vp + hsize, hsize);
- /* No change of NEGFLG. */
- }
- /* Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE.
- */
- MPN_MUL_N_RECURSE(tspace, prodp, prodp + hsize, hsize, tspace + size);
-
- /* Add/copy product H. */
- MPN_COPY (prodp + hsize, prodp + size, hsize);
- cy = mpihelp_add_n( prodp + size, prodp + size,
- prodp + size + hsize, hsize);
-
- /* Add product M (if NEGFLG M is a negative number) */
- if(negflg)
- cy -= mpihelp_sub_n(prodp + hsize, prodp + hsize, tspace, size);
- else
- cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size);
-
- /* Product L. ________________ ________________
- * |________________||____U0 x V0_____|
- * Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE.
- */
- MPN_MUL_N_RECURSE(tspace, up, vp, hsize, tspace + size);
-
- /* Add/copy Product L (twice) */
-
- cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size);
- if( cy )
- mpihelp_add_1(prodp + hsize + size, prodp + hsize + size, hsize, cy);
-
- MPN_COPY(prodp, tspace, hsize);
- cy = mpihelp_add_n(prodp + hsize, prodp + hsize, tspace + hsize, hsize);
- if( cy )
- mpihelp_add_1(prodp + size, prodp + size, size, 1);
- }
-}
-
-
-void
-mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size )
-{
- mpi_size_t i;
- mpi_limb_t cy_limb;
- mpi_limb_t v_limb;
-
- /* Multiply by the first limb in V separately, as the result can be
- * stored (not added) to PROD. We also avoid a loop for zeroing. */
- v_limb = up[0];
- if( v_limb <= 1 ) {
- if( v_limb == 1 )
- MPN_COPY( prodp, up, size );
- else
- MPN_ZERO(prodp, size);
- cy_limb = 0;
- }
- else
- cy_limb = mpihelp_mul_1( prodp, up, size, v_limb );
-
- prodp[size] = cy_limb;
- prodp++;
-
- /* For each iteration in the outer loop, multiply one limb from
- * U with one limb from V, and add it to PROD. */
- for( i=1; i < size; i++) {
- v_limb = up[i];
- if( v_limb <= 1 ) {
- cy_limb = 0;
- if( v_limb == 1 )
- cy_limb = mpihelp_add_n(prodp, prodp, up, size);
- }
- else
- cy_limb = mpihelp_addmul_1(prodp, up, size, v_limb);
-
- prodp[size] = cy_limb;
- prodp++;
- }
-}
-
-
-void
-mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size, mpi_ptr_t tspace)
-{
- if( size & 1 ) {
- /* The size is odd, and the code below doesn't handle that.
- * Multiply the least significant (size - 1) limbs with a recursive
- * call, and handle the most significant limb of S1 and S2
- * separately.
- * A slightly faster way to do this would be to make the Karatsuba
- * code below behave as if the size were even, and let it check for
- * odd size in the end. I.e., in essence move this code to the end.
- * Doing so would save us a recursive call, and potentially make the
- * stack grow a lot less.
- */
- mpi_size_t esize = size - 1; /* even size */
- mpi_limb_t cy_limb;
-
- MPN_SQR_N_RECURSE( prodp, up, esize, tspace );
- cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, up[esize] );
- prodp[esize + esize] = cy_limb;
- cy_limb = mpihelp_addmul_1( prodp + esize, up, size, up[esize] );
-
- prodp[esize + size] = cy_limb;
- }
- else {
- mpi_size_t hsize = size >> 1;
- mpi_limb_t cy;
-
- /* Product H. ________________ ________________
- * |_____U1 x U1____||____U0 x U0_____|
- * Put result in upper part of PROD and pass low part of TSPACE
- * as new TSPACE.
- */
- MPN_SQR_N_RECURSE(prodp + size, up + hsize, hsize, tspace);
-
- /* Product M. ________________
- * |_(U1-U0)(U0-U1)_|
- */
- if( mpihelp_cmp( up + hsize, up, hsize) >= 0 )
- mpihelp_sub_n( prodp, up + hsize, up, hsize);
- else
- mpihelp_sub_n (prodp, up, up + hsize, hsize);
-
- /* Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE. */
- MPN_SQR_N_RECURSE(tspace, prodp, hsize, tspace + size);
-
- /* Add/copy product H */
- MPN_COPY(prodp + hsize, prodp + size, hsize);
- cy = mpihelp_add_n(prodp + size, prodp + size,
- prodp + size + hsize, hsize);
-
- /* Add product M (if NEGFLG M is a negative number). */
- cy -= mpihelp_sub_n (prodp + hsize, prodp + hsize, tspace, size);
-
- /* Product L. ________________ ________________
- * |________________||____U0 x U0_____|
- * Read temporary operands from low part of PROD.
- * Put result in low part of TSPACE using upper part of TSPACE
- * as new TSPACE. */
- MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size);
-
- /* Add/copy Product L (twice). */
- cy += mpihelp_add_n (prodp + hsize, prodp + hsize, tspace, size);
- if( cy )
- mpihelp_add_1(prodp + hsize + size, prodp + hsize + size,
- hsize, cy);
-
- MPN_COPY(prodp, tspace, hsize);
- cy = mpihelp_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
- if( cy )
- mpihelp_add_1 (prodp + size, prodp + size, size, 1);
- }
-}
-
-
-/* This should be made into an inline function in gmp.h. */
-void
-mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size)
-{
- int secure;
-
- if( up == vp ) {
- if( size < KARATSUBA_THRESHOLD )
- mpih_sqr_n_basecase( prodp, up, size );
- else {
- mpi_ptr_t tspace;
- secure = m_is_secure( up );
- tspace = mpi_alloc_limb_space( 2 * size, secure );
- mpih_sqr_n( prodp, up, size, tspace );
- mpi_free_limb_space( tspace );
- }
- }
- else {
- if( size < KARATSUBA_THRESHOLD )
- mul_n_basecase( prodp, up, vp, size );
- else {
- mpi_ptr_t tspace;
- secure = m_is_secure( up ) || m_is_secure( vp );
- tspace = mpi_alloc_limb_space( 2 * size, secure );
- mul_n (prodp, up, vp, size, tspace);
- mpi_free_limb_space( tspace );
- }
- }
-}
-
-
-
-void
-mpihelp_mul_karatsuba_case( mpi_ptr_t prodp,
- mpi_ptr_t up, mpi_size_t usize,
- mpi_ptr_t vp, mpi_size_t vsize,
- struct karatsuba_ctx *ctx )
-{
- mpi_limb_t cy;
-
- if( !ctx->tspace || ctx->tspace_size < vsize ) {
- if( ctx->tspace )
- mpi_free_limb_space( ctx->tspace );
- ctx->tspace = mpi_alloc_limb_space( 2 * vsize,
- m_is_secure( up ) || m_is_secure( vp ) );
- ctx->tspace_size = vsize;
- }
-
- MPN_MUL_N_RECURSE( prodp, up, vp, vsize, ctx->tspace );
-
- prodp += vsize;
- up += vsize;
- usize -= vsize;
- if( usize >= vsize ) {
- if( !ctx->tp || ctx->tp_size < vsize ) {
- if( ctx->tp )
- mpi_free_limb_space( ctx->tp );
- ctx->tp = mpi_alloc_limb_space( 2 * vsize, m_is_secure( up )
- || m_is_secure( vp ) );
- ctx->tp_size = vsize;
- }
-
- do {
- MPN_MUL_N_RECURSE( ctx->tp, up, vp, vsize, ctx->tspace );
- cy = mpihelp_add_n( prodp, prodp, ctx->tp, vsize );
- mpihelp_add_1( prodp + vsize, ctx->tp + vsize, vsize, cy );
- prodp += vsize;
- up += vsize;
- usize -= vsize;
- } while( usize >= vsize );
- }
-
- if( usize ) {
- if( usize < KARATSUBA_THRESHOLD ) {
- mpihelp_mul( ctx->tspace, vp, vsize, up, usize );
- }
- else {
- if( !ctx->next ) {
- ctx->next = m_alloc_clear( sizeof *ctx );
- }
- mpihelp_mul_karatsuba_case( ctx->tspace,
- vp, vsize,
- up, usize,
- ctx->next );
- }
-
- cy = mpihelp_add_n( prodp, prodp, ctx->tspace, vsize);
- mpihelp_add_1( prodp + vsize, ctx->tspace + vsize, usize, cy );
- }
-}
-
-
-void
-mpihelp_release_karatsuba_ctx( struct karatsuba_ctx *ctx )
-{
- struct karatsuba_ctx *ctx2;
-
- if( ctx->tp )
- mpi_free_limb_space( ctx->tp );
- if( ctx->tspace )
- mpi_free_limb_space( ctx->tspace );
- for( ctx=ctx->next; ctx; ctx = ctx2 ) {
- ctx2 = ctx->next;
- if( ctx->tp )
- mpi_free_limb_space( ctx->tp );
- if( ctx->tspace )
- mpi_free_limb_space( ctx->tspace );
- m_free( ctx );
- }
-}
-
-/* Multiply the natural numbers u (pointed to by UP, with USIZE limbs)
- * and v (pointed to by VP, with VSIZE limbs), and store the result at
- * PRODP. USIZE + VSIZE limbs are always stored, but if the input
- * operands are normalized. Return the most significant limb of the
- * result.
- *
- * NOTE: The space pointed to by PRODP is overwritten before finished
- * with U and V, so overlap is an error.
- *
- * Argument constraints:
- * 1. USIZE >= VSIZE.
- * 2. PRODP != UP and PRODP != VP, i.e. the destination
- * must be distinct from the multiplier and the multiplicand.
- */
-
-mpi_limb_t
-mpihelp_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize,
- mpi_ptr_t vp, mpi_size_t vsize)
-{
- mpi_ptr_t prod_endp = prodp + usize + vsize - 1;
- mpi_limb_t cy;
- struct karatsuba_ctx ctx;
-
- if( vsize < KARATSUBA_THRESHOLD ) {
- mpi_size_t i;
- mpi_limb_t v_limb;
-
- if( !vsize )
- return 0;
-
- /* Multiply by the first limb in V separately, as the result can be
- * stored (not added) to PROD. We also avoid a loop for zeroing. */
- v_limb = vp[0];
- if( v_limb <= 1 ) {
- if( v_limb == 1 )
- MPN_COPY( prodp, up, usize );
- else
- MPN_ZERO( prodp, usize );
- cy = 0;
- }
- else
- cy = mpihelp_mul_1( prodp, up, usize, v_limb );
-
- prodp[usize] = cy;
- prodp++;
-
- /* For each iteration in the outer loop, multiply one limb from
- * U with one limb from V, and add it to PROD. */
- for( i = 1; i < vsize; i++ ) {
- v_limb = vp[i];
- if( v_limb <= 1 ) {
- cy = 0;
- if( v_limb == 1 )
- cy = mpihelp_add_n(prodp, prodp, up, usize);
- }
- else
- cy = mpihelp_addmul_1(prodp, up, usize, v_limb);
-
- prodp[usize] = cy;
- prodp++;
- }
-
- return cy;
- }
-
- memset( &ctx, 0, sizeof ctx );
- mpihelp_mul_karatsuba_case( prodp, up, usize, vp, vsize, &ctx );
- mpihelp_release_karatsuba_ctx( &ctx );
- return *prod_endp;
-}
-
-
diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c
deleted file mode 100644
index 04e280caa..000000000
--- a/mpi/mpiutil.c
+++ /dev/null
@@ -1,471 +0,0 @@
-/* mpiutil.ac - Utility functions for MPI
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "mpi.h"
-#include "mpi-internal.h"
-#include "memory.h"
-#include "util.h"
-
-
-#ifdef M_DEBUG
- #undef mpi_alloc
- #undef mpi_alloc_secure
- #undef mpi_free
-#endif
-
-/****************
- * Note: It was a bad idea to use the number of limbs to allocate
- * because on a alpha the limbs are large but we normally need
- * integers of n bits - So we should chnage this to bits (or bytes).
- *
- * But mpi_alloc is used in a lot of places :-)
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_alloc( unsigned nlimbs, const char *info )
-#else
-mpi_alloc( unsigned nlimbs )
-#endif
-{
- MPI a;
-
- if( DBG_MEMORY )
- log_debug("mpi_alloc(%u)\n", nlimbs*BITS_PER_MPI_LIMB );
- #ifdef M_DEBUG
- a = m_debug_alloc( sizeof *a, info );
- a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 0, info ) : NULL;
- #else
- a = m_alloc( sizeof *a );
- a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 0 ) : NULL;
- #endif
- a->alloced = nlimbs;
- a->nlimbs = 0;
- a->sign = 0;
- a->flags = 0;
- a->nbits = 0;
- return a;
-}
-
-void
-mpi_m_check( MPI a )
-{
- m_check(a);
- m_check(a->d);
-}
-
-MPI
-#ifdef M_DEBUG
-mpi_debug_alloc_secure( unsigned nlimbs, const char *info )
-#else
-mpi_alloc_secure( unsigned nlimbs )
-#endif
-{
- MPI a;
-
- if( DBG_MEMORY )
- log_debug("mpi_alloc_secure(%u)\n", nlimbs*BITS_PER_MPI_LIMB );
- #ifdef M_DEBUG
- a = m_debug_alloc( sizeof *a, info );
- a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 1, info ) : NULL;
- #else
- a = m_alloc( sizeof *a );
- a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 1 ) : NULL;
- #endif
- a->alloced = nlimbs;
- a->flags = 1;
- a->nlimbs = 0;
- a->sign = 0;
- a->nbits = 0;
- return a;
-}
-
-
-#if 0
-static void *unused_limbs_5;
-static void *unused_limbs_32;
-static void *unused_limbs_64;
-#endif
-
-mpi_ptr_t
-#ifdef M_DEBUG
-mpi_debug_alloc_limb_space( unsigned nlimbs, int secure, const char *info )
-#else
-mpi_alloc_limb_space( unsigned nlimbs, int secure )
-#endif
-{
- size_t len = nlimbs * sizeof(mpi_limb_t);
- mpi_ptr_t p;
-
- if( DBG_MEMORY )
- log_debug("mpi_alloc_limb_space(%u)\n", (unsigned)len*8 );
- #if 0
- if( !secure ) {
- if( nlimbs == 5 && unused_limbs_5 ) { /* DSA 160 bits */
- p = unused_limbs_5;
- unused_limbs_5 = *p;
- return p;
- }
- else if( nlimbs == 32 && unused_limbs_32 ) { /* DSA 1024 bits */
- p = unused_limbs_32;
- unused_limbs_32 = *p;
- return p;
- }
- else if( nlimbs == 64 && unused_limbs_64 ) { /* DSA 2*1024 bits */
- p = unused_limbs_64;
- unused_limbs_64 = *p;
- return p;
- }
- }
- #endif
-
- #ifdef M_DEBUG
- p = secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info );
- #else
- p = secure? m_alloc_secure( len ):m_alloc( len );
- #endif
-
- return p;
-}
-
-void
-#ifdef M_DEBUG
-mpi_debug_free_limb_space( mpi_ptr_t a, const char *info )
-#else
-mpi_free_limb_space( mpi_ptr_t a )
-#endif
-{
- if( !a )
- return;
- if( DBG_MEMORY )
- log_debug("mpi_free_limb_space of size %lu\n", (ulong)m_size(a)*8 );
-
- #if 0
- if( !m_is_secure(a) ) {
- size_t nlimbs = m_size(a) / 4 ;
- void *p = a;
-
- if( nlimbs == 5 ) { /* DSA 160 bits */
- *a = unused_limbs_5;
- unused_limbs_5 = a;
- return;
- }
- else if( nlimbs == 32 ) { /* DSA 1024 bits */
- *a = unused_limbs_32;
- unused_limbs_32 = a;
- return;
- }
- else if( nlimbs == 64 ) { /* DSA 2*1024 bits */
- *a = unused_limbs_64;
- unused_limbs_64 = a;
- return;
- }
- }
- #endif
-
-
- m_free(a);
-}
-
-
-void
-mpi_assign_limb_space( MPI a, mpi_ptr_t ap, unsigned nlimbs )
-{
- mpi_free_limb_space(a->d);
- a->d = ap;
- a->alloced = nlimbs;
-}
-
-
-
-/****************
- * Resize the array of A to NLIMBS. the additional space is cleared
- * (set to 0) [done by m_realloc()]
- */
-void
-#ifdef M_DEBUG
-mpi_debug_resize( MPI a, unsigned nlimbs, const char *info )
-#else
-mpi_resize( MPI a, unsigned nlimbs )
-#endif
-{
- if( nlimbs <= a->alloced )
- return; /* no need to do it */
- /* Note: a->secure is not used - instead the realloc functions
- * take care of it. Maybe we should drop a->secure completely
- * and rely on a mpi_is_secure function, which would be
- * a wrapper around m_is_secure
- */
- #ifdef M_DEBUG
- if( a->d )
- a->d = m_debug_realloc(a->d, nlimbs * sizeof(mpi_limb_t), info );
- else
- a->d = m_debug_alloc_clear( nlimbs * sizeof(mpi_limb_t), info );
- #else
- if( a->d )
- a->d = m_realloc(a->d, nlimbs * sizeof(mpi_limb_t) );
- else
- a->d = m_alloc_clear( nlimbs * sizeof(mpi_limb_t) );
- #endif
- a->alloced = nlimbs;
-}
-
-void
-mpi_clear( MPI a )
-{
- a->nlimbs = 0;
- a->nbits = 0;
- a->flags = 0;
-}
-
-
-void
-#ifdef M_DEBUG
-mpi_debug_free( MPI a, const char *info )
-#else
-mpi_free( MPI a )
-#endif
-{
- if( !a )
- return;
- if( DBG_MEMORY )
- log_debug("mpi_free\n" );
- if( a->flags & 4 )
- m_free( a->d );
- else {
- #ifdef M_DEBUG
- mpi_debug_free_limb_space(a->d, info);
- #else
- mpi_free_limb_space(a->d);
- #endif
- }
- if( a->flags & ~7 )
- log_bug("invalid flag value in mpi\n");
- m_free(a);
-}
-
-
-void
-mpi_set_secure( MPI a )
-{
- mpi_ptr_t ap, bp;
-
- if( (a->flags & 1) )
- return;
- a->flags |= 1;
- ap = a->d;
- if( !a->nlimbs ) {
- assert(!ap);
- return;
- }
- #ifdef M_DEBUG
- bp = mpi_debug_alloc_limb_space( a->nlimbs, 1, "set_secure" );
- #else
- bp = mpi_alloc_limb_space( a->nlimbs, 1 );
- #endif
- MPN_COPY( bp, ap, a->nlimbs );
- a->d = bp;
- #ifdef M_DEBUG
- mpi_debug_free_limb_space(ap, "set_secure");
- #else
- mpi_free_limb_space(ap);
- #endif
-}
-
-
-MPI
-mpi_set_opaque( MPI a, void *p, int len )
-{
- if( !a ) {
- #ifdef M_DEBUG
- a = mpi_debug_alloc(0,"alloc_opaque");
- #else
- a = mpi_alloc(0);
- #endif
- }
-
- if( a->flags & 4 )
- m_free( a->d );
- else {
- #ifdef M_DEBUG
- mpi_debug_free_limb_space(a->d, "alloc_opaque");
- #else
- mpi_free_limb_space(a->d);
- #endif
- }
-
- a->d = p;
- a->alloced = 0;
- a->nlimbs = 0;
- a->nbits = len;
- a->flags = 4;
- return a;
-}
-
-
-void *
-mpi_get_opaque( MPI a, int *len )
-{
- if( !(a->flags & 4) )
- log_bug("mpi_get_opaque on normal mpi\n");
- if( len )
- *len = a->nbits;
- return a->d;
-}
-
-
-/****************
- * Note: This copy function should not interpret the MPI
- * but copy it transparently.
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_copy( MPI a, const char *info )
-#else
-mpi_copy( MPI a )
-#endif
-{
- int i;
- MPI b;
-
- if( a && (a->flags & 4) ) {
- void *p = m_is_secure(a->d)? m_alloc_secure( a->nbits )
- : m_alloc( a->nbits );
- memcpy( p, a->d, a->nbits );
- b = mpi_set_opaque( NULL, p, a->nbits );
- }
- else if( a ) {
- #ifdef M_DEBUG
- b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info )
- : mpi_debug_alloc( a->nlimbs, info );
- #else
- b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs )
- : mpi_alloc( a->nlimbs );
- #endif
- b->nlimbs = a->nlimbs;
- b->sign = a->sign;
- b->flags = a->flags;
- b->nbits = a->nbits;
- for(i=0; i < b->nlimbs; i++ )
- b->d[i] = a->d[i];
- }
- else
- b = NULL;
- return b;
-}
-
-
-/****************
- * This function allocates an MPI which is optimized to hold
- * a value as large as the one given in the arhgument and allocates it
- * with the same flags as A.
- */
-MPI
-#ifdef M_DEBUG
-mpi_debug_alloc_like( MPI a, const char *info )
-#else
-mpi_alloc_like( MPI a )
-#endif
-{
- MPI b;
-
- if( a && (a->flags & 4) ) {
- void *p = m_is_secure(a->d)? m_alloc_secure( a->nbits )
- : m_alloc( a->nbits );
- memcpy( p, a->d, a->nbits );
- b = mpi_set_opaque( NULL, p, a->nbits );
- }
- else if( a ) {
- #ifdef M_DEBUG
- b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info )
- : mpi_debug_alloc( a->nlimbs, info );
- #else
- b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs )
- : mpi_alloc( a->nlimbs );
- #endif
- b->nlimbs = 0;
- b->sign = 0;
- b->flags = a->flags;
- b->nbits = 0;
- }
- else
- b = NULL;
- return b;
-}
-
-
-void
-mpi_set( MPI w, MPI u)
-{
- mpi_ptr_t wp, up;
- mpi_size_t usize = u->nlimbs;
- int usign = u->sign;
-
- RESIZE_IF_NEEDED(w, usize);
- wp = w->d;
- up = u->d;
- MPN_COPY( wp, up, usize );
- w->nlimbs = usize;
- w->nbits = u->nbits;
- w->flags = u->flags;
- w->sign = usign;
-}
-
-
-void
-mpi_set_ui( MPI w, unsigned long u)
-{
- RESIZE_IF_NEEDED(w, 1);
- w->d[0] = u;
- w->nlimbs = u? 1:0;
- w->sign = 0;
- w->nbits = 0;
- w->flags = 0;
-}
-
-
-MPI
-mpi_alloc_set_ui( unsigned long u)
-{
- #ifdef M_DEBUG
- MPI w = mpi_debug_alloc(1,"alloc_set_ui");
- #else
- MPI w = mpi_alloc(1);
- #endif
- w->d[0] = u;
- w->nlimbs = u? 1:0;
- w->sign = 0;
- return w;
-}
-
-
-void
-mpi_swap( MPI a, MPI b)
-{
- struct gcry_mpi tmp;
-
- tmp = *a; *a = *b; *b = tmp;
-}
-
diff --git a/mpi/pa7100/distfiles b/mpi/pa7100/distfiles
deleted file mode 100644
index fece94310..000000000
--- a/mpi/pa7100/distfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-mpih-lshift.S
-mpih-rshift.S
-
diff --git a/mpi/pa7100/mpih-lshift.S b/mpi/pa7100/mpih-lshift.S
deleted file mode 100644
index 76368fe78..000000000
--- a/mpi/pa7100/mpih-lshift.S
+++ /dev/null
@@ -1,96 +0,0 @@
-/* hppa lshift
- * optimized for the PA7100, where it runs at 3.25 cycles/limb
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (gr26)
- * mpi_ptr_t up, (gr25)
- * mpi_size_t usize, (gr24)
- * unsigned cnt) (gr23)
- */
-
- .code
- .export mpihelp_lshift
- .label mpihelp_lshift
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- sh2add %r24,%r25,%r25
- sh2add %r24,%r26,%r26
- ldws,mb -4(0,%r25),%r22
- subi 32,%r23,%r1
- mtsar %r1
- addib,= -1,%r24,L$0004
- vshd %r0,%r22,%r28 ; compute carry out limb
- ldws,mb -4(0,%r25),%r29
- addib,<= -5,%r24,L$rest
- vshd %r22,%r29,%r20
-
- .label L$loop
- ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- vshd %r22,%r29,%r20
- ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- addib,> -4,%r24,L$loop
- vshd %r22,%r29,%r20
-
- .label L$rest
- addib,= 4,%r24,L$end1
- nop
- .label L$eloop
- ldws,mb -4(0,%r25),%r22
- stws,mb %r20,-4(0,%r26)
- addib,<= -1,%r24,L$end2
- vshd %r29,%r22,%r20
- ldws,mb -4(0,%r25),%r29
- stws,mb %r20,-4(0,%r26)
- addib,> -1,%r24,L$eloop
- vshd %r22,%r29,%r20
-
- .label L$end1
- stws,mb %r20,-4(0,%r26)
- vshd %r29,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
- .label L$end2
- stws,mb %r20,-4(0,%r26)
- .label L$0004
- vshd %r22,%r0,%r20
- bv 0(%r2)
- stw %r20,-4(0,%r26)
-
- .exit
- .procend
-
-
-
diff --git a/mpi/pa7100/mpih-rshift.S b/mpi/pa7100/mpih-rshift.S
deleted file mode 100644
index 3bada7ce9..000000000
--- a/mpi/pa7100/mpih-rshift.S
+++ /dev/null
@@ -1,92 +0,0 @@
-/* hppa rshift
- * optimized for the PA7100, where it runs at 3.25 cycles/limb
- *
- * Copyright (C) 1992, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (gr26)
- * mpi_ptr_t up, (gr25)
- * mpi_size_t usize, (gr24)
- * unsigned cnt) (gr23)
- */
-
- .code
- .export mpihelp_rshift
- .label mpihelp_rshift
- .proc
- .callinfo frame=64,no_calls
- .entry
-
- ldws,ma 4(0,%r25),%r22
- mtsar %r23
- addib,= -1,%r24,L$r004
- vshd %r22,%r0,%r28 ; compute carry out limb
- ldws,ma 4(0,%r25),%r29
- addib,<= -5,%r24,L$rrest
- vshd %r29,%r22,%r20
-
- .label L$roop
- ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- vshd %r29,%r22,%r20
- ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- addib,> -4,%r24,L$roop
- vshd %r29,%r22,%r20
-
- .label L$rrest
- addib,= 4,%r24,L$rend1
- nop
- .label L$eroop
- ldws,ma 4(0,%r25),%r22
- stws,ma %r20,4(0,%r26)
- addib,<= -1,%r24,L$rend2
- vshd %r22,%r29,%r20
- ldws,ma 4(0,%r25),%r29
- stws,ma %r20,4(0,%r26)
- addib,> -1,%r24,L$eroop
- vshd %r29,%r22,%r20
-
- .label L$rend1
- stws,ma %r20,4(0,%r26)
- vshd %r0,%r29,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
- .label L$rend2
- stws,ma %r20,4(0,%r26)
- .label L$r004
- vshd %r0,%r22,%r20
- bv 0(%r2)
- stw %r20,0(0,%r26)
-
- .exit
- .procend
-
-
diff --git a/mpi/power/distfiles b/mpi/power/distfiles
deleted file mode 100644
index e664c8db6..000000000
--- a/mpi/power/distfiles
+++ /dev/null
@@ -1,7 +0,0 @@
-mpih-add1.S
-mpih-lshift.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-rshift.S
-mpih-sub1.S
diff --git a/mpi/power/mpih-add1.S b/mpi/power/mpih-add1.S
deleted file mode 100644
index 7313ac618..000000000
--- a/mpi/power/mpih-add1.S
+++ /dev/null
@@ -1,86 +0,0 @@
-/* IBM POWER add_n -- Add two limb vectors of equal, non-zero length.
- *
- * Copyright (C) 1992, 1994, 1996, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-/*
-# INPUT PARAMETERS
-# res_ptr r3
-# s1_ptr r4
-# s2_ptr r5
-# size r6
- */
-
- .toc
- .extern mpihelp_add_n[DS]
- .extern .mpihelp_add_n
-.csect [PR]
- .align 2
- .globl mpihelp_add_n
- .globl .mpihelp_add_n
- .csect mpihelp_add_n[DS]
-mpihelp_add_n:
- .long .mpihelp_add_n, TOC[tc0], 0
- .csect [PR]
-.mpihelp_add_n:
- andil. 10,6,1 # odd or even number of limbs?
- l 8,0(4) # load least significant s1 limb
- l 0,0(5) # load least significant s2 limb
- cal 3,-4(3) # offset res_ptr, it's updated before it's used
- sri 10,6,1 # count for unrolled loop
- a 7,0,8 # add least significant limbs, set cy
- mtctr 10 # copy count into CTR
- beq 0,Leven # branch if even # of limbs (# of limbs >= 2)
-
-# We have an odd # of limbs. Add the first limbs separately.
- cmpi 1,10,0 # is count for unrolled loop zero?
- bne 1,L1 # branch if not
- st 7,4(3)
- aze 3,10 # use the fact that r10 is zero...
- br # return
-
-# We added least significant limbs. Now reload the next limbs to enter loop.
-L1: lu 8,4(4) # load s1 limb and update s1_ptr
- lu 0,4(5) # load s2 limb and update s2_ptr
- stu 7,4(3)
- ae 7,0,8 # add limbs, set cy
-Leven: lu 9,4(4) # load s1 limb and update s1_ptr
- lu 10,4(5) # load s2 limb and update s2_ptr
- bdz Lend # If done, skip loop
-
-Loop: lu 8,4(4) # load s1 limb and update s1_ptr
- lu 0,4(5) # load s2 limb and update s2_ptr
- ae 11,9,10 # add previous limbs with cy, set cy
- stu 7,4(3) #
- lu 9,4(4) # load s1 limb and update s1_ptr
- lu 10,4(5) # load s2 limb and update s2_ptr
- ae 7,0,8 # add previous limbs with cy, set cy
- stu 11,4(3) #
- bdn Loop # decrement CTR and loop back
-
-Lend: ae 11,9,10 # add limbs with cy, set cy
- st 7,4(3) #
- st 11,8(3) #
- lil 3,0 # load cy into ...
- aze 3,3 # ... return value register
- br
-
diff --git a/mpi/power/mpih-lshift.S b/mpi/power/mpih-lshift.S
deleted file mode 100644
index 20cf45353..000000000
--- a/mpi/power/mpih-lshift.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* IBM POWER lshift
- *
- * Copyright (C) 1992, 1994, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-/*
-# INPUT PARAMETERS
-# res_ptr r3
-# s_ptr r4
-# size r5
-# cnt r6
- */
-
- .toc
- .extern mpihelp_lshift[DS]
- .extern .mpihelp_lshift
-.csect [PR]
- .align 2
- .globl mpihelp_lshift
- .globl .mpihelp_lshift
- .csect mpihelp_lshift[DS]
-mpihelp_lshift:
- .long .mpihelp_lshift, TOC[tc0], 0
- .csect [PR]
-.mpihelp_lshift:
- sli 0,5,2
- cax 9,3,0
- cax 4,4,0
- sfi 8,6,32
- mtctr 5 # put limb count in CTR loop register
- lu 0,-4(4) # read most significant limb
- sre 3,0,8 # compute carry out limb, and init MQ register
- bdz Lend2 # if just one limb, skip loop
- lu 0,-4(4) # read 2:nd most significant limb
- sreq 7,0,8 # compute most significant limb of result
- bdz Lend # if just two limb, skip loop
-Loop: lu 0,-4(4) # load next lower limb
- stu 7,-4(9) # store previous result during read latency
- sreq 7,0,8 # compute result limb
- bdn Loop # loop back until CTR is zero
-Lend: stu 7,-4(9) # store 2:nd least significant limb
-Lend2: sle 7,0,6 # compute least significant limb
- st 7,-4(9) # store it
- br
-
diff --git a/mpi/power/mpih-mul1.S b/mpi/power/mpih-mul1.S
deleted file mode 100644
index 03fff4f98..000000000
--- a/mpi/power/mpih-mul1.S
+++ /dev/null
@@ -1,115 +0,0 @@
-/* IBM POWER mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-/*
-# INPUT PARAMETERS
-# res_ptr r3
-# s1_ptr r4
-# size r5
-# s2_limb r6
-
-# The RS/6000 has no unsigned 32x32->64 bit multiplication instruction. To
-# obtain that operation, we have to use the 32x32->64 signed multiplication
-# instruction, and add the appropriate compensation to the high limb of the
-# result. We add the multiplicand if the multiplier has its most significant
-# bit set, and we add the multiplier if the multiplicand has its most
-# significant bit set. We need to preserve the carry flag between each
-# iteration, so we have to compute the compensation carefully (the natural,
-# srai+and doesn't work). Since the POWER architecture has a branch unit
-# we can branch in zero cycles, so that's how we perform the additions.
- */
-
- .toc
- .csect .mpihelp_mul_1[PR]
- .align 2
- .globl mpihelp_mul_1
- .globl .mpihelp_mul_1
- .csect mpihelp_mul_1[DS]
-mpihelp_mul_1:
- .long .mpihelp_mul_1[PR], TOC[tc0], 0
- .csect .mpihelp_mul_1[PR]
-.mpihelp_mul_1:
-
- cal 3,-4(3)
- l 0,0(4)
- cmpi 0,6,0
- mtctr 5
- mul 9,0,6
- srai 7,0,31
- and 7,7,6
- mfmq 8
- ai 0,0,0 # reset carry
- cax 9,9,7
- blt Lneg
-Lpos: bdz Lend
-Lploop: lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 10,0,6
- mfmq 0
- ae 8,0,9
- bge Lp0
- cax 10,10,6 # adjust high limb for negative limb from s1
-Lp0: bdz Lend0
- lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 9,0,6
- mfmq 0
- ae 8,0,10
- bge Lp1
- cax 9,9,6 # adjust high limb for negative limb from s1
-Lp1: bdn Lploop
- b Lend
-
-Lneg: cax 9,9,0
- bdz Lend
-Lnloop: lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 10,0,6
- cax 10,10,0 # adjust high limb for negative s2_limb
- mfmq 0
- ae 8,0,9
- bge Ln0
- cax 10,10,6 # adjust high limb for negative limb from s1
-Ln0: bdz Lend0
- lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 9,0,6
- cax 9,9,0 # adjust high limb for negative s2_limb
- mfmq 0
- ae 8,0,10
- bge Ln1
- cax 9,9,6 # adjust high limb for negative limb from s1
-Ln1: bdn Lnloop
- b Lend
-
-Lend0: cal 9,0(10)
-Lend: st 8,4(3)
- aze 3,9
- br
-
diff --git a/mpi/power/mpih-mul2.S b/mpi/power/mpih-mul2.S
deleted file mode 100644
index 3d7fc153c..000000000
--- a/mpi/power/mpih-mul2.S
+++ /dev/null
@@ -1,130 +0,0 @@
-/* IBM POWER addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-
-/*
-# INPUT PARAMETERS
-# res_ptr r3
-# s1_ptr r4
-# size r5
-# s2_limb r6
-
-# The RS/6000 has no unsigned 32x32->64 bit multiplication instruction. To
-# obtain that operation, we have to use the 32x32->64 signed multiplication
-# instruction, and add the appropriate compensation to the high limb of the
-# result. We add the multiplicand if the multiplier has its most significant
-# bit set, and we add the multiplier if the multiplicand has its most
-# significant bit set. We need to preserve the carry flag between each
-# iteration, so we have to compute the compensation carefully (the natural,
-# srai+and doesn't work). Since the POWER architecture has a branch unit
-# we can branch in zero cycles, so that's how we perform the additions.
- */
-
- .toc
- .csect .mpihelp_addmul_1[PR]
- .align 2
- .globl mpihelp_addmul_1
- .globl .mpihelp_addmul_1
- .csect mpihelp_addmul_1[DS]
-mpihelp_addmul_1:
- .long .mpihelp_addmul_1[PR], TOC[tc0], 0
- .csect .mpihelp_addmul_1[PR]
-.mpihelp_addmul_1:
-
- cal 3,-4(3)
- l 0,0(4)
- cmpi 0,6,0
- mtctr 5
- mul 9,0,6
- srai 7,0,31
- and 7,7,6
- mfmq 8
- cax 9,9,7
- l 7,4(3)
- a 8,8,7 # add res_limb
- blt Lneg
-Lpos: bdz Lend
-
-Lploop: lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 10,0,6
- mfmq 0
- ae 8,0,9 # low limb + old_cy_limb + old cy
- l 7,4(3)
- aze 10,10 # propagate cy to new cy_limb
- a 8,8,7 # add res_limb
- bge Lp0
- cax 10,10,6 # adjust high limb for negative limb from s1
-Lp0: bdz Lend0
- lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 9,0,6
- mfmq 0
- ae 8,0,10
- l 7,4(3)
- aze 9,9
- a 8,8,7
- bge Lp1
- cax 9,9,6 # adjust high limb for negative limb from s1
-Lp1: bdn Lploop
-
- b Lend
-
-Lneg: cax 9,9,0
- bdz Lend
-Lnloop: lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 10,0,6
- mfmq 7
- ae 8,7,9
- l 7,4(3)
- ae 10,10,0 # propagate cy to new cy_limb
- a 8,8,7 # add res_limb
- bge Ln0
- cax 10,10,6 # adjust high limb for negative limb from s1
-Ln0: bdz Lend0
- lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 9,0,6
- mfmq 7
- ae 8,7,10
- l 7,4(3)
- ae 9,9,0 # propagate cy to new cy_limb
- a 8,8,7 # add res_limb
- bge Ln1
- cax 9,9,6 # adjust high limb for negative limb from s1
-Ln1: bdn Lnloop
- b Lend
-
-Lend0: cal 9,0(10)
-Lend: st 8,4(3)
- aze 3,9
- br
-
diff --git a/mpi/power/mpih-mul3.S b/mpi/power/mpih-mul3.S
deleted file mode 100644
index f94018ca9..000000000
--- a/mpi/power/mpih-mul3.S
+++ /dev/null
@@ -1,135 +0,0 @@
-/* IBM POWER submul_1 -- Multiply a limb vector with a limb and subtract
- * the result from a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*
-
-# INPUT PARAMETERS
-# res_ptr r3
-# s1_ptr r4
-# size r5
-# s2_limb r6
-
-# The RS/6000 has no unsigned 32x32->64 bit multiplication instruction. To
-# obtain that operation, we have to use the 32x32->64 signed multiplication
-# instruction, and add the appropriate compensation to the high limb of the
-# result. We add the multiplicand if the multiplier has its most significant
-# bit set, and we add the multiplier if the multiplicand has its most
-# significant bit set. We need to preserve the carry flag between each
-# iteration, so we have to compute the compensation carefully (the natural,
-# srai+and doesn't work). Since the POWER architecture has a branch unit
-# we can branch in zero cycles, so that's how we perform the additions.
- */
-
- .toc
- .csect .mpihelp_submul_1[PR]
- .align 2
- .globl mpihelp_submul_1
- .globl .mpihelp_submul_1
- .csect mpihelp_submul_1[DS]
-mpihelp_submul_1:
- .long .mpihelp_submul_1[PR], TOC[tc0], 0
- .csect .mpihelp_submul_1[PR]
-.mpihelp_submul_1:
-
- cal 3,-4(3)
- l 0,0(4)
- cmpi 0,6,0
- mtctr 5
- mul 9,0,6
- srai 7,0,31
- and 7,7,6
- mfmq 11
- cax 9,9,7
- l 7,4(3)
- sf 8,11,7 # add res_limb
- a 11,8,11 # invert cy (r11 is junk)
- blt Lneg
-Lpos: bdz Lend
-
-Lploop: lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 10,0,6
- mfmq 0
- ae 11,0,9 # low limb + old_cy_limb + old cy
- l 7,4(3)
- aze 10,10 # propagate cy to new cy_limb
- sf 8,11,7 # add res_limb
- a 11,8,11 # invert cy (r11 is junk)
- bge Lp0
- cax 10,10,6 # adjust high limb for negative limb from s1
-Lp0: bdz Lend0
- lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 9,0,6
- mfmq 0
- ae 11,0,10
- l 7,4(3)
- aze 9,9
- sf 8,11,7
- a 11,8,11 # invert cy (r11 is junk)
- bge Lp1
- cax 9,9,6 # adjust high limb for negative limb from s1
-Lp1: bdn Lploop
-
- b Lend
-
-Lneg: cax 9,9,0
- bdz Lend
-Lnloop: lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 10,0,6
- mfmq 7
- ae 11,7,9
- l 7,4(3)
- ae 10,10,0 # propagate cy to new cy_limb
- sf 8,11,7 # add res_limb
- a 11,8,11 # invert cy (r11 is junk)
- bge Ln0
- cax 10,10,6 # adjust high limb for negative limb from s1
-Ln0: bdz Lend0
- lu 0,4(4)
- stu 8,4(3)
- cmpi 0,0,0
- mul 9,0,6
- mfmq 7
- ae 11,7,10
- l 7,4(3)
- ae 9,9,0 # propagate cy to new cy_limb
- sf 8,11,7 # add res_limb
- a 11,8,11 # invert cy (r11 is junk)
- bge Ln1
- cax 9,9,6 # adjust high limb for negative limb from s1
-Ln1: bdn Lnloop
- b Lend
-
-Lend0: cal 9,0(10)
-Lend: st 8,4(3)
- aze 3,9
- br
-
diff --git a/mpi/power/mpih-rshift.S b/mpi/power/mpih-rshift.S
deleted file mode 100644
index 04fb5942d..000000000
--- a/mpi/power/mpih-rshift.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* IBM POWER rshift
- *
- * Copyright (C) 1992, 1994, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/*
-# INPUT PARAMETERS
-# res_ptr r3
-# s_ptr r4
-# size r5
-# cnt r6
-*/
-
- .toc
- .extern mpihelp_rshift[DS]
- .extern .mpihelp_rshift
-.csect [PR]
- .align 2
- .globl mpihelp_rshift
- .globl .mpihelp_rshift
- .csect mpihelp_rshift[DS]
-mpihelp_rshift:
- .long .mpihelp_rshift, TOC[tc0], 0
- .csect [PR]
-.mpihelp_rshift:
- sfi 8,6,32
- mtctr 5 # put limb count in CTR loop register
- l 0,0(4) # read least significant limb
- ai 9,3,-4 # adjust res_ptr since it's offset in the stu:s
- sle 3,0,8 # compute carry limb, and init MQ register
- bdz Lend2 # if just one limb, skip loop
- lu 0,4(4) # read 2:nd least significant limb
- sleq 7,0,8 # compute least significant limb of result
- bdz Lend # if just two limb, skip loop
-Loop: lu 0,4(4) # load next higher limb
- stu 7,4(9) # store previous result during read latency
- sleq 7,0,8 # compute result limb
- bdn Loop # loop back until CTR is zero
-Lend: stu 7,4(9) # store 2:nd most significant limb
-Lend2: sre 7,0,6 # compute most significant limb
- st 7,4(9) # store it
- br
-
-
diff --git a/mpi/power/mpih-sub1.S b/mpi/power/mpih-sub1.S
deleted file mode 100644
index 375a5be88..000000000
--- a/mpi/power/mpih-sub1.S
+++ /dev/null
@@ -1,88 +0,0 @@
-/* IBM POWER sub_n -- Subtract two limb vectors of equal, non-zero length.
- *
- * Copyright (C) 1992, 1994, 1995, 1996, 1999
- * Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-/*
-# INPUT PARAMETERS
-# res_ptr r3
-# s1_ptr r4
-# s2_ptr r5
-# size r6
- */
-
- .toc
- .extern mpihelp_sub_n[DS]
- .extern .mpihelp_sub_n
-.csect [PR]
- .align 2
- .globl mpihelp_sub_n
- .globl .mpihelp_sub_n
- .csect mpihelp_sub_n[DS]
-mpihelp_sub_n:
- .long .mpihelp_sub_n, TOC[tc0], 0
- .csect [PR]
-.mpihelp_sub_n:
- andil. 10,6,1 # odd or even number of limbs?
- l 8,0(4) # load least significant s1 limb
- l 0,0(5) # load least significant s2 limb
- cal 3,-4(3) # offset res_ptr, it's updated before it's used
- sri 10,6,1 # count for unrolled loop
- sf 7,0,8 # subtract least significant limbs, set cy
- mtctr 10 # copy count into CTR
- beq 0,Leven # branch if even # of limbs (# of limbs >= 2)
-
-# We have an odd # of limbs. Add the first limbs separately.
- cmpi 1,10,0 # is count for unrolled loop zero?
- bne 1,L1 # branch if not
- st 7,4(3)
- sfe 3,0,0 # load !cy into ...
- sfi 3,3,0 # ... return value register
- br # return
-
-# We added least significant limbs. Now reload the next limbs to enter loop.
-L1: lu 8,4(4) # load s1 limb and update s1_ptr
- lu 0,4(5) # load s2 limb and update s2_ptr
- stu 7,4(3)
- sfe 7,0,8 # subtract limbs, set cy
-Leven: lu 9,4(4) # load s1 limb and update s1_ptr
- lu 10,4(5) # load s2 limb and update s2_ptr
- bdz Lend # If done, skip loop
-
-Loop: lu 8,4(4) # load s1 limb and update s1_ptr
- lu 0,4(5) # load s2 limb and update s2_ptr
- sfe 11,10,9 # subtract previous limbs with cy, set cy
- stu 7,4(3) #
- lu 9,4(4) # load s1 limb and update s1_ptr
- lu 10,4(5) # load s2 limb and update s2_ptr
- sfe 7,0,8 # subtract previous limbs with cy, set cy
- stu 11,4(3) #
- bdn Loop # decrement CTR and loop back
-
-Lend: sfe 11,10,9 # subtract limbs with cy, set cy
- st 7,4(3) #
- st 11,8(3) #
- sfe 3,0,0 # load !cy into ...
- sfi 3,3,0 # ... return value register
- br
-
diff --git a/mpi/powerpc32/distfiles b/mpi/powerpc32/distfiles
deleted file mode 100644
index af10d795b..000000000
--- a/mpi/powerpc32/distfiles
+++ /dev/null
@@ -1,9 +0,0 @@
-mpih-add1.S
-mpih-sub1.S
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-mpih-lshift.S
-mpih-rshift.S
-syntax.h
-
diff --git a/mpi/powerpc32/mpih-add1.S b/mpi/powerpc32/mpih-add1.S
deleted file mode 100644
index 81c4e20f7..000000000
--- a/mpi/powerpc32/mpih-add1.S
+++ /dev/null
@@ -1,136 +0,0 @@
-/* PowerPC-32 add_n -- Add two limb vectors of equal, non-zero length.
- *
- * Copyright (C) 1992, 1994, 1995, 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_ptr_t s2_ptr, (r5)
- * mpi_size_t size) (r6)
- */
-
- .toc
- .extern mpihelp_add_n[DS]
- .extern .mpihelp_add_n
-.csect [PR]
- .align 2
- .globl mpihelp_add_n
- .globl .mpihelp_add_n
- .csect mpihelp_add_n[DS]
-mpihelp_add_n:
- .long .mpihelp_add_n, TOC[tc0], 0
- .csect [PR]
-.mpihelp_add_n:
- mtctr 6 # copy size into CTR
- lwz 8,0(4) # load least significant s1 limb
- lwz 0,0(5) # load least significant s2 limb
- addi 3,3,-4 # offset res_ptr, it is updated before used
- addc 7,0,8 # add least significant limbs, set cy
- bdz Lend # If done, skip loop
-Loop: lwzu 8,4(4) # load s1 limb and update s1_ptr
- lwzu 0,4(5) # load s2 limb and update s2_ptr
- stwu 7,4(3) # store previous limb in load latency slot
- adde 7,0,8 # add new limbs with cy, set cy
- bdnz Loop # decrement CTR and loop back
-Lend: stw 7,4(3) # store ultimate result limb
- li 3,0 # load cy into ...
- addze 3,3 # ... return value register
- blr
-
-#else
-/* Add two limb vectors of equal, non-zero length for PowerPC.
- Copyright (C) 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-/* mp_limb_t mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr,
- mp_size_t size)
- Calculate s1+s2 and put result in res_ptr; return carry, 0 or 1. */
-
-/* Note on optimisation: This code is optimal for the 601. Almost every other
- possible 2-unrolled inner loop will not be. Also, watch out for the
- alignment... */
-
-EALIGN(mpihelp_add_n,3,0)
-/* Set up for loop below. */
- mtcrf 0x01,%r6
- srwi. %r7,%r6,1
- li %r10,0
- mtctr %r7
- bt 31,2f
-
-/* Clear the carry. */
- addic %r0,%r0,0
-/* Adjust pointers for loop. */
- addi %r3,%r3,-4
- addi %r4,%r4,-4
- addi %r5,%r5,-4
- b 0f
-
-2: lwz %r7,0(%r5)
- lwz %r6,0(%r4)
- addc %r6,%r6,%r7
- stw %r6,0(%r3)
- beq 1f
-
-/* The loop. */
-
-/* Align start of loop to an odd word boundary to guarantee that the
- last two words can be fetched in one access (for 601). */
-0: lwz %r9,4(%r4)
- lwz %r8,4(%r5)
- lwzu %r6,8(%r4)
- lwzu %r7,8(%r5)
- adde %r8,%r9,%r8
- stw %r8,4(%r3)
- adde %r6,%r6,%r7
- stwu %r6,8(%r3)
- bdnz 0b
-/* Return the carry. */
-1: addze %r3,%r10
- blr
-END(mpihelp_add_n)
-#endif
-
diff --git a/mpi/powerpc32/mpih-lshift.S b/mpi/powerpc32/mpih-lshift.S
deleted file mode 100644
index 20ca7f922..000000000
--- a/mpi/powerpc32/mpih-lshift.S
+++ /dev/null
@@ -1,198 +0,0 @@
-/* PowerPC-32 lshift
- *
- * Copyright (C) 1995, 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_lshift( mpi_ptr_t wp, (r3)
- * mpi_ptr_t up, (r4)
- * mpi_size_t usize, (r5)
- * unsigned cnt) (r6)
- */
-
- .toc
-.csect .text[PR]
- .align 2
- .globl mpihelp_lshift
- .globl .mpihelp_lshift
- .csect mpihelp_lshift[DS]
-mpihelp_lshift:
- .long .mpihelp_lshift, TOC[tc0], 0
- .csect .text[PR]
-.mpihelp_lshift:
- mtctr 5 # copy size into CTR
- slwi 0,5,2
- add 7,3,0 # make r7 point at end of res
- add 4,4,0 # make r4 point at end of s1
- subfic 8,6,32
- lwzu 11,-4(4) # load first s1 limb
- srw 3,11,8 # compute function return value
- bdz Lend1
-
-Loop: lwzu 10,-4(4)
- slw 9,11,6
- srw 12,10,8
- or 9,9,12
- stwu 9,-4(7)
- bdz Lend2
- lwzu 11,-4(4)
- slw 9,10,6
- srw 12,11,8
- or 9,9,12
- stwu 9,-4(7)
- bdnz Loop
-
-Lend1: slw 0,11,6
- stw 0,-4(7)
- blr
-
-Lend2: slw 0,10,6
- stw 0,-4(7)
- blr
-
-#else
-/* Shift a limb left, low level routine.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize,
- unsigned int cnt) */
-
-EALIGN(mpihelp_lshift,3,0)
- mtctr %r5 # copy size into CTR
- cmplwi %cr0,%r5,16 # is size < 16
- slwi %r0,%r5,2
- add %r7,%r3,%r0 # make r7 point at end of res
- add %r4,%r4,%r0 # make r4 point at end of s1
- lwzu %r11,-4(%r4) # load first s1 limb
- subfic %r8,%r6,32
- srw %r3,%r11,%r8 # compute function return value
- bge %cr0,L(big) # branch if size >= 16
-
- bdz L(end1)
-
-0: lwzu %r10,-4(%r4)
- slw %r9,%r11,%r6
- srw %r12,%r10,%r8
- or %r9,%r9,%r12
- stwu %r9,-4(%r7)
- bdz L(end2)
- lwzu %r11,-4(%r4)
- slw %r9,%r10,%r6
- srw %r12,%r11,%r8
- or %r9,%r9,%r12
- stwu %r9,-4(%r7)
- bdnz 0b
-
-L(end1):slw %r0,%r11,%r6
- stw %r0,-4(%r7)
- blr
-
-
-/* Guaranteed not to succeed. */
-L(boom): tweq %r0,%r0
-
-/* We imitate a case statement, by using (yuk!) fixed-length code chunks,
- of size 4*12 bytes. We have to do this (or something) to make this PIC. */
-L(big): mflr %r9
- bltl- %cr0,L(boom) # Never taken, only used to set LR.
- slwi %r10,%r6,4
- mflr %r12
- add %r10,%r12,%r10
- slwi %r8,%r6,5
- add %r10,%r8,%r10
- mtctr %r10
- addi %r5,%r5,-1
- mtlr %r9
- bctr
-
-L(end2):slw %r0,%r10,%r6
- stw %r0,-4(%r7)
- blr
-
-#define DO_LSHIFT(n) \
- mtctr %r5; \
-0: lwzu %r10,-4(%r4); \
- slwi %r9,%r11,n; \
- inslwi %r9,%r10,n,32-n; \
- stwu %r9,-4(%r7); \
- bdz- L(end2); \
- lwzu %r11,-4(%r4); \
- slwi %r9,%r10,n; \
- inslwi %r9,%r11,n,32-n; \
- stwu %r9,-4(%r7); \
- bdnz 0b; \
- b L(end1)
-
- DO_LSHIFT(1)
- DO_LSHIFT(2)
- DO_LSHIFT(3)
- DO_LSHIFT(4)
- DO_LSHIFT(5)
- DO_LSHIFT(6)
- DO_LSHIFT(7)
- DO_LSHIFT(8)
- DO_LSHIFT(9)
- DO_LSHIFT(10)
- DO_LSHIFT(11)
- DO_LSHIFT(12)
- DO_LSHIFT(13)
- DO_LSHIFT(14)
- DO_LSHIFT(15)
- DO_LSHIFT(16)
- DO_LSHIFT(17)
- DO_LSHIFT(18)
- DO_LSHIFT(19)
- DO_LSHIFT(20)
- DO_LSHIFT(21)
- DO_LSHIFT(22)
- DO_LSHIFT(23)
- DO_LSHIFT(24)
- DO_LSHIFT(25)
- DO_LSHIFT(26)
- DO_LSHIFT(27)
- DO_LSHIFT(28)
- DO_LSHIFT(29)
- DO_LSHIFT(30)
- DO_LSHIFT(31)
-
-END(mpihelp_lshift)
-#endif
diff --git a/mpi/powerpc32/mpih-mul1.S b/mpi/powerpc32/mpih-mul1.S
deleted file mode 100644
index b3cb62f3e..000000000
--- a/mpi/powerpc32/mpih-mul1.S
+++ /dev/null
@@ -1,120 +0,0 @@
-/* PowerPC-32 mul_1 -- Multiply a limb vector with a limb and store
- * the result in a second limb vector.
- *
- * Copyright (C) 1992, 1993, 1994, 1995,
- * 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_mul_1( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_size_t s1_size, (r5)
- * mpi_limb_t s2_limb) (r6)
- *
- * This is a fairly straightforward implementation. The timing of the PC601
- * is hard to understand, so I will wait to optimize this until I have some
- * hardware to play with.
- *
- * The code trivially generalizes to 64 bit limbs for the PC620.
- */
-
- .toc
- .csect .mpihelp_mul_1[PR]
- .align 2
- .globl mpihelp_mul_1
- .globl .mpihelp_mul_1
- .csect mpihelp_mul_1[DS]
-mpihelp_mul_1:
- .long .mpihelp_mul_1[PR], TOC[tc0], 0
- .csect .mpihelp_mul_1[PR]
-.mpihelp_mul_1:
- mtctr 5
-
- lwz 0,0(4)
- mullw 7,0,6
- mulhwu 10,0,6
- addi 3,3,-4 # adjust res_ptr
- addic 5,5,0 # clear cy with dummy insn
- bdz Lend
-
-Loop: lwzu 0,4(4)
- stwu 7,4(3)
- mullw 8,0,6
- adde 7,8,10
- mulhwu 10,0,6
- bdnz Loop
-
-Lend: stw 7,4(3)
- addze 3,10
- blr
-
-#else
-/* Multiply a limb vector by a limb, for PowerPC.
- Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-/* mp_limb_t mpn_mul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
- mp_size_t s1_size, mp_limb_t s2_limb)
- Calculate s1*s2 and put result in res_ptr; return carry. */
-
-ENTRY(mpihelp_mul_1)
- mtctr %r5
-
- lwz %r0,0(%r4)
- mullw %r7,%r0,%r6
- mulhwu %r10,%r0,%r6
- addi %r3,%r3,-4 # adjust res_ptr
- addic %r5,%r5,0 # clear cy with dummy insn
- bdz 1f
-
-0: lwzu %r0,4(%r4)
- stwu %r7,4(%r3)
- mullw %r8,%r0,%r6
- adde %r7,%r8,%r10
- mulhwu %r10,%r0,%r6
- bdnz 0b
-
-1: stw %r7,4(%r3)
- addze %r3,%r10
- blr
-END(mpihelp_mul_1)
-#endif
diff --git a/mpi/powerpc32/mpih-mul2.S b/mpi/powerpc32/mpih-mul2.S
deleted file mode 100644
index d3b39bc01..000000000
--- a/mpi/powerpc32/mpih-mul2.S
+++ /dev/null
@@ -1,127 +0,0 @@
-/* PowerPC-32 addmul_1 -- Multiply a limb vector with a limb and add
- * the result to a second limb vector.
- *
- * Copyright (C) 1995, 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_size_t s1_size, (r5)
- * mpi_limb_t s2_limb) (r6)
- *
- * This is a fairly straightforward implementation. The timing of the PC601
- * is hard to understand, so I will wait to optimize this until I have some
- * hardware to play with.
- *
- * The code trivially generalizes to 64 bit limbs for the PC620.
- */
-
-
- .toc
- .csect .mpihelp_addmul_1[PR]
- .align 2
- .globl mpihelp_addmul_1
- .globl .mpihelp_addmul_1
- .csect mpihelp_addmul_1[DS]
-mpihelp_addmul_1:
- .long .mpihelp_addmul_1[PR], TOC[tc0], 0
- .csect .mpihelp_addmul_1[PR]
-.mpihelp_addmul_1:
- mtctr 5
-
- lwz 0,0(4)
- mullw 7,0,6
- mulhwu 10,0,6
- lwz 9,0(3)
- addc 8,7,9
- addi 3,3,-4
- bdz Lend
-
-Loop: lwzu 0,4(4)
- stwu 8,4(3)
- mullw 8,0,6
- adde 7,8,10
- mulhwu 10,0,6
- lwz 9,4(3)
- addze 10,10
- addc 8,7,9
- bdnz Loop
-
-Lend: stw 8,4(3)
- addze 3,10
- blr
-
-#else
-/* Multiply a limb vector by a single limb, for PowerPC.
- Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-/* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
- mp_size_t s1_size, mp_limb_t s2_limb)
- Calculate res+s1*s2 and put result back in res; return carry. */
-ENTRY(mpihelp_addmul_1)
- mtctr %r5
-
- lwz %r0,0(%r4)
- mullw %r7,%r0,%r6
- mulhwu %r10,%r0,%r6
- lwz %r9,0(%r3)
- addc %r8,%r7,%r9
- addi %r3,%r3,-4 /* adjust res_ptr */
- bdz 1f
-
-0: lwzu %r0,4(%r4)
- stwu %r8,4(%r3)
- mullw %r8,%r0,%r6
- adde %r7,%r8,%r10
- mulhwu %r10,%r0,%r6
- lwz %r9,4(%r3)
- addze %r10,%r10
- addc %r8,%r7,%r9
- bdnz 0b
-
-1: stw %r8,4(%r3)
- addze %r3,%r10
- blr
-END(mpihelp_addmul_1)
-#endif
diff --git a/mpi/powerpc32/mpih-mul3.S b/mpi/powerpc32/mpih-mul3.S
deleted file mode 100644
index d84f853ba..000000000
--- a/mpi/powerpc32/mpih-mul3.S
+++ /dev/null
@@ -1,130 +0,0 @@
-/* PowerPC-32 submul_1 -- Multiply a limb vector with a limb and subtract
- * the result from a second limb vector.
- *
- * Copyright (C) 1995, 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_submul_1( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_size_t s1_size, (r5)
- * mpi_limb_t s2_limb) (r6)
- *
- * This is a fairly straightforward implementation. The timing of the PC601
- * is hard to understand, so I will wait to optimize this until I have some
- * hardware to play with.
- *
- * The code trivially generalizes to 64 bit limbs for the PC620.
- */
-
- .toc
- .csect .mpihelp_submul_1[PR]
- .align 2
- .globl mpihelp_submul_1
- .globl .mpihelp_submul_1
- .csect mpihelp_submul_1[DS]
-mpihelp_submul_1:
- .long .mpihelp_submul_1[PR], TOC[tc0], 0
- .csect .mpihelp_submul_1[PR]
-.mpihelp_submul_1:
- mtctr 5
-
- lwz 0,0(4)
- mullw 7,0,6
- mulhwu 10,0,6
- lwz 9,0(3)
- subfc 8,7,9
- addc 7,7,8 # invert cy (r7 is junk)
- addi 3,3,-4
- bdz Lend
-
-Loop: lwzu 0,4(4)
- stwu 8,4(3)
- mullw 8,0,6
- adde 7,8,10
- mulhwu 10,0,6
- lwz 9,4(3)
- addze 10,10
- subfc 8,7,9
- addc 7,7,8 # invert cy (r7 is junk)
- bdnz Loop
-
-Lend: stw 8,4(3)
- addze 3,10
- blr
-
-#else
-/* Multiply a limb vector by a single limb, for PowerPC.
- Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* mp_limb_t mpn_submul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr,
- mp_size_t s1_size, mp_limb_t s2_limb)
- Calculate res-s1*s2 and put result back in res; return carry. */
-
-ENTRY(mpihelp_submul_1)
- mtctr %r5
-
- lwz %r0,0(%r4)
- mullw %r7,%r0,%r6
- mulhwu %r10,%r0,%r6
- lwz %r9,0(%r3)
- subf %r8,%r7,%r9
- addc %r7,%r7,%r8 # invert cy (r7 is junk)
- addi %r3,%r3,-4 # adjust res_ptr
- bdz 1f
-
-0: lwzu %r0,4(%r4)
- stwu %r8,4(%r3)
- mullw %r8,%r0,%r6
- adde %r7,%r8,%r10
- mulhwu %r10,%r0,%r6
- lwz %r9,4(%r3)
- addze %r10,%r10
- subf %r8,%r7,%r9
- addc %r7,%r7,%r8 # invert cy (r7 is junk)
- bdnz 0b
-
-1: stw %r8,4(%r3)
- addze %r3,%r10
- blr
-END(mpihelp_submul_1)
-#endif
diff --git a/mpi/powerpc32/mpih-rshift.S b/mpi/powerpc32/mpih-rshift.S
deleted file mode 100644
index e9704db93..000000000
--- a/mpi/powerpc32/mpih-rshift.S
+++ /dev/null
@@ -1,131 +0,0 @@
-/* PowerPC-32 rshift
- *
- * Copyright (C) 1995, 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_rshift( mpi_ptr_t wp, (r3)
- * mpi_ptr_t up, (r4)
- * mpi_size_t usize, (r5)
- * unsigned cnt) (r6)
- */
-
- .toc
-.csect .text[PR]
- .align 2
- .globl mpihelp_rshift
- .globl .mpihelp_rshift
- .csect mpihelp_rshift[DS]
-mpihelp_rshift:
- .long .mpihelp_rshift, TOC[tc0], 0
- .csect .text[PR]
-.mpihelp_rshift:
- mtctr 5 # copy size into CTR
- addi 7,3,-4 # move adjusted res_ptr to free return reg
- subfic 8,6,32
- lwz 11,0(4) # load first s1 limb
- slw 3,11,8 # compute function return value
- bdz Lend1
-
-Loop: lwzu 10,4(4)
- srw 9,11,6
- slw 12,10,8
- or 9,9,12
- stwu 9,4(7)
- bdz Lend2
- lwzu 11,4(4)
- srw 9,10,6
- slw 12,11,8
- or 9,9,12
- stwu 9,4(7)
- bdnz Loop
-
-Lend1: srw 0,11,6
- stw 0,4(7)
- blr
-
-Lend2: srw 0,10,6
- stw 0,4(7)
- blr
-
-#else
-/* Shift a limb right, low level routine.
- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-/* INPUT PARAMETERS
- res_ptr r3
- s1_ptr r4
- size r5
- cnt r6 */
-
-ENTRY(mpihelp_rshift)
- mtctr 5 # copy size into CTR
- addi 7,3,-4 # move adjusted res_ptr to free return reg
- subfic 8,6,32
- lwz 11,0(4) # load first s1 limb
- slw 3,11,8 # compute function return value
- bdz 1f
-
-0: lwzu 10,4(4)
- srw 9,11,6
- slw 12,10,8
- or 9,9,12
- stwu 9,4(7)
- bdz 2f
- lwzu 11,4(4)
- srw 9,10,6
- slw 12,11,8
- or 9,9,12
- stwu 9,4(7)
- bdnz 0b
-
-1: srw 0,11,6
- stw 0,4(7)
- blr
-
-2: srw 0,10,6
- stw 0,4(7)
- blr
-END(mpihelp_rshift)
-#endif
diff --git a/mpi/powerpc32/mpih-sub1.S b/mpi/powerpc32/mpih-sub1.S
deleted file mode 100644
index 8c67d988f..000000000
--- a/mpi/powerpc32/mpih-sub1.S
+++ /dev/null
@@ -1,132 +0,0 @@
-/* PowerPC-32 sub_n -- Subtract two limb vectors of the same length > 0
- * and store difference in a third limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include "sysdep.h"
-#include "asm-syntax.h"
-
-
-#ifndef USE_PPC_PATCHES
-
-/*******************
- * mpi_limb_t
- * mpihelp_sub_n( mpi_ptr_t res_ptr, (r3)
- * mpi_ptr_t s1_ptr, (r4)
- * mpi_ptr_t s2_ptr, (r5)
- * mpi_size_t size) (r6)
- */
-
- .toc
- .extern mpihelp_sub_n[DS]
- .extern .mpihelp_sub_n
-.csect [PR]
- .align 2
- .globl mpihelp_sub_n
- .globl .mpihelp_sub_n
- .csect mpihelp_sub_n[DS]
-mpihelp_sub_n:
- .long .mpihelp_sub_n, TOC[tc0], 0
- .csect [PR]
-.mpihelp_sub_n:
- mtctr 6 # copy size into CTR
- lwz 8,0(4) # load least significant s1 limb
- lwz 0,0(5) # load least significant s2 limb
- addi 3,3,-4 # offset res_ptr, it is updated before used
- subfc 7,0,8 # add least significant limbs, set cy
- bdz Lend # If done, skip loop
-Loop: lwzu 8,4(4) # load s1 limb and update s1_ptr
- lwzu 0,4(5) # load s2 limb and update s2_ptr
- stwu 7,4(3) # store previous limb in load latency slot
- subfe 7,0,8 # add new limbs with cy, set cy
- bdnz Loop # decrement CTR and loop back
-Lend: stw 7,4(3) # store ultimate result limb
- subfe 3,0,0 # load !cy into ...
- subfic 3,3,0 # ... return value register
- blr
-
-#else
-/* Subtract two limb vectors of equal, non-zero length for PowerPC.
- Copyright (C) 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* mp_limb_t mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr,
- mp_size_t size)
- Calculate s1-s2 and put result in res_ptr; return borrow, 0 or 1. */
-
-/* Note on optimisation: This code is optimal for the 601. Almost every other
- possible 2-unrolled inner loop will not be. Also, watch out for the
- alignment... */
-
-EALIGN(mpihelp_sub_n,3,1)
-/* Set up for loop below. */
- mtcrf 0x01,%r6
- srwi. %r7,%r6,1
- mtctr %r7
- bt 31,2f
-
-/* Set the carry (clear the borrow). */
- subfc %r0,%r0,%r0
-/* Adjust pointers for loop. */
- addi %r3,%r3,-4
- addi %r4,%r4,-4
- addi %r5,%r5,-4
- b 0f
-
-2: lwz %r7,0(%r5)
- lwz %r6,0(%r4)
- subfc %r6,%r7,%r6
- stw %r6,0(%r3)
- beq 1f
-
-/* Align start of loop to an odd word boundary to guarantee that the
- last two words can be fetched in one access (for 601). This turns
- out to be important. */
-0:
- lwz %r9,4(%r4)
- lwz %r8,4(%r5)
- lwzu %r6,8(%r4)
- lwzu %r7,8(%r5)
- subfe %r8,%r8,%r9
- stw %r8,4(%r3)
- subfe %r6,%r7,%r6
- stwu %r6,8(%r3)
- bdnz 0b
-/* Return the borrow. */
-1: subfe %r3,%r3,%r3
- neg %r3,%r3
- blr
-END(mpihelp_sub_n)
-#endif
diff --git a/mpi/powerpc32/syntax.h b/mpi/powerpc32/syntax.h
deleted file mode 100644
index 19f797273..000000000
--- a/mpi/powerpc32/syntax.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* gmp2-2.0.2-ppc/mpn/powerpc-linux/syntax.h Tue Oct 6 19:27:01 1998 */
-/* From glibc's sysdeps/unix/sysv/linux/powerpc/sysdep.h */
-
-/* Copyright (C) 1992, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-#define USE_PPC_PATCHES 1
-
-/* This seems to always be the case on PPC. */
-#define ALIGNARG(log2) log2
-/* For ELF we need the `.type' directive to make shared libs work right. */
-#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
-#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
-#define ASM_GLOBAL_DIRECTIVE .globl
-
-#ifdef __STDC__
-# define C_LABEL(name) C_SYMBOL_NAME(name)##:
-#else
-# define C_LABEL(name) C_SYMBOL_NAME(name)/**/:
-#endif
-
-#ifdef __STDC__
-# define L(body) .L##body
-#else
-# define L(body) .L/**/body
-#endif
-
-/* No profiling of gmp's assembly for now... */
-#define CALL_MCOUNT /* no profiling */
-
-#define ENTRY(name) \
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
- ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
- .align ALIGNARG(2); \
- C_LABEL(name) \
- CALL_MCOUNT
-
-#define EALIGN_W_0 /* No words to insert. */
-#define EALIGN_W_1 nop
-#define EALIGN_W_2 nop;nop
-#define EALIGN_W_3 nop;nop;nop
-#define EALIGN_W_4 EALIGN_W_3;nop
-#define EALIGN_W_5 EALIGN_W_4;nop
-#define EALIGN_W_6 EALIGN_W_5;nop
-#define EALIGN_W_7 EALIGN_W_6;nop
-
-/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
- past a 2^align boundary. */
-#define EALIGN(name, alignt, words) \
- ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \
- ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
- .align ALIGNARG(alignt); \
- EALIGN_W_##words; \
- C_LABEL(name)
-
-#undef END
-#define END(name) \
- ASM_SIZE_DIRECTIVE(name)
-
diff --git a/mpi/powerpc64/distfiles b/mpi/powerpc64/distfiles
deleted file mode 100644
index e69de29bb..000000000
diff --git a/mpi/sparc32/distfiles b/mpi/sparc32/distfiles
deleted file mode 100644
index 95ff42882..000000000
--- a/mpi/sparc32/distfiles
+++ /dev/null
@@ -1,6 +0,0 @@
-
-mpih-lshift.S
-mpih-rshift.S
-mpih-add1.S
-udiv.S
-
diff --git a/mpi/sparc32/mpih-add1.S b/mpi/sparc32/mpih-add1.S
deleted file mode 100644
index b8faadb5f..000000000
--- a/mpi/sparc32/mpih-add1.S
+++ /dev/null
@@ -1,239 +0,0 @@
-/* SPARC _add_n -- Add two limb vectors of the same length > 0 and store
- * sum in a third limb vector.
- *
- * Copyright (C) 1995, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-
-/*******************
- * mpi_limb_t
- * mpihelp_add_n( mpi_ptr_t res_ptr,
- * mpi_ptr_t s1_ptr,
- * mpi_ptr_t s2_ptr,
- * mpi_size_t size)
- */
-
-! INPUT PARAMETERS
-#define res_ptr %o0
-#define s1_ptr %o1
-#define s2_ptr %o2
-#define size %o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_add_n)
-C_SYMBOL_NAME(mpihelp_add_n):
- xor s2_ptr,res_ptr,%g1
- andcc %g1,4,%g0
- bne L1 ! branch if alignment differs
- nop
-! ** V1a **
-L0: andcc res_ptr,4,%g0 ! res_ptr unaligned? Side effect: cy=0
- be L_v1 ! if no, branch
- nop
-/* Add least significant limb separately to align res_ptr and s2_ptr */
- ld [s1_ptr],%g4
- add s1_ptr,4,s1_ptr
- ld [s2_ptr],%g2
- add s2_ptr,4,s2_ptr
- add size,-1,size
- addcc %g4,%g2,%o4
- st %o4,[res_ptr]
- add res_ptr,4,res_ptr
-L_v1: addx %g0,%g0,%o4 ! save cy in register
- cmp size,2 ! if size < 2 ...
- bl Lend2 ! ... branch to tail code
- subcc %g0,%o4,%g0 ! restore cy
-
- ld [s1_ptr+0],%g4
- addcc size,-10,size
- ld [s1_ptr+4],%g1
- ldd [s2_ptr+0],%g2
- blt Lfin1
- subcc %g0,%o4,%g0 ! restore cy
-/* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop1: addxcc %g4,%g2,%o4
- ld [s1_ptr+8],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+12],%g1
- ldd [s2_ptr+8],%g2
- std %o4,[res_ptr+0]
- addxcc %g4,%g2,%o4
- ld [s1_ptr+16],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+20],%g1
- ldd [s2_ptr+16],%g2
- std %o4,[res_ptr+8]
- addxcc %g4,%g2,%o4
- ld [s1_ptr+24],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+28],%g1
- ldd [s2_ptr+24],%g2
- std %o4,[res_ptr+16]
- addxcc %g4,%g2,%o4
- ld [s1_ptr+32],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+36],%g1
- ldd [s2_ptr+32],%g2
- std %o4,[res_ptr+24]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-8,size
- add s1_ptr,32,s1_ptr
- add s2_ptr,32,s2_ptr
- add res_ptr,32,res_ptr
- bge Loop1
- subcc %g0,%o4,%g0 ! restore cy
-
-Lfin1: addcc size,8-2,size
- blt Lend1
- subcc %g0,%o4,%g0 ! restore cy
-/* Add blocks of 2 limbs until less than 2 limbs remain */
-Loope1: addxcc %g4,%g2,%o4
- ld [s1_ptr+8],%g4
- addxcc %g1,%g3,%o5
- ld [s1_ptr+12],%g1
- ldd [s2_ptr+8],%g2
- std %o4,[res_ptr+0]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-2,size
- add s1_ptr,8,s1_ptr
- add s2_ptr,8,s2_ptr
- add res_ptr,8,res_ptr
- bge Loope1
- subcc %g0,%o4,%g0 ! restore cy
-Lend1: addxcc %g4,%g2,%o4
- addxcc %g1,%g3,%o5
- std %o4,[res_ptr+0]
- addx %g0,%g0,%o4 ! save cy in register
-
- andcc size,1,%g0
- be Lret1
- subcc %g0,%o4,%g0 ! restore cy
-/* Add last limb */
- ld [s1_ptr+8],%g4
- ld [s2_ptr+8],%g2
- addxcc %g4,%g2,%o4
- st %o4,[res_ptr+8]
-
-Lret1: retl
- addx %g0,%g0,%o0 ! return carry-out from most sign. limb
-
-L1: xor s1_ptr,res_ptr,%g1
- andcc %g1,4,%g0
- bne L2
- nop
-! ** V1b **
- mov s2_ptr,%g1
- mov s1_ptr,s2_ptr
- b L0
- mov %g1,s1_ptr
-
-! ** V2 **
-/* If we come here, the alignment of s1_ptr and res_ptr as well as the
- alignment of s2_ptr and res_ptr differ. Since there are only two ways
- things can be aligned (that we care about) we now know that the alignment
- of s1_ptr and s2_ptr are the same. */
-
-L2: cmp size,1
- be Ljone
- nop
- andcc s1_ptr,4,%g0 ! s1_ptr unaligned? Side effect: cy=0
- be L_v2 ! if no, branch
- nop
-/* Add least significant limb separately to align s1_ptr and s2_ptr */
- ld [s1_ptr],%g4
- add s1_ptr,4,s1_ptr
- ld [s2_ptr],%g2
- add s2_ptr,4,s2_ptr
- add size,-1,size
- addcc %g4,%g2,%o4
- st %o4,[res_ptr]
- add res_ptr,4,res_ptr
-
-L_v2: addx %g0,%g0,%o4 ! save cy in register
- addcc size,-8,size
- blt Lfin2
- subcc %g0,%o4,%g0 ! restore cy
-/* Add blocks of 8 limbs until less than 8 limbs remain */
-Loop2: ldd [s1_ptr+0],%g2
- ldd [s2_ptr+0],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+0]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+4]
- ldd [s1_ptr+8],%g2
- ldd [s2_ptr+8],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+8]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+12]
- ldd [s1_ptr+16],%g2
- ldd [s2_ptr+16],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+16]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+20]
- ldd [s1_ptr+24],%g2
- ldd [s2_ptr+24],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+24]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+28]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-8,size
- add s1_ptr,32,s1_ptr
- add s2_ptr,32,s2_ptr
- add res_ptr,32,res_ptr
- bge Loop2
- subcc %g0,%o4,%g0 ! restore cy
-
-Lfin2: addcc size,8-2,size
- blt Lend2
- subcc %g0,%o4,%g0 ! restore cy
-Loope2: ldd [s1_ptr+0],%g2
- ldd [s2_ptr+0],%o4
- addxcc %g2,%o4,%g2
- st %g2,[res_ptr+0]
- addxcc %g3,%o5,%g3
- st %g3,[res_ptr+4]
- addx %g0,%g0,%o4 ! save cy in register
- addcc size,-2,size
- add s1_ptr,8,s1_ptr
- add s2_ptr,8,s2_ptr
- add res_ptr,8,res_ptr
- bge Loope2
- subcc %g0,%o4,%g0 ! restore cy
-Lend2: andcc size,1,%g0
- be Lret2
- subcc %g0,%o4,%g0 ! restore cy
-/* Add last limb */
-Ljone: ld [s1_ptr],%g4
- ld [s2_ptr],%g2
- addxcc %g4,%g2,%o4
- st %o4,[res_ptr]
-
-Lret2: retl
- addx %g0,%g0,%o0 ! return carry-out from most sign. limb
-
-
-
diff --git a/mpi/sparc32/mpih-lshift.S b/mpi/sparc32/mpih-lshift.S
deleted file mode 100644
index b217d5e62..000000000
--- a/mpi/sparc32/mpih-lshift.S
+++ /dev/null
@@ -1,97 +0,0 @@
-/* sparc lshift
- *
- * Copyright (C) 1995, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-
-! INPUT PARAMETERS
-! res_ptr %o0
-! src_ptr %o1
-! size %o2
-! cnt %o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_lshift)
-C_SYMBOL_NAME(mpihelp_lshift):
- sll %o2,2,%g1
- add %o1,%g1,%o1 ! make %o1 point at end of src
- ld [%o1-4],%g2 ! load first limb
- sub %g0,%o3,%o5 ! negate shift count
- add %o0,%g1,%o0 ! make %o0 point at end of res
- add %o2,-1,%o2
- andcc %o2,4-1,%g4 ! number of limbs in first loop
- srl %g2,%o5,%g1 ! compute function result
- be L0 ! if multiple of 4 limbs, skip first loop
- st %g1,[%sp+80]
-
- sub %o2,%g4,%o2 ! adjust count for main loop
-
-Loop0: ld [%o1-8],%g3
- add %o0,-4,%o0
- add %o1,-4,%o1
- addcc %g4,-1,%g4
- sll %g2,%o3,%o4
- srl %g3,%o5,%g1
- mov %g3,%g2
- or %o4,%g1,%o4
- bne Loop0
- st %o4,[%o0+0]
-
-L0: tst %o2
- be Lend
- nop
-
-Loop: ld [%o1-8],%g3
- add %o0,-16,%o0
- addcc %o2,-4,%o2
- sll %g2,%o3,%o4
- srl %g3,%o5,%g1
-
- ld [%o1-12],%g2
- sll %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0+12]
- srl %g2,%o5,%g1
-
- ld [%o1-16],%g3
- sll %g2,%o3,%o4
- or %g4,%g1,%g4
- st %g4,[%o0+8]
- srl %g3,%o5,%g1
-
- ld [%o1-20],%g2
- sll %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0+4]
- srl %g2,%o5,%g1
-
- add %o1,-16,%o1
- or %g4,%g1,%g4
- bne Loop
- st %g4,[%o0+0]
-
-Lend: sll %g2,%o3,%g2
- st %g2,[%o0-4]
- retl
- ld [%sp+80],%o0
-
diff --git a/mpi/sparc32/mpih-rshift.S b/mpi/sparc32/mpih-rshift.S
deleted file mode 100644
index 62902cbe3..000000000
--- a/mpi/sparc32/mpih-rshift.S
+++ /dev/null
@@ -1,93 +0,0 @@
-/* sparc rshift
- *
- * Copyright (C) 1995, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-! INPUT PARAMETERS
-! res_ptr %o0
-! src_ptr %o1
-! size %o2
-! cnt %o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_rshift)
-C_SYMBOL_NAME(mpihelp_rshift):
- ld [%o1],%g2 ! load first limb
- sub %g0,%o3,%o5 ! negate shift count
- add %o2,-1,%o2
- andcc %o2,4-1,%g4 ! number of limbs in first loop
- sll %g2,%o5,%g1 ! compute function result
- be L0 ! if multiple of 4 limbs, skip first loop
- st %g1,[%sp+80]
-
- sub %o2,%g4,%o2 ! adjust count for main loop
-
-Loop0: ld [%o1+4],%g3
- add %o0,4,%o0
- add %o1,4,%o1
- addcc %g4,-1,%g4
- srl %g2,%o3,%o4
- sll %g3,%o5,%g1
- mov %g3,%g2
- or %o4,%g1,%o4
- bne Loop0
- st %o4,[%o0-4]
-
-L0: tst %o2
- be Lend
- nop
-
-Loop: ld [%o1+4],%g3
- add %o0,16,%o0
- addcc %o2,-4,%o2
- srl %g2,%o3,%o4
- sll %g3,%o5,%g1
-
- ld [%o1+8],%g2
- srl %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0-16]
- sll %g2,%o5,%g1
-
- ld [%o1+12],%g3
- srl %g2,%o3,%o4
- or %g4,%g1,%g4
- st %g4,[%o0-12]
- sll %g3,%o5,%g1
-
- ld [%o1+16],%g2
- srl %g3,%o3,%g4
- or %o4,%g1,%o4
- st %o4,[%o0-8]
- sll %g2,%o5,%g1
-
- add %o1,16,%o1
- or %g4,%g1,%g4
- bne Loop
- st %g4,[%o0-4]
-
-Lend: srl %g2,%o3,%g2
- st %g2,[%o0-0]
- retl
- ld [%sp+80],%o0
-
diff --git a/mpi/sparc32/udiv.S b/mpi/sparc32/udiv.S
deleted file mode 100644
index 752d07193..000000000
--- a/mpi/sparc32/udiv.S
+++ /dev/null
@@ -1,197 +0,0 @@
-/* SPARC v7 __udiv_qrnnd division support, used from longlong.h.
- * This is for v7 CPUs without a floating-point unit.
- *
- * Copyright (C) 1993, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-! INPUT PARAMETERS
-! rem_ptr o0
-! n1 o1
-! n0 o2
-! d o3
-
-#include "sysdep.h"
-
- .text
- .align 4
- .global C_SYMBOL_NAME(__udiv_qrnnd)
-C_SYMBOL_NAME(__udiv_qrnnd):
- tst %o3
- bneg Largedivisor
- mov 8,%g1
-
- b Lp1
- addxcc %o2,%o2,%o2
-
-Lplop: bcc Ln1
- addxcc %o2,%o2,%o2
-Lp1: addx %o1,%o1,%o1
- subcc %o1,%o3,%o4
- bcc Ln2
- addxcc %o2,%o2,%o2
-Lp2: addx %o1,%o1,%o1
- subcc %o1,%o3,%o4
- bcc Ln3
- addxcc %o2,%o2,%o2
-Lp3: addx %o1,%o1,%o1
- subcc %o1,%o3,%o4
- bcc Ln4
- addxcc %o2,%o2,%o2
-Lp4: addx %o1,%o1,%o1
- addcc %g1,-1,%g1
- bne Lplop
- subcc %o1,%o3,%o4
- bcc Ln5
- addxcc %o2,%o2,%o2
-Lp5: st %o1,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-Lnlop: bcc Lp1
- addxcc %o2,%o2,%o2
-Ln1: addx %o4,%o4,%o4
- subcc %o4,%o3,%o1
- bcc Lp2
- addxcc %o2,%o2,%o2
-Ln2: addx %o4,%o4,%o4
- subcc %o4,%o3,%o1
- bcc Lp3
- addxcc %o2,%o2,%o2
-Ln3: addx %o4,%o4,%o4
- subcc %o4,%o3,%o1
- bcc Lp4
- addxcc %o2,%o2,%o2
-Ln4: addx %o4,%o4,%o4
- addcc %g1,-1,%g1
- bne Lnlop
- subcc %o4,%o3,%o1
- bcc Lp5
- addxcc %o2,%o2,%o2
-Ln5: st %o4,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-Largedivisor:
- and %o2,1,%o5 ! %o5 = n0 & 1
-
- srl %o2,1,%o2
- sll %o1,31,%g2
- or %g2,%o2,%o2 ! %o2 = lo(n1n0 >> 1)
- srl %o1,1,%o1 ! %o1 = hi(n1n0 >> 1)
-
- and %o3,1,%g2
- srl %o3,1,%g3 ! %g3 = floor(d / 2)
- add %g3,%g2,%g3 ! %g3 = ceil(d / 2)
-
- b LLp1
- addxcc %o2,%o2,%o2
-
-LLplop: bcc LLn1
- addxcc %o2,%o2,%o2
-LLp1: addx %o1,%o1,%o1
- subcc %o1,%g3,%o4
- bcc LLn2
- addxcc %o2,%o2,%o2
-LLp2: addx %o1,%o1,%o1
- subcc %o1,%g3,%o4
- bcc LLn3
- addxcc %o2,%o2,%o2
-LLp3: addx %o1,%o1,%o1
- subcc %o1,%g3,%o4
- bcc LLn4
- addxcc %o2,%o2,%o2
-LLp4: addx %o1,%o1,%o1
- addcc %g1,-1,%g1
- bne LLplop
- subcc %o1,%g3,%o4
- bcc LLn5
- addxcc %o2,%o2,%o2
-LLp5: add %o1,%o1,%o1 ! << 1
- tst %g2
- bne Oddp
- add %o5,%o1,%o1
- st %o1,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-LLnlop: bcc LLp1
- addxcc %o2,%o2,%o2
-LLn1: addx %o4,%o4,%o4
- subcc %o4,%g3,%o1
- bcc LLp2
- addxcc %o2,%o2,%o2
-LLn2: addx %o4,%o4,%o4
- subcc %o4,%g3,%o1
- bcc LLp3
- addxcc %o2,%o2,%o2
-LLn3: addx %o4,%o4,%o4
- subcc %o4,%g3,%o1
- bcc LLp4
- addxcc %o2,%o2,%o2
-LLn4: addx %o4,%o4,%o4
- addcc %g1,-1,%g1
- bne LLnlop
- subcc %o4,%g3,%o1
- bcc LLp5
- addxcc %o2,%o2,%o2
-LLn5: add %o4,%o4,%o4 ! << 1
- tst %g2
- bne Oddn
- add %o5,%o4,%o4
- st %o4,[%o0]
- retl
- xnor %g0,%o2,%o0
-
-Oddp: xnor %g0,%o2,%o2
- ! q' in %o2. r' in %o1
- addcc %o1,%o2,%o1
- bcc LLp6
- addx %o2,0,%o2
- sub %o1,%o3,%o1
-LLp6: subcc %o1,%o3,%g0
- bcs LLp7
- subx %o2,-1,%o2
- sub %o1,%o3,%o1
-LLp7: st %o1,[%o0]
- retl
- mov %o2,%o0
-
-Oddn: xnor %g0,%o2,%o2
- ! q' in %o2. r' in %o4
- addcc %o4,%o2,%o4
- bcc LLn6
- addx %o2,0,%o2
- sub %o4,%o3,%o4
-LLn6: subcc %o4,%o3,%g0
- bcs LLn7
- subx %o2,-1,%o2
- sub %o4,%o3,%o4
-LLn7: st %o4,[%o0]
- retl
- mov %o2,%o0
diff --git a/mpi/sparc32v8/distfiles b/mpi/sparc32v8/distfiles
deleted file mode 100644
index 5789f35b3..000000000
--- a/mpi/sparc32v8/distfiles
+++ /dev/null
@@ -1,5 +0,0 @@
-
-mpih-mul1.S
-mpih-mul2.S
-mpih-mul3.S
-
diff --git a/mpi/sparc32v8/mpih-mul1.S b/mpi/sparc32v8/mpih-mul1.S
deleted file mode 100644
index 551450060..000000000
--- a/mpi/sparc32v8/mpih-mul1.S
+++ /dev/null
@@ -1,111 +0,0 @@
-/* SPARC v8 __mpn_mul_1 -- Multiply a limb vector with a single limb and
- * store the product in a second limb vector.
- *
- * Copyright (C) 1992, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-! INPUT PARAMETERS
-! res_ptr o0
-! s1_ptr o1
-! size o2
-! s2_limb o3
-
-#include "sysdep.h"
-
-.text
- .align 8
- .global C_SYMBOL_NAME(mpihelp_mul_1)
-C_SYMBOL_NAME(mpihelp_mul_1):
- sll %o2,4,%g1
- and %g1,(4-1)<<4,%g1
-#if PIC
- mov %o7,%g4 ! Save return address register
- call 1f
- add %o7,LL-1f,%g3
-1: mov %g4,%o7 ! Restore return address register
-#else
- sethi %hi(LL),%g3
- or %g3,%lo(LL),%g3
-#endif
- jmp %g3+%g1
- ld [%o1+0],%o4 ! 1
-LL:
-LL00: add %o0,-4,%o0
- add %o1,-4,%o1
- b Loop00 /* 4, 8, 12, ... */
- orcc %g0,%g0,%g2
-LL01: b Loop01 /* 1, 5, 9, ... */
- orcc %g0,%g0,%g2
- nop
- nop
-LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */
- add %o1,4,%o1
- b Loop10
- orcc %g0,%g0,%g2
- nop
-LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */
- add %o1,-8,%o1
- b Loop11
- orcc %g0,%g0,%g2
-
-Loop: addcc %g3,%g2,%g3 ! 1
- ld [%o1+4],%o4 ! 2
- st %g3,[%o0+0] ! 1
- rd %y,%g2 ! 1
-Loop00: umul %o4,%o3,%g3 ! 2
- addxcc %g3,%g2,%g3 ! 2
- ld [%o1+8],%o4 ! 3
- st %g3,[%o0+4] ! 2
- rd %y,%g2 ! 2
-Loop11: umul %o4,%o3,%g3 ! 3
- addxcc %g3,%g2,%g3 ! 3
- ld [%o1+12],%o4 ! 4
- add %o1,16,%o1
- st %g3,[%o0+8] ! 3
- rd %y,%g2 ! 3
-Loop10: umul %o4,%o3,%g3 ! 4
- addxcc %g3,%g2,%g3 ! 4
- ld [%o1+0],%o4 ! 1
- st %g3,[%o0+12] ! 4
- add %o0,16,%o0
- rd %y,%g2 ! 4
- addx %g0,%g2,%g2
-Loop01: addcc %o2,-4,%o2
- bg Loop
- umul %o4,%o3,%g3 ! 1
-
- addcc %g3,%g2,%g3 ! 4
- st %g3,[%o0+0] ! 4
- rd %y,%g2 ! 4
-
- retl
- addx %g0,%g2,%o0
-
-
diff --git a/mpi/sparc32v8/mpih-mul2.S b/mpi/sparc32v8/mpih-mul2.S
deleted file mode 100644
index 55f37814b..000000000
--- a/mpi/sparc32v8/mpih-mul2.S
+++ /dev/null
@@ -1,134 +0,0 @@
-/* SPARC v8 __mpn_addmul_1 -- Multiply a limb vector with a limb and
- * add the result to a second limb vector.
- *
- * Copyright (C) 1992, 1993, 1994, 1995, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-! INPUT PARAMETERS
-! res_ptr o0
-! s1_ptr o1
-! size o2
-! s2_limb o3
-
-#include "sysdep.h"
-
-.text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_addmul_1)
-C_SYMBOL_NAME(mpihelp_addmul_1):
- orcc %g0,%g0,%g2
- ld [%o1+0],%o4 ! 1
-
- sll %o2,4,%g1
- and %g1,(4-1)<<4,%g1
-#if PIC
- mov %o7,%g4 ! Save return address register
- call 1f
- add %o7,LL-1f,%g3
-1: mov %g4,%o7 ! Restore return address register
-#else
- sethi %hi(LL),%g3
- or %g3,%lo(LL),%g3
-#endif
- jmp %g3+%g1
- nop
-LL:
-LL00: add %o0,-4,%o0
- b Loop00 /* 4, 8, 12, ... */
- add %o1,-4,%o1
- nop
-LL01: b Loop01 /* 1, 5, 9, ... */
- nop
- nop
- nop
-LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */
- b Loop10
- add %o1,4,%o1
- nop
-LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */
- b Loop11
- add %o1,-8,%o1
- nop
-
-1: addcc %g3,%g2,%g3 ! 1
- ld [%o1+4],%o4 ! 2
- rd %y,%g2 ! 1
- addx %g0,%g2,%g2
- ld [%o0+0],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+0] ! 1
-Loop00: umul %o4,%o3,%g3 ! 2
- ld [%o0+4],%g1 ! 2
- addxcc %g3,%g2,%g3 ! 2
- ld [%o1+8],%o4 ! 3
- rd %y,%g2 ! 2
- addx %g0,%g2,%g2
- nop
- addcc %g1,%g3,%g3
- st %g3,[%o0+4] ! 2
-Loop11: umul %o4,%o3,%g3 ! 3
- addxcc %g3,%g2,%g3 ! 3
- ld [%o1+12],%o4 ! 4
- rd %y,%g2 ! 3
- add %o1,16,%o1
- addx %g0,%g2,%g2
- ld [%o0+8],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+8] ! 3
-Loop10: umul %o4,%o3,%g3 ! 4
- addxcc %g3,%g2,%g3 ! 4
- ld [%o1+0],%o4 ! 1
- rd %y,%g2 ! 4
- addx %g0,%g2,%g2
- ld [%o0+12],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+12] ! 4
- add %o0,16,%o0
- addx %g0,%g2,%g2
-Loop01: addcc %o2,-4,%o2
- bg 1b
- umul %o4,%o3,%g3 ! 1
-
- addcc %g3,%g2,%g3 ! 4
- rd %y,%g2 ! 4
- addx %g0,%g2,%g2
- ld [%o0+0],%g1 ! 2
- addcc %g1,%g3,%g3
- st %g3,[%o0+0] ! 4
- addx %g0,%g2,%o0
-
- retl
- nop
-
-
-! umul, ld, addxcc, rd, st
-
-! umul, ld, addxcc, rd, ld, addcc, st, addx
-
diff --git a/mpi/sparc32v8/mpih-mul3.S b/mpi/sparc32v8/mpih-mul3.S
deleted file mode 100644
index cfd0a1576..000000000
--- a/mpi/sparc32v8/mpih-mul3.S
+++ /dev/null
@@ -1,69 +0,0 @@
-/* SPARC v8 __mpn_submul_1 -- Multiply a limb vector with a limb and
- * subtract the result from a second limb vector.
- *
- * Copyright (C) 1992, 1993, 1994, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-! INPUT PARAMETERS
-! res_ptr o0
-! s1_ptr o1
-! size o2
-! s2_limb o3
-
-#include "sysdep.h"
-
-.text
- .align 4
- .global C_SYMBOL_NAME(mpihelp_submul_1)
-C_SYMBOL_NAME(mpihelp_submul_1):
- sub %g0,%o2,%o2 ! negate ...
- sll %o2,2,%o2 ! ... and scale size
- sub %o1,%o2,%o1 ! o1 is offset s1_ptr
- sub %o0,%o2,%g1 ! g1 is offset res_ptr
-
- mov 0,%o0 ! clear cy_limb
-
-Loop: ld [%o1+%o2],%o4
- ld [%g1+%o2],%g2
- umul %o4,%o3,%o5
- rd %y,%g3
- addcc %o5,%o0,%o5
- addx %g3,0,%o0
- subcc %g2,%o5,%g2
- addx %o0,0,%o0
- st %g2,[%g1+%o2]
-
- addcc %o2,4,%o2
- bne Loop
- nop
-
- retl
- nop
-
-
diff --git a/mpi/supersparc/distfiles b/mpi/supersparc/distfiles
deleted file mode 100644
index 5506c419b..000000000
--- a/mpi/supersparc/distfiles
+++ /dev/null
@@ -1,3 +0,0 @@
-
-udiv.S
-
diff --git a/mpi/supersparc/udiv.S b/mpi/supersparc/udiv.S
deleted file mode 100644
index 31b7387c7..000000000
--- a/mpi/supersparc/udiv.S
+++ /dev/null
@@ -1,120 +0,0 @@
-/* SuperSPARC __udiv_qrnnd division support, used from longlong.h.
- * This is for SuperSPARC only, to compensate for its
- * semi-functional udiv instruction.
- *
- * Copyright (C) 1993, 1994, 1996, 1998,
- * 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- * Note: This code is heavily based on the GNU MP Library.
- * Actually it's the same code with only minor changes in the
- * way the data is stored; this is to support the abstraction
- * of an optional secure memory allocation which may be used
- * to avoid revealing of sensitive data due to paging etc.
- * The GNU MP Library itself is published under the LGPL;
- * however I decided to publish this code under the plain GPL.
- */
-
-
-
-! INPUT PARAMETERS
-! rem_ptr i0
-! n1 i1
-! n0 i2
-! d i3
-
-#include "sysdep.h"
-#undef ret /* Kludge for glibc */
-
- .text
- .align 8
-LC0: .double 0r4294967296
-LC1: .double 0r2147483648
-
- .align 4
- .global C_SYMBOL_NAME(__udiv_qrnnd)
-C_SYMBOL_NAME(__udiv_qrnnd):
- !#PROLOGUE# 0
- save %sp,-104,%sp
- !#PROLOGUE# 1
- st %i1,[%fp-8]
- ld [%fp-8],%f10
- sethi %hi(LC0),%o7
- fitod %f10,%f4
- ldd [%o7+%lo(LC0)],%f8
- cmp %i1,0
- bge L248
- mov %i0,%i5
- faddd %f4,%f8,%f4
-L248:
- st %i2,[%fp-8]
- ld [%fp-8],%f10
- fmuld %f4,%f8,%f6
- cmp %i2,0
- bge L249
- fitod %f10,%f2
- faddd %f2,%f8,%f2
-L249:
- st %i3,[%fp-8]
- faddd %f6,%f2,%f2
- ld [%fp-8],%f10
- cmp %i3,0
- bge L250
- fitod %f10,%f4
- faddd %f4,%f8,%f4
-L250:
- fdivd %f2,%f4,%f2
- sethi %hi(LC1),%o7
- ldd [%o7+%lo(LC1)],%f4
- fcmped %f2,%f4
- nop
- fbge,a L251
- fsubd %f2,%f4,%f2
- fdtoi %f2,%f2
- st %f2,[%fp-8]
- b L252
- ld [%fp-8],%i4
-L251:
- fdtoi %f2,%f2
- st %f2,[%fp-8]
- ld [%fp-8],%i4
- sethi %hi(-2147483648),%g2
- xor %i4,%g2,%i4
-L252:
- umul %i3,%i4,%g3
- rd %y,%i0
- subcc %i2,%g3,%o7
- subxcc %i1,%i0,%g0
- be L253
- cmp %o7,%i3
-
- add %i4,-1,%i0
- add %o7,%i3,%o7
- st %o7,[%i5]
- ret
- restore
-L253:
- blu L246
- mov %i4,%i0
- add %i4,1,%i0
- sub %o7,%i3,%o7
-L246:
- st %o7,[%i5]
- ret
- restore
-
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
deleted file mode 100644
index 28726a21f..000000000
--- a/po/Makefile.in.in
+++ /dev/null
@@ -1,196 +0,0 @@
-# Makefile for program source directory in GNU NLS utilities package.
-# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-#
-# This file file be copied and used freely without restrictions. It can
-# be used in projects which are not available under the GNU General Public License
-# but which still want to provide support for the GNU gettext functionality.
-# Please note that the actual code is *not* freely available.
-
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-
-# These two variables depend on the location of this directory.
-subdir = po
-top_builddir = ..
-
-SHELL = /bin/sh
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datadir = @datadir@
-localedir = $(datadir)/locale
-gettextsrcdir = $(datadir)/gettext/po
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-
-CC = @CC@
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
-MSGMERGE = msgmerge
-
-DEFS = @DEFS@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-
-INCLUDES = -I.. -I$(top_srcdir)/intl
-
-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
-
-POFILES = @POFILES@
-GMOFILES = @GMOFILES@
-DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
-$(POFILES) $(GMOFILES)
-
-POTFILES = \
-
-CATALOGS = @CATALOGS@
-
-.SUFFIXES:
-.SUFFIXES: .c .o .po .pox .gmo .mo
-
-.c.o:
- $(COMPILE) $<
-
-.po.pox:
- $(MAKE) $(PACKAGE).pot
- $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
-
-.po.mo:
- $(MSGFMT) -o $@ $<
-
-.po.gmo:
- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
- && rm -f $$file && $(GMSGFMT) --statistics -o $$file $<
-
-
-all: all-@USE_NLS@
-
-all-yes: $(CATALOGS)
-all-no:
-
-# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot',
-# otherwise packages like GCC can not be built if only parts of the source
-# have been downloaded.
-
-$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in
- $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
- --add-comments --keyword=_ --keyword=N_ \
- --files-from=$(srcdir)/POTFILES.in \
- && test ! -f $(PACKAGE).po \
- || ( rm -f $(srcdir)/$(PACKAGE).pot \
- && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
-
-
-install: install-exec install-data
-install-exec:
-install-data: install-data-@USE_NLS@
- if test "$(PACKAGE)" = "gettext"; then \
- $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
- $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
- $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
- else \
- : ; \
- fi
-install-data-no: all
-install-data-yes: all
- $(mkinstalldirs) $(DESTDIR)$(datadir)
- @catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- dir=$(localedir)/$$lang/LC_MESSAGES; \
- $(mkinstalldirs) $(DESTDIR)$$dir; \
- if test -r $$cat; then \
- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
- echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \
- else \
- $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
- echo "installing $(srcdir)/$$cat as" \
- "$(DESTDIR)$$dir/$(PACKAGE).mo"; \
- fi; \
- done
-
-# Define this as empty until I found a useful application.
-installcheck:
-
-uninstall:
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
- done
- if test "$(PACKAGE)" = "gettext"; then \
- rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
- else \
- : ; \
- fi
-
-check: all
-
-dvi info tags TAGS ID:
-
-mostlyclean:
- rm -f core core.* *.pox $(PACKAGE).po *.new.po
- rm -fr *.o
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES *.mo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f $(GMOFILES)
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir:
- $(MAKE) update-po
- @$(MAKE) dist2
-# This is a separate target because 'update-po' must be executed before.
-dist2: $(DISTFILES)
- dists="$(DISTFILES)"; \
- for file in $$dists; do \
- if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
- cp -p $$dir/$$file $(distdir); \
- done
-
-update-po: Makefile
- $(MAKE) $(PACKAGE).pot
- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \
- cd $(srcdir); \
- catalogs='$(GMOFILES)'; \
- for cat in $$catalogs; do \
- cat=`basename $$cat`; \
- lang=`echo $$cat | sed 's/\.gmo$$//'`; \
- echo "$$lang:"; \
- if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \
- mv -f $$lang.new.po $$lang.po; \
- else \
- echo "msgmerge for $$cat failed!"; \
- rm -f $$lang.new.po; \
- fi; \
- done
- $(MAKE) update-gmo
-
-update-gmo: Makefile $(GMOFILES)
- @:
-
-Makefile: Makefile.in.in $(top_builddir)/config.status POTFILES.in
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
- $(SHELL) ./config.status
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/po/ca.po b/po/ca.po
deleted file mode 100644
index e4545965e..000000000
--- a/po/ca.po
+++ /dev/null
@@ -1,4944 +0,0 @@
-# Missatges de gnupg en català
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-# Carles Sadurní Anguita <sadurni@jazzfree.com>, 2001.
-# Jordi Mallach <jordi@sindominio.net>, 2001, 2002.
-#
-# Coses:
-# ID d'usuari és masculí?
-# Canviar ID -> ID d'usuari
-# Xifratge vs. Xifrat
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.6\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-06-03 20:37+0200\n"
-"Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
-"Language-Team: Catalan <ca@dodds.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Alerta: esteu usant memòria insegura!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "l'operació no és possible sense memòria segura inicialitzada\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(potser heu utilitzat el programa erroni per a aquesta tasca)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "sí"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "sS"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "no"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "eixir"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "error general"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "tipus de paquet desconegut"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "versió desconeguda"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algoritme de clau pública desconegut"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algoritme de digest desconegut"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "clau pública errònia"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "clau secreta errònia"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "signatura errònia"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "suma de control errònia"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "contrasenya errònia"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "no s'ha trobat la clau pública"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algoritme de xifrat desconegut"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "no s'ha pogut obrir l'anell"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "paquet invàlid"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armadura invàlida"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "no s'ha trobat l'id de l'usuari"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "la clau secreta no està disponible"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "s'ha utilitzat una clau secreta incorrecta"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "no suportat"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "clau incorrecta"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "error de lectura"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "error d'escriptura"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritme de compressió desconegut"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "error en l'obertura del fitxer"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "error en la creació del fitxer"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "contrasenya invàlida"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritme de clau pública no implementat"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritme de xifrat no implementat"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "classe de signatura desconeguda"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "error de la base de dades de confiança"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI erroni"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "límit de recursos"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "l'anell no és vàlid"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "certificat incorrecte"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "id d'usuari mal formada"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "error en el tancament del fitxer"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "error en el reanomenament del fitxer"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "error a l'eliminar fitxer"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "dades inesperades"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "conflicte de data"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritme de clau pública inusable"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "el fitxer existeix"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "clau feble"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argument invàlid"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI errònia"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI no suportada"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "error de la xarxa"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "no xifrat"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "no processat"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "clau pública inusable"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "clau secreta inusable"
-
-#: util/errors.c:107
-#, fuzzy
-msgid "keyserver error"
-msgstr "error general"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... açò és un bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "heu trobat un bug... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "no s'ha pogut obrir «%s»: %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "no es pot fer stat de «%s»: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "«%s» no és un fitxer regular: s'ignorarà\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "nota: el fitxer random_seed és buit\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "alerta: el tamany del fitxer random_seed no és vàlid - no s'usarà\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "no s'ha pogut llegir «%s»: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "nota: el fitxer random_seed no s'ha actualitzat\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "no s'ha pogut crear «%s»: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "no s'ha pogut escriure «%s»: %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "no s'ha pogut tancar `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "ALERTA: esteu usant un generador de nombres aleatoris insegur!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"El generador de nombres aleatoris és només un pedaç\n"
-"per a que funcioni - de cap manera és un GNA fort!\n"
-"\n"
-"NO UTILITZEU CAP DADA GENERADA PER AQUEST PROGRAMA!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"No hi ha prou bytes aleatoris. Per favor, feu alguna altra cosa perquè el\n"
-"sistema tinga oportunitat de recollir més entropia. (Fan falta %d bytes "
-"més)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Ordres:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[fitxer]|crea una signatura"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[fitxer]|crea una signatura en text clar"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "crea una firma separada"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "xifra dades"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr ""
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "xifra només amb xifratge simètric"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "només emmagatzema"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "desxifra dades (predeterminat)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr ""
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verifica una signatura"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "llista claus"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "llista claus i signatures"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "comprova les signatures de les claus"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "llista claus i empremtes dactilars"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "llista claus secretes"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "genera un nou parell de claus"
-
-#: g10/g10.c:327
-#, fuzzy
-msgid "remove keys from the public keyring"
-msgstr "elimina una clau de l'anell públic"
-
-#: g10/g10.c:329
-#, fuzzy
-msgid "remove keys from the secret keyring"
-msgstr "elimina clau de l'anell secret"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "firma una clau"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "signa localment una clau"
-
-#: g10/g10.c:332
-#, fuzzy
-msgid "sign a key non-revocably"
-msgstr "signa localment una clau"
-
-#: g10/g10.c:333
-#, fuzzy
-msgid "sign a key locally and non-revocably"
-msgstr "signa localment una clau"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "signa o edita una clau"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "genera un certificat de revocament"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exporta claus"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exporta claus a un servidor de claus"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importa claus d'un servidor de claus"
-
-#: g10/g10.c:341
-#, fuzzy
-msgid "search for keys on a key server"
-msgstr "exporta claus a un servidor de claus"
-
-#: g10/g10.c:343
-#, fuzzy
-msgid "update all keys from a keyserver"
-msgstr "importa claus d'un servidor de claus"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importa/fon claus"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "llista només la seqüència de paquets"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exporta els valors de confiança"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importa els valors de confiança"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "actualitza la base de dades de confiança"
-
-#: g10/g10.c:357
-#, fuzzy
-msgid "unattended trust database update"
-msgstr "actualitza la base de dades de confiança"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "arregla una base de dades de confiança corrompuda"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "lleva l'armadura a un fitxer o a stdin"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "crea l'armadura a un fitxer o a stdin"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [fitxers]imprimeix digests de missatges"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opcions:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "crea eixida amb armadura ascii"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOM|xifra per a NOM"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOM|usa NOM com a destinatari predeterminat"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "usa la clau predeterminada com a destinatari predeterminat"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "usa aquest id per a signar o desxifrar"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|nivell de compressió N (0 no comprimeix)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "usa mode de text canònic"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "fitxer d'eixida"
-
-# Cal comprovar el context. jm
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "detall"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "una mica més silenciós"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "no usa el terminal en absolut"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "força signatures v3"
-
-#: g10/g10.c:397
-#, fuzzy
-msgid "do not force v3 signatures"
-msgstr "força signatures v3"
-
-#: g10/g10.c:398
-#, fuzzy
-msgid "force v4 key signatures"
-msgstr "força signatures v3"
-
-#: g10/g10.c:399
-#, fuzzy
-msgid "do not force v4 key signatures"
-msgstr "força signatures v3"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "sempre utilitza un MDC per a xifrar"
-
-#: g10/g10.c:402
-#, fuzzy
-msgid "never use a MDC for encryption"
-msgstr "sempre utilitza un MDC per a xifrar"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "no fa cap canvi"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "utilitza el gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "mode batch: no pregunta mai"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "suposa «sí» en la majoria de les preguntes"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "suposa «no» en la majoria de les preguntes"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "afegeix aquest anell a la llista"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "afegeix aquest anell secret a la llista"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr ""
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOM|usa NOM com a clau secreta predeterminada"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|usa aquest servidor per a buscar claus"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NOM|el joc de caràcters serà NOM"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "llig opcions del fitxer"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|escriu informació d'estat en aquest FD"
-
-#: g10/g10.c:427
-#, fuzzy
-msgid "|[file]|write status info to file"
-msgstr "|FD|escriu informació d'estat en aquest FD"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|IDCLAU|confia definitivament en aquesta clau"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FITXER|carrega el mòdul d'extensió especificat"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emula el mode descrit en RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"estableix totes les opcions de paquets, xifrat i digest al comportament "
-"d'OpenPGP"
-
-#: g10/g10.c:443
-#, fuzzy
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"estableix totes les opcions de paquets, xifrat i digest al comportament "
-"d'OpenPGP"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|usa el mode de contrasenya especificat"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NOM|usa l'algoritme de digest de missatges NOM per a les contrasenyes"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NOM|usa l'algoritme de xifratge NOM per a les contrasenyes"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOM|usa l'algoritme de xifratge NOM"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOM|usa l'algoritme de digest de missatges NOM"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|usa l'algoritme de compressió N"
-
-# elimina o descarta? jm
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "descarta el camp keyid dels paquets xifrats"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(En la pàgina del man hi ha una llista completa d'ordres i d'opcions)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Exemples:\n"
-"\n"
-" -se -r Pep [fitxer] signa i xifra per a l'usuari Pep\n"
-" --clearsign [fitxer] crea una signatura en text clar\n"
-" --detach-sign [fitxer] crea una signatura separada\n"
-" --list-keys [noms] mostra claus\n"
-" --fingerprint [noms] mostra empremtes dactilars\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Per favor informeu sobre els errors a <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Ús: gpg [opcions] [fitxers] (-h per a veure l'ajuda)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintaxi: gpg [opcions] [fitxers]\n"
-"signa, comprova, xifra o desxifra\n"
-"l'operació predeterminada depén de les dades introduïdes\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritmes admesos:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "ús: gpg [opcions] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "ordres en conflicte\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTA: no existeix el fitxer d'opcions predeterminat «%s»\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTA: no existeix el fitxer d'opcions predeterminat «%s»\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "fitxer d'opcions «%s»: %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "llegint opcions de «%s»\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s no és un joc de caràcters vàlid\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr ""
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: versió de fitxer %d invàlid\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armadura invàlida"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: versió de fitxer %d invàlid\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "l'anell no és vàlid"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "ALERTA: el programa podria crear un fitxer core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr ""
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTA: %s no és per a ús normal!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s no és permés amb %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s no té sentit amb %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr ""
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "l'algoritme de xifratge triat no és vàlid\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "el algorime de digest seleccionat no és vàlid\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "el algorime de digest seleccionat no és vàlid\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "l'algoritme de compressió ha d'estar en l'interval %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed ha de ser major que 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed ha de ser major que 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth ha d'estar entre el rang 1 a 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: el mode S2K simple (0) no és gens recomanable\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "mode S2K invàlid; ha de ser 0, 1 o 3\n"
-
-#: g10/g10.c:1862
-#, fuzzy
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "mode S2K invàlid; ha de ser 0, 1 o 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "llista les preferències"
-
-#: g10/g10.c:1876
-msgid "invalid personal cipher preferences\n"
-msgstr ""
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "llista les preferències"
-
-#: g10/g10.c:1884
-msgid "invalid personal compress preferences\n"
-msgstr ""
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "no s'ha pogut inicialitzar la base de dades de confiança: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [nom_del_fitxer]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [nom_del_fitxer]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [nom_del_fitxer]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [nom_del_fitxer]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [nom_del_fitxer]"
-
-#: g10/g10.c:2056
-#, fuzzy
-msgid "--sign --symmetric [filename]"
-msgstr "--symmetric [nom_del_fitxer]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [nom_del_fitxer]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [nom_del_fitxer]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key user-id"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key user-id"
-
-#: g10/g10.c:2110
-#, fuzzy
-msgid "--nrsign-key user-id"
-msgstr "--sign-key user-id"
-
-#: g10/g10.c:2118
-#, fuzzy
-msgid "--nrlsign-key user-id"
-msgstr "--lsign-key user-id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key user-id [ordres]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "no s'ha pogut obrir %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [user-id] [anell]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "no s'ha pogut llevar l'armadura: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "no s'ha pogut crear l'armadura: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr ""
-"algoritme de hash invàlid «%s»\n"
-"\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nom_del_fitxer]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Endavant, escriviu el missatge...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "no s'ha pogut obrir «%s»\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"el nom de la notació només pot tenir lletres, dígits, punts o subratllats i "
-"acabar amb el signe «=»\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "un valor de notació no pot utilitzar cap caràcter de control\n"
-
-#: g10/g10.c:2737
-#, fuzzy
-msgid "the given certification policy URL is invalid\n"
-msgstr "la URL de política donada no és vàlida\n"
-
-#: g10/g10.c:2739
-#, fuzzy
-msgid "the given signature policy URL is invalid\n"
-msgstr "la URL de política donada no és vàlida\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armadura: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "capçalera d'armadura no vàlida: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "capçalera d'armadura: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "capçalera de signatura clara invàlida\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "signatures en text pla anidades\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "línia escapada amb guió no vàlida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armadura inesperada:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "caràcter radix64 %02x invàlid omés\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "fi de fitxer prematur (no CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "fi de fitxer prematur (en CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC mal format\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "error de CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "fí de fitxer prematur (al final)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "error en la última línia\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "no s'han trobat dades OpenPGP vàlides.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armadura invàlida: línia més llarga que %d caràcters\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"caràcter «quoted printable» en l'armadura - probablement s'ha utilitzat un "
-"MTA amb errors\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "No s'ha especificat cap raó"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "La clau ha estat substituïda"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "La clau ha estat compromesa"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "La clau ja no s'usa"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "La ID d'usuari ja no és vàlid"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Raó de la revocació: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Comentari: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr ""
-
-#: g10/pkclist.c:258
-#, fuzzy, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"No hi ha cap valor de confiança assignat a %lu:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-#, fuzzy
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Fins a quin punt confieu en aquest usuari per a verificar\n"
-"les claus d'altres usuaris (mirant passaports,\n"
-"comprovant empremtes de diferents fonts...)?\n"
-"\n"
-" 1 = No ho sé\n"
-" 2 = No hi confie\n"
-" 3 = Hi confie poc\n"
-" 4 = Hi confie completament\n"
-" s = mostra més informació\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr ""
-
-#: g10/pkclist.c:274
-#, fuzzy, c-format
-msgid " %d = I do NOT trust\n"
-msgstr "%08lX: La clau no és de confiança\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr ""
-
-#: g10/pkclist.c:276
-#, fuzzy, c-format
-msgid " %d = I trust fully\n"
-msgstr "%s no és un fitxer de base de dades de confiança\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr ""
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr ""
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = torna al menú principal\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr ""
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = ix\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "La vostra decisió? "
-
-#: g10/pkclist.c:316
-#, fuzzy
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Realment voleu eliminar aquesta clau? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificats que duen a una clau de confiança absoluta:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "clau %08lX: aquesta clau ha estat revocada!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Voleu usar de tota manera aquesta clau?"
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "clau %08lX: aquesta subclau ha estat revocada!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: la clau ha caducat\n"
-
-#: g10/pkclist.c:448
-#, fuzzy, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-" No hi ha res que indique que la signatura pertany al seu propietari.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: La clau no és de confiança\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: No hi ha garanties que aquesta clau pertanga realment al seu\n"
-"propietari però s'accepta de tota manera\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Aquesta clau pertany probablement al seu propietari\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Aquesta clau és nostra\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"No és segur que la clau pertanga al seu propietari.\n"
-"Si realment sabeu què feu, podeu respondre\n"
-"que sí a la següent pregunta\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "ALERTA: És una clau no fiable!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "ALERTA: Aquesta clau ha estat revocada pel propietari!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Açò podria significar que la signatura és falsificada.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "ALERTA: Aquesta subclau ha estat revocada pel propietari!\n"
-
-#: g10/pkclist.c:580
-#, fuzzy
-msgid "Note: This key has been disabled.\n"
-msgstr "Aquesta clau ha estat desactivada"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Nota: La clau ha caducat!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "ALERTA: Aquesta clau no ve certificada per una firma de confiança!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" No hi ha res que indique que la signatura pertany al seu propietari.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "ALERTA: La clau no és de confiança!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Probablement la signatura és falsa.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr "ALERTA: Aquesta clau no ve certificada per signatures prou fiables!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr "No és segur que la signatura pertanga al seu propietari.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ignorat: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ignorat: clau pública ja present\n"
-
-#: g10/pkclist.c:811
-#, fuzzy
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "No heu especificat usuari. (Podeu usar «-r»)\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Usuari inexistent.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "ignorat: la clau pública ja s'ha especificat com a destinatari\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "La clau pública està desactivada.\n"
-
-#: g10/pkclist.c:870
-#, fuzzy
-msgid "skipped: public key already set\n"
-msgstr "%s: ignorat: clau pública ja present\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "destinatari predeterminat desconegut «%s»\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ignorat: la clau pública està desactivada\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "no hi ha adreces vàlides\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr ""
-
-#: g10/keygen.c:189
-#, fuzzy, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "«%s» ignorat: duplicat\n"
-
-#: g10/keygen.c:194
-#, fuzzy, c-format
-msgid "too many `%c' preferences\n"
-msgstr "llista les preferències"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "Caràcter invàlid en el camp *nom*\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "escriptura de l'autosignatura\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "escriptura de l'autosignatura\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "escriptura de la signatura de comprovació de la clau\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "grandària de la clau invàlida; s'hi usaran %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "grandària de la clau arrodonida fins a %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Trieu quin tipus de clau voleu:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA i ElGamal (predeterminat)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (només signar)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (només xifrar)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signar i xifrar)\n"
-
-#: g10/keygen.c:949
-#, fuzzy, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) DSA (només signar)\n"
-
-#: g10/keygen.c:951
-#, fuzzy, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) ElGamal (només xifrar)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (signar i xifrar)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Trieu: "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "L'us d'aquest algoritme està desaconsellat - crear igualment? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Selecció invàlida.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Preparat per a generar un nou parell de claus %s.\n"
-" grandària mínima: 768 bits\n"
-" grandària predeterminada: 1024 bits\n"
-" grandària màxima aconsellada: 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Quina grandària voleu? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA només permet clau entre 512 i 1024 bits\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "calu massa petita; 1024 bits és el mínim permés per a claus RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "clau massa petita; 768 bits és el mínim permés.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "clau massa llarga; %d és el màxim permés.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"No es recomanen claus més llargues de 2048 bits perquè\n"
-"els càlculs són VERITABLEMENT llargs!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Segur que voleu aquesta grandària? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"D'acord, però sapigueu que la radiació del monitor i del teclat també son "
-"molt vulnerables als atacs!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "La grandària sol·licitada és %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "arrodonida fins a %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Especifiqueu el temps de validesa de la clau.\n"
-" 0 = no caduca\n"
-" <n> = caduca als n dies\n"
-" <n>w = caduca a les n setmanes\n"
-" <n>m = caduca als n mesos\n"
-" <n>y = caduca als n anys\n"
-
-#: g10/keygen.c:1126
-#, fuzzy
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Especifiqueu el temps de validesa de la clau.\n"
-" 0 = no caduca\n"
-" <n> = caduca als n dies\n"
-" <n>w = caduca a les n setmanes\n"
-" <n>m = caduca als n mesos\n"
-" <n>y = caduca als n anys\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Indiqueu la validesa de la clau (0) "
-
-#: g10/keygen.c:1150
-#, fuzzy
-msgid "Signature is valid for? (0) "
-msgstr "Indiqueu la validesa de la clau (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valor invàlid\n"
-
-#: g10/keygen.c:1160
-#, fuzzy, c-format
-msgid "%s does not expire at all\n"
-msgstr "La clau no caduca\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, fuzzy, c-format
-msgid "%s expires at %s\n"
-msgstr "La clau caduca el %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"El vostre sistema no pot representar dates posteriors a l'any 2038.\n"
-"Tanmateix, les manejarà bé fins l'any 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "És correcte? (s/n)"
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Necessiteu un ID d'usuari per a identificar la vostra clau; el programa\n"
-"construeix la id de l'usuari amb el Nom, Comentari i Adreça electrònica\n"
-"d'aquesta forma:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nom i cognoms"
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Caràcter invàlid en el camp *nom*\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "El nom no pot començar amb un dígit\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "El nom ha de tenir, si més no, 5 caràcters\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Adreça electrònica: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "No és una adreça vàlida\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Comentari: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Caràcter invàlid en el camp *comentari*\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Esteu usant el joc de caràcters `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Heu triat l'usuari:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "No inclogueu l'adreça ni en el camp *nom* ni en el camp *comentari*\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoQq"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Canvia (N)om, (C)omentari, (E)mail o (Q) ix "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Canvia (N)om, (C)omentari, (E)mail o (O) d'acord / (Q) ix"
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Corregiu l'error primer\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Cal una contrasenya per a protegir la clau privada.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-#, fuzzy
-msgid "passphrase not correctly repeated; try again"
-msgstr "la contrasenya no s'ha repetit correctament; torneu a intentar-ho\n"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr ""
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"No voleu contrasenya: és una mala idea!\n"
-"Bé. Si voleu canviar-la més endavant,\n"
-"useu aquest programa amb l'opció \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Cal generar molts bits aleatoriament. És bona idea fer alguna altra cosa\n"
-"(teclejar, moure el ratolí, usar els discos) durant la generació de\n"
-"nombres primers; açò dóna oportunitat al generador de nombres aleatoris\n"
-"d'aconseguir prou entropia.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "La parella de claus DSA ha de tenir 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Generació de claus cancel·lada.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "escriptura de la clau pública a `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "escriptura de la clau privada a `%s'\n"
-
-#: g10/keygen.c:2205
-#, fuzzy, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "clau %08lX: no s'ha trobat la clau pública: %s\n"
-
-#: g10/keygen.c:2211
-#, fuzzy, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "clau %08lX: no s'ha trobat la clau privada: %s\n"
-
-#: g10/keygen.c:2225
-#, fuzzy, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
-
-#: g10/keygen.c:2232
-#, fuzzy, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "claus pública i privada creades i signades.\n"
-
-#: g10/keygen.c:2253
-#, fuzzy
-msgid "key marked as ultimately trusted.\n"
-msgstr "Certificats que duen a una clau de confiança absoluta:\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Noteu que aquesta clau no serveix per a xifrar. Potser vulgueu usar l'ordre\n"
-"\"--edit-key\" per a generar una clau secundària per a tal propòsit.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "La generació de claus ha fallat: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n"
-"amb el rellotge)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n"
-"amb el rellotge)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NOTA: crear subclaus per a claus v3 no és conformant amb OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Crear realment? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr ""
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: no s'ha pogut obrir: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "error en la creació de la contrasenya: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, fuzzy, c-format
-msgid "`%s' already compressed\n"
-msgstr "%lu claus processades\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ALERTA: fitxer buit\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "llegint des de «%s»\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: no s'ha trobat l'algoritme de xifratge %d en les preferències\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr ""
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s xifrat per a: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, fuzzy, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "no s'ha trobat l'usuari «%s»: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, fuzzy, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "error en la lectura de «%s»: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "clau %08lX: no és una clau rfc2440 - ignorada\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "clau %08lX: no protegida - ignorada\n"
-
-#: g10/export.c:246
-#, fuzzy, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "clau %08lX: clau nova: s'ignorarà\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "ALERTA: no s'hi ha exportat res\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "massa entrades en la memòria cau de claus públiques - desactivada\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[No s'ha trobat l'usuari]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "s'usarà la clau secundària %08lX en lloc de la primària %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "clau %08lX: clau secreta sense clau pública: ignorada\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "bloc de tipus %d ignorat\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "fins ara s'han processat %lu claus\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "error en la lectura de «%s»: %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Nombre total processat: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " claus noves ignorades: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sense ID: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importades: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " no modificades: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " IDs d'usuaris nous: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " subclaus noves: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " signatures noves: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " noves revocacions: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr "claus privades llegides: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "claus privades importades: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "claus privades no canviades: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importades: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "clau %08lX: sense ID\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "clau %08lX: no hi ha una subclau per a l'enllaç de la clau\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "clau %08lX: s'ha acceptat la ID d'usuari no auto-signada '"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "clau %08lX: l'ID no és vàlid\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "açò pot ser causat per l'absència d'autofirma\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "clau %08lX: no s'ha trobat la clau pública: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "clau %08lX: clau nova: s'ignorarà\n"
-
-#: g10/import.c:646
-#, fuzzy, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "escriptura a «%s»\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "clau %08lX: clau pública importada\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "clau %08lX: no correspon a la nostra còpia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "clau %08lX: no s'ha trobat el bloc de claus original: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "clau %08lX: no s'ha pogut llegir el bloc de claus original: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "clau %08lX: 1 ID d'usuari nou\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "clau %08lX: %d ID nous\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "clau %08lX: 1 signatura nova\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "clau %08lX: %d signatures noves\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "clau %08lX: 1 subclau nova\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "clau %08lX: %d subclaus noves\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "clau %08lX: no modificada\n"
-
-#: g10/import.c:844
-#, fuzzy, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "no hi ha anell públic predeterminat\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "clau %08lX: clau privada importada\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "clau %08lX: ja es troba en l'anell privat\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "clau %08lX: no s'ha trobat la clau privada: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"clau %08lX: falta la clau pública: no es pot aplicar el certificat\n"
-"de revocació\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "clau %08lX: certificat de revocació invàlid: %s: rebutjat\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "clau %08lX: certificat de revocació importat\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "clau %08lX: no hi ha ID per a la signatura\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "clau %08lX: algoritme de clau pública no suportat\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "clau %08lX: autofirma no vàlida\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "clau %08lX: no hi ha una subclau per a l'enllaç de la clau\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "clau %08lX: algoritme de clau pública no suportat\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "clau %08lX: enllaç de subclau invàlid\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "clau %08lX: enllaç de subclau invàlid\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "clau %08lX: no hi ha una subclau per a l'enllaç de la clau\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "clau %08lX.%lu: Subclau de revocació vàlida\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "clau %08lX: enllaç de subclau invàlid\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "clau %08lX: ID ignorat '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "clau %08lX: subclau ignorada\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "clau %08lX: signatura inexportable (classe %02x) - ignorada\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "clau %08lX: certificat de revocació en el lloc equivocat - ignorat\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "clau %08lX: certificat de revocació no vàlid: %s - ignorat\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "clau %08lX: certificat de revocació en el lloc equivocat - ignorat\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "clau %08lX: detectat ID duplicat - fusionat\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "clau %08lX: s'hi ha afegit el certificat de revocació\n"
-
-#: g10/import.c:1491
-#, fuzzy, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "clau %08lX: %d signatures noves\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revocació]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[autosignatura]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 signatura errònia\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d signatures errònies\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signatura no comprovada per falta de clau\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signatures no comprovades per falta de clau\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signatura no comprovada a causa d'un error\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signatures no comprovades a causa d'errors\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Ha estat detectat 1 ID sense autosignatura vàlida\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Han estat detectats %d IDs sense autosignatura vàlida\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr ""
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Segur que voleu aquesta grandària? "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "ALERTA: «%s» és un fitxer buit\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "Ja està signat amb la clau %08lX\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "Ja està signat amb la clau %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "No hi ha res que signat amb la clau %08lX\n"
-
-#: g10/keyedit.c:478
-#, fuzzy
-msgid "This key has expired!"
-msgstr "Nota: La clau ha caducat!\n"
-
-#: g10/keyedit.c:498
-#, fuzzy, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Aquesta clau no està protegida.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr ""
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr ""
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Esteu segurs que voleu signar aquesta clau\n"
-"amb la vostra clau: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "açò pot ser causat per l'absència d'autofirma\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"La signatura es marcarà com a inexportable.\n"
-"\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"La signatura es marcarà com a inexportable.\n"
-"\n"
-
-#: g10/keyedit.c:620
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"La signatura es marcarà com a inexportable.\n"
-"\n"
-
-#: g10/keyedit.c:624
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"La signatura es marcarà com a inexportable.\n"
-"\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Signar realment? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "Ha fallat el procés de signatura: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Aquesta clau no està protegida.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Les parts secretes de la clau primària no estan disponibles.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "La clau està protegida.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "No es pot editar aquesta clau: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Introduïu la nova contrasenya per a la clau secreta.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"No voleu contrasenya: açò és probablement una *mala* idea!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "N'esteu segur de voler fer açò? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "posant la signatura al lloc correcte\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "eixit del menú"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "desa"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "desa i ix"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "ajuda"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "mostrar aquesta pantalla"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "mostra empremta"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "llista"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "llista claus i ID"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "triar ID N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "clau"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "tria clau secundària N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "comprovar"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "llista signatures"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "signa la clau"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "signar la clau localment"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "nrsign"
-msgstr "sign"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "sign the key non-revocably"
-msgstr "signar la clau localment"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "nrlsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "sign the key locally and non-revocably"
-msgstr "signar la clau localment"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "depura"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "afegir ID d'usuari"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr ""
-
-#: g10/keyedit.c:920
-#, fuzzy
-msgid "add a photo ID"
-msgstr "afegir ID d'usuari"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "esborrar ID d'usuari"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr ""
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "afegir una clau secundària"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "esborrar una clau secundària"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "revocada"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "afegir una clau secundària"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "esborrar signatures"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "canviar la data de caducitat"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr ""
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr ""
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "canvia entre el llistat de claus secretes i públiques"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-#, fuzzy
-msgid "list preferences (expert)"
-msgstr "llista les preferències"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "list preferences (verbose)"
-msgstr "llista les preferències"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "setpref"
-msgstr "pref"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "set preference list"
-msgstr "llista les preferències"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updpref"
-msgstr "pref"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updated preferences"
-msgstr "llista les preferències"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "canvia la contrasenya"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "canvia la confiança"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revoca signatures"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revoca una clau secundària"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "desactivar clau"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "activa una clau"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr ""
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr ""
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "no es pot fet això en mode batch\n"
-
-#: g10/keyedit.c:1000
-#, fuzzy, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "error en la lectura de «%s»: %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "La clau secreta està disponible.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Ordre>"
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Cal la clau secreta per a fer açò.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Useu l'ordre «toggle» abans.\n"
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "La clau està protegida.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Signar tots els IDs? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Pista: Trieu els IDs que voleu signar\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Heu de seleccionar al menys un ID.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "No podeu esborrar l'últim ID!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Eliminar tots els IDs seleccionats? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Eliminar aquest ID? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Heu de seleccionar, si més no, una clau.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Realment voleu esborrar les claus seleccionades? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Realment voleu eliminar aquesta clau? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Realment voleu revocar les claus seleccionades? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Realment voleu revocar aquesta clau? "
-
-#: g10/keyedit.c:1354
-#, fuzzy
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Eliminar tots els IDs seleccionats? "
-
-#: g10/keyedit.c:1356
-#, fuzzy
-msgid "Really update the preferences? "
-msgstr "Crear els certificats de revocació? (y/N)"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Desar els canvis? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Eixir sense desar? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "ha fallat l'actualització: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "ha fallat l'actualització de la clau secreta: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "La clau no ha canviat, per tant no cal actualització.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "L'ordre no és vàlida (proveu «help»)\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "ALERTA: Aquesta clau ha estat revocada pel propietari!\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr ""
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX creada: %s expira: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " confiança: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Aquesta clau ha estat desactivada"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! la subclau ha estat revocada: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- s'ha trobat una revocació falsa\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problemes en la comprovació de la revocació: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Segur que voleu aquesta grandària? "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Esborrar aquesta signatura correcta? (y/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Esborrar aquesta signatura invàlida? (y/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Esborrar aquesta signatura desconeguda? (y/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Esborrar aquesta auto-signatura? (y/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d signatura esborrada.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d signatures esborrades.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "No s'hi ha eliminat res.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Introduïu la grandària de la clau"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Per favor, elimineu les seleccions de les claus secretes.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Per favor, seleccioneu com a molt una clau secundària.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Canviant la data de caducitat per a una clau secundària.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Canviant la data de caducitat per a una clau primària.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "No podeu canviar la data de caducitat de les claus v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "No hi ha cap signatura corresponent en l'anell secret\n"
-
-#: g10/keyedit.c:2546
-#, fuzzy
-msgid "Please select exactly one user ID.\n"
-msgstr "Heu de seleccionar al menys un ID.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr ""
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "No hi ha cap ID amb l'índex %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "No hi ha cap clau secundària amb l'índex %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "ID d'usuari: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"signat amb la vostra clau %08lX el %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"signat amb la vostra clau %08lX el %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "%s signatura de: %s\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Realment voleu revocar aquesta clau? "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Crear un certificat de revocació per a aquesta signatura? (y/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Heu signat els següents ID d'usuari:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " signat per %08lX el %s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revocat per %08lX el %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Esteu a punt de revocar aquestes signatures:\n"
-
-#: g10/keyedit.c:3013
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " signat per %08lX el %s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Crear els certificats de revocació? (y/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "ho hi ha clau secreta\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "escriptura de l'autosignatura\n"
-
-#: g10/keylist.c:93
-#, fuzzy
-msgid "Signature policy: "
-msgstr "%s signatura de: %s\n"
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "ALERTA: s'hi ha trobat dades de notació invàlides\n"
-
-#: g10/keylist.c:127
-msgid "Critical signature notation: "
-msgstr ""
-
-#: g10/keylist.c:129
-#, fuzzy
-msgid "Signature notation: "
-msgstr "Notació: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr ""
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr ""
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr "[caduca: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "llista claus i empremtes dactilars"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Empremta digital:"
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr "llista claus i empremtes dactilars"
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Empremta digital:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-#, fuzzy
-msgid " Key fingerprint ="
-msgstr " Empremta digital:"
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr ""
-"algoritme de hash invàlid «%s»\n"
-"\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "dades xifrades amb %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "xifrat amb l'algoritme %d (desconegut)\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "la clau pública és %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "dades xifrades amb clau pública: bona clau de xifratge (DEK)\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "xifrat amb una clau %2$s de %1$u bits, ID %3$08lX, creada en %4$s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "xifrat amb una clau %s, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "ha fallat el desxifratge amb la clau pública: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, fuzzy, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "dades xifrades amb %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "desxifratge correcte\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "ALERTA: el missatge xifrat ha estat manipulat!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "ha fallat el desxifratge: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: el remitent ha sol·licitat \"alt secret\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nom del fitxer original='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "revocació autònoma: useu \"gpg --import\" per a aplicar-la\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notació: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Política: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verificació de signatura eliminada\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "no es poden manejar aquestes signatures múltiples\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Signatura creada %.*s usant una clau %s ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "Signatura INCORRECTA de \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-#, fuzzy
-msgid "Expired signature from \""
-msgstr "Signatura correcta de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Signatura correcta de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr ""
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "No s'ha pogut comprovar la signatura: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "no és una signatura separada\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "signatura autònoma de classe 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "signatura de l'estil antic (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "paquet arrel invàlid detectat en proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "no s'han pogut desactivar els *core dump*: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "No hauríeu d'usar algoritmes experimentals!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"aquest algoritme de xifrat està desaconsellat; useu-ne un de més estàndard!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr ""
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "%s: no s'ha pogut obrir: %s\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "ALERTA: «%s» és un fitxer buit\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "no s'ha pogut manejar l'algoritme de clau pública %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "el subpaquet de tipus %d té el bit crític activat\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent no està disponible en aquesta sessió\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "variable d'entorn GPG_AGENT_INFO mal formada\n"
-
-#: g10/passphrase.c:511
-#, fuzzy, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "l'algoritme de protecció %d no està suportat\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "no s'ha pogut connectar amb «%s»: %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr ""
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-#, fuzzy
-msgid "problem with the agent - disabling agent use\n"
-msgstr "hi ha un problema amb l'agent: l'agent ha tornat 0x%lx\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (ID de la clau principal %08lX)"
-
-# Com es canvia l'ordre dels arguments? jm
-# Ah, bingo! jm
-# Uh, ara torna a donar error.
-# La idea és ficar:
-# "Necessiteu la contrasenya per desbloquejar la clau secreta de l'usuari:\n"
-# "«%1$.*s»\n"
-# "clau %3$s de %2$u bits, ID %4$08lX, creada en %5$s%6$s\n"
-# jm
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Necessiteu la contrasenya per desbloquejar la clau secreta de l'usuari:\n"
-"«%.*s»\n"
-"clau de %u bits, %s, ID %08lX, creada en %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Introduïu contrasenya\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Repetiu contrasenya\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "contrasenya massa llarga\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "resposta invàlida del agent\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "cancel·lat per l'usuari\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "hi ha un problema amb l'agent: l'agent ha tornat 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Necessiteu la contrasenya per desbloquejar la clau secreta de\n"
-"l'usuari: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "clau %2$s de %1$u bits, ID %3$08lX, creada en %4$s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "no es pot demanar la contrasenya en mode batch\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Introduïu contrasenya: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Repetiu contrasenya: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "les dades no s'han desat; useu l'opció \"--output\" per desar-les\n"
-
-#: g10/plaintext.c:108
-#, fuzzy, c-format
-msgid "error creating `%s': %s\n"
-msgstr "error en la lectura de «%s»: %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Signatura separada.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Introduïu el nom del fitxer de dades: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "llegint stdin...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "no hi ha dades signades\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "no s'han pogut obrir les dades signades `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, fuzzy, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinatari anònim; es provarà la clau secreta %08lX...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "d'acord, som el destinatari anònim.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "la codificació antiga del DEK no està suportada\n"
-
-#: g10/pubkey-enc.c:178
-#, fuzzy, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "l'algoritme de xifratge %d és desconegut o està desactivat\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "NOTA: no s'ha trobat l'algoritme de xifratge %d en les preferències\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTA: la clau secreta %08lX caduca el %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "clau %08lX: aquesta clau ha estat revocada!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "sol·licitud de la clau %08lX de %s...\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "no s'ha pogut obtenir del servidor la clau: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "error mentre s'enviava a `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "l'enviament a `%s' ha tingut èxit (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "l'enviament a `%s' ha fallat: status=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr ""
-
-#: g10/hkp.c:565
-#, fuzzy, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "no s'ha pogut obtenir del servidor la clau: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "parts de la clau secreta no estan disponbles\n"
-
-#: g10/seckey-cert.c:59
-#, fuzzy, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "l'algoritme de protecció %d no està suportat\n"
-
-#: g10/seckey-cert.c:224
-#, fuzzy
-msgid "Invalid passphrase; please try again"
-msgstr "La contrasenya no és vàlida; torneu a intentar-ho...\n"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr ""
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "ALERTA: la clau és feble; per favor, canvieu la contrasenya.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"esta és una clau ElGamal generada per PGP que NO és segura per a "
-"signatures!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "la clau pública és %lu segons posterior a la signatura\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "la clau pública és %lu segons posterior a la signatura\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n"
-"amb el rellotge)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n"
-"amb el rellotge)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTA: la clau de signatura %08lX va caducar el %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"es supossa una signatura incorrècta a causa d'un bit crític desconegut\n"
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "No s'ha pogut comprovar la signatura creada: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s signatura de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "ALERTA: «%s» és un fitxer buit\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "no s'ha pogut creat %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: no s'ha trobat l'algoritme de xifratge %d en les preferències\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "signatura:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:1029
-#, fuzzy, c-format
-msgid "%s encryption will be used\n"
-msgstr "ha fallat el desxifratge: %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "no es poden manejar línies més llargues de %d caràcters\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "la línia d'entrada és superior a %d caràcters\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "reg de la base de dades de confiança %lu: ha fallat lseek: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr ""
-"reg de la base de dades de confiança %lu: ha fallat la escriptura (n=%d): %"
-"s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transacció de la base de dades de confiança massa gran\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: no s'ha pogut accedir: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: el directori no existeix!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: no s'ha pogut crear el bloqueig\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, fuzzy, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: no s'ha pogut crear el bloqueig\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: no s'ha pogut crear: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: no s'ha pogut crear un registre de versió: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: s'ha creat una base de dades de confiança invàlida\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: s'ha creat la base de dades de confiança\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: base de dades de confiança invàlida\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: no s'ha pogut crear la taula hash: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: error al actualitzar el registre de la versió: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: error al llegir el registre de la versió: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: error al escriure el registre de la versió: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "base de dades de confiança: ha fallat lseek: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "base de dades de confiança: ha fallat la lectura (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s no és un fitxer de base de dades de confiança\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: registre de versió amb número de registre %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versió de fitxer %d invàlid\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: error al llegir el registre lliure: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: error al escriure el registre de directoris: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: no s'ha pogut posar a zero un registre: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: no s'ha pogut afegir un registre: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"la base de dades de confiança està corrompuda; per favor, executeu «gpg --"
-"fix-trustdb».\n"
-
-#: g10/trustdb.c:200
-#, fuzzy, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "«%s» no és un ID de clau llarg vàlid\n"
-
-#: g10/trustdb.c:235
-#, fuzzy, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "clau %08lX: acceptada com a clau fiable.\n"
-
-#: g10/trustdb.c:274
-#, fuzzy, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "clau %08lX: no es pot introduir en la base de dades de confiança\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"clau %08lX: no hi ha una clau pública per a la clau fiable - ignorada\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "registre de confiança %lu, tipus %d: no s'ha pogut llegir: %s\n"
-
-#: g10/trustdb.c:338
-#, fuzzy, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "registre de confiança %lu: no s'ha pogut eliminar: %s\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "registre de confiança %lu, tipus %d: no s'ha pogut escriure: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "base de dades de confiança: no s'ha pogut sincronitzar: %s\n"
-
-#: g10/trustdb.c:468
-#, fuzzy
-msgid "no need for a trustdb check\n"
-msgstr "%s no és un fitxer de base de dades de confiança\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, fuzzy, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "reg de la base de dades de confiança %lu: ha fallat lseek: %s\n"
-
-#: g10/trustdb.c:779
-#, fuzzy
-msgid "checking the trustdb\n"
-msgstr "canvia la confiança"
-
-#: g10/trustdb.c:933
-#, fuzzy, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "no s'ha trobat la clau pública"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"no s'ha pogut verificar la signatura.\n"
-"Recordeu que el fitxer de signatura (.sig o .asc)\n"
-"ha de ser el primer que figure en la línia d'ordres.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "línia d'entrada %u massa llarga o hi falta LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"la clau no està marcada com a insegura - no es pot utilitzar amb el GNA "
-"fals!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "«%s» ignorat: duplicat\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "«%s» ignorat: %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "ignorat: clau secreta ja present\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"Ignorada «%s»: és una clau ElGamal generada per PGP que no és segura per a "
-"signatures!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "El fitxer «%s» existeix. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Sobreescriure? (s/N) "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: sufix desconegut\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Introduïu el nou nom del fitxer"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "escrivint en stdout\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "es supossa que les dades s'han signat amb «%s»\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: s'ha creat el nou fitxer d'opcions\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: no s'ha pogut crear el directori: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: directori creat\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"ATENCIÓ: el missatge s'ha xifrat amb una clau feble durant el xifratge\n"
-"simètric.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problema al manejar un paquet xifrat\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "s'hi ha creat una clau feble - reintent\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"no s'ha pogut evitar una clau feble per a xifratge simètric;\n"
-"hi ha hagut %d intents!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "no es pot fer això en el mode per lots sense «--yes»\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Esborrar aquesta clau de l'anell? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "És una clau secreta! Voleu esborrar-la? "
-
-# fuzzy... jm
-# (esborra aquest comentari i tal)
-#: g10/delkey.c:168
-#, fuzzy, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "no s'ha pogut enumerar els blocs de claus: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, fuzzy, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "hi ha una clau secreta per a aquesta clau pública!\n"
-
-#: g10/delkey.c:208
-#, fuzzy
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "utilitzeu l'opció «--delete-secret-key» per a eliminar-la primer.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"L'assignació d'un valor ací és cosa vostra; aquest valor mai s'exportarà\n"
-"a cap tercer. Ho necessitem per a implementar la xarxa de confiança; no te\n"
-"res a veure amb la xarxa de certificats (creada implícitament)."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Si voleu utilitzar aquesta clau revocada de totes maneres, dieu «sí»."
-
-# fuzzy, "clau no confiable"? jm
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Si voleu utilitzar aquesta clau no confiable de totes maneres, dieu «sí»."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Introduïu l'ID d'usuari de la persona a qui voleu enviar el missatge."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Seleccioneu l'algoritme a utilitzar.\n"
-"\n"
-"DSA (també conegut com DSS) és el algoritme de signatura digital que només\n"
-"pot ser utilitzat per a signatures. Aquest és el algoritme suggerit perque\n"
-"la comprovació de signatures DSA és molt més ràpida que les de ElGamal.\n"
-"\n"
-"ElGamal és un algoritme que es pot utilitzar per a signatures i xifrat.\n"
-"OpenPGP distingueix entre 2 variants d'aquest algoritme: una de només "
-"xifrat\n"
-"i una de signatura+xifrat; en veritat és el mateix, però alguns paràmentres\n"
-"han de seleccionar-se d'una manera especial per a crear claus més segures\n"
-"per a signatures: aquest programa fa açò, però altres implementacions\n"
-"d'OpenPGP no estan obligades a entendre la variant signatura+xifrat.\n"
-"\n"
-"La primera clau (primària) ha de ser sempre una clau que siga capaç de "
-"signar;\n"
-"aquesta és la raó per la que la clau de només encriptació ElGamal no està\n"
-"disponible en aquest menú."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Encara que aquestes claus estan definides en RFC2440, no es recomanen\n"
-"Perquè no tots els programes hi poden treballar i perquè les\n"
-"signatures que generen són molt llargues i lentes de verificar."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Introduïu la grandària de la clau"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Contesteu «sí» o «no»"
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Introduïu el valor requerit tal i com es mostra en l'indicatiu.\n"
-"És possible introduir una data USO (AAAA-MM-DD) però no rebreu\n"
-"una bona resposta d'error - en canvi, el sistema tractarà d'interpretar\n"
-"el valor donat com un interval."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Introduïu el nom del propietari de la clau"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "introduïu una adreça de correu (opcional però molt recomanable)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Introduïu un comentari opcional"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N canvia el nom.\n"
-"C canvia el comentari.\n"
-"E canvia l'adreça de correu electrònic.\n"
-"O continua la generació de les claus.\n"
-"Q ix."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Contesteu «sí» (o només «s») si és correcte generar la subclau."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Contesteu «sí» si voleu signar TOTS els ID d'usuari"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Contesteu «sí» si realment voleu eliminar aquest ID d'usuari.\n"
-"Tots els certificats també es perdran!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Contesteu «sí» si és correcte eliminar la subclau"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Aquesta és una signatura vàlida en la clau; normalment no voldreu\n"
-"eliminar aquesta signatura perque pot ser important per a establir\n"
-"una connexió de confiança a la clau o a un altra clau certificada\n"
-"per aquesta clau."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Aquesta signatura no es pot comprovar perque no teniu la clau\n"
-"corresponent. Haurieu de pospossar la seua eliminació fins que\n"
-"sapigueu quina clau es va utilitzar ja que aquesta clau de signatura\n"
-"podria establir una connexió de confiança a través d'una altra clau ja\n"
-"certificada."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"La signatura no és vàlida. Té sentit que l'elimineu de l'anell\n"
-"de claus."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Aquesta és una signatura que enllaça el ID de l'usuari a la clau.\n"
-"Normalment no és una bona idea eliminar una signatura com aquesta.\n"
-"Actualment, GnuPG podria no poder utilitzar aquesta clau de nou, així\n"
-"que feu açò només si la auto-signatura no és vàlida per alguna raó i\n"
-"hi ha una segona disponible."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-
-#: g10/helptext.c:244
-#, fuzzy
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr ""
-"Introduïu la contrasenya; aquesta ha de ser una frase secreta \n"
-" Blurb, blurb..."
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Per favor, repetiu l'última contrasenya per confirmar-la."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Doneu el nom del fitxer al que s'aplica la signatura"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Contesteu «sí» si és correcte sobreescriure el fitxer"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Introduïu un nom de fitxer. Si premeu RETURN s'hi usarà el fitxer\n"
-"predeterminat (apareix entre claudàtors)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Haurieu d'especificar una raó per a la certificació. Depenent en el\n"
-"context teniu l'habilitat de triar d'aquesta llista:\n"
-" «La clau ha estat compromesa»\n"
-" Utilitzeu açò si teniu alguna raó per a creure que persones no\n"
-" autoritzades han tingut accés a la vostra clau secreta.\n"
-" «La clau ha estat reemplaçada»\n"
-" Utilitzeu açò si heu reemplaçat aquesta clau amb una més nova.\n"
-" «La clau ja no està en ús»\n"
-" Utilitzeu açò si heu retirat aquesta clau.\n"
-" «L'ID de l'usuari ja no és vàlid»\n"
-" Utilitzeu açò per a constatar que l'ID de l'usuari no s'hauria\n"
-" d'utilitzar més; açò s'utilitza normalment per a marcar una adreça\n"
-" de correu com invàlida.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Si voleu podeu introduir un text que descriga per què expediu aquest\n"
-"certificat de revocació. Per favor, sigueu concisos.\n"
-"Una línia buida indica el final del text.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "No hi ha ajuda disponible"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "No hi ha ajuda disponible per a `%s'"
-
-#: g10/keydb.c:178
-#, fuzzy, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
-
-#: g10/keydb.c:185
-#, fuzzy, c-format
-msgid "keyring `%s' created\n"
-msgstr "%s: anell creat\n"
-
-#: g10/keydb.c:575
-#, fuzzy, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "%s: no s'ha pogut crear la taula hash: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "ALERTA: hi ha 2 fitxers amb informació confidencial.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s és el que no ha canviat\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s és el nou\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Per favor, solucioneu aquest possible problema de seguretat\n"
-
-#: g10/keyring.c:1346
-#, fuzzy, c-format
-msgid "checking keyring `%s'\n"
-msgstr "no s'ha pogut tancar l'anell «%s»: %s\n"
-
-#: g10/keyring.c:1377
-#, fuzzy, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "fins ara s'han processat %lu claus\n"
-
-#: g10/keyring.c:1388
-#, fuzzy, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "llista claus i signatures"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: anell creat\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "heu d'executar GnuPG de nou perquè puga llegir el nou fitxer d'opcions\n"
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "massa bits aleatoris sol·licitats; el límit és %d\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NOMS]|comprova la base de dades de confiança"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOM=VALOR|usa aquesta notació de dades"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key user-id"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key user-id"
-
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key user-id"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "el primer caràcter de la notació ha de ser una lletra o un subratllat\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "els punts han d'estar envoltat per altres caràcters\n"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "Si voleu més informació vegeu http://www.gnupg.org"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Empremta digital:"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "sSmMqQ"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No s'ha trobat un camí de confiança vàlid a la clau. Vegem si podem\n"
-#~ "assignar valors de confiança no assignats.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No s'ha trobat un camí que condueixe a una de les nostres claus.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No s'han trobat certificats amb confiança no definida.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No s'ha canviat cap valor de confiança.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr ""
-#~ "%08lX: no hi ha informació per a calcular una probabilitat de confiança\n"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Introduïu el nom d'usuari: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "ignorat: la clau pública ja s'ha especificat amb --encrypt-to\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: error en la comprovació de la clau: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "Segur que voleu crear una clau de signatura i xifratge? "
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Realment necessiteu una clau tan llarga? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: no s'ha trobat l'usuari: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "problema en la lectura del certificat: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr ""
-#~ "massa entrades en la memòria cau de claus desconegudes - desactivada\n"
-
-#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
-#~ msgstr "clau secreta %08lX no importada (utilitzeu %s per a permitir-ho)\n"
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "clau %08lX: la nostra còpia no té auto-signatura\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: no s'ha trobat l'usuari\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "ha fallat l'actualització de la base de dades de confiança: %s\n"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "no es coneix cap servidor de claus (useu l'opció \"--keyserver\")\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: no és un ID vàlid\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "es suposa MDC erroni a causa d'un bit crític desconegut\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "error al llegir el registre de directori per al LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: s'esperava registre de directori, s'ha obtingut %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "no hi ha una clau primària per al LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "error al llegir clau primària per al LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: ha fallat search_record: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "clau %08lX: la consulta del registre ha fallat\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "clau %08lX: ja es troba en la taula de claus de confiança\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "NOTE: la clau secreta %08lX no està protegida.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "clau %08lX: les claus pública i secreta no coincideixen\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "no s'ha pogut enumerar les claus secretes: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "clau %08lX.%lu: Enllaç de subclau correcta\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "clau %08lX.%lu: Enllaç de subclau invàlid: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "clau %08lX.%lu: Revocació de clau vàlida\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "clau %08lX.%lu: Revocació de clau invàlida: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Auto-signatura correcta"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Auto-signatura invàlida"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Revocació d'ID d'usuari vàlida ignorada degut a una auto-signatura més "
-#~ "recent"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Revocació d'ID d'usuari vàlida"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Revocació d'ID d'usuari invàlida"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Certificat de revocació vàlid"
-
-#~ msgid "Good certificate"
-#~ msgstr "Certificat correcte"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Certificat de revocació invàlid"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Certificat invàlid"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "el registre de signatura %lu[%d] apunta a un registre incorrecte.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "certificat duplicat: esborrat"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir ha fallat: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: la inserció ha fallat: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: la inserció ha fallat: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: inserit\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "error al llegir el registre de directori: %s\n"
-
-#~ msgid "\t%lu keys with errors\n"
-#~ msgstr "\t%lu claus amb errors\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu claus inserides\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: registre de directori sense clau - ignorat\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\\t%lu degut a noves claus públiques\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu claus ignorades\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu clau actualitzades\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Ooops, no hi ha claus\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Ooops, no hi ha IDs\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: ha fallat la cerca en el registre de directori: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr ""
-#~ "clau %08lX: ha fallat la inserció en la base de dades de confiança: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "clau %08lX.%lu: inserida en la base de dades de confiança\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "clau %08lX.%lu: creada en el futur (salt en el temps o problema de\n"
-#~ "rellotge)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "clau %08lX.%lu: caducada el %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "clau %08lX.%lu: ha fallat la verificació de confiança: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "problema al cercar «%s» en la base de dades de confiança: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr ""
-#~ "l'usuari «%s» no està en la base de dades de confiança - inserint-lo\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "no s'ha pogut posar «%s» en la base de dades de confiança - %s\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr "AVÍS: encara no es poden manejar registres de prefències llargs\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: no s'ha creat l'anell: %s\n"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "No es poden usar claus RSA en aquesta versió\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "No hi ha clau per a l'usuari\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "No hi ha usuari per a la clau\n"
-
-#~ msgid "invalid"
-#~ msgstr "invàlida"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "no hi ha clau secreta disponible per al desxifratge\n"
diff --git a/po/cs.po b/po/cs.po
deleted file mode 100644
index d77d6f385..000000000
--- a/po/cs.po
+++ /dev/null
@@ -1,4716 +0,0 @@
-# GnuPG Czech translation
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-# Magda Procházková <magda@math.muni.cz>, Roman Pavlik <rp@tns.cz> 2001, 2002.
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg-1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-04-20 10:20+0200\n"
-"Last-Translator: Roman Pavlik <rp@tns.cz>\n"
-"Language-Team: Czech <translations.cs@gnupg.cz>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "VAROVÁNÍ: Pou¾ívaná pamì» není bezpeèná!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "Více informací naleznete na adrese http://www.gnupg.cz/faq.html\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "provést operaci není mo¾né bez inicializované bezpeèné pamìti\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(pravdìpodobnì jste pro tento úkol pou¾ili nesprávný program)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "ano"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "aAyY"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "ne"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "ukonèit"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "uUqQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "obecná chyba"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "neznámý typ paketu"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "neznámá verze"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "neznámý algoritmus veøejného klíèe"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "neznámý hashovací algoritmus"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "¹patný veøejný klíè"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "¹patný tajný klíè"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "¹patný podpis"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "chyba kontrolního souètu"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "¹patné heslo"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "veøejný klíè nenalezen"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "neznámý ¹ifrovací algoritmus"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "nemohu otevøít soubor klíèù"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "neplatný paket"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "neplatný zpùsob reprezentace v ASCII"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "neexistuje u¾ivatel s tímto id"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "tajný klíè není dostupný"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "je pou¾it ¹patný tajný klíè"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "nepodporováno"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "¹patný klíè"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "chyba pøi ètení souboru"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "chyba pøi zápisu souboru"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "neznámý kompresní algoritmus"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "chyba pøi otvírání souboru"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "chyba pøi vytváøení souboru"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "nesprávné heslo"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmus veøejného klíèe není implementován"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "¹ifrovací algoritmus není implementován"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "neznámá tøída podpisu"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "chyba v databázi dùvìry"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "¹patné MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "omezení zdrojù"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "neplatný soubor klíèù"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "¹patný certifikát"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "¹patný formát id u¾ivatele"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "chyba pøi zavírání souboru"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "chyba pøi pøejmenování souboru"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "chyba pøi mazání souboru"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "neoèekávaná data"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "konflikt èasového razítka"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "nepou¾itelný algoritmus s veøejným klíèem"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "soubor existuje"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "slabý klíè"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "neplatný argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "¹patné URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "toto URI není podporováno"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "chyba sítì"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "neza¹ifrováno"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "nezpracováno"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "nepou¾itelný veøejný klíè"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "nepou¾itelný tajný klíè"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "chyba serveru klíèù"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... toto je chyba v programu (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "nalezena chyba v programu ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "nemohu otevøít `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "nemohu pou¾ít pøíkaz stat na `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' není normální soubor - ignoruji\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "poznámka: soubor random_seed je prázdný\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "varování: neplatná velikost random_seed - soubor nepou¾it\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "nemohu èíst `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "poznámka: soubor random_seed není aktualizován\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "nemohu vytvoøit `%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "nemohu zapisovat do `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "nemohu zavøít `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "VAROVÁNÍ: pou¾itý generátor náhodných èísel není bezpeèný!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Generátor náhodných èísel je pouze atrapa, aby program mohl bì¾et,\n"
-"v ¾ádném pøípadì není kryptograficky bezpeèný!\n"
-"\n"
-"NEPOU®ÍVEJTE JAKÁKOLIV DATA VYTVOØENÁ TÍMTO PROGRAMEM!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Nedostatek náhodných bajtù. Prosím, pracujte s operaèním systémem, abyste\n"
-"mu umo¾nili získat více entropie (je potøeba %d bajtù).\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Pøíkazy:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[soubor]|vytvoøit podpis"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[soubor]|vytvoøit podpis v èitelném dokumentu"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "vytvoøit podpis oddìlený od dokumentu"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "¹ifrovat data"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[soubor]|¹ifrovat soubor"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "¹ifrování pouze se symetrickou ¹ifrou"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "pouze ulo¾ení"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "de¹ifrovat data (implicitnì)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[soubor]|de¹ifrovat soubor"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verifikovat podpis"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "vypsat seznam klíèù"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "vypsat seznam klíèù a podpisù"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "zkontrolovat podpisy klíèù"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "vypsat seznam klíèù a fingerprintù"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "vypsat seznam tajných klíèù"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "vytvoøit nový pár klíèù"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "odstranit klíè ze souboru veøejných klíèù"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "odstranit klíè ze souboru tajných klíèù"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "podepsat klíè"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "podepsat klíè lokálnì"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "podepsat klíè bez mo¾nosti revokace podpisu"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr ""
-"podepsat klíè lokálnì a bez mo¾nosti\n"
-" revokace podpisu"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "podepsat nebo modifikovat klíè"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "vytvoøit revokaèní certifikát"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exportovat klíèe"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exportovat klíèe na server klíèù"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importovat klíèe ze serveru klíèù"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "vyhledat klíèe na serveru klíèù"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "aktualizovat v¹echny klíèe ze serveru klíèù"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importovat/slouèit klíèe"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "vypsat pouze poøadí paketù"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr ""
-"exportovat hodnoty dùvìryhodnosti\n"
-" vlastníka klíèe"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr ""
-"importovat hodnoty dùvìryhodnosti\n"
-" vlastníka klíèe"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "aktualizovat databázi dùvìry"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "neinteraktivní aktualizace databáze dùvìry"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "opravit naru¹enou databázi dùvìry"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Dekódovat ASCII soubor nebo std. vstup"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Zakódovat soubor nebo std. vstup do ASCII"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [soubory]|vypi¹ hash"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Mo¾nosti:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "vytvoø výstup zakódovaný pomocí ASCII"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|JMÉNO|¹ifrovat pro JMÉNO"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|JMÉNO|pou¾ít JMÉNO jako implicitního adresáta"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr ""
-"pou¾ít implicitní klíè jako implicitního\n"
-" adresáta"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr ""
-"pou¾ít tento id u¾ivatele pro podepsání\n"
-" nebo de¹ifrování"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr ""
-"|N|nastavit úrovìò komprimace N (0 - ¾ádná\n"
-" komprimace)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "pou¾ít kanonický textový mód"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "pou¾ít jako výstupní soubor"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "s dodateènými informacemi"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "být o trochu víc tichý"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "vùbec nepou¾ívat terminál"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "vynutit podpisy verze 3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "nevynucovat podpisy verze 3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "vynutit podpisy verze 4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "nevynucovat podpisy verze 4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "pro ¹ifrování v¾dy pou¾ít MDC"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "pro ¹ifrování nikdy nepou¾ít MDC"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "neprovádìt ¾ádné zmìny"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "pou¾ijte gpg-agenta"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "dávkový re¾im: nikdy se na nic neptat"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "automaticky odpovìdìt ANO na vìt¹inu otázek"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "automaticky odpovìdìt NE na vìt¹inu otázek"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr ""
-"pøidat tento soubor klíèù do seznamu\n"
-" pou¾ívaných souborù klíèù"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "pøidat tento soubor tajných klíèù do seznamu"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "uka¾ ve kterém souboru klíèù je vypsaný klíè"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|JMÉNO|pou¾ij JMÉNO jako implicitní tajný klíè"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr ""
-"|POÈÍTAÈ|pou¾ij tento server klíèù pro vyhledávání\n"
-" klíèù"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|JMÉNO|nastav znakovou sadu terminálu na JMÉNO"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "èíst nastavení ze souboru"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|zapsat informace o stavu do tohoto FD"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[SOUBOR]|zapi¹ informaci o stavu do SOUBORu"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KLÍÈ|úplnì dùvìøovat tomuto klíèi"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|SOUBOR|nahrát roz¹iøující modul SOUBOR"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emulovat mód popsaný v RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"nastav v¹echny vlastnosti paketù, ¹ifer\n"
-" a hashù jako v OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"nastav v¹echny vlastnosti paketù, ¹ifer\n"
-" a hashù jako v PGP 2.x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|pou¾ít mód hesla N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|ALG|pou¾ít hashovací algoritmus ALG pro hesla"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|ALG|pou¾ít ¹ifrovací algoritmus ALG pro hesla"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|ALG|pou¾ít ¹ifrovací algoritmus ALG"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|ALG|pou¾ít hashovací algoritmus ALG"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|pou¾ít kompresní algoritmus N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr ""
-"zahodit identifikátor klíèe z ¹ifrovaných\n"
-" paketù"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Zobrazit fotografický ID"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Nezobrazovat fotografický ID"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-"Nastavit pøíkazový øádek k prohlí¾ení\n"
-" fotografického ID"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Pou¾ijte manuálové stránky pro kompletní seznam v¹ech pøíkazù a mo¾ností)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-" -se -r Bob [soubor] podepsat a za¹ifrovat pro u¾ivatele Bob\n"
-" --clearsign [soubor] vytvoøit podpis èitelného dokumentu\n"
-" --detach-sign [soubor] vytvoøit podpis oddìlený od dokumentu\n"
-" --list-keys [jména] vypsat klíèe\n"
-" --fingerprint [jména] vypsat fingerprinty \n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr ""
-"Chyby oznamte, prosím, na adresu <gnupg-bugs@gnu.org>.\n"
-"Pøipomínky k pøekladu <translations.cs@gnupg.cz>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Pou¾ití: gpg [mo¾nosti] [soubory] (-h pro pomoc)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Syntaxe: gpg [mo¾nosti] [soubory]\n"
-"podepsat, ovìøit, ¹ifrovat nebo de¹ifrovat\n"
-"implicitní operace závisí na vstupních datech\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Podporované algoritmy:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "u¾ití: gpg [mo¾nosti]"
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "konfliktní pøíkazy\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "VAROVÁNÍ: vlastnictví pro %s nastaveno nebezpeènì \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "VAROVÁNÍ: pøístupová práva pro %s nejsou nastavena bezpeènì \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "VAROVÁNÍ: vlastnictví pro %s nastaveno nebezpeènì \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "VAROVÁNÍ: pøístupová práva pro %s nejsou nastavena bezpeènì \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "POZNÁMKA: neexistuje implicitní soubor s mo¾nostmi `%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "POZNÁMKA: neexistuje implicitní soubor s mo¾nostmi `%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "soubor s mo¾nostmi `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "ètu mo¾nosti z `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s není platná znaková sada\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "nelze pou¾ít URI serveru klíèù - chyba analýzy URI\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "VAROVÁNÍ: pou¾ívání paralteru %s se nedoporuèuje.\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "neplatný zpùsob reprezentace v ASCII"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "VAROVÁNÍ: pou¾ívání paralteru %s se nedoporuèuje.\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "neplatný soubor klíèù"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "nelze nastavit exec-path na %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "VAROVÁNÍ: program mù¾e vytvoøit soubor core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "VAROVÁNÍ: %s pøepí¹e %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "POZNÁMKA: %s není pro normální pou¾ití!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "Není dovoleno pou¾ívat %s s %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s nedává s %s smysl!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"v módu --pgp2 mù¾ete vytváøet pouze oddìlené podpisy nebo podpisy èitelné "
-"jako text\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "v módu --pgp2 nelze souèasnì ¹ifrovat a podepisovat\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "v módu --pgp2 musíte pou¾ít soubor (ne rouru).\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "¹ifrování zpráv v módu --pgp2 vy¾aduje algoritmus IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "tato zpráva není pro PGP 2.x pou¾itelná\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "vybraný ¹ifrovací algoritmus je neplatný\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "vybraný hashovací algoritmus je neplatný\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "vybraný hashovací algoritmus je neplatný\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "kompresní algoritmus musí být v rozmezí %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "polo¾ka completes-needed musí být vìt¹í ne¾ 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "polo¾ka marginals-needed musí být vìt¹í ne¾ 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "polo¾ka max-cert-depth musí být v rozmezí od 1 do 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "POZNÁMKA: jednoduchý mód S2K (0) je dùraznì nedoporuèován\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "neplatný mód S2K; musí být 0, 1 nebo 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "neplatná implicitní úroveò kontroly; musí být 0, 1, 2 nebo 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "neplatné pøedvolby \n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "neplatné pøedvolby \n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "neplatné pøedvolby \n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "neplatné pøedvolby \n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "nemohu inicializovat databázi dùvìry: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [jméno souboru]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [jméno souboru]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [jméno souboru]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [jméno souboru]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [jméno souboru]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [jméno souboru]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [jméno souboru]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [jméno souboru]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key id u¾ivatele"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key id u¾ivatele"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key id u¾ivatele"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key id u¾ivatele"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id u¾ivatele [pøíkazy]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "nelze otevøít %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [id u¾ivatele] [soubor s klíèi (keyring)]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "dekódování z ASCII formátu selhalo: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "kódování do ASCII formátu selhalo: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "neplatný hashovací algoritmus `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[jméno souboru]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Zaènìte psát svou zprávu ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "nelze otevøít `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"jméno mù¾e obsahovat pouze písmena, èíslice, teèky nebo podtr¾ítka a konèit "
-"s '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "hodnota nemù¾e obsahovat ¾ádné kontrolní znaky\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "zadané URL pro certifikaèní politiku je neplatné\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "zadané URL pro podepisovací politiku je neplatné\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "ASCII kódování: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "neplatná hlavièka ASCII kódování: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "ASCII hlavièka: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "neplatná hlavièka podpisu v èitelném formátu\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "vnoøené podpisy v èitelném formátu\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "nesprávné oznaèení øádku mínusy: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "neoèekávané kódování ASCII:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "neplatný znak formátu radix64 %02x byl pøeskoèen\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "pøedèasný konec souboru (¾ádné CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "pøedèasný konec souboru (¾ádné CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "¹patný formát CRC\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "Chyba CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "pøedèasný konec souboru (v patièce)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "chyba v patièce\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "nenalezena ¾ádná platná data ve formátu OpenPGP.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "neplatné kódování ASCII: øádek je del¹í ne¾ %d znakù\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"neplatný znak (quoted-printable) v ASCII kódování - pravdìpodobnì byl pou¾it "
-"¹patný MTA\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Dùvod nebyl specifikován"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Klíè je nahrazen"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Klíè byl zkompromitován"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Klíè se ji¾ nepou¾ívá"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Identifikátor u¾ivatele ji¾ neplatí"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Dùvod pro revokaci: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Revokaèní poznámka: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMuUqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"K není pøiøazena ¾ádná hodnota dùvìry:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Prosím rozhodnìte, nakolik dùvìøete tomuto u¾ivateli, ¾e správnì\n"
-"verifikuje klíèe jiných u¾ivatelù (prohlédnutím cestovních pasù,\n"
-"kontrolou fingerprintù z rùzných zdrojù...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Nevím\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = Nedùvìøuji\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Dùvìøuji èásteènì\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Dùvìøuji úplnì\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Dùvìøuji absolutnì\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = prosím o více informací\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = zpìt do hlavního menu\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = pøeskoèit tento klíè\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " u = ukonèit\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Va¹e rozhodnutí? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Opravdu chcete nastavit pro tento klíè absolutní dùvìru? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certifikáty vedoucí k finálnímu dùvìryhodnému klíèi:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "klíè %08lX: klíè byl revokován\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Pou¾ít pøesto tento klíè? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "klíè %08lX: podklíè byl revokován!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: skonèila platnost klíèe\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Nic nenaznaèuje tomu, ¾e tento podpis patøí vlastníkovi klíèe.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: NEdùvìøujeme tomuto klíèi!\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Není jisté, zda tento podpis patøí vlastníkovi, pøesto je akceptován\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Tento klíè pravdìpodobnì nále¾í jeho majiteli\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Tento klíè nále¾í nám (máme odpovídající tajný klíè)\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"NENÍ jisté, zda tento klíè patøí osobì, která se vydává za jeho\n"
-"vlastníka. Pokud *skuteènì* víte, co dìláte, mù¾ete na otázku\n"
-"odpovìdìt ano\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "VAROVÁNÍ: Je pou¾it nedùvìryhodný klíè!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "VAROVÁNÍ: Tento klíè byl revokován svým vlastníkem!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " To mù¾e znamenat, ¾e podpis je padìlaný.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "VAROVÁNÍ: Tento podklíè byl revokován svým vlastníkem!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Poznámka: Tento klíè byl oznaèen jako neplatný (disabled).\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Poznámka: Skonèila platnost tohoto klíèe!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "VAROVÁNÍ: Tento klíè není certifikován dùvìryhodným podpisem!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Nic nenaznaèuje tomu, ¾e tento podpis patøí vlastníkovi klíèe.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "VAROVÁNÍ: NEdùvìøujeme tomuto klíèi!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Tento podpis je pravdìpodobnì PADÌLANÝ.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"VAROVÁNÍ: Tento klíè není certifikován dostateènì dùvìryhodnými podpisy!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Není jisté, zda tento podpis patøí vlastníkovi.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: pøeskoèeno: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: pøeskoèeno: veøejný klíè je ji¾ obsa¾en v databázi\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr ""
-"Nespecifikoval jste identifikátor u¾ivatele (user ID). Mù¾ete pou¾ít \"-r\"\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Napi¹te identifikátor u¾ivatele (user ID). Ukonèete prázdným øádkem: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Takový identifikátor u¾ivatele neexistuje.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "pøeskoèeno: veøejný klíè je u¾ nastaven podle implicitního adresáta\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Veøejný klíè je neplatný (disabled).\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "pøeskoèeno: veøejný klíè je ji¾ nastaven\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "neznámý implicitní adresát `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: pøeskoèeno: veøejný klíè je neplatný (disabled)\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "¾ádné platné adresy\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "pøedvolba %c%lu není platná\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "duplicita pøedvolby %c%lu\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "pøíli¹ mnoho `%c' pøedvoleb\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "neplatný znak v øetìzci s pøedvolbami\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "zapisuji podpis klíèe sebou samým\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "zapisuji podpis klíèe sebou samým\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "zapisuji \"key-binding\" podpis\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "neplatná délka klíèe; pou¾iji %u bitù\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "délka klíèe zaokrouhlena na %u bitù\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Prosím, vyberte druh klíèe, který chcete:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA a ElGamal (implicitní)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (pouze pro podpis)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (pouze pro ¹ifrování)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (pro ¹ifrování a podpis)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (pouze pro podpis)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (pouze pro ¹ifrování)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (pro ¹ifrování a podpis)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Vá¹ výbìr? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-"Pou¾ití tohoto algoritmu se ji¾ nedoporuèuje - chcete ho pøesto vytvoøit? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Neplatný výbìr.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Chystám se vytvoøit nový pár klíèù %s.\n"
-" minimální velikost klíèe je 768 bitù\n"
-" implicitní velikost klíèe je 1024 bitù\n"
-" nejvy¹¹í navrhovaná velikost klíèe je 2048 bitù\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Jakou velikost klíèe si pøejete? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "Klíè DSA musí mít velikost od 512 do 1024 bitù.\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr ""
-"velikost klíèe je pøíli¹ malá; minimální dovolená velikost pro RSA je 1024 "
-"bitù.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr ""
-"velikost klíèe je pøíli¹ malá; minimální dovolená velikost je 768 bitù.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "velikost klíèe je pøíli¹ velká; maximální dovolená hodnota je %d.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Velikosti klíèe vìt¹í jak 2048 bitù se nedoporuèují, proto¾e\n"
-"výpoèty pak trvají VELMI dlouho!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Opravdu chcete vytvoøit klíè této délky? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Dobøe, ale nezapomeòte, ¾e informace mohou být vyzrazeny z poèítaèe také "
-"elektromagnetickým vyzaøováním monitoru nebo klávesnice!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Po¾adovaná délka klíèe je %u bitù.\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "zaokrouhleno na %u bitù\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Prosím urèete, jak dlouho by klíè mìl platit.\n"
-" 0 = doba platnosti klíèe není omezena\n"
-" <n> = doba platnosti klíèe skonèí za n dní\n"
-" <n>w = doba platnosti klíèe skonèí za n týdnù\n"
-" <n>m = doba platnosti klíèe skonèí za n mìsícù\n"
-" <n>y = doba platnosti klíèe skonèí za n let\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Prosím urèete, jak dlouho by mìl podpis platit.\n"
-" 0 = doba platnosti podpisu není omezena\n"
-" <n> = doba platnosti podpisu skonèí za n dní\n"
-" <n>w = doba platnosti podpisu skonèí za n týdnù\n"
-" <n>m = doba platnosti podpisu skonèí za n mìsícù\n"
-" <n>y = doba platnosti podpisu skonèí za n let\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Klíè je platný pro? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Podpis je platný pro? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "neplatná hodnota\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "platnost %s neskonèí\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "platnost %s skonèí %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Vá¹ systém neumí zobrazit data po roce 2038.\n"
-"V ka¾dém pøípadì budou data korektnì zpracovávána do roku 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Je to správnì (a/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Aby bylo mo¾né rozpoznat Vá¹ klíè, musíte znát identifikátor u¾ivatele;\n"
-"program jej slo¾í z Va¹eho jména a pøíjmení, komentáøe a e-mailu\n"
-"v tomto tvaru:\n"
-" \"Magda Prochazkova (student) <magda@domena.cz>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Jméno a pøíjmení: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Neplatný znak ve jménì\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Jméno nemù¾e zaèínat èíslicí\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Jméno musí být dlouhé alespoò 5 znakù\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "E-mailová adresa: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Neplatná e-mailová adresa\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Komentáø: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Neplatný znak v komentáøi\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Pou¾íváte znakovou sadu `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Zvolil(a) jste tento identifikátor u¾ivatele:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Do pole jméno nebo komentáø nepi¹te, prosím, e-mailovou adresu.\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "jJkKeEPpUu"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Zmìnit (J)méno, (K)omentáø, (E)-mail nebo (U)konèit? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr ""
-"Zmìnit (J)méno, (K)omentáø, (E)-mail, (P)okraèovat dál nebo (U)konèit "
-"program? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Nejdøív, prosím, opravte chybu\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Pro ochranu Va¹eho tajného klíèe musíte zadat heslo.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "heslo není zopakováno správnì; zkuste to znovu"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Nechcete heslo - to *není* dobrý nápad!\n"
-"Dobøe, budu pokraèovat bez hesla. Kdykoliv mù¾ete heslo zmìnit pou¾itím\n"
-"tohoto programu s parametrem \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Musíme vytvoøit mnoho náhodných bajtù. Bìhem vytváøení mù¾ete\n"
-"provádìt nìjakou jinou práci na poèítaèi (psát na klávesnici, pohybovat "
-"my¹í,\n"
-"pou¾ívat disky); díky tomu má generátor lep¹í ¹anci získat dostatek "
-"entropie.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "Pár klíèù DSA bude dlouhý 1024 bitù.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Vytváøení klíèe bylo zru¹eno.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "zapisuji veøejný klíè do `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "zapisuji tajný klíè do `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "nenalezen zapisovatelný soubor veøejných klíèù (pubring): %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "nenalezen zapisovatelný soubor tajných klíèù (secring): %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "chyba pøi zápisu do souboru veøejných klíèù `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "chyba pøi zápisu do souboru tajných klíèù `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "veøejný a tajný klíè byly vytvoøeny a podepsány.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "klíè oznaèen jako absolutnì dùvìryhodný.\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Tento klíè nemù¾e být pou¾itý pro ¹ifrování. K vytvoøení\n"
-"sekundárního klíèe pro tento úèel mù¾ete pou¾ít pøíkaz \"--edit-key\".\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Vytvoøení klíèe se nepodaøilo: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"klíè byl vytvoøen %lu sekund v budoucnosti (do¹lo ke zmìnì èasu nebo\n"
-"je problém se systémovým èasem)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"klíè byl vytvoøen %lu sekund v budoucnosti (do¹lo ke zmìnì èasu nebo\n"
-"je problém se systémovým èasem)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "POZNÁMKA: vytvoøení podklíèe pro klíèe v3 není v souladu s OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Opravdu vytvoøit? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output pro tento pøíkaz není platný\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: nemohu otevøít: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "chyba pøi vytváøení hesla: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' je ji¾ zakomprimován\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: VAROVÁNÍ: soubor je prázdný\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"v módu --pgp2 mù¾ete ¹ifrovat pouze RSA klíèem o délce 2048 bitù a ménì\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "ètu z `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr "algoritmus IDEA nelze pou¾ít pro v¹echny klíèe, pro které ¹ifrujete.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "POZNÁMKA: v pøedvolbách nenalezen ¹ifrovací algoritmus %d\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Tento pøíkaz není v módù %s dovolený.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s za¹ifrovaný pro: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "klíè `%s' nenalezen: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "chyba pøi ètení bloku klíèe: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "klíè %08lX: není ve formátu RFC 2440 - pøeskoèeno\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "klíè %08lX: není chránìný - pøeskoèeno\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "klíè %08lX: PGP 2.x klíè - pøeskoèeno\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "VAROVÁNÍ: nebylo nic vyexportováno\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "pøíli¹ mnoho polo¾ek v bufferu veøejých klíèù - vypnuto\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[User ID not found]"
-
-# c-format
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Neplatný klíè %08lX zmìnìn na platný pomocí --always-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "pou¾ívám sekundární klíè %08lX místo primárního klíèe %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "klíè %08lX: tajný klíè bez klíèe veøejného - pøeskoèeno\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "blok typu %d byl pøeskoèen\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu klíèe byly doposud zpracovány\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "chyba pøi ètení `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Celkový poèet zpracovaných klíèù: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " pøeskoèeny nové klíèe: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " bez identifikátorù (user ID): %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importováno: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " beze zmìn: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nové id u¾ivatelù (user ID): %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nové podklíèe: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nové podpisy: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " nové revokace klíèù: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " pøeètené tajné klíèe: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " importované tajné klíèe: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "tajné klíèe nezmìnìny: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importováno: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "klíè %08lX: chybí identifikátor u¾ivatele\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "klíè %08lX: neexistuje podklíè pro vázání klíèù\n"
-
-# c-format
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "klíè %08lX: pøijat id u¾ivatele '%s',který není podepsán jím samým\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "klíè %08lX: chybí platný identifikátor u¾ivatele\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "mù¾e to být zpùsobeno chybìjícím podpisem klíèe jím samým\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "klíè %08lX: veøejný klíè nenalezen: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "klíè %08lX: nový klíè - pøeskoèen\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "nenalezen zapisovatelný soubor klíèù (keyring): %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "zapisuji do '%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "chyba pøi zápisu souboru klíèù (keyring) `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "klíè %08lX: veøejný klíè importován\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "klíè %08lX: neodpovídá na¹í kopii\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "klíè %08lX: nemohu najít originální blok klíèe: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "klíè %08lX: nemohu èíst originální blok klíèe: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "klíè %08lX: 1 nový identifikátor u¾ivatele\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "klíè %08lX: %d nových identifikátorù u¾ivatele\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "klíè %08lX: 1 nový podpis\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "klíè %08lX: %d nových podpisù\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "klíè %08lX: 1 nový podklíè\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "klíè %08lX: %d nových podklíèù\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "klíè %08lX: beze zmìn\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "není nastaven implicitní soubor tajných klíèù %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "klíè %08lX: tajný klíè importován\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "klíè %08lX: je ji¾ v souboru tajných klíèù\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "klíè %08lX: nenalezen tajný klíè: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"klíè %08lX: chybí veøejný klíè - nemohu aplikovat revokaèní certifikát\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "klíè %08lX: neplatný revokaèní certifikát: %s - zamítnuto\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "klíè %08lX: revokaèní certifikát importován\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "klíè %08lX: neexistuje id u¾ivatele pro podpis\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"klíè %08lX: nepodporovaný algoritmus veøejného klíèe u u¾ivatelského id \"%s"
-"\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr ""
-"klíè %08lX: neplatný podpis klíèe jím samým u u¾ivatelského id \"%s\"\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "klíè %08lX: neexistuje podklíè pro vázání klíèù\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "klíè %08lX: nepodporovaný algoritmus veøejného klíèe\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "klíè %08lX: neplatná vazba podklíèe\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "klíè %08lX: neplatná vazba podklíèe\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "klíè %08lX: neexistuje podklíè pro vázání klíèù\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "klíè %08lX: neplatná vazba podklíèe\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "klíè %08lX: neplatná vazba podklíèe\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "klíè %08lX: identifikátor u¾ivatele pøeskoèen '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "klíè %08lX: podklíè pøeskoèen\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "klíè %08lX: podpis není exportovatelný (tøída %02x) - pøeskoèeno\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "klíè %08lX: revokaèní certifikát na ¹patném místì - pøeskoèeno \n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "klíè %08lX: neplatný revokaèní certifikát: %s - pøeskoèen\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "klíè %08lX: revokaèní certifikát na ¹patném místì - pøeskoèeno \n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "klíè %08lX: objeven duplikovaný identifikátor u¾ivatele - slouèen\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"VAROVÁNÍ: klíè %08lX mù¾e být revokován: zkou¹ím získat revokaèní klíè %"
-"08lX\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"VAROVÁNÍ: klíè %08lX mù¾e být revokován: revokaèní klíè %08lX nenalezen.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "klíè %08lX: pøidán revokaèní certifikát\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "klíè %08lX: podpis klíèe jím samým (direct key signature)\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revokace]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[podpis klíèe jím samým]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 ¹patný podpis\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d ¹patných podpisù\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 podpis neovìøen, proto¾e chybí klíè\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d podpisù neovìøených, proto¾e chybí klíè\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 podpis neovìøen, proto¾e vznikla chyba\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d podpisù neovìøených, proto¾e vznikly chyby\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "objeven 1 identifikátor u¾ivatele bez platného podpisu jím samým\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "objeveno %d identifikátorù u¾ivatele bez platného podpisu jím samým\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "U¾ivatelské ID \"%s\" je revokováno."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Jste si jistý(á), ¾e stále chcete podpsat tento klíè? (a/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Nelze podepsat.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "VAROVÁNÍ: soubor `%s' je prázdný\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Va¹ souèasný podpis na \"%s\"\n"
-"je pouze lokální.\n"
-"\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Pøejete si jej zmìnit na plnì exportovatelný podpise? (a/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Va¹ souèasný podpis na \"%s\"\n"
-"je pouze lokální.\n"
-"\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "Pøejete si jej zmìnit na plnì exportovatelný podpise? (a/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" je ji¾ lokálnì podepsán klíèem %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" je ji¾ podepsán klíèem %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nic k podepsání klíèem %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Platnost klíèe vypr¹ela!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Platnost klíèe vypr¹í %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Chcete, aby platnost Va¹eho podpisu vypr¹ela ve stejnou dobu? (A/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"Nemù¾ete udìlat OpenPGP podpis klíèe typu PGP 2.x, kdy¾ jste v --pgp2 módu.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "To by zpùsobilo nepou¾itelnost klíèe v PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"S jakou jistotou jste provìøili, ¾e klíè, který chcete podepsat\n"
-"patøí vý¹e uvedené osobì.\n"
-"Pokud neznáte odpovìï, zadejte \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Neodpovím.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Nijak jsem to nekontroloval(a).%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Èáseènì jsem to ovìøil(a).%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Velmi peèlivì jsem to ovìøil(a).%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Jste si jistý(á), ¾e chcete podepsat tento klíè\n"
-"svým klíèem: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "mù¾e to být zpùsobeno chybìjícím podpisem klíèe jím samým\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Podpis bude oznaèen jako neexportovatelný.\n"
-"\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Podpis bude oznaèen jako neodvolatelný (non-revocable).\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Podpis bude oznaèen jako neexportovatelný.\n"
-"\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Podpis bude oznaèen jako neodvolatelný (non-revocable).\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Nijak jsem tento klíè neovìøil.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Èásteènì jsem ovìøil tento klíè.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Velmi peèlivì jsem ovìøil tento klíè.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Skuteènì podepsat? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "podepsání selhalo: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Tento klíè není chránìný.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Tajné èásti primárního klíèe nejsou dostupné.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Klíè je chránìný.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Není mo¾né editovat tento klíè: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Vlo¾te nové heslo (passphrase) pro tento tajný klíè.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Nechcete heslo - to *není* dobrý nápad!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Opravdu to chcete udìlat? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "pøesunuji podpis klíèe na správné místo\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "ukonèit toto menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "u"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "ulo¾it"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "ulo¾it a ukonèit"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "ukázat tuto pomoc"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "vypsat fingerprint"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "vypsat seznam klíèù a id u¾ivatelù"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "vyberte identifikátor u¾ivatele N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "vyberte sekundární klíè N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "vypsat seznam podpisù"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "podepsat klíè"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "podepsat klíè lokálnì"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "podepsat klíè bez mo¾nosti odvolat podpis (non-revocably)"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "podepsat klíè lokálnì a bez mo¾nosti odvolat podpis (non-revocably)"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "pøidat identifikátor u¾ivatele"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "pøidat fotografický ID"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "smazat identifikátor u¾ivatele"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "pøidat sekundární klíè"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "smazat sekundární klíè"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "pøidat sekundární klíè"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "smazat podpisy"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "zmìnit dobu platnosti"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primary"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "oznaèit u¾ivatelské ID jako primární"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "pøepnout mezi vypsáním seznamu tajných a veøejných klíèù"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "vypsat seznam pøedvoleb (pro experty)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "vypsat seznam pøedvoleb (podrobnì)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "nastavit seznam pøedvoleb"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "aktualizovat pøedvolby"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "zmìnit heslo"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "zmìnit dùvìryhodnost vlastníka klíèe"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revokovat podpisy"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revokovat sekundární klíè"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "nastavit klíè jako neplatný (disable)"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "nastavit klíè jako platný (enable)"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "ukázat fotografický ID"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "nelze provést v dávkovém módu\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "chyba pøi ètení bloku tajného klíèe `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Tajný klíè je dostupný.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Pøíkaz> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Pro provedení této operace je potøeba tajný klíè.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Prosím, nejdøíve pou¾ijte pøíkaz \"toggle\" (pøepnout).\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "Klíè revokován."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Opravdu podepsat v¹echny id u¾ivatele? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Nápovìda: Vyberte id u¾ivatele k podepsání\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Tento pøíkaz není v módù %s dovolený.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Musíte vybrat alespoò jeden id u¾ivatele.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Nemù¾ete smazat poslední id u¾ivatele!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Opravdu odstranit v¹echny vybrané id u¾ivatele? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Opravdu odstranit tento id u¾ivatele? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Musíte vybrat alespoò jeden klíè.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Opravdu chcete smazat vybrané klíèe? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Opravdu chcete smazat tento klíè? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Opravdu chcete revokovat vybrané klíèe? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Opravdu chcete revokovat tento klíè? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Opravdu aktualizovat pøedvoleby pro vybraný id u¾ivatele? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Opravdu aktualizovat pøedvolby? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Ulo¾it zmìny? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Ukonèit bez ulo¾ení? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "aktualizace selhala: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "aktualizace tajného klíèe selhala: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Klíè nebyl zmìnìn, tak¾e není potøeba jej aktualizovat.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Neplatný pøíkaz (zkuste \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Tento klíè mù¾e být revokován %s klíèem %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr "(citlivá informace)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX vytvoøen: %s platnost skonèí: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr "dùvìra: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Tento klíè byl oznaèen za neplatný (disabled)"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! podklíè byl revokován: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- nalezena padìlaná revokace\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problém ovìøení revokace: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Prosím nezapomeòte, ¾e zobrazované údaje o platnosti klíèù nemusí\n"
-"být správné, dokud znova nespustíte program.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"VAROVÁNÍ: Toto je PGP2 klíè. Pøidání fotografického ID mù¾e v nìkterých\n"
-" verzích PGP vést k odmítnutí tohoto klíèe.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Jste si jistý, ¾e jej chcete stále pøidat? (a/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Nemìli by jste pøidávat fotografický ID k PGP2 klíèi.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Smazat tento dobrý podpis? (a/N/u)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Smazat tento neplatný podpis? (a/N/u)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Smazat tento neznámý podpis? (a/N/u)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Opravdu smazat tento podpis podepsaný sebou samým? (a/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Smazán %d podpis.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Smazáno %d podpisù.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Nic nebylo smaznáno.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Vlo¾te délku klíèe"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Prosím, odstraòte výbìr z tajných klíèù.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Prosím, vyberte nejvý¹e jeden sekundární klíè.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Mìním dobu platnosti sekundárního klíèe.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Mìním dobu platnosti primárního klíèe.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Nemù¾ete zmìnit dobu platnosti klíèe verze 3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "V souboru tajných klíèù chybí odpovídající podpis\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Prosím, vyberte právì jeden id u¾ivatele .\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr ""
-"klíè %08lX: neplatný podpis klíèe jím samým u u¾ivatelského id \"%s\"\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Neexistuje identifikátor u¾ivatele s indexem %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Neexistuje sekundární klíè s indexem %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "id u¾ivatele: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"podepsáno Va¹ím klíèem %08lX v %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"lokálnì podepsáno Va¹ím klíèem %08lX v %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Platnost podpisu vypr¹í %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Jste si jistý, ¾e jej chcete stále revokovat? (a/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Vytvoøit pro tento podpis revokaèní certifikát? (a/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Podepsal(a) jste následující identifikátory u¾ivatele:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " podepsáno %08lX v %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revokováno %08lX v %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Chystáte se revokovat tyto podpisy:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " podepsáno %08lX v %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (nexeportovatelné)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Opravdu vytvoøit revokaèní certifikáty? (a/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "neexistuje tajný klíè\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Zobrazuji %s fotografický ID o velikosti %ld pro klíè 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Podepisovací politika: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Podepisovací politika: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "VAROVÁNÍ: nalezen neplatný formát zápisu datumu\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Podepisovací notace: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Podepisovací notace: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "není v pøímo èitelném formátu"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "soubor klíèù (keyring)"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [platnost skonèí: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "vypsat seznam klíèù a fingerprintù"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingerprint klíèe ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Fingerprint klíèe ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingerprint klíèe ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Fingerprint klíèe ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "neplatný hashovací algoritmus `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s za¹ifrovaná data\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "za¹ifrováno neznámým algoritmem %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "veøejný klíè je %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "data za¹ifrována veøejným klíèem: správný DEK\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "za¹ifrována %u-bitovým %s klíèem, ID %08lX, vytvoøeným %s\n"
-
-# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-(
-# [kw]
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "za¹ifrováno %s klíèem, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "de¹ifrování veøeným klíèem selhalo: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "pøedpokládám %s ¹ifrovaných dat\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-"algoritmus IDEA není dostupný; optimisticky se jej pokusíme nahradit "
-"algoritmem %s\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "de¹ifrování o.k.\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "VAROVÁNÍ: se za¹ifrovanou zprávou bylo manipulováno!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "de¹ifrování selhalo: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "POZNÁMKA: odesílatel po¾adoval (\"for-your-eyes-only\")\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "pùvodní jméno souboru='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr ""
-"samostatný revokaèní certifikát - pou¾ijte \"gpg --import\", chcete-li jej "
-"u¾ít\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notace: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Politika: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verifikace podpisu potlaèena\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "neumím pracovat s tìmito násobnými podpisy\n"
-
-# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-(
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr ""
-"Podpis vytvoøen %.*s pomocí %s klíèe s identifikátorem u¾ivatele %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "©PATNÝ podpis od \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Podpis s vypr¹enou platností od \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Dobrý podpis od \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[nejistý] "
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Nemohu ovìøit podpis: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "toto není podpis oddìlený od dokumentu\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "samostatný podpis tøídy 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "podpis starého typu (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "nalezen neplatný koøenový paket v proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "nemohu vypnout vytváøení core souborù: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Experimentální algoritmy by se nemìly pou¾ívat!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"tento ¹ifrovací algoritmus se nedoporuèuje; prosím, pou¾ijte nìjaký "
-"standardnìj¹í!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "IDEA modul pro GnuPG nenalezen\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"více informací naleznete v dokumentu http://www.gnupg.cz/why-not-idea.html\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "VAROVÁNÍ: pou¾ívání paralteru %s se nedoporuèuje.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "VAROVÁNÍ: pou¾ívání paralteru %s se nedoporuèuje.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "pu¾íjte místo nìj \"--keyserver-options %s\" \n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "nemohu pracovat s algoritmem veøejného klíèe %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "podpaket typu %d má nastavený kritický bit\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent není v tomto sezení dostupný\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "nemohu nastavit PID clienta pro gpg-agenta\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "nelze získat server read file descriptor pro agenta r\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "nezle získat server write file descriptor pro agenta\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "¹patný formát promìnné prostøedí GPG_AGENT_INFO\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "gpg-agent protokol verze %d není podporován\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "nemohu se pøipojit k `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problém v komunikaci s gpg-agentem\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problém s agentem - pou¾ívání agenta vypnuto\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (hlavní ID klíèe %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Potøebujete heslo, abyste odemknul(a) tajný klíè pro u¾ivatele:\n"
-"\"%.*s\"\n"
-"Klíè o délce %u bitù, typ %s, ID %08lX, vytvoøený %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Vlo¾it heslo\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Opakovat heslo\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "heslo je pøíli¹ dlouhé\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "neplatná reakce od agenta\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "zru¹eno u¾ivatelem\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problém s agentem: agent vrací 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Musíte znát heslo, abyste odemknul(a) tajný klíè pro\n"
-"u¾ivatele: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "délka %u bitù, typ %s, klíè %08lX, vytvoøený %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "v dávkovém re¾imu se nemohu ptát na heslo\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Vlo¾te heslo: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Opakujte heslo: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"data nebyla ulo¾ena; k jejich ulo¾ení pou¾ijte parametr pøíkazu \"--output"
-"\"\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "chyba pøi vytváøení `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Podpis oddìlený od dokumentu.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Prosím, vlo¾te název datového souboru: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "ètu standardní vstup ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "chybí podepsaná data\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "nemohu otevøít podepsaná data '%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "anonymní adresát; zkou¹ím tajný klíè %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "o.k., my jsme anonymní adresát.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "staré kódování DEK není podporováno\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "¹ifrovací algoritmus %d%s je neznámý nebo je zneplatnìn\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "POZNÁMKA: v pøedvolbách nenalezen ¹ifrovací algoritmus %d\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "POZNÁMKA: platnost tajného klíèe %08lX skonèila %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "klíè %08lX: klíè byl revokován\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "po¾aduji klíè %08lX z HKP serveru klíèù %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "nemohu dostat klíè ze serveru klíèù: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "chyba pøi posílání na `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "úspì¹né odeslání na `%s' (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "chyba odeslání na `%s': (status=%u)\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "vyhledávám \"%s\" na HKP serveru %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "nemohu prohledávat server klíèù: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "tajné èásti klíèe nejsou dostupné\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "ochranný algoritmus %d%s není podporován\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Neplatné heslo; prosím, zkuste to znovu"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "VAROVÁNÍ: Objeven slabý klíè - zmìòte, prosím, znovu heslo.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"generuji _nevhodný_ 16-ti bitový kontrolní souèet pro ochranu soukromého "
-"klíèe\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"toto je klíè algoritmu ElGamal vygenerovaný v PGP - podpisy jím vytvoøené "
-"NEJSOU bezpeèné!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "veøejný klíè je o %lu sekund novìj¹í ne¾ podpis\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "veøejný klíè je o %lu sekund novìj¹í ne¾ podpis\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"klíè byl vytvoøen %lu sekund v budoucnosti (do¹lo ke zmìnì èasu nebo\n"
-"je problém se systémovým èasem)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"klíè byl vytvoøen %lu sekund v budoucnosti (do¹lo ke zmìnì èasu nebo\n"
-"je problém se systémovým èasem)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "POZNÁMKA: podpisovému klíèi %08lX skonèila platnost %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "pøedpokládám ¹patný podpis, proto¾e je nastaven neznámý kritický bit\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"VAROVÁNÍ: nemohu %%-expandovat URL politiky (pøíli¹ dlouhé). Pou¾ity "
-"neexpandované.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"VAROVÁNÍ: nemohu %%-expandovat URL politiky (pøíli¹ dlouhé). Pou¾ity "
-"neexpandované.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "kontrola vytvoøeného podpisu se nepodaøila: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s podpis od: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "VAROVÁNÍ: soubor `%s' je prázdný\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "v módu --pgp2 mù¾ete pouze podepisovat s klíèi formátu PGP-2.x\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "%s: nemohu vytvoøit: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "POZNÁMKA: v pøedvolbách nenalezen ¹ifrovací algoritmus %d\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "podepisuji:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"v módu --pgp2 mù¾ete vytváøet jen èitelné podpisy s klíèi formátu PGP-2.x\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "bude pou¾ito ¹ifrování %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "nemohu pracovat s øádky del¹ími ne¾ %d znakù\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "vstupní øádek je del¹í ne¾ %d znakù\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "záznam v databázi dùvìry %lu: lseek() se nepodaøil: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "záznam v databázi dùvìry %lu: zápis se nepodaøil (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transakce s databází dùvìry je pøíli¹ dlouhá\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: nemohu pøistoupit k: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: adresáø neexistuje!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: nemohu vytvoøit zámek\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: nemohu zamknout\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: nemohu vytvoøit: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: nepodaøilo se vytvoøit záznam verze: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: vytvoøena neplatná databáze dùvìry\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: databáze dùvìry vytvoøena\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: neplatná databáze dùvìry\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: nepodaøilo se vytvoøit hashovací tabulku: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: chyba pøi aktualizaci záznamu verze: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: chyba pøi ètení záznamu verze: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: chyba pøi zápisu záznamu verze: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "databáze dùvìry: procedura lseek() selhala: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "databáze dùvìry: procedura read() (n=%d) selhala: %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: není soubor databáze dùvìry\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: záznam verze s èíslem %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: neplatná verze souboru %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: chyba pri ètení volného záznamu: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: chyba pøi zápisu adresáøového záznamu: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: vynulování záznamu selhalo: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: pøidání záznamu selhalo: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "databáze dùvìry je po¹kozena; prosím spus»te \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' není platný dlouhý keyID\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "klíè %08lX: akceptován jako dùvìryhodný klíè\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "klíè %08lX se v databázi dùvìry vyskytuje více ne¾ jednou\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"klíè %08lX: nenalezen veøejný klíè k dùvìryhodnému klíèi - pøeskoèeno\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "záznam dùvìry %lu, typ po¾. %d: ètení selhalo: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "záznam dùvìry %lu není po¾adovaného typu %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "záznam dùvìry %lu, typ %d: zápis selhal: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "databáze dùvìry: synchronizace selhala %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "není nutné kontrolovat databázi dùvìry\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "dal¹í kontrolova databáze dùvìry v %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "kontroluji databázi dùvìry\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "veøejný klíè %08lX nebyl nalezen: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "veøejný klíè k absolutnì dùvìryhodnému klíèi %08lX nebyl nalezen\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr "kontrola v hloubce %d podepsáno=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"podpis nebylo mo¾né ovìøit.\n"
-"Prosím, nezapomeòte, ¾e soubor s podpisem (.sig nebo .asc)\n"
-"by mìl být prvním souborem zadaným na pøíkazové øádce.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "vstupní øádek %u je pøíli¹ dlouhý nebo na konci chybí znak LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"klíè není oznaèen jako nedostateènì bezpeèný - nemohu jej pou¾ít s padìlaným "
-"RNG!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "pøeskoèen `%s': duplikován\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "pøeskoèen `%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "pøeskoèeno: tajný klíè je u¾ v databázi\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"pøeskoèen `%s': toto je vygenerovaný PGP klíè podle algoritmu ElGamal,\n"
-"podpisy vytvoøené tímto klíèem nejsou bezpeèné!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Soubor `%s' existuje. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Pøepsat (a/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: neznámá pøípona\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Vlo¾te nový název souboru"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "zapisuji do standardního výstupu\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "pøedpokládám podepsaná data v `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: vytvoøen nový soubor s pøedvolbami\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: nemohu vytvoøit adresáø: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: adresáø vytvoøen\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr "VAROVÁNÍ: zpráva byla za¹ifrována slabým klíèem v symetrické ¹iføe.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problém se za¹ifrovaným paketem\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "vytvoøen slabý klíè - zkou¹ím znovu\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"nemohu se vyvarovat slabého klíèe pro symetrickou ¹ifru; operaci jsem zkusil "
-"%d krát!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA po¾aduje pou¾ití 160-ti bitového hashovacího algoritmu\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "bez parametru \"--yes\" to nemohu v dávkovém módu provést\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Smazat tento klíè ze souboru klíèù? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Toto je tajný klíè! - opravdu smazat? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "smazání bloku klíèe se nezdaøilo: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "informace o dùvìryhodnosti vlastníka klíèe vymazány\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "existuje tajný klíè pro tento veøejný klíè \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr ""
-"abyste ho smazal(a), pou¾ijte nejprve parametr \"--delete-secret-key\".\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Je na Vás, abyste zde pøiøadil(a) hodnotu; tato hodnota nebude nikdy\n"
-"exportována tøetí stranì. Potøebujeme ji k implementaci \"pavuèiny\n"
-"dùvìry\"; nemá to nic spoleèného s (implicitnì vytvoøenou) \"pavuèinou\n"
-"certifikátù\"."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Aby bylo mo¾né vybudovat pavuèinu dùvìry, musí GnuPG vìdìt, kterým klíèùm\n"
-"dùvìøujete absolutnì - obvykle to jsou ty klíèe, pro nì¾ máte pøístup\n"
-"k tajným klíèùm. Odpovìzte \"ano\", abyste nastavili tyto klíèe\n"
-"jako absolutnì dùvìryhodné\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Pokud pøesto chcete pou¾ít tento revokovaný klíè, odpovìzte \"ano\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Pokud pøesto chcete pou¾ít tento nedùvìryhodný klíè, odpovìzte \"ano\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Vlo¾te identifikátor adresáta, kterému chcete poslat zprávu."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Vyberte algoritmus.\n"
-"\n"
-"DSA (nazývaný také DSS) je algoritmus digitálního podpisu, který mù¾e být\n"
-"pou¾itý pouze pro podpisy. Je to doporuèovaný algoritmus, proto¾e ovìøení\n"
-"DSA podpisù je mnohem rychlej¹í ne¾ v algoritmu ElGamal.\n"
-"\n"
-"Algoritmus ElGamal mù¾e být pou¾íván jak pro podpisy tak pro ¹ifrování.\n"
-"Standard OpenPGP rozli¹uje mezi dvìma re¾imy tohoto algoritmu:\n"
-"pouze ¹ifrování a ¹ifrování+podpis; v podstatì je to stejné, ale nìkolik\n"
-"parametrù musí být vybráno speciálním zpùsobem pro vytvoøení bezpeèného "
-"klíèe\n"
-"pro podpisy: tento program to umí, ale není vy¾adováno, aby i jiné\n"
-"implementace OpenPGP pracovaly v re¾imu podpis+¹ifrování.\n"
-"\n"
-"První (primární) klíè musí být v¾dy klíè, který je schopný podepisovat;\n"
-"to je dùvod, proè v tomto menu není k dispozi klíè algoritmu ElGamal\n"
-"urèný pouze pro ¹ifrování."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Aèkoli jsou tyto klíèe definovány v RFC2440, nejsou doporuèovány,\n"
-"proto¾e nejsou podporovány v¹emi programy a podpisy jimi vytvoøené\n"
-"jsou znaènì velké a pro ovìøení velmi pomalé."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Vlo¾te délku klíèe"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Odpovìzte \"ano\" nebo \"ne\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Vlo¾te po¾adovanou hodnotu tak, jak je uvedeno v pøíkazovém øádku.\n"
-"Je mo¾né vlo¾it datum ve formátu ISO (RRRR-MM-DD), ale nedostanete\n"
-"správnou chybovou hlá¹ku - místo toho systém zkusí interpretovat\n"
-"zadanou hodnotu jako interval."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Vlo¾te jméno dr¾itele klíèe"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "prosím, vlo¾te e-mailovou adresu (nepovinné, ale velmi doporuèované)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Prosím, vlo¾te nepovinný komentáø"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N pro zmìnu názvu.\n"
-"C pro zmìnu komentáøe.\n"
-"E pro zmìnu e-mailové adresy.\n"
-"O pro pokraèování generování klíèe.\n"
-"Q pro ukonèení generování klíèe."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Jestli¾e chcete generovat podklíè, odpovìzte \"ano\" (nebo jen \"a\")."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Ne¾ podepí¹ete id u¾ivatele, mìli byste nejprve ovìøit, zda klíè\n"
-"patøí osobì, její¾ jméno je uvedeno v identifikátoru u¾ivatele.\n"
-"Je velmi u¾iteèné, kdy¾ ostatní vìdí, jak dùslednì jste provedl(a)\n"
-"takové ovìøení.\n"
-"\n"
-"\"0\" znamená, ¾e neuvádíte, jak dùslednì jste pravost klíèe ovìøil(a) \n"
-"\n"
-"\"1\" znamená, ¾e vìøíte tomu, ¾e klíè patøí osobì, která je uvedena,\n"
-" v u¾ivatelském ID, ale nemohl jste nebo jste neprovìøil tuto "
-"skuteènost.\n"
-" To je u¾iteèné pro \"osobní\" verifikaci, kdy¾ podepisujete klíèe, "
-"které\n"
-" pou¾ívají pseudonym u¾ivatele.\n"
-"\n"
-"\"2\" znamená, ¾e jste èásteènì ovìøil pravost klíèe. Napø. jste ovìøil\n"
-" fingerprint klíèe a zkontroloval identifikátor u¾ivatele\n"
-" uvedený na klíèi s fotografickým id.\n"
-"\n"
-"\"3\" Znamená, ¾e jste provedl velmi peèlivì ovìøení pravosti klíèe.\n"
-" To mù¾e napøíklad znamenat, ¾e jste ovìøil fingerprint klíèe \n"
-" jeho vlastníka osobnì a dále jste pomocí obtí¾nì padìlatelného \n"
-" dokumentu s fotografií (napøíklad pasu) ovìøil, ¾e jméno majitele\n"
-" klíèe se shoduje se jménem uvedeným v u¾ivatelském ID a dále jste \n"
-" ovìøil (výmìnou elektronických dopisù), ¾e elektronické adresa uvedená \n"
-" v ID u¾ivatele patøí majiteli klíèe.\n"
-"\n"
-"Prosím nezapomeòte, ¾e pøíklady uvedené pro úroveò 2 a 3 jsou *pouze*\n"
-"pøíklady.\n"
-"Je jen na Va¹em rozhodnutí co \"èásteèné\" a \"peèlivé\" ovìøení znamená\n"
-"kdy¾ budete podepisovat klíèe jiným u¾ivatelùm.\n"
-"\n"
-"Pokud nevíte, jaká je správná odpovìï, odpovìzte \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr ""
-"Pokud chcete podepsat V©ECHNY identifikátory u¾ivatelù, odpovìzte \"ano\""
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Pokud opravdu chcete smazat tento identifikátor u¾ivatele, odpovìzte \"ano"
-"\".\n"
-"V¹echny certifikáty budou také ztraceny!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Odpovìzte \"ano\", pokud chcete smazat podklíè"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Toto je platný podpis klíèe; normálnì nechcete tento podpis smazat,\n"
-"proto¾e mù¾e být dùle¾itý pøi vytváøení dùvìry klíèe nebo jiného klíèe\n"
-"ceritifikovaného tímto klíèem."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Tento podpis nemù¾e být ovìøen, proto¾e nemáte odpovídající veøejný klíè.\n"
-"Jeho smazání byste mìl(a) odlo¾it do doby, ne¾ budete znát, který klíè\n"
-"byl pou¾it, proto¾e tento podpisovací klíè mù¾e vytvoøit dùvìru\n"
-"prostøednictvím jiného ji¾ certifikovaného klíèe."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "Podpis je neplatný. Je rozumné ho odstranit z Va¹eho souboru klíèù."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Toto je podpis, který vá¾e identifikátor u¾ivatele ke klíèi. Obvykle\n"
-"není dobré takový podpis odstranit. GnuPG nemù¾e tento klíè nadále\n"
-"pou¾ívat. Udìlejte to jenom v pøípadì, kdy je tento podpis klíèe\n"
-"jím samým z nìjakého dùvodu neplatný a kdy je k dipozici klíè jiný."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Zmìnit pøedvolby pro v¹echny u¾ivatelské ID (nebo pouze pro oznaèené)\n"
-"na aktuální seznam pøedvoleb. Èasová razítka v¹ech dotèených podpisù\n"
-"klíèù jimi samotnými budou posunuty o jednu vteøinu dopøedu.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Prosím, vlo¾te heslo; toto je tajná vìta \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Prosím, zopakujte poslední heslo, abyste si byl(a) jistý(á), co jste napsal"
-"(a)."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Zadejte název souboru, ke kterému se podpis vztahuje"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Pokud si pøejete pøepsání souboru, odpovìzte \"ano\""
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Prosím, vlo¾te nový název souboru. Pokud pouze stisknete RETURN, bude\n"
-"pou¾it implicitní soubor (který je ukázán v závorkách)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Mìl(a) byste specifikovat dùvod certifikace. V závislosti na kontextu\n"
-"máte mo¾nost si vybrat ze seznamu:\n"
-" \"Klíè byl kompromitován\"\n"
-" Toto pou¾ijte, pokud si myslíte, ¾e k Va¹emu tajnému klíèi získaly\n"
-" pøístup neoprávnìné osoby.\n"
-" \"Klíè je nahrazen\"\n"
-" Toto pou¾ijte, pokud jste tento klíè nahradil(a) novìj¹ím klíèem.\n"
-" \"Klíè se ji¾ nepou¾ívá\"\n"
-" Toto pou¾ijte, pokud tento klíè ji¾ nepou¾íváte.\n"
-" \"Identifikátor u¾ivatele u¾ není platný\"\n"
-" Toto pou¾ijte, pokud by se identifikátor u¾ivatele u¾ nemìl pou¾ívat;\n"
-" normálnì se pou¾ívá k oznaèení neplatné e-mailové adresy.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Pokud chcete, mù¾ete vlo¾it text popisující pùvod vzniku tohoto revokaèního\n"
-"ceritifikátu. Prosím, struènì. \n"
-"Text konèí prázdným øádkem.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Pomoc není k dispozici"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Pomoc není dostupná pro '%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "chyba pøi vytváøení souboru klíèù (keyring)`%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "soubor klíèù (keyring) `%s' vytvoøen\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "selhalo obnovení vyrovnávací pamìti klíèù: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "VAROVÁNÍ: Existují dva soubory s tajnými informacemi.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s je beze zmìny\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s je nový\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Prosím, opravte tento mo¾ný bezpeènostní problém\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "kontroluji soubor klíèù (keyring) `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu klíèù ji¾ zkontrolováno (%lu podpisù)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu klíèù zkontrolován (%lu podpisù)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: soubor klíèù (keyring) vytvoøen\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr "musíte znovu spustit GnuPG pro opìtovné naètení souboru pøedvoleb\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "zmìna u¾ivatelských oprávnìní `%s' selhala: %s\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Miniatura (fingerprint):"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Fingerprint:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|JMÉNO=HODNOTA|pou¾ít tento zápis dat"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "první znak jména musí být písmeno nebo podtr¾ítko\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "teèky ve jménì musí být obklopeny jinými znaky\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "VAROVÁNÍ: Tento klíè ji¾ obsahuje fotografický ID.\n"
-#~ " Pøidání dal¹í fotografie mù¾e zmást nìkteré verze PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Mìli byste mít jen jeden fotografický ID na klíèi.\n"
diff --git a/po/da.po b/po/da.po
deleted file mode 100644
index 5f0cd4e59..000000000
--- a/po/da.po
+++ /dev/null
@@ -1,4565 +0,0 @@
-# Dansk oversættelse af: / Danish translation of: GnuPG
-# Copyright (C) 2000 Free Software Foundation, Inc.
-# Birger Langkjer <birger.langkjer@image.dk>, 2000.
-# Kenneth Christiansen -- kenneth@ripen.dk, 2000.
-# -- puh'ha denne er lang...nå men det går da fremad ;-)
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.0h\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2000-03-07 22:51+01:00\n"
-"Last-Translator: Birger Langkjer <birger.langkjer@image.dk>\n"
-"Language-Team: Danish <dansk@klid.dk>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Advarsel: benytter ubeskyttet hukommelse!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "operation er ikke mulig uden beskyttet hukommelse indlæst\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(du kan have brugt et forkert program til denne opgave)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "ja"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "jJ"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "n"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "afslut"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "aA"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "generel fejl"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "ukendt pakketype"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "ukendt version"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "ukendt offentlig nøglealgoritme"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "ukendt sammenfatningsalgoritme"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "dårlig offentlig nøgle"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "dårlig hemmelig nøgle"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "dårlig signatur"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "tjeksumsfejl"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "dårlig kodesætning"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "offentlig nøgle ikke fundet"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "ukendt cifferalgoritme "
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "kan ikke åbne nøgleringen"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "ugyldig pakke"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "ugyldig rustning"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "ikke-eksisterende bruger id"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "hemmelig nøgle ikke tilgængelig"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "forkert hemmelig nøgle brugt"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "ikke understøttet"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "dårlig nøgle"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "fillæsningsfejl"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "filskrivningsfejl"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "ukendt kompressionsalgoritme"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "filåbningsfejl"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "filoprettelsesfejl"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "ugyldig kodesætning"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "uimplementeret offentlig nøglealgoritme"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "uimplementeret cifferalgoritme"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "ukendt signaturklasse"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "tillidsdatabasefejl"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "dårlig mpi"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "resursegrænse"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "ugyldig nøglering"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "ugyldigt certifikat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "dårlig bruger-id"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "fillukningsfejl"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "filomdøbningsfejl"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "filsletningsfejl"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "uforventet data"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "tidsstempelkonflikt"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "uanvendelig offentlig nøglealgoritme"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "fil eksisterer"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "svag nøgle"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "ugyldigt argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "ugyldig URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "ikke-understøttet URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "netværksfejl"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "ikke krypteret"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "ikke bearbejdet"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-#, fuzzy
-msgid "unusable public key"
-msgstr "dårlig offentlig nøgle"
-
-#: util/errors.c:106
-#, fuzzy
-msgid "unusable secret key"
-msgstr "dårlig hemmelig nøgle"
-
-#: util/errors.c:107
-#, fuzzy
-msgid "keyserver error"
-msgstr "generel fejl"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... dette er en fejl (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "du fandt en fejl ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "kan ikke åbne '%s': %s\n"
-
-#: cipher/random.c:385
-#, fuzzy, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "kan ikke åbne '%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr ""
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr ""
-
-#: cipher/random.c:401
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-
-#: cipher/random.c:409
-#, fuzzy, c-format
-msgid "can't read `%s': %s\n"
-msgstr "kan ikke åbne '%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr ""
-
-#: cipher/random.c:467
-#, fuzzy, c-format
-msgid "can't create `%s': %s\n"
-msgstr "kan ikke oprette %s: %s\n"
-
-#: cipher/random.c:474
-#, fuzzy, c-format
-msgid "can't write `%s': %s\n"
-msgstr "kan ikke åbne '%s': %s\n"
-
-#: cipher/random.c:477
-#, fuzzy, c-format
-msgid "can't close `%s': %s\n"
-msgstr "kan ikke åbne '%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "ADVARSEL: bruger usikker tilfældig-nummer-generator!!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Den tilfældige nummer generator er kun en \"kludge\" for at\n"
-"lade den køre - det er ikke en stærk RNG!\n"
-"\n"
-"BENYT IKKE DATA GENERERET AF DETTE PROGRAM!!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Ikke nok tilfældige byte tilgængelig. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Kræver %d byte mere)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Kommandoer:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[filer]|opret en signatur"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[filer]|opret rentekst signatur"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "opret en separat signatur"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "kryptér data"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr ""
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "kryptér kun med symmetriske cifre"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "gem kun"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "afkryptér data (standard)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr ""
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "godkend en signatur"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "vis nøgler"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "vis nøgler og signaturer"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "tjek nøglesignaturer"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "vis nøgle og fingeraftryk"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "vis hemmelige nøgler"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "generér et nyt nøglepar"
-
-#: g10/g10.c:327
-#, fuzzy
-msgid "remove keys from the public keyring"
-msgstr "fjern nøgle fra den offentlige nøglering"
-
-#: g10/g10.c:329
-#, fuzzy
-msgid "remove keys from the secret keyring"
-msgstr "fjern nøgle fra den hemmelige nøglering"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "signér en nøgle"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "signér en nøgle lokalt"
-
-#: g10/g10.c:332
-#, fuzzy
-msgid "sign a key non-revocably"
-msgstr "signér en nøgle lokalt"
-
-#: g10/g10.c:333
-#, fuzzy
-msgid "sign a key locally and non-revocably"
-msgstr "signér en nøgle lokalt"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "signér eller redigér en nøgle"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "Generér en annullérbar certifikat"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "eksportér nøgler"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "eksportér nøgler til en nøgletjener"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importér nøgler fra en nøgleserver"
-
-#: g10/g10.c:341
-#, fuzzy
-msgid "search for keys on a key server"
-msgstr "eksportér nøgler til en nøgletjener"
-
-#: g10/g10.c:343
-#, fuzzy
-msgid "update all keys from a keyserver"
-msgstr "importér nøgler fra en nøgleserver"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importér/fusionér nøgler"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "vis kun pakkesekvensen"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "eksportér ejertillidsværdierne"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importér ejertillidsværdierne"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "opdatér tillidsdatabasen"
-
-#: g10/g10.c:357
-#, fuzzy
-msgid "unattended trust database update"
-msgstr "opdatér tillidsdatabasen"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "reparér en ødelagt tillidsdatabase"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "De-beskydt en fil el. stdin"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Beskydt en fil el. stdin"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [filer]|print meddelelsesresumé"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Indstillinger:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "opret ascii beskyttet uddata"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NAME|kryptér for NAME"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NAME|brug NAME som standard modtager"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "brug standard nøglen som standard modtager"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "brug denne bruger-id til at signere eller dekryptere"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|sæt kompresningsniveau N (0 = slået fra)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "brug kanonisk tekstmodus"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "brug som uddatafil"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "meddelsom"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "vær mere stille"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "brug overhovedet ikke terminalen"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "tving v3 signaturer"
-
-#: g10/g10.c:397
-#, fuzzy
-msgid "do not force v3 signatures"
-msgstr "tving v3 signaturer"
-
-#: g10/g10.c:398
-#, fuzzy
-msgid "force v4 key signatures"
-msgstr "tving v3 signaturer"
-
-#: g10/g10.c:399
-#, fuzzy
-msgid "do not force v4 key signatures"
-msgstr "tving v3 signaturer"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "brug altid en MDC for kryptering"
-
-#: g10/g10.c:402
-#, fuzzy
-msgid "never use a MDC for encryption"
-msgstr "brug altid en MDC for kryptering"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "lav ingen ændringer"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr ""
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "kørselsmodus: spørg aldrig"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "forvent ja til de fleste sprøgsmål"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "forvent nej til de fleste sprøgsmål"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "tilføj denne nøglering til nøgleringslisten"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "tilføj denne hemmeligenøglering til listen"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr ""
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NAME|brug NAME som standard hemmelignøgle"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|brug denne nøgletjener til at slå nøgler op"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAME|sæt terminal karaktersæt til NAME"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "læs indstillinger fra fil"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|skriv statusinfo til denne FD"
-
-#: g10/g10.c:427
-#, fuzzy
-msgid "|[file]|write status info to file"
-msgstr "|FD|skriv statusinfo til denne FD"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr ""
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FILE|indlæs udvidelsesmodul FILE"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emulér modusen beskrevet i RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "sæt alle pakker, cifre og resumé flag til OpenPGP standard"
-
-#: g10/g10.c:443
-#, fuzzy
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "sæt alle pakker, cifre og resumé flag til OpenPGP standard"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|brug pasfrasemodus N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NAME|brug meddelelses resuméalgoritme NAME for pasfrase"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NAME|brug cifrealgoritme NAME for pasfrase"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NAME|brug cifferalgoritme NAME"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NAME|brug meddelelsesresumé algoritme NAME"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|brug kompresalgoritme N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr ""
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Eksempler:\n"
-"\n"
-" -se -r Mikael [fil] signér og kryptér for bruger Mikael\n"
-" --clearsign [fil] lav en ren tekstsignatur\n"
-" --detach-sign [fil] lav en separat signatur\n"
-" --list-keys [navne] vis nøgler\n"
-" --fingerprint [navne] vis fingeraftryk\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Rapportér venligst fejl til <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Brug: gpg [flag] [filer] (-h for hjælp)"
-
-# Skal alt dette oversættes eller er det flagene?
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Syntaks: gpg [flag] [filer]\n"
-"sign, check, encrypt eller decrypt\n"
-"standard operation afhænger af inddata\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Understøttede algoritmer:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "brug: gpg [flag] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "konfliktende kommandoer\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTITS: ingen standard alternativfil '%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTITS: ingen standard alternativfil '%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "alternativfil`%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "læser indstillinger fra `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s er ikke et gyldigt tegnsæt\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr ""
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "ugyldig rustning"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "ugyldig nøglering"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr ""
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr ""
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTITS: %s er ikke til normal brug!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s ikke tilladt med %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s er meningsløs sammen med %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr ""
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "valgte cifferalgoritme er ugyldig\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "valgte resuméalgoritme er ugyldig\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "valgte resuméalgoritme er ugyldig\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr ""
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr ""
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr ""
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr ""
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTE: simpel S2K modus (0) frarådes på det skarpeste\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "ugyldig S2K modus; skal være 0, 1 el. 3\n"
-
-#: g10/g10.c:1862
-#, fuzzy
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "ugyldig S2K modus; skal være 0, 1 el. 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "vis præferencer"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "vis præferencer"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "vis præferencer"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "vis præferencer"
-
-# er det klogt at oversætte TrustDB?
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "kunne ikke initialisere TillidsDB: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [filnavn (som gemmes)]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [filnavn]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [filnavn (som krypteres)]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [filnavn (som signeres)]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [filnavn]"
-
-#: g10/g10.c:2056
-#, fuzzy
-msgid "--sign --symmetric [filename]"
-msgstr "--symmetric [filnavn]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [filnavn]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [filnavn (som dekrypteres)]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key bruger-id"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key bruger-id"
-
-#: g10/g10.c:2110
-#, fuzzy
-msgid "--nrsign-key user-id"
-msgstr "--sign-key bruger-id"
-
-#: g10/g10.c:2118
-#, fuzzy
-msgid "--nrlsign-key user-id"
-msgstr "--sign-key bruger-id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key bruger-id [kommandoer]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "kan ikke åbne %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [bruger-id] [nøglering]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "fjernelse af beskyttelse fejlede: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "påklædning af beskyttelse fejlede: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "ugyldig hash-algoritme `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[filnavn]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Gå til sagen og skriv meddelelsen ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "kan ikke åbne `%s'\n"
-
-#: g10/g10.c:2691
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "en notationsværdi må ikke bruge nogen kontroltegn\n"
-
-#: g10/g10.c:2737
-#, fuzzy
-msgid "the given certification policy URL is invalid\n"
-msgstr "den givne politik-URL er ugyldig\n"
-
-#: g10/g10.c:2739
-#, fuzzy
-msgid "the given signature policy URL is invalid\n"
-msgstr "den givne politik-URL er ugyldig\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "panser: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "ugyldigt panserhoved: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "panserhoved: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr ""
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr ""
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr ""
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "uforventet beskyttelse:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "ugyldigt radix64 tegn %02x udeladt\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "for tidlig eof (ingen CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "for tidlig eof (i CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "dårlig CRC\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "CRC fejl; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "for tidlig eof (i trailer)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "fejl i trailerlinie\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "ingen gyldig OpenPGP data fundet.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "ugyldigt panser: linie længere end %d tegn\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr "quoted printable-tegn i panser - måske pga. en fejlbehæftet MTA\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr ""
-
-#: g10/pkclist.c:63
-#, fuzzy
-msgid "Key is superseded"
-msgstr "Nøglen er beskyttet.\n"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr ""
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr ""
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr ""
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "rev- forkert nøgletilbagekald\n"
-
-#: g10/pkclist.c:90
-msgid "revocation comment: "
-msgstr ""
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr ""
-
-#: g10/pkclist.c:258
-#, fuzzy, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Ingen tillidsværdi tildelt til %lu:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr ""
-
-#: g10/pkclist.c:274
-#, fuzzy, c-format
-msgid " %d = I do NOT trust\n"
-msgstr "%08lX: Vi stoler IKKE på denne nøgle\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr ""
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr ""
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr ""
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr ""
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = tilbage til hovedmenu\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr ""
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = afslut\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Dit valg? "
-
-#: g10/pkclist.c:316
-#, fuzzy
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Vil du virkelig gerne gøre dette?"
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr ""
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "nøgle %08lX: nøgle er blevet annulleret!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Brug denne nøgle alligevel? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "nøgle %08lX: undernøgle er blevet annulleret!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: nøgle er udløbet\n"
-
-#: g10/pkclist.c:448
-#, fuzzy, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr " Intet tyder på at denne signatur tilhører ejeren.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Vi stoler IKKE på denne nøgle\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Denne nøgle tilhører sikkert ejeren\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Denne nøgle tilhører os\n"
-
-#: g10/pkclist.c:513
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "ADVARSEL: Bruger nøgle uden tillid!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "ADVARSEL: Denne nøgle er blevet annulleret af dets ejer!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Dette kan betyde at signaturen er forfalsket.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "ADVARSEL: Denne undernøgle er blevet tilbagekaldt af dens ejer!\n"
-
-#: g10/pkclist.c:580
-#, fuzzy
-msgid "Note: This key has been disabled.\n"
-msgstr "Bemærk: Denne nøgle er forældet!\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Bemærk: Denne nøgle er forældet!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr ""
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " Intet tyder på at denne signatur tilhører ejeren.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "ADVARSEL: Vi tror IKKE på denne nøgle!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Signaturen er formentlig FORFALSKET.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Det er ikke sikkert at signaturen tilhører ejeren.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: udelod: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: udelod: offentlig nøgle er allerede tilstede\n"
-
-#: g10/pkclist.c:811
-#, fuzzy
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr ""
-"Du angav ikke en bruger-id. (du kan bruge \"-r\")\n"
-"\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Ingen sådan bruger-id.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "udeladt: offentlig nøgle er allerede valgt som standard modtager\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Offentlig nøgle er slået fra.\n"
-
-#: g10/pkclist.c:870
-#, fuzzy
-msgid "skipped: public key already set\n"
-msgstr "%s: udelod: offentlig nøgle er allerede tilstede\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "ukendt standard modtager '%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: udelod: offentlignøgle er slået fra\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "ingen gyldige adresser\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr ""
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr ""
-
-#: g10/keygen.c:194
-#, fuzzy, c-format
-msgid "too many `%c' preferences\n"
-msgstr "vis præferencer"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "Ugyldige bogstaver i navn\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "skriver selvsignatur\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "skriver selvsignatur\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr ""
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, fuzzy, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "Ønsket nøglestørrelse er %u bit\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, fuzzy, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "rundet op til %u bit\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Vælg venligst hvilken slags nøgle du vil have:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA og ElGamal (standard)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (signér kun)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (kryptér kun)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signér og kryptér)\n"
-
-#: g10/keygen.c:949
-#, fuzzy, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) DSA (signér kun)\n"
-
-#: g10/keygen.c:951
-#, fuzzy, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) ElGamal (kryptér kun)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signér og kryptér)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Dit valg? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Ugyldigt valg.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Hvilken nøglestørrelse ønsker du? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA tillader kun nøglestørrelser fra 512 til 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr ""
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr ""
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr ""
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Ønsket nøglestørrelse er %u bit\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "rundet op til %u bit\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Nøgle er gyldig for? (0) "
-
-#: g10/keygen.c:1150
-#, fuzzy
-msgid "Signature is valid for? (0) "
-msgstr "Nøgle er gyldig for? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "ugyldig værdi\n"
-
-#: g10/keygen.c:1160
-#, fuzzy, c-format
-msgid "%s does not expire at all\n"
-msgstr "Nøglen udløber aldrig\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, fuzzy, c-format
-msgid "%s expires at %s\n"
-msgstr "Nøgle udløber d. %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-
-# virker j automatisk istedetfor y?
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Er dette korrekt (j/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Rigtige navn: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Ugyldige bogstaver i navn\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Navn må ikke starte med et tal\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Navn skal være mindst 5 bogstaver langt\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Epostadresse: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Ikke en gyldig epostadresse\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Kommentar: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Ugyldigt tegn i kommentar\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Du bruger '%s' tegnsættet.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Du valgte denne BRUGER-ID:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoQq"
-
-#: g10/keygen.c:1326
-#, fuzzy
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Ændr (N)avn, (K)ommentar, (E)post eller (O)kay/(Q)vit? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Ændr (N)avn, (K)ommentar, (E)post eller (O)kay/(Q)vit? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr ""
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Du skal bruge en kodesætning til at beskytte din hemmelige nøgle.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-#, fuzzy
-msgid "passphrase not correctly repeated; try again"
-msgstr "kodesætningen blev ikke ordentlig gentaget; prøv igen.\n"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr ""
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA nøglepar vil have 1024 bit.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Nøgleoprettelse annulleret.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, fuzzy, c-format
-msgid "writing public key to `%s'\n"
-msgstr "skriver offentligt certifikat til '%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, fuzzy, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "skriver hemmeligt certifikat til '%s'\n"
-
-#: g10/keygen.c:2205
-#, fuzzy, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "nøgle %08lX: offentlig nøgle ikke fundet: %s\n"
-
-#: g10/keygen.c:2211
-#, fuzzy, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "skriver hemmeligt certifikat til '%s'\n"
-
-#: g10/keygen.c:2225
-#, fuzzy, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "fejl ved skrivning af nøglering `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, fuzzy, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "fejl ved skrivning af nøglering `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "offentlig og hemmelig nøgle oprettet og signeret.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr ""
-
-#: g10/keygen.c:2264
-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 ""
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr ""
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr ""
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Vil du virkelig oprette?"
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr ""
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: kan ikke åbne: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "fejl ved oprettelse af kodesætning: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr ""
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ADVARSEL: tom fil\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "læser fra '%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr ""
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s krypteret for: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, fuzzy, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "%s: bruger ikke fundet: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, fuzzy, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "fejl ved læsning af '%s': %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/export.c:238
-#, fuzzy, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/export.c:246
-#, fuzzy, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "ADVARSEL: intet blev eksporteret\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr ""
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-#, fuzzy
-msgid "[User id not found]"
-msgstr "[bruger ikke fundet]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "bruger sekundær nøgle %08lX istedetfor primær nøgle %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr ""
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "sprang over blok af typen %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu nøgler behandlet indtil nu\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "fejl ved læsning af '%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Totalt antal behandlede: %lu\n"
-
-#: g10/import.c:286
-#, fuzzy, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " nye undernøgler: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr ""
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importerede: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " uændrede: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nye bruger-id'er: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nye undernøgler: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nye signaturer: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " nye nøgletilbagekald: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " hemmelige nøgler læst: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "hemmelige nøgler import: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "hemmelige nøgler uændre: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importerede: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "nøgle %08lX: ingen bruger-id\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "nøgle %08lX: undernøgle er blevet annulleret!\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr ""
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "nøgle %08lX: offentlig nøgle ikke fundet: %s\n"
-
-#: g10/import.c:636
-#, fuzzy, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/import.c:646
-#, fuzzy, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "fejl ved skrivning af nøglering `%s': %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "skriver til `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "fejl ved skrivning af nøglering `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "nøgle %08lX: stemmer ikke med vores kopi\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "nøgle %08lX: kan ikke lokalisere original nøgleblok: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "nøgle %08lX: kan ikke læse original nøgleblok: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "nøgle %08lX: ingen bruger-id\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "nøgle %08lX: ingen bruger-id\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "nøgle %08lX: ingen bruger-id\n"
-
-#: g10/import.c:844
-#, fuzzy, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "ingen standard offentlig nøglering\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr ""
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr ""
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr ""
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr ""
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "Generér en annullérbar certifikat"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr ""
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "nøgle %08lX: offentlig nøgle ikke fundet: %s\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr ""
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr ""
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr ""
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr ""
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "nøgle %08lX: undernøgle er blevet annulleret!\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr ""
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr ""
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr ""
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr ""
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr ""
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr ""
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr ""
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/import.c:1491
-#, fuzzy, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr ""
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[selv-signatur]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 dårlig signature\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d dårlige signaturer\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr ""
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr ""
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr ""
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr ""
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr ""
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr ""
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Nøglen er beskyttet.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr ""
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr ""
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr ""
-
-#: g10/keyedit.c:478
-#, fuzzy
-msgid "This key has expired!"
-msgstr "Bemærk: Denne nøgle er forældet!\n"
-
-#: g10/keyedit.c:498
-#, fuzzy, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Denne nøgle er ikke beskyttet.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr ""
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr ""
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "skriver selvsignatur\n"
-
-#: g10/keyedit.c:608
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-
-#: g10/keyedit.c:613
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Vil du gerne signere? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "signering fejlede: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Denne nøgle er ikke beskyttet.\n"
-
-#: g10/keyedit.c:748
-#, fuzzy
-msgid "Secret parts of primary key are not available.\n"
-msgstr "hemmelig nøgle ikke tilgængelig"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Nøglen er beskyttet.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Kan ikke redigere denne nøgle: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Vil du virkelig gerne gøre dette?"
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr ""
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "afslut denne menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "a"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "gem"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "gem og afslut"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "hjælp"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "vis denne hjælp"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "vis fingeraftryk"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "vis"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "vis nøgler og bruger-id'er"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr ""
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "nøgle"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "vælg sekundær nøgle N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "tjek"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "vis signaturer"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "signér"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "signér nøglen"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsignér"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "signér nøglen lokalt"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "nrsign"
-msgstr "signér"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "sign the key non-revocably"
-msgstr "signér nøglen lokalt"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "nrlsign"
-msgstr "signér"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "sign the key locally and non-revocably"
-msgstr "signér nøglen lokalt"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "aflus"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "tilføj-bid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "tilføj bruger-id"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr ""
-
-#: g10/keyedit.c:920
-#, fuzzy
-msgid "add a photo ID"
-msgstr "tilføj bruger-id"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "sletbid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "slet bruger id"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr ""
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "tilføj nøgle"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "tilføj sekundær nøgle"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "sletnøgle"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "slet sekundær nøgle"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "tilføj nøgle"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "tilføj sekundær nøgle"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "sletsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "slet signaturer"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "udløb"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "ændr udløbsdatoen"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr ""
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr ""
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "skift"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "skift imellem hemmelig og offentlig nøgle visning"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "s"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "præf"
-
-#: g10/keyedit.c:933
-#, fuzzy
-msgid "list preferences (expert)"
-msgstr "vis præferencer"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "showpref"
-msgstr "vispræf"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "list preferences (verbose)"
-msgstr "vis præferencer"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "setpref"
-msgstr "præf"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "set preference list"
-msgstr "vis præferencer"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updpref"
-msgstr "præf"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updated preferences"
-msgstr "vis præferencer"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "kodeord"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "ændr kodesætningen"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "betro"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr ""
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr ""
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr ""
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr ""
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr ""
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "slåfra"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "slå nøgle fra"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "slåtil"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "slå nøgle til"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr ""
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr ""
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr ""
-
-#: g10/keyedit.c:1000
-#, fuzzy, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "fejl ved læsning af '%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr ""
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr ""
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr ""
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr ""
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "Nøglen er beskyttet.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr ""
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr ""
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr ""
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr ""
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr ""
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr ""
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr ""
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr ""
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr ""
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr ""
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr ""
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Gem ændringer? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Afslut uden at gemme? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr ""
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr ""
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr ""
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr ""
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "ADVARSEL: Denne nøgle er blevet annulleret af dets ejer!\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr ""
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr ""
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr ""
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr ""
-
-#: g10/keyedit.c:1802
-#, fuzzy, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! undernøgle er blevet annulleret! %s\n"
-
-#: g10/keyedit.c:1805
-#, fuzzy
-msgid "rev- faked revocation found\n"
-msgstr "rev- forkert nøgletilbagekald\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr ""
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr ""
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr ""
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr ""
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr ""
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Slettede %d signatur.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr ""
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr ""
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Indtast nøglens størrelse"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr ""
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr ""
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr ""
-
-#: g10/keyedit.c:2546
-#, fuzzy
-msgid "Please select exactly one user ID.\n"
-msgstr "Vælg venligst hvilken slags nøgle du vil have:\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "nøgle %08lX: ingen gyldige bruger-id'er\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Ingen bruger-id med indeks %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Ingen sekundær nøgle med indeks %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "bruger-id: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Denne nøgle er ikke beskyttet.\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Generér en annullérbar certifikat"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr ""
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr ""
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr ""
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr ""
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr ""
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Generér en annullérbar certifikat"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr ""
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "%s signatur fra: %s\n"
-
-#: g10/keylist.c:93
-#, fuzzy
-msgid "Signature policy: "
-msgstr "%s signatur fra: %s\n"
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr ""
-
-#: g10/keylist.c:127
-msgid "Critical signature notation: "
-msgstr ""
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr ""
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr ""
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr ""
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, fuzzy, c-format
-msgid " [expires: %s]"
-msgstr "Nøgle udløber d. %s\n"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "vis nøgle og fingeraftryk"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingeraftryk:"
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Fingeraftryk:"
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingeraftryk:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-#, fuzzy
-msgid " Key fingerprint ="
-msgstr " Fingeraftryk:"
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "ugyldig hash-algoritme `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr ""
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr ""
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr ""
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr ""
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr ""
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr ""
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr ""
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, fuzzy, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "kryptér data"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr ""
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr ""
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr ""
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr ""
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr ""
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr ""
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr ""
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Politik: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr ""
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-#, fuzzy
-msgid "can't handle these multiple signatures\n"
-msgstr "opret en separat signatur"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr ""
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "DÅRLIG signatur fra \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-#, fuzzy
-msgid "Expired signature from \""
-msgstr "God signatur fra \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "God signatur fra \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr ""
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Kan ikke tjekke signatur: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-#, fuzzy
-msgid "not a detached signature\n"
-msgstr "opret en separat signatur"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr ""
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "gammeldags (PGP 2.x) signatur\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr ""
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "kan ikke slå core-dump fra: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr ""
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr ""
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr ""
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr ""
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr ""
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr ""
-
-#: g10/passphrase.c:511
-#, fuzzy, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "valgte cifferalgoritme %d er ugyldig\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, fuzzy, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "kan ikke åbne '%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr ""
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr ""
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (hovednøgle-ID %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-
-#: g10/passphrase.c:662
-#, fuzzy
-msgid "Enter passphrase\n"
-msgstr "Indtast kodesætning: "
-
-#: g10/passphrase.c:664
-#, fuzzy
-msgid "Repeat passphrase\n"
-msgstr "Gentag kodesætning: "
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr ""
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr ""
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr ""
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr ""
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr ""
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr ""
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Indtast kodesætning: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Gentag kodesætning: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-
-#: g10/plaintext.c:108
-#, fuzzy, c-format
-msgid "error creating `%s': %s\n"
-msgstr "fejl ved læsning af '%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr ""
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr ""
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "læser stdin ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr ""
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr ""
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr ""
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr ""
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr ""
-
-#: g10/pubkey-enc.c:178
-#, fuzzy, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "valgte cifferalgoritme %d er ugyldig\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr ""
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr ""
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "nøgle %08lX: nøgle er blevet annulleret!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "importér nøgler fra en nøgleserver: %s\n"
-
-#: g10/hkp.c:96
-#, fuzzy, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "importér nøgler fra en nøgleserver: %s\n"
-
-#: g10/hkp.c:175
-#, fuzzy, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "fejl ved læsning af '%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr ""
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr ""
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr ""
-
-#: g10/hkp.c:565
-#, fuzzy, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "importér nøgler fra en nøgleserver: %s\n"
-
-#: g10/seckey-cert.c:53
-#, fuzzy
-msgid "secret key parts are not available\n"
-msgstr "hemmelig nøgle ikke tilgængelig"
-
-#: g10/seckey-cert.c:59
-#, fuzzy, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "valgte cifferalgoritme %d er ugyldig\n"
-
-#: g10/seckey-cert.c:224
-#, fuzzy
-msgid "Invalid passphrase; please try again"
-msgstr "ugyldig kodesætning"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr ""
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "nøgle %08lX: offentlig nøgle importeret\n"
-
-#: g10/sig-check.c:234
-#, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-
-#: g10/sig-check.c:236
-#, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr ""
-
-#: g10/sig-check.c:348
-#, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:303
-#, fuzzy, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "Kan ikke tjekke signatur: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s signatur fra: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "kan ikke oprette %s: %s\n"
-
-#: g10/sign.c:690
-#, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "signerer:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr ""
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr ""
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr ""
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr ""
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr ""
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr ""
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr ""
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, fuzzy, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: kan ikke åbne: %s\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr ""
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr ""
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr ""
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr ""
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr ""
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr ""
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr ""
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr ""
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-
-#: g10/trustdb.c:200
-#, fuzzy, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "%s er ikke et gyldigt tegnsæt\n"
-
-#: g10/trustdb.c:235
-#, fuzzy, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr ""
-
-#: g10/trustdb.c:290
-#, fuzzy, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "nøgle %08lX: ikke en rfc2440 nøgle - udeladt\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr ""
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr ""
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr ""
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr ""
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr ""
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr ""
-
-#: g10/trustdb.c:779
-#, fuzzy
-msgid "checking the trustdb\n"
-msgstr "|[NAMES]|tjek tillidsdatabasen"
-
-#: g10/trustdb.c:933
-#, fuzzy, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "offentlig nøgle ikke fundet"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr ""
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr ""
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr ""
-
-#: g10/skclist.c:168
-#, fuzzy
-msgid "skipped: secret key already present\n"
-msgstr "udelod: hemmelig nøgle er allerede tilstede\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Fil `%s' eksisterer. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Overskriv (j/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: ukendt suffiks\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Indtast nyt filnavn"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "skriver til stdout\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr ""
-
-#: g10/openfile.c:326
-#, c-format
-msgid "new configuration file `%s' created\n"
-msgstr ""
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: kan ikke oprette mappe: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: mappe oprettet\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr ""
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr ""
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr ""
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Slet denne nøgle fra nøgleringen? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr ""
-
-#: g10/delkey.c:168
-#, fuzzy, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "fjernelse af beskyttelse fejlede: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr ""
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr ""
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr ""
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr ""
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Indtast nøglens størrelse"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Svar \"ja\" eller \"nej\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr ""
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr ""
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr ""
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr ""
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr ""
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr ""
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr ""
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr ""
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Svar \"ja\" hvis det er ok at overskrive filen"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Indtast et nyt filnavn. Hvis du bare trykker RETUR vil det\n"
-"forvalgte navn (som er vist i klammer) blive brugt."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Ingen hjælp tilgængelig"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Ingen hjælp tilgængelig for `%s'"
-
-#: g10/keydb.c:178
-#, fuzzy, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "fejl ved skrivning af nøglering `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr ""
-
-#: g10/keydb.c:575
-#, fuzzy, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "ingen standard offentlig nøglering\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr ""
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr ""
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr ""
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr ""
-
-#: g10/keyring.c:1346
-#, fuzzy, c-format
-msgid "checking keyring `%s'\n"
-msgstr "fejl ved skrivning af nøglering `%s': %s\n"
-
-#: g10/keyring.c:1377
-#, fuzzy, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu nøgler behandlet indtil nu\n"
-
-#: g10/keyring.c:1388
-#, fuzzy, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "vis nøgler og signaturer"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr ""
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Fingeraftryk:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Fingeraftryk:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NAME=VALUE|brug denne notationsdata"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "første bogstav af en notationsnavn skal være et bogstave eller en "
-#~ "understregning\n"
-
-#, fuzzy
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? "
-
-#, fuzzy
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr "Er du sikker på at de vil benytte denne nøglestørrelse? "
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Vil du gerne signere? "
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key bruger-id"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key bruger-id"
-
-#, fuzzy
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key bruger-id"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Indtast bruger-id: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "udeladt: offentlig nøgle er allerede valgt med --encrypt-to\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "\n"
-#~ "WARNING: This is a PGP2-style key\n"
-#~ msgstr "ADVARSEL: '%s' er en tom fil\n"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "sSmMqQ"
-
-#, fuzzy
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s er ikke et gyldigt tegnsæt\n"
-
-#, fuzzy
-#~ msgid "%lu key(s) to refresh\n"
-#~ msgstr "%lu nøgler behandlet indtil nu\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr "Ingen tillidsværdier er ændret.\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr "%08lX: ignen info til at udregne en tillidssandsynlighed\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: fejl ved undersøgelse af nøgle: %s\n"
-
-#~ msgid "Good certificate"
-#~ msgstr "Godt certifikat"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "Vil du gerne oprette en underskrivnings- og krypteringsnøgle? "
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "certifikatlæseproblem: %s\n"
-
-#~ msgid "can't lock keyring `%s': %s\n"
-#~ msgstr "kan ikke låse nøglering `%s': %s\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: bruger ikke fundet\n"
-
-#, fuzzy
-#~ msgid "invalid"
-#~ msgstr "ugyldig rustning"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "RSA nøgle kan ikke bruges i denne version\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Ingen nøgle for bruger-ID\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Ingen bruger-ID for nøgle\n"
-
-#~ msgid "set debugging flags"
-#~ msgstr "sæt aflusningsflag"
-
-#~ msgid "enable full debugging"
-#~ msgstr "slå fuld fejltjekning til"
-
-#~ msgid "do not write comment packets"
-#~ msgstr "skriv ikke kommentarpakker"
-
-#~ msgid "(default is 1)"
-#~ msgstr "(standard er 1)"
-
-#~ msgid "(default is 3)"
-#~ msgstr "(standard er 3)"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr " (%d) ElGamal i en v3 pakke\n"
diff --git a/po/de.glo b/po/de.glo
deleted file mode 100644
index 7e32f93ab..000000000
--- a/po/de.glo
+++ /dev/null
@@ -1,238 +0,0 @@
-# Glossary for GnuPG german translation
-# Zusammenstellung der Liste:
-# Copyright (C) 1998 Free Software Foundation, Inc.
-# Walter Koch <koch@hsp.de>, 1998.
-#
-# This is just a textfile for your information.
-# It will _not_ be read or processed automatically by any program
-#
-# 1. Die Begriffe ohne ein "<" oder ">" vor dem deutschen Wort
-# stammen aus der Wortliste von Walter Koch (Programmübersetzung).
-# 2. Die Änderungsvorschläge dazu mit einem "*" vor dem deutschen Wort
-# stammen von Peter Gerwinski.
-# 3. Die Begriffe mit einem "<" vor dem deutschen Wort sind so in der
-# Bearbeitung von Herrn Goretzki verwendet worden
-# 4. Die Begriffe mit einem ">" vor dem deutschen Wort sind
-# alternative Übersetzungsmöglichkeiten, die von H.Martin angegeben
-# wurden.
-# 5. (*) Uneinheitlich verwendet
-# 6. - Gefällt mir (Walter Koch) nicht so toll
-# 7. Die erste genannte Übersetzung ist die in de.po verwendete
-# 8. # - Wurde in früherere de.po-Version verwendet
-
-
-agent Agent
-aka alias
-algorithm Verfahren
-anonymous ungenannter
-argument > Argument
-armor ASCII-Hülle
-assigned zugewiesen
-associate with a person <einer Person zuordnen
-authentication Authentisierung
-available vorhanden [besser?: verfügbar, greifbar?]
-bad [MPI] fehlerhafte MPI
-bad [signature] falsch[e] Unterschrift
-break (the encryption) <(Die Verschlüsselung) aufbrechen
-bug "Bug (Programmfehler)"
-cache Cache, -#Lager *Zwischenspeicher
-can't read nicht lesbar
-cancelled Abbruch, abgebrochen
-casual >zufällig, >gelegentlich >unregelmäßig
-certificate Zertifikat
-, (Urkunde)
-character set Zeichensatz
-check (verb) prüfen, geprüft
-checking [sth.] [sth-]-Überprüfung
-checksum Prüfsumme
-cipher algorithm Verschlüsselungsverfahren
-clearsign
-clearsig header Klartextsignatur-Einleitung
-created erzeugt
-command Befehl
-comment Bemerkung
-compress algorithm Komprimierverfahren,*Komprimierungsverfahren ?
-compressed komprimiert
-compromised nicht mehr sicher
-core dump core-dump-Datei
-, (Speicherauszug?)
-core function <wesentliche Funktion
-correct beseitigen (please correct the error first)
-corrupted beschädigter
-cover >behandeln, <erläutern
-created erstellt
-creation <Erzeugung
-critical bit ???
-dash escaped mit Bindestrich \"escapte\", *m.Bindestrichen maskiert?
-decryption Entschlüsselung
-default option <Standardoption
-default option file --voreingestellte Optionendatei
-DEK ???
-delete entfernen, *>löschen
-depend on >sich verlassen auf,>angewiesen sein auf,>abhängen von
-deprecated mißbilligte
-detached [sign] abgetrennte [Unterschrift]
-determined attacker >zielbewusster,>entschlossener Angreifer
-digest algorithm Hashmethode
-direct [key sig] -"direct key"
-disabled abgeschaltet
-duplicated (adj.) doppelt
-encrypted verschlüsselte
-enviorement variable Umgebungsvariable
-eventually >schließlich, endlich Nicht: eventuell
-expand
-expiration date <Verfalldatum
-expire <verfallen
-expires verfällt
-expire date Verfallsdatum
-failed fehlgeschlagen
-faked [RNG] - *manipulierter Zufallszahlengenerator
-faked [certificate] gefälscht
-fingerprint Fingerabdruck
-flag [verb] -kennzeichnen
-found [xyz found] entdeckt [xyz entdeckt]
-for-your-eyes-only Vertraulichkeit (\"for-your-eyes-only\")
-, Verschlußsache
-generated erzeugter
-good certificate Korrektes Zertifikat
-handle [verb] benutzen, behandeln, mit ... umgehen
-hint Tip
-human readable -nicht als Klartext darstellbar
-ignored unbeachtet
-include <enthalten
-init *initialisieren
-invalid ... falsche ...
-is adequate >ist angemessen, manchmal: <reicht völlig aus
-issue
-key-ID Schlüssel-ID, *Schlüsselkennung ?
-
-key binding Schlüsselanbindung
-keyblock Schlüsselblock
-keyserver Schlüsselserver, Schlü.server, -*Schlüssel-Server
-keysize
-keyring Schlüsselbund
-lifetime >Gültigkeitsdauer, >Geltungsdauer
-listed
-locally (nur) für diesen Rechner, #(nur) auf diesem Rechner
-lookup - Suche
-machine häufig: Computer, Rechner
-main key Hauptschlüssel
-maintenance utility -Wartungs-Hilfsprogramm
-making signatures >Unterschreiben <Unterzeichnen, <Leisten von
-malformed ungünstig aufgebaute, *fehlerhaft aufgebaute
-master key >Universalschlüssel
-, Generalschlüssel
-match Treffer
-MDC Manipulation detection code (Siegel ?)
-merge (to) >zusammenführen, >vermischen ??
-message Botschaft
-mode Modus, Methode *
-move schieben, *verschieben
-multiple signature Mehrfachunterschriften
-NAI
-network error Netzwerkfehler
-non-revocably nicht-widerrufbar, unwiderruflich??
-note Hinweis
-okay in Ordnung
-Ooops Huch
-OpenPGP
-option Option
-original ursprünglicher
-overrides -ersetzt
-ownertrust \"Owner trust\" *Vertrauenswürdigkeit des Besitzers
-packet Paket
-packet type Pakettyp
-parse -zerlegen
-passphrase Mantra
-permission [file] Zugriffsrechte
-Photo-ID Foto-ID
-policy Richtlinie
-policy URL Richtlinien-URL
-preference items ????
-preferences Einstellungen *(die gesamten) Einstellungen
-preferred bevorzugt
-primary keys Hauptschlüssel
-problem [to do sth.] -Schwierigkeit
-prompt (to) auch: >abfragen, >anfordern, >verlangen
-protected
-protection algorithm Schutzverfahren
-pubkey algorithm Public-Key-Verfahren
-public key öffentlicher Schüssel
-public key algorithm Public-Key-Verfahren
-quit *(Programm) verlassen, beenden
-radix64 radix64
-random Zufall
-random bytes Zufallswerte
-reason Grund (für revocation)
-[xyz] rebuild [xyz]-Neuaufbau, neu erzeugt
-regular file normale Datei
-response Antwort (Reaktion?)
-retry ???? (Wiederholung?, Wiederaufnahme?)
-returns gibt zurück / antwortet
-reveal auch: <jemandem zeigen, >anderen zeigen
-revocation Widerruf <*>Rückruf
-revocation certificate *<Rückrufurkunde *Rückruf-Zertifikat
-revoke widerrufen
-revocably widerrufbar
-RNG Zufallsgenerator
-secondary key Zweitschlüssel
-secret key geheimer Schlüssel
-secret keyring geheimer Schlüsselbund, geh. Schlüsselbund
-secret parts geheime Teile
-security need(s) >Sicherheitsbedüfnis(se), >Sicherheitsbedarf
-self-signature Eigenbeglaubigung
-sender Absender
-sensitive - empfindlich
-set [sth.] einstellen, festlegen
-session Sitzung
-show [an]zeigen, zeigen
-sign user id User-ID beglaubigen *
-signed unterschriebene
-signature (files) Unterschrift *
-signature (keys) Beglaubigung *
-simple S2K mode ????
-skipped übergangen, übersprungen, ignoriert
-so far bislang
-specify >spezifizieren, <angeben, ?festlegen
-stdin - stdin, *die Standardeingabe
-string Zeichenkette
-[PGP2-]style[ key] [PGP2-] artiger [Schlüssel]
-subkey Unterschlüssel
-superseeded überholt, veraltet
-terminal charset - Terminalzeichensatz *Terminal-Zeichensatz(s.o.)
-throw verwerfe
-Timestamp conflict Zeitangaben differieren
-trust Vertrauen
-Trust-DB 'Trust'-Datenbank, *Vertrauensdatenbank ?
-trusted - vertrauenswürdig
-trustvalues - trustvalues >Vertrauensniveaus?? *Vertrauensmaß? >Vertrauenswerte?
-trying Versuch
-type [message] [Botschaft] eintippen
-ulimately [trust] uneingeschränkt [vertrauen]
-ultimate trust uneingeschränktes Vertrauen
-unable
-unattended unbeaufsichtigt
-unavailble
-untrusted - nichtvertrauenswürdig, *nicht vertrauenswürdig
-unusable unbrauchbar
-update Ändern, Änderung >Aktualisieren, >Aktualisierung *auf den
-URL (die) URL
-[the] use [of]
-User - User, *<Benutzer, *Teilnehmer
-user ID User-ID
-user IDs User-IDs
-user interface >Benutzer-Schnittstelle
-username Username, *<Benutzername,
-used benutzt (no loger used)
-using xyz verwende xyz
-valid gültig
-validate -- authentifizieren (>besser authentisieren ?? So im
-Wörterbuch der neuen Rechtschreibung)
-validation -- >Authentisierung
-verbose ausführlich
-verify < überprüfen
-warning Warnung
-weak key unsicherer Schlüssel
-writeable schreibbarer
-wisely >klug, vernünftig(erweise), >gescheit; möglichst sinnvoll
-
diff --git a/po/de.po b/po/de.po
deleted file mode 100644
index bde0643df..000000000
--- a/po/de.po
+++ /dev/null
@@ -1,5158 +0,0 @@
-# GnuPG german translation
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-# Walter Koch <koch@hsp.de>, 1998, 1999, 2000, 2001
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg-1.0.7\n"
-"POT-Creation-Date: 2002-10-18 11:37+0200\n"
-"PO-Revision-Date: 2002-09-11 15:40+0200\n"
-"Last-Translator: Walter Koch <koch@hsp.de>\n"
-"Language-Team: German <de@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:90
-msgid "WARNING: using insecure memory!\n"
-msgstr "WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.\n"
-
-#: util/secmem.c:91
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "siehe http://www.gnupg.org/de/faq.html für weitere Informationen\n"
-
-# " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n"
-# " Bitte wenden Sie sich hierzu an den Systemadministrator.\n"
-#: util/secmem.c:328
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n"
-
-#: util/secmem.c:329
-msgid "(you may have used the wrong program for this task)\n"
-msgstr ""
-"(möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "ja"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "jJyY"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "nein"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "quit"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "Allgemeiner Fehler"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "Unbekannter Pakettyp"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "Unbekannte Version"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "Unbekanntes Public-Key-Verfahren"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "Unbekanntes Hashverfahren"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "Falscher öffentlicher Schüssel"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "Falscher geheimer Schlüssel"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "Falsche Unterschrift"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "Prüfsummen-Fehler"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "Falsches Mantra"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "Öffentlicher Schlüssel nicht gefunden"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "Unbekanntes Verschlüsselungsverfahren"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "Der Schlüsselbund kann nicht geöffnet werden"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "Ungültiges Paket"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "Ungültige ASCII-Hülle"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "Keine solche User-ID"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "Geheimer Schlüssel ist nicht vorhanden"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "Falscher geheimer Schlüssel benutzt"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "Wird nicht unterstützt"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "Falscher Schlüssel"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "Dateilesefehler"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "Dateischreibfehler"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "Unbekanntes Komprimierverfahren"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "Fehler beim Öffnen der Datei"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "Fehler beim Erzeugen der Datei"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "Ungültiges Mantra"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "nicht implementiertes öffentliches Schlüsselverfahren"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "Verschlüsselungsverfahren ist nicht implementiert"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "Unbekannte Unterschriftenklasse"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "Fehler in der Trust-DB"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "Falsche MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "festdefinierte Ressourcenobergrenze erreicht"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "Ungültiger Schlüsselbund"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "Falsches Zertifikat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "Ungünstig aufgebaute User-ID"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "Fehler beim Schließen der Datei"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "Fehler beim Umbenennen einer Datei"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "Fehler beim Löschen einer Datei"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "Unerwartete Daten"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "Zeitangaben differieren"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "Unbenutzbares öffentliches Schlüsselverfahren"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "Datei existiert bereits"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "Unsicherer Schlüssel"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "Ungültiges Argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "fehlerhafter URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "Nicht unterstützter URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "Netzwerkfehler"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "nicht verschlüsselt"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "nicht bearbeitet"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "unbrauchbarer öffentlicher Schüssel"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "unbrauchbarer geheimer Schlüssel"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "Schlüsselserverfehler"
-
-#: util/logger.c:183
-msgid "ERROR: "
-msgstr ""
-
-#: util/logger.c:186
-msgid "WARNING: "
-msgstr ""
-
-#: util/logger.c:279
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n"
-
-#: util/logger.c:285
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "Sie haben eine Bug (Programmfehler) gefunden ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr "Kein Modul zum sammeln von Entropie vorhanden\n"
-
-#: cipher/random.c:381 g10/import.c:200 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "'%s' kann nicht geöffnet werden: %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "Status von '%s' ist nicht feststellbar: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "'%s' ist keine normale Datei - sie bleibt unbeachtet\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "Hinweis: 'random_seed'-Datei ist leer\n"
-
-#: cipher/random.c:401
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"WARNUNG: Falsche Größe der 'random_seed'-Datei - sie wird nicht verwendet\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "'%s' ist unlesbar: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "Hinweis: 'random_seed'-Datei bleibt unverändert\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "'%s' kann nicht erzeugt werden: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "kann '%s' nicht schreiben: %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "kann '%s' nicht schliessen: %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Der Zufallsgenerator (RNG) ist lediglich ein \"kludge\", damit das\n"
-"Programms überhaupt läuft - es ist KEINESFALLS ein starker RNG!\n"
-"\n"
-"BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Es sind nicht genügend Zufallswerte vorhanden. Bitte führen Sie andere\n"
-"Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!\n"
-"(Es werden noch %d Byte benötigt.)\n"
-
-#: g10/g10.c:310
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Befehle:\n"
-" "
-
-#: g10/g10.c:312
-msgid "|[file]|make a signature"
-msgstr "|[Datei]|Eine Unterschrift erzeugen"
-
-#: g10/g10.c:313
-msgid "|[file]|make a clear text signature"
-msgstr "|[Datei]|Eine Klartextunterschrift erzeugen"
-
-#: g10/g10.c:314
-msgid "make a detached signature"
-msgstr "Eine abgetrennte Unterschrift erzeugen"
-
-#: g10/g10.c:315
-msgid "encrypt data"
-msgstr "Daten verschlüsseln"
-
-#: g10/g10.c:316
-msgid "|[files]|encrypt files"
-msgstr "|[Dateien]|Dateien verschlüsseln"
-
-#: g10/g10.c:317
-msgid "encryption only with symmetric cipher"
-msgstr "Daten symmetrisch verschlüsseln"
-
-#: g10/g10.c:318
-msgid "store only"
-msgstr "Nur speichern"
-
-#: g10/g10.c:319
-msgid "decrypt data (default)"
-msgstr "Daten entschlüsseln (Voreinstellung)"
-
-#: g10/g10.c:320
-msgid "|[files]|decrypt files"
-msgstr "|[Dateien]|Dateien entschlüsseln"
-
-#: g10/g10.c:321
-msgid "verify a signature"
-msgstr "Signatur prüfen"
-
-#: g10/g10.c:323
-msgid "list keys"
-msgstr "Liste der Schlüssel"
-
-#: g10/g10.c:325
-msgid "list keys and signatures"
-msgstr "Liste der Schlüssel und ihrer Signaturen"
-
-#: g10/g10.c:326
-msgid "check key signatures"
-msgstr "Signaturen der Schlüssel prüfen"
-
-#: g10/g10.c:327
-msgid "list keys and fingerprints"
-msgstr "Liste der Schlüssel und ihrer \"Fingerabdrücke\""
-
-#: g10/g10.c:328
-msgid "list secret keys"
-msgstr "Liste der geheimen Schlüssel"
-
-#: g10/g10.c:329
-msgid "generate a new key pair"
-msgstr "Ein neues Schlüsselpaar erzeugen"
-
-#: g10/g10.c:330
-msgid "remove keys from the public keyring"
-msgstr "Schlüssel aus dem öff. Schlüsselbund entfernen"
-
-#: g10/g10.c:332
-msgid "remove keys from the secret keyring"
-msgstr "Schlüssel aus dem geh. Schlüsselbund entfernen"
-
-#: g10/g10.c:333
-msgid "sign a key"
-msgstr "Schlüssel signieren"
-
-#: g10/g10.c:334
-msgid "sign a key locally"
-msgstr "Schlüssel nur für diesen Rechner signieren"
-
-#: g10/g10.c:335
-msgid "sign a key non-revocably"
-msgstr "Schlüssel nicht widerrufbar signieren"
-
-#: g10/g10.c:336
-msgid "sign a key locally and non-revocably"
-msgstr "Schlüssel nur für diesen Rechner und nicht-widerrufbar signieren"
-
-#: g10/g10.c:337
-msgid "sign or edit a key"
-msgstr "Unterschreiben oder bearbeiten eines Schl."
-
-#: g10/g10.c:338
-msgid "generate a revocation certificate"
-msgstr "Ein Schlüsselwiderruf-Zertifikat erzeugen"
-
-#: g10/g10.c:340
-msgid "export keys"
-msgstr "Schlüssel exportieren"
-
-#: g10/g10.c:341
-msgid "export keys to a key server"
-msgstr "Schlüssel zu einem Schlü.server exportieren"
-
-#: g10/g10.c:342
-msgid "import keys from a key server"
-msgstr "Schlüssel von einem Schlü.server importieren"
-
-#: g10/g10.c:344
-msgid "search for keys on a key server"
-msgstr "Schlüssel auf einem Schlü.server suchen"
-
-#: g10/g10.c:346
-msgid "update all keys from a keyserver"
-msgstr "alle Schlüssel per Schlü.server aktualisieren"
-
-#: g10/g10.c:350
-msgid "import/merge keys"
-msgstr "Schlüssel importieren/kombinieren"
-
-#: g10/g10.c:352
-msgid "list only the sequence of packets"
-msgstr "Lediglich Struktur der Datenpakete anzeigen"
-
-#: g10/g10.c:354
-msgid "export the ownertrust values"
-msgstr "Exportieren der \"Owner trust\"-Werte"
-
-#: g10/g10.c:356
-msgid "import ownertrust values"
-msgstr "Importieren der \"Owner trust\"-Werte"
-
-#: g10/g10.c:358
-msgid "update the trust database"
-msgstr "Ändern der \"Trust\"-Datenbank"
-
-#: g10/g10.c:360
-msgid "unattended trust database update"
-msgstr "unbeaufsichtigtes Ändern der \"Trust\"-Datenbank"
-
-#: g10/g10.c:361
-msgid "fix a corrupted trust database"
-msgstr "Reparieren einer beschädigten \"Trust\"-Datenb."
-
-#: g10/g10.c:362
-msgid "De-Armor a file or stdin"
-msgstr "Datei oder stdin von der ASCII-Hülle befreien"
-
-#: g10/g10.c:364
-msgid "En-Armor a file or stdin"
-msgstr "Datei oder stdin in eine ASCII-Hülle einpacken"
-
-#: g10/g10.c:366
-msgid "|algo [files]|print message digests"
-msgstr "|algo [Dateien]|Message-Digests für die Dateien ausgeben"
-
-#: g10/g10.c:370
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Optionen:\n"
-" "
-
-#: g10/g10.c:372
-msgid "create ascii armored output"
-msgstr "Ausgabe mit ASCII-Hülle versehen"
-
-#: g10/g10.c:374
-msgid "|NAME|encrypt for NAME"
-msgstr "|NAME|Verschlüsseln für NAME"
-
-#: g10/g10.c:377
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NAME|NAME als voreingestellten Empfänger benutzen"
-
-#: g10/g10.c:379
-msgid "use the default key as default recipient"
-msgstr ""
-"Den Standardschlüssel als voreingestellten\n"
-"Empfänger benutzen"
-
-#: g10/g10.c:385
-msgid "use this user-id to sign or decrypt"
-msgstr "Mit dieser User-ID signieren"
-
-#: g10/g10.c:386
-msgid "|N|set compress level N (0 disables)"
-msgstr "Kompressionsstufe auf N setzen (0=keine)"
-
-#: g10/g10.c:388
-msgid "use canonical text mode"
-msgstr "Textmodus benutzen"
-
-#: g10/g10.c:395
-msgid "use as output file"
-msgstr "Als Ausgabedatei benutzen"
-
-#: g10/g10.c:396
-msgid "verbose"
-msgstr "Detaillierte Informationen"
-
-#: g10/g10.c:397
-msgid "be somewhat more quiet"
-msgstr "Etwas weniger Infos"
-
-#: g10/g10.c:398
-msgid "don't use the terminal at all"
-msgstr "das Terminal gar nicht benutzen"
-
-#: g10/g10.c:399
-msgid "force v3 signatures"
-msgstr "v3 Signaturen erzwingen"
-
-#: g10/g10.c:400
-msgid "do not force v3 signatures"
-msgstr "v3 Signaturen nicht erzwingen"
-
-#: g10/g10.c:401
-msgid "force v4 key signatures"
-msgstr "v4 Signaturen erzwingen"
-
-#: g10/g10.c:402
-msgid "do not force v4 key signatures"
-msgstr "v4 Signaturen nicht erzwingen"
-
-#: g10/g10.c:403
-msgid "always use a MDC for encryption"
-msgstr "Beim Verschlüsseln ein Siegel (MDC) verwenden"
-
-#: g10/g10.c:405
-msgid "never use a MDC for encryption"
-msgstr "Beim Verschlüsseln niemals ein Siegel (MDC) verwenden"
-
-#: g10/g10.c:407
-msgid "do not make any changes"
-msgstr "Keine wirklichen Änderungen durchführen"
-
-#: g10/g10.c:408
-msgid "prompt before overwriting"
-msgstr "vor Überschreiben nachfragen"
-
-#: g10/g10.c:409
-msgid "use the gpg-agent"
-msgstr "den GPG-Agent verwenden"
-
-#: g10/g10.c:412
-msgid "batch mode: never ask"
-msgstr "Stapelmodus: Keine Abfragen"
-
-#: g10/g10.c:413
-msgid "assume yes on most questions"
-msgstr "\"Ja\" als Standardantwort annehmen"
-
-#: g10/g10.c:414
-msgid "assume no on most questions"
-msgstr "\"Nein\" als Standardantwort annehmen"
-
-#: g10/g10.c:415
-msgid "add this keyring to the list of keyrings"
-msgstr "Als öffentlichen Schlüsselbund mitbenutzen"
-
-#: g10/g10.c:416
-msgid "add this secret keyring to the list"
-msgstr "Als geheimen Schlüsselbund mitbenutzen"
-
-#: g10/g10.c:417
-msgid "show which keyring a listed key is on"
-msgstr "Anzeigen des Schlüsselbundes, in dem ein Schlüssel drin ist"
-
-#: g10/g10.c:418
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen"
-
-#: g10/g10.c:419
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|Schlüssel bei diesem Server nachschlagen"
-
-#: g10/g10.c:423
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAME|Terminalzeichensatz NAME benutzen"
-
-#: g10/g10.c:424
-msgid "read options from file"
-msgstr "Optionen aus der Datei lesen"
-
-#: g10/g10.c:428
-msgid "|FD|write status info to this FD"
-msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben"
-
-#: g10/g10.c:430
-msgid "|[file]|write status info to file"
-msgstr "|[Datei]|Statusinfo in Datei schreiben"
-
-#: g10/g10.c:442
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KEYID|diesem Schlüssel uneingeschränkt vertrauen"
-
-#: g10/g10.c:443
-msgid "|FILE|load extension module FILE"
-msgstr "|DATEI|Erweiterungsmodul DATEI laden"
-
-#: g10/g10.c:444
-msgid "emulate the mode described in RFC1991"
-msgstr "Den in RFC1991 beschriebenen Modus nachahmen"
-
-#: g10/g10.c:445
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"alle Paket-, Verschlüsselungs- und\n"
-"Hashoptionen auf OpenPGP-Verhalten einstellen"
-
-#: g10/g10.c:446
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"alle Paket-, Verschlüsselungs- und\n"
-"Hashoptionen auf PGP 2.X-Verhalten einstellen"
-
-#: g10/g10.c:452
-msgid "|N|use passphrase mode N"
-msgstr "|N|Verwenden des Mantra-Modus N"
-
-#: g10/g10.c:454
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NAME|Hashverfahren NAME für Mantras benutzen"
-
-#: g10/g10.c:456
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NAME|Verschl.verfahren NAME für Mantras benutzen"
-
-#: g10/g10.c:458
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NAME|Verschl.verfahren NAME benutzen"
-
-#: g10/g10.c:459
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NAME|Hashverfahren NAME benutzen"
-
-#: g10/g10.c:461
-msgid "|N|use compress algorithm N"
-msgstr "|N|Komprimierverfahren N benutzen"
-
-#: g10/g10.c:462
-msgid "throw keyid field of encrypted packets"
-msgstr "Empfänger-ID verschlüsselter Pakete entfernen"
-
-#: g10/g10.c:463
-msgid "Show Photo IDs"
-msgstr "Foto-IDs anzeigen"
-
-#: g10/g10.c:464
-msgid "Don't show Photo IDs"
-msgstr "Foto-IDs nicht anzeigen"
-
-#: g10/g10.c:465
-msgid "Set command line to view Photo IDs"
-msgstr "Kommandozeilentext für den Foto-Betrachter setzen"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Auf der \"man\"-Seite ist eine vollständige Liste aller Kommandos und "
-"Optionen)\n"
-
-#: g10/g10.c:474
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Beispiele:\n"
-"\n"
-" -se -r Bob [Datei] Signieren und verschlüsseln für Benutzer Bob\n"
-" --clearsign [Datei] Eine Klartextsignatur erzeugen\n"
-" --detach-sign [Datei] Eine abgetrennte Signatur erzeugen\n"
-" --list-keys [Namen] Schlüssel anzeigen\n"
-" --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\n"
-
-#: g10/g10.c:628
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr ""
-"Berichte über Programmfehler bitte in englisch an <gnupg-bugs@gnu.org>.\n"
-"Sinn- oder Schreibfehler in den deutschen Texten bitte an <de@li.org>.\n"
-
-#: g10/g10.c:632
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)"
-
-#: g10/g10.c:635
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Aufruf: gpg [Optionen] [Dateien]\n"
-"Signieren, prüfen, verschlüsseln, entschlüsseln.\n"
-"Die voreingestellte Operation ist abhängig von den Eingabedaten.\n"
-
-#: g10/g10.c:646
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Unterstützte Verfahren:\n"
-
-#: g10/g10.c:750
-msgid "usage: gpg [options] "
-msgstr "Aufruf: gpg [Optionen] "
-
-#: g10/g10.c:818
-msgid "conflicting commands\n"
-msgstr "Widersprüchliche Befehle\n"
-
-#: g10/g10.c:836
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr "Kein '='-Zeichen in der Gruppendefinition \"%s\"\n"
-
-#: g10/g10.c:996
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on homedir \"%s\"\n"
-msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
-
-#: g10/g10.c:999
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on configuration file \"%s\"\n"
-msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
-
-#: g10/g10.c:1002
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on extension \"%s\"\n"
-msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
-
-#: g10/g10.c:1008
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on homedir \"%s\"\n"
-msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
-
-#: g10/g10.c:1011
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on configuration file \"%s\"\n"
-msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
-
-#: g10/g10.c:1014
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on extension \"%s\"\n"
-msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
-
-#: g10/g10.c:1020
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on homedir \"%s\"\n"
-msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
-
-#: g10/g10.c:1023
-#, fuzzy, c-format
-msgid ""
-"WARNING: unsafe enclosing directory ownership on configuration file \"%s\"\n"
-msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
-
-#: g10/g10.c:1026
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on extension \"%s\"\n"
-msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
-
-#: g10/g10.c:1032
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on homedir \"%s\"\n"
-msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
-
-#: g10/g10.c:1035
-#, fuzzy, c-format
-msgid ""
-"WARNING: unsafe enclosing directory permissions on configuration file \"%s"
-"\"\n"
-msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
-
-#: g10/g10.c:1038
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on extension \"%s\"\n"
-msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
-
-#: g10/g10.c:1223
-#, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "Hinweis: Alte voreingestellte Optionendatei '%s' wurde ignoriert\n"
-
-#: g10/g10.c:1259
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n"
-
-#: g10/g10.c:1263
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "Optionendatei '%s': %s\n"
-
-#: g10/g10.c:1270
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "Optionen werden aus '%s' gelesen\n"
-
-#: g10/g10.c:1445
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-"Verschlüsselungserweiterung \"%s\" wurde wegen falscher Rechte nicht "
-"geladen\n"
-
-#: g10/g10.c:1578
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s ist kein gültiger Zeichensatz.\n"
-
-#: g10/g10.c:1596
-msgid "could not parse keyserver URI\n"
-msgstr "Schlüsselserver-URI konnte nicht zerlegt werden\n"
-
-#: g10/g10.c:1605
-#, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s:%d: ungültige Import Option.\n"
-
-#: g10/g10.c:1608
-msgid "invalid import options\n"
-msgstr "Ungültige Import Option\n"
-
-#: g10/g10.c:1615
-#, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s:%d: ungültige Export Option.\n"
-
-#: g10/g10.c:1618
-msgid "invalid export options\n"
-msgstr "Ungültige export Option\n"
-
-#: g10/g10.c:1624
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "Der Ausführungspfad konnte nicht auf %s gesetzt werden.\n"
-
-#: g10/g10.c:1745
-msgid "WARNING: program may create a core file!\n"
-msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n"
-
-#: g10/g10.c:1749
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "WARNUNG: %s ersetzt %s\n"
-
-#: g10/g10.c:1756 g10/g10.c:1767
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "Hinweis: %s ist nicht für den üblichen Gebrauch gedacht!\n"
-
-#: g10/g10.c:1758 g10/g10.c:1777
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s kann nicht zusammen mit %s verwendet werden!\n"
-
-#: g10/g10.c:1761
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s zusammen mit %s ist nicht sinnvoll!\n"
-
-#: g10/g10.c:1787
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"Im --pgp2-Modus können Sie nur abgetrennte oder Klartextunterschriften "
-"machen\n"
-
-#: g10/g10.c:1793
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-"Im --pgp2-Modus können Sie nicht gleichzeitig unterschreiben und "
-"verschlüsseln\n"
-
-#: g10/g10.c:1799
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-"Im --pgp2-Modus müssen Sie Dateien benutzen und können keine Pipes "
-"verwenden.\n"
-
-#: g10/g10.c:1812
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-"Verschlüssen einer Botschaft benötigt im --pgp2-Modus die IDEA-"
-"Verschlüsselung\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1837
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "Diese Botschaft könnte für %s unbrauchbar sein\n"
-
-#: g10/g10.c:1885 g10/g10.c:1903
-msgid "selected cipher algorithm is invalid\n"
-msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n"
-
-#: g10/g10.c:1891 g10/g10.c:1909
-msgid "selected digest algorithm is invalid\n"
-msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
-
-#: g10/g10.c:1897
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
-
-#: g10/g10.c:1912
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "Das Komprimierverfahren muß im Bereich %d bis %d liegen\n"
-
-#: g10/g10.c:1914
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed müssen größer als 0 sein\n"
-
-#: g10/g10.c:1916
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed müssen größer als 1 sein\n"
-
-#: g10/g10.c:1918
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth muß im Bereich 1 bis 255 liegen\n"
-
-#: g10/g10.c:1921
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n"
-
-#: g10/g10.c:1925
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "ungültiger \"simple S2K\"-Modus; Wert muß 0, 1 oder 3 sein\n"
-
-#: g10/g10.c:1929
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "ungültiger \"default-check-level\"; Wert muß 0, 1, 2 oder 3 sein\n"
-
-#: g10/g10.c:1935
-msgid "invalid default preferences\n"
-msgstr "ungültige Standard Voreinstellungen\n"
-
-#: g10/g10.c:1943
-msgid "invalid personal cipher preferences\n"
-msgstr "ungültige private Verschlüsselungsvoreinstellungen\n"
-
-#: g10/g10.c:1947
-msgid "invalid personal digest preferences\n"
-msgstr "ungültige private Hashvoreinstellungen\n"
-
-#: g10/g10.c:1951
-msgid "invalid personal compress preferences\n"
-msgstr "ungültige private Komprimierungsvoreinstellungen\n"
-
-#: g10/g10.c:2044
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n"
-
-#: g10/g10.c:2054
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-"WARNUNG: Empfänger (-r) angegeben ohne Verwendung von Public-Key-Verfahren\n"
-
-#: g10/g10.c:2064
-msgid "--store [filename]"
-msgstr "--store [Dateiname]"
-
-#: g10/g10.c:2071
-msgid "--symmetric [filename]"
-msgstr "--symmetric [Dateiname]"
-
-#: g10/g10.c:2079
-msgid "--encrypt [filename]"
-msgstr "--encrypt [Dateiname]"
-
-#: g10/g10.c:2096
-msgid "--sign [filename]"
-msgstr "--sign [Dateiname]"
-
-#: g10/g10.c:2109
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [Dateiname]"
-
-#: g10/g10.c:2123
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [Dateiname]"
-
-#: g10/g10.c:2132
-msgid "--clearsign [filename]"
-msgstr "--clearsign [Dateiname]"
-
-#: g10/g10.c:2150
-msgid "--decrypt [filename]"
-msgstr "--decrypt [Dateiname]"
-
-#: g10/g10.c:2161
-msgid "--sign-key user-id"
-msgstr "--sign-key User-ID"
-
-#: g10/g10.c:2169
-msgid "--lsign-key user-id"
-msgstr "--lsign-key User-ID"
-
-#: g10/g10.c:2177
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key User-ID"
-
-#: g10/g10.c:2185
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key User-ID"
-
-#: g10/g10.c:2193
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key User-ID [Befehle]"
-
-#: g10/encode.c:416 g10/g10.c:2249 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "'%s' kann nicht geöffnet werden: %s\n"
-
-#: g10/g10.c:2264
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [User-ID] [Schlüsselbund]"
-
-#: g10/g10.c:2356
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "Entfernen der ASCII-Hülle ist fehlgeschlagen: %s\n"
-
-#: g10/g10.c:2364
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "Anbringen der ASCII-Hülle ist fehlgeschlagen: %s\n"
-
-#: g10/g10.c:2451
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "Ungültiges Hashverfahren '%s'\n"
-
-#: g10/g10.c:2537
-msgid "[filename]"
-msgstr "[Dateiname]"
-
-#: g10/g10.c:2541
-msgid "Go ahead and type your message ...\n"
-msgstr "Auf geht's - Botschaft eintippen ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2544 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "'%s' kann nicht geöffnet werden\n"
-
-#: g10/g10.c:2758
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"Ein \"notation\"-Name darf nur Buchstaben, Zahlen, Punkte oder Unterstriche "
-"enthalten und muß mit einem '=' enden\n"
-
-#: g10/g10.c:2767
-msgid "a notation value must not use any control characters\n"
-msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n"
-
-#: g10/g10.c:2804
-msgid "the given certification policy URL is invalid\n"
-msgstr "Die angegebene Zertifikat-Richtlinien-URL ist ungültig\n"
-
-#: g10/g10.c:2806
-msgid "the given signature policy URL is invalid\n"
-msgstr "Die angegebene Unterschriften-Richtlinien-URL ist ungültig\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "ASCII-Hülle: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "Ungültige ASCII-Hülle"
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "ASCII-Hülle: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "Ungültige Klartextsignatur-Einleitung\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "verschachtelte Klartextunterschriften\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "Ungültige mit Bindestrich \"escapte\" Zeile: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "Unerwartete ASCII-Hülle:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "Ungültiges \"radix64\" Zeichen %02x ignoriert\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "vorzeitiges Dateiende (keine Prüfsumme)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "vorzeitiges Dateiende (innerhalb der Prüfsumme)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "Falsch aufgebaute Prüfsumme\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "Prüfsummenfehler; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "vorzeitiges Dateiende (im Nachsatz)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "Fehler in der Nachsatzzeile\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "Keine gültigen OpenPGP-Daten gefunden.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "ungültige ASCII-Hülle: Zeile ist länger als %d Zeichen\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"\"quoted printable\" Zeichen in der ASCII-Hülle gefunden - möglicherweise\n"
-" war ein fehlerhafter E-Mail-Transporter(\"MTA\") die Ursache\n"
-
-#: g10/pkclist.c:62
-msgid "No reason specified"
-msgstr "Kein Grund angegeben"
-
-#: g10/pkclist.c:64
-msgid "Key is superseded"
-msgstr "Schlüssel ist überholt"
-
-#: g10/pkclist.c:66
-msgid "Key has been compromised"
-msgstr "Hinweis: Dieser Schlüssel ist nicht mehr sicher"
-
-#: g10/pkclist.c:68
-msgid "Key is no longer used"
-msgstr "Schlüssel wird nicht mehr benutzt"
-
-#: g10/pkclist.c:70
-msgid "User ID is no longer valid"
-msgstr "User-ID ist nicht mehr gültig"
-
-#: g10/pkclist.c:74
-msgid "reason for revocation: "
-msgstr "Grund für Widerruf: "
-
-#: g10/pkclist.c:91
-msgid "revocation comment: "
-msgstr "Widerruf-Bemerkung: "
-
-#. a string with valid answers
-#: g10/pkclist.c:253
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:261
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Es ist kein \"trust value\" zugewiesen für:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/mainproc.c:1428 g10/pkclist.c:289
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/pkclist.c:299
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n"
-"Schlüssel anderer User korrekt zu prüfen (durch Vergleich\n"
-"mit Lichtbildausweisen, Vergleich der Fingerabdrücke aus\n"
-"unterschiedlichen Quellen ...)?\n"
-"\n"
-
-#: g10/pkclist.c:302
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Weiß nicht so recht\n"
-
-#: g10/pkclist.c:303
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = Nein, ihm traue ich NICHT\n"
-
-#: g10/pkclist.c:304
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Ich vertraue ihm einigermaßen\n"
-
-#: g10/pkclist.c:305
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Ich vertraue ihm vollständig\n"
-
-#: g10/pkclist.c:307
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Ich vertraue ihm absolut\n"
-
-#. not yet implemented
-#: g10/pkclist.c:310
-msgid " i = please show me more information\n"
-msgstr " i = Bitte weitere Information anzeigen\n"
-
-#: g10/pkclist.c:313
-msgid " m = back to the main menu\n"
-msgstr " m = Zurück zum Menü\n"
-
-#: g10/pkclist.c:316
-msgid " s = skip this key\n"
-msgstr " s = diesen Schlüssel überSpringen\n"
-
-#: g10/pkclist.c:317
-msgid " q = quit\n"
-msgstr " q = verlassen\n"
-
-#: g10/pkclist.c:324
-msgid "Your decision? "
-msgstr "Ihre Auswahl? "
-
-#: g10/pkclist.c:345
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Möchten Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? "
-
-#: g10/pkclist.c:359
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel:\n"
-
-#: g10/pkclist.c:434
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "Schlüssel %08lX: Schlüssel wurde widerrufen\n"
-
-#: g10/pkclist.c:441 g10/pkclist.c:453 g10/pkclist.c:547
-msgid "Use this key anyway? "
-msgstr "Diesen Schlüssel trotzdem benutzen? "
-
-#: g10/pkclist.c:446
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "Schlüssel %08lX: Unterschlüssel wurde widerrufen\n"
-
-#: g10/pkclist.c:467
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: Schlüssel ist verfallen!\n"
-
-#: g10/pkclist.c:477
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen "
-"Besitzer gehört.\n"
-
-#: g10/pkclist.c:483
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n"
-
-#: g10/pkclist.c:489
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Es ist nicht sicher, daß dieser Schlüssel wirklich dem vorgeblichen\n"
-"Besitzer gehört, aber er wird trotzdem akzeptiert\n"
-
-#: g10/pkclist.c:495
-msgid "This key probably belongs to the owner\n"
-msgstr ""
-"Dieser Schlüssel gehört höchstwahrscheinlich dem angegebenen Besitzer\n"
-
-#: g10/pkclist.c:500
-msgid "This key belongs to us\n"
-msgstr ""
-"Dieser Schlüssel gehört uns (da wir nämlich den geheimen Schlüssel dazu "
-"haben)\n"
-
-#: g10/pkclist.c:542
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Es ist NICHT sicher, daß der Schlüssel dem vorgeblichen Besitzer gehört.\n"
-"Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste\n"
-"Frage mit ja beantworten\n"
-
-#: g10/pkclist.c:556 g10/pkclist.c:578
-msgid "WARNING: Using untrusted key!\n"
-msgstr "WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt!\n"
-
-#: g10/pkclist.c:597
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "WARNUNG: Dieser Schlüssel wurde von seinem Besitzer widerrufen!\n"
-
-#: g10/pkclist.c:598
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Das könnte bedeuten, daß die Signatur gefälscht ist.\n"
-
-#: g10/pkclist.c:604
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "WARNUNG: Dieser Unterschlüssel wurde von seinem Besitzer widerrufen!\n"
-
-#: g10/pkclist.c:609
-msgid "Note: This key has been disabled.\n"
-msgstr "Hinweis: Dieser Schlüssel wurde abgeschaltet.\n"
-
-#: g10/pkclist.c:614
-msgid "Note: This key has expired!\n"
-msgstr "Hinweis: Dieser Schlüssel ist verfallen!\n"
-
-#: g10/pkclist.c:625
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!\n"
-
-#: g10/pkclist.c:627
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen "
-"Besitzer gehört.\n"
-
-#: g10/pkclist.c:635
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n"
-
-#: g10/pkclist.c:636
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Die Signatur ist wahrscheinlich eine FÄLSCHUNG.\n"
-
-#: g10/pkclist.c:644
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"WARNUNG: Dieser Schlüssel ist nicht durch hinreichend vertrauenswürdige "
-"Signaturen zertifiziert!\n"
-
-#: g10/pkclist.c:646
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr ""
-" Es ist nicht sicher, daß die Signatur wirklich dem vorgeblichen "
-"Besitzer gehört.\n"
-
-#: g10/pkclist.c:799 g10/pkclist.c:823 g10/pkclist.c:975 g10/pkclist.c:1035
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: übersprungen: %s\n"
-
-#: g10/pkclist.c:809 g10/pkclist.c:1007
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: übersprungen: öffentlicher Schlüssel bereits vorhanden\n"
-
-#: g10/pkclist.c:840
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr ""
-"Sie haben keine User-ID angegeben (Sie können die Option \"-r\" verwenden).\n"
-
-#: g10/pkclist.c:853
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Geben Sie die User-ID ein. Beenden mit einer leeren Zeile: "
-
-#: g10/pkclist.c:869
-msgid "No such user ID.\n"
-msgstr "Keine solche User-ID vorhanden.\n"
-
-#: g10/pkclist.c:874 g10/pkclist.c:950
-msgid "skipped: public key already set as default recipient\n"
-msgstr ""
-"übersprungen: öffentlicher Schlüssel bereits als Standardempfänger gesetzt\n"
-
-#: g10/pkclist.c:892
-msgid "Public key is disabled.\n"
-msgstr "Öffentlicher Schlüssel ist abgeschaltet.\n"
-
-#: g10/pkclist.c:899
-msgid "skipped: public key already set\n"
-msgstr "übersprungen: öffentlicher Schlüssel bereits gesetzt\n"
-
-#: g10/pkclist.c:942
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "Unbekannter voreingestellter Empfänger '%s'\n"
-
-#: g10/pkclist.c:987
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: übersprungen: öffentlicher Schlüssel ist abgeschaltet\n"
-
-#: g10/pkclist.c:1042
-msgid "no valid addressees\n"
-msgstr "Keine gültigen Adressaten\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "Voreinstellung %c%lu ist nicht gültig\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "Voreinstellung %c%lu ist doppelt\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "zu viele `%c' Voreinstellungen\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "Ungültiges Zeichen in den Voreinstellungen\n"
-
-#: g10/keygen.c:524
-msgid "writing direct signature\n"
-msgstr "Die \"Direct Key Signature\" wird geschrieben\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "Die Eigenbeglaubigung wird geschrieben\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "Schreiben der \"key-binding\" Signatur\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "Ungültig Schlüssellänge; %u Bit werden verwendet\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "Schlüssellänge auf %u Bit aufgerundet\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Bitte wählen Sie, welche Art von Schlüssel Sie möchten:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA und ElGamal (voreingestellt)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (nur signieren/beglaubigen)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (nur verschlüsseln)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signieren/beglaubigen und verschlüsseln)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (nur signieren/beglaubigen)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (nur verschlüsseln)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (signieren/beglaubigen und verschlüsseln)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Ihre Auswahl? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-"Von der Benutzung dieses Verfahrens ist abzuraten - Trotzdem erzeugen? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Ungültige Auswahl.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Es wird ein neues %s Schlüsselpaar erzeugt.\n"
-" kleinste Schlüssellänge ist 768 Bit\n"
-" standard Schlüssellänge ist 1024 Bit\n"
-" größte sinnvolle Schlüssellänge ist 2048 Bit\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Welche Schlüssellänge wünschen Sie? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA erlaubt nur Schlüssellängen von 512 bis 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "zu kurz; 1024 ist die kleinste für RSA mögliche Schlüssellänge.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "Schüsselgröße zu hoch; %d ist der Maximalwert.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Schlüssellängen größer als 2048 werden nicht empfohlen, da die\n"
-"Berechnungen dann WIRKLICH lange brauchen!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Sind Sie sicher, daß Sie diese Schlüssellänge wünschen? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Gut, aber bitte denken Sie auch daran, daß Monitor und Tastatur Daten "
-"abstrahlen und diese leicht mitgelesen werden können.\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Die verlangte Schlüssellänge beträgt %u Bit\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "aufgerundet auf %u Bit\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.\n"
-" 0 = Schlüssel verfällt nie\n"
-" <n> = Schlüssel verfällt nach n Tagen\n"
-" <n>w = Schlüssel verfällt nach n Wochen\n"
-" <n>m = Schlüssel verfällt nach n Monaten\n"
-" <n>y = Schlüssel verfällt nach n Jahren\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll.\n"
-" 0 = Schlüssel verfällt nie\n"
-" <n> = Schlüssel verfällt nach n Tagen\n"
-" <n>w = Schlüssel verfällt nach n Wochen\n"
-" <n>m = Schlüssel verfällt nach n Monaten\n"
-" <n>y = Schlüssel verfällt nach n Jahren\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Wie lange bleibt der Schlüssel gültig? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Wie lange bleibt die Beglaubigung gültig? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "Ungültiger Wert.\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s verfällt nie.\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s verfällt am %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Ihr Rechner kann Daten jenseits des Jahres 2038 nicht anzeigen.\n"
-"Trotzdem werden Daten bis 2106 korrekt verarbeitet.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Ist dies richtig? (j/n) "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das\n"
-"Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und\n"
-"Ihrer E-Mail-Adresse in dieser Form auf:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Ihr Name (\"Vorname Nachname\"): "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Ungültiges Zeichen im Namen\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Der Name muß min. 5 Zeichen lang sein.\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "E-Mail-Adresse: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Diese E-Mail-Adresse ist ungültig\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Kommentar: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Ungültiges Zeichen im Kommentar.\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Sie benutzen den Zeichensatz `%s'\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Sie haben diese User-ID gewählt:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Bitte keine E-Mailadressen als Namen oder Kommentar verwenden\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnKkEeFfBb"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (B)eenden? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Bitte beseitigen Sie zuerst den Fehler\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Sie möchten kein Mantra - Dies ist *nicht* zu empfehlen!\n"
-"Es ist trotzdem möglich. Sie können Ihr Mantra jederzeit\n"
-"ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n"
-"aufrufen.\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies\n"
-"unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n"
-"tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "Das DSA-Schlüsselpaar wird 1024 Bit haben.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Schlüsselerzeugung abgebrochen.\n"
-
-#: g10/keygen.c:2146 g10/keygen.c:2234
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n"
-
-#: g10/keygen.c:2147 g10/keygen.c:2236
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "schreiben des geheimen Schlüssels nach '%s'\n"
-
-#: g10/keygen.c:2223
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "kein schreibbarer öffentlicher Schlüsselbund gefunden: %s\n"
-
-#: g10/keygen.c:2229
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "kein schreibbarer geheimer Schlüsselbund gefunden: %s\n"
-
-#: g10/keygen.c:2243
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "Fehler beim Schreiben des öff. Schlüsselbundes `%s': %s\n"
-
-#: g10/keygen.c:2250
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "Fehler beim Schreiben des geheimen Schlüsselbundes `%s': %s\n"
-
-#: g10/keygen.c:2270
-msgid "public and secret key created and signed.\n"
-msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n"
-
-#: g10/keygen.c:2271
-msgid "key marked as ultimately trusted.\n"
-msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n"
-
-#: g10/keygen.c:2282
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Bitte beachten Sie, daß dieser Schlüssel nicht zum Verschlüsseln benutzt\n"
-"werden kann. Sie können aber mit dem Befehl \"--edit-key\" einen\n"
-"Zweitschlüssel für diesem Zweck erzeugen.\n"
-
-#: g10/keygen.c:2294 g10/keygen.c:2404
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Schlüsselerzeugung fehlgeschlagen: %s\n"
-
-#: g10/keygen.c:2340 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"Der Schlüssel wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder Uhren "
-"stimmen nicht überein)\n"
-
-#: g10/keygen.c:2342 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"Der Schlüssel wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder "
-"Uhren stimmen nicht überein)\n"
-
-#: g10/keygen.c:2351
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "HINWEIS: Unterschlüssel für v3-Schlüssen sind nicht OpenPGP-konform\n"
-
-#: g10/keygen.c:2380
-msgid "Really create? "
-msgstr "Wirklich erzeugen? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output funktioniert nicht bei diesem Kommando\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: kann nicht geöffnet werden: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "Fehler beim Erzeugen des Mantras: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-"Aufgrund des S2K-Modus kann ein symmetrisches ESK Packet nicht benutzt "
-"werden\n"
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' ist bereits komprimiert\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: WARNUNG: Leere Datei\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"Im --pgp2-Modus kann nur für RSA-Schlüssel mit maximal 2048 Bit "
-"verschlüsselt werden\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "Lesen von '%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"Die IDEA-Verschlüsselung kann nicht mit allen Zielschlüsseln verwendet "
-"werden.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-"Erzwungene Verwendung des symmetrischen Verschlüsselungsverfahren %s (%d) "
-"verletzt die Empfängervoreinstellungen\n"
-
-#: g10/encode.c:558 g10/sign.c:758
-#, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"Erzwungenes Kompressionsverfahren %s (%d) verletzt die "
-"Empfängervoreinstellungen.\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Die Benutzung von %s ist im %s-Modus nicht erlaubt.\n"
-
-#: g10/encode.c:735
-#, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s verschlüsselt für: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2317
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "Schlüssel `%s' nicht gefunden: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "Fehler beim Lesen des Schlüsselblocks: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "Schlüssel %08lX: dies ist kein RFC2440-Schüssel - übersprungen\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "Schlüssel %08lX: ungeschützt - übersprungen\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "Schlüssel %08lX: PGP 2.x-artiger Schlüssel - übersprungen\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "WARNUNG: Nichts exportiert\n"
-
-#: g10/getkey.c:150
-msgid "too many entries in pk cache - disabled\n"
-msgstr "zu viele Einträge im pk-Cache - abgeschaltet\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:186 g10/getkey.c:2455
-msgid "[User id not found]"
-msgstr "[User-ID nicht gefunden]"
-
-#: g10/getkey.c:1494
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Ungültiger Schlüssel %08lX, gültig gemacht per --allow-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2171
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr ""
-"der Zweitschlüssel %08lX wird anstelle des Hauptschlüssels %08lX verwendet\n"
-
-#: g10/getkey.c:2218
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr ""
-"Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - "
-"übersprungen\n"
-
-#: g10/import.c:270
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "überspringe den Block vom Typ %d\n"
-
-#: g10/import.c:279
-#, fuzzy, c-format
-msgid "%lu keys processed so far\n"
-msgstr "%lu Schlüssel bislang bearbeitet\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "Fehler beim Lesen von `%s': %s\n"
-
-#: g10/import.c:296
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Anzahl insgesamt bearbeiteter Schlüssel: %lu\n"
-
-#: g10/import.c:298
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " ignorierte neue Schlüssel: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " ohne User-ID: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " imported: %lu"
-msgstr " importiert: %lu"
-
-#: g10/import.c:309
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " unverändert: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " neue User-IDs: %lu\n"
-
-#: g10/import.c:313
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " neue Unterschlüssel: %lu\n"
-
-#: g10/import.c:315
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " neue Signaturen: %lu\n"
-
-#: g10/import.c:317
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " neue Schlüsselwiderrufe: %lu\n"
-
-#: g10/import.c:319
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " gelesene geheime Schlüssel: %lu\n"
-
-#: g10/import.c:321
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " geheime Schlüssel importiert: %lu\n"
-
-#: g10/import.c:323
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " unveränderte geh.Schl.: %lu\n"
-
-#: g10/import.c:325
-#, c-format
-msgid " not imported: %lu\n"
-msgstr " nicht importiert: %lu\n"
-
-#: g10/import.c:593 g10/import.c:849
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "Schlüssel %08lX: Keine User-ID\n"
-
-#: g10/import.c:609
-#, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "Schlüssel %08lX: HKP Unterschlüsseldefekt repariert\n"
-
-#: g10/import.c:624
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "Schlüssel %08lX: Nicht eigenbeglaubigte User-ID `%s' übernommen\n"
-
-#: g10/import.c:631
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "Schlüssel %08lX: Keine gültigen User-IDs\n"
-
-#: g10/import.c:633
-msgid "this may be caused by a missing self-signature\n"
-msgstr "dies könnte durch fehlende Eigenbeglaubigung verursacht worden sein\n"
-
-#: g10/import.c:643 g10/import.c:929
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "Schlüssel %08lX: Öffentlicher Schlüssel nicht gefunden: %s\n"
-
-#: g10/import.c:648
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "Schlüssel %08lX: neuer Schlüssel - übersprungen\n"
-
-#: g10/import.c:657
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "kein schreibbarer Schlüsselbund gefunden: %s\n"
-
-#: g10/import.c:662 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "Schreiben nach '%s'\n"
-
-#: g10/import.c:665 g10/import.c:750 g10/import.c:876 g10/import.c:989
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "Fehler beim Schreiben des Schlüsselbundes `%s': %s\n"
-
-#: g10/import.c:682
-#, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "Schlüssel %08lX: Öffentlicher Schlüssel \"%s\" importiert\n"
-
-#: g10/import.c:704
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "Schlüssel %08lX: Stimmt nicht mit unserer Kopie überein\n"
-
-#: g10/import.c:721 g10/import.c:946
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr ""
-"Schlüssel %08lX: der lokale originale Schlüsselblocks wurde nicht gefunden: %"
-"s\n"
-
-#: g10/import.c:728 g10/import.c:952
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr ""
-"Schlüssel %08lX: Lesefehler im lokalen originalen Schlüsselblocks: %s\n"
-
-#: g10/import.c:759
-#, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "Schlüssel %08lX: \"%s\" 1 neue User-ID\n"
-
-#: g10/import.c:762
-#, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "Schlüssel %08lX: \"%s\" %d neue User-IDs\n"
-
-#: g10/import.c:765
-#, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "Schlüssel %08lX: \"%s\" 1 neue Signatur\n"
-
-#: g10/import.c:768
-#, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "Schlüssel %08lX: \"%s\" %d neue Signaturen\n"
-
-#: g10/import.c:771
-#, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "Schlüssel %08lX: \"%s\" 1 neuer Unterschlüssel\n"
-
-#: g10/import.c:774
-#, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "Schlüssel %08lX: \"%s\" %d neue Unterschlüssel\n"
-
-#: g10/import.c:793
-#, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "Schlüssel %08lX: \"%s\" Nicht geändert\n"
-
-#: g10/import.c:855
-#, fuzzy, c-format
-msgid "key %08lX: secret key with invalid cipher %d - skipped\n"
-msgstr ""
-"Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - "
-"übersprungen\n"
-
-#: g10/import.c:870
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "Kein voreingestellter geheimer Schlüsselbund: %s\n"
-
-#: g10/import.c:881
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "Schlüssel %08lX: Geheimer Schlüssel importiert\n"
-
-#. we can't merge secret keys
-#: g10/import.c:887
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "Schlüssel %08lX: Ist bereits im geheimen Schlüsselbund\n"
-
-#: g10/import.c:894
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "Schlüssel %08lX: geheimer Schlüssel nicht gefunden: %s\n"
-
-#: g10/import.c:923
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"Schlüssel %08lX: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann "
-"nicht angebracht werden\n"
-
-#: g10/import.c:963
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n"
-
-#: g10/import.c:995
-#, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "Schlüssel %08lX: \"%s\" Widerrufzertifikat importiert\n"
-
-#: g10/import.c:1043
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren für User-ID \"%s"
-"\"\n"
-
-#: g10/import.c:1058
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung für User-ID \"%s\"\n"
-
-#: g10/import.c:1073
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for subkey binding signature\n"
-msgstr "Schlüssel %08lX: Kein Unterschlüssel für die Schlüsselanbindung\n"
-
-#: g10/import.c:1081 g10/import.c:1122
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren\n"
-
-#: g10/import.c:1082
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1094
-#, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung entfernt\n"
-
-#: g10/import.c:1114 g10/sig-check.c:550
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for subkey revocation signature\n"
-msgstr "Schlüssel %08lX: Kein Unterschlüssel für den Schlüsselwiderruf\n"
-
-#: g10/import.c:1123
-#, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "Schlüssel %08lX: Ungültiger Unterschlüsselwiderruf\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1134
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation signatures\n"
-msgstr "Schlüssel %08lX: Mehrfacher Unterschlüssel-Widerruf entfernt\n"
-
-#: g10/import.c:1171
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "Schlüssel %08lX: User-ID übergangen '"
-
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "Schlüssel %08lX: Unterschlüssel ignoriert\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr ""
-"Schlüssel %08lX: Nicht exportfähige Unterschrift (Klasse %02x) - übergangen\n"
-
-#: g10/import.c:1229
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n"
-
-#: g10/import.c:1246
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - übergangen\n"
-
-#: g10/import.c:1258
-#, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n"
-
-#: g10/import.c:1356
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "Schlüssel %08lX: Doppelte User-ID entdeckt - zusammengeführt\n"
-
-#: g10/import.c:1415
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"WARNUNG: Schlüssel %08lX ist u.U. widerrufen: hole Widerrufschlüssel %08lX\n"
-
-#: g10/import.c:1429
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"WARNUNG: Schlüssel %08lX ist u.U. widerrufen: Widerrufschlüssel %08lX ist "
-"nicht vorhanden\n"
-
-#: g10/import.c:1486
-#, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "Schlüssel %08lX: \"%s\" Widerrufzertifikat hinzugefügt\n"
-
-#: g10/import.c:1517
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "Schlüssel %08lX: \"direct-key\"-Signaturen hinzugefügt\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[Widerruf]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[Eigenbeglaubigung]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 falsche Beglaubigung\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d falsche Beglaubigungen\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "User-ID \"%s\" ist widerrufen."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Wollen Sie ihn immmer noch beglaubigen? (j/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Beglaubigen ist nicht möglich.\n"
-
-#: g10/keyedit.c:380
-#, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "WARNUNG: User-ID \"%s\" ist nicht eigenbeglaubigt.\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Die Eigenbeglaubigung von \"%s\"\n"
-"ist eine PGP 2.x artige Signatur.\n"
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Soll sie zu einer OpenPGP Eigenbeglaubigung geändert werden? (j/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Die derzeitige Beglaubigung von \"%s\"\n"
-"ist nur für diesen Rechner gültig.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-"Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" wurde bereits durch Schlüssel %08lX lokal beglaubigt\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" wurde bereits durch Schlüssel %08lX beglaubigt\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nichts zu beglaubigen für Schlüssel %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Dieser Schlüssel ist verfallen!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Dieser Schlüssel wird %s verfallen.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben "
-"werden\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Dies würde den Schlüssel für PGP 2.x unbrauchbar machen\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Wie genau haben Sie überprüft, ob der Schlüssel, den Sie jetzt beglaubigen\n"
-"wollen, wirklich der o.g. Person gehört?\n"
-"Wenn Sie darauf keine Antwort wissen, geben Sie \"0\" ein.\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Ich antworte nicht.%s\n"
-
-#: g10/keyedit.c:565 g10/keyedit.c:567 g10/keyedit.c:569 g10/keyedit.c:571
-#, fuzzy
-msgid " (default)"
-msgstr "Daten entschlüsseln (Voreinstellung)"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Ich habe es überhaupt nicht überprüft.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Ich habe es flüchtig überprüft.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Ich habe es sehr sorgfältig überprüft.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n"
-"Schlüssel beglaubigen wollen: \""
-
-#: g10/keyedit.c:604
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr ""
-"\n"
-"Dies wird eine Eigenbeglaubigung sein.\n"
-
-#: g10/keyedit.c:608
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"WARNUNG: Die Unterschrift wird nicht als nicht-exportierbar markiert "
-"werden.\n"
-
-#: g10/keyedit.c:613
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Die Unterschrift wird nicht als nicht-widerrufbar markiert werden.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Die Unterschrift wird als nicht exportfähig markiert werden.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Die Unterschrift wird als nicht exportfähig markiert werden.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Ich habe diesen Schlüssel überhaupt nicht überprüft.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Ich habe diesen Schlüssel flüchtig überprüft.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Ich habe diesen Schlüssel sehr sorgfältig überprüft.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Wirklich unterschreiben? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3128 g10/keyedit.c:3190 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "Beglaubigung fehlgeschlagen: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Dieser Schlüssel ist nicht geschützt.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Geheime Teile des Haupschlüssels sind nicht vorhanden\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Schlüssel ist geschützt.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Geben Sie das neue Mantra für diesen geheimen Schlüssel ein.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Sie wollen kein Mantra - dies ist bestimmt *keine* gute Idee!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Möchten Sie dies wirklich tun? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "schiebe eine Beglaubigung an die richtige Stelle\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "Menü verlassen"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "speichern und Menü verlassen"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "Diese Hilfe zeigen"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "\"Fingerabdruck\" anzeigen"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "Liste der Schlüssel"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "Schlüssel und User-IDs auflisten"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "User-ID N auswählen"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "Zweitschlüssel N auswählen"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "Liste der Signaturen"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "Den Schlüssel signieren"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "Den Schlüssel nur für diesen Rechner beglaubigen"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "Den Schlüssel nicht-widerrufbar beglaubigen"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "Den Schlüssel nicht-widerrufbar und nur für diesen Rechner signieren"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "Eine User-ID hinzufügen"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "Eine Foto-ID hinzufügen"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "User-ID entfernen"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "Einen Zweitschlüssel hinzufügen"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "Einen Zweitschlüssel entfernen"
-
-#: g10/keyedit.c:926
-msgid "addrevoker"
-msgstr "addrevoker"
-
-#: g10/keyedit.c:926
-msgid "add a revocation key"
-msgstr "Einen Widerrufschlüssel hinzufügen"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "Signatur entfernen"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "Ändern des Verfallsdatums"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primary"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "User-ID als Haupt-User-ID kennzeichnen"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "Umschalten zwischen Anzeige geheimer und öffentlicher Schlüssel"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "Liste der Voreinstellungen (für Experten)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "Liste der Voreinstellungen (ausführlich)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "Liste der Voreinstellungen einstellen"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "geänderte Voreinstellungen"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "Das Mantra ändern"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "Den \"Owner trust\" ändern"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "Signaturen widerrufen"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "Einen Zweitschlüssel widerrufen"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "Schlüssel abschalten"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "Schlüssel anschalten"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "Foto-ID anzeigen"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "Fehler beim Lesen des geheimen Schlüsselblocks `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Geheimer Schlüssel ist vorhanden.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Befehl> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Hierzu wird der geheime Schlüssel benötigt.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Bitte verwenden sie zunächst den Befehl \"toggle\"\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "Schlüssel wurde widerrufen."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Wirklich alle User-IDs beglaubigen? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Dieses Kommando ist im %s-Modus nicht erlaubt.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Die letzte User-ID kann nicht gelöscht werden!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Diese User-ID wirklich entfernen? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Möchten Sie die ausgewählten Schlüssel wirklich widerrufen? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Möchten Sie diesen Schlüssel wirklich wiederrufen? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Die Voreinstellungen wirklich ändern? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Änderungen speichern? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Beenden ohne zu speichern? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "Änderung fehlgeschlagen: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Schlüssel ist nicht geändert worden, also ist kein Speichern nötig.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Dieser Schlüssel könnte widerrufen worden sein von %s Schlüssel "
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr "(empfindlich)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX erstellt: %s verfällt: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " Vertrauen: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Hinweis: Dieser Schlüssel ist abgeschaltet"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! Unterschlüssel wurde widerrufen: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- gefälschter Schlüsselwiderruf entdeckt\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? Schwierigkeiten bei der Widerruf-Überprüfung: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr "PGP 2.x-artige Schlüssel haben keine Voreinstellungen.\n"
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte\n"
-"Schlüsselgültigkeit nicht notwendigerweise korrekt ist.\n"
-
-#: g10/keyedit.c:2002
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID "
-"könnte\n"
-" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n"
-
-#: g10/keyedit.c:2007 g10/keyedit.c:2280
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Wollen Sie ihn immmer noch hinzufügen? (j/N) "
-
-#: g10/keyedit.c:2013
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n"
-
-#: g10/keyedit.c:2148
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)"
-
-#: g10/keyedit.c:2158
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)"
-
-#: g10/keyedit.c:2162
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Diese unbekannte Beglaubigung entfernen? (j/N/q)"
-
-#: g10/keyedit.c:2168
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d Beglaubigungen entfernt.\n"
-
-#: g10/keyedit.c:2183
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d Beglaubigungen entfernt.\n"
-
-#: g10/keyedit.c:2186
-msgid "Nothing deleted.\n"
-msgstr "Nichts entfernt.\n"
-
-#: g10/keyedit.c:2275
-#, fuzzy
-msgid ""
-"WARNING: This is a PGP 2.x-style key. Adding a designated revoker may "
-"cause\n"
-" some versions of PGP to reject this key.\n"
-msgstr ""
-"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID "
-"könnte\n"
-" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n"
-
-#: g10/keyedit.c:2286
-#, fuzzy
-msgid "You may not add a designated revoker to a PGP 2.x-style key.\n"
-msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n"
-
-#: g10/keyedit.c:2309
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Geben sie die User-ID des designierten Widerrufers ein: "
-
-#: g10/keyedit.c:2324
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-"Ein PGP 2.x-artiger Schlüssel kann nicht als designierter Widerrufer "
-"eingetragen werden\n"
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2339
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-"Ein Schlüssel kann nicht als sein eigener designierter Widerrufer agieren\n"
-
-#: g10/keyedit.c:2361
-#, fuzzy
-msgid "this key has already been designated as a revoker\n"
-msgstr ""
-"Ein Schlüssel kann nicht als sein eigener designierter Widerrufer agieren\n"
-
-#: g10/keyedit.c:2457
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln.\n"
-
-#: g10/keyedit.c:2463
-msgid "Please select at most one secondary key.\n"
-msgstr "Bitte wählen Sie höchstens einen Zweitschlüssel aus.\n"
-
-#: g10/keyedit.c:2467
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Ändern des Verfallsdatums des Zweitschlüssels.\n"
-
-#: g10/keyedit.c:2469
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n"
-
-#: g10/keyedit.c:2511
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Sie können das Verfallsdatum eines v3-Schlüssels nicht ändern\n"
-
-#: g10/keyedit.c:2527
-msgid "No corresponding signature in secret ring\n"
-msgstr "Keine entsprechende Signatur im geheimen Schlüsselbund\n"
-
-#: g10/keyedit.c:2610
-msgid "Please select exactly one user ID.\n"
-msgstr "Bitte genau eine User-ID auswählen.\n"
-
-#: g10/keyedit.c:2647 g10/keyedit.c:2754
-#, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "Überspringen der v3 Eigenbeglaubigung von User-ID \"%s\"\n"
-
-#: g10/keyedit.c:2814
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Keine User-ID mit Index %d\n"
-
-#: g10/keyedit.c:2860
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Kein Zweitschlüssel mit Index %d\n"
-
-#: g10/keyedit.c:2974
-msgid "user ID: \""
-msgstr "User-ID: \""
-
-#: g10/keyedit.c:2979
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"unterschrieben mit Ihrem Schlüssel %08lX um %s\n"
-
-#: g10/keyedit.c:2982
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"lokal unterschrieben mit Ihrem Schlüssel %08lX um %s\n"
-
-#: g10/keyedit.c:2987
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Diese Unterschrift ist seit %s verfallen.\n"
-
-#: g10/keyedit.c:2991
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Wollen Sie ihn immmer noch widerrufen? (j/N) "
-
-#: g10/keyedit.c:2995
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:3020
-msgid "You have signed these user IDs:\n"
-msgstr "Sie haben folgende User-IDs beglaubigt:\n"
-
-#: g10/keyedit.c:3039
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " beglaubigt durch %08lX um %s%s%s\n"
-
-#: g10/keyedit.c:3047
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " widerrufen durch %08lX um %s\n"
-
-#: g10/keyedit.c:3067
-msgid "You are about to revoke these signatures:\n"
-msgstr "Es werden nun folgende Beglaubigungen entfernt:\n"
-
-#: g10/keyedit.c:3077
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " beglaubigt durch %08lX am %s%s\n"
-
-#: g10/keyedit.c:3079
-msgid " (non-exportable)"
-msgstr " (nicht-exportierbar)"
-
-#: g10/keyedit.c:3086
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) "
-
-#: g10/keyedit.c:3116
-msgid "no secret key\n"
-msgstr "Kein geheimer Schlüssel\n"
-
-#: g10/keyedit.c:3271
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Anzeigen einer %s Photo ID (%ld Byte) für Schlüssel %08lX (User-ID %d)\n"
-
-#: g10/keylist.c:91
-msgid "Critical signature policy: "
-msgstr "Krititische Beglaubigungsrichtlinie: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Beglaubigungsrichtlinie: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:769 g10/mainproc.c:778
-msgid "WARNING: invalid notation data found\n"
-msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n"
-
-#: g10/keylist.c:127
-msgid "Critical signature notation: "
-msgstr "Krititische Beglaubigungs-\"Notation\": "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Beglaubigungs-\"Notation\": "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "nicht als Klartext darstellbar"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Schlüsselbund"
-
-#. of subkey
-#: g10/keylist.c:494 g10/mainproc.c:905
-#, c-format
-msgid " [expires: %s]"
-msgstr " [verfällt: %s]"
-
-#: g10/keylist.c:1019
-msgid "Primary key fingerprint:"
-msgstr "Haupt-Fingerabdruck ="
-
-#: g10/keylist.c:1021
-msgid " Subkey fingerprint:"
-msgstr "Unter-Fingerabdruck ="
-
-#: g10/keylist.c:1028
-msgid " Primary key fingerprint:"
-msgstr " Haupt-Fingerabdruck ="
-
-#: g10/keylist.c:1030
-msgid " Subkey fingerprint:"
-msgstr " Unter-Fingerabdruck ="
-
-#. use tty
-#: g10/keylist.c:1034 g10/keylist.c:1038
-msgid " Key fingerprint ="
-msgstr " Schl.-Fingerabdruck ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr "Seltsame Länge des verschlüsselten Session-Keys (%d)\n"
-
-#: g10/mainproc.c:259
-#, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "Ungültiger Veschlüsselungsalgorithmus entdeckt (%d)\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:288
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s verschlüsselte Daten\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:290
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n"
-
-#: g10/mainproc.c:318
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "Öffentlicher Schlüssel ist %08lX\n"
-
-#: g10/mainproc.c:364
-msgid "public key encrypted data: good DEK\n"
-msgstr "Mit öffentlichem Schüssel verschlüsselte Daten: Korrekte DEK\n"
-
-#: g10/mainproc.c:416
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "verschlüsselt mit %u-Bit %s Schlüssel, ID %08lX, erzeugt %s\n"
-
-# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-(
-# [kw]
-#: g10/mainproc.c:426
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "verschlüsselt mit %s Schlüssel, ID %08lX\n"
-
-#: g10/mainproc.c:440
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "Entschlüsselung mit öffentlichem Schlüssel fehlgeschlagen: %s\n"
-
-#: g10/mainproc.c:467 g10/mainproc.c:486
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "vermutlich %s-verschlüsselte Daten\n"
-
-#: g10/mainproc.c:474
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "IDEA-Verschlüsselung nicht verfügbar; versucht wird stattdessen %s\n"
-
-#: g10/mainproc.c:504
-msgid "decryption okay\n"
-msgstr "Entschlüsselung erfolgreich\n"
-
-#: g10/mainproc.c:511
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "Warnung: Verschlüsselte Botschaft ist manipuliert worden!\n"
-
-#: g10/mainproc.c:517
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "Entschlüsselung fehlgeschlagen: %s\n"
-
-#: g10/mainproc.c:536
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr ""
-"Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n"
-
-#: g10/mainproc.c:538
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "Ursprünglicher Dateiname='%.*s'\n"
-
-#: g10/mainproc.c:713
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr ""
-"Einzelner Widerruf - verwenden Sie \"gpg --import\" um ihn anzuwenden\n"
-
-#: g10/mainproc.c:781
-msgid "Notation: "
-msgstr "\"Notation\": "
-
-#: g10/mainproc.c:793
-msgid "Policy: "
-msgstr "Richtlinie: "
-
-#: g10/mainproc.c:1248
-msgid "signature verification suppressed\n"
-msgstr "Unterschriften-Überprüfung unterdrückt\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1290 g10/mainproc.c:1300
-msgid "can't handle these multiple signatures\n"
-msgstr "diese Mehrfachunterschriften können nicht behandelt werden\n"
-
-# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-(
-#: g10/mainproc.c:1311
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Unterschrift vom %.*s, %s Schlüssel ID %08lX\n"
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "BAD signature from \""
-msgstr "FALSCHE Unterschrift von \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Expired signature from \""
-msgstr "Verfallene Unterschrift von \""
-
-#: g10/mainproc.c:1362 g10/mainproc.c:1395
-msgid "Good signature from \""
-msgstr "Korrekte Unterschrift von \""
-
-#: g10/mainproc.c:1397
-msgid "[uncertain]"
-msgstr "[ungewiß] "
-
-#: g10/mainproc.c:1489
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Unterschrift kann nicht geprüft werden: %s\n"
-
-#: g10/mainproc.c:1558 g10/mainproc.c:1574 g10/mainproc.c:1636
-msgid "not a detached signature\n"
-msgstr "keine abgetrennte Unterschrift\n"
-
-#: g10/mainproc.c:1585
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "Einzelne Unterschrift der Klasse 0x%02x\n"
-
-#: g10/mainproc.c:1642
-msgid "old style (PGP 2.x) signature\n"
-msgstr "Unterschrift nach alter (PGP 2.x) Art\n"
-
-#: g10/mainproc.c:1649
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "ungültiges root-Paket in proc_tree() entdeckt\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Experimentiermethoden sollten nicht benutzt werden!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr "Es ist davon abzuraten, diese Verschlüsselungsmethode zu benutzen!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "das IDEA-Verschlüsselungs-Plugin ist nicht vorhanden\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr "Für weitere Info siehe http://www.gnupg.org/why-not-idea.html\n"
-
-#: g10/misc.c:509
-#, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "%s:%d: mißbilligte Option \"%s\".\n"
-
-#: g10/misc.c:513
-#, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "WARNUNG: \"%s\" ist eine mißbilligte Option.\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "Bitte benutzen Sie stattdessen \"%s%s\".\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "dieses Public-Key Verfahren %d kann nicht benutzt werden\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "Im Unterpaket des Typs %d ist das \"critical bit\" gesetzt\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "GPG-Agent ist in dieser Sitzung nicht vorhanden\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "Client-PID für den Agent kann nicht gesetzt werden\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "Server-Lese-Handle für den Agent nicht verfügbar\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "Server-Schreib-Handle für den Agent nicht verfügbar\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "fehlerhaft aufgebaute GPG_AGENT_INFO - Umgebungsvariable\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "GPG-Agent-Protokoll-Version %d wird nicht unterstützt\n"
-
-#: g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "Verbindung zu '%s' kann nicht aufgebaut werden: %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "Kommunikationsproblem mit GPG-Agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:812 g10/passphrase.c:920
-msgid "problem with the agent - disabling agent use\n"
-msgstr ""
-"Schwierigkeiten mit dem Agenten - Agent-Ansteuerung wird abgeschaltet\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1018
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (Hauptschlüssel-ID %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n"
-"Benutzer: \"\"%.*s\"\n"
-"%u-bit %s Schlüssel, ID %08lX, erzeugt %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Geben Sie das Mantra ein\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Geben Sie das Mantra nochmal ein\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "Mantra ist zu lang\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "Falsche Antwort des Agenten\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:809
-msgid "cancelled by user\n"
-msgstr "Abbruch durch Benutzer\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:891
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "Schwierigkeiten mit dem Agenten: Agent antwortet 0x%lx\n"
-
-#: g10/passphrase.c:1004
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n"
-"Benutzer: \""
-
-#: g10/passphrase.c:1013
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-Bit %s Schlüssel, ID %08lX, erzeugt %s"
-
-#: g10/passphrase.c:1064
-msgid "can't query password in batchmode\n"
-msgstr "Mantra kann im Batchmodus nicht abgefragt werden\n"
-
-#: g10/passphrase.c:1068
-msgid "Enter passphrase: "
-msgstr "Geben Sie das Mantra ein: "
-
-#: g10/passphrase.c:1072
-msgid "Repeat passphrase: "
-msgstr "Geben Sie das Mantra nochmal ein: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"Daten wurden nicht gespeichert; verwenden Sie dafür die Option \"--output\"\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "Fehler beim Erstellen von `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Abgetrennte Beglaubigungen.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Bitte geben Sie den Namen der Datendatei ein: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "lese stdin ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "keine unterschriebene Daten\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "kann signierte Datei '%s' nicht öffnen.\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "Ungenannter Empfänger; Versuch mit geheimen Schlüssel %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "Alles klar, wir sind der ungenannte Empfänger.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "alte Kodierung des DEK wird nicht unterstützt\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "Verschüsselungsverfahren %d%s ist unbekannt oder abgeschaltet\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "Hinweis: Verfahren %d ist kein bevorzugtes Verschlüsselungsverfahren\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "Hinweis: geheimer Schlüssel %08lX verfällt am %s\n"
-
-#: g10/pubkey-enc.c:249
-msgid "NOTE: key has been revoked"
-msgstr "Hinweis: Schlüssel wurde widerrufen"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "Teile des geheimen Schlüssels sind nicht vorhanden\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "Schutzverfahren %d%s wird nicht unterstützt\n"
-
-#: g10/seckey-cert.c:225
-msgid "Invalid passphrase; please try again"
-msgstr "Ungültiges Mantra; versuchen Sie es bitte noch einmal"
-
-#: g10/seckey-cert.c:226
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:283
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"WARNUNG: Unsicherer Schlüssel entdeckt -\n"
-" bitte Mantra nochmals wechseln.\n"
-
-#: g10/seckey-cert.c:321
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"Die mißbilligte 16-bit Prüfsumme wird zum Schutz des geheimen Schlüssels "
-"benutzt\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr "WARNUNG: Widersprechende Hashverfahren in der signierten Nachricht\n"
-
-#: g10/sig-check.c:213
-#, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"Schlüssel %08lX: Dieser durch PGP erzeugte ElGamal-Schlüssel ist für "
-"Signaturen NICHT sicher genug!\n"
-
-#: g10/sig-check.c:222
-#, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr ""
-"Öffentlicher Schlüssel %08lX ist um %lu Sekunde jünger als die Unterschrift\n"
-
-#: g10/sig-check.c:223
-#, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr ""
-"Öffentlicher Schlüssel %08lX ist um %lu Sekunden jünger als die "
-"Unterschrift\n"
-
-#: g10/sig-check.c:232
-#, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"Der Schlüssel %08lX wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder "
-"Uhren stimmen nicht überein)\n"
-
-#: g10/sig-check.c:234
-#, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"Der Schlüssel %08lX wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise "
-"oder Uhren stimmen nicht überein)\n"
-
-#: g10/sig-check.c:247
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "Hinweis: Signaturschlüssel %08lX ist am %s verfallen.\n"
-
-#: g10/sig-check.c:346
-#, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"Vermutlich eine FALSCHE Unterschrift von Schlüssel %08lX, wegen unbekanntem "
-"\"critical bit\"\n"
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"WARNUNG: \"Notation\" kann nicht %%-erweitert werden (zu groß). Verwende "
-"\"unerweiterte\".\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"WARNUNG: Richtlinien-URL kann nicht %%-erweitert werden (zu gro0). Verwende "
-"\"unerweiterte\".\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "Prüfung der erstellten Unterschrift ist fehlgeschlagen: %s\n"
-
-#: g10/sign.c:312
-#, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s Unterschrift von: \"%s\"\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "WARNUNG: '%s' ist eine leere Datei.\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln eine abgetrennte "
-"Unterschrift erzeugt werden\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "%s kann nicht erzeugt werden: %s\n"
-
-#: g10/sign.c:690
-#, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"Erzwingen des Hashverfahrens %s (%d) verletzt die Empfängervoreinstellungen\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "unterschreibe:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"Im --pgp2-Modus können Sie Klartextunterschriften nur mit PGP-2.x-artigen "
-"Schlüssel machen\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "%s Verschlüsselung wird verwendet\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "Textzeilen länger als %d Zeichen können nicht benutzt werden\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "Eingabezeile ist länger als %d Zeichen\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "trustdb Satz %lu: write fehlgeschlagen (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "trustdb Transaktion zu groß\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: kann nicht zugegriffen werden: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: Verzeichnis existiert nicht!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: Sperre kann nicht erzeugt werden\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: Sperre kann nicht erzeugt werden\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: kann nicht erzeugt werden: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: ungültige trust-db erzeugt\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: trust-db erzeugt\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr "Notiz: Die \"trustdb\" ist nicht schreibbar\n"
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: ungültige 'Trust'-Datenbank\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: hashtable kann nicht erzeugt werden: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: Fehler beim Ändern des Versionsatzes: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "trustdb: lseek fehlgeschlagen: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "trustdb: read failed (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: keine trustdb Datei\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: version record with recnum %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: invalid file version %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: konnte einen Satz nicht Nullen: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: konnte Satz nicht anhängen: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpg --fix-trustdb"
-"\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "'%s' ist keine gültige lange Schlüssel-ID\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "Schlüssel %08lX: Akzeptiert als vertrauenswürdiger Schlüssel\n"
-
-#: g10/trustdb.c:273
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "Schlüssel %08lX tritt mehr als einmal in der \"trustdb\" auf\n"
-
-#: g10/trustdb.c:289
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"Schlüssel %08lX: kein öffentlicher Schlüssel für den vertrauenswürdigen "
-"Schlüssel - übersprungen\n"
-
-#: g10/trustdb.c:298
-#, fuzzy, c-format
-msgid "key %08lX marked as ultimately trusted\n"
-msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n"
-
-#: g10/trustdb.c:324
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "trust record %lu, req type %d: read failed: %s\n"
-
-#: g10/trustdb.c:330
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "Vertrauenssatz %lu ist nicht von der angeforderten Art %d\n"
-
-#: g10/trustdb.c:345
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "trust record %lu, type %d: write failed: %s\n"
-
-#: g10/trustdb.c:360
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n"
-
-#: g10/trustdb.c:460
-msgid "no need for a trustdb check\n"
-msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n"
-
-#: g10/trustdb.c:466 g10/trustdb.c:1633
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "nächste \"Trust-DB\"-Pflichtüberprüfung am %s\n"
-
-#: g10/trustdb.c:771
-msgid "checking the trustdb\n"
-msgstr "\"Trust-DB\" wird überprüft\n"
-
-#: g10/trustdb.c:925
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "Öffentlicher Schlüssel %08lX nicht gefunden: %s\n"
-
-#: g10/trustdb.c:1507
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-"öff.Schlüssel des uneingeschränkt vertrautem Schlüssel %08lX nicht gefunden\n"
-
-#: g10/trustdb.c:1585
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"überprüfen, Tiefe %d, unterschrieben =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"Die Unterschrift konnte nicht überprüft werden.\n"
-"Denken Sie daran, daß die Datei mit der Unterschrift (.sig oder .asc)\n"
-"als erster in der Kommandozeile stehen sollte.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "Eingabezeile %u ist zu lang oder es fehlt ein LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n"
-"echten Zufallsgenerator verwendbar\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "übersprungen '%s': doppelt\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "übersprungen '%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "übersprungen: geheimer Schlüssel bereits vorhanden\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"'%s übersprungen: Dies ist ein durch PGP erzeugter ElGamal-Schlüssel. Das "
-"ist für Signaturen NICHT sicher genug!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Datei '%s' existiert bereits. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Überschreiben (j/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: unbekannte Dateinamenerweiterung\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Neuen Dateinamen eingeben"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "Schreiben auf die Standardausgabe\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "die unterzeichneten Daten sind wohl in '%s'\n"
-
-#: g10/openfile.c:326
-#, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "Neue Konfigurationsdatei `%s' erstellt\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: Verzeichnis kann nicht erzeugt werden: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: Verzeichnis erzeugt\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "Problem beim Bearbeiten des verschlüsselten Pakets\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "Unsicherer Schlüssel erzeugt - neuer Versuch\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"Trotz %d-fachen Versuch konnte die Erzeugung eines unsicheren Schlüssels für "
-"sym.Verschlüsselung nicht vermieden werden!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA benötigt einen 160-bit Hash Algorithmus\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr "(es sei denn, Sie geben den Schlüssel mittels Fingerprint an)\n"
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden.\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Diesen Schlüssel aus dem Schlüsselbund löschen? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Dies ist ein privater Schlüssel! - Wirklich löschen? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "löschen des Schlüsselblocks fehlgeschlagen: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "Der \"Ownertrust\" wurde gelöscht\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr ""
-"Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr ""
-"Verwenden Sie zunächst das Kommando \"--delete-secret-key\", um ihn zu "
-"entfernen.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Sie müssen selbst entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n"
-"wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n"
-"um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem\n"
-"(implizit erzeugten) \"Netz der Zertifikate\" zu tun."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Um das Web-of-Trust aufzubauen muß GnuPG wissen, welchen Schlüsseln\n"
-"uneingeschränkt vertraut wird. Das sind üblicherweise die Schlüssel\n"
-"auf deren geheimen Schlüssel Sie Zugruff haben.\n"
-"Antworten Sie mit \"yes\" um diesen Schlüssel uneingeschränkt zu vertrauen\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr ""
-"Wenn Sie diesen widerrufenen Schlüssel trotzdem benutzen wollen,\n"
-"so antworten Sie mit \"ja\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Wenn Sie diesen nicht vertrauenswürdigen Schlüssel trotzdem benutzen "
-"wollen,\n"
-"so antworten Sie mit \"ja\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Geben Sie die User-ID dessen ein, dem Sie die Botschaft senden wollen."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Wählen Sie die zu verwendende Methode aus.\n"
-"\n"
-"DSA (alias DSS) bedeutet \"digital signature algorithm\" (Digitales\n"
-" Unterschrift-Verfahren). Es kann nur zum Unterschreiben und Beglaubigen\n"
-" benutzt werden. Dies ist das empfohlene Verfahren, da dessen Überprüfung\n"
-" wesentlich schneller abläuft, als die von \"ElGamal\".\n"
-"\n"
-"ElGamal ist ein Verfahren für Unterschrift, Beglaubigung und "
-"Verschlüsselung\n"
-" OpenPGP unterscheidet zwischen zwei Arten von ElGamal: eines nur zum\n"
-" Unterschreiben/Beglaubigen und eines zusätzlich zum Verschlüsseln.\n"
-" Eigentlich sind diese Arten identisch; allerdings müssen einige Parameter\n"
-" auf eine besondere Art gewählt werden, um einen sicheren Schlüssel für\n"
-" Unterschriften zu erzeugen. Dieses Programm macht dies zwar so, aber "
-"andere\n"
-" Programme sind laut der OpenPGP-Spezifikation nicht verpflichtet, die\n"
-" zweite Art (die mit zusätzlichem Verschlüsseln) zu verstehen.\n"
-"\n"
-"Der Hauptschlüssel (\"primary Key\") muß auf jeden Fall zum Unterschreiben "
-"fähig\n"
-"sein. Deshalb kann ein nur-Verschlüssel-ElGamal-Schlüssel dafür nicht\n"
-"verwendet werden."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Obwohl diese Schlüssel in RFC 2440 definiert sind, ist ihre Verwendung "
-"nicht\n"
-"empfohlen. Sie werden nämlich nicht von allen Programmen unterstützt.\n"
-"Außerdem sind damit ezeugte Unterschriften recht groß und ihre Überprüfung\n"
-"ist langsam."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-"Normalerweise ist es nicht gut, denselben Schlüssel zum unterschreiben\n"
-"und verschlüsseln zu nutzen. Dieses Verfahren sollte in speziellen\n"
-"Anwendungsgebiten benutzt werden. Bitte lassen Sie sich zuerst von \n"
-"einem Sicherheistexperten beraten."
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Wählen Sie die gewünschte Schlüssellänge"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Geben Sie \"ja\" oder \"nein\" ein"
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Geben Sie den benötigten Wert so an, wie er im Prompt erscheint.\n"
-"Es ist zwar möglich ein \"ISO\"-Datum (JJJJ-MM-DD) einzugeben, aber man\n"
-"erhält dann ggfs. keine brauchbaren Fehlermeldungen - stattdessen versucht\n"
-"der Rechner den Wert als Intervall (von-bis) zu deuten."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Geben Sie den Namen des Schlüsselinhabers ein"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr ""
-"Geben Sie eine E-Mail-Adresse ein. Dies ist zwar nicht unbedingt notwendig,\n"
-"aber sehr empfehlenswert."
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Geben Sie - bei Bedarf - einen Kommentar ein"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N um den Namen zu ändern.\n"
-"K um den Kommentar zu ändern.\n"
-"E um die E-Mail-Adresse zu ändern.\n"
-"F um mit der Schlüsselerzeugung fortzusetzen.\n"
-"B um die Schlüsselerzeugung abbrechen."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr ""
-"Geben Sie \"ja\" (oder nur \"j\") ein, um den Unterschlüssel zu erzeugen."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Wenn Sie die User-ID eines Schlüssels beglaubigen wollen, sollten Sie "
-"zunächst\n"
-"sicherstellen, daß der Schlüssel demjenigen gehört, der in der User-ID "
-"genannt\n"
-"ist. Für Dritte ist es hilfreich zu wissen, wie gut diese Zuordnung "
-"überprüft\n"
-"wurde.\n"
-"\n"
-"\"0\" zeigt, daß Sie keine bestimmte Aussage über die Sorgfalt der \n"
-" Schlüsselzuordnung machen.\n"
-"\n"
-"\"1\" Sie glauben, daß der Schlüssel der benannten Person gehört,\n"
-" aber Sie konnten oder nahmen die Überpüfung überhaupt nicht vor.\n"
-" Dies ist hilfreich für eine \"persona\"-Überprüfung, wobei man den\n"
-" Schlüssel eines Pseudonym-Trägers beglaubigt\n"
-"\n"
-"\"2\" Sie nahmen eine flüchtige Überprüfung vor. Das heisst Sie haben z.B.\n"
-" den Schlüsselfingerabdruck kontrolliert und die User-ID des Schlüssels\n"
-" anhand des Fotos geprüft.\n"
-"\n"
-"\"3\" Sie haben eine ausführlich Kontrolle des Schlüssels vorgenommen.\n"
-" Das kann z.B. die Kontrolle des Schlüsselfingerabdrucks mit dem\n"
-" Schlüsselinhaber persönlich vorgenommen haben; daß Sie die User-ID des\n"
-" Schlüssel anhand einer schwer zu fälschenden Urkunde mit Foto (wie z.B.\n"
-" einem Paß) abgeglichen haben und schliesslich per E-Mail-Verkehr die\n"
-" E-Mail-Adresse als zum Schlüsselbesitzer gehörig erkannt haben.\n"
-"\n"
-"Beachten Sie, daß diese Beispiele für die Antworten 2 und 3 *nur* Beispiele "
-"sind.\n"
-"Schlußendlich ist es Ihre Sache, was Sie unter \"flüchtig\" oder "
-"\"ausführlich\"\n"
-"verstehen, wenn Sie Schlüssel Dritter beglaubigen.\n"
-"\n"
-"Wenn Sie nicht wissen, wie Sie antworten sollen, wählen Sie \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Geben Sie \"ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Geben Sie \"ja\" (oder nur \"j\") ein, um diese User-ID zu LÖSCHEN.\n"
-"Alle Zertifikate werden dann auch weg sein!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr ""
-"Geben Sie \"ja\" (oder nur \"j\") ein, um diesen Unterschlüssel zu löschen"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Dies ist eine gültige Beglaubigung für den Schlüssel. Es ist normalerweise\n"
-"unnötig sie zu löschen. Sie ist möglicherweise sogar notwendig, um einen\n"
-"Trust-Weg zu diesem oder einem durch diesen Schlüssel beglaubigten "
-"Schlüssel\n"
-"herzustellen."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Diese Beglaubigung kann nicht geprüft werden, da Sie den passenden "
-"Schlüssel\n"
-"nicht besitzen. Sie sollten die Löschung der Beglaubigung verschieben, bis\n"
-"sie wissen, welcher Schlüssel verwendet wurde. Denn vielleicht würde genau\n"
-"diese Beglaubigung den \"Trust\"-Weg kompletieren."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem\n"
-"Schlüsselbund zu entfernen."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Diese Beglaubigung bindet die User-ID an den Schlüssel. Normalerweise ist\n"
-"es nicht gut, solche Beglaubigungen zu entfernen. Um ehrlich zu sein:\n"
-"Es könnte dann sein, daß GnuPG diesen Schlüssel gar nicht mehr benutzen "
-"kann.\n"
-"Sie sollten diese Eigenbeglaubigung also nur dann entfernen, wenn sie aus\n"
-"irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar "
-"ist."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Ändern der Voreinstellung aller User-IDs (oder nur der ausgewählten)\n"
-"auf die aktuelle Liste der Voreinstellung. Die Zeitangaben aller "
-"betroffenen\n"
-"Eigenbeglaubigungen werden um eine Sekunde vorgestellt.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Um sicher zu gehen, daß Sie sich bei der Eingabe des Mantras nicht\n"
-"vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n"
-"übereinstimmen, wird das Mantra akzeptiert."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr ""
-"Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehört"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Geben Sie bitte einen neuen Dateinamen ein. Falls Sie nur die\n"
-"Eingabetaste betätigen, wird der (in Klammern angezeigte) Standarddateiname\n"
-"verwendet."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Sie sollten einen Grund für die Zertifizierung angeben. Je nach\n"
-"Zusammenhang können Sie aus dieser Liste auswählen:\n"
-" \"Schlüssel wurde kompromitiert\"\n"
-" Falls Sie Grund zu der Annahme haben, daß nicht berechtigte Personen\n"
-" Zugriff zu Ihrem geheimen Schlüssel hatten\n"
-" \"Schlüssel ist überholt\"\n"
-" Falls Sie diesen Schlüssel durch einem neuen ersetzt haben.\n"
-" \"Schlüssel wird nicht mehr benutzt\"\n"
-" Falls Sie diesen Schlüssel zurückgezogen haben.\n"
-" \"User-ID ist nicht mehr gültig\"\n"
-" Um bekanntzugeben, daß die User-ID nicht mehr benutzt werden soll.\n"
-" So weist man normalerweise auf eine ungültige E-Mailadresse hin.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Wenn Sie möchten, können Sie hier einen Text eingeben, der darlegt, warum\n"
-"Sie diesen Widerruf herausgeben. Der Text sollte möglichst knapp sein.\n"
-"Eine Leerzeile beendet die Eingabe.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Keine Hilfe vorhanden."
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Keine Hilfe für '%s' vorhanden."
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "Fehler beim Erzeugen des Schlüsselbundes `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "Schlüsselbund `%s' erstellt\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s ist der Unveränderte\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s ist der Neue\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "Prüfen des Schlüsselbundes `%s'\n"
-
-#: g10/keyring.c:1377
-#, fuzzy, c-format
-msgid "%lu keys checked so far (%lu signatures)\n"
-msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: Schlüsselbund erstellt\n"
-
-#~ msgid "requesting key %08lX from %s\n"
-#~ msgstr "Schlüssel %08lX wird von %s angefordert\n"
-
-#~ msgid "can't get key from keyserver: %s\n"
-#~ msgstr "Schlüssel ist beim Schlüsselserver nicht erhältlich: %s\n"
-
-#~ msgid "error sending to `%s': %s\n"
-#~ msgstr "Fehler beim Senden an `%s': %s\n"
-
-#~ msgid "success sending to `%s' (status=%u)\n"
-#~ msgstr "Senden an `%s' erfolgreich (status=%u)\n"
-
-#~ msgid "failed sending to `%s': status=%u\n"
-#~ msgstr "Senden an `%s' erfolglos (status=%u)\n"
-
-#~ msgid "this keyserver is not fully HKP compatible\n"
-#~ msgstr "Dieser Schlüsselserver ist nicht vollständig HKP kompatibel\n"
-
-#~ msgid "searching for \"%s\" from HKP server %s\n"
-#~ msgstr "suche nach \"%s\" auf HKP-Server %s\n"
-
-#~ msgid "can't search keyserver: %s\n"
-#~ msgstr "kann Schlüsselserver nicht durchsuchen: %s\n"
-
-#~ msgid "%lu keys so far checked (%lu signatures)\n"
-#~ msgstr "%lu Schlüssel bislang geprüft (%lu Beglaubigungen)\n"
-
-#~ msgid "no values for group \"%s\"\n"
-#~ msgstr "Keine Werte für Gruppe \"%s\"\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "Sie müssen GnuPG noch einmal starten, damit es die neue "
-#~ "Konfigurationsdatei liest\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "Ändern der Zugriffsrechte für `%s' ist fehlgeschlagen: %s\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Fingerabdruck:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Fingerabdruck:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NAME=WERT|diese \"notation\"-Daten verwenden"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "Das erste Zeichen eines \"notation\"-Namens muß ein Buchstabe oder\n"
-#~ "ein Unterstrich sein\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "Punkte in einem \"notation\"-Namen müssen von anderen Zeichen umgeben "
-#~ "sein\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "WARNUNG: Dieser Schlüssel besitzt bereits eine Foto-ID.\n"
-#~ " Ein hinzugefügte Foto-ID könnte einige Versionen von PGP "
-#~ "verwirren.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Sie können nur eine Foto-ID für diesen Schlüssel haben.\n"
-
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Sind Sie sicher, daß Sie dies wiklich unterschreiben möchten?\n"
-
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr " Sind Sie sicher, daß Sie dies immer noch unterschreiben wollen?\n"
-
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Wirklich unterschreiben? (j/N) "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "Schlüssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Brauchen Sie wirklich einen derartig langen Schlüssel? "
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " beglaubigt durch %08lX um %s\n"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key User-ID"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key User-ID"
-
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key User-ID"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Geben Sie die User-ID ein: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr ""
-#~ "übersprungen: öffentlicher Schlüssel bereits mittels --encrypt-to "
-#~ "gesetzt\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "WARNING: This is a PGP2-style key\n"
-#~ msgstr "WARNUNG: '%s' ist eine leere Datei.\n"
-
-# valid user replies (not including 1..4)
-#~ msgid "sSmMqQ"
-#~ msgstr "sSmMqQ"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "Kein Schlüsselserver bekannt (Option --keyserver verwenden)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: Dies ist keine gültige Schlüssel-ID\n"
-
-#~ msgid "duplicate (short) key ID %08lX\n"
-#~ msgstr "Öffentlicher Schlüssel ist %08lX\n"
-
-#~ msgid "%lu key(s) to refresh\n"
-#~ msgstr "\t%lu Schlüssel mit Fehlern\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NAMEN]|Überprüfen der \"Trust\"-Datenbank"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Für diesen Schlüssel konnte kein gültiger \"Trust Path\" gefunden "
-#~ "werden.\n"
-#~ "Mal sehen, ob wir sonst irgendwie ein paar fehlende \"Owner trust\" "
-#~ "Werte \n"
-#~ "ermitteln können.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Kein Pfad führt zu einem unserer Schlüsseln.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Keine Zertifikate mit undefiniertem Vertrauen gefunden.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Keine \"trust\" Werte geändert.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr ""
-#~ "%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit "
-#~ "vorgefunden\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: Fehler beim Prüfen des Schlüssels: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "zu viele Einträge im unk-Lager - abgeschaltet\n"
-
-#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
-#~ msgstr ""
-#~ "Geheimer Schlüssel %08lX nicht importiert (%s verwenden, um das zu "
-#~ "ermöglichen)\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "Änderung der \"Trust-DB\" fehlgeschlagen: %s\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr ""
-#~ "Vermutlich ist das Siegel (MDC) BESCHÄDIGT (wegen unbekanntem \"critical "
-#~ "bit\")\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "Fehler beim Lesen des Dir-Satzes für LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "Kein Hauptschlüssel für LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "Fehler beim Lesen den Hauptschlüssels der LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record fehlgeschlagen: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "Schlüssel %08lX: Satzabfrage fehlgeschlagen\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "Schlüssel %08lX: Ist bereits in geheimer Schlüsseltabelle\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "HINWEIS: Geheimer Schlüssel %08lX ist NICHT geschützt.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr ""
-#~ "Schlüssel %08lX: geheimer und öffentlicher Schlüssel passen nicht "
-#~ "zusammen.\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "enum_secret_keys fehlgeschlagen: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "Schlüssel %08lX.%lu: Korrekte Unterschlüssel-Anbindung\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "Schlüssel %08lX.%lu: Ungültige Unterschlüssel-Anbindung: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "Schlüssel %08lX.%lu: Gültiger Schlüsselwiderruf\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "Schlüssel %08lX.%lu: Ungültiger Schlüsselwiderruf: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Korrekte Eigenbeglaubigung"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Ungültige Eigenbeglaubigung"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Gültiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung "
-#~ "vorliegt"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Gültiger User-ID-Widerruf"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Ungültiger User-ID-Widerruf"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Gültiger Zerifikat-Widerruf"
-
-#~ msgid "Good certificate"
-#~ msgstr "Korrektes Zertifikat"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Ungültiger Zertifikatswiderruf"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Ungültiges Zertifikat"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "Doppelte Zertifikate - entfernt"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir fehlgeschlagen: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: Einfügen fehlgeschlagen: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: Einfügen fehlgeschlagen: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: eingefügt\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "Fehler beim Lesen des Verz.Satzes: %s\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu Schlüssel eingefügt\n"
-
-#~ msgid "enumerate keyblocks failed: %s\n"
-#~ msgstr "enumerate Schlüsselblock fehlgeschlagen: %s\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: Dir-Satz ohne Schlüssel - übergangen\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\t%lu wegen neuer Schlüssel\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu Schlüssel übersprungen\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu Schlüssel geändert\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Huch, keine Schlüssel\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Huch, keine User-IDs\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "Schlüssel %08lX: 'trust record' einfügen fehlgeschlagen: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "Schlüssel %08lX.%lu: in \"trustdb\" eingefügt\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "Schlüssel %08lX.%lu: wurde in der Zukunft erzeugt (Zeitreise oder Uhren "
-#~ "stimmen nicht überein)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "Schlüssel %08lX.%lu: verfallen am %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "Schlüssel %08lX.%lu: Vertrauensprüfung fehlgeschlagen: %s\n"
-
-#~ msgid "user '%s' not found: %s\n"
-#~ msgstr "Benutzer '%s' nicht gefunden: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefügt\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n"
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "Zu viele Zufallswerte angefordert: Die Grenze liegt bei %d\n"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "Weitere Infos: siehe http://www.gnupg.org"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr ""
-#~ "Möchten Sie wirklich einen Unterschriften-/Verschlüsselungschlüssel "
-#~ "erzeugen? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: Benutzer nicht gefunden: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "Zertifikat Leseproblem: %s\n"
-
-#~ msgid "can't lock keyring `%s': %s\n"
-#~ msgstr "kann Schlüsselbund `%s' nicht sperren: %s\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: Benutzer nicht gefunden\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr "WARNUNG: Lange 'Pref'-Records können noch nicht benutzt werden\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: Schlüsselbund kann nicht erzeugt werden: %s\n"
-
-#~ msgid "invalid"
-#~ msgstr "ungültig"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "RSA-Schlüssel können in dieser Version nicht verwendet werden\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Kein Schlüssel für User-ID\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Keine User-ID für Schlüssel\n"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "kein geheimer Schlüssel zur Entschlüsselung vorhanden\n"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr " (%d) ElGamal in einem v3-Paket\n"
-
-#~ msgid "Key generation can only be used in interactive mode\n"
-#~ msgstr ""
-#~ "Die Schlüsselerzeugung kann nur im interaktiven Modus benutzt werden.\n"
diff --git a/po/el.po b/po/el.po
deleted file mode 100644
index 047506317..000000000
--- a/po/el.po
+++ /dev/null
@@ -1,4673 +0,0 @@
-# Greek Translation of GnuPG.
-# Copyright (C) 2002 Free Software Foundation, Inc.
-# Dokianakis Theofanis <madf@hellug.gr>, 2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg-1.1.92\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-09-12 03:24+0200\n"
-"Last-Translator: Dokianakis Theofanis <madf@hellug.gr>\n"
-"Language-Team: Greek <nls@tux.hellug.gr>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-7\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-msgid "WARNING: using insecure memory!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ÷ñÞóç ìç áóöáëïýò ìíÞìçò!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "äåßôå ôï http://www.gnupg.org/faq.html ãéá ðåñéóóüôåñåò ðëçñïöïñßåò\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "ç ëåéôïõñãßá äåí åßíáé äõíáôÞ ÷ùñßò áñ÷éêïðïéçìÝíç áóöáëÞ ìíÞìç\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(ßóùò ÷ñçóéìïðïéÞóáôå ëÜèïò ðñüãñáììá ãéá áõôÞ ôçí åñãáóßá)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "íáé"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "yY"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "ü÷é"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "ôåñìáôéóìüò"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "ãåíéêü óöÜëìá"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "Üãíùóôïò ôýðïò ðáêÝôïõ"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "Üãíùóôç Ýêäïóç"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "Üãíùóôïò áëãüñéèìïò äçìïóßïõ êëåéäéïý"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "Üãíùóôïò áëãïñéèìïò ðåñßëçøçò"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "êáêü äçìüóéï êëåéäß"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "êáêü ìõóôéêü êëåéäß"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "êáêÞ õðïãñáöÞ"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "óöÜëìá checksum"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "êáêÞ öñÜóç êëåéäß"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "äåí âñÝèçêå ôï äçìüóéï êëåéäß"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "Üãíùóôïò áëãüñéèìïò êñõðôïãñÜöçóçò"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "áäõíáìßá ðñüóâáóçò óôç êëåéäïèÞêç"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "ìç Ýãêõñï ðáêÝôï"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "ìç Ýãêõñç èùñÜêéóç"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "Üãíùóôç ôáõôüôçôá ÷ñÞóôç (user id)"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "ôï ìõóôéêü êëåéäß äåí åßíáé äéáèÝóéìï"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "÷ñÞóç ëÜèïò ìõóôéêïý êëåéäéïý"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "äåí õðïóôçñßæåôáé"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "êáêü êëåéäß"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "óöÜëìá áíÜãíùóçò áñ÷åßïõ"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "óöÜëìá åããñáöÞò áñ÷åßïõ"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "Üãíùóôïò áëãüñéèìïò óõìðßåóçò"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "óöÜëìá ðñüóâáóçò áñ÷åßïõ"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "óöÜëìá äçìéïõñãßáò áñ÷åßïõ"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "ìç Ýãêõñç öñÜóç êëåéäß"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "ìç õëïðïéçìÝíïò áëãüñéèìïò äçìïóßïõ êëåéäéïý"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "ìç õëïðïéçìÝíïò áëãüñéèìïò êñõðôïãñÜöçóçò"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "Üãíùóôç êëÜóç õðïãñáöÞò"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "óöÜëìá ôçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "êáêü MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "üñéï ðüñïõ"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "ìç Ýãêõñç êëåéäïèÞêç"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "êáêü ðéóôïðïéçôéêü"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "êáêïäéáôõðùìÝíç ôáõôüôçôá ÷ñÞóôç (user id)"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "óöÜëìá êëåéóßìáôïò áñ÷åßïõ"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "óöÜëìá ìåôïíïìáóßáò áñ÷åßïõ"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "óöÜëìá äéáãñáöÞò áñ÷åßïõ"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "ìç áíáìåíüìåíá äåäïìÝíá"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "óýãêñïõóç þñáò (timestamp)"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "ìç ÷ñçóéìïðïéÞóéìïò áëãüñéèìïò äçìïóßïõ êëåéäéïý"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "ôï áñ÷åßï õðÜñ÷åé"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "áäýíáìï êëåéäß"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "ìç Ýãêõñï üñéóìá"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "êáêü URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "ìç õðïóôçñéæüìåíï URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "óöÜëìá äéêôýïõ"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "ìç êñõðôïãñáöçìÝíï"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "ìç åðåîåñãáóìÝíï"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "ìç ÷ñçóéìïðïéÞóéìï äçìüóéï êëåéäß"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "ìç ÷ñçóéìïðïéÞóéìï ìõóôéêü êëåéäß"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "óöÜëìá äéáêïìéóôÞ êëåéäéþí"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... áõôü åßíáé bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "âñÞêáôå Ýíá bug ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr "äåí åíôïðßóôçêå Üñèñùìá óõëëïãÞò åíôñïðßáò\n"
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "áäõíáìßá ðñüóâáóçò óôï `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "áäõíáìßá ëÞøçò ðëçñïöïñéþí ãéá ôï `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' äåí åßíáé êáíïíéêü áñ÷åßï - áãíïÞèçêå\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "óçìåßùóç: ôï áñ÷åßï random_seed åßíáé Üäåéï\n"
-
-#: cipher/random.c:401
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ìç Ýãêõñï ìÝãåèïò áñ÷åßïõ random_seed - äåí\n"
-"÷ñçóéìïðïéåßôå\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "áäõíáìßá áíÜãíùóçò ôïõ `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "óçìåßùóç: äåí Ý÷åé áíáíåùèåß ôï áñ÷åßï random_seed\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "áäõíáìßá äçìéïõñãßáò ôïõ `%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "áäõíáìßá åããñáöÞò ôïõ `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "áäõíáìßá êëåéóßìáôïò ôïõ `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ÷ñÞóç ìç áóöáëïýò ãåííÞôñéáò ôõ÷áßùí áñéèìþí!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Ç ãåííÞôñéá ôõ÷áßùí áñéèìþí åßíáé ðïëý áäýíáìç ãéá áõôÞ ôç ÷ñÞóç\n"
-"\n"
-"ÌÇ ×ÑÇÓÉÌÏÐÏÉÇÓÅÔÅ ÄÅÄÏÌÅÍÁ ÐÏÕ Å×ÏÕÍ ÐÁÑÁ×ÈÅÉ ÁÐÏ ÁÕÔÏ ÔÏ ÐÑÏÃÑÁÌÌÁ!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Äåí õðÜñ÷ïõí áñêåôÜ äéáèÝóéìá ôõ÷áßá bytes. Ðñïôåßíåôáé íá áíáìåßíåôå Þ\n"
-"íá áðáó÷ïëåßôå ôï ëåéôïõñãéêü óýóôçìá ìÝ÷ñé áõôü íá óõãêåíôñþóåé\n"
-"ðåñéóóüôåñç åíôñïðßá! (×ñåéÜæïíôáé %d ðåñéóóüôåñá bytes)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@ÅíôïëÝò:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[áñ÷åßï]|äçìéïõñãßá ìéáò õðïãñáöÞò"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[áñ÷åßï]|äçìéïõñãßá ìéáò ìç êñõðôïãñáöçìÝíçò õðïãñáöÞò"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "äçìéïõñãßá ìéáò ìç ðñïóáñôçìÝíçò õðïãñáöÞò"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "êñõðôïãñÜöçóç äåäïìÝíùí"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[áñ÷åßá]|êñõðôïãñÜöçóç áñ÷åßùí"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "êñõðôïãñÜöçóç ìå ÷ñÞóç ìüíï óõììåôñéêþí áëãïñßèìùí"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "áðïèÞêåõóç ìüíï"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "áðïêñõðôïãñÜöçóç äåäïìÝíùí (ðñïêáèïñéóìÝíï)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[áñ÷åßá]|áðïêñõðôïãñÜöçóç áñ÷åßùí"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "åðáëÞèåõóç ìéáò õðïãñáöÞò"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí êáé õðïãñáöþí"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "Ýëåã÷ïò õðïãñáöÞò êëåéäéïý"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "áðåéêüíéóç ôçò ëßóôáò êëåéäéþí êáé áðïôõðùìÜôùí (fingerprints)"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "áðåéêüíéóç ôçò ëßóôáò ìõóôéêþí êëåéäéþí"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "äçìéïõñãßá åíüò íÝïõ æåýãïõò êëåéäéþí"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "áöáßñåóç ôùí êëåéäéþí áðü ôç äçìüóéá êëåéäïèÞêç"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "áöáßñåóç ôùí êëåéäéþí áðü ôç ìõóôéêÞ êëåéäïèÞêç"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "õðïãñáöÞ åíüò êëåéäéïý"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "õðïãñáöÞ åíüò êëåéäéïý ôïðéêÜ"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "õðïãñáöÞ åíüò êëåéäéïý ìç-áíáêáëÝóéìá"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "õðïãñáöÞ åíüò êëåéäéïý ôïðéêÜ êáé ìç-áíáêáëÝóéìá"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "õðïãñáöÞ Þ åðåîåñãáóßá åíüò êëåéäéïý"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "äçìéïõñãßá åíüò ðéóôïðïéçôéêïý áíÜêëçóçò"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "åîáãùãÞ êëåéäéþí"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "åîáãùãÞ êëåéäéþí óå Ýíá äéáêïìéóôÞ êëåéäéþí"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "åéóáãùãÞ êëåéäéþí áðü Ýíá äéáêïìéóôÞ êëåéäéþí"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "áíáæÞôçóç êëåéäéþí óå Ýíá äéáêïìéóôÞ êëåéäéþí"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "áíáíÝùóç üëùí ôùí êëåéäéþí áðü Ýíá äéáêïìéóôÞ êëåéäéþí"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "åéóáãùãÞ/óõã÷þíåõóç êëåéäéþí"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "áðåéêüíéóç ìüíï ôçò áêïëïõèßáò ðáêÝôùí"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "åîáãùãÞ ôùí ôéìþí åìðéóôïóýíçò"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "åéóáãùãÞ ôùí ôéìþí åìðéóôïóýíçò"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "áíáíÝùóç ôçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "áíáíÝùóç ôçò ðáñáìåëåéìÝíçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "äéüñèùóç ìéáò öèáñìÝíçò âÜóçò äåäïìÝíùí åìðéóôïóýíçò"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Áöáßñåóç-ÈùñÜêéóçò åíüò áñ÷åßïõ Þ stdin"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "ÐñïóèÞêç-ÈùñÜêéóçò åíüò áñ÷åßïõ Þ stdin"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|áëãüñ [áñ÷åßá]| áðåéêüíéóç ðåñéëÞøåùí ôùí ìçíõìÜôùí"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"ÅðéëïãÝò:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "äçìéïõñãßá ascii èùñáêéóìÝíçò åîüäïõ"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|ÏÍÏÌÁ|êñõðôïãñÜöçóç ãéá ÏÍÏÌÁ"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|ÏÍÏÌÁ|÷ñÞóç ôïõ ÏÍÏÌÁôïò ùò ðñïêáèïñéóìÝíïõ ðáñáëÞðôç"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "÷ñÞóç ôïõ ðñïêáèïñéóìÝíïõ êëåéäéïý ùò ðñïêáèïñéóìÝíïõ ðáñáëÞðôç"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "÷ñÞóç áõôÞò ôçò ôáõôüôçôáò (user id) ãéá õðïãñáöÞ Þ áðïêñõðôïãñÜöçóç"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|êáèïñéóìüò åðéðÝäïõ óõìðßåóçò N (0 áðåíåñãïðïéåß)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "÷ñÞóç êáíïíéêÞò êáôÜóôáóçò êåéìÝíïõ"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "÷ñÞóç ùò áñ÷åßïõ åîüäïõ"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "áíáëõôéêÜ"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "Þóõ÷ç Ýîïäïò"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "ìç ÷ñÞóç ôåñìáôéêïý"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "åîáíáãêáóìüò ÷ñÞóçò v3 õðïãñáöþí"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "ü÷é åîáíáãêáóìüò ÷ñÞóçò v3 õðïãñáöþí"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "åîáíáãêáóìüò ÷ñÞóçò v4 õðïãñáöþí"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "ü÷é åîáíáãêáóìüò ÷ñÞóçò v4 õðïãñáöþí"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "÷ñÞóç ðÜíôïôå MDC ãéá êñõðôïãñÜöçóç"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "ðïôÝ ÷ñÞóç MDC ãéá êñõðôïãñÜöçóç"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "íá ìç ãßíåé êáììßá áëëáãÞ"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr "åñþôçóç ðñéí ôçí åðéêÜëõøç"
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "÷ñÞóç ôïõ gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "êáôÜóôáóç batch: íá ìç ãßíïíôáé åñùôÞóåéò"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "áðÜíôçóç íáé óôéò ðåñéóóüôåñåò åñùôÞóåéò"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "áðÜíôçóç ü÷é óôéò ðåñéóóüôåñåò åñùôÞóåéò"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "ðñïóèÞêç áõôïý ôïõ êëåéäéïý óôç ëßóôá ôùí êëåéäïèçêþí"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "ðñïóèÞêç áõôÞò ôçò ìõóôéêÞò êëåéäïèÞêçò óôç ëßóôá"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "áðåéêüíéóç ôçò êëåéäïèÞêçò óôçí ïðïßá áíáöÝñåôå ôï êëåéäß"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|ÏÍÏÌÁ|÷ñÞóç ÏÍÏÌÁôïò óáí ðñïêáèïñéóìÝíï ìõóôéêü êëåéäß"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|ÄÉÁÊÏÌÉÓÔÇÓ|÷ñÞóç áõôïý ôïõ äéáêïìéóôÞ êëåéäéþí ãéá áíáæÞôçóç"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|ÏÍÏÌÁ|êáèïñéóìüò ôïõ óåô ÷áñáêôÞñùí ôåñìáôéêïý óå ÏÍÏÌÁ"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "áíÜãíùóç åðéëïãþí áðü áñ÷åßï"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|åããñáöÞ ôùí ðëçñïöïñéþí êáôÜóôáóçò óôï FD"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[áñ÷åßï]|åããñáöÞ ôùí ðëçñïöïñéþí êáôÜóôáóçò óôï áñ÷åßï"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KEYID|áðüëõôç åìðéóôïóýíç óå áõôü ôï êëåéäß"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|ÁÑ×ÅÉÏ|öüñôùìá ôïõ áñèñþìáôïò åðÝêôáóçò ÁÑ×ÅÉÏ"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "åîïìïßùóç ôçò êáôÜóôáóçò ðïõ ðåñéãñÜöåôáé óôï RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"óõìðåñéöïñÜ üëùí ôùí åðéëïãþí ðáêÝôá,áëãüñéèìïé êáé ðåñßëçøç óå OPENPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"ïñéóìüò üëùí ôùí åðéëïãþí ðáêÝôá,áëãüñéèìïé,ðåñßëçøç óå PGP 2.x óõìðåñéöïñÜ"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|÷ñÞóç ôçò êáôÜóôáóçò öñÜóçò êëåéäß N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr ""
-"|ONOMA|÷ñÞóç ôïõ áëãüñéèìïõ ðåñßëçøçò ìçíýìáôïò ÏÍÏÌÁ ãéá öñÜóåéò êëåéäéÜ"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|ÏÍÏÌÁ|÷ñÞóç áëãüñéèìïõ êñõðôïãñÜöçóçò ÏÍÏÌÁ ãéá öñÜóåéò êëåéäéÜ"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|ÏÍÏÌÁ|÷ñÞóç áëãüñéèìïõ êñõðôïãñÜöçóçò ÏÍÏÌÁ"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|ÏÍÏÌÁ|÷ñÞóç áëãüñéèìïõ ðåñßëçøçò ìçíýìáôïò ÏÍÏÌÁ "
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|÷ñÞóç áëãïñßèìïõ óõìðßåóçò N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "äéáãñáöÞ ôïõ ðåäßïõ keyid ôùí êñõðôïãñáöçìÝíùí ðáêÝôùí"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Áðåéêüíéóç ôùí Photo ID"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Ìç áðåéêüíéóç ôùí Photo ID"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Ïñéóìüò ôçò ãñáììÞò åíôïëþí ãéá áðåéêüíéóç ôùí Photo ID"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(äåßôå ôç óåëßäá man ãéá ìéá ðëÞñç ëßóôá åíôïëþí êáé åðéëïãþí)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Ðáñáäåßãìáôá:\n"
-"\n"
-" -se -r Bob [áñ÷åßï] õðïãñáöÞ êáé êñõðôïãñÜöçóç ãéá ôï Bob\n"
-" --clearsign [áñ÷åßï] äçìéïõñãßá ìç êñõðôïãñáöçìÝíçò õðïãñáöÞò\n"
-" --detach-sign [áñ÷åßï] äçìéïõñãßá áðïêïììÝíçò õðïãñáöÞò\n"
-" --list-keys [ïíüìáôá] áðåéêüíéóç êëåéäéþí\n"
-" --fingerprint [ïíüìáôá] áðåéêüíéóç áðïôõðùìÜôùí (fingerprints)\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "ÁíáöÝñåôå ôá ðñïâëÞìáôá óôï <gnupg-bugs@gnu.org>\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "×ñÞóç: gpg [åðéëïãÝò] [áñ÷åßá] (-h ãéá âïÞèåéá)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Óýíôáîç: gpg [åðéëïãÝò] [áñ÷åßá]\n"
-"õðïãñáöÞ, Ýëåã÷ïò, êñõðôïãñÜöçóç Þ áðïêñõðôïãñÜöçóç\n"
-"ç ðñïêáèïñéóìÝíç ëåéôïõñãßá åîáñôÜôáé áðü ôá äåäïìÝíá åéóüäïõ\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Õðïóôçñéæüìåíïé áëãüñéèìïé:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "÷ñÞóç: gpg [åðéëïãÝò] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "óõãêñïõüìåíåò åíôïëÝò\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr "äåí âñÝèçêå ôï óýìâïëï = óôïí ïñéóìü ôçò ïìÜäáò \"%s\"\n"
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ìç áóöáëÞò éäéïêôçóßá óôï %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ìç áóöáëåßò Üäåéåò óôï %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ìç áóöáëÞò éäéïêôçóßáåóþêëåéóôïõ öáêÝëïõ óôï %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ìç áóöáëåßò Üäåéåò åóþêëåéóôïõ öáêÝëïõ óôï %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "ÓÇÌÅÉÙÓÇ: áãíïÞèçêå ôï ðáëéü áñ÷åßï ðñïêáèïñéóìÝíùí åðéëïãþí `%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ìç ðñïêáèïñéóìÝíï áñ÷åßï åðéëïãþí `%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "áñ÷åßï åðéëïãþí `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "áíÜãíùóç åðéëïãþí áðü `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-"ç åðÝêôáóç ôïõ êñõðôáëãüñéèìïõ \"%s\" äåí öïñôþèçêå åðåéäÞ õðÜñ÷ïõí\n"
-"áíáóöáëåßò Üäåéåò\n"
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "ôï %s äåí åßíáé Ýãêõñï óåô ÷áñáêôÞñùí\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "áäõíáìßá åðåîåñãáóßáò ôïõ URI ôïõ äéáêïìéóç êëåéäéþí\n"
-
-#: g10/g10.c:1550
-#, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s:%d: ìç Ýãêõñåò åðéëïãÝò åéãáãùãÞò\n"
-
-#: g10/g10.c:1553
-msgid "invalid import options\n"
-msgstr "ìç Ýãêõñåò åðéëïãÝò åéãáãùãÞò\n"
-
-#: g10/g10.c:1560
-#, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s:%d: ìç Ýãêõñåò åðéëïãÝò åîáãùãÞò\n"
-
-#: g10/g10.c:1563
-msgid "invalid export options\n"
-msgstr "ìç Ýãêõñåò åðéëïãÝò åîáãùãÞò\n"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "áäõíáìßá ïñéóìïý ôïõ exec-path óå %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï ðñüãñáììá ßóùò äçìéïõñãÞóåé áñ÷åßï core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï %s ðáñáêÜìðôåé ôï %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ôï %s äåí åßíáé ãéá êáíïíéêÞ ÷ñÞóç!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "ôï %s äåí åðéôñÝðåôáé ìå ôï %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "ôï %s äåí Ý÷åé êáììßá Ýííïéá ìáæß ìå ôï %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"ìðïñåßôå íá êÜíåôå áðïêïììÝíåò Þ êáèáñÝò õðïãñáöÝò ìüíï óå --pgp2 êáôÜóôáóç\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-"äåí ìðïñåßôå íá õðïãñÜöåôå êáé íá êñõðôïãñáöåßôå ôáõôü÷ñïíá óå --pgp2 "
-"êáôÜóôáóç\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "ìüíï áñ÷åßá åðéôñÝðïíôáé (êáé ü÷é pipes) êáôá ôçí êáôáóôáóç --pgp2.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-"ç êñõðôïãñÜöçóç åíüò ìçíýìáôïò óå --pgp2 êáôÜóôáóç áðáéôåß ôïí áëãïñ. IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "áõôü ôï ìÞíõìá ßóùò äåí ìðïñåß íá ÷ñçóéìïðïéçèåß áðü %s\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "ï åðéëåãìÝíïò áëãüñéèìïò êñõðôïãñÜöçóçò äåí åßíáé Ýãêõñïò\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "ï åðéëåãìÝíïò áëãüñéèìïò ðåñßëçøçò äåí åßíáé Ýãêõñïò\n"
-
-#: g10/g10.c:1830
-msgid "selected certification digest algorithm is invalid\n"
-msgstr ""
-"ï åðéëåãìÝíïò áëãüñéèìïò ðåñßëçøçò ãéá ðéóôïðïßçóç\n"
-"äåí åßíáé Ýãêõñïò\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "ï áëãüñéèìïò óõìðßåóçò ðñÝðåé íá åßíáé ìåôáîý %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed ðñÝðåé íá åßíáé ìåãáëýôåñá áðü 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed ðñÝðåé íá åßíáé ìåãáëýôåñá áðü 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth ðñÝðåé íá åßíáé ìåôáîý 1 êáé 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ç áðëÞ S2K êáôÜóôáóç (0) ðñÝðåé íá áðïöåýãåôáé\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "ìç Ýãêõñç êáôÜóôáóç S2K; ðñÝðåé íá åßíáé 0, 1 Þ 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "ìç Ýãêõñï default-check-level· ðñÝðåé íá åßíáé 0, 1, 2, Þ 3\n"
-
-#: g10/g10.c:1868
-msgid "invalid default preferences\n"
-msgstr "ìç Ýãêõñåò ðñïåðéëïãÝò\n"
-
-#: g10/g10.c:1876
-msgid "invalid personal cipher preferences\n"
-msgstr "ìç Ýãêõñåò ðñïåðéëïãÝò ðñïóùðéêïý êñõðôáëãüñéèìïõ\n"
-
-#: g10/g10.c:1880
-msgid "invalid personal digest preferences\n"
-msgstr "ìç Ýãêõñåò ðñïåðéëïãÝò ðñïóùðéêïý áëãüñéèìïõ ðåñßëçøçò\n"
-
-#: g10/g10.c:1884
-msgid "invalid personal compress preferences\n"
-msgstr "ìç Ýãêõñåò ðñïåðéëïãÝò ðñïóùðéêïý áëãüñéèìïõ óõìðßåóçò\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "áðïôõ÷ßá áñ÷éêïðïßçóçò ôçò TrustDB: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: äþèçêáí ðáñáëÞðôåò (-r) ÷þñéò ÷ñÞóç êñõðôïãñÜöçóçò\n"
-"äçìïóßïõ êëåéäéïý\n"
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key user-id"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key user-id"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key user-id"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key user-id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key user-id [åíôïëÝò]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "áäõíáìßá ðñüóâáóçò ôïõ %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [user-id] [êëåéäïèÞêç]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "áðïèùñÜêéóç áðÝôõ÷å: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "èùñÜêéóç áðÝôõ÷å: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[üíïìá áñ÷åßïõ]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Ìðïñåßôå ôþñá íá åéóáãÜãåôå ôï ìÞíõìá óáò ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "áäõíáìßá ðñüóâáóçò ôïõ `%s'\n"
-
-#: g10/g10.c:2691
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"Ýíá üíïìá óçìåßùóçò ìðïñåß íá ðåñéÝ÷åé ìüíï åêôõðþóéìïõò ÷áñáêôÞñåò êáé "
-"êåíÜ êáé íá ëÞãåé ìå Ýíá '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "ç ôéìÞ óçìåßùóçò ðñÝðåé íá ìç ÷ñçóéìïðïéåß ÷áñáêôÞñåò control\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "ôï URL ðïëéôéêÞò ðéóôïðïéçôéêïý ðïõ äüèçêå äåí åßíáé Ýãêõñï\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "ôï URL ðïëéôéêÞò õðïãñáöÞò ðïõ äüèçêå äåí åßíáé Ýãêõñï\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "èùñÜêéóç: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "ìç Ýãêõñç åðéêåöáëßäá èùñÜêéóçò: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "åðéêåöáëßäá èùñÜêéóçò: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "ìç Ýãêõñç åðéêåöáëßäá clearsig\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "öùëéáóìÝíåò ìç êñõðôïãñáöçìÝíåò õðïãñáöÝò\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "ìç Ýãêõñç dash escaped ãñáììÞ: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "ìç áíáìåíüìåíç èùñÜêéóç:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "ìç Ýãêõñïò radix64 ÷áñáêôÞñáò %02x ðáñÜâëåøç\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "ðñüùñï ôÝëïò áñ÷åßïõ (áðïõóßá CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "ðñüùñï ôÝëïò áñ÷åßïõ (åíôüò CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "ëÜèïò ìïñöÞ CRC\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "óöÜëìá CRC: %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "ðñüùñï ôÝëïò áñ÷åßïõ (óôï Ôrailer)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "óöÜëìá óôç ãñáììÞ trailer\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "äå âñÝèçêáí Ýãêõñá OpenPGP äåäïìÝíá.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "ìç Ýãêõñç èùñÜêéóç: ç ãñáììÞ åßíáé ðÜíù áðü %d ÷áñáêôÞñåò\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"åêôõðþóéìïò, óå åéóáãùãéêÜ, ÷áñáêôÞñáò óôç èùñÜêéóç - ßóùò Ýãéíå ÷ñÞóç "
-"ðñïâëçìáôéêïý MTA\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Äåí Ý÷åé ïñéóôåß áéôßá"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Ôï êëåéäß Ý÷åé ðáñáêáìèåß"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Ôï êëåéäß Ý÷åé åêôåèåß"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Ôï êëåéäß äå ÷ñçóéìïðïéåßôáé ðëÝïí"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Ôï User ID äåí åßíáé ðëÝïí Ýãêõñï"
-
-#: g10/pkclist.c:73
-msgid "reason for revocation: "
-msgstr "áéôßá ãéá áíÜêëçóç:"
-
-#: g10/pkclist.c:90
-msgid "revocation comment: "
-msgstr "ó÷üëéï áíÜêëçóçò:"
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Äåí äüèçêå áîßá åìðéóôïóýíçò óôï:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Ðáñáêáëþ áðïöáóßóôå ðüóï êáëÜ åìðéóôåýåóôå áõôü ôï\n"
-"÷ñÞóôç, þóôå íá ìðïñåß íá åðáëçèåýåé êëåéäéÜ Üëëùí (ìå ôï\n"
-"íá êïéôÜæåé passports êáé fingerprints áðü äéÜöïñåò ðçãÝò...);\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Äåí îÝñù\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = ÄÅÍ Ý÷ù åìðéóôïóýíç\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = ¸÷ù ìåñéêÞ åìðéóôïóýíç\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = ¸÷ù ðëÞñç åìðéóôïóýíç\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Åìðéóôåýïìáé áðüëõôá\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = áðåéêüíéóç ðåñéóóüôåñùí ðëçñïöïñéþí\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = ðßóù óôï êõñßùò ìåíïý\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = ðáñÜëåéøç áõôïý ôïõ êëåéäéïý\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = ôåñìáôéóìüò\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Ç áðüöáóç óáò; "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Óßãïõñá èÝëåôå áõôü ôï êëåéäß íá ïñéóôåß óáí áðüëõôçò åìðéóôïóýíçò; "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "ÐéóôïðïéçôéêÜ ðïõ ïäçãïýí óå Ýíá êëåéäß áðüëõôçò åìðéóôïóýíçò:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "êëåéäß %08lX: ôï êëåéäß Ý÷åé áíáêëçèåß!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "×ñÞóç ïðùóäÞðïôå áõôïý ôïõ êëåéäéïý; "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "êëåéäß %08lX: ôï õðïêëåéäß Ý÷åé áíáêëçèåß!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: ôï êëåéäß Ý÷åé ëÞîåé\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Äåí õðÜñ÷åé Ýíäåéîç üôé ç õðïãñáöÞ áõôÞ áíÞêåé óôïí éäéïêôÞôç.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: ÄÅÍ åìðéóôåõüìáóôå áõôü ôï êëåéäß\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Äåí åßíáé âÝâáéï üôé áõôü ôï êëåéäß áíÞêåé óôïí éäéïêôÞôç\n"
-"áëëÜ åí ðÜóç ðåñéðôþóåé ãßíåôáé äåêôü\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Áõôü ôï êëåéäß ðéèáíþò áíÞêåé óôïí éäéïêôÞôç\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Áõôü ôï êëåéäß áíÞêåé óå åìÜò\n"
-
-#: g10/pkclist.c:513
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"ÄÅÍ åßíáé âÝâáéï üôé áõôü ôï êëåéäß áíÞêåé óôï Üôïìï ôï ïðïßï\n"
-"áíáöÝñåôå ôï user ID. ÅÜí *ðñáãìáôéêÜ* îÝñåôå ôé êÜíåôå, ìðïñåßôå\n"
-"íá áðáíôÞóåôå óôçí åðüìåíç åñþôçóç êáôáöáôéêÜ\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ×ñÞóç êëåéäéïý ÷ùñßò åìðéóôïóýíç!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß Ý÷åé áíáêëçèåß áðü ôïí éäéïêôÞôç ôïõ!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Áõôü ìðïñåß íá óçìáßíåé üôé ç õðïãñáöÞ åßíáé ðëáóôïãñáößá.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï õðïêëåéäß Ý÷åé áíáêëçèåß áðü ôïí éäéïêôÞôç ôïõ!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Óçìåßùóç: Áõôü ôï êëåéäß Ý÷åé áðåíåñãïðïéçèåß.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Óçìåßùóç: Áõôü ôï êëåéäß Ý÷åé ëÞîåé!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß äåí Ý÷åé ðéóôïðïéçèåß ìå åìðéóôåýóéìç "
-"õðïãñáöÞ!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " Äåí õðÜñ÷åé Ýíäåéîç üôé ç õðïãñáöÞ áíÞêåé óôïí éäéïêôÞôç.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ÄÅÍ åìðéóôåõüìáóôå áõôü ôï êëåéäß!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Ç õðïãñáöÞ ìÜëëïí åßíáé ðëáóôïãñáößá.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü ôï êëåéäß äåí Ý÷åé ðéóôïðïéçèåß ìå õðïãñáöÝò\n"
-"áñêåôÞò åìðéóôïóýíçò!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Äåí åßíáé âÝâáéï üôé ç õðïãñáöÞ áíÞêåé óôïí éäéïêôÞôç.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ðáñáëåßöèçêå: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ðáñáëåßöèçêå: äçìüóéï êëåéäß åßíáé Þäç ðáñüí\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Äåí ïñßóôçêå Ýíá user ID. (÷ñçóéìïðïéåßóôå ôï \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"ÐëçêôñïëïãÞóôå ôï user ID. ÔÝëïò ìå ìéá Üäåéá ãñáììÞ: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Äåí õðÜñ÷åé áõôü ôï user ID.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr ""
-"ðáñáëåßöèçêå: äçìüóéï êëåéäß Ý÷åé Þäç ïñéóôåß óáí åî ïñéóìïý ðáñáëÞðôçò\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Ôï äçìüóéï êëåéäß Ý÷åé áðåíåñãïðïéçèåß.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "ðáñáëåßöèçêå: äçìüóéï êëåéäß Ý÷åé Þäç ïñéóôåß\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "Üãíùóôïò ðñïêáèïñéóìÝíïò ðáñáëÞðôçò `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ðáñáëåßöèçêå: ôï äçìüóéï êëåéäß Ý÷åé áðåíåñãïðïéçèåß.\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "êáììßá Ýãêõñç äéåýèõíóç\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "ç ðñïåðéëïãÞ %c%lu äåí åßíáé Ýãêõñç\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "ç ðñïåðéëïãÞ %c%lu áíôéãñÜöôçêå\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "ðÜñá ðïëëÝò `%c' ðñïåðéëïãÝò\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï \"êïñäüíé\" ôçò åðéëïãÞò\n"
-
-#: g10/keygen.c:524
-msgid "writing direct signature\n"
-msgstr "åããñáöÞ Üìåóçò õðïãñáöÞò\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "åããñáöÞ éäéï-õðïãñáöÞò\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "åããñáöÞ õðïãñáöÞò \"äÝóéìïõ\" êëåéäéïý\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "ìç Ýãêõñï ìÝãåèïò êëåéäéïý, ÷ñÞóç %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "óôñïããõëïðïßçóç ôïõ ìÝãåèïò êëåéäéïý Ýùò %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Ðáñáêáëþ åðéëÝîôå ôïí ôýðï ôïõ êëåéäéïý ðïõ èÝëåôå:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA êáé ElGamal (ðñïêáèïñéóìÝíï)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (ãéá õðïãñáöÞ ìüíï)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (ãéá êñõðôïãñÜöçóç ìüíï)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (õðïãñáöÞ êáé êñõðôïãñÜöçóç)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (ãéá õðïãñáöÞ ìüíï)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (ãéá êñõðôïãñÜöçóç ìüíï)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (õðïãñáöÞ êáé êñõðôïãñÜöçóç)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Ç åðéëïãÞ óáò; "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-"Ç ÷ñÞóç áõôïý ôïõ áëãüñéèìïõ áðïäïêéìÜæåôáé - óßãïõñá íá äçìéïõñãçèåß; "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Ìç Ýãêõñç åðéëïãÞ.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Óå äéáäéêáóßá äçìéïõñãßáò åíüò íÝïõ %s keypair.\n"
-" åëÜ÷éóôï ìÝãåèïò êëåéäéïý åßíáé 768 bits\n"
-" ðñïêáèïñéóìÝíï ìÝãåèïò êëåéäéïý åßíáé 1024 bits\n"
-" ìÝãéóôï ðñïôåéíüìåíï ìÝãåèïò êëåéäéïý åßíáé 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Ôé ìÝãåèïò êëåéäéïý èá èÝëáôå; (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "Ï DSA åðéôñÝðåé ìüíï ìÝãåèïò êëåéäéïý áðü 512 Ýùò 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr ""
-"ôï ìÝãåèïò êëåéäéïý åßíáé ðïëý ìéêñü, 1024 åßíáé ç åëÜ÷éóôç ôéìÞ ãéá RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr ""
-"ôï ìÝãåèïò êëåéäéïý åßíáé ðïëý ìéêñü, 768 åßíáé ç åëÜ÷éóôç åðéôñåðüìåíç "
-"ôéìÞ.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr ""
-"ôï ìÝãåèïò êëåéäéïý åßíáé ðïëý ìåãÜëï, %d åßíáé ç ìÝãéóôç ôéìÞ ðïõ "
-"åðéôñÝðåôáé.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"ÌåãÝèç êëåéäéþí ìåãáëýôåñá ôïõ 2048 äåí óõíéóôþíôáé ãéáôß\n"
-"ïé õðïëïãéóìïß åßíáé ÷ñïíïâüñïé!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Óßãïõñá èÝëåôå áõôü ôï ìÝãåèïò êëåéäéïý; "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"ÅíôÜîåé, áëëÜ íá Ý÷åôå õð'üøç üôé ç ïèüíç êáé ôï ðëçêôñïëüãéï åßíáé\n"
-"åðßóçò ðïëý ôñùôÜ óå åðéèÝóåéò!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Ôï ìÝãåèïò êëåéäéïý ðïõ æçôÞèçêå åßíáé %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "óôñïããõëïðïéÞèçêå Ýùò ôá %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Ðáñáêáëþ ïñßóôå ãéá ðüóï êáéñü ôï êëåéäß èá åßíáé Ýãêõñï.\n"
-" 0 = ôï êëåéäß äåí ëÞãåé ðïôÝ\n"
-" <n> = ôï êëåéäß ëÞãåé óå n ìÝñåò\n"
-" <n>w = ôï êëåéäß ëÞãåé óå n åâäïìÜäåò\n"
-" <n>m = ôï êëåéäß ëÞãåé óå n ìÞíåò\n"
-" <n>y = ôï êëåéäß ëÞãåé óå n Ýôç\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Ðáñáêáëþ ïñßóôå ãéá ðüóï êáéñü ôï êëåéäß èá åßíáé Ýãêõñï.\n"
-" 0 = ôï êëåéäß äåí ëÞãåé ðïôÝ\n"
-" <n> = ôï êëåéäß ëÞãåé óå n ìÝñåò\n"
-" <n>w = ôï êëåéäß ëÞãåé óå n åâäïìÜäåò\n"
-" <n>m = ôï êëåéäß ëÞãåé óå n ìÞíåò\n"
-" <n>y = ôï êëåéäß ëÞãåé óå n Ýôç\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Ôï êëåéäß åßíáé Ýãêõñï ãéá; (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Ç õðïãñáöÞ Ýéíáé Ýãêõñç ãéá; (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "ìç Ýãêõñç ôéìÞ\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "ôï %s äåí ëÞãåé ðïôÝ\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "ôï %s ëÞãåé óôéò %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Ôï óýóôçìá óáò äåí ìðïñåß íá áðåéêïíßóåé çìåñïìçíßåò ðÝñá ôïõ 2038.\n"
-"¼ìùò, èá ÷åéñßæïíôáé óùóôÜ Ýùò ôï 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Åßíáé áõôü óùóôü (y/n); "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"×ñåéÜæåóôå Ýíá User-ID ãéá íá áíáãíùñßóåôå Ýíá êëåéäß. Ôï ëïãéóìéêü "
-"êáôáóêåõÜæåé\n"
-"ôï user-id áðü ôï Áëçèéíü ¼íïìá, Ó÷üëéï êáé Äéåýèõíóç Email êÜðùò Ýôóé:\n"
-" \"Nikolaoy Nikos (toy Ioanni) <nikoln@athens.gr>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Áëçèéíü ¼íïìá: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò óôï üíïìá\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Ôï üíïìá äåí åðéôñÝðåôáé íá îåêéíÜ ìå áñéèìçôéêü øçößï\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Ôï üíïìá ðñÝðåé íá Ý÷åé ôïõëÜ÷éóôïí 5 ÷áñáêôÞñåò\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Äéåýèõíóç Email: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Ìç Ýãêõñç äéåýèõíóç Email\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Ó÷üëéï: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò óôï ó÷üëéï\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "×ñçóéìïðïéåßôå ôï `%s' óåô ÷áñáêôÞñùí.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"ÅðéëÝîáôå ôï USER-ID:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Ðáñáêáëþ ìçí ôïðïèåôåßôå ôçí äéåýèõíóç email óôï üíïìá Þ óôï ó÷üëéï\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoQq"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "ÁëëáãÞ (N)üíïìá, (C)ó÷üëéï, (E)mail Þ (Q)ôåñìáôéóìüò; "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "ÁëëáãÞ (N)üíïìá, (C)ó÷üëéï, (E)mail Þ (O)åíôÜîåé/(Q)ôåñìáôéóìüò; "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Ðáñáêáëþ, äéïñèþóôå ðñþôá ôï óöÜëìá\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"×ñåéÜæåóôå ìéá ÖñÜóç êëåéäß ãéá íá ðñïóôáôåýóåôå ôï ìõóôéêü êëåéäß.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "ç öñÜóç êëåéäß äåí åðáíáëÞöèçêå óùóôÜ. ÄïêéìÜóôå îáíÜ"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Äåí ÷ñåéÜæåóôå ìéá öñÜóç êëåéäß - áõôü åßíáé ìÜëëïí ìéá *êáêÞ* éäÝá!\n"
-"Èá óõíå÷ßóù üðùò êáé íá Ý÷åé. Ìðïñåßôå íá áëëÜîåôå ôç öñÜóç óáò\n"
-"üðïôå èÝëåôå, ìå ôçí åðéëïãÞ \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"ÐñÝðåé íá äçìéïõñãçèïýí ðïëëÜ ôõ÷áßá bytes. Åßíáé êáëÞ éäÝá íá êÜíåôå\n"
-"êÜðïéá åñãáóßá (ðëçêôñïëïãÞóôå, ìåôáêéíÞóôå ôï ðïíôßêé, ÷ñçóéìïðïéÞóôå\n"
-"ôïõò äßóêïõò) êáôá ôç äéÜñêåéá õðïëïãéóìïý ðñþôùí áñéèìþí. Áõôü äßíåé\n"
-"óôç ãåííÞôñéá ôõ÷áßùí áñéèìþí ìéá åõêáéñßá íá ìáæÝøåé áñêåôÞ åíôñïðßá.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "Ôï æåýãïò êëåéäéþí DSA èá åßíáé 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Ç äçìéïõñãßá êëåéäéïý áíáâëÞèçêå.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "åããñáöÞ ôïõ äçìïóßïõ êëåéäéïý óôï `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "åããñáöÞ ôïõ ìõóôéêïý êëåéäéïý óôï `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "äå âñÝèçêå åããñÜøéìç äçìüóéá êëåéäïèÞêç: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "äå âñÝèçêå åããñÜøéìç ìõóôéêÞ êëåéäïèÞêç: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "áäõíáìßá åããñáöÞò äçìüóéáò êëåéäïèÞêçò `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "áäõíáìßá åããñáöÞò ìõóôéêÞò êëåéäïèÞêçò `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "ôï äçìüóéï êáé ôï ìõóôéêü êëåéäß äçìéïõñãÞèçêáí êáé õðïãñÜöçêáí.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "óçìåßùóç êëåéäéïý óáí áðüëõôçò åìðéóôïóýíçò.\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Óçìåéþóôå üôé áõôü ôï êëåéäß äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ãéá "
-"êñõðôïãñÜöçóç.\n"
-"Ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí åíôïëÞ \"--edit-key\" ãéá íá äçìéïõñãçèåß\n"
-"Ýíá äåõôåñåýïí êëåéäß ãéá áõôü ôï ëüãï.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Ç äçìéïõñãßá êëåéäéïý áðÝôõ÷å: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
-"áðëþò ðñüâëçìá óôï ñïëüé)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"ôï êëåéäß äçìéïõñãÞèçêå %lu äåõôåñüëåðôá óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
-"áðëþò ðñüâëçìá óôï ñïëüé)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr ""
-"ÓÇÌÅÉÙÓÇ: ç äçìéïõñãßá õðïêëåéäéþí ãéá êëåéäéÜ v3 äåí åßíáé óýìöùíï\n"
-"ìå ôï OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Óßãïõñá íá äçìéïõñãçèåß; "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output äåí ëåéôïõñãåß ãéá áõôÞ ôçí åíôïëÞ\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: áäõíáìßá ðñüóâáóçò ôïõ: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr "áäõíáìßá ÷ñÞóçò åíüò óõììåôñéêïý ðáêÝôïõ ESK ëüãù ôçò êáôÜóôáóçò S2K\n"
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' Þäç óõìðéÝóôçêå\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Üäåéï áñ÷åßï\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"êñõðôïãñÜöçóç ìå êëåéäßá RSA áðü 2048 bit Þ ðéï ëßãï ìüíï óå êáôÜóôáóç --"
-"pgp2\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "áíÜãíùóç áðü `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"áäõíáìßá ÷ñÞóçò ôïõ êñõðôáëãüñéèìïõ IDEA ãéá üëá ôá êëåéäßá ìå ôá "
-"ïðïßáêñõðôïãñáöåßôå.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-"ï åîáíáãêáóìüò óõììåôñéêïý áëãüñéèìïõ %s (%d) ðáñáâéÜæåé ôéò\n"
-"åðéëïãÝò ôïõ ðáñáëÞðôç\n"
-
-#: g10/encode.c:558 g10/sign.c:758
-#, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"ï åîáíáãêáóìüò ÷ñÞóçò ôïõ áëãïñßèìïõ óõìðßåóçò %s (%d) ðáñáâéÜæåé ôéò\n"
-"åðéëïãÝò ôïõ ðáñáëÞðôç\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "áðáãïñåýåôå ç ÷ñÞóç ôïõ %s óôçí êáôÜóôáóç %s.\n"
-
-#: g10/encode.c:735
-#, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s êñõðôïãñáöÞèçêå ãéá: \"%s\"\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "ôï êëåéäß '%s' äå âñÝèçêå: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ ìðëïê êëåéäéþí: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "êëåéäß %08lX: äåí åßíáé Ýíá rfc2440 êëåéäß - ðáñáëåßöèçêå\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "êëåéäß %08lX: äåí åßíáé ðñïóôáôåõìÝíï - ðáñáëåßöèçêå\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "êëåéäß %08lX: êëåéäß ôýðïõ PGP 2.x - ðáñáëåßöèçêå\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: äåí Ýãéíå êáììßá åîáãùãÞ\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "ðÜñá ðïëëÝò êáôá÷ùñÞóåéò óôç pk cache - áðåíåñãïðïéÞèçêå\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[User id äåí âñÝèçêå]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Ìç Ýãêõñï êëåéäß %08lX Ýãéíå Ýãêõñï áðü ôï --allow-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "÷ñÞóç ôïõ äåõôåñåýïíôïò êëåéäéïý %08lX áíôß ôïõ ðñùôåýïíôïò %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "êëåéäß %08lX: ìõóôéêü êëåéäß ÷ùñßò äçìüóéï - ðáñáëåßöèçêå\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "ðáñÜëåéøç ôìÞìáôïò ôïõ ôýðïõ %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu êëåéäéÜ Ý÷ïõí ìÝ÷ñé ôþñá åðåîåñãáóôåß\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Óõíïëéêüò áñéèìüò ðïõ åðåîåñãÜóôçêáí: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " íÝá êëåéäéÜ ðïõ ðáñáëåßöèçêáí: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " ÷ùñßò user ID: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " åéóá÷èÝíôá: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " áìåôÜâëçôá: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " íÝá user ID: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " íÝá õðïêëåéäéÜ: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " íÝåò õðïãñáöÝò: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " íÝåò áíáêëÞóåéò êëåéäéþí: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " áíáãíùóìÝíá ìõóôéêÜ êëåéäéÜ: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " åéóá÷èÝíôá ìõóôéêÜ êëåéäéÜ: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " áìåôÜâëçôá ìõóôéêÜ êëåéäéÜ: %lu\n"
-
-#: g10/import.c:313
-#, c-format
-msgid " not imported: %lu\n"
-msgstr " ìç åéóá÷èÝíôá: %lu\n"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "êëåéäß %08lX: äåí õðÜñ÷åé áõôü ôï user ID\n"
-
-#: g10/import.c:597
-#, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "êëåéäß %08lX: åðéäéüñèùóç öèáñìÝíïõ õðïêëåéäéïý HKP\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "êëåéäß %08lX: äåêôü ìç éäéï-õðïãåãñáììÝíï user ID '%s'\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "êëåéäß %08lX: äåí Ý÷åé Ýãêõñá user ID\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "áõôü ìðïñåß íá óõíÝâåé áðü ìéá áðïýóá éäéïûðïãñáöÞ\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "êëåéäß %08lX: ìõóôéêü êëåéäß ðïõ äå âñÝèçêå: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "êëåéäß %08lX: íÝï êëåéäß - ðáñáëåßöèçêå\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "äåí âñåèçêå åããñÜøéìç êëåéäïèÞêç: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "åããñáöÞ óôï `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "áäõíáìßá åããñáöÞò ôçò êëåéäïèÞêçò `%s': %s\n"
-
-#: g10/import.c:663
-#, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "êëåéäß %08lX: ôï äçìüóéï êëåéäß \"%s\" Ý÷åé åéóá÷èåß\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "êëåéäß %08lX: äåí ôáéñéÜæåé ìå ôï áíôßãñáöï ìáò\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "êëåéäß %08lX: áäõíáìßá åíôïðéóìïý ôïõ áñ÷éêïý ôìÞìáôïò êëåéäéïý: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "êëåéäß %08lX: áäõíáìßá áíÜãíùóçò ôïõ áñ÷éêïý ôìÞìáôïò êëåéäéïý: %s\n"
-
-#: g10/import.c:740
-#, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "êëåéäß %08lX: \"%s\" 1 íÝï user ID\n"
-
-#: g10/import.c:743
-#, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "êëåéäß %08lX: \"%s\" %d íÝá user ID\n"
-
-#: g10/import.c:746
-#, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "êëåéäß %08lX: \"%s\" 1 íÝá õðïãñáöÞ\n"
-
-#: g10/import.c:749
-#, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "êëåéäß %08lX: \"%s\" %d íÝåò õðïãñáöÝò\n"
-
-#: g10/import.c:752
-#, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "êëåéäß %08lX: \"%s\" 1 íÝï õðïêëåéäß\n"
-
-#: g10/import.c:755
-#, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "êëåéäß %08lX: \"%s\" %d íÝá õðïêëåéäéÜ\n"
-
-#: g10/import.c:774
-#, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "êëåéäß %08lX: \"%s\" áìåôÜâëçôï\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "äåí õðÜñ÷åé ðñïêáèïñéóìÝíç êëåéäïèÞêç: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "êëåéäß %08lX: ìõóôéêü êëåéäß åéóÞ÷èçêå\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "êëåéäß %08lX: Þäç óôç ìõóôéêÞ êëåéäïèÞêç\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "êëåéäß %08lX: äå âñÝèçêå ôï ìõóôéêü êëåéäß: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"êëåéäß %08lX: ü÷é äçìüóéï êëåéäß - áäõíáìßá åöáñìïãÞò ðéóôïðïéçôéêïý "
-"áíÜêëçóçò\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "êëåéäß %08lX: ìç Ýãêõñï ðéóôïðïéçôéêü áíÜêëçóçò: %s - áðüññéøç\n"
-
-#: g10/import.c:969
-#, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "êëåéäß %08lX: \"%s\" ðéóôïðïéçôéêü áíÜêëçóçò åéóÞ÷èçêå\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "êëåéäß %08lX: äåí õðÜñ÷åé user ID ãéá ôçí õðïãñáöÞ\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"êëåéäß %08lX: ìç õðïóôçñéæüìåíïò áëãüñéèìïò äçìïóßïõ êëåéäéïý óôï user id \"%"
-"s\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "êëåéäß %08lX: ìç Ýãêõñç éäéï-õðïãñáöÞ óôï user id \"%s\"\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "êëåéäß %08lX: äåí õðÜñ÷åé õðïêëåéäß ãéá ôç äÝóìåõóç êëåéäéïý\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "êëåéäß %08lX: ìç õðïóôçñéæüìåíïò áëãüñéèìïò äçìïóßïõ êëåéäéïý\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "êëåéäß %08lX: ìç Ýãêõñç äÝóìåõóç õðïêëåéäéïý\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "êëåéäß %08lX: áöáéñÝèçêå ç äÝóìåõóç ðïëëáðëïý õðïêëåéäéïý\n"
-
-#: g10/import.c:1088
-#, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "êëåéäß %08lX: äåí õðÜñ÷åé õðïêëåéäß ãéá ôçí áíÜêëçóç êëåéäéïý\n"
-
-#: g10/import.c:1097
-#, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "êëåéäß %08lX: ìç Ýãêõñç áíÜêëçóç õðïêëåéäéïý\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "êëåéäß %08lX: áöáéñÝèçêå ç áíÜêëçóç ðïëëáðëïý õðïêëåéäéïý\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "êëåéäß %08lX: ðáñáëåßöèçêå user ID '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "êëåéäß %08lX: ðáñáëåßöèçêå õðïêëåéäß\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "êëåéäß %08lX: ìç åîáãüìåíç õðïãñáöÞ (êëÜóç %02x) - ðáñáëåßöèçêå\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr ""
-"êëåéäß %08lX: ôï ðéóôïðïéçôéêü áíÜêëçóçò óå ëÜèïò óçìåßï - ðáñáëåßöèçêå\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "êëåéäß %08lX: ìç Ýãêõñï ðéóôïðïéçôéêü áíÜêëçóçò: %s - ðáñáëåßöèçêå\n"
-
-#: g10/import.c:1232
-#, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr ""
-"êëåéäß %08lX: ç õðïãñáöÞ ôïõ õðïêëåéäéïý óå ëÜèïò óçìåßï - ðáñáëåßöèçêå\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "êëåéäß %08lX: åíôïðßóôçêå äéðëü user ID - åíþèçêáí\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: êëåéäß %08lX ìðïñåß íá áíáêëçèåß: ëÞøç êëåéäéïý áíÜêëçóçò %"
-"08lX\n"
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: êëåéäß %08lX ìðïñåß íá áíáêëçèåß: ôï êëåéäß áíÜêëçóçò %08lX\n"
-"äåí åßíáé ðáñþí.\n"
-
-#: g10/import.c:1460
-#, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "êëåéäß %08lX: \"%s\" ðéóôïðïéçôéêü áíÜêëçóçò ðñïóôÝèçêå\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "êëåéäß %08lX: Üìåóç õðïãñáöÞ êëåéäéïý ðñïóôÝèçêå\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[áíÜêëçóç]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[éäéï-õðïãñáöÞ]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 êáêÞ õðïãñáöÞ\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d êáêÝò õðïãñáöÝò\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãù ÷áìÝíïõ êëåéäéïý\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù ÷áìÝíùí êëåéäéþí\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 õðïãñáöÞ äåí åëÝã÷èçêå ëüãï åíüò óöÜëìáôïò\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d õðïãñáöÝò äåí åëÝã÷èçêáí ëüãù óöáëìÜôùí\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 user ID áíé÷íåýôçêå ÷ùñßò Ýãêõñç éäéï-õðïãñáöÞ\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d user ID áíé÷íåýèçêáí ÷ùñßò Ýãêõñåò éäéï-õðïãñáöÝò\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Ôï user ID \"%s\" áíáêáëåßôå."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Óßãïõñá èÝëåôå áêüìá íá ôï õðïãñÜøåôå; (y/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Áäõíáìßá õðïãñáöÞò.\n"
-
-#: g10/keyedit.c:380
-#, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï user ID \"%s\" äåí Ý÷åé éäéï-õðïãñáöåß.\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Ç éäéï-õðïãñáöÞ óôï \"%s\"\n"
-"åßíáé ìéá õðïãñáöÞ ôýðïõ PGP 2.x.\n"
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "ÈÝëåôå íá ôç ðñïÜãåôå óå ìéá OpenPGP éäéï-õðïãñáöÞ; (y/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Ç ðñïõðÜñ÷ïõóá õðïãñáöÞ óáò óôï \"%s\"\n"
-"åßíáé ìéá ôïðéêÞ õðïãñáöÞ.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "ÈÝëåôå íá ôç ðñïÜãåôå óå ìéá ðëÞñç åîáãþãéìç õðïãñáöÞ; (y/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" Þäç õðïãñÜöèçêå áðü ôï êëåéäß %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" Þäç õðïãñÜöèçêå áðü ôï êëåéäß %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Ôßðïôá ãéá íá õðïãñáöåß ìå ôï êëåéäß %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Áõôü ôï êëåéäß Ý÷åé ëÞîåé!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Áõôü ôï êëåéäß ðñüêåéôå íá ëÞîåé óôéò %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "ÈÝëåôå ç õðïãáöÞóáò íá ëÞîåé ôáõôü÷ñïíá; (Y/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"Ìðïñåßôå íá ÷ñçóéìüðïéÞóåôå ìéá OpenPGP õðïãñáöÞ óå Ýíá PGP 2.x ìüíï óå "
-"êáôÜóôáóç --pgp2.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Áõôü èá êÜíåé ôï êëåéäß Ü÷ñçóôï ìå ôï PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Åßóôå óßãïõñïé üôé åëÝãîáôå ðñïóåêôéêÜ üôé ôï êëåéäß ðïõ åßóôå Ýôïéìïé íá\n"
-"áíÞêåé ðñÜãìáôé óôï ðñïáíöåñèÝí Üôïìï; ÅÜí äåí îÝñåôå ôé íá áðáíôÞóåôå "
-"ðáôÞóôå\"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Äåí áðáíôþ.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Äåí Ý÷ù åëÝãîåé êáèüëïõ.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) ¸÷ù êÜíåé ôïí óõíÞèç Ýëåã÷ï.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) ¸÷ù êÜíåé åêôåôáìÝíï Ýëåã÷ï.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Óßãïõñá èÝëåôå íá õðïãñÜøåôå áõôü ôï êëåéäß\n"
-"ìå ôï êëåéäß óáò: \""
-
-#: g10/keyedit.c:604
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr ""
-"\n"
-"ÁõôÞ èá åßíáé ìéá éäéï-õðïãñáöÞ.\n"
-
-#: g10/keyedit.c:608
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ç õðïãñáöÞ äå èá óçìåéùèåß óáí ìç-åîáãþãéìç.\n"
-
-#: g10/keyedit.c:613
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Ç õðïãñáöÞ äå èá óçìåéùèåß óáí ìç-áíáêáëÝóéìç.\n"
-"\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Ç õðïãñáöÞ èá óçìåéùèåß óáí ìç-åîáãþãéìç.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Ç õðïãñáöÞ èá óçìåéùèåß óáí ìç-áíáêáëÝóéìç.\n"
-"\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Äåí Ý÷ù åëÝãîåé êáèüëïõ áõôü ôï êëåéäß.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"¸÷ù êÜíåé óõíçèéóìÝíï Ýëåã÷ï óå áõôü ôï êëåéäß.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"¸÷ù åëÝãîåé ðïëý ðñïóåêôéêÜ áõôü ôï êëåéäß.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Óßãïõñá íá õðïãñáöåß; "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "ç õðïãñáöÞ áðÝôõ÷å: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Áõôü ôï êëåéäß äåí ðñïóôáôåýåôáé.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "ÌõóôéêÜ ôìÞìáôá ôïõ êýñéïõ êëåéäéïý äåí åßíáé äéáèÝóéìá.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Ôï êëåéäß ðñïóôáôåýåôáé.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Áäýíáôç ç åðåîåñãáóßá áõôïý ôïõ êëåéäéïý:%s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"ÐëçêôñïëïãÞóôå ôçí íÝá öñÜóç êëåéäß ãéá áõôü ôï ìõóôéêü êëåéäß.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr "Äåí èÝëåôå öñÜóç êëåéäß - áõôü åßíáé ìÜëëïí *êáêÞ* éäÝá!\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Óßãïõñá èÝëåôå íá êÜíåôå áõôü; "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "ìåôáêßíçóç õðïãñáöÞò êëåéäéïý óôç óùóôÞ èÝóç\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "ôåñìáôéóìüò áõôïý ôïõ ìåíïý"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "áðïèÞêåõóç êáé Ýîïäïò"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "áðåéêüíéóç áõôÞò ôçò âïÞèåéáò"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "áðåéêüíéóç ôïõ fingerprint"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "áðåéêüíéóç ôùí êëåéäéþí êáé ôùí user ID"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "åðéëïãÞ user ID N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "åðéëïãÞ äåõôåñåýïíôïò êëåéäéïý N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "áðåéêüíéóç õðïãñáöþí"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "õðïãñáöÞ ôïõ êëåéäéïý"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "õðïãñáöÞ ôïõ êëåéäéïý ôïðéêÜ"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "õðïãñáöÞ ôïõ êëåéäéïý ìç-áíáêáëÝóéìá"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "õðïãñáöÞ ôïõ êëåéäéïý ôïðéêÜ êáé ìç-áíáêáëÝóéìá"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "ðñïóèÞêç åíüò user ID"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "ðñïóèÞêç åíüò photo ID"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "äéáãñáöÞ åíüò user ID"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "ðñïóèÞêç åíüò äåõôåñåýïíôïò êëåéäéïý"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "äéáãñáöÞ åíüò äåõôåñåýïíôïò êëåéäéïý"
-
-#: g10/keyedit.c:926
-msgid "addrevoker"
-msgstr "addrevoker"
-
-#: g10/keyedit.c:926
-msgid "add a revocation key"
-msgstr "ðñïóèÞêç åíüò êëåéäéïý áíÜêëçóçò"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "äéáãñáöÞ õðïãñáöþí"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "áëëáãÞ ôçò çìåñïìçíßáò ëÞîçò"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "ðñùôåýùí"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "óçìåßùóç ôïõ user ID óáí ðñùôåýùí"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "áëëáãÞ ìåôáîý ôçò áðåéêüíéóçò ìõóôéêïý êáé äçìüóéïõ êëåéäéïý"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "áðåéêüíéóç ðñïåðéëïãþí (åéäéêÝò)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "áðåéêüíéóç åðéëïãþí (áíáëõôéêÜ)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "ïñéóìüò áðåéêüíéóçò åðéëïãþí"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "áíáùåùìÝíåò åðéëïãÝò"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "áëëáãÞ ôçò öñÜóçò êëåéäß"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "áëëáãÞ ôçò åìðéóôïóýíçò éäéïêôÞôç"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "áíÜêëçóç õðïãñáöþí"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "áíÜêëçóç åíüò äåõôåñåýïíôïò êëåéäéïý"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "áðåíåñãïðïéåß Ýíá êëåéäß"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "åíåñãïðïéåß Ýíá êëåéäß"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "áðåéêüíéóç photo ID"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "äåí ìðïñåß íá ãßíåé áõôü óå êáôÜóôáóç äÝóìçò (batchmode)\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ìõóôéêïý ìðëïê êëåéäéïý `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Ôï ìõóôéêü êëåéäß åßíáé äéáèÝóéìï.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "ÅíôïëÞ> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Áðáéôåßôáé ôï ìõóôéêü êëåéäß ãéá íá ãßíåé áõôü.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Ðáñáêáëþ ÷ñçóéìïðïéåßóôå ôçí åíôïëÞ \"toggle\" ðñþôá.\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "Ôï êëåéäß áíáêëÞèçêå."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Óßãïõñá íá õðïãñáöïýí üëá ôá user ID; "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "ÓõìâïõëÞ: ÅðéëÝîôå ôï user ID ãéá õðïãñáöÞ\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "ÁõôÞ ç åíôïëÞ áðáãïñåýåôå óå áõôÞ ôçí êáôÜóôáóç %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "ÐñÝðåé íá åðéëÝîåôå ôï ëéãüôåñï Ýíá user ID.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Äåí ìðïñåßôå íá äéáãñÜøåôå ôï ôåëåõôáßï user ID!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Óßãïõñá èÝëåôå íá äéáãñáöïýí üëá ôá åðéëåãìÝíá user ID; "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Óßãïõñá èÝëåôå íá äéáãñáöåß áõôü ôï user ID; "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "ÐñÝðåé íá åðéëÝîåôå ôïõëÜ÷éóôïí Ýíá êëåéäß.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Óßãïõñá èÝëåôå íá äéáãñáöïýí ôá åðéëåãìÝíá êëåéäéÜ; "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Óßãïõñá èÝëåôå íá äéáãñáöåß áõôü ôï êëåéäß; "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Óßãïõñá èÝëåôå íá áíáêëçèïýí ôá åðéëåãìÝíá êëåéäéÜ; "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Óßãïõñá èÝëåôå íá áíáêëçèåß áõôü ôï êëåéäß; "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"Óßãïõñá èÝëåôå íá áíáíåùèïýí ïé ðñïåðéëïãÝò ãéá ôï åðéëåãìÝíï user ID; "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Óßãïõñá íá áíáíåùèïýí ïé ðñïåðéëïãÝò;"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "ÁðïèÞêåõóç ôùí áëëáãþí; "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Ôåñìáôéóìüò ÷ùñßò áðïèÞêåõóç; "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "ç åíçìÝñùóç áðÝôõ÷å: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "ç åíçìÝñùóç ìõóôéêïý áðÝôõ÷å: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Ôï êëåéäß äåí Üëëáîå ïðüôå äåí ÷ñåéÜæåôáé åíçìÝñùóç.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Ìç Ýãêõñç åíôïëÞ (äïêéìÜóôå \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Áõôü ôï êëåéäß ìðïñåß íá áíáêëçèåß áðü %s êëåéäß "
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (åõáßóèçôï)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX äçìéïõñãßá: %s ëÞîç: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " åìðéóôïóýíç: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Áõôü ôï êëåéäß Ý÷åé áðåíåñãïðïéçèåß"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! ôï êëåéäß áíáêëÞèçêå: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- âñÝèçêå ðáñáðïéçìÝíç áíÜêëçóç\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? ðñüâëçìá óôïí Ýëåã÷ï áíÜêëçóçò: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr "Äåí õðÜñ÷ïõí ðñïåðéëïãÝò óå Ýíá user ID ôýðïõ PGP 2.x.\n"
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Ç åããõñüôçôá ôïõ áðåéêïíéæüìåíïõ êëåéäéïý äåí åßíáé áðáñáßôçôá óùóôÞ\n"
-"åêôüò êáé åÜí åðáíáêêéíÞóåôå ôï ðñüãñáììá.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áõôü Ýéíáé Ýíá êëåéäß ôýðïõ PGP2. Ç ðñïóèÞêç åíüò photo ID\n"
-" ìðïñåß íá êÜíåé ìåñéêÝò åêäüóåéò PGP íá ôï áðïññßøïõí.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Óßãïõñá áêüìá èÝëåôå íá ôï ðñïóèÝóåôå; (y/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Äåí ìðïñåßôå íá ðñïóèÝóåôå ìéá photo ID óå Ýíá êëåéäß ôýðïõ PGP2.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "ÄéáãñáöÞ áõôÞò ôçò êáëÞò õðïãñáöÞò; (y/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "ÄéáãñáöÞ áõôÞò ôçò ìç Ýãêõñçò õðïãñáöÞò; (y/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "ÄéáãñáöÞ áõôÞò ôçò Üãíùóôçò õðïãñáöÞò; (y/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Óßãïõñá íá äéáãñáöåß áõôÞ ç éäéï-õðïãñáöÞ; (y/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "ÄéáãñÜöôçêå %d õðïãñáöÞ.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "ÄéáãñÜöçêáí %d õðïãñáöÝò.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Ôßðïôá äåí äéáãñÜöôçêå.\n"
-
-#: g10/keyedit.c:2281
-msgid "Enter the user ID of the designated revoker: "
-msgstr "ÐëçêôñïëïãÞóôå ôï user ID ôïõ äéïñéóìÝíïõ áíáêëçôÞ: "
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-"áäõíáìßá ïñéóìïý åíüò êëåéäéïý ôýðïõ PGP 2.x, óáí äéïñéóìÝíïõ áíáêëçôÞ\n"
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-"äå ìðïñåßôå íá ïñßóåôå Ýíá êëåéäß óáí ôï äéïñéóìÝíï áíáêëçôÞ ôïõ åáõôïý ôïõ\n"
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Ðáñáêáëþ áöáéñÝóôå ôéò åðéëïãÝò áðü ôá ìõóôéêÜ êëåéäéÜ.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Ðáñáêáëþ åðéëÝîôå ôï ðïëý Ýíá äåõôåñåýïí êëåéäß.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "ÁëëáãÞ çìåñïìçíßáò ëÞîçò ãéá Ýíá äåõôåñåýïí êëåéäß.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "ÁëëáãÞ çìåñïìçíßáò ëÞîçò ãéá Ýíá ðñùôåýïí êëåéäß.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Äåí ìðïñåßôå íá áëëÜîåôå ôçí çìåñïìçíßá ëÞîçò óå Ýíá v3 êëåéäß\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Äåí âñÝèçêå áíôßóôïé÷ç õðïãñáöÞ óôç ìõóôéêÞ êëåéäïèÞêç\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "ÐñÝðåé íá åðéëÝîåôå áêñéâþò Ýíá user ID.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "ðáñáëåßöèçêå ç v3 éäéï-õðïãñáöÞ óôï user id \"%s\"\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Äåí õðÜñ÷åé user ID ìå äåßêôç %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Äåí õðÜñ÷åé äåõôåñåýïí êëåéäß ìå äåßêôç %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "user ID: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"õðïãñÜöèçêå ìå ôï êëåéäß óáò %08lX óôéò %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"õðïãñÜöèçêå ôïðéêÜ ìå ôï êëåéäß óáò %08lX óôéò %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "ÁõôÞ ç õðïãñáöÞ Ýëçîå óôéò %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Óßãïõñá èÝëåôå íá áíáêëçèåß áõôü ôï êëåéäß; "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Äçìéïõñãßá åíüò ðéóôïðïéçôéêïý áíÜêëçóçò ãéá áõôÞ ôçí õðïãñáöÞ; (y/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "¸÷åôå õðïãñÜøåé áõôÜ ôá user ID:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " õðïãñÜöèçêå áðü %08lX óôéò %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " áíáêëÞèçêå áðü %08lX óôéò %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Óêïðåýåôå íá áíáêáëÝóåôå áõôÝò ôéò õðïãñáöÝò:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " õðïãñÜöèçêå áðü %08lX óôéò %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (ìç-åîáãþãéìï)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Óßãïõñá íá äçìéïõñãçèïýí ôá ðéóôïðïéçôéêÜ áíÜêëçóçò; (y/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "êáíÝíá ìõóôéêü êëåéäß\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr "Áðåéêüíéóç %s photo ID ìåãÝèïõò %ld ãéá ôï êëåéäß 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-msgid "Critical signature policy: "
-msgstr "ÐïëéôéêÞ êñßóéìçò õðïãñáöÞò: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "ÐïëéôéêÞ õðïãñáöÞò: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: âñÝèçêáí ìç Ýãêõñá äåäïìÝíá óçìåßùóçò\n"
-
-#: g10/keylist.c:127
-msgid "Critical signature notation: "
-msgstr "Óçìåßùóç êñßóéìçò õðïãñáöÞò: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Óçìåßùóç õðïãñáöÞò: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "ìç áíáãíþóéìï"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "ÊëåéäïèÞêç"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [ëÞãåé: %s]"
-
-#: g10/keylist.c:1001
-msgid "Primary key fingerprint:"
-msgstr "Áðïôýðùìá ðñùôåýùí êëåéäéïý:"
-
-#: g10/keylist.c:1003
-msgid " Subkey fingerprint:"
-msgstr " Áðïôýðùìá õðïêëåéäéïý:"
-
-#: g10/keylist.c:1010
-msgid " Primary key fingerprint:"
-msgstr " Áðïôýðùìá ðñùôåýùí êëåéäéïý:"
-
-#: g10/keylist.c:1012
-msgid " Subkey fingerprint:"
-msgstr " Áðïôýðùìá õðïêëåéäéïý:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Áðïôýðùìá êëåéäéïý ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr "ðáñÜîåíï ìÝãåèïò ãéá Ýíá êëåéäß êñõðôïãñáöçìÝíçò óõíåäñßáò (%d)\n"
-
-#: g10/mainproc.c:258
-#, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "ìç Ýãêõñïò áëãüñéèìïò hash `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s êñõðôïãñáöçìÝíá äåäïìÝíá\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "êñõðôïãñáöçìÝíï ìå Üãíùóôï áëãüñéèìï %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "äçìüóéï êëåéäß åßíáé %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "êñõðôïãñáöçìÝíá äåäïìÝíá ìå äçìüóéï êëåéäß: êáëü DEK\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "êñõðôïãñáöçìÝíï ìå %u-bit %s êëåéäß, ID %08lX, äçìéïõñãÞèçêå %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "êñõðôïãñáöçìÝíï ìå %s key, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "êñõðôïãñÜöçóç ìå äçìüóéï êëåéäß áðÝôõ÷å: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "õðüèåóç %s êñõðôïãñáöçìÝíùí äåäïìÝíùí\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-"Êñõðôáëãüñéèìïò IDEA ìç äéáèÝóéìïò, áéóéüäïîç ðñïóðÜèåéá ÷ñÞóçò ôïõ\n"
-"%s áíôßèåôá\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "áðïêñõðôïãñÜöçóç OK\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï êñõðôïãñáöçìÝíï ìÞíõìá Ý÷åé ðåéñá÷èåß!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "áðïêñõðôïãñÜöçóç áðÝôõ÷å: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ï áðïóôïëÝáò æÞôçóå \"ãéá-ôá-ìÜôéá-óáò-ìüíï\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "áñ÷éêü üíïìá áñ÷åßïõ='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "áíåîÜñôçôç áíÜêëçóç - ÷ñçóéìïðïéåßóôå \"gpg --import\" ãéá åöáñìïãÞ\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Óçìåßùóç: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "ÐïëéôéêÞ: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "êáôáóôïëÞ áíÜêëçóçò õðïãñáöÞò\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "áäõíáìßá ÷åéñéóìïý áõôþí ôùí ðïëëáðëþí õðïãñáöþí\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "ÕðïãñáöÞ %.*s ìå ÷ñÞóç ôïõ êëåéäéïý%s ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "ÊÁÊÇ õðïãñáöÞ áðü \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "ËçãìÝíç õðïãñáöÞ áðü \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "ÊáëÞ õðïãñáöÞ áðü \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[áâÝâáéï]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " ãíùóôü óáí \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Áäõíáìßá åëÝã÷ïõ ôçò õðïãñáöÞò: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "äåí åßíáé áðïêïììÝíç õðïãñáöÞ\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "áíåîÜñôçôç õðïãñáöÞ êëÜóçò 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "õðïãñáöÞ ðáëéïý óôõë (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "ìç Ýãêõñï ñéæéêü(root) ðáêÝôï áíé÷íåýôçêå óôï proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "áäõíáìßá áðåíåñãïðïßçóçò ôùí core dump: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Ðåéñáìáôéêïß áëãüñéèìïé äåí ðñÝðåé íá ÷ñçóéìïðïéïýíôáé!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"ç ÷ñÞóç áõôïý ôïõ áëãüñéèìïõ êñõðôïãñÜöçóçò äåí óõíéóôÜôáé. ×ñçóéìïðïéÞóôå "
-"Ýíá ðéï óõíçèéóìÝíï!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "ôï âýóìá ôïõ êñõðôáëãüñéèìïõ IDEA äåí õðÜñ÷åé\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"äåßôå ôï http://www.gnupg.org/why-not-idea.html ãéá ðåñéóóüôåñåò "
-"ðëçñïöïñßåò\n"
-
-#: g10/misc.c:509
-#, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "%s:%d: ìç óõíåéóôþìåíç åðéëïãÞ \"%s\"\n"
-
-#: g10/misc.c:513
-#, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: \"%s\" åßíáé ìéá ìç óõíåéóôþìåíç åðéëïãÞ\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "ðáñáêáëþ ÷ñçóéìïðïéÞóôå ôï \"%s%s\" êáëýôåñá\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "áäõíáìßá ÷åéñéóìïý ôïõ áëãüñéèìïõ äçìïóßïõ êëåéäéïý %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "õðïðáêÝôï ôýðïõ %d Ý÷åé ïñéóìÝíï ôï êñéôéêü bit\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "ï gpg-agent äåí åßíáé äéáèÝóéìïò óå áõôÞ ôç óõíåäñßá\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "áäõíáìßá ïñéóìïý ôïõ pid ôïõ ðåëÜôç óéá ôï agent\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "áäõíáìßá áíÜãíùóçò ôïõ FD áðü ôï äéáêïìéóôÞ ãéá ôïí agent\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "áäõíáìßá åããñáöÞò ôïõ FD áðü ôï äéáêïìéóôÞ ãéá ôïí agent\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "êáêïäéáôõðïìÝíç ìåôáâëçôÞ ðåñéâÜëëïíôïò GPG_AGENT_INFO\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "äåí õðïóôçñßæåôáé ç Ýêäïóç ðñùôïêüëëïõ %d ôïõ gpg-agent\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "áäõíáìßá óýíäåóçò óôï `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "ðñüâëçìá åðéêïéíùíßáò ìå ôï gpg-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "ðñüâëçìá ìå ôïí agent - áðåíåñãïðïéÞóç ôçò ÷ñÞóçò ôïõ agent\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (êýñéï êëåéäß, ID %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"×ñåéÜæåóôå ìéá öñÜóç êëåéäß ãéá íá îåêëåéäþóåôå ôï ìõóôéêü êëåéäß ãéá ôï "
-"÷ñÞóôç:\n"
-"\"%.*s\"\n"
-"%u-bit %s êëåéäß, ID %08lX, äçìéïõñãßá %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "ÅðáíáëÜâåôå ôç öñÜóç\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "ç öñÜóç êëåéäß åßíáé ðïëý ìåãÜëç\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "ìç Ýãêõñç áðÜíôçóç áðü ôïí agent\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "áêõñþèçêå áðü ôï ÷ñÞóôç\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "ðñüâëçìá ìå ôïí agent: agent åðéóôñÝöåé 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"×ñåéÜæåóôå ìéá öñÜóç êëåéäß ãéá íá îåêëåéäþóåôå ôï ìõóôéêü êëåéäß\n"
-"ãéá ôï ÷ñÞóôç: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bit %s êëåéäß, ID %08lX, äçìéïõñãßá %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "áäõíáìßá åñþôçóçò ôçò ëÝîçò êëåéäß óå êáôÜóôáóç äÝóìçò\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "ÅðáíáëÜâåôå ôç öñÜóç êëåéäß: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "äåäïìÝíá äåí áðïèçêåýôçêáí. ÁðïèÞêåõóç ìå ôçí åðéëïãÞ \"--output\"\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "óöÜëìá êáôÜ ôç äçìéïõñãßá ôïõ `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "ÁðïêïììÝíç õðïãñáöÞ.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "ÅéóÜãåôå ôï üíïìá áñ÷åßïõ äåäïìÝíùí: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "áíÜãíùóç ôçò stdin ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "äåí õðÜñ÷ïõí õðïãåãñáììÝíá äåäïìÝíá\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "áäõíáìßá ðñüóâáóçò õðïãåãñáììÝíùí äåäïìÝíùí `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "áíþíõìïò ðáñáëÞðôçò· äïêéìÞ ìõóôéêïý êëåéäéïý %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "åíôÜîåé, åßìáóôå ï áíþíõìïò ðáñáëÞðôçò.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "ðáëáéÜ êùäéêïðïßçóç ôïõ DEK äåí õðïóôçñßæåôáé\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "ï áëãüñéèìïò êñõðôïãñÜöçóçò %d%s åßíáé Üãíùóôïò Þ áðåíåñãïðïéçìÝíïò\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ï áëãüñéèìïò êñõðôïãñÜöçóçò %d äåí åßíáé óôéò åðéëïãÝò\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ôï ìõóôéêü êëåéäß %08lX Ýëçîå óôéò %s\n"
-
-#: g10/pubkey-enc.c:249
-msgid "NOTE: key has been revoked"
-msgstr "ÓÇÌÅÉÙÓÇ: ôï êëåéäß Ý÷åé áíáêëçèåß"
-
-#: g10/hkp.c:71
-#, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "áßôçóç êëåéäéïý %08lX áðü ôï %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "áäõíáìßá ëÞøçò ôïõ êëåéäéïý áðü ôï äéáêïìéóôÞ: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "óöÜëìá óôç áðïóôïëÞ ðñïò ôï `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "åðéôõ÷ßá ôçò áðïóôïëÞò óôï `%s' (êáôÜóôáóç=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "áðïôõ÷ßá óôçí áðïóôïëÞ ðñïò ôï `%s': êáôÜóôáóç=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr "áõôüò ï äéáêïìéóôÞò êëåéäéþí äåí åßíáé ðëÞñùò HKP óõìâáôüò\n"
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "áíáæÞôçóç ôïõ \"%s\" áðü ôï HKP äéáêïìéóôÞ %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "áäõíáìßá áíáæÞôçóçò äéáêïìéóôÞ: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "ôìÞìáôá ôïõ ìõóôéêïý êëåéäéïý äåí åßíáé äéáèÝóéìá\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "äåí õðïóôçñßæåôáé ï áëãüñéèìïò ðñïóôáóßáò %d%s\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Ìç Ýãêõñç öñÜóç êëåéäß, äïêéìÜóôå îáíÜ"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: Áíé÷íåýôçêå áäýíáìï êëåéäß - áëëÜîôå ôç öñÜóç êëåéäß\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"äçìéïõñãßá ôïõ ìç óõíåéóôüìåíïõ 16-bit checksum ãéá ôç ðñïóôáóßá ôïõ\n"
-"ìõóôéêïý êëåéäéïý\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: óýãêñïõóç õðïãñáöÞò ðåñßëçøçò óôï ìÞíõìá\n"
-
-#: g10/sig-check.c:215
-#, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"áõôü ôï, äçìéïõñãÞìåíï áðü PGP, êëåéäß ElGamal ÄÅÍ åßíáé áóöáëÝò ãéá "
-"õðïãñáöÝò!\n"
-
-#: g10/sig-check.c:224
-#, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr ""
-"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôï íåüôåñï áðü ôçí õðïãñáöÞ\n"
-
-#: g10/sig-check.c:225
-#, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr ""
-"ôï äçìüóéï êëåéäß %08lX åßíáé %lu äåõôåñüëåðôá íåüôåñï áðü ôçí õðïãñáöÞ\n"
-
-#: g10/sig-check.c:234
-#, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"ôï êëåéäß %08lX äçìéïõñãÞèçêå %lu äåõôåñüëåðôï óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
-"áðëþò ðñüâëçìá óôï ñïëüé)\n"
-
-#: g10/sig-check.c:236
-#, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"ôï êëåéäß %08lX äçìéïõñãÞèçêå %lu äåõôåñüëåðôá óôï ìÝëëïí (÷ñïíïäßíç Þ\n"
-"áðëþò ðñüâëçìá óôï ñïëüé)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ôï êëåéäß õðïãñáöÞò %08lX Ýëçîå óôéò %s\n"
-
-#: g10/sig-check.c:348
-#, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "õðüèåóç êáêÞò õðïãñáöÞò áðü êëåéäß %08lX ëüãù Üãíùóôïõ êñßóéìïõ bit\n"
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: áäõíáìßá óôçí %%-áíÜðôõîç óçìåßùóçò (ðïëõ ìåãÜëç).\n"
-" ×ñÞóç ìç áíåðôõãìÝíïõ.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: áäõíáìßá óôç %%-áíÜðôõîç ôïõ url ðïëéôéêÞò (ðïëõ ìåãÜëï).\n"
-" ×ñÞóç ìç áíåðôõãìÝíïõ.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "áðÝôõ÷å ï Ýëåã÷ïò ôçò õðïãñáöÞò ðïõ äçìéïõñãÞèçêå: %s\n"
-
-#: g10/sign.c:312
-#, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s õðïãñáöÞ áðü: \"%s\"\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: `%s' åßíáé Ýíá Üäåéï áñ÷åßï\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"ìðïñåßôå íá õðïãñÜøåôå-áðïêïììÝíá ìå êëåéäéÜ ôýðïõ PGP 2.x ìüíï óå\n"
-"--pgp2 êáôÜóôáóç\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "áäõíáìßá äçìéïõñãßáò ôïõ %s: %s\n"
-
-#: g10/sign.c:690
-#, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"ï åîáíáãêáóìüò ôïõ áëãüñéèìïõ ðåñßëçøçò %s (%d) ðáñáâéÜæåé ôéò\n"
-"ðñïåðéëïãÝò ôïõ ðáñáëÞðôç\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "õðïãñáöÞ:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"ìðïñåßôå íá õðïãñÜøåôå êáèáñÜ ìå êëåéäéÜ ôýðïõ PGP 2.x óå êáôÜóôáóç --pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "%s êñõðôïãñÜöçóç èá ÷ñçóéìïðïéçèåß\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "áäõíáìßá ÷åéñéóìïý ãñáììþí êåéìÝíïõ ìåãáëýôåñåò áðü %d ÷áñáêôÞñåò\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "ãñáììÞ åéóüäïõ ìåãáëýôåñç áðü %d ÷áñáêôÞñåò\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "trustdb rec %lu: áðïôõ÷ßá lseek: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "trustdb rec %lu: áðïôõ÷ßá write (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "ðïëý ìåãÜëç óõíáëëáãÞ trustdb\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: áäõíáìßá ðñüóâáóçò: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: ï öÜêåëïò äåí õðÜñ÷åé!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò (lock)\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: áäõíáìßá äçìéïõñãßáò êëåéäþìáôïò (lock)\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: áäõíáìßá äçìéïõñãßáò: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: áðïôõ÷ßá äçìéïõñãßáò ìéáò åããñáöÞò Ýêäïóçò: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: äçìéïõñãÞèçêå ìç Ýãêõñç trustdb\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: äçìéïõñãÞèçêå ç trustdb\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr "ÓÇÌÅÉÙÓÇ: ç trustdb äåí åßíáé åããñÜøéìç\n"
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: ìç Ýãêõñç trustdb\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: áäõíáìßá äçìéïõñãßáò hashtable: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: óöÜëìá óôçí åíçìÝñùóç ôçò åããñáöÞò Ýêäïóçò: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: óöÜëìá óôçí áíÜãíùóç ôçò åããñáöÞò Ýêäïóçò: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: óöÜëìá óôçí åããñáöÞ ôçò åããñáöÞò Ýêäïóçò: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "trustdb: áðÝôõ÷å lseek: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "trustdb: read áðÝôõ÷å (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: äåí åßíáé trustdb áñ÷åßï\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: åããñáöÞ Ýêäïóçò ìå recnum %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: ìç Ýãêõñç Ýêäïóç áñ÷åßïõ %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: óöÜëìá óôçí áíÜãíùóç ôçò åããñáöÞò free : %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: óöÜëìá óôçí åããñáöÞ ôçò åããñáöÞò dir : %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: áðïôõ÷ßá óôïí ìçäåíéóìü ìéáò åããñáöÞò: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: áðïôõ÷ßá óôçí ðñïóèÞêç ìéáò åããñáöÞò: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "ç trustdb åßíáé öèáñìÝíç - ÷ñçóéìïðïéåßóôå ôï \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' äåí åßíáé Ýãêõñï ìáêñý keyID\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "êëåéäß %08lX: áðïäï÷Þ óáí êëåéäß ìå åìðéóôïóýíç\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "ôï êëåéäß %08lX õðÜñ÷åé ðÜíù áðü ìéá öïñÜ óôçí trustdb\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"êëåéäß %08lX: êáíÝíá äçìüóéï êëåéäß ãéá ôï êëåéäß ìå åìðéóôïóýíç - "
-"ðáñÜëåéøç\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "åããñáöÞ trust %lu, req ôýðïò %d: read áðÝôõ÷å: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "ç åããñáöÞ trust %lu äåí åßíáé ôïõ æçôïýìåíïõ ôýðïõ %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "åããñáöÞ trust %lu, ôýðïò %d: write áðÝôõ÷å: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "trustdb: sync áðÝôõ÷å: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "äåí õðÜñ÷åé áíÜãêç ãéá Ýëåã÷ï ôçò trustdb\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "åðüìåíïò Ýëåã÷ïò ôçò trustdb èá ãßíåé óôéò %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "Ýëåã÷ïò ôçò trustdb\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "ôï äçìüóéï êëåéäß %08lX äåí âñÝèçêå: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-"äå âñÝèçêå ôï äçìüóéï êëåéäß ôïõ áðüëõôá åìðéóôåýóéìïõ êëåéäéïý %08lX\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr "Ýëåã÷ïò óå âÜèïò %d õðïãñáöèçêå=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"áäõíáìßá åðáëÞèåõóçò ôçò õðïãñáöÞò.\n"
-"Ðáñáêáëþ ìçí îå÷íÜôå üôé ôï áñ÷åßï õðïãñáöÞò (.sig or .asc)\n"
-"ðñÝðåé íá åßíáé ôï ðñþôï áñ÷åßï óôç ãñáììÞ åíôïëþí.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "ãñáììÞ åéóüäïõ %u åßíáé ðïëý ìåãÜëç Þ ôçò ëåßðåé ôï LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"ôï êëåéäß äåí Ý÷åé óçìåéùèåß óáí áíáóöáëÝò - äåí ìðïñåß íá ÷ñçóéìïðïéçèåß ìå "
-"øåýôéêç RNG!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "ðáñáëåßöèçêå `%s': áíôéãñÜöôçêå\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "ðáñáëåßöèçêå `%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "ðáñáëåßöèçêå: ìõóôéêü êëåéäß Þäç ðáñþí\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"ðáñáëåßöèçêå `%s': áõôü åßíáé äçìéïõñãçìÝíï áðü PGP êëåéäß ElGamal êáé äåí "
-"åßíáé áóöáëÝò ãéá õðïãñáöÝò!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Ôï áñ÷åßï `%s' õðÜñ÷åé Þäç. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "ÅðéêÜëõøç (y/N); "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: Üãíùóôç êáôÜëçîç\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "ÐëçêôñïëïãÞóôå Ýíá íÝï üíïìá áñ÷åßïõ"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "åããñáöÞ óôçí stdout\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "õðüèåóç õðïãåãñáììÝíùí äåäïìÝíùí óôï `%s'\n"
-
-#: g10/openfile.c:326
-#, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "äçìéïõñãÞèçêå íÝï áñ÷åßï åðéëïãþí `%s'\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: áäõíáìßá äçìéïõñãßáò êáôáëüãïõ: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: êáôÜëïãïò äçìéïõñãÞèçêå\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"ÐÑÏÅÉÄÏÐÏÉÇÓÇ: ôï ìÞíõìá êñõðôïãñáöÞèçêå ìå áäýíáìï êëåéäß óôï\n"
-"óõììåôñéêü êñõðôáëãüñéèìï.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "ðñüâëçìá óôï ÷åéñéóìü êñõðôïãñáöçìÝíïõ ðáêÝôïõ\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "äçìéïõñãÞèçêå áäýíáìï êëåéäß - åðáíÜëçøç ðñïóðÜèåéáò\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"áäõíáìßá áðïöõãÞò áäýíáìïõ êëåéäéïý ãéá óõììåôñéêü êñõðôáëãüñéèìï, äïêéìÞ "
-"ãéá %d öïñÝò!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "ï DSA áðáéôåß ôç ÷ñÞóç åíüò 160 bit áëãüñéèìïõ hash\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr "(åêôüò åÜí ðñïóäéïñßóåôå Ýíá êëåéäß áðü áðïôýðùìá)\n"
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "äåí ìðïñåß íá ãßíåé áõôü óå êáôÜóôáóç äÝóìçò ÷ùñßò ôï \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "ÄéáãñáöÞ áõôïý ôïõ êëåéäéïý áðü ôç êëåéäïèÞêç; "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Áõôü åßíáé Ýíá ìõóôéêü êëåéäß! - Óßãïõñá íá äéáãñáöåß; "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "äéáãñáöÞ block êëåéäéþí áðÝôõ÷å: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "êáèáñéóìüò ðëçñïöïñéþí åìðéóôïóýíçò-éäéïêôÞôç\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "õðÜñ÷åé Ýíá ìõóôéêü êëåéäß ãéá ôï äçìüóéï êëåéäß \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr ""
-"÷ñçóéìïðïéåßóôå ðñþôá ôçí åðéëïãÞ \"--delete-secret-key\" ãéá äéáãñáöÞ ôïõ.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Åßíáé áðüöáóç óáò íá ïñßóåôå ôéìÞ åäþ. ÁõôÞ ç ôéìÞ äåí èá åîá÷èåß\n"
-"ðïôÝ óå ôñßôï ðñüóùðï. Ôç ÷ñåéáæüìáóôå ãéá åöáñìïãÞ ôïõ éóôïý-"
-"åìðéóôïóýíçò,\n"
-"äåí Ý÷åé ôßðïôá íá êÜíåé ìå ôïí (óéùðçëÜ äçìéïõñãçìÝíï) éóôü-ðéóôïðïéçôéêþí."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Ãéá ôç äüìçóç åíüò Éóôïý-Åìðéóôïóýíçò, ôï GnuPG ðñÝðåé íá îÝñåé ðïéÜ "
-"êëåéäéÜ\n"
-"åßíáé ðëÞñçò åìðéóôïóýíçò - áõôÜ åßíáé óõíÞèùò êëåéäéÜ óôá ïðïßá Ý÷åôå\n"
-"ðñüóâáóç óôï ìõóôéêü êëåéäß. ÁðáíôÞóôå \"yes\" (íáé) ãéá íá äïèåß óôï "
-"êëåéäß\n"
-"áõôü ðëÞñç åìðéóôïóýíç\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr ""
-"ÅÜí èÝëåôå íá ÷ñçóéìïðïéÞóåôå áõôü ôï áíáêëÞèåí êëåéäß, áðáíôÞóôå \"yes\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"ÅÜí èÝëåôå íá ÷ñçóéìïðïéÞóåôå áõôü ôï ìç åìðéóôåõìÝíï êëåéäß, áðáíôÞóôå \"yes"
-"\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr ""
-"ÐëçêôñïëïãÞóôå ôï user ID ôïõ áðïäÝêôç áõôïý ðïõ èÝëåôå íá óôåßëåôå ìÞíõìá."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"ÅðéëÝîôå ôïí áëãüñéèìï ðïõ èÝëåôå íá ÷ñçóéìïðïéÞóåôå.\n"
-"\n"
-"DSA (åðßóçò ãíùóôüò óáí DSS) åßíáé ï áëãüñéèìïò øçöéáêÞò õðïãñáöÞò\n"
-"êáé ìðïñåß íá ÷ñçóéìïðïéçèåß ìüíï ãéá õðïãñáöÝò. Åßíáé ï ðñïôåéíüìåíïò\n"
-"áëãüñéèìïò åðåéäÞ ç åðáëÞèåõóç ôùí DSA õðïãñáöþí åßíáé ôá÷ýôåñç áðü\n"
-"ôùí õðïãñáöþí ôýðïõ ElGamal.\n"
-"\n"
-"ElGamal åßíáé Ýíáò áëãüñéèìïò ãéá ÷ñÞóç êáé óå õðïãñáöÝò êáé ãéá êñõðôï-\n"
-"ãñÜöçóç. Ôï OpenPGP îå÷ùñßæåé ôéò äýï \"ãåýóåéò\" áõôïý ôïõ áëãüñéèìïõ:\n"
-"Ýíá êñõðôïãñÜöçóçò-ìüíï êáé Ýíá õðïãñáöÞò-êáé-êñõðôïãñÜöçóçò, óôçí\n"
-"ðñáãìáôéêüôçôá åßíáé ï ßäéïò, áëëÜ êÜðïéïé ðáñÜìåôñïé ðñÝðåé íá åðéëåãïýí\n"
-"ìå Ýíá åéäéêü ôñüðï ãéá íá äçìéïõñãçèåß Ýíá áóöáëÝò êëåéäß ãéá õðïãñáöÝò.\n"
-"Áõôü ôï ðñüãñáììá ôï êÜíåé, áëëÜ óå Üëëåò OpenPGP õëïðïéÞóåéò äåí\n"
-"åßíáé áðáñáßôçôï íá êáôáëáâáßíïõí áõôü ôï óõíäõáóìü (ãåýóç).\n"
-"\n"
-"Ôï ðñþôï (ðñùôåýïí) êëåéäß ðñÝðåé íá åßíáé ðÜíôïôå Ýíá êëåéäß éêáíü ãéá\n"
-"õðïãñáöÞ. Áõôüò åßíáé ï ëüãïò ãéá ôïí ïðïßï ï êñõðôïãñÜöçóçò-ìüíï\n"
-"êëåéäß ElGamal äåí åßíáé äéáèÝóéìï óå áõôü ôï ìåíïý."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Áí êáé áõôÜ ôá êëåéäéÜ ðåñéãñÜöïíôáé óôï RFC2440 äåí ðñïôåßíïíôáé\n"
-"åðåéäÞ äåí õðïóôçñßæïíôáé áðü üëá ôá ðñïãñÜììáôá êáé ïé õðïãñáöÝò ðïõ\n"
-"Ý÷ïõí äçìéïõñãçèåß áðü áõôÜ åßíáé ìåãÜëåò êáé ðïëý áñãÝò óôçí åðáëÞèåõóç."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-"ÃåíéêÜ, äåí åßíáé êáëÞ éäÝá íá ÷ñçóéìïðïéåßôáé ôï ßäéï êëåéäß ãéá õðïãñáöÞ\n"
-"êáé êñõðôïãñÜöçóç. Áõôüò ï áëãüñéèìïò ðñÝðåé íá ÷ñçóéìïðïéåßôáé ìüíï óå\n"
-"ïñéóìÝíïõò ôüðïõò. Ç óõìâïõëÞ åíüò åéäéêïý óå èÝìáôá áóöÜëåéáò óõíåßóôáôå."
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "ÐëçêôñïëïãÞóôå ôï ìÝãåèïò ôïõ êëåéäéïý"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "ÁðáíôÞóôå \"yes\"(íáé) Þ \"no\"(ü÷é)"
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"ÐëçêôñïëïãÞóôå ôçí áðáéôïýìåíç ôéìÞ üðùò áðåéêïíßæåôå.\n"
-"Ìðïñåßôå íá åéóÜãåôå ìéá çìåñïìçíßá ISO (YYYY-MM-DD) áëëÜ\n"
-"äåí èá ëÜâåôå ìéá êáëÞ áðÜíôçóç óöÜëìáôïò - áíôßèåôá ôï óýóôçìá\n"
-"ðñïóðáèåß íá åñìçíåýóåé ôçí ôéìÞ óáí äéÜóôçìá."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "ÐëçêôñïëïãÞóôå ôï üíïìá ôïõ êëåéäïêñÜôïñá"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "ðëçêôñïëïãÞóôå ðñïáéñåôéêÜ ìéá äéåýèõíóç email (óõíéóôÜôáé)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Ðáñáêáëþ ðñïáéñåôéêÜ ðëçêôñïëïãÞóôå Ýíá ó÷üëéï"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N ãéá áëëáãÞ ôïõ ïíüìáôïò.\n"
-"C ãéá áëëáãÞ ôïõ ó÷ïëßïõ.\n"
-"E ãéá áëëáãÞ ôçò äéåýèõíóçò email.\n"
-"O ãéá óõíÝ÷åéá ôçò äçìéïõñãßáò êëåéäéïý.\n"
-"Q ãéá íá ôåñìáôßóåôå ôç äçìéïõñãßá êëåéäéïý."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr ""
-"ÁðáíôÞóôå \"yes\" (Þ áðëÜ \"y\") åÜí åßíáé åíôÜîåé íá äçìéïõñãçèåß ôï "
-"õðïêëåéäß."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"¼ôáí õðïãñÜöåôå Ýíá user ID óå Ýíá êëåéäß, ðñÝðåé ðñþôá íá âåâáéùèåßôå üôé\n"
-"ôï êëåéäß áíÞêåé óôï ðñüóùðï ðïõ áíáöÝñåôå óôï user ID. Åßíáé ÷ñÞóéìï "
-"ãéáôïõò Üëëïõò, íá îÝñïõí ðüóï ðñïóåêôéêÜ êÜíáôå áõôÞ ôç ðéóôïðïßçóç.\n"
-"\n"
-"\"0\" óçìáßíåé ïôé äåí áðáíôÜôå êáôá ðüóï ðñïóåêôéêÜ ðéóôïðïéÞóáôå ôï "
-"êëåéäß.\n"
-"\"1\" óçìáßíåé üôé ðéóôåýåôå ïôé ôï êëåéäß áíÞêåé óôï Üôïìï ðïõ ëÝåé üôé "
-"ôïõ\n"
-" áíÞêåé, áëëÜ äåí ìðïñåßôå Þ äåí åðéâåâáéþóáôå êáèüëïõ ôï êëåéäß. Áõôü\n"
-" åßíáé ÷ñÞóéìï üôáí õðïãñÜöåôå ôï êëåéäß åíüò \"øåõäþíõìïõ\" ÷ñÞóôç.\n"
-"\n"
-"\"2\" óçìáßíåé üôé êÜíáôå ôçí óõíÞèç ðéóôïðïßçóç ôïõ êëåéäéïý. Ãéá "
-"ðáñÜäåéãìá\n"
-" áõôü ìðïñåß íá óçìáßíåé üôé ðéóôïðïéÞóáôå ôï êëåéäß êáé åëÝãîáôå ôï\n"
-" user ID óôï êëåéäß ìå ìéá photo ID.\n"
-"\n"
-"\"3\" óçìáßíåé üôé êÜíáôå åêôåôáìÝíï Ýëåã÷ï óôï êëåéäß. Ãéá ðáñÜäåéãìá, "
-"áõôü\n"
-" áõôü ìðïñåß íá óçìáßíåé üôé åëÝãîáôå ôï áðïôýðùìá ôïõ êëåéäéïý ìå ôïí\n"
-" éäéïêôÞôç ôïõ êëåéäéïý \"öõóéêÜ\" ðáñþí êáé åëÝãîáôå üôé ôï photo ID "
-"ôïõ\n"
-" êëåéäéïý åßíáé üìïéï ìå áõôü óå Ýíá äýóêïëá íá ðáñá÷áñá÷èåß Ýããñáöï ð."
-"÷.\n"
-" ôáõôüôçôá, äéáâáôÞñéï, äßðëùìá ïäÞãçóçò.\n"
-"\n"
-"¸÷åôå õðüøç üôé ôá ðáñáäåßãìáôá ðïõ äþèçêáí óôá \"åðßðåäá\" 2 êáé 3 åßíáé\n"
-"*ìüíï* ðáñáäåßãìáôá. Óôï ôÝëïò åîáñôÜôå ìüíï áðü åóÜò íá áðïöáóßóåôå ôé\n"
-"óçìáßíåé \"óõíÞèåò\" êáé ôé \"åêôåôôáìÝíï\" óå åóÜò üôáí õðïãñÜöåôå "
-"êëåéäéÜ.\n"
-"\n"
-"ÅÜí äåí îÝñåôå ðïéÜ åßíáé ç óùóôÞ áðÜíôçóç, äþóôå \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "ÁðáíôÞóôå \"yes\" åÜí èÝëåôå íá õðïãñÜøåôå ÏËÁ ôá user ID"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"ÁðáíôÞóôå \"yes\" åÜí ðñáãìáôéêÜ èÝëåôå íá äéáãñáöåß áõôü\n"
-"ôï user ID. ¼ëá ôá ðéóôïðïéçôéêÜ èá ÷áèïýí ôüôå!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "ÁðáíôÞóôå \"yes\" åÜí åßíáé åíôÜîåé íá äéáãñáöåß ôï õðïêëåéäß"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"ÁõôÞ åßíáé ìéá Ýãêõñç õðïãñáöÞ óôï êëåéäß. ÊáíïíéêÜ äåí èá èÝëáôå\n"
-"íá äéáãñáöåß áõôÞ ç õðïãñáöÞ åðåéäÞ ìðïñåß íá åßíáé áðáñáßôçôç ãéá\n"
-"êáèéÝñùóç ìéá óýíäåóçò åìðéóôïóýíçò óôï êëåéäß Þ óå Ýíá Üëëï êëåéäß\n"
-"ðéóôïðïéçìÝíï áðü áõôü."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"ÁõôÞ ç õðïãñáöÞ äåí ìðïñåß íá åëåã÷èåß åðåéäÞ äåí Ý÷åôå ôï áíôßóôïé÷ï\n"
-"êëåéäß. ÐñÝðåé íá áíáâÜëëåôå ôç äéáãñáöÞ ôïõ, ìÝ÷ñé íá ìÜèåôå ðéï êëåéäß\n"
-"÷ñçóéìïðïéÞèçêå ãéáôß áõôü ôï êëåéäß õðïãñáöÞò ìðïñåß íá êáèéåñþóåé\n"
-"ìéá óýíäåóç åìðéóôïóýíçò ìÝóù åíüò Üëëïõ Þäç ðéóôïðïéçìÝíïõ êëåéäéïý."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"Ç õðïãñáöÞ äåí åßíáé Ýãêõñç. Åßíáé óõíåôü íá äéáãñáöåß áðü ôç\n"
-"êëåéäïèÞêç óáò."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"ÁõôÞ åßíáé ìéá õðïãñáöÞ ðïõ óõíäÝåé ôï user ID óôï êëåéäß. Äåí\n"
-"åßíáé óõíÞèùò êáëÞ éäÝá íá äéáãñáöåß ìéá ôÝôïéá õðïãñáöÞ. Óôçí\n"
-"ðñáãìáôéêüôçôá ôï GnuPG ßóùò íá ìç ìðïñåß íá ÷ñçóéìïðïéÞóåé áõôü\n"
-"ôï êëåéäß ðéá. Ïðüôå íá óõíå÷ßóåôå ìüíï åÜí áõôÞ ç éäéï-õðïãñáöÞ ãéá\n"
-"êÜðïéï ëüãï äåí åßíáé Ýãêõñç Þ õðÜñ÷åé ìéá äåýôåñç."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"ÁëëÜîôå ôéò ðñïåðéëïãÝò üëùí ôùí user ID (Þ ìüíï ôùí åðéëåãìÝíùí)\n"
-"óôçí ðñïõðÜñ÷ïõóá ëßóôá ðñïåðéëïãþí. Ç çìåñïìçíßá üëùí ôùí åðçñåáóìÝíùí\n"
-"éäéï-õðïãñáöþí èá áõîçèåß êáôÜ 1 äåõôåñüëåðôï.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "ÐëçêôñïëïãÞóôå ôç öñÜóç êëåéäß· áõôÞ åßíáé ìéá ìõóôéêÞ ðñüôáóç \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Ðáñáêáëþ åðáíáëÜâåôå ôç ôåëåõôáßá öñÜóç êëåéäß, ãéá óéãïõñéÜ."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Äþóôå ôï üíïìá ôïõ áñ÷åßïõ óôï ïðïßï åöáñìüæåôáé ç õðïãñáöÞ"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "ÁðáíôÞóôå \"yes\" åÜí åßíáé åíôÜîåé íá åðéêáëõöèåß ôï áñ÷åßï"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Ðáñáêáëþ åéóÜãåôå Ýíá íÝï üíïìá áñ÷åßïõ. ÅÜí áðëÜ ðáôÞóåôå RETURN\n"
-"ôï åî'ïñéóìïý áñ÷åßï (áðåéêïíßæåôáé óôéò áãêýëåò) èá ÷ñçóéìïðïéçèåß."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"ÐñÝðåé íá ïñßóåôå Ýíá ëüãï ãéá ôçí ðéóôïðïßçóç. ÁíÜëïãá ìå ôá\n"
-"óõìöñáæüìåíá, Ý÷åôå ôç äõíáôüôçôá íá åðéëÝîåôå áðü ôç ëßóôá:\n"
-" \"Ôï êëåéäß Ý÷åé åêôåèåß\"\n"
-" ×ñçóéìïðïéåßóôå åÜí ðéóôåýåôå üôé ìç åîïõóéïäïôçìÝíá ðñüóùðá\n"
-" Ý÷ïõí ðñüóâáóç óôï ìõóôéêü êëåéäß óáò.\n"
-" \"Ôï êëåéäß Ý÷åé ðáñáêáìèåß\"\n"
-" ×ñçóéìïðïéåßóôå åÜí Ý÷åôå áíôéêáôáóôÞóåé ôï êëåéäß ìå Ýíá Üëëï.\n"
-" \"Ôï êëåéäß äåí ÷ñçóéìïðïéåßôå ðëÝïí\"\n"
-" ×ñçóéìïðïéåßóôå åÜí Ý÷åôå áðïóýñåé áõôü ôï êëåéäß.\n"
-" \"Ôï user ID äåí åßíáé ðëÝïí Ýãêõñï\"\n"
-" ×ñçóéìïðïéåßóôå áõôü ãéá íá äçëþóåôå üôé ôï user ID äåí ðñÝðåé\n"
-" íá ÷ñçóéìïðïéåßôáé ðéá. Ãéá íá ïñßóåôå Üêõñç ìéá äéåýèõíóç email.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"ÅÜí åðéèõìåßôå, ìðïñåßôå íá ðëçêôñïëïãÞóåôå Ýíá êåßìåíï ðïõ\n"
-"ðåñéãñÜöåé ôïí ëüãï ðïõ åêäßäåôáé áõôü ôï ðéóôïðïéçôéêü áíÜêëçóçò.\n"
-"Ðáñáêáëþ êñáôÞóôå áõôü ôï êåßìåíï óõíïðôéêü. Ìéá Üäåéá ãñáììÞ\n"
-"ëÞãåé ôï êåßìåíï.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Äåí õðÜñ÷åé äéáèÝóéìç âïÞèåéá"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Äåí õðÜñ÷åé äéáèÝóéìç âïÞèåéá ãéá `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "áäõíáìßá äçìéïõñãßáò ôçò êëåéäïèÞêçò `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "êëåéäïèÞêç `%s' äçìéïõñãÞèçêå\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "áðïôõ÷ßá åðáíáäüìçóçò ôçò cache êëåéäïèÞêçò: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "ÐÑÏÅÉÄÏÐÏÉÇÓÇ: 2 áñ÷åßá ìå åìðéóôåõôéêÝò ðëçñïöïñßåò õðÜñ÷ïõí.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s åßíáé ôï áìåôÜâëçôï\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s åßíáé ôï íÝï\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Ðáñáêáëþ äéïñèþóôå áõôÞ ôçí ðéèáíÞ \"ôñýðá\" áóöáëåßáò\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "Ýëåã÷ïò êëåéäïèÞêçò `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu êëåéäéÜ Ý÷ïõí ìÝ÷ñé ôþñá åëåã÷èåß (%lu õðïãñáöÝò)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu êëåéäéÜ Ý÷ïõí åëåã÷èåß (%lu õðïãñáöÝò)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: êëåéäïèÞêç äçìéïõñãÞèçêå\n"
diff --git a/po/eo.po b/po/eo.po
deleted file mode 100644
index 6f797ec2e..000000000
--- a/po/eo.po
+++ /dev/null
@@ -1,4938 +0,0 @@
-# Mesaøoj por la programo GnuPG
-# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
-# Edmund GRIMLEY EVANS <edmundo@rano.org>, 2000-2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.6d\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-04-14 14:33+0100\n"
-"Last-Translator: Edmund GRIMLEY EVANS <edmundo@rano.org>\n"
-"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-3\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Averto: uzas malsekuran memoron!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "bonvolu vidi http://www.gnupg.org/faq.html por pliaj informoj\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "operacio ne eblas sen sekura memoro kun komenca valoro\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(eble vi uzis la maløustan programon por æi tiu tasko)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "jes"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "jJ"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "ne"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "fini"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "fF"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "øenerala eraro"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "nekonata paketo-speco"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "nekonata versio"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "nekonata publikþlosila metodo"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "nekonata kompendi-metodo"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "malbona publika þlosilo"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "malbona sekreta þlosilo"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "malbona subskribo"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "eraro en kontrolsumo"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "malbona pasfrazo"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "publika þlosilo ne trovita"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "nekonata æifrad-metodo"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "ne povas malfermi la þlosilaron"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "nevalida paketo"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "nevalida kiraso"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "uzantidentigilo ne ekzistas"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "sekreta þlosilo ne havebla"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "maløusta sekreta þlosilo uzata"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "ne realigita"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "malbona þlosilo"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "legeraro æe dosiero"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "skriberaro æe dosiero"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "nekonata densig-metodo"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "eraro æe malfermo de dosiero"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "eraro æe kreo de dosiero"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "nevalida pasfrazo"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "nerealigita publikþlosila metodo"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "nerealigita æifrad-metodo"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "nekonata klaso de subskribo"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "eraro en fido-datenaro"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "malbona MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "trafis rimedolimon"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "nevalida þlosilaro"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "malbona atestilo"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "misformita uzantidentigilo"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "eraro æe fermo de dosiero"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "eraro æe renomado de dosiero"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "eraro æe forviþo de dosiero"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "neatendita dateno"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "malkongruo de tempostampoj"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "neuzebla publikþlosila metodo"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "dosiero ekzistas"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "malforta þlosilo"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "nevalida argumento"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "malbona URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "nerealigita URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "reteraro"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "ne æifrita"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "ne traktita"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "neuzebla publika þlosilo"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "neuzebla sekreta þlosilo"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "þlosilservila eraro"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... æi tio estas cimo (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "vi trovis cimon ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "ne povas malfermi '%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "ne povas stat-i '%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "'%s' ne estas normala dosiero - ignorita\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "noto: dosiero random_seed estas malplena\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "averto: nevalida grando de la dosiero random_seen - ne uzita\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "ne povas legi '%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "noto: dosiero random_seed ne aktualigita\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "ne povas krei '%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "ne povas skribi '%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "ne povas fermi '%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "AVERTO: uzas malsekuran stokastilon!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"La kvazaýstokastilo estas nur simpla protezo, por ke la\n"
-"programo entute ruliøu; øi neniel estas forta stokastilo!\n"
-"\n"
-"NE UZU DATENOJN KREITAJN DE ÆI TIU PROGRAMO!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Nesufiæe da stokastaj datenoj. Bonvolu fari ion por ebligi al la\n"
-"mastruma sistemo kolekti pli da entropio! (Mankas %d bitokoj)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Komandoj:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[dosiero]|fari subskribon"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[dosiero]|fari klartekstan subskribon"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "fari apartan subskribon"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "æifri datenojn"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[dosieroj]|æifri dosierojn"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "æifri nur kun simetria æifro"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "nur skribi"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "malæifri datenojn (implicita elekto)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[dosieroj]|malæifri dosierojn"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "kontroli subskribon"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "listigi þlosilojn"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "listigi þlosilojn kaj subskribojn"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "kontroli þlosilsubskribojn"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "listigi þlosilojn kaj fingroþpurojn"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "listigi sekretajn þlosilojn"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "krei novan þlosilparon"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "forigi þlosilojn de la publika þlosilaro"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "forigi þlosilojn de la sekreta þlosilaro"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "subskribi þlosilon"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "subskribi þlosilon loke"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "subskribi þlosilon nerevokeble"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "subskribi þlosilon loke kaj nerevokeble"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "subskribi aý redakti þlosilon"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "krei revokatestilon"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "eksporti þlosilojn"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "eksporti þlosilojn al þlosilservilo"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importi þlosilojn de þlosilservilo"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "seræi þlosilojn æe þlosilservilo"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "aktualigi æiujn þlosilojn de þlosilservilo"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importi/kunfandi þlosilojn"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "listigi nur la sinsekvon de paketoj"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "eksporti la posedantofido-valorojn"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importi posedantofido-valorojn"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "aktualigi la fido-datenaron"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "senintervena aktualigo de fido-datenaro"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "ripari fuþitan fido-datenaron"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "elkirasigi dosieron aý la normalan enigon"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "enkirasigi dosieron aý la normalan enigon"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|metodo [dosieroj]|presi mesaøo-kompendiojn"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opcioj:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "krei eligon en askia kiraso"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOMO|æifri por NOMO"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOMO|uzi NOMOn kiel implicitan ricevonton"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "uzi la implicitan þlosilon kiel implicitan ricevonton"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "uzi æi tiun uzantidentigilon por subskribi aý malæifri"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|difini densig-nivelon N (0=nenia)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "uzi tekstan reøimon"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "uzi dosieron por eligo"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "detala eligo"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "iom malpli da informoj"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "tute ne uzi la terminalon"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "devigi v3-subskribojn"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "ne devigi v3-subskribojn"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "devigi v4-subskribojn"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "ne devigi v4-þlosilsubskribojn"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "æiam uzi sigelon (MDC) por æifrado"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "neniam uzi MDC por æifrado"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "fari neniajn þanøojn"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "uzi gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "neinteraga reøimo: neniam demandi"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "supozi \"jes\" æe la plej multaj demandoj"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "supozi \"ne\" æe la plej multaj demandoj"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "aldoni æi tiun þlosilaron al la listo de þlosilaroj"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "aldoni æi tiun sekretan þlosilaron al la listo"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "montri, en kiu þlosilaro estas listigita þlosilo"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOMO|uzi NOMOn kiel la implicitan sekretan þlosilon"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|SERVILO|uzi æi tiun þlosilservilon por seræi þlosilojn"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NOMO|difini NOMOn kiel la signaron de la terminalo"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "legi la opciojn el dosiero"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|skribi statusinformojn al FD (dosierpriskribilo)"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[dosiero]|skribi statusinformojn al dosiero"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KEYID|fidi æi tiun þlosilon absolute"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|DOSIERO|legi aldonan bibliotekon DOSIERO"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "imiti la reøimon priskribitan en RFC 1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "þalti æiujn paket-, æifrad- kaj kompendi-opciojn al OpenPGP-konduto"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "þalti æiujn paket-, æifrad- kaj kompendi-opciojn al PGP-2.x-konduto"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|uzi pasfraz-reøimon N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NOMO|uzi kompendi-metodon NOMO por pasfrazoj"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NOMO|uzi æifrad-metodon NOMO por pasfrazoj"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOMO|uzi æifrad-metodon NOMO"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOMO|uzi kompendi-metodon NOMO"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|uzi densig-metodon N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "forigi la þlosilidentigilon de æifritaj paketoj"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Montri Foto-Identigilojn"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Ne montri Foto-Identigilojn"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Agordi komandlinion por montri Foto-Identigilojn"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Vidu la manpaøon por kompleta listo de æiuj komandoj kaj opcioj)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Ekzemploj:\n"
-"\n"
-" -se -r Bob [dosiero] subskribi kaj æifri por uzanto Bob\n"
-" --clearsign [dosiero] fari klartekstan subskribon\n"
-" --detach-sign [dosiero] fari apartan subskribon\n"
-" --list-keys [nomoj] montri þlosilojn\n"
-" --fingerprint [nomoj] montri fingroþpurojn\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Bonvolu raporti cimojn al <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Uzado: gpg [opcioj] [dosieroj] (-h por helpo)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintakso: gpg [opcioj] [dosieroj]\n"
-"subskribi, kontroli, æifri aý malæifri\n"
-"implicita operacio dependas de la enigataj datenoj\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Realigitaj metodoj:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "uzado: gpg [opcioj] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "malkongruaj komandoj\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Averto: malsekura posedeco sur %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Averto: malsekura posedeco sur %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTO: mankas implicita opcio-dosiero '%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTO: mankas implicita opcio-dosiero '%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "opcio-dosiero '%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "legas opciojn el '%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s ne estas valida signaro\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "ne povis analizi URI de þlosilservilo\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "AVERTO: '%s' estas malplena dosiero\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "nevalida kiraso"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "AVERTO: '%s' estas malplena dosiero\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "nevalida þlosilaro"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "AVERTO: programo povas krei core-dosieron!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "AVERTO: %s nuligas %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTO: %s ne estas por normala uzado!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s ne eblas kun %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s ne havas sencon kun %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "eblas fari nur apartajn kaj klartekstajn subskribojn kun --pgp2\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "ne eblas samtempe subskribi kaj æifri kun --pgp2\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "necesas uzi dosierojn (kaj ne tubon) kun --pgp2\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "æifri mesaøon kun --pgp2 postulas la æifron IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "æi tiu mesaøo povas ne esti uzebla de PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "elektita æifrad-metodo ne validas\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "elektita kompendi-metodo ne validas\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "elektita kompendi-metodo ne validas\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "la densig-metodo devas esti inter %d kaj %d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed devas esti pli granda ol 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed devas esti pli granda ol 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth devas esti inter 1 kaj 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTO: simpla S2K-reøimo (0) estas forte malrekomendata\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "nevalida S2K-reøimo; devas esti 0, 1 aý 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "nevalida default-check-level; devas esti 0, 1, 2 aý 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "nevalidaj preferoj\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "nevalidaj preferoj\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "nevalidaj preferoj\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "nevalidaj preferoj\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [dosiero]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [dosiero]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [dosiero]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [dosiero]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [dosiero]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [dosiero]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [dosiero]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [dosiero]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key uzantidentigilo"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key uzantidentigilo"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key uzantidentigilo"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key uzantidentigilo"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key uzantidentigilo [komandoj]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "ne povas malfermi %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [uzantidentigilo] [þlosilaro]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "elkirasigo malsukcesis: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "enkirasigo malsukcesis: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "nevalida kompendi-metodo '%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[dosiero]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Ektajpu vian mesaøon ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "ne povas malfermi '%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"notacia nomo devas enhavi nur literojn, ciferojn, punktojn aý substrekojn "
-"kaj fini per '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "notacia valoro ne povas enhavi stirsignojn\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "la donita gvidlinia URL por atestado ne validas\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "la donita gvidlinia URL por subskriboj ne validas\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "kiraso: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "nevalida kirasoæapo: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "kirasoæapo: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "nevalida æapo de klarteksta subskribo\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "ingitaj klartekstaj subskriboj\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "nevalida strek-eskapita linio: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "neatendita kiraso:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "nevalida signo %02x en bazo 64 ignorita\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "tro frua dosierfino (nenia CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "tro frua dosierfino (en CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "misformita CRC\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "CRC-eraro; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "tro frua dosierfino (en vosto)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "eraro en vostolinio\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "validaj OpenPGP-datenoj ne trovitaj.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "nevalida kiraso: linio pli longa ol %d signojn\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"quoted-printable-signo en kiraso - verþajne cima poþtotransendilo estis "
-"uzata\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Nenia kialo specifita"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Þlosilo estas anstataýigita."
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Þlosilo estas kompromitita"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Þlosilo estas ne plu uzata"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Uzantidentigilo ne plu validas"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Kialo por revoko: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Komento pri revoko: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMfFsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Nenia fidovaloro atribuita al:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Bonvolu decidi, kiagrade vi fidas al æi tiu uzanto øuste\n"
-"kontroli la þlosilojn de aliaj uzantoj (rigardante pasportojn,\n"
-"kontrolante fingrospurojn el diversaj fontoj ...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Ne scias\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = Ni NE fidas æi tiun þlosilon\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Mi fidas iomete\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Mi plene fidas\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Mi fidas absolute\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = bonvolu montri pli da informoj\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = reen al la æefmenuo\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = supersalti æi tiun þlosilon\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " f = fini\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Via decido? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Æu vi vere volas þanøi æi tiun þlosilon al absoluta fido? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Atestiloj, kiuj kondukas al absolute fidata þlosilo:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "þlosilo %08lX: þlosilo estas revokita!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Æu tamen uzi æi tiun þlosilon? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "þlosilo %08lX: subþlosilo estas revokita!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: þlosilo eksvalidiøis\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Estas nenia indiko, ke æi tiu þlosilo vere apartenas al la posedanto\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Ni NE fidas æi tiun þlosilon\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Ne estas certe, ke æi tiu þlosilo vere apartenas al la posedanto,\n"
-"sed øi tamen estas akceptita\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Æi tiu þlosilo verþajne apartenas al la posedanto\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Æi tiu þlosilo apartenas al ni\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"NE estas certe, ke la þlosilo apartenas al sia posedanto.\n"
-"Se vi *vere* scias, kion vi faras, vi povas respondi al\n"
-"la sekva demando per \"jes\"\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "AVERTO: Uzas nefidatan þlosilon!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "AVERTO: Æi tiu þlosilo estas revokita de sia posedanto!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Tio povas signifi, ke la subskribo estas falsa.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "AVERTO: Æi tiu subþlosilo estas revokita de sia posedanto!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Noto: Æi tiu þlosilo estas malþaltita.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Noto: Æi tiu þlosilo eksvalidiøis!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "AVERTO: Æi tiu þlosilo ne estas atestita kun fidata subskribo!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Estas nenia indiko, ke la subskribo apartenas al la posedanto.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "AVERTO: Ni NE fidas æi tiun þlosilon!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " La subskribo verþajne estas FALSA.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"AVERTO: Æi tiu þlosilo ne estas atestita kun sufiæe fidataj subskriboj!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Ne estas certe, ke la subskribo apartenas al la posedanto.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ignorita: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ignorita: publika þlosilo jam æeestas\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Vi ne specifis uzantidentigilon. (Vi povas uzi \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Donu la uzantidentigilon. Finu per malplena linio: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Uzantidentigilo ne ekzistas.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "ignorita: publika þlosilo jam difinita kiel implicita ricevonto\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Publika þlosilo estas malþaltita.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "ignorita: publika þlosilo jam agordita\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "nekonata implicita ricevonto '%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ignorita: publika þlosilo estas malþaltita\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "mankas validaj adresitoj\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "prefero %c%lu ne estas valida\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "prefero %c%lu ripetita\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "tro da '%c'-preferoj\n"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "nevalida signo en signoæeno\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "skribas mem-subskribon\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "skribas mem-subskribon\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "skribas þlosilbindan subskribon\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "þlosilgrando nevalida; uzas %u bitojn\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "þlosilgrando rondigita øis %u bitoj\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Bonvolu elekti, kian þlosilon vi deziras:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA kaj ElGamal (implicita elekto)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (nur subskribi)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (nur æifri)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (subskribi kaj æifri)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (nur subskribi)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (nur æifri)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (subskribi kaj æifri)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Via elekto? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "Uzado de æi tiu algoritmo estas malrekomendata - æu tamen krei? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Nevalida elekto.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Kreos novan %s-þlosilparon.\n"
-" minimuma þlosilgrando estas 768 bitoj\n"
-" implicita þlosilgrando estas 1024 bitoj\n"
-" plej granda rekomendata þlosilgrando estas 2048 bitoj\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Kiun þlosilgrandon vi deziras? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA permesas þlosilgrandon nur inter 512 kaj 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "þlosilgrando tro malgranda; 1024 estas plej eta valoro por RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "þlosilgrando tro malgranda; 768 estas plej eta permesata valoro.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "þlosilgrando tro granda; %d estas plej granda permesata valoro.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Þlosilgrandoj pli grandaj ol 2048 ne estas rekomendataj,\n"
-"æar la komputado daýras TRE longe!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Æu vi estas certa, ke vi deziras æi tiun þlosilgrandon? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Bone, sed pripensu, ke la elradiado de viaj ekrano kaj klavaro estas tre "
-"facile kaptebla!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Petita þlosilgrando estas %u bitoj\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "rondigita øis %u bitoj\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Bonvolu specifi, kiom longe la þlosilo validu.\n"
-" 0 = þlosilo neniam eksvalidiøos\n"
-" <n> = þlosilo eksvalidiøos post n tagoj\n"
-" <n>w = þlosilo eksvalidiøos post n semajnoj\n"
-" <n>m = þlosilo eksvalidiøos post n monatoj\n"
-" <n>y = þlosilo eksvalidiøos post n jaroj\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Bonvolu specifi, kiom longe la þlosilo validu.\n"
-" 0 = þlosilo neniam eksvalidiøos\n"
-" <n> = þlosilo eksvalidiøos post n tagoj\n"
-" <n>w = þlosilo eksvalidiøos post n semajnoj\n"
-" <n>m = þlosilo eksvalidiøos post n monatoj\n"
-" <n>y = þlosilo eksvalidiøos post n jaroj\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Þlosilo validu ...? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Þlosilo validu por ...? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "nevalida valoro\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s neniam eksvalidiøos\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s eksvalidiøos je %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Via sistemo ne povas montri datojn post 2038.\n"
-"Tamen, øi estos øuste traktata øis 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Æu tio estas øusta (j/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Vi bezonas uzantidentigilon por identigi vian þlosilon; la programo\n"
-"konstruas la uzantidentigilon el Vera Nomo, Komento kaj Retadreso, jene:\n"
-" \"Heinrich Heine (la poeto) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Vera nomo: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Nevalida signo en nomo\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Nomo ne povas komenciøi per cifero\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Nomo devas havi almenaý 5 signojn\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Retadreso: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Nevalida retadreso\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Komento: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Nevalida signo en komento\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Vi uzas la signaron '%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Vi elektis æi tiun uzantidentigilon:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Bonvolu ne meti la retadreson en la veran nomon aý la komenton\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnKkAaBbFf"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Þanøu (N)omon, (K)omenton, (A)adreson, aý (F)ini? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Þanøu (N)omon, (K)omenton, (A)adreson, aý (B)one/(F)ini? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Bonvolu korekti la eraron unue\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Vi bezonas pasfrazon por protekti vian sekretan þlosilon.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "la pasfrazo ne estis øuste ripetita; provu denove"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Vi ne deziras pasfrazon; tio verþajne estas *malbona* ideo!\n"
-"Mi tamen faros tiel. Vi povos æiam ajn þanøi vian pasfrazon,\n"
-"uzante æi tiun programon kun la opcio \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Ne devas krei multe da stokastaj datenoj. Estas konsilinde fari ion\n"
-"alian (tajpi æe la klavaro, movi la muson, uzi la diskojn) dum la\n"
-"kreado de la primoj; tio donas al la stokastilo pli bonan þancon\n"
-"akiri sufiæe da entropio.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA-þlosilparo havos 1024 bitojn.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Kreado de þlosiloj nuligita.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "skribas publikan þlosilon al '%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "skribas sekretan þlosilon al '%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "neniu skribebla publika þlosilaro trovita: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "neniu skribebla sekreta þlosilaro trovita: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "eraro dum skribado de publika þlosilaro '%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "eraro dum skribado de sekreta þlosilaro '%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "publika kaj sekreta þlosiloj kreitaj kaj subskribitaj.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "þlosilo markita kiel absolute fidata.\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Notu, ke æi tiu þlosilo ne estas uzebla por æifrado. Vi eble volos\n"
-"uzi la komandon \"--edit-key\" por krei flankan þlosilon por tiu celo.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Kreado de þlosiloj malsukcesis: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý "
-"horloøeraro)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"þlosilo estis kreita %lu sekundojn en la estonteco (tempotordo aý "
-"horloøeraro)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NOTO: krei subþlosilojn por v3-þlosiloj ne estas OpenPGP-kongrue\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Æu vere krei? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output ne funkcias por æi tiu komando\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: ne povas malfermi: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "eraro dum kreado de pasfrazo: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "'%s' jam densigita\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: AVERTO: malplena dosiero\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr "eblas æifri nur per RSA-þlosiloj de maksimume 2048 bitoj kun --pgp2\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "legas el '%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr "ne povas uzi la æifron IDEA por æiuj þlosiloj, al kiuj vi æifras.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTO: æifrad-metodo %d ne trovita en preferoj\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Tiu komando ne eblas en la reøimo %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s-æifrita por: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "þlosilo '%s' ne trovita: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "eraro dum legado de þlosilbloko: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "þlosilo %08lX: ne estas RFC-2440-þlosilo - ignorita\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "þlosilo %08lX: ne protektita - ignorita\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "þlosilo %08lX: PGP-2.x-stila þlosilo - ignorita\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "AVERTO: nenio estis eksportita\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "tro da registroj en pk-staplo - malþaltas\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Uzantidentigilo ne trovita]"
-
-#: g10/getkey.c:1438
-#, fuzzy, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr "Nevalida þlosilo %08lX validigita per --always-trust\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "uzas flankan þlosilon %08lX anstataý la æefa þlosilo %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "þlosilo %08lX: sekreta þlosilo sen publika þlosilo - ignorita\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "ignoras blokon de speco %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu þlosiloj jam traktitaj\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "eraro dum legado de '%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr " Nombro traktita entute: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " ignoritaj novaj þlosiloj: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sen uzantidentigilo: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importitaj: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " neþanøitaj: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " novaj uzantidentigiloj: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " novaj subþlosiloj: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " novaj subskriboj: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " novaj þlosilrevokoj: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " sekretaj þlosiloj legitaj: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "sekretaj þlosiloj importitaj: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "sekretaj þlosiloj neþanøitaj: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importitaj: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "þlosilo %08lX: mankas uzantidentigilo\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "þlosilo %08lX: mankas subþlosilo por þlosilbindado\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "þlosilo %08lX: akceptis ne-mem-subskribitan uzantidentigilon '"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "þlosilo %08lX: mankas valida uzantidentigilo\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "tio povas esti kaýzata de mankanta mem-subskribo\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "þlosilo %08lX: publika þlosilo ne trovita: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "þlosilo %08lX: nova þlosilo - ignorita\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "neniu skribebla þlosilaro trovita: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "skribas al '%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "eraro dum skribado de þlosilaro '%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "þlosilo %08lX: publika þlosilo importita\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "þlosilo %08lX: diferencas de nia kopio\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "þlosilo %08lX: ne povas trovi originalan þlosilblokon: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "þlosilo %08lX: ne povas legi originalan þlosilblokon: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "þlosilo %08lX: 1 nova uzantidentigilo\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "þlosilo %08lX: %d novaj uzantidentigiloj\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "þlosilo %08lX: 1 nova subskribo\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "þlosilo %08lX: %d novaj subskriboj\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "þlosilo %08lX: 1 nova subþlosilo\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "þlosilo %08lX: %d novaj subþlosiloj\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "þlosilo %08lX: ne þanøita\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "mankas implicita sekreta þlosilaro: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "þlosilo %08lX: sekreta þlosilo importita\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "þlosilo %08lX: jam en sekreta þlosilaro\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "þlosilo %08lX: sekreta þlosilo ne trovita: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"þlosilo %08lX: publika þlosilo mankas - ne povas apliki revokatestilon\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "þlosilo %08lX: nevalida revokatestilo: %s - malakceptita\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "þlosilo %08lX: revokatestilo importita\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "þlosilo %08lX: mankas uzantidentigilo por subskribo\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "þlosilo %08lX: nerealigita publikþlosila metodo\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "þlosilo %08lX: nevalida mem-subskribo\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "þlosilo %08lX: mankas subþlosilo por þlosilbindado\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "þlosilo %08lX: nerealigita publikþlosila metodo\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "þlosilo %08lX: nevalida subþlosila bindado\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "þlosilo %08lX: nevalida subþlosila bindado\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "þlosilo %08lX: mankas subþlosilo por þlosilbindado\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "þlosilo %08lX.%lu: Valida subþlosilrevoko\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "þlosilo %08lX: nevalida subþlosila bindado\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "þlosilo %08lX: ignoris uzantidentigilon '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "þlosilo %08lX: ignoris subþlosilon\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "þlosilo %08lX: neeksportebla subskribo (klaso %02x) - ignorita\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "þlosilo %08lX: revokatestilo en maløusta loko - ignorita\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "þlosilo %08lX: nevalida revokatestilo: %s - ignorita\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "þlosilo %08lX: revokatestilo en maløusta loko - ignorita\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "þlosilo %08lX: trovis ripetitan uzantidentigilon - kunfandita\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "þlosilo %08lX: revokatestilo aldonita\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "þlosilo %08lX: rekta þlosilsubskribo aldonita\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revoko]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[mem-subskribo]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 malbona subskribo\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d malbonaj subskriboj\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 subskribo ne kontrolita pro manko de þlosilo\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d subskriboj ne kontrolitaj pro manko de þlosiloj\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 subskribo ne kontrolita pro eraro\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d subskriboj ne kontrolitaj pro eraroj\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 uzantidentigilo sen valida mem-subskribo estis trovita\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d uzantidentigiloj sen valida mem-subskribo estis trovitaj\n"
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Uzantidentigilo \"%s\" estas revokita.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Æu vi estas certa, ke vi ankoraý volas subskribi øin?\n"
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "AVERTO: '%s' estas malplena dosiero\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Via aktuala subskribo sur \"%s\"\n"
-"estas loka subskribo.\n"
-"\n"
-"Æu vi volas igi øin plena eksportebla subskribo?\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-"Via aktuala subskribo sur \"%s\"\n"
-"estas loka subskribo.\n"
-"\n"
-"Æu vi volas igi øin plena eksportebla subskribo?\n"
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, fuzzy, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Via aktuala subskribo sur \"%s\"\n"
-"estas loka subskribo.\n"
-"\n"
-"Æu vi volas igi øin plena eksportebla subskribo?\n"
-
-#: g10/keyedit.c:426
-#, fuzzy
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-"Via aktuala subskribo sur \"%s\"\n"
-"estas loka subskribo.\n"
-"\n"
-"Æu vi volas igi øin plena eksportebla subskribo?\n"
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" jam estis %ssubskribita per þlosilo %08lX\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" jam estis %ssubskribita per þlosilo %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nenio por subskribi per þlosilo %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Æi tiu þlosilo eksvalidiøis!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Æi tiu þlosilo eksvalidiøos je %s.\n"
-
-#: g10/keyedit.c:502
-#, fuzzy
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Æu vi volas, ke via subskribo eksvalidiøu je la sama tempo? (j/n) "
-
-#: g10/keyedit.c:535
-#, fuzzy
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr "eblas subskribi nur per PGP-2.x-stilaj þlosiloj kun --pgp2\n"
-
-#: g10/keyedit.c:537
-#, fuzzy
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "æi tiu mesaøo povas ne esti uzebla de PGP 2.x\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Kiom zorge vi kontrolis, ke la þlosilo, kiun vi subskribos, vere apartenas\n"
-"al la supre nomita persono? Se vi ne scias la respondon, donu \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Mi ne respondas.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Mi tute ne kontrolis.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Mi malzorge kontrolis.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Mi tre zorge kontrolis.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Æu vi estas tute certa, ke vi volas subskribi æi tiun þlosilon\n"
-"per via þlosilo: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "tio povas esti kaýzata de mankanta mem-subskribo\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La subskribo estos markita kiel neeksportebla.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La subskribo estos markita kiel nerevokebla.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La subskribo estos markita kiel neeksportebla.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La subskribo estos markita kiel nerevokebla.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Mi tute ne kontrolis æi tiun þlosilon.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Mi malzorge kontrolis æi tiun þlosilon.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Mi tre zorge kontrolis æi tiun þlosilon.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Æu vere subskribi? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "subskribado malsukcesis: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Æi tiu þlosilo ne estas protektita.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Sekretaj partoj de æefa þlosilo ne estas disponataj.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Þlosilo estas protektita.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Ne povas redakti æi tiun þlosilon: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Donu la novan pasfrazon por æi tiu sekreta þlosilo.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Vi ne deziras pasfrazon - tio verþajne estas *malbona* ideo!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Æu vi vere volas fari tion? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "movas þlosilsubskribon al la øusta loko\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "forlasi æi tiun menuon"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "f"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "skribi"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "skribi kaj fini"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "helpo"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "montri æi tiun helpon"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fsp"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "montri fingrospuron"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "listo"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "listigi þlosilojn kaj uzantidentigilojn"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "elekti uzantidentigilon N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "þlosilo"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "elekti flankan þlosilon N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "kontroli"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "listigi subskribojn"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "k"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "subskribi"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "subskribi la þlosilon"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsub"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "subskribi la þlosilon loke"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsub"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "subskribi la þlosilon nerevokeble"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsub"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "subskribi la þlosilon loke kaj nerevokeble"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "spuri"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "aluid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "aldoni uzantidentigilon"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "alfoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "aldoni foto-identigilon"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "foruid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "forviþi uzantidentigilon"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "forfoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "al"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "aldoni flankan þlosilon"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "for"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "forviþi flankan þlosilon"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "revokita"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "aldoni flankan þlosilon"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "forsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "forviþi subskribojn"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "eksval"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "þanøi la daton de eksvalidiøo"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "æefa"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "marku uzantidentigilon kiel æefan"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "alia"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "de sekreta aý publika listo iri al la alia"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "a"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "listigi preferojn (spertula)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "monpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "listigi preferojn (detale)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "agpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "agordi liston de preferoj"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "aktpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "aktualigitaj preferoj"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "pasf"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "þanøi la pasfrazon"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "fido"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "þanøi la posedantofidon"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revoki subskribojn"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "rev"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revoki flankan þlosilon"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "el"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "malþalti þlosilon"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "en"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "þalti þlosilon"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "monfoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "montri foto-identigilon"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "ne povas fari tion en neinteraga reøimo\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "eraro dum legado de sekreta þlosilbloko '%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Sekreta þlosilo estas havebla.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Komando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Bezonas la sekretan þlosilon por fari tion.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Bonvolu uzi la komandon \"toggle\" unue.\n"
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "Þlosilo estas revokita.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Æu vere subskribi æiujn uzantidentigilojn? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Sugesto: Elekti la uzantidentigilojn por subskribi\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Tiu komando ne eblas en la reøimo %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Vi devas elekti almenaý unu uzantidentigilon.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Vi ne povas forviþi la lastan uzantidentigilon!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Æu vere forigi æiujn elektitajn uzantidentigilojn? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Æu vere forigi æi tiun uzantidentigilon? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Vi devas elekti almenaý unu þlosilon.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Æu vi vere volas forviþi la elektitajn þlosilojn? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Æu vi vere volas forviþi æi tiun þlosilon? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Æu vi vere volas revoki la elektitajn þlosilojn? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Æu vi vere volas revoki æi tiun þlosilon? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Æu vere aktualigi la preferojn por la elektitaj uzantidentigiloj? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Æu vere aktualigi la preferojn? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Æu skribi þanøojn? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Æu fini sen skribi þanøojn? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "aktualigo malsukcesis: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "aktualigo de sekreto malsukcesis: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Þlosilo ne þanøita, do aktualigo ne necesas.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Nevalida komando (provu per \"helpo\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Æi tiu þlosilo estas revokebla per %s þlosilo %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (sentema)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX kreita: %s eksvalidiøos: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " fido: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Æi tiu þlosilo estas malþaltita"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! subþlosilo estas revokita: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- falsita revoko trovita\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problemo en kontrolo de revoko: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"AVERTO: Æi tiu estas PGP2-stila þlosilo. Aldono de foto-identigilo eble\n"
-" kaýzos, ke iuj versioj de PGP malakceptos la þlosilon.\n"
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Æu vi estas certa, ke vi ankoraý volas aldoni øin? (j/n) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Ne eblas aldoni foto-identigilon al PGP2-stila þlosilo.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Æu forviþi æi tiun bonan subskribon? (j/N/f)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Æu forviþi æi tiun nevalidan subskribon? (j/N/f)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Æu forviþi æi tiun nekonatan subskribon? (j/N/f)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Æu vere forviþi æi tiun mem-subskribon? (j/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Forviþis %d subskribon.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Forviþis %d subskribojn.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Nenio estis forviþita.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Donu la þlosilgrandon"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Bonvolu malelekti la sekretajn þlosilojn.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Bonvolu elekti maksimume unu flankan þlosilon.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Þanøas la daton de eksvalidiøo de flanka þlosilo.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Þanøas la daton de eksvalidiøo de la æefa þlosilo.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Vi ne povas þanøi la daton de eksvalidiøo de v3-þlosilo\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Mankas responda subskribo en sekreta þlosilaro\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Bonvolu elekti precize unu uzantidentigilon.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "þlosilo %08lX: nevalida mem-subskribo\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Mankas uzantidentigilo kun indekso %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Mankas flanka þlosilo kun indekso %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "uzantidentigilo: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"subskribita per via þlosilo %08lX je %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"subskribita per via þlosilo %08lX je %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Æi tiu þlosilo eksvalidiøos je %s.\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Æu vi estas certa, ke vi ankoraý volas aldoni øin? (j/n) "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Æu krei revokatestilon por æi tiu subskribo? (j/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Vi subskribis la sekvajn uzantidentigilojn:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " subskribita per %08lX je %s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revokita de %08lX je %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Vi revokos la sekvajn subskribojn:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " subskribita per %08lX je %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Æu vere krei la revokatestilojn? (j/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "mankas sekreta þlosilo\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Subskribo-gvidlinioj: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Subskribo-gvidlinioj: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "AVERTO: nevalida notacia dateno trovita\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Subskribo-notacio: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Subskribo-notacio: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "ne homlegebla"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Þlosilaro"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [eksvalidiøos: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "listigi þlosilojn kaj fingroþpurojn"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Þlosilo-fingrospuro ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Þlosilo-fingrospuro ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Þlosilo-fingrospuro ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Þlosilo-fingrospuro ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "nevalida kompendi-metodo '%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s-æifritaj datenoj\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "æifrita per nekonata metodo %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "publika þlosilo estas %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "publikþlosile æifritaj datenoj: bona DEK\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "æifrita per %u-bita %s-þlosilo, %08lX, kreita je %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "æifrita per %s-þlosilo, %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "publikþlosila malæifrado malsukcesis: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "supozas %s æifritajn datenojn\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "Æifro IDEA ne disponata, optimisme provas uzi %s anstataýe\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "malæifrado sukcesis\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "AVERTO: æifrita mesaøo estis manipulita!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "malæifrado malsukcesis: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTO: sendinto petis konfidencon (\"for-your-eyes-only\")\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "originala dosiernomo='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "memstara revoko - uzu \"gpg --import\" por apliki øin\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notacio: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Gvidlinio: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "kontrolo de subskribo estas malþaltita\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "ne povas trakti æi tiujn pluroblajn subskribojn\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Subskribo farita je %.*s per %s, þlosilo %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "MALBONA subskribo de \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Eksvalidiøinta subskribo de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Bona subskribo de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[malcerta]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alinome \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Ne povas kontroli subskribon: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "ne aparta subskribo\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "memstara subskribo de klaso 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "malnovstila subskribo (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "nevalida radikpaketo trovita en proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "ne povas malþalti kreadon de core-dosieroj: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Eksperimentaj metodoj ne estu uzataj!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr "æi tiu æifrad-metodo estas malrekomendata; bonvolu uzi pli normalan!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "la aldona¼o por la æifro IDEA en æeestas\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"bonvolu vidi http://www.gnupg.org/why-not-idea.html por pliaj informoj\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "AVERTO: '%s' estas malplena dosiero\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "AVERTO: '%s' estas malplena dosiero\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "ne povas trakti publikþlosilan metodon %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "subpaketo de speco %d havas þaltitan \"critical bit\"\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent ne estas disponata en æi tiu sesio\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "ne povas agordi kliento-PID por la agento\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "ne povas akiri lego-FD de servilo por la agento\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "ne povas akiri skribo-FD de servilo por la agento\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "malbona valoro de la media variablo GPG_AGENT_INFO\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "protokolversio %d de gpg-agent ne estas uzebla\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "ne povas konektiøi al '%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "komunikproblemo kun gpg-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problemo kun agento - malþaltas uzadon de agento\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (æefþlosilo %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Vi bezonas pasfrazon por malþlosi la sekretan þlosilon por la uzanto:\n"
-"\"%.*s\"\n"
-"%u-bita %s þlosilo, ID %08lX, kreita je %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Donu pasfrazon\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Ripetu pasfrazon\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "pasfrazo estas tro longa\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "nevalida respondo de agento\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "nuligita de uzanto\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problemo kun agento: agento redonas 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Vi bezonas pasfrazon por malþlosi la sekretan þlosilon\n"
-"por la uzanto: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bita %s-þlosilo, %08lX, kreita je %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "ne povas kontroli pasvorton en neinteraga reøimo\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Donu pasfrazon: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Ripetu pasfrazon: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "datenoj ne savitaj; uzu la opcion \"--output\" por savi ilin\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "eraro dum kreado de '%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Aparta subskribo.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Bonvolu doni la nomon de la dosiero: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "legas la normalan enigon ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "mankas subskribitaj datenoj\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "ne povas malfermi subskribitan dosieron '%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "nenomita ricevonto; provas per sekreta þlosilo %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "bone; ni estas la nenomita ricevonto.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "malnova kodado de DEK ne estas realigita\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "æifrad-metodo %d%s estas nekonata aý malþaltita\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "NOTO: æifrad-metodo %d ne trovita en preferoj\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTO: sekreta þlosilo %08lX eksvalidiøis je %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "þlosilo %08lX: þlosilo estas revokita!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "petas la þlosilon %08lX de HKP-þlosilservilo %s ...\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "ne povas akiri þlosilon de þlosilservilo: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "eraro dum sendo al '%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "sukceso dum sendo al '%s' (statuso=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "malsukceso dum sendo al '%s': statuso=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "seræas pri \"%s\" æe HKP-servilo %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "ne povas seræi æe þlosilservilo: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "sekretaj þlosilpartoj ne estas disponataj\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "protekto-metodo %d%s ne estas realigita\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Nevalida pasfrazo; bonvolu provi denove"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"AVERTO: Malforta þlosilo trovita - bonvolu þanøi la pasfrazon denove.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"æi tio estas PGP-kreita ElGamal-þlosilo, kiu NE estas sekura por "
-"subskribado!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "la publika þlosilo estas %lu sekundon pli nova ol la subskribo\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "la publika þlosilo estas %lu sekundojn pli nova ol la subskribo\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"þlosilo estis kreita %lu sekundon en la estonteco (tempotordo aý "
-"horloøeraro)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"þlosilo estis kreita %lu sekundojn en la estonteco (tempotordo aý "
-"horloøeraro)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTO: subskribo-þlosilo %08lX eksvalidiøis je %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "supozas malbonan subskribon pro nekonata \"critical bit\"\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"AVERTO: ne povas %%-kompletigi gvidlinian URL (tro granda); uzas sen "
-"kompletigo.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"AVERTO: ne povas %%-kompletigi gvidlinian URL (tro granda); uzas sen "
-"kompletigo.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "kontrolo de kreita subskribo malsukcesis: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s-subskribo de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "AVERTO: '%s' estas malplena dosiero\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "eblas subskribi nur per PGP-2.x-stilaj þlosiloj kun --pgp2\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "ne povas krei %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTO: æifrad-metodo %d ne trovita en preferoj\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "subskribas:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"eblas klartekste subskribi nur per PGP-2.x-stilaj þlosiloj kun --pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "%s æifrado estos aplikata\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "ne povas trakti tekstliniojn pli longajn ol %d signojn\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "enigata linio pli longa ol %d signojn\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "fido-datenaro loko %lu: lseek malsukcesis: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "fido-datenaro loko %lu: skribo malsukcesis (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "fido-datenaro-transakcio tro granda\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: ne povas aliri: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: dosierujo ne ekzistas!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: ne povas krei þloson\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: ne povas krei þloson\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: ne povas krei: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: malsukcesis krei versiregistron: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: nevalida fido-datenaro kreita\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: fido-datenaro kreita\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: nevalida fido-datenaro\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: malsukcesis krei haktabelon: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: eraro dum aktualigo de versiregistro: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: eraro dum legado de versiregistro: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: eraro dum skribado de versiregistro: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "fido-datenaro: lseek malsukcesis: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "fido-datenaro: lego malsukcesis (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: ne estas fido-datenaro\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: versiregistro kun registronumero %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: nevalida dosiero-versio %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: eraro dum legado de libera registro: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: eraro dum skribo de dosieruja registro: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: malsukcesis nuligi registron: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: malsukcesis aldoni registron: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "la fido-datenaro estas fuþita; bonvolu ruli \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "'%s' ne estas valida longa þlosilidentigilo\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "þlosilo %08lX: akceptita kiel fidata þlosilo\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "þlosilo %08lX aperas pli ol unufoje en la fido-datenaro\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "þlosilo %08lX: mankas publika þlosilo por fidata þlosilo - ignorita\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "fido-datenaro loko %lu, petospeco %d: lego malsukcesis: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "fido-registro %lu ne havas petitan specon %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "fido-datenaro %lu, speco %d: skribo malsukcesis: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "fido-datenaro: sync malsukcesis: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "kontrolo de fido-datenaro ne estas bezonata\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "sekva kontrolo de fido-datenaro je %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "kontrolas la fido-datenaron\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "publika þlosilo %08lX ne trovita: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "publika þlosilo de absolute fidata þlosilo %08lX ne trovita\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"kontrolas æe profundo %d subskribita=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"ne eblis kontroli la subskribon.\n"
-"Bonvolu memori, ke la subskribodosiero (.sig aý .asc)\n"
-"devas esti la unua dosiero donita en la komandlinio.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "enigata linio %u tro longa, aý mankas linifino\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"þlosilo ne estas markita kiel malsekura - ne povas uzi øin kun falsa "
-"stokastilo!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "ignoris '%s': ripetita\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "ignoris '%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "ignorita: sekreta þlosilo jam æeestas\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"ignoris '%s': æi tio estas PGP-kreita ElGamal-þlosilo, kiu ne estas sekura "
-"por subskribado!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Dosiero '%s' ekzistas. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Æu surskribi (j/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: nekonata sufikso\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Donu novan dosiernomon"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "skribas al la normala eligo\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "supozas subskribitajn datenojn en '%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: nova opcio-dosiero kreita\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: ne povas krei dosierujon: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: dosierujo kreita\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"AVERTO: mesaøo estis æifrita per malforta þlosilo en la simetria æifro.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problemo æe traktado de æifrita paketo\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "malforta þlosilo kreita - provas denove\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"ne povas eviti malfortajn þlosilojn por simetria æifro; provis %d fojojn!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "ne povas fari tion en neinteraga reøimo sen \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Æu forviþi æi tiun þlosilon de la þlosilaro? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Tio estas sekreta þlosilo! Æu vere forviþi øin? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "forviþo de þlosilbloko malsukcesis: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "estas sekreta þlosilo por la publika þlosilo \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "uzu la opcion \"--delete-secret-key\" por forviþi øin unue.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Vi devas mem doni valoron æi tie; la valoro neniam estos eksportita\n"
-"al alia persono. Ni bezonas øin por realigi la fido-reton; øi neniel\n"
-"rilatas al la (implicite kreita) atestilo-reto."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Por konstrui la fido-reton, GnuPG devas scii, kiuj þlosiloj estas\n"
-"absolute fidataj; normale tiuj estas la þlosiloj, por kiuj vi havas\n"
-"aliron al la sekreta þlosilo. Respondu \"jes\" por igi æi tiun þlosilon\n"
-"absolute fidata\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr ""
-"Se vi tamen volas uzi æi tiun revokitan þlosilon, respondu per \"jes\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Se vi tamen volas uzi æi tiun nefidatan þlosilon, respondu per \"jes\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr ""
-"Donu la uzantidentigilon de la adresito, al kiu vi volas sendi la mesaøon."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Elektu la uzotan metodon.\n"
-"\n"
-"DSA (alinome DSS) estas la subskrib-metodo uzebla nur por subskribado.\n"
-"Æi tio estas la rekomendata metodo, æar kontrolado æe DSA-subskriboj\n"
-"estas multe pli rapida ol æe ElGamal.\n"
-"\n"
-"ElGamal estas metodo uzebla kaj por subskribado kaj por æifrado.\n"
-"OpenPGP distingas inter du specoj de æi tiu metodo: nuræifra, kaj\n"
-"subskriba-kaj-æifra; efektive temas pri la sama, sed iuj parametroj\n"
-"devas esti elektitaj en speciala maniero por krei sekuran þlosilon\n"
-"por subskribado: æi tiu programo faras tion, sed aliaj OpenPGP-\n"
-"programoj ne devas kompreni la subskriban-kaj-æifran specon.\n"
-"\n"
-"La unua (æefa) þlosilo devas esti þlosilo uzebla por subskribado;\n"
-"tial la nuræifra ElGamal-þlosilo ne estas proponata en æi tiu menuo."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Kvankam æi tiuj þlosiloj estas difinitaj en RFC 2440, ili ne estas\n"
-"rekomendataj, æar ili ne estas komprenataj de æiuj programoj, kaj\n"
-"subskriboj kreitaj per ili etas iom grandaj kaj malrapide kontroleblaj."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Donu la þlosilgrandon"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Respondu per \"jes\" aý \"ne\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Donu la bezonatan valoron, kiel montrite en la invito.\n"
-"Eblas doni ISO-forman daton (JJJJ-MM-TT), sed vi ne ricevos\n"
-"bonan eraromesaøon; anstataýe la sistemo provas interpreti\n"
-"la donitan valoron kiel gamon."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Donu la nomon de la þlosilposedanto"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "bonvolu doni retadreson (ne devige, sed tre rekomendate)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Bonvolu doni nedevigan komenton"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N por þanøi la nomon.\n"
-"K por þanøi la komenton.\n"
-"A por þanøi la retadreson.\n"
-"B por daýrigi kun la þlosilkreado.\n"
-"F por interrompi la þlosilkreadon kaj fini."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Respondu per \"jes\" (aý nur \"j\"), se la subþlosilo estu kreita."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Kiam vi subskribas uzantidentigilon sur þlosilo, vi devas unue kontroli,\n"
-"ke la þlosilo apartenas al la persono nomita en la identigilo. Estas\n"
-"utile por aliaj homoj scii, kiom zorge vi kontrolis tion.\n"
-"\n"
-"\"0\" signifas, ke vi faras nenian specifan aserton pri tio, kiel zorge vi\n"
-" kontrolis la þlosilon.\n"
-"\n"
-"\"1\" signifas, ke vi kredas, ke la þlosilo apartenas al la homo, kiu\n"
-" pretendas posedi øin, sed vi ne povis kontroli, aý simple ne\n"
-" kontrolis la þlosilon. Tio estas utila, kiam oni subskribas la\n"
-" þlosilon de pseýdonoma uzanto.\n"
-"\n"
-"\"2\" signifas, ke vi malzorge kontrolis la þlosilon. Ekzemple, povas esti,\n"
-" ke vi kontrolis la fingroþpuron de la þlosilo kaj komparis la\n"
-" uzantidentigilon sur la þlosilo kun foto-identigilo.\n"
-"\n"
-"\"3\" signifas, ke vi zorge kontrolis la þlosilon. Ekzemple, povas esti,\n"
-" ke vi kontrolis la fingroþpuron persone æe la posedanto de la\n"
-" þlosilo, kaj vi kontrolis, per malfacile falsebla dokumento kun\n"
-" foto-identigilo (ekzemple pasporto), ke la nomo de þlosilposedanto\n"
-" kongruas kun la nomo en la uzantidentigilo sur la þlosilo, kaj fine\n"
-" vi kontrolis (per interþanøo de retmesaøoj), ke la retadreso sur\n"
-" la þlosilo apartenas al la posedanto de la þlosilo.\n"
-"\n"
-"Notu, ke la ekzemploj donitaj supre por la niveloj 2 kaj 3 estas nur\n"
-"ekzemploj. Vi devas fine mem decidi, kion precize signifas \"malzorga\"\n"
-"kaj \"zorga\", kiam vi subskribas aliajn þlosilojn.\n"
-"\n"
-"Se vi ne scias la øustan respondon, respondu per \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Respondu per \"jes\", se vi volas subskribi æiujn uzantidentigilojn"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Respondu per \"jes\", se vi vere volas forviþi la uzantidentigilon.\n"
-"Tiam ankaý æiuj atestiloj perdiøos!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Respondu per \"jes\", se la subþlosilo estu forviþita"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Æi tio estas valida þlosilsubskribo; normale vi ne volas forviþi\n"
-"æi tiun subskribon, æar eble øi estos grava por establi fido-ligon\n"
-"al la þlosilo aý al alia þlosilo atestita per æi tiu þlosilo."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"La subskribo ne estas kontrolebla, æar vi ne havas la respondan\n"
-"þlosilon. Vi devus prokrasti øian forviþon, øis vi scios, kiu\n"
-"þlosilo estis uzita, æar la subskribanta þlosilo eble establos\n"
-"fido-ligon tra alia jam atestita þlosilo."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"La subskribo ne estas valida. Estas prudente forigi øin de\n"
-"via þlosilaro."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Æi tio estas subskribo, kiu ligas la uzantidentigilon al la þlosilo.\n"
-"Normale ne estas konsilinde forigi tian subskribon. Efektive, GnuPG\n"
-"eble ne povus uzi la þlosilon poste. Do, faru æi tion, nur se la\n"
-"mem-subskribo estas ial nevalida, kaj dua mem-subskribo estas\n"
-"havebla."
-
-#: g10/helptext.c:237
-#, fuzzy
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Þanøi la preferojn de æiuj uzantidentigiloj (aý nur la elektitaj)\n"
-"al la aktuala listo de preferoj. La dato de æiuj trafitaj\n"
-"mem-subskriboj estos antaýenigitaj je unu sekundo.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Bonvolu doni la pasfrazon; tio estas sekreta frazo \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Bonvolu ripeti la pasfrazon, por kontroli, ke vi bone scias, kion vi tajpis."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Donu la nomon de la dosiero, al kiu la subskribo aplikiøas"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Respondu per \"jes\", se la dosiero estu surskribita"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Bonvolu doni novan dosiernomon. Se vi premas nur ENEN, la implicita\n"
-"dosiero (montrita en parentezo) estos uzata."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Vi devus doni kialon por æi tiu atestilo. Depende de la kunteksto, vi\n"
-"povas elekti el æi tiu listo:\n"
-" \"Þlosilo estas kompromitita\"\n"
-" Uzu æi tion, se vi pensas, ke nerajtigita homo havis aliron al\n"
-" via sekreta þlosilo.\n"
-" \"Þlosilo estas anstataýigita\"\n"
-" Uzu æi tion, se vi anstataýigis la þlosilon per pli nova.\n"
-" \"Þlosilo estas ne plu uzata\"\n"
-" Uzu æi tion, se vi retiris æi tiun þlosilon.\n"
-" \"Uzantidentigilo ne plu validas\"\n"
-" Uzu æi tion por aserti, ke la uzantidentigilo ne plu estu uzata;\n"
-" normale oni uzas æi tion por marki retadreson kiel nevalidan.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Se vi volas, vi povas doni tekston por priskribi, kial vi faras\n"
-"æi tiun revokatestilon. Bonvolu fari æi tiun tekston konciza.\n"
-"Malplena linio finas la tekston.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Nenia helpo disponata"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Nenia helpo disponata por '%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "eraro dum kreado de þlosilaro '%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "þlosilaro '%s' kreita\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "malsukcesis rekonstrui þlosilaran staplon: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "AVERTO: ekzistas 2 dosieroj kun sekretaj informoj.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s estas la neþanøita\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s estas la nova\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Bonvolu ripari æi tiun eblan sekurecproblemon\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "kontrolas þlosilaron '%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu þlosiloj jam kontrolitaj (%lu subskriboj)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu þlosiloj kontrolitaj (%lu subskriboj)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: þlosilaro kreita\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "vi devas restartigi GnuPG, por ke øi povu legi la novan opcio-dosieron\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "þanøo de permesoj de '%s' malsukcesis: %s\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Fingrospuro:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Fingrospuro:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOMO=VALORO|uzi æi tiun notacian datenon"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "la unua signo de notacia nomo devas esti litero aý substreko\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "punktoj en notacia nomo devas esti inter aliaj signoj\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "AVERTO: Æi tiu þlosilo jam havas foto-identigilon.\n"
-#~ " Aldono de alia foto-identigilo eble konfuzos iujn versiojn de "
-#~ "PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Eblas havi nur unu foto-identigilon sur þlosilo.\n"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Æu vi vere bezonas tiom grandan þlosilgrandon? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "þlosilo %08lX: nia kopio ne havas mem-subskribon\n"
-
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr " Æu vi estas certa, ke vi ankoraý volas subskribi øin?\n"
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " subskribita per %08lX je %s\n"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key uzantidentigilo"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key uzantidentigilo"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Donu la uzantidentigilon: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "ignorita: publika þlosilo jam difinita per --encrypt-to\n"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "iImMfF"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "neniu þlosilservilo konata (uzu la opcion --keyserver)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: ne valida þlosilidentigilo\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NOMOJ]|kontroli la fido-datenaron"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Ne povis trovi validan fidovojon al la þlosilo. Ni vidu, æu eblas\n"
-#~ "atribui iujn mankantajn posedantofido-valorojn.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Nenia vojo trovita, kiu kondukas al unu el niaj þlosiloj.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Neniom da atestiloj trovitaj kun nedifinita fidovaloro.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Neniuj fidovaloroj þanøitaj.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr "%08lX: mankas informoj por kalkuli fidovaloron\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: eraro dum kontrolo de þlosilo: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "tro da registroj en unk-staplo - malþaltas\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "aktualigo de fido-datenaro malsukcesis: %s\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "supozas malbonan sigelon (MDC) pro nekonata \"critical bit\"\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "eraro dum legado de dosieruja registro por LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: atendis dosierujan registron, trovis specon %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "mankas æefa þlosilo por LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "eraro dum legado de æefa þlosilo por LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record malsukcesis: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "þlosilo %08lX: peto-registro malsukcesis\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "þlosilo %08lX: jam en tabelo de fidataj þlosiloj\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "NOTO: sekreta þlosilo %08lX NE estas protektita.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "þlosilo %08lX: sekreta kaj publika þlosiloj ne kongruas\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "listigo de sekretaj þlosiloj malsukcesis: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "þlosilo %08lX.%lu: Bona subþlosila bindado\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "þlosilo %08lX.%lu: Nevalida subþlosila bindado: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "þlosilo %08lX.%lu: Valida þlosilrevoko\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "þlosilo %08lX.%lu: Nevalida þlosilrevoko: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Bona mem-subskribo"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Nevalida mem-subskribo"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr "Valida uzantidentigil-revoko ignorita pro pli nova mem-subskribo"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Valida uzantidentigil-revoko"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Nevalida uzantidentigil-revoko"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Valida atestilrevoko"
-
-#~ msgid "Good certificate"
-#~ msgstr "Bona atestilo"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Nevalida atestilrevoko"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Nevalida atestilo"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "subskribo-registro %lu[%d] montras al maløusta registro.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "ripetita atestilo - forviþita"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir malsukcesis: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: enþovo malsukcesis: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: enþovo malsukcesis: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: enþovita\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "eraro dum legado de dosieruja registro: %s\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu þlosiloj enþovitaj\n"
-
-#~ msgid "enumerate keyblocks failed: %s\n"
-#~ msgstr "listigo de þlosilblokoj malsukcesis: %s\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: dosieruja registro sen þlosilo - ignorita\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\t%lu pro novaj publikaj þlosiloj\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu þlosiloj ignoritaj\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu þlosiloj aktualigitaj\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Hu, mankas þlosiloj\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Hu, mankas uzantidentigiloj\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: seræo pri dosieruja registro malsukcesis: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "þlosilo %08lX: enþovo de fidoregistro malsukcesis: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "þlosilo %08lX.%lu: enþovis en fido-datenaron\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "þlosilo %08lX.%lu: kreita en la estonteco (tempotordo aý horloøeraro)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "þlosilo %08lX.%lu: eksvalidiøis je %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "þlosilo %08lX.%lu: fido-kontrolo malsukcesis: %s\n"
-
-#~ msgid "user '%s' not found: %s\n"
-#~ msgstr "uzanto '%s' ne trovita: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "problemo dum trovo de '%s' en fido-datenaro: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr "uzanto '%s' ne estas en fido-datenaro - enþovas\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "malsukcesis meti '%s' en fido-datenaron: %s\n"
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "tro da stokastaj bitoj petitaj; la limo estas %d\n"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "Por informoj vidu http://www.gnupg.org"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "Æu vi vere volas krei subskriban kaj æifran þlosilon? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: uzanto ne trovita: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "problemo æe legado de atestilo: %s\n"
-
-#~ msgid "can't lock keyring `%s': %s\n"
-#~ msgstr "ne povas þlosi la þlosilaron '%s': %s\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: uzanto ne trovita\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr "AVERTO: ne povas trakti longajn preferoregistrojn\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: ne povas krei þlosilaron: %s\n"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "RSA-þlosilo ne estas uzebla kun æi tiu versio\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Mankas þlosilo por uzantidentigilo\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Mankas uzantidentigilo por þlosilo\n"
-
-#~ msgid "invalid"
-#~ msgstr "nevalida"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "mankas sekreta þlosilo por malæifrado\n"
diff --git a/po/es.po b/po/es.po
deleted file mode 100644
index 3494296fe..000000000
--- a/po/es.po
+++ /dev/null
@@ -1,5228 +0,0 @@
-# Mensajes en español para GnuPG.
-# Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
-# Urko Lusa <ulusa@euskalnet.net>, 1998, 1999.
-# I've tried to mantain the terminology used by Armando Ramos
-# <armando@clerval.org> in his PGP 2.3.6i translation.
-# I also got inspiration from it.po by Marco d'Itri <md@linux.it>
-# Jaime Suárez <jsuarez@ono.com>, 2001, 2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: GNU gnupg 1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-05-01 00:33+0200\n"
-"Last-Translator: Jaime Suárez <jsuarez@ono.com>\n"
-"Language-Team: Spanish <es@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "ATENCIÓN: ¡se está usando memoria insegura!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "por favor, vea http://www.gnupg.org/faq.html para más información\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "operación imposible sin memoria segura inicializada\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(es posible que haya usado el programa incorrecto para esta tarea)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "sí"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "sS"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "no"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "salir"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "sS"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "Error general"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "Formato desconocido"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "Versión desconocida"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "Algoritmo de clave pública desconocido"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "Algoritmo desconocido de resumen de mensaje"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "Clave pública incorrecta"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "Clave secreta incorrecta"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "Firma incorrecta"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "Error en la suma de comprobación"
-
-# ¿Por qué no frase de paso?
-# Porque todo el mundo sabe lo que es una contraseña
-# y una "frase de paso" no. Soy consciente de que se
-# traduce igual password y passphrase pero el contexto
-# permite saber de lo que se está hablando.
-# No sé, no sé.
-# ¿Por qué los ingleses entonces sí que saben lo que es un "passphrase"?
-# ¿Es que son más listos? :-)
-#
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "Contraseña incorrecta"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "Clave pública no encontrada"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "Algoritmo de cifrado desconocido"
-
-# ¿y llavero?
-# Hombre... las claves son parecidas a las llaves pero no lo mismo
-# toda la literatura en castellano usa "anillos de claves" si un
-# programa nos habla del llavero ¿no puedo abrir el llavero? nos
-# miraremos en el bolsillo bastante desconcertados. No creo que se
-# trate de establecer una nomenclatura propia.
-# A lo mejor toda esa literatura está producida por gente que no sabía
-# cómo se dice llavero en inglés...
-# Si los ingleses dicen llavero en su idioma ¿por qué no vamos a poder
-# nosotros decir lo mismo en el nuestro?
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "No se puede abrir el anillo de claves"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "paquete inválido"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armadura inválida"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "no existe el ID de usuario"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "clave secreta no disponible"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "clave secreta incorrecta"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "no disponible"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "clave incorrecta"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "error de lectura"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "error de escritura"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritmo de compresión desconocido"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "error al abrir fichero"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "error al crear fichero"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "contraseña incorrecta"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmo de clave pública no implementado"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritmo de cifrado no implementado"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "clase de firma desconocida"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "error en la base de datos de confianza"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI incorrecto"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "límite de recurso"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "anillo inválido"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "certificado incorrecto"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "ID de usuario mal formado"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "error al cerrar fichero"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "error al renombrar fichero"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "error al borrar fichero"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "datos inesperados"
-
-# o tal vez "en el sello..."
-# Creo que es mejor "con el sello de fecha", no es un conflicto
-# del sello en si mismo sino en relación con el mensaje.
-# Ok.
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "conflicto con el sello de fecha"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritmo de clave pública no utilizable"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "el fichero existe"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "clave débil"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argumento inválido"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI incorrecto"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI no disponible"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "error de red"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "no cifrado"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "no procesado"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "clave pública inutilizable"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "clave secreta inutilizable"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "error del servidor de claves"
-
-# bicho :-)
-# ¿Error simplemente?
-# Uf, preferiría bug, si leo "error" voy a pensar en otra cosa distinta...
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... esto es un bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "ha encontrado un error... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "no se puede abrir `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "no se puede obtener información de `%s': %s\n"
-
-# ignore no es ignorar, es no tener en cuenta, ignorar es not to know.
-# Sugerencia: descartar.
-# Sugerencia a la sugerencia: ¿qué tal omitido? (pasar en silencio una
-# cosa; excluirla de lo que se habla o escribe) dice el diccionario.
-# Bien. También se puede poner "descartado".
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s` no es un fichero regular - omitido\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "nota: el fichero de semillas aleatorias está vacío\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"atención: tamaño incorrecto del fichero de semillas aleatorias - no se usa\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "no se puede leer `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "nota: el fichero de semillas aleatorias no se ha actualizado\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "no se puede crear %s: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "no se puede escribir `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "no se puede cerrar `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "ATENCIÓN: ¡usando un generador de números aleatorios inseguro!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"El generador de números aleatorios es sólo un apaño\n"
-"para poder compilar. ¡No es en absoluto un generador seguro!\n"
-"\n"
-"¡NO USE DATOS GENERADOS POR ESTE PROGRAMA!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"No hay suficientes bytes aleatorios disponibles. Por favor, haga algún\n"
-"otro trabajo para que el sistema pueda recolectar más entropía\n"
-"(se necesitan %d bytes más).\n"
-
-# Órdenes, please...
-# Sí, este no he podido ser yo :-) Por cierto, ¿por qué la O no se
-# puede acentuar? ¿demasiado alta?
-# ¿Quién dice que no se puede? :-)
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Órdenes:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[file]|crea una firma"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[file]|crea una firma en texto claro"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "crea una firma separada"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "cifra datos"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[ficheros]|cifra ficheros"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "cifra sólo con un cifrado simétrico"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "sólo almacenar"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "descifra datos (predefinido)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[ficheros]|descifra ficheros"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verifica una firma"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "lista claves"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "lista claves y firmas"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "comprueba las firmas de las claves"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "lista claves y huellas dactilares"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "lista claves secretas"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "genera un nuevo par de claves"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "elimina claves del anillo público"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "elimina claves del anillo privado"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "firma la clave"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "firma la clave localmente"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "firma la clave no revocablemente"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "firma la clave localmente y no revocablemente"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "firma o modifica una clave"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "genera un certificado de revocación"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exporta claves"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exporta claves a un servidor de claves"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importa claves desde un servidor de claves"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "busca claves en un servidor de claves"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "actualiza claves desde un servidor de claves"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importa/fusiona claves"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "lista sólo la secuencia de paquetes"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exporta los valores de confianza"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importa los valores de confianza"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "actualiza la base de datos de confianza"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "actualiza la base de datos de confianza"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "arregla una base de datos de confianza dañada"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "quita la armadura de un fichero o de la entrada estándar"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "crea la armadura a un fichero o a la entrada estándar"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [ficheros]|imprime resúmenes de mensaje"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opciones:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "crea una salida ascii con armadura"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOMBRE|cifra para NOMBRE"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOMBRE|usa NOMBRE como destinatario por defecto"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "usa la clave por defecto como destinatario"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "usa este usuario para firmar o descifrar"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|nivel de compresión N (0 no comprime)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "usa modo de texto canónico"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "usa como fichero de salida"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "prolijo"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "algo más discreto"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "no usa la terminal en absoluto"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "fuerza firmas v3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "no fuerza firmas v3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "fuerza firmas v4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "no fuerza firmas v4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "siempre usa un MDC para cifrar"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "nunca usa un MDC para cifrar"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "no hace ningún cambio"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-# usa
-# Vale.
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "usa el agente gpg"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "proceso por lotes: nunca preguntar"
-
-# assume -> suponer, no asumir
-# No estoy seguro. El diccionario Collins en la acepción b) de asumir
-# dice "b) (suponer) to assume, suppose..."
-# Además una de las acepciones de asumir es "aceptar algo" y suponer
-# viene a ser asumir una idea como propia. Suponer "sí" en casi todas las
-# preguntas no me acaba de gustar.
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "asume \"sí\" en casi todas las preguntas"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "asume \"no\" en casi todas las preguntas"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "añade este anillo a la lista de anillos"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "añade este anillo secreto a la lista"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "muestra en qué anillos está una clave"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|SERVIDOR|usa este servidor de claves"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NOMBRE|usa el juego de caracteres NOMBRE"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "lee opciones del fichero"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|DF|escribe información de estado en este descriptor de fichero"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[fichero]|escribe información de estado en el fichero"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|ID-CLAVE|confía plenamente en esta clave"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FICHERO|carga módulo de extensiones FICHERO"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emula el modo descrito en la RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "todas las opciones de paquete, cifrado y resumen tipo OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "todas las opciones de paquete, cifrado y resumen tipo PGP 2.x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|usa modo de contraseña N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr ""
-"|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE para las contraseñas"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE para las contraseñas"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|usa el algoritmo de compresión N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "elimina campo keyid de los paquetes cifrados"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Muestra IDs fotográficos"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "No muestra IDs fotográficos"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Ajusta linea de comandos para ver IDs fotográficos"
-
-# ordenes -> órdenes
-# página man -> página de manual
-# Vale. ¿del manual mejor?
-# Hmm, no sé, en man-db se usa "de". La verdad es que no lo he pensado.
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Véase en la página del manual la lista completo de órdenes y opciones)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Ejemplos:\n"
-"\n"
-" -se -r Bob [fichero] firma y cifra para el usuario Bob\n"
-" --clearsign [fichero] hace una firma manteniendo el texto sin cifrar\n"
-" --detach-sign [fichero] hace una firma separada\n"
-" --list-keys [nombres] muestra las claves\n"
-" --fingerprint [nombres] muestra las huellas dactilares\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Por favor, informe de posibles \"bugs\" a <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Uso: gpg [opciones] [ficheros] (-h para ayuda)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintaxis: gpg [opciones] [ficheros]\n"
-"firma, comprueba, cifra o descifra\n"
-"la operación por defecto depende del tipo de datos de entrada.\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritmos disponibles:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "uso: gpg [opciones] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "órdenes incompatibles\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Aviso: propiedad insegura de %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Aviso: permisos inseguros de %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Aviso: propiedad insegura de %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Aviso: permisos inseguros de %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTA: no existe el fichero de opciones predefinido `%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTA: no existe el fichero de opciones predefinido `%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "fichero de opciones `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "leyendo opciones desde `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s no es un juego de caracteres válido\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "no se puede interpretar la URI del servidor de claves\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: versión del fichero %d inválida\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armadura inválida"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: versión del fichero %d inválida\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "anillo inválido"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "imposible establecer camino de ejecutables %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "ATENCIÓN: ¡el programa podría volcar un fichero core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "AVISO: %s sustituye a %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTA: ¡%s no es para uso normal!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "¡%s no permitido con %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "¡%s no tiene sentido con %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "sólo puede hacer firmas separadas o en claro en modo --pgp2\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "no puede firmar y cifrar a la vez en modo --pgp2\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "debe usar ficheros (no tuberías) si trabaja con --pgp2 activo.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "cifrar un mensaje en modo --pgp2 requiere el algoritmo IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "este mensaje podría no ser utilizable por PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "el algoritmo de cifrado seleccionado es inválido\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "el algoritmo de resumen seleccionado no inválido\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "el algoritmo de resumen seleccionado no inválido\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "el algoritmo de compresión debe estar en el rango %d-%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed debe ser mayor que 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed debe ser mayor que 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth debe estar en el rango 1-255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: el modo S2K simple (0) no es nada recomendable\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "modo S2K incorrecto; debe ser 0, 1 o 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "nivel de comprobación por defecto inválido; debe ser 0, 1, 2, ó 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "preferencias inválidas\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "preferencias inválidas\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "preferencias inválidas\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "preferencias inválidas\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "inicialización de la base de datos de confianza fallida: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [nombre_fichero]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [nombre_fichero]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [nombre_fichero]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [nombre_fichero]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [nombre_fichero]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [nombre_fichero]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [nombre_fichero]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [nombre_fichero]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key id-usuario"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key id-usuario"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key id-usuario"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key id-usuario"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id-usuario [órdenes]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "no se puede abrir `%s': %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [id-usuario] [anillo]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "eliminación de armadura fallida: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "creación de armadura fallida: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algoritmo de distribución inválido `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nombre_fichero]"
-
-# Falta un espacio.
-# En español no se deja espacio antes de los puntos suspensivos
-# (Real Academia dixit) :)
-# Tomo nota :-). Este comentario déjalo siempre.
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Adelante, teclee su mensaje...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "no se puede abrir `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"un nombre de notación debe tener sólo letras, dígitos, puntos o subrayados, "
-"y acabar con un '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "un valor de notación no debe usar ningún caracter de control\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "URL de política de certificado inválida\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "URL de política inválida\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armadura: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "cabecera de armadura inválida: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "cabecera de armadura: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "cabecera de firma clara inválida\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "firmas en texto claro anidadas\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "Línea con guiones inválida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armadura inesperada"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "caracteres inválidos radix64 %02x omitidos\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "Fin de fichero prematuro (falta suma de comprobación)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "Fin de suma de comprobación prematuro\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "Suma de comprobación mal creada\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "Error en suma de comprobación: %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "fin de fichero prematuro (en el cierre)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "error en la línea de cierre\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "no se han encontrados datos OpenPGP válidos\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armadura incorrecta: línea más larga de %d caracteres\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"caracter \"quoted printable\" en la armadura - probablemente se usó\n"
-"un MTA defectuoso\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "No se dio ninguna razón"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "La clave ha sido reemplazada."
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "La clave ha sido comprometida"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "La clave ya no está en uso"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "El identificador de usuario ya no es válido"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Razón para la revocación: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Comentario a la revocación: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"No hay confianza definida para:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Por favor, decida su nivel de confianza para que este usuario\n"
-"verifique las claves de otros usuarios (mirando pasaportes,\n"
-"comprobando huellas dactilares en diferentes fuentes...)\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = No lo sé\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr "%d = No confío\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Confío poco\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Confío totalmente\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = confío por completo\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = por favor muéstreme más información\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = volver al menú principal\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = saltar esta clave\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = salir\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Su decisión: "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "¿De verdad quiere asignar total confianza a esta clave? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificados que llevan a una clave de confianza absoluta:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "clave %08lX: ¡esta clave ha sido revocada!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "¿Usar esta clave de todas formas? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "clave %08lX: ¡esta subclave ha sido revocada!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: clave caducada\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: No hay indicios de que la firma pertenezca realmente al propietario.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: ¡Esta clave NO es de confianza!\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: No hay seguridad que esta clave pertenezca realmente a su \n"
-"proprietario pero se acepta igualmente\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Esta clave probablemente pertenece a su proprietario\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Esta clave nos pertenece\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"No es seguro que la clave pertenezca a su propietario.\n"
-"Si *realmente* sabe lo que está haciendo, puede contestar\n"
-"\"sí\" a la siguiente pregunta.\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "ATENCIÓN: ¡Usando una clave no fiable!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "ATENCIÓN: ¡Esta clave ha sido revocada por su propietario!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Esto puede significar que la firma está falsificada.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "ATENCIÓN: ¡Esta clave ha sido revocada por su propietario!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Nota: Esta clave está deshabilitada.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Nota: ¡Esta clave ha caducado!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr ""
-"ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " No hay indicios de que la firma pertenezca al propietario.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "ATENCIÓN: ¡Esta clave NO es de confianza!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " La firma es probablemente una FALSIFICACIÓN.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"ATENCIÓN: ¡Esta clave no está certificada con firmas de "
-"suficienteconfianza!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " No es seguro que la firma pertenezca al propietario.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: omitido: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: omitida: clave pública ya presente\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "No ha especificado un ID de usuario (puede usar \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Introduzca ID de usuario. Acabe con una línea vacía: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "ID de usuario inexistente.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "omitida: clave pública ya designada como destinataria por defecto\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Clave pública deshabilitada.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "omitida: clave pública ya establecida\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "desconocido el destinatario predefinido `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: omitida: clave pública deshabilitada\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "no hay direcciones válidas\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "la preferencia %c%lu no es válida\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "preferencia %c%lu duplicada\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "demasiadas `%c' preferencias\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "caracter inválido en cadena de preferencias\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "escribiendo autofirma\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "escribiendo autofirma\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "escribiendo la firma de comprobación de clave\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "tamaño de clave incorrecto; se usarán %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "tamaño de clave redondeado a %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Por favor seleccione tipo de clave deseado:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA y ElGamal (por defecto)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (sólo firmar)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (sólo cifrar)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (firmar y cifrar)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (sólo firmar)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (sólo cifrar)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (firmar y cifrar)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Su elección: "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "El uso de este algoritmo está desaconsejado - ¿crear de todas formas?"
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Elección inválida.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Listo para generar un nuevo par de claves %s.\n"
-" el tamaño mínimo es 768 bits\n"
-" el tamaño por defecto es 1024 bits\n"
-" el tamaño máximo recomendado es 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "¿De qué tamaño quiere la clave (1024)? "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA sólo permite tamaños desde 512 a 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "tamaño de clave insuficiente; 1024 es el mínimo permitido para RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "tamaño insuficiente; 768 es el valor mínimo permitido\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "tamaño excesivo; %d es el máximo valor permitido.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"No se recomiendan claves de más de 2048 bits porque\n"
-"¡el tiempo de cálculo es REALMENTE largo!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "¿Seguro que quiere una clave de este tamaño? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"De acuerdo, ¡pero tenga en cuenta que las radiaciones de su monitor y\n"
-"teclado también son vulnerables a un ataque!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "El tamaño requerido es de %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "redondeados a %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Por favor, especifique el período de validez de la clave.\n"
-" 0 = la clave nunca caduca\n"
-" <n> = la clave caduca en n días\n"
-" <n>w = la clave caduca en n semanas\n"
-" <n>m = la clave caduca en n meses\n"
-" <n>y = la clave caduca en n años\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Por favor, especifique el período de validez de la clave.\n"
-" 0 = la clave nunca caduca\n"
-" <n> = la clave caduca en n días\n"
-" <n>w = la clave caduca en n semanas\n"
-" <n>m = la clave caduca en n meses\n"
-" <n>y = la clave caduca en n años\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "¿Validez de la clave (0)? "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Clave válida ¿durante (0)? "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valor inválido\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s nunca caduca\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s caduca el %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Su sistema no puede mostrar fechas más allá del 2038.\n"
-"Sin embargo funcionará correctamente hasta el 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "¿Es correcto (s/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Necesita un identificador de usuario para identificar su clave. El programa\n"
-"construye el identificador a partir del Nombre Real, Comentario y Dirección\n"
-"de Correo Electrónico de esta forma:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nombre y apellidos: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Caracter inválido en el nombre\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "El nombre no puede empezar con un número\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "El nombre debe tener al menos 5 caracteres\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Dirección de correo electrónico: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Dirección inválida\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Comentario: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Caracter inválido en el comentario\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Está usando el juego de caracteres `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Ha seleccionado este ID de usuario:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-"Por favor no ponga la dirección de correo-e en el nombre real o en el "
-"comentario\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcDdVvSs"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "¿Cambia (N)ombre, (C)omentario, (D)irección o (S)alir? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Por favor corrija primero el error.\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Necesita una contraseña para proteger su clave secreta.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "contraseña repetida incorrectamente; inténtelo de nuevo"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"No ha especificado contraseña. Esto es probablemente una *mala* idea.\n"
-"Si más tarde quiere añadir una, puede hacerlo usando este programa con\n"
-"la opción \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Es necesario generar muchos bytes aleatorios. Es una buena idea realizar\n"
-"alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar\n"
-"la red y los discos) durante la generación de números primos. Esto da al\n"
-"generador de números aleatorios mayor oportunidad de recoger suficiente\n"
-"entropía.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "El par de claves DSA tendrá 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Creación de claves cancelada.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "escribiendo clave pública en `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "escribiendo clave privada en `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "anillo público de claves no escribible encontrado: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "anillo privado de claves no escribible encontrado: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "error escribiendo anillo público `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "error escribiendo anillo privado `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "claves pública y secreta creadas y firmadas.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "clave marcada como de confianza absoluta.\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Tenga en cuenta que esta clave no puede ser usada para cifrado. Puede usar\n"
-"la orden \"--edit-key\" para crear una clave secundaria con este propósito.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Creación de la clave fallida: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"clave pública creada %lu segundos en el futuro (salto en el tiempo o\n"
-"problemas con el reloj)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"clave pública creada %lu segundos en el futuro (salto en el tiempo o\n"
-"problemas con el reloj)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NOTA: crear subclaves para claves V3 no sigue el estándar OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "¿Crear de verdad? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output no funciona con esta orden\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: no se puede abrir: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "error creando contraseña: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' ya está comprimido\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ATENCIÓN: fichero vacío\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr "solo puede cifrar a claves RSA de 2048 bits o menos en modo --pgp2\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "leyendo desde `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"no se puede usar el algoritmo IDEA para todas las claves a las que cifra.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: algoritmo de cifrado %d no encontrado en las preferencias\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Esta orden no se permite en modo %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s cifrado para: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "clave '%s' no encontrada: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "error leyendo bloque de claves: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "clave %08lX: no es conforme a rfc2440 - omitida\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "clave %08lX: no protegida - omitida\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "clave %08lX: clave estilo PGP 2.x - omitida\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "ATENCIÓN: no se ha exportado nada\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "demasiados registros en la cache pk - anulada\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Identificador de usuario no encontrado]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr "Clave %08lX inválida hecha mediante --allow-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "usando clave secundaria %08lX en vez de clave primaria %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "clave %08lX: clave secreta sin clave pública - omitida\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "omitiendo bloque de tipo %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "hasta ahora se han procesado %lu claves\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "error leyendo `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Cantidad total procesada: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " omitidas nuevas claves: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sin identificador: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importadas: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " sin cambios: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nuevos identificativos: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nuevas subclaves: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nuevas firmas: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " nuevas revocaciones de claves: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " claves secretas leídas: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " claves secretas importadas: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "claves secretas sin cambios: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importadas: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "clave %08lX: sin identificador de usuario\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "clave %08lX: no hay subclave que unir\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "clave %08lX: aceptado ID de usuario sin autofirma '%s'\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "clave %08lX: sin identificadores de usuario válidos\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "esto puede ser debido a la ausencia de autofirma\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "clave %08lX: clave pública no encontrada: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "clave %08lX: clave nueva - omitida\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "anillo de claves no escribible encontrado: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "escribiendo en `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "error escribiendo anillo `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "clave %08lX: clave pública importada\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "clave %08lX: no coincide con nuestra copia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "clave %08lX: no puede localizarse el bloque de claves original: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "clave %08lX: no puede leerse el bloque de claves original: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "clave %08lX: 1 nuevo identificador de usuario\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "clave %08lX: %d nuevos identificadores de usuario\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "clave %08lX: 1 nueva firma\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "clave %08lX: %d nuevas firmas\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "clave %08lX: 1 nueva subclave\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "clave %08lX: %d nuevas subclaves\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "clave %08lX: sin cambios\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "no hay anillo secreto de claves por defecto: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "clave %08lX: clave secreta importada\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "clave %08lX: ya estaba en el anillo secreto\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "clave %08lX: clave secreta no encontrada: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"clave %08lX: falta la clave pública - imposible emplear el\n"
-"certificado de revocación\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "clave %08lX: certificado de revocación inválido: %s - rechazado\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "clave %08lX: certificado de revocación importado\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "clave %08lX: no hay identificador de usuario para la firma\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"clave %08lX: algoritmo de clave pública no disponible para el id \"%s\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "clave %08lX: autofirma inválida para el id \"%s\"\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "clave %08lX: no hay subclave que unir\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "clave %08lX: algoritmo de clave pública no disponible\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "clave %08lX: unión de subclave inválida\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "clave %08lX: unión de subclave inválida\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "clave %08lX: no hay subclave que unir\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "clave %08lX.%lu: revocación de subclave válida\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "clave %08lX: unión de subclave inválida\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "clave %08lX: omitido ID de usuario '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "clave %08lX: subclave omitida\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "clave %08lX: firma no exportable (clase %02x) - omitida\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "clave %08lX: certificado de revocación en lugar equivocado - omitido\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "clave %08lX: certificado de revocación no valido: %s - omitido\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "clave %08lX: certificado de revocación en lugar equivocado - omitido\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "clave %08lX: detectado usuario duplicado - fusionada\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"Aviso: la clave %08lX puede estar revocada: recuperando clave de revocación %"
-"08lX\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"Aviso: la clave %08lX puede estar revocada: clave e revocación %08lXno está "
-"presente.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "clave %08lX: certificado de revocación añadido\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "clave %08lX: firma directa de clave añadida\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revocación]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[autofirma]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 firma incorrecta\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d firmas incorrectas\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 firma no comprobada por falta de clave\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d firmas no comprobadas por falta de clave\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 firma no comprobada por causa de un error\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d firmas no comprobadas por causa de un error\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Detectado 1 identificador de usuario sin autofirma válida\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Detectados %d identificadores de usuario sin autofirma válida\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "ID de usuario \"%s\" revocado."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "¿Seguro que todavía quiere firmarlo? (s/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Imposible firmar.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "ATENCIÓN `%s' es un fichero vacío\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Su firma actual en \"%s\"\n"
-"es una firma local.\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Quiere convertirla en una clave totalmente exportable? (s/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Su firma actual en \"%s\"\n"
-"es una firma local.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "Quiere convertirla en una clave totalmente exportable? (s/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" ya estaba firmada localmente por la clave %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" ya estaba firmada por la clave %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nada que firmar con la clave %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "¡Esta clave ha caducado!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Esta clave expirará el %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "¿Quiere que su firma caduque al mismo tiempo? (S/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"No puede hacer una firma OpenPGP de una clave PGP 2.x estando en modo --"
-"pgp2.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Esto inutilizaría la clave en PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"¿Cómo de cuidadosamente ha verificado que la clave que está a punto de\n"
-"firmar pertenece realmente a la persona arriba nombrada? Si no sabe que\n"
-"contestar, introduzca \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) No contesto.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) No lo he comprobado en absoluto.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) He hecho una comprobación informal.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Lo he comprobado meticulosamente.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"¿Está realmente seguro de querer firmar esta clave\n"
-"con su clave: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "esto puede ser debido a la ausencia de autofirma\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La firma se marcará como no exportable.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La firma se marcará como no revocable.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La firma se marcará como no exportable.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La firma se marcará como no revocable.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"No he comprobado esta clave en absoluto.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"He comprobado esta clave informalmente.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"He comprobado esta clave meticulosamente.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "¿Firmar de verdad? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "firma fallida: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Esta clave no está protegida.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Las partes secretas de la clave primaria no están disponibles.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "La clave está protegida.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "No puede editarse esta clave: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Introduzca la nueva contraseña para esta clave secreta.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"No ha especificado contraseña. Esto es probablemente una *mala* idea.\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "¿Realmente quiere hacer esto? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "moviendo la firma de la clave al lugar correcto\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "sale de este menú"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "s"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "graba"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "graba y sale"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "ayuda"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "muestra esta ayuda"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "hdac"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "muestra huella dactilar"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "lista"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "lista clave e identificadores de usuario"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "idu"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "selecciona identificador de usuario N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "clave"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "selecciona clave secundaria N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "comprueba"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "lista firmas"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "firma"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "firma la clave"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "firmal"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "firma la clave localmente"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "firmanr"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "firma la clave irrevocablemente"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "firmanrl"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "firma la clave local e irrevocablemente"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "depura"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "añaidu"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "añade un identificador de usuario"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "añadirfoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "añade un ID fotográfico"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "borridu"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "borra un identificador de usuario"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "borfoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "añacla"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "añade una clave secundaria"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "borrcla"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "borra una clave secundaria"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "añacla"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "añade una clave secundaria"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "borrfir"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "borra firmas"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expira"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "cambia fecha de caducidad"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primaria"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "marca ID de usuario como primario"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "cambia"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "cambia entre lista de claves secretas y públicas"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "muestra preferencias (experto)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "verpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "muestra preferencias (prolijo)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "estpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "establece preferencias"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "actpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "preferencias actualizadas"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "contr"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "cambia la contraseña"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "conf"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "cambia valores de confianza"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revfir"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revoca firmas"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revcla"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revoca una clave secundaria"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "descla"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "deshabilita una clave"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "habcla"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "habilita una clave"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "verfoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "mostrar ID fotográfico"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "imposible hacer esto en modo de proceso por lotes\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "error leyendo bloque de clave secreta `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Clave secreta disponible.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Orden> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Se necesita la clave secreta para hacer esto.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Por favor use la orden \"cambia\" primero.\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "La clave está revocada."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "¿Firmar realmente todos los identificadores de usuario? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Sugerencia: seleccione los identificadores de usuario para firmar\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Esta orden no se permite en modo %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Debe seleccionar por lo menos un identificador de usuario.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "¡No puede borrar el último identificador de usuario!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "¿Borrar realmente todos los identificadores seleccionados? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "¿Borrar realmente este identificador de usuario? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Debe seleccionar por lo menos una clave.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "¿De verdad quiere borrar las claves seleccionadas? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "¿De verdad quiere borrar esta clave? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "¿De verdad quiere revocar las claves seleccionadas? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "¿De verdad quiere revocar esta clave? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"¿Actualizar realmente las preferencias para todos los ID seleccionados? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "¿Actualizar realmente las preferencias? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "¿Grabar cambios? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "¿Salir sin grabar? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "actualización fallida: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "actualización de la clave secreta fallida: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Clave sin cambios, no se necesita actualización.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Orden inválida (pruebe \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Esta clave puede ser revocada por %s clave %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (confidencial)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX creada: %s expira: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " confianza: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Esta clave está deshabilitada"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! ¡esta subclave ha sido revocada! %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- se encontró una revocación falsificada\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problema comprobando la revocación: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Por favor, advierta que la validez de clave mostrada no es necesariamente\n"
-"correcta a menos de que reinicie el programa.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"AVISO: esta es una clave de tipo PGP2. Añadir un ID fotográfico puede\n"
-"hacer que algunas versiones de PGP rechacen esta clave.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "¿Está seguro de querer añadirla? (s/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "No puede añadir un ID fotográfico a una clave tipo PGP2.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "¿Borrar esta firma correcta? (s/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "¿Borrar esta firma inválida? (s/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "¿Borrar esta firma desconocida? (s/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "¿Borrar realmente esta autofirma? (s/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d firmas borradas.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d firmas borradas\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "No se borró nada\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Introduzca la longitud de la clave"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Por favor, quite la selección de las claves secretas.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Por favor, seleccione como máximo una clave secundaria.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Cambiando caducidad de clave secundaria.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Cambiando caducidad de clave primaria.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "No puede cambiar la fecha de caducidad de una clave v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "No existe la firma correspondiente en el anillo secreto\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Por favor seleccione exactamente un identificador de usuario.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "clave %08lX: autofirma inválida para el id \"%s\"\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "No hay ningún identificador de usuario con el índice %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "No hay ninguna clave secundaria con el índice %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "ID de usuario: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"firmada con su clave %08lX el %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"firmada localmente con su clave %08lX el %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Esta firma caducó el %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "¿De verdad quiere revocarla? (s/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "¿Crear un certificado de revocación para esta clave? (s/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Ha firmado los siguientes IDs de usuario:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " firmada por %08lX el %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revocada por %08lX el %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Va a revocar las siguientes firmas:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " firmada por %08lX el %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (no exportable)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "¿Crear los certificados de revocación realmente? (s/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "no hay clave secreta\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Mostrando ID fotográfico %s de tamaño %ld para la clave 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Política de firmas: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Política de firmas: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "ATENCIÓN: encontrados datos de notación inválidos\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notación de firma: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Notación de firma: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "ilegible"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Anillo de claves"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [caduca: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "lista claves y huellas dactilares"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Huella de clave ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Huella de clave ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Huella de clave ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Huella de clave ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algoritmo de distribución inválido `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "datos cifrados %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "cifrado con algoritmo desconocido %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "la clave pública es %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "datos cifrados de la clave pública: DEK correcta\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "cifrado con clave %2$s de %1$u bits, ID %3$08lX, creada el %4$s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "cifrado con clave %s, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "descifrado de la clave pública fallido: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "suponiendo %s datos cifrados\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-"cifrado IDEA indisponible, optimistamente intentando usar %s en su lugar\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "descifrado correcto\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "ATENCIÓN: ¡el mensaje cifrado ha sido manipulado!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "descifrado fallido: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: el remitente solicitó \"sólo-para-tus-ojos\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nombre fichero original='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "revocación independiente - use \"gpg --import\" para aplicarla\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notación: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Política: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "suprimida la verificación de la firma\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "no se puede trabajar con firmas múltiples\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Firma creada el %.*s usando clave %s ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "Firma INCORRECTA de \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Firma caducada de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Firma correcta de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[incierto]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Imposible comprobar la firma: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "no es una firma separada\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "firma independiente de clase 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "firma al viejo estilo (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "paquete raíz inválido detectado en proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "no se pueden desactivar los volcados de core: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "¡No se deberían usar algoritmos experimentales!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"ese algoritmo de cifrado está desacreditado;¡por favor use uno más "
-"estándar!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "el plugin para el cifrado IDEA no está presente\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"por favor vea http://www.gnupg.org/why-not-idea.html para más información\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "ATENCIÓN: %s es una opción desaconsejada.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "ATENCIÓN: %s es una opción desaconsejada.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "por favor use \"--keyserver-options %s\" en su lugar\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "no puedo manejar el algoritmo de clave pública %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "el subpaquete de tipo %d tiene el bit crítico activado\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "el agente gpg no esta disponible en esta sesión\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "no puedo establecer pid para el agente\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "no puedo conseguir el FD de lectura para el agente\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "no puedo conseguir el FD de escritura para el agente\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "variable de entorno GPG_AGENT_INFO malformada\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "el programa no permite usar el protocolo agente gpg versión %d\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "no se puede conectar con `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problema de comunicación con el agente gpg\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problema con el agente - inhabilitando el uso del agente\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr "(ID clave primaria %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Necesita una contraseña para desbloquear la clave secreta\n"
-"del usuario: \"%.*s\"\n"
-"%u bits, clave %s, ID %08lX, creada el %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Introduzca contraseña\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Repita contraseña\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "contraseña demasiado larga\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "respuesta del agente inválida\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "cancelado por el usuario\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problema con el agente: el agente devuelve 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Necesita una contraseña para desbloquear la clave secreta\n"
-"del usuario: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "clave %2$s de %1$u bits, ID %3$08lX, creada el %4$s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "imposible pedir contraseña en modo de proceso por lotes\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Introduzca contraseña: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Repita contraseña: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "datos no grabados; use la opción \"--output\" para grabarlos\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "error creando `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Firma separada.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Introduzca el nombre del fichero de datos: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "leyendo stdin...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "no hay datos firmados\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "imposible abrir datos firmados `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinatario anónimo; probando clave secreta %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "de acuerdo, somos el destinatario anónimo.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "la antigua codificación de la DEK no puede usarse\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "algoritmo de cifrado %d%s desconocido o desactivado\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "NOTA: algoritmo de cifrado %d no encontrado en las preferencias\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTA: clave secreta %08lX caducada el %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "clave %08lX: ¡esta clave ha sido revocada!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "solicitando clave %08lX del servidor de claves HKP %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "no puede obtenerse la clave en el servidor: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "error enviando a `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "envió correcto a `%s` (estado=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "falló el envio a `%s': status=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "buscando \"%s\" en el servidor HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "no puede buscarse en el servidor: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "las partes de la clave privada no están disponibles\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "el algoritmo de protección %d%s no puede ser utilizado\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Contraseña incorrecta; inténtelo de nuevo."
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ... \n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "ATENCIÓN: detectada clave débil - por favor cambie la contraseña.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"generando la suma de comprobación de 16 bits (desaconsejada) para \n"
-"proteger la clave secreta.\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"¡esto es una clave ElGamal generada por PGP que NO es segura para las "
-"firmas!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "la clave pública es %lu segundos más nueva que la firma\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "la clave pública es %lu segundos más nueva que la firma\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"clave pública creada %lu segundos en el futuro (salto en el tiempo o\n"
-"problemas con el reloj)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"clave pública creada %lu segundos en el futuro (salto en el tiempo o\n"
-"problemas con el reloj)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTA: clave de la firma %08lX caducada el %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "asumiendo firma incorrecta debido a un bit crítico desconocido\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"AVISO: no puedo expandir el %% de la url de política . Se usa sin expandir.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"AVISO: no puedo expandir el %% de la url de política . Se usa sin expandir.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "la comprobación de la firma creada falló: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "firma %s de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "ATENCIÓN `%s' es un fichero vacío\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "sólo puede firmar con claves tipo PGP 2.x estando en modo --pgp2\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "no se puede crear %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: algoritmo de cifrado %d no encontrado en las preferencias\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "firmando:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "sólo puede firmar en claro con claves PGP 2.x estando en modo --pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "se usará un cifrado %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "no se pueden manejar líneas de texto de más de %d caracteres\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "línea de longitud superior a %d caracteres\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "registro base de datos de confianza %lu: lseek fallido: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr ""
-"resgistro base de datos de confianza %lu: escritura fallida (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transacción en la base de datos de confianza demasiado grande\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: no se puede abrir: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: ¡el directorio no existe!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: no se puede crear bloqueo\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: no se puede crear bloqueo\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: no se puede crear: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: fallo en la creación del registro de versión: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: se ha creado base de datos de confianza inválida\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: se ha creado base de datos de confianza\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: base de datos de confianza inválida\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: fallo en la creación de la tabla hash: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: error actualizando el registro de versión: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: error leyendo registro de versión: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: error escribiendo registro de versión: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "base de datos de confianza: fallo lseek: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "base de datos de confianza: error lectura (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: no es una base de datos de confianza\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: registro de versión con número de registro %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versión del fichero %d inválida\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: error leyendo registro libre: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: error escribiendo registro de directorio: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: fallo en poner a cero un registro: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: fallo al añadir un registro: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"La base de datos de confianza está dañada. Por favor, ejecute\n"
-"\"gpg --fix-trust-db\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "'%s' no es un identificador largo de clave válido\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "clave %08lX: aceptada como clave de confianza\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "clave %08lX aparece más de una vez en la base de datos de confianza\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "clave %08lX: clave fiable sin clave pública - omitida\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "registro de confianza %lu, petición tipo %d: fallo lectura: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "registro de confianza %lu no es del tipo requerido %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "registro de confianza %lu, tipo %d: fallo escritura: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "base de datos de confianza: fallo sincronización: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "no es necesaria una comprobación de la base de datos de confianza\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "siguiente comprobación de base de datos de confianza el: %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "comprobando base de datos de confianza\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "clave pública %08lX no encontrada: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "clave pública de la clave totalmente fiable %08lX no encontrada\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"comprobando en profundidad %d firmado=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"la firma no se pudo verificar.\n"
-"Por favor recuerde que el fichero de firma (.sig o .asc)\n"
-"debería ser el primero que se da en la línea de órdenes.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "la línea %u es demasiado larga o no tiene avance de línea (LF)\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr "clave no marcada como insegura - no puede usarse con el pseudo RNG\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "`%s' omitido: duplicado\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "`%s' omitido: %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "omitido: clave secreta ya presente\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"`%s' omitida: esta es una clave ElGamal generada por PGP que NO es segura "
-"para las firmas\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "El fichero `%s' ya existe. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "¿Sobreescribir (s/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: sufijo desconocido\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Introduzca nuevo nombre de fichero"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "escribiendo en stdout\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "asumiendo que hay datos firmados en `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: se ha creado un nuevo fichero de opciones\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: no se puede crear el directorio: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: directorio creado\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"ATENCIÓN: mensaje cifrado con una clave débil en el cifrado simétrico.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problema trabajando con un paquete cifrado\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "creada clave débil - reintentando\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"¡imposible evitar clave débil para cifrado simétrico después de %d "
-"intentos!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA necesita un algoritmo de hash de 160 bits.\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "imposible hacer esto en modo de proceso por lotes sin \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "¿Eliminar esta clave del anillo? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "¡Esta es una clave secreta! ¿Eliminar realmente? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "borrado de bloque de anillo de claves fallido: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "borrada información de propietarios\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "¡hay una clave secreta para esta clave pública! \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "use antes la opción \"--delete-secret-key\" para borrarla.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Está en su mano asignar un valor aquí. Dicho valor nunca será exportado a\n"
-"terceros. Es necesario para implementar la red de confianza, no tiene nada\n"
-"que ver con la red de certificados (implícitamente creada)."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Para construir la Red-de-Confianza, GnuPG necesita saber qué claves\n"
-"tienen confianza total - normalmente son las claves para las que usted\n"
-"puede acceder a la clave secreta. Conteste \"yes\" para hacer que esta\n"
-"clave se considere como de total confianza\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Si quiere usar esta clave revocada de todos modos, conteste \"sí\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "Si quiere usar esta clave no fiable de todos modos, conteste \"sí\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Introduzca el ID de usuario al que quiere enviar el mensaje."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Seleccione el algoritmo que usará.\n"
-"\n"
-"DSA (también conocido como DSS) es un algoritmo de firma digital que sólo\n"
-"puede usarse para firmas. Es el algoritmo sugerido porque la verificación\n"
-"de firmas DSA es mucho más rápida que la de firmas ElGamal.\n"
-"\n"
-"ElGamal es un algoritmo que puede ser usado para firma y cifrado. OpenPGP\n"
-"distingue entre dos tipos de estos algoritmos: sólo para cifrado y para\n"
-"firma y cifrado. En realidad es lo mismo, pero se deben seleccionar ciertos\n"
-"parámetros de una forma particular para crear una clave segura para firmas.\n"
-"Este programa lo hace así, pero otras implementaciones de OpenPGP no tienen\n"
-"por qué entender el tipo de firma y cifrado.\n"
-"\n"
-"La clave primaria debe ser una clave capaz de firmar, es por ello que la\n"
-"opción de clave ElGamal sólo para cifrado no está disponible en este menú."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Aunque estas claves están definidas en RFC2440, no se aconseja su uso,\n"
-"ya que no todos los programas pueden utilizarlas y las firmas creadas\n"
-"con ellas son bastante grandes y lentas de verificar."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Introduzca la longitud de la clave"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Responda \"sí\" o \"no\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Introduzca el valor requerido conforme se muestra.\n"
-"Es posible introducir una fecha ISO (AAAA-MM-DD), pero no se obtendrá una\n"
-"buena respuesta a los errores; el sistema intentará interpretar el valor\n"
-"introducido como un intervalo."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Introduzca el nombre del dueño de la clave"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr ""
-"Introduzca una dirección de correo electrónico (opcional pero muy\n"
-"recomendable)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Introduzca un comentario opcional"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N para cambiar el nombre.\n"
-"C para cambiar el comentario.\n"
-"E para cambiar la dirección.\n"
-"O para continuar con la generación de clave.\n"
-"S para interrumpir la generación de clave."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Responda \"sí\" (o sólo \"s\") para generar la subclave."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Cuando firme un ID de usuario en una clave, debería verificar que la clave\n"
-"pertenece a la persona que se nombra en el ID de usuario. Es útil para\n"
-"otros saber cómo de cuidadosamente lo ha verificado.\n"
-"\n"
-"\"0\" significa que no hace ninguna declaración concreta sobre como ha\n"
-" comprobado la validez de la clave.\n"
-"\n"
-"\"1\" significa que cree que la clave pertenece a la persona que declara\n"
-" poseerla pero no pudo o no verificó la clave en absoluto. Esto es "
-"útil\n"
-" para una verificación en persona cuando firmas la clave de un usuario\n"
-" pseudoanónimo.\n"
-"\n"
-"\"2\" significa que hizo una comprobación informal de la clave. Por ejemplo\n"
-" podría querer decir que comprobó la huella dactilar de la clave y\n"
-" comprobó el ID de usuario en la clave con un ID fotográfico.\n"
-"\n"
-"\"3\" significa que hizo una comprobación exhaustiva de la clave. Por\n"
-" ejemplo verificando la huella dactilar de la clave con el propietario\n"
-" de la clave, y que comprobó, mediante un documento difícil de "
-"falsificar\n"
-" con ID fotográfico (como un pasaporte) que el nombre del poseedor de "
-"la\n"
-" clave coincide con el ID de usuario en la clave y finalmente que "
-"verificó\n"
-" (intercambiando email) que la dirección de email de la clave "
-"pertenece\n"
-" al poseedor de la clave.\n"
-"\n"
-"Observe que los ejemplos dados en los niveles 2 y 3 son *solo* ejemplos.\n"
-"En definitiva, usted decide lo que significa \"informal\" y \"exhaustivo\"\n"
-"para usted cuando firma las claves de otros.\n"
-"\n"
-"Si no sabe qué contestar, conteste \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Responda \"sí\" si quiere firmar TODOS los IDs de usuario"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Responda \"sí\" si realmente quiere borrar este ID de usuario.\n"
-"¡También se perderán todos los certificados!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Responda \"sí\" si quiere borrar esta subclave"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Esta es una firma válida de esta clave. Normalmente no será deseable\n"
-"borrar esta firma ya que puede ser importante para establecer una conexión\n"
-"de confianza con la clave o con otra clave certificada por ésta."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Esta firma no puede ser comprobada porque no tiene Vd. la clave\n"
-"correspondiente. Debería posponer su borrado hasta conocer qué clave\n"
-"se usó, ya que dicha clave podría establecer una conexión de confianza\n"
-"a través de otra clave certificada."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "Esta firma no es válida. Tiene sentido borrarla de su anillo."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Esta es una firma que une el ID de usuario a la clave. No suele ser una\n"
-"buena idea borrar dichas firmas. De hecho, GnuPG podría no ser capaz de\n"
-"volver a usar esta clave. Así que bórrela tan sólo si esta autofirma no\n"
-"es válida por alguna razón y hay otra disponible."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Cambiar las preferencias de todos los IDs de usuario (o sólo los \n"
-"seleccionados) a la lista actual de preferencias. El sello de tiempo\n"
-"de todas las autofirmas afectadas se avanzará en un segundo.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Por favor introduzca la contraseña: una frase secreta \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Repita la última contraseña para asegurarse de lo que tecleó."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Introduzca el nombre del fichero al que corresponde la firma"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Responda \"sí\" para sobreescribir el fichero"
-
-# Sugerencia: ENTER -> INTRO.
-# Aceptada.
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Introduzca un nuevo nombre de fichero. Si pulsa INTRO se usará el fichero\n"
-"por omisión (mostrado entre corchetes)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Debería especificar un motivo para la certificación. Dependiendo del\n"
-"contexto puede elegir una opción de esta lista:\n"
-" \"La clave ha sido comprometida\"\n"
-" Use esto si tiene razones para pensar que personas no autorizadas\n"
-" tuvieron acceso a su clave secreta.\n"
-" \"La clave ha sido sustituida\"\n"
-" Use esto si ha reemplazado la clave por otra más nueva.\n"
-" \"La clave ya no está en uso\"\n"
-" Use esto si ha dejado de usar esta clave.\n"
-" \"La identificación de usuario ya no es válida\"\n"
-" Use esto para señalar que la identificación de usuario no debería\n"
-" seguir siendo usada; esto se utiliza normalmente para marcar una\n"
-" dirección de correo-e como inválida.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Si lo desea puede introducir un texto explicando por qué emite\n"
-"este certificado de revocación. Por favor, que el texto sea breve.\n"
-"Una línea vacía pone fin al texto.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Ayuda no disponible"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "No hay ayuda disponible para `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "error escribiendo anillo `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "anillo `%s' creado\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "fallo reconstruyendo caché del anillo de claves: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "ATENCIÓN: existen 2 ficheros con información confidencial.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s es el que no se ha modificado\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s es el nuevo\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Por favor arregle este posible fallo de seguridad\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "comprobando anillo `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "hasta ahora procesadas %lu claves (%lu firmas)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu claves comprobadas (%lu firmas)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: anillo creado\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr "reinicie GnuPG otra vez para que lea el nuevo fichero de opciones\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "al cambiar permisos de `%s' ocurrió el fallo: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOMBRE=VALOR|usa estos datos de notación"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "El primer carácter de una notación debe ser una letra o un subrayado\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "los puntos en una notación deben estar rodeados por otros caracteres\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "AVISO: Esta clave ya tiene identificador fotográfico.\n"
-#~ " Añadir otro ID puede confundir a algunas versiones de PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Solo puede tener un ID fotográfico en una clave.\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Huella dactilar:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Huella dactilar:"
-
-#, fuzzy
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "¿Seguro que quiere una clave de este tamaño? "
-
-#, fuzzy
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr "¿Seguro que quiere una clave de este tamaño? "
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "¿Firmar de verdad? "
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "se solicitan demasiados bits aleatorios; el límite es %d\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NOMBRES]|comprueba la base de datos de confianza"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key id-usuario"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key id-usuario"
-
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key id-usuario"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "Información en http://www.gnupg.org"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "iImMqQ"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No puede encontrarse una ruta de confianza válida para esta clave. "
-#~ "Veamos\n"
-#~ "si es posible asignar algunos valores de confianza perdidos.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No se ha encontrado ninguna ruta con una de nuestras claves.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No se ha encontrado ningún certificado sin valor de confianza.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "No se cambió ningún valor de confianza.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr ""
-#~ "%08lX: no hay información para calcular la probabilidad de confianza\n"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Introduzca el ID de usuario: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "omitida: clave pública ya designada con --encrypt-to\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: error comprobando la clave: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "¿De verdad quiere crear una clave de firma y cifrado? "
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "¿De verdad necesita una clave tan grande? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: usuario no encontrado: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "problema en la lectura del certificado: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "demasiados registros en la cache unk - anulada\n"
-
-#~ msgid "no default public keyring\n"
-#~ msgstr "no hay anillo público por defecto\n"
-
-#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
-#~ msgstr "clave secreta %08lX no importada (use %s para permitirlo)\n"
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "clave %08lX: nuestra copia no tiene autofirma\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: usuario no encontrado\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "actualización de base de datos de confianza fallida: %s\n"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "no hay servidores de claves conocidos (use opción --keyserver)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "'%s' no es un identificador de clave válido\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "asumiendo MDC incorrecto debido a un bit crítico desconocido\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "error leyendo registro de directorio del LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: esperaba registro directorio, encontrado tipo %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "no hay clave primaria para el LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "error leyendo clave primaria para el LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record fallida: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "clave %08lX: petición de registro fallida\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "clave %08lX: ya está en la tabla de confianza\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "NOTA: la clave secreta %08lX NO está protegida.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "clave %08lX: las claves pública y secreta no se corresponden\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "enumeración de claves secretas fallida: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "clave %08lX.%lu: unión de subclave válida\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "clave %08lX.%lu: unión de subclave inválida: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "clave %08lX.%lu: revocación de clave válida\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "clave %08lX.%lu: revocación de clave inválida: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Autofirma válida"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Autofirma inválida"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Revocación válida de ID de usuario omitida, existe autofirma más reciente"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Revocación de ID de usuario válida"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Revocación de ID de usuario inválida."
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Revocación de certificado válida"
-
-#~ msgid "Good certificate"
-#~ msgstr "Certificado correcto"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Certificado de revocación incorrecto"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Certificado incorrecto"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "registro de firma %lu[%d] apunta al registro equivocado.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "certificado duplicado - eliminado"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir fallida: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: inserción fallida: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: inserción fallida: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: insertada\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "error leyendo registro de directorio: %s\n"
-
-#~ msgid "\t%lu keys with errors\n"
-#~ msgstr "\t%lu claves con errores\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu claves insertadas\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: registro de directiorio sin clave - omitido\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\t%lu debido a las nuevas claves públicas\n"
-
-# msgstr "clave %08lX: %d nuevas subclaves\n"
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu claves omitidas\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu claves actualizadas\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Oh oh, no hay claves\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Oh oh, no hay ningún ID de usuario\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: búsqueda registro directorio fallida: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "clave %08lX: inserción del registro de confianza fallida: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "clave %08lX.%lu: incluida en la base de datos de confianza\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "clave %08lX.%lu: creada en el futuro (salto en el tiempo o\n"
-#~ "problemas con el reloj)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "clave %08lX.%lu: caducada el %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "clave %08lX.%lu: comprobación de confianza fallida: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "problema buscando '%s' en la tabla de confianza: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr "usuario '%s' no está en la tabla de confianza - insertando\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "fallo al poner '%s' en la tabla de confianza: %s\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr ""
-#~ "ATENCÍON: todavía no puedo tratar registros de preferencias largos\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: no se puede crear el anillo: %s\n"
-
-#, fuzzy
-#~ msgid "invalid"
-#~ msgstr "Armadura no válida"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "No puede usarse clave RSA en esta versión\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "No hay clave para tal usuario\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "No hay clave secreta para tal usuario\n"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "clave secreta para descifrado no disponible\n"
-
-#~ msgid ""
-#~ "RSA keys are deprecated; please consider creating a new key and use this "
-#~ "key in the future\n"
-#~ msgstr ""
-#~ "Las claves RSA están en desuso, considere la creación de una nueva clave "
-#~ "para futuros usos\n"
-
-#~ msgid "set debugging flags"
-#~ msgstr "establece los parámetros de depuración"
-
-#~ msgid "enable full debugging"
-#~ msgstr "habilita depuración completa"
-
-#~ msgid "do not write comment packets"
-#~ msgstr "no escribe paquetes de comentario"
-
-#~ msgid "(default is 1)"
-#~ msgstr "(por defecto es 1)"
-
-#~ msgid "(default is 3)"
-#~ msgstr "(por defecto es 3)"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr " (%d) ElGamal en un paquete v3\n"
-
-#~ msgid "Key generation can only be used in interactive mode\n"
-#~ msgstr "La creación de claves sólo es posible en modo interactivo\n"
-
-#, fuzzy
-#~ msgid "tdbio_search_sdir failed: %s\n"
-#~ msgstr "tdbio_search_dir fallida: %s\n"
-
-#~ msgid "print all message digests"
-#~ msgstr "imprime todos los resúmenes de mensaje"
-
-#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n"
-#~ msgstr ""
-#~ "NOTA: el registro de firma %lu[%d] está en la lista\n"
-#~ "de búsqueda de %lu pero está marcado como comprobado\n"
-
-#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n"
-#~ msgstr ""
-#~ "NOTA: el registro de firma %lu[%d] está en la lista\n"
-#~ "de búsqueda de %lu pero no está marcado\n"
-
-#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n"
-#~ msgstr ""
-#~ "El registro de firma %lu[%d] en la lista de búsqueda de %lu\n"
-#~ "no apunta a un registro de directorio\n"
-
-#~ msgid "lid %lu: no primary key\n"
-#~ msgstr "lid %lu: ninguna clave primaria\n"
-
-#~ msgid "lid %lu: user id not found in keyblock\n"
-#~ msgstr ""
-#~ "lid %lu: no se ha encontrado identificativo de usuario\n"
-#~ "en el bloque de clave\n"
-
-#~ msgid "lid %lu: user id without signature\n"
-#~ msgstr "lid %lu: identificativo de usuario sin firma\n"
-
-#~ msgid "lid %lu: self-signature in hintlist\n"
-#~ msgstr "lid %lu: autofirma en lista de búsqueda\n"
-
-#~ msgid "very strange: no public key\n"
-#~ msgstr "muy raro: no hay clave pública\n"
-
-#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n"
-#~ msgstr ""
-#~ "la lista de búsqueda %lu[%d] de %lu no apunta a\n"
-#~ "un registro de directorio\n"
-
-#~ msgid "lid %lu does not have a key\n"
-#~ msgstr "lid %lu no dispone de clave\n"
-
-#~ msgid "lid %lu: can't get keyblock: %s\n"
-#~ msgstr "lid %lu: no puedo obtener el bloque de clave: %s\n"
-
-#~ msgid "Too many preference items"
-#~ msgstr "Demasiados ítems de preferencias"
-
-#~ msgid "public key not anymore available"
-#~ msgstr "clave pública no disponible"
-
-#~ msgid "insert_trust_record: keyblock not found: %s\n"
-#~ msgstr "insert_trust_record: bloque de clave no encontrado: %s\n"
-
-#~ msgid "lid %lu: update failed: %s\n"
-#~ msgstr "lid %lu: actualización fallida: %s\n"
-
-#~ msgid "lid %lu: updated\n"
-#~ msgstr "lid %lu: actualizado\n"
-
-#~ msgid "lid %lu: okay\n"
-#~ msgstr "lid %lu: bien\n"
-
-#~ msgid "%s: keyblock read problem: %s\n"
-#~ msgstr "%s: problema lectura del bloque de clave: %s\n"
-
-#~ msgid "%s: update failed: %s\n"
-#~ msgstr "%s: actualización fallida: %s\n"
-
-#~ msgid "%s: updated\n"
-#~ msgstr "%s: actualizada\n"
-
-#~ msgid "%s: okay\n"
-#~ msgstr "%s: bien\n"
-
-#~ msgid "lid %lu: keyblock not found: %s\n"
-#~ msgstr "lid %lu: bloque de clave no encontrado: %s\n"
-
-#~ msgid "can't lock keyring `%': %s\n"
-#~ msgstr "no puede bloquearse el anillo público `%s': %s\n"
-
-#~ msgid "error writing keyring `%': %s\n"
-#~ msgstr "error escribiendo anillo `%s': %s\n"
-
-#~ msgid "can't open file: %s\n"
-#~ msgstr "no puede abrirse el fichero: %s\n"
-
-#~ msgid "read error: %s\n"
-#~ msgstr "error de lectura: %s\n"
-
-#~ msgid "writing keyblock\n"
-#~ msgstr "escribiendo bloque de claves\n"
-
-#~ msgid "can't write keyblock: %s\n"
-#~ msgstr "no puede escribirse el bloque de claves: %s\n"
-
-#, fuzzy
-#~ msgid "encrypted message is valid\n"
-#~ msgstr "el algoritmo de resumen seleccionado no es válido\n"
-
-#, fuzzy
-#~ msgid "Can't check MDC: %s\n"
-#~ msgstr "Imposible comprobar la firma: %s\n"
-
-#~ msgid "Usage: gpgm [options] [files] (-h for help)"
-#~ msgstr "Uso: gpgm [opciones] [ficheros] (-h para ayuda)"
-
-#~ msgid ""
-#~ "Syntax: gpgm [options] [files]\n"
-#~ "GnuPG maintenance utility\n"
-#~ msgstr ""
-#~ "Sintaxis: gpgm [opciones] [ficheros]\n"
-#~ "Utilidad de mantenimiento de GnuPG\n"
-
-#~ msgid "usage: gpgm [options] "
-#~ msgstr "uso: gpgm [opciones] "
-
-#~ msgid "chained sigrec %lu has a wrong owner\n"
-#~ msgstr "registro de firma encadenado %lu tiene el propietario equivocado\n"
-
-#~ msgid "lid %lu: read dir record failed: %s\n"
-#~ msgstr "lid %lu: lectura registro de directorio fallida: %s\n"
-
-#~ msgid "lid %lu: read key record failed: %s\n"
-#~ msgstr "lid %lu: lectura registro de clave fallida: %s\n"
-
-#~ msgid "lid %lu: read uid record failed: %s\n"
-#~ msgstr "lid %lu: lectura registro identificativo fallida: %s\n"
-
-#~ msgid "lid %lu: read pref record failed: %s\n"
-#~ msgstr "lid %lu: lectura registro preferencias fallida: %s\n"
-
-#~ msgid "user '%s' read problem: %s\n"
-#~ msgstr "problema de lectura usuario '%s': %s\n"
-
-#~ msgid "user '%s' list problem: %s\n"
-#~ msgstr "problema lista usuario '%s': %s\n"
-
-#~ msgid "user '%s' not in trustdb\n"
-#~ msgstr "usuario '%s' no está en la tabla de confianza\n"
-
-#~ msgid ""
-#~ "# List of assigned trustvalues, created %s\n"
-#~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n"
-#~ msgstr ""
-#~ "# Lista de valores de confianza, creada el %s\n"
-#~ "# (Puede usar \"gpgm --import-ownertrust\" para restablecerlos)\n"
-
-#~ msgid "directory record w/o primary key\n"
-#~ msgstr "registro de directorio sin clave primaria\n"
-
-#~ msgid "error: missing colon\n"
-#~ msgstr "error: falta ':'\n"
-
-#~ msgid "error: invalid fingerprint\n"
-#~ msgstr "error: huella dactilar no válida\n"
-
-#~ msgid "error: no ownertrust value\n"
-#~ msgstr "error: no hay valor de confianza del propietario\n"
-
-#~ msgid "key not in trustdb, searching ring.\n"
-#~ msgstr "la clave no está en tabla de confianza, buscando en el anillo.\n"
-
-#~ msgid "key not in ring: %s\n"
-#~ msgstr "la clave no está en el anillo: %s\n"
-
-#~ msgid "Oops: key is now in trustdb???\n"
-#~ msgstr "Oh oh: la clave ahora está en la tabla de confianza???\n"
-
-#~ msgid "Hmmm, public key lost?"
-#~ msgstr "Oh oh, ¿se ha perdido la clave pública?"
-
-#~ msgid "did not use primary key for insert_trust_record()\n"
-#~ msgstr "no se usó clave primaria para insert_trust_record()\n"
-
-#~ msgid "second"
-#~ msgstr "segundo"
-
-#~ msgid "seconds"
-#~ msgstr "segundos"
diff --git a/po/et.po b/po/et.po
deleted file mode 100644
index 0cbbbaf4a..000000000
--- a/po/et.po
+++ /dev/null
@@ -1,4646 +0,0 @@
-# Estonian translations for gnupg.
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-# Toomas Soome <tsoome@ut.ee>, 2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-05-10 08:47+0300\n"
-"Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
-"Language-Team: Estonian <et@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-15\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Hoiatus: kasutan ebaturvalist mälu!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "Lisainfot leiate lehelt http://www.gnupg.org/faq.html\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "initsialiseerimata turvalise mäluta ei ole operatsioon võimalik\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(te kasutasite vahest selle töö jaoks valet programmi)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "jah"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "jJ"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "ei"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "eE"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "välju"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "vV"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "üldine viga"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "tundmatu paketi tüüp"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "tundmatu versioon"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "tundmatu avaliku võtme algoritm"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "tundmatu lühendi algoritm"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "halb avalik võti"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "halb salajane võti"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "halb allkiri"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "kontrollsumma viga"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "halb parool"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "ei leia avalikku võtit"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "tundmatu ¨ifri algoritm"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "võtmehoidlat ei õnnestu avada"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "vigane pakett"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "vigane pakend"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "sellist kasutaja id pole"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "salajane võti ei ole kättesaadav"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "kasutati valet salajast võtit"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "ei ole toetatud"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "halb võti"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "viga faili lugemisel"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "viga faili kirjutamisel"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "tundmatu pakkimisalgoritm"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "viga faili avamisel"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "viga faili loomisel"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "vigane parool"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "realiseerimata avaliku võtme algoritm"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "realiseerimata ¨ifri algoritm"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "tundmatu allkirja klass"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "usalduse andmebaasi viga"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "halb MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "ressursi limiit"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "vigane võtmehoidla"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "halb sertifikaat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "vigane kasutaja id"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "viga faili sulgemisel"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "viga faili ümber nimetamisel"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "viga faili kustutamisel"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "ootamatud andmed"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "ajatemplite konflikt"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "mittekasutatav avaliku võtme algoritm"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "fail on olemas"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "nõrk võti"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "vigane argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "halb URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "mittetoetatud URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "võrgu viga"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "krüptimata"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "ei töödeldud"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "mittekasutatav avalik võti"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "mittekasutatav salajane võti"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "võtmeserveri viga"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... see on viga (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "te leidsite vea ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "`%s' ei õnnestu avada: %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "ei õnnestu lugeda `%s' atribuute: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' ei ole tavaline fail - ignoreerin\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "märkus: random_seed fail on tühi\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "hoiatus: vigane random_seed faili suurus - ei kasuta\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "`%s' ei õnnestu lugeda: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "märkus: random_seed faili ei uuendatud\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "`%s' ei õnnestu luua: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "`%s' ei õnnestu kirjutada: %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "`%s' ei õnnestu sulgeda: %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "HOIATUS: kasutan ebaturvalist juhuarvude generaatorit!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Juhuarvude generaator on ainult tühi kest, et programmid\n"
-"käiks - see EI OLE tugev juhuarvude generaator!\n"
-"\n"
-"ÄRGE KASUTAGE SELLE PROGRAMMI POOLT GENEREERITUD ANDMEID!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Juhuslikke baite ei ole piisavalt. Palun tehke arvutiga muid töid,\n"
-"et anda masinal võimalust koguda enam entroopiat! (Vajatakse %d baiti)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Käsud:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[fail]|loo allkiri"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[fail]|loo avateksti allkiri"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "loo eraldiseisev allkiri"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "krüpteeri andmed"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[failid]|krüpteeri failid"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "krüpteerimine kasutades ainult sümmeetrilist ¨ifrit"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "ainult salvesta"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "dekrüpteeri andmed (vaikimisi)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[failid]|dekrüpteeri failid"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "kontrolli allkirja"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "näita võtmeid"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "näita võtmeid ja allkirju"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "kontrolli võtmete allkirju"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "näita võtmeid ja sõrmejälgi"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "näita salajasi võtmeid"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "genereeri uus võtmepaar"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "eemalda võtmed avalike võtmete hoidlast"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "eemalda võtmed salajaste võtmete hoidlast"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "allkirjasta võti"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "allkirjasta võti lokaalselt"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "allkirjasta võti mitte-tühistatavana"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "allkirjasta võti lokaalselt ja mitte-tühistatavana"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "allkirjasta või toimeta võtit"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "genereeri tühistamise sertifikaat"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "ekspordi võtmed"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "ekspordi võtmed võtmeserverisse"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "impordi võtmed võtmeserverist"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "otsi võtmeid võtmeserverist"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "uuenda võtmeid võtmeserverist"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "impordi/mesti võtmed"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "näita ainult pakettide järjendeid"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "ekspordi usalduse väärtused"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "impordi usalduse väärtused"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "uuenda usalduse andmebaasi"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "hooldusvaba usalduse andmebaasi uuendamine"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "paranda vigane usalduse andmebaas"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Pakenda fail või standardsisend lahti"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Pakenda fail või standardsisend"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [failid]|trüki teatelühendid"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Võtmed:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "loo ascii pakendis väljund"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NIMI|krüpti NIMEle"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NIMI|kasuta NIME vaikimisi saajana"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "kasuta vaikimisi saajana vaikimisi võtit"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "kasuta seda kasutaja IDd"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|määra pakkimise tase N (0 blokeerib)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "kasuta kanoonilist tekstimoodi"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "kasuta väljundfailina"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "ole jutukas"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "ole mõnevõrra vaiksem"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "ära kasuta terminali"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "kasuta v3 allkirju"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "ära kasuta v3 allkirju"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "kasuta v4 võtme allkirju"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "ära kasuta v3 võtme allkirju"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "krüptimisel kasuta alati MDC"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "krüptimisel ära kasuta kunagi MDC"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "ära tee mingeid muutusi"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "kasuta gpg-agenti"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "pakettmood: ära küsi kunagi"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "eelda enamus küsimustele jah vastust"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "eelda enamus küsimustele ei vastust"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "lisa see võtmehoidla võtmehoidlate nimekirja"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "lisa see salajaste võtmete hoidla nimekirja"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "näita millisesse võtmehoidlasse näidatud võti kuulub"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NIMI|kasuta NIME vaikimisi salajase võtmena"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|kasuta seda võtmeserverit"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NIMI|terminali kooditabel on NIMI"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "loe võtmed failist"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FP|kirjuta olekuinfo sellesse failipidemesse"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[fail]|kirjuta olekuinfo faili"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|VÕTMEID|usalda seda võtit täielikult"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FAIL|lae laiendusmoodul FAIL"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emuleeri dokumendis RFC1991 kirjeldatud moodi"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "kasuta kõikides tegevustes OpenPGP võtmeid"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "kasuta kõikide pakettide, ¨iffrite ja lühendi seadeid PGP 2.x moodis"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|kasuta parooli moodi N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NIMI|kasuta paroolidega lühendialgoritmi NIMI"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NIMI|kasuta paroolidega ¨ifri algoritmi NIMI"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NIMI|kasuta ¨ifri algoritmi NIMI"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NIMI|kasuta teatelühendi algoritmi NIMI"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|kasuta pakkimisalgoritmi N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "ära lisa krüptimisel võtme id"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Esita foto IDd"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Ei esita foto IDd"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Sea käsurida foto ID vaatamiseks"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Kõikide käskude ja võtmete täieliku kirjelduse leiate manualist)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Näited:\n"
-"\n"
-" -se -r Bob [fail] allkirjasta ja krüpti kasutajale Bob\n"
-" --clearsign [fail] loo avateksti allkiri\n"
-" --detach-sign [fail] loo eraldiseisev allkiri\n"
-" --list-keys [nimed] näita võtmeid\n"
-" --fingerprint [nimed] näita sõrmejälgi\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Palun saatke veateated aadressil <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Kasuta: gpg [võtmed] [failid] (-h näitab abiinfot)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Süntaks: gpg [võtmed] [failid]\n"
-"allkirjasta, kontrolli, krüpti ja dekrüpti\n"
-"vaikimisi operatsioon sõltub sisendandmetest\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Toetatud algoritmid:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "kasuta: gpg [võtmed] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "vastuolulised käsud\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Hoiatus: ebaturvaline omanik %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Hoiatus: ebaturvalised õigused %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Hoiatus: ebaturvaline omanik %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Hoiatus: ebaturvalised õigused %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "MÄRKUS: vaikimisi võtmete fail `%s' puudub\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "MÄRKUS: vaikimisi võtmete fail `%s' puudub\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "võtmete fail `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "loen võtmeid failist `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s ei ole lubatud kooditabel\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "ei saa parsida võtmeserveri URI\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: vigane faili versioon %d\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "vigane pakend"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: vigane faili versioon %d\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "vigane võtmehoidla"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "exec-path väärtuseks ei õnnestu seada %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "HOIATUS: programm võib salvestada oma mälupildi!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "HOIATUS: %s määrab üle %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "MÄRKUS: %s ei ole tavapäraseks kasutamiseks!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s ja %s ei ole koos lubatud!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s ja %s ei oma koos mõtet!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"--pgp2 moodis saate luua ainult eraldiseisvaid või avateksti allkirju\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "--pgp2 moodis ei saa korraga allkirjastada ja krüpteerida\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "--pgp2 moodis peate kasutama faile (ja mitte toru).\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "teate krüpteerimine --pgp2 moodis nõuab IDEA ¨iffrit\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "see teade ei pruugi olla PGP 2.x programmidega kasutatav\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "valitud ¨ifri algoritm ei ole lubatud\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "valitud lühendi algoritm ei ole lubatud\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "valitud lühendi algoritm ei ole lubatud\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "pakkimise algoritm peab olema vahemikust %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed peab olema suurem, kui 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed peab olema suurem, kui 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth peab olema vahemikus 1 kuni 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "MÄRKUS: lihtne S2K mood (0) ei soovitata kasutada\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "vigane S2K mood; peab olema 0, 1 või 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "vigane vaikimisi kontrolli mood; peab olema 0, 1, 2 või 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "vigased eelistused\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "vigased eelistused\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "vigased eelistused\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "vigased eelistused\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "TrustDB initsialiseerimine ebaõnnestus: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [failinimi]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [failinimi]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [failinimi]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [failinimi]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [failinimi]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [failinimi]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [failinimi]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [failinimi]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key kasutaja-id"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key kasutaja-id"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key kasutaja-id"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key kasutaja-id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key kasutaja-id [käsud]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "%s ei õnnestu avada: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [kasutaja-id] [võtmehoidla]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "lahtipakendamine ebaõnnestus: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "pakendamine ebaõnnestus: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "vigane teatelühendi algoritm `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[failinimi]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Kirjutage nüüd oma teade ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "`%s' ei õnnestu avada\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"noteerimise nimes võivad olla ainult tähed, numbrid, punktid ja alakriipsud\n"
-"ning lõpus peab olema '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "noteerimise väärtus ei või sisaldada kontroll sümboleid\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "antud sertifikaadi poliisi URL on vigane\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "antud allkirja poliisi URL on vigane\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "pakend: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "vigane pakendi päis: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "pakendi päis: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "vigane avateksti allkirja päis\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "avateksti allkirjad üksteise sees\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "vigane kriipsudega märgitud rida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "ootamatu pakend:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "vigane radix64 sümbol %02x vahele jäetud\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "enneaegne faililõpp (puudub CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "enneaegne faililõpp (poolik CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "vigane CRC\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "CRC viga; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "enneaegne faililõpp (lõpetaval real)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "viga lõpetaval real\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "ei leia OpenPGP andmeid.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "vigane pakend: rida on pikem, kui %d sümbolit\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"kvooditud sümbol pakendis - tõenäoliselt on kasutatud vigast MTA programmi\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Põhjus puudub"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Võti on asendatud"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Võti on kompromiteeritud"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Võti ei ole enam kasutusel"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Kasutaja ID ei ole enam kehtiv"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Tühistamise põhjus: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Tühistamise kommentaar: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iItTvVjJ"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Usalduse väärtus puudub:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Palun otsustage, kuivõrd te usaldate seda kasutajat\n"
-"teiste kasutajate võtmete kontrollimisel (kontrollige\n"
-"passe, kontrollige erinevatest allikatest näpujälgi...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Ei tea\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = EI usalda\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Usaldan vähesel määral\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Usaldan täiesti\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Usaldan absoluutselt\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = esita palun täiendavat infot\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " t = tagasi põhimenüüsse\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " j = jäta see võti vahele\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " v = välju\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Teie otsus? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Kas te tõesti soovite seda võtit absoluutselt usaldada? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Sertifikaadid täiesti usaldatava võtmeni:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "võti %08lX: võti on tühistatud!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Kasutan seda võtit ikka? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "võti %08lX: alamvõti on tühistatud!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: võti on aegunud\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr "%08lX: Ei ole midagi, mis näitaks, et see võti kuulub omanikule\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Me EI usalda seda võtit\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Ei ole kindel, et see võti tõesti kuulub omanikule,\n"
-"aktsepteerime seda siiski\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "See võti kuulub tõenäoliselt omanikule\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "See võti kuulub meile\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"EI ole kindel, et see võti kuulub tema omanikule.\n"
-"Kui te *tõesti* teate, mida te teete, võite järgnevale\n"
-"küsimusele vastata jaatavalt\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "HOIATUS: Kasutan mitteusaldatavat võtit!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "HOIATUS: See võti on omaniku poolt tühistatud!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " See võib tähendada, et allkiri on võltsing.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "HOIATUS: See alamvõti on omaniku poolt tühistatud!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Märkus: See võti on blokeeritud.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Märkus: See võti on aegunud!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "HOIATUS: Seda võtit ei ole sertifitseeritud usaldatava allkirjaga!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " Ei ole midagi, mis näitaks, et allkiri kuulub omanikule.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "HOIATUS: Me EI usalda seda võtit!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Allkiri on tõenäoliselt VÕLTSING.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"HOIATUS: Seda võtit ei ole sertifitseeritud piisavalt usaldatava "
-"allkirjaga!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Ei ole kindel, et allkiri kuulub omanikule.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: jätsin vahele: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: jätsin vahele: avalik võti on juba olemas\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Te ei määranud kasutaja IDd. (võite kasutada võtit \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Sisestage kasutaja ID. Lõpetage tühja reaga: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Tundmatu kasutaja ID.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "jätsin vahele: avalik võti on juba vaikimisi saaja\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Avalik võti on blokeeritud.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "jätsin vahele: avalik võti on juba olemas\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "tundmatu vaikimisi saaja `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: jätsin vahele: avalik võti on blokeeritud\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "kehtivaid aadresse pole\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "eelistus %c%lu ei ole lubatud\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "eelistus %c%lu on duplikaat\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "liiga palju `%c' eelistusi\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "lubamatu sümbol eelistuste sõnes\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "kirjutan iseenda allkirja\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "kirjutan iseenda allkirja\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "kirjutan võtit siduva allkirja\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "vigane võtme suurus; kasutan %u bitti\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "võtme suurus ümardatud üles %u bitini\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Palun valige, millist võtmetüüpi te soovite:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA ja ElGamal (vaikimisi)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (ainult allkirjastamiseks)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (ainult krüptimiseks)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (allkirjastamiseks ja krüptimiseks)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (ainult allkirjastamiseks)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (ainult krüpteerimiseks)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (allkirjastamiseks ja krüptimiseks)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Teie valik? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "Selle algoritmi kasutamine ei ole soovitatav - loon ikkagi? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Vigane valik.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Enne uue %s võtmepaari genereerimist.\n"
-" minimaalne võtmepikkus on 768 bitti\n"
-" vaikimisi võtmepikkus on 1024 bitti\n"
-" suurim soovitatav võtmepikkus on 2048 bitti\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Millist võtmepikkust te soovite? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA lubab võtmepikkuseid ainult vahemikus 512 kuni 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "võtmepikkus on liiga väike; RSA korral on väikseim väärtus 1024.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "võtmepikkus on liiga väike; väikseim lubatud väärtus on 768.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "võtmepikkus on liiga suur; suurim lubatud väärtus on %d.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Suuremad võtmepikkused kui 2048 ei ole soovitatavad, kuna\n"
-"arvutused võtavad VÄGA palju aega!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Olete kindel, et soovite sellist võtmepikkust? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Olgu, kuid pidage meeles, et ka teie monitor ja klaviatuur on samuti\n"
-"võimalikud ründeobjektid!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Soovitud võtmepikkus on %u bitti\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "ümardatud üles %u bitini\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Palun määrake, kui kaua on võti kehtiv.\n"
-" 0 = võti ei aegu\n"
-" <n> = võti aegub n päevaga\n"
-" <n>w = võti aegub n nädalaga\n"
-" <n>m = võti aegub n kuuga\n"
-" <n>y = võti aegub n aastaga\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Palun määrake, kui kaua allkiri kehtib.\n"
-" 0 = allkiri ei aegu\n"
-" <n> = allkiri aegub n päevaga\n"
-" <n>w = allkiri aegub n nädalaga\n"
-" <n>m = allkiri aegub n kuuga\n"
-" <n>y = allkiri aegub n aastaga\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Võti on kehtiv kuni? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Allkiri on kehtiv kuni? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "vigane väärtus\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s ei aegu kunagi\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s aegub %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Teie süsteem ei saa esitada kuupäevi peale aastat 2038.\n"
-"Siiski käsitletakse neid korrektselt aastani 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "On see õige (j/e)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Võtme identifitseerimiseks on vaja määrata kasutaja; tarkvara konstrueerib\n"
-"kasutaja id kasutades pärisnime, kommentaari ja e-posti aadressi kujul:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Pärisnimi: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Lubamatu sümbol nimes\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Nimi ei või alata numbriga\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Nimes peab olema vähemalt 5 sümbolit\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "E-posti aadress: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Selline e-posti aadress ei ole lubatud\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Kommentaar: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Lubamatu sümbol kommentaaris\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Te kasutate kooditabelit `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Te valisite selle KASUTAJA-ID:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Ärge palun kirjutage e-posti aadressi pärisnimesse ega kommentaari\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnKkEeOoVv"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Muuda (N)ime, (K)ommentaari, (E)posti või (V)älju? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Muuda (N)ime, (K)ommentaari, (E)posti või (O)k/(V)älju? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Palun parandage kõigepealt viga\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Te vajate oma salajase võtme kaitsmiseks parooli.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "parooli ei korratud õieti; proovige uuesti"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Te ei soovi parooli - see on tõenäoliselt *halb* idee!\n"
-"Ma siiski täidan teie soovi. Te saate oma parooli alati muuta,\n"
-"kasutades seda programmi võtmega \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Me peame genereerima palju juhuslikke baite. Praegu oleks hea teostada\n"
-"arvutil mingeid teisi tegevusi (kirjutada klaviatuuril, liigutada hiirt,\n"
-"kasutada kettaid jne), see annaks juhuarvude generaatorile võimaluse\n"
-"koguda paremat entroopiat.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA võtmepaari pikkuseks saab 1024 bitti.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Võtme genereerimine katkestati.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "kirjutan avaliku võtme faili `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "kirjutan salajase võtme faili `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "kirjutatavat avalike võtmete hoidlat pole: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "kirjutatavat salajaste võtmete hoidlat pole: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "viga avaliku võtme võtmehoidlasse `%s' kirjutamisel: %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "viga salajase võtme võtmehoidlasse `%s' kirjutamisel: %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "avalik ja salajane võti on loodud ja allkirjastatud.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "võti on märgitud abslouutselt usaldatuks.\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Pidage silmas, et seda võtit ei saa kasutada krüptimiseks. \n"
-"Krüptimiseks tuleb genereerida teine võti, seda saate teha\n"
-"kasutades võtit \"--edit-key\".\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Võtme genereerimine ebaõnnestus: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr "võti loodi %lu sekundit tulevikus (ajahüpe või kella probleem)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "MÄRKUS: v3 võtmetele alamvõtmete loomine ei ole OpenPGP ühilduv\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Loon tõesti? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "võti --output ei tööta selle käsuga\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: ei õnnestu avada: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "viga parooli loomisel: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' on juba pakitud\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: HOIATUS: tühi fail\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"RSA võtmeid pikkusega kuni 2048 bitti saab krüpteerida ainult --pgp2 moodis\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "loen failist `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr "kõikide krüpteeritavate võtmetega ei saa IDEA ¨iffrit kasutada.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "MÄRKUS: ¨ifri algoritm %d puudub eelistustes\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "See käsklus ei ole %s moodis lubatud.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s krüptitud kasutajale: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "võtit '%s' ei leitud: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "viga võtmebloki lugemisel: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "võti %08lX: ei ole rfc2440 võti - jätsin vahele\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "võti %08lX: ei ole kaitstud - jätsin vahele\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "võti %08lX: PGP 2.x stiilis võti - jätsin vahele\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "HOIATUS: midagi ei eksporditud\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "avalike võtmete puhvris on liiga palju võtmeid - blokeerin\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Kasutaja id puudub]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Vigane võti %08lX muudeti kehtivaks võtme --allow-non-selfsigned-uid "
-"kasutamisega\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "kasutan sekundaarset võtit %08lX primaarse võtme %08lX asemel\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "võti %08lX: salajane võti avaliku võtmeta - jätsin vahele\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "jätan bloki tüübiga %d vahele\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu võtit on seni töödeldud\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "viga `%s' lugemisel: %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Töödeldud kokku: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " vahele jäetud uusi võtmeid: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " puudub kasutaja ID: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " imporditud: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " muutmata: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " uusi kasutajaid: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " uusi alamvõtmeid: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " uusi allkirju: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " uusi tühistamisi: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " loetud salajasi võtmeid: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " salajasi võtmeid imporditud: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " muutmata salajasi võtmeid: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " imporditud: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "võti %08lX: kasutaja ID puudub\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "võti %08lX: võtmeseosel puudub alamvõti\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr ""
-"võti %08lX: aktsepteerisin iseenda poolt allakirjutamata kasutaja ID '%s'\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "võti %08lX: puudub kehtiv kasutaja ID\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "see võib olla põhjustatud puuduvast iseenda allkirjast\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "võti %08lX: avalikku võtit ei leitud: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "võti %08lX: uus võti - jätsin vahele\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "ei leia kirjutatavat võtmehoidlat: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "kirjutan faili `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "viga võtmehoidlasse `%s' kirjutamisel: %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "võti %08lX: avalik võti on imporditud\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "võti %08lX: ei sobi meie koopiaga\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "võti %08lX: ei leia algset võtmeblokki: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "võti %08lX: ei õnnestu lugeda algset võtmeblokki: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "võti %08lX: 1 uus kasutaja ID\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "võti %08lX: %d uut kasutaja IDd\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "võti %08lX: 1 uus allkiri\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "võti %08lX: %d uut allkirja\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "võti %08lX: 1 uus alamvõti\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "võti %08lX: %d uut alamvõtit\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "võti %08lX: ei muudetud\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "puudub salajaste võtmete vaikimisi võtmehoidla: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "võti %08lX: salajane võti on imporditud\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "võti %08lX: on juba salajaste võtmete hoidlas\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "võti %08lX: salajast võtit ei leitud: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"võti %08lX: avalik võti puudub - tühistamise sertifikaati ei saa rakendada\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "võti %08lX: vigane tühistamise sertifikaat: %s - lükkasin tagasi\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "võti %08lX: tühistamise sertifikaat imporditud\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "võti %08lX: allkirjal puudub kasutaja ID\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "võti %08lX: mittetoetatud avaliku võtme algoritm kasutajaga \"%s\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "võti %08lX: kasutajal \"%s\" on vigane iseenda allkiri\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "võti %08lX: võtmeseosel puudub alamvõti\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "võti %08lX: mittetoetatud avaliku võtme algoritm\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "võti %08lX: vigane alamvõtme seos\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "võti %08lX: vigane alamvõtme seos\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "võti %08lX: võtmeseosel puudub alamvõti\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "võti %08lX: vigane alamvõtme seos\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "võti %08lX: vigane alamvõtme seos\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "võti %08lX: jätsin vahele kasutaja ID '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "võti %08lX: jätsin alamvõtme vahele\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "võti %08lX: mitte eksporditav allkiri (klass %02x) - jätan vahele\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "võti %08lX: tühistamise sertifikaat on vales kohas - jätan vahele\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "võti %08lX: vigane tühistamise sertifikaat: %s - jätan vahele\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "võti %08lX: tühistamise sertifikaat on vales kohas - jätan vahele\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "võti %08lX: tuvastasin dubleeritud kasutaja ID - mestisin\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"Hoiatus: võti %08lX võib olla tühistatud: laen tühistamise võtit %08lX\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"Hoiatus: võti %08lX võib olla tühistatud: tühistamise võtit %08lX pole.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "võti %08lX: tühistamise sertifikaat lisatud\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "võti %08lX: lisatud vahetu võtme allkiri\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[tühistamine]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[iseenda allkiri]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 halb allkiri\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d halba allkirja\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 allkiri jäi testimata, kuna võti puudub\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d allkirja jäi testimata, kuna võtmed puuduvad\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 allkiri jäi vea tõttu kontrollimata\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d allkirja jäi vigade tõttu kontrollimata\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "tuvastasin ühe kehtiva iseenda allkirjata kasutaja ID\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Kasutaja ID \"%s\" on tühistatud."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Olete kindel, et soovite seda ikka allkirjastada? (j/e) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Ei saa allkirjastada.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "HOIATUS: `%s' on tühi fail\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Teie praegune allkiri \"%s\"\n"
-"on lokaalne allkiri.\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-"Kas te soovite seda edutada täielikuks eksporditavaks allkirjaks? (j/E) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Teie praegune allkiri \"%s\"\n"
-"on lokaalne allkiri.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-"Kas te soovite seda edutada täielikuks eksporditavaks allkirjaks? (j/E) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" on juba lokaalselt allkirjastatud võtmega %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" on juba allkirjastatud võtmega %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Võtmega %08lX pole midagi allkirjastada\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "See võti on aegunud!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "See võti aegub %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Soovite, et teie allkiri aeguks samal ajal? (J/e) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr "--pgp2 moodis ei saa PGP 2.x võtmele OpenPGP allkirja anda.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "See muudab võtme PGP 2.x programmidega mitte-kasutatavaks.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Kui hoolikalt te olete kontrollinud et võti, mida te asute allkirjastama,\n"
-"kuulub ka tegelikult ülal mainitud isikule? Kui te ei tea, mida vastata,\n"
-"sisestage \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Ma ei vasta.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Ma ei ole üldse kontrollinud.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Ma olen teinud pealiskaudset kontrolli.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Ma olen kontrollinud väga hoolikalt.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Olete tõesti kindel, et soovite seda võtit oma\n"
-"võtmega allkirjastada: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "see võib olla põhjustatud puuduvast iseenda allkirjast\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Allkiri märgitakse mitte-eksporditavaks.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Allkiri märgitakse kehtetuks mitte-tunnistatavaks.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Allkiri märgitakse mitte-eksporditavaks.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Allkiri märgitakse kehtetuks mitte-tunnistatavaks.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Ma ei ole seda võtit üldse kontrollinud.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Ma olen seda võtit kontrollinud ainult pealiskaudselt.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Ma olen kontrollinud seda võtit väga hoolikalt.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Allkirjastan tõesti? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "allkirjastamine ebaõnnestus: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "See võti ei ole kaitstud.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Primaarse võtme salajased komponendid ei ole kättesaadavad.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Võti on kaitstud.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Seda võtit ei õnnestu toimetada: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Sisestage sellele salajasele võtmele uus parool.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Te ei soovi parooli - see on tõenäoliselt *halb* idee!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Kas te tõesti soovite seda teha? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "tõstan võtme allkirja õigesse kohta\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "välju sellest menüüst"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "v"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "salvesta ja välju"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "näita seda abiinfot"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "näita sõrmejälge"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "näita võtit ja kasutaja IDd"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "vali kasutaja ID N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "vali sekundaarne võti N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "näita allkirju"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "allkirjasta võti"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "allkirjasta võti lokaalselt"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "allkirjasta võti kehtetuks mitte-tunnistatavana"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "allkirjasta võti lokaalselt ja kehtetuks mitte-tunnistatavana"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "lisa kasutaja ID"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "lisa foto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "lisa foto ID"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "kustuta kasutaja ID"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "lisa sekundaarne võti"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "kustuta sekundaarne võti"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "lisa sekundaarne võti"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "kustuta allkirjad"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "muuda aegumise kuupäeva"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primaarne"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "märgi kasutaja ID primaarseks"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "lülita"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "lülita salajaste või avalike võtmete loendi vahel"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "näita eelistusi (ekspert)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "näita eelistusi (detailsena)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "sea eelistuste nimekiri"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "uuendatud eelistused"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "muuda parooli"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "muuda omaniku usaldust"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "tühista allkirjad"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "tühista sekundaarne võti"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "blokeeri võti"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "luba võti"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "näita foto ID"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "seda ei saa teha pakettmoodis\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "viga salajase võtmebloki `%s' lugemisel: %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Salajane võti on kasutatav.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Käsklus> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Selle tegamiseks on vaja salajast võtit.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Palun kasutage kõigepealt käsku \"toggle\".\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "Võti on tühistatud."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Kas allkirjastan tõesti kõik kasutaja IDd? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Vihje: Valige allkirjastamiseks kasutaja\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "See käsklus ei ole %s moodis lubatud.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Te peate valima vähemalt ühe kasutaja ID.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Viimast kasutaja ID ei saa kustutada!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Kas kustutan tõesti kõik kasutaja IDd? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Kas eemaldan tõesti selle kasutaja ID? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Te peata valima vähemalt ühe võtme.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Kas te tõesti soovite valitud võtmeid kustutada? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Kas te tõesti soovite seda võtit kustutada? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Kas te tõesti soovite valitud võtmeid tühistada? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Kas te tõesti soovite seda võtit tühistada? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Kas uuendan tõesti kõik kasutaja ID-de seaded? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Kas tõesti uuendan seaded? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Salvestan muutused? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Väljun salvestamata? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "uuendamine ebaõnnestus: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "salajase võtme uuendamine ebaõnnestus: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Võtit ei muudetud, seega pole uuendamist vaja.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Vigane käsklus (proovige \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Selle võtme võib olla tühistanud %s võti %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (tundlik)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX loodud: %s aegub: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " usaldus: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "See võti on blokeeritud"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! alamvõti on tühistatud: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- leitud võltsitud tühistamine\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? probleem tühistamise kontrollimisel: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Tuleb tähele panna, et kuni te pole programmi uuesti käivitanud,ei pruugi "
-"näidatud võtme kehtivus olla tingimata korrektne.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"HOIATUS: See on PGP2-stiilis võti. Foto ID lisamine võib sundida mõningaid\n"
-" PGP versioone seda võtit tagasi lükkama.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Olete kindel, et soovite seda ikka lisada? (j/E) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Foto IDd ei saa PGP2 võtmele lisada.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Kustutan selle korrektse allkirja? (j/E/v)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Kustutan selle vigase allkirja? (j/E/v)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Kustutan selle tundmatu allkirja? (j/E/v)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Kas tõesti kustutan selle iseenda allkirja? (j/E)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Kustutatud %d allkiri.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Kustutatud %d allkirja.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Midagi ei kustutatud.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Sisestage võtmepikkus"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Palun eemaldage salajastelt võtmetelt valikud.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "palun valige ülimalt üks sekundaarne võti.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Muudan sekundaarse võtme aegumise aega.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Muudan primaarse võtme aegumise aega.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "v3 võtme aegumise aega ei saa muuta.\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Vastavat allkirja salajaste võtmete hoidlas pole\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Palun valige täpselt üks kasutaja ID.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "võti %08lX: kasutajal \"%s\" on vigane iseenda allkiri\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Kasutaja ID numbriga %d puudub\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Sekundaarne võti numbriga %d puudub\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "kasutaja ID: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"allkirjastatud teie võtmega %08lX %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"lokaalselt allkirjastatud teie võtmega %08lX %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "See allkiri aegub %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Olete kindel, et soovite seda ikka tühistada? (j/E) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Loon sellele allkirjale tühistamise sertifikaadi? (j/E) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Te olete allkirjastanud järgnevad kasutaja IDd:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " allkirjastanud %08lX %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " tühistanud %08lX %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Te asute tühistama järgmisi allkirju:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " allkirjastanud %08lX %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (mitte-eksporditav)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Kas tõesti loon tühistamise sertifikaadid? (j/E) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "salajast võtit pole\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr "Näitan %s foto IDd suurusega %ld, võti 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Allkirja poliitika: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Allkirja poliitika: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "HOIATUS: leidsin vigased noteerimise andmed\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Allkirja noteerimine: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Allkirja noteerimine: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "pole inimese poolt loetav"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Võtmehoidla"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [aegub: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "näita võtmeid ja sõrmejälgi"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Võtme sõrmejälg ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Võtme sõrmejälg ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Võtme sõrmejälg ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Võtme sõrmejälg ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "vigane teatelühendi algoritm `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s krüpteeritud andmed\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "krüpteeritud tundmatu algoritmiga %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "avalik võti on %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "avaliku võtmega krüpteeritud andmed: hea DEK\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "krüpteeritud %u-bitise %s võtmega, ID %08lX, loodud %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "krüpteeritud %s võtmega, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "avaliku võtmega lahtikrüpteerimine ebaõnnestus: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "eeldan %s krüpteeritud andmeid\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "IDEA ¨iffer pole saadaval, loodan kasutada selle asemel %s\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "lahtikrüpteerimine õnnestus\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "HOIATUS: krüpteeritud teadet on muudetud!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "lahtikrüpteerimine ebaõnnestus: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "MÄRKUS: saatja nõudis \"ainult-teie-silmadele\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "algne failinimi on='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "eraldiseisev tühistus - realiseerimiseks kasutage \"gpg --import\"\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Noteering: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Poliis: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "allkirja kontroll jäeti ära\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "neid allkirju ei õnnestu töödelda\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Allkirja lõi %.*s kasutades %s võtit ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "HALB allkiri kasutajalt \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Aegunud allkiri kasutajalt \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Korrektne allkiri kasutajalt \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[ebakindel]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " ka \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Allkirja ei saa kontrollida: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "ei ole eraldiseisev allkiri\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "eraldiseisev allkiri klassiga 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "vana stiili (PGP 2.x) allkiri\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "proc_tree() tuvastas vigase juurmise paketi\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "ei õnnestu blokeerida mälupildi salvestamist: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Eksperimentaalseid algoritme ei peaks kasutama!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"see ¨ifri algoritm ei ole soovitatav; kasutage palun mõnd standardsemat!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "IDEA ¨ifri lisandprogrammi pole\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr "lisainfot leiate lehelt http://www.gnupg.org/why-not-idea.html\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "HOIATUS: võtit %s ei soovitata kasutada.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "HOIATUS: võtit %s ei soovitata kasutada.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "palun kasutage selle asemel \"--keyserver-options %s\"\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "ei oska käsitleda avaliku võtme algoritmi %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "alampaketil tüübiga %d on kriitiline bitt seatud\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent ei ole sesses sessioonis kasutatav\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "agendile ei õnnestu seada kliendi pid\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "agendiga suhtlemiseks ei õnnestu saada lugemise FD\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "agendiga suhtlemiseks ei õnnestu saada kirjutamise FD\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "vigane GPG_AGENT_INFO keskkonnamuutuja\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "gpg-agendi protokolli versioon %d ei ole toetatud\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "ei õnnestu luua ühendust serveriga `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "probleem gpg-agent programmiga suhtlemisel\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "probleem agendiga - blokeerin agendi kasutamise\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (peamise võtme ID %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Te vajate kasutaja salajase võtme lahtilukustamiseks parooli:\n"
-"\"%.*s\"\n"
-"%u-bitti %s võti, ID %08lX, loodud %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Sisestage parool\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Korrake parooli\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "liiga pikk parool\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "vigane vastus agendilt\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "katkestatud kasutaja poolt\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "probleem agendiga: agent tagastas 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Te vajate kasutaja salajase võtme lahtilukustamiseks\n"
-"parooli: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bitine %s võti, ID %08lX, loodud %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "pakettmoodis ei saa parooli küsida\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Sisestage parool: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Korrake parooli: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "andmeid ei salvestatud; salvestamiseks kasutage võtit \"--output\"\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "viga `%s' loomisel: %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Eraldiseisev allkiri.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Palun sisestage andmefaili nimi: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "loen standardsisendit ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "allkirjastatud andmeid pole\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "allkirjastatud andmete avamine ebaõnnestus `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "anonüümne saaja; proovin salajast võtit %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "ok, me oleme anonüümne teate saaja.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "vana DEK kodeerimine ei ole toetatud\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "¨ifri algoritm %d%s on tundmatu või blokeeritud\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "MÄRKUS: ¨ifri algoritm %d puudub eelistustes\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "MÄRKUS: salajane võti %08lX aegus %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "võti %08lX: võti on tühistatud!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "küsin võtit %08lX HKP võtmeserverist %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "võtmeserverist ei saa võtit: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "viga teate saatmisel serverile `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "teate saatmine serverile `%s' õnnestus (olek=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "teate saatmine serverile `%s' ebaõnnestus: olek=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "otsin \"%s\" HKP serverist %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "võtmeserverist ei saa otsida: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "salajase võtme komponendid ei ole kättesaadavad\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "kaitse algoritm %d%s ei ole toetatud\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Vigane parool; palun proovige uuesti"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "HOIATUS: Tuvastasin nõrga võtme - palun muutke uuesti parooli.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"loon salajase võtme kaitseks mittesoovitavat 16 bitist kontrollsummat\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"see on PGP genereeritud ElGamal võti ja EI OLE allkirjastamiseks turvaline!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "avalik võti on %lu sekund uuem, kui allkiri\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "avalik võti on %lu sekundit uuem, kui allkiri\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr "võti loodi %lu sekund tulevikus (ajahüpe või kella probleem)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr "võti loodi %lu sekundit tulevikus (ajahüpe või kella probleem)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "MÄRKUS: allkirja võti %08lX aegus %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "eeldan tundmatu kriitilise biti tõttu vigast allkirja\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"HOIATUS: poliisi urli %%-asendus ebaõnnestus (liiga suur). Kasutan "
-"kompaktset.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"HOIATUS: poliisi urli %%-asendus ebaõnnestus (liiga suur). Kasutan "
-"kompaktset.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "Loodud allkirja ei õnnestu kontrollida: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s allkiri kasutajalt: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "HOIATUS: `%s' on tühi fail\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "PGP 2.x stiilis võtmetega saab allkirjastada ainult --pgp2 moodis\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "%s ei õnnestu luua: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "MÄRKUS: ¨ifri algoritm %d puudub eelistustes\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "allkirjastan:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"PGP 2.x stiilis võtmetega saab avateksti allkirjastada ainult --pgp2 moodis\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "kasutatakse %s krüpteerimist\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "ei suuda käsitleda tekstiridu mis on pikemad, kui %d sümbolit\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "sisendrida on pikem, kui %d sümbolit\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "trustdb kirje %lu: lseek ebaõnnestus: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "trustdb rec %lu: write failed (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "trustdb transaktsioon on liiga suur\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: ei õnnestu kasutada: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: kataloogi ei ole!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: ei õnnestu luua lukku\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: ei õnnestu seada lukku\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: ei õnnestu luua: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: versioonikirje loomine ei õnnestu: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: loodi vigane usalduse andmebaas\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: trustdb on loodud\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: vigane trustdb\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: paisktabeli loomine ebaõnnestus: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: viga versioonikirje uuendamisel: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: viga versioonikirje lugemisel: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: viga versioonikirje kirjutamisel: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "trustdb: lseek ebaõnnestus: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "trustdb: lugemine ebaõnnestus (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: ei ole trustdb fail\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: versioonikirje kirje numbriga %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: vigane faili versioon %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: viga vaba kirje lugemisel: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: viga kataloogikirje kirjutamisel: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: kirje nullimine ebaõnnestus: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: kirje lisamine ebaõnnestus: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "trustdb on vigane; palun käivitage \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' ei ole kehtiv pikk võtmeID\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "võti %08lX: aktsepteerin usaldusväärse võtmena\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "võti %08lX esineb trustdb failis enam kui korra\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "võti %08lX: usaldataval võtmel pole avalikku võtit - jätsin vahele\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "usalduse kirje %lu, päringu tüüp %d: lugemine ebaõnnestus: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "usalduse kirje %lu ei oma soovitud tüüpi %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "usalduse kirje %lu, tüüp %d: kirjutamine ebaõnnestus: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "trustdb: sync ebaõnnestus: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "trustdb kontrolliks puudub vajadus\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "trustdb järgmine kontroll %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "kontrollin trustdb faili\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "ei leia avalikku võtit %08lX: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "puudub absoluutselt usaldatava võtme %08lX avalik võti\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"kontrollin sügavusel %d allkirjastatud=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"allkirja ei õnnestu kontrollida.\n"
-"Palun pidage meeles, et allkirja fail (.sig või .asc)\n"
-"peab olema käsureal esimene fail.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "sisendrida %u on liiga pikk või seavahetus puudub\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"võti ei ole märgitud ebaturvaliseks - sellega ei saa võlts RNGd kasutada!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "`%s' jätsin vahele: duplikaat\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "`%s' jätsin vahele: %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "jätsin vahele: avalik võti on juba olemas\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"jätsin `%s' vahele: see on PGP genereeritud ElGamal võti,\n"
-"mis ei ole allkirjades kasutamiseks turvaline!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Fail `%s' on olemas. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Kirjutan üle (j/E)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: tundmatu suffiks\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Sisestage uus failinimi"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "kirjutan standardväljundisse\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "eeldan allkirjastatud andmeid failis `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: uus omaduste fail on loodud\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: kataloogi ei õnnestu luua: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: kataloog on loodud\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr "HOIATUS: teade on krüptitud sümmeetrilise ¨ifri nõrga võtmega.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "probleem krüptitud paketi käsitlemisel\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "loodi nõrk võti - proovin uuesti\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"sümmeetrilises ¨ifris ei õnnestu vältida nõrga võtme kasutamist; proovisin %"
-"d korda!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA nõuab 160 bitist räsialgoritmi kasutamist\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "pakettmoodis ei õnnestu seda võtmeta teha \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Kustutan selle võtme võtmehoidlast? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "See on salajane võti! - kas kustutan tõesti? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "võtmebloki kustutamine ebaõnnestus: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "omaniku usalduse info puhastatud\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "avaliku võtme \"%s\" jaoks on salajane võti!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "selle kustutamiseks kasutage võtit \"--delete-secret-keys\".\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Teie ülesanne on sisestada nüüd väärtus; seda väärtust ei avalikustata\n"
-"kolmandatele pooltele. Seda väärtust on vaja et realiseerida usaldusvõrk."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Usalduse võrgu loomiseks peab GnuPG teadma, millised võtmed on\n"
-"absoluutselt usaldatavad. Need on tavaliselt võtmed, mille puhul\n"
-"on teil juurdepääs ka nende salajastele võtmetele. Kui soovite\n"
-"määrata seda võtit absoluutselt usaldatavaks, vastake \"jah\"\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Kui te ikkagi soovite kasutada seda kehtetut võtit, vastake \"jah\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Kui te ikkagi soovite kasutada seda mitteusaldatavat võtit, vastake \"jah\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Sisestage kasutaja ID aadressile, kellele te soovite teadet saata."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Valige kasutatav algoritm.\n"
-"\n"
-"DSA (ka DSS) on digitaalallkirja algoritm, mida saab kasutada ainult\n"
-"allkirjades. See on soovitatav algoritm, kuna DSA allkirjade kontroll\n"
-"on oluliselt kiirem ElGamal allkirjade kontrollimisest.\n"
-"\n"
-"ElGamal on algoritm, mida saab kasutada nii allkirjastamisel, kui ka\n"
-"krüptimisel. OpenPGP eristab selle algoritmi kahte varianti: ainult\n"
-"krüptivat ja krüptivat ning allkirjastavat. Algoritm on sama, aga\n"
-"turvaliseks allkirjastamiseks on vaja valida sobivad parameetrid. See\n"
-"programm toetab mõlemat varianti, aga teised OpenPGP realisatsioonid\n"
-"ei pruugi krüptivat ning allkirjastavat võimalust tunda.\n"
-"\n"
-"Esimene (primaarne) võti peab alati olema selline, mida saab kasutada\n"
-"allkirjastamisel; see on ka põhjus, miks selles menüüs ei lubata valida\n"
-"ainult krüptivat ElGamal võtit."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Kuigi need võtmed on kirjeldatud dokumendis RFC2440, ei ole nende\n"
-"kasutamine soovitatav, kuna mitte kõik programmid ei toeta neid\n"
-"ja nendega loodud allkirjad on suured ning kontrollimine aeglane."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Sisestage võtmepikkus"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Vastake \"jah\" või \"ei\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Sisestage nõutav väärtus, nagu viibal näidati.\n"
-"Võimalik on ka sisestada ISO kuupäev (AAAA-KK-PP), aga te ei\n"
-"saa korrektset veateadet, kuna süsteem üritab antud väärtust\n"
-"tõlgendada vahemikuna."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Sisestage võtmehoidja nimi"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "palun e-posti aadress, aadress ei ole kohustuslik, aga väga soovitav"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Te võite nüüd sisestada kommentaari"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N et muuta nime.\n"
-"K et muuta kommentaari.\n"
-"E et muuta e-posti aadressi.\n"
-"O et jätkata võtme loomist.\n"
-"V et lõpetada võtme loomine."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Vastake \"jah\" (või \"j\"), kui võib alustada alamvõtme loomisega."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Kui te allkirjastate võtme kasutaja ID, kontrollige kõigepealt, kas võti\n"
-"ikka kuulub antud ID-ga näidatud isikule. Teistel inimestel on hea teada,\n"
-"kui hoolikalt te seda kontrolli olete teostanud.\n"
-"\n"
-"\"0\" tähendab, et te ei väida oma kontrollimise kohta midagi.\n"
-"\n"
-"\"1\" tähendab, et te usute, et võtit omab isik, kes seda väidab omavat, "
-"kuid\n"
-" te ei saanud või ei soovinud seda väidet täiendavalt kontrollida. See\n"
-" on kasulik \"persooni\" kontrolliks, kui te allkirjastate isiku pseudo-\n"
-" nüümi võtit.\n"
-"\n"
-"\"2\" tähendab, et te teostasite võtme pealiskaudset kontrolli. See võib\n"
-" näiteks tähendada, et te kontrollisite võtme sõrmejälge ja "
-"kontrollisite\n"
-" võtme kasutaja ID foto ID vastu.\n"
-"\n"
-"\"3\" tähendab, et te teostasite võtme põhjalikku kontrolli. See võib "
-"näiteks\n"
-" tähendada, et võrdlesite võtme sõrmejälge võrme omanikuga otse suheldes\n"
-" ja et te kontrollisite raskesti võltsitavast allikast (nt. pass) et\n"
-" võtme omaniku nimi vastab võtmel näidatud kasutaja IDle ja te kontrol-\n"
-" lisite, et võtmel näidatud e-posti aadress kuulub võtme omanikule.\n"
-"\n"
-"pange tähele, et näited tasemete 2 ja 3 juures on *ainult* näited. Sõltub\n"
-"ainult teist, milline on \"pealiskaudse\" ja \"põhjaliku\" kontrolli "
-"tähendus,\n"
-"kui te allkirjastate teisi võtmeid.\n"
-"\n"
-"Kui te ei tea õiget vastust, vastake \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Kui te soovite allkirjastada KÕIK kasutaja IDd, vastake \"jah\""
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Kui te tõesti soovite seda kasutaja IDd kustutada, vastake \"jah\".\n"
-"Sertifikaadid kustutatakse samuti!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Kui selle alamvõtme võib kustutada, vastake \"jah\""
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"See on võtme kehtiv allkiri; tavaliselt seda ei soovita kustutada,\n"
-"kuna see allkiri võib olla vajalik, et kirjeldada antud võtme või\n"
-"antud võtmega sertifitseeritud teise võtme usaldatavust."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Seda allkirja ei saa kontrollida, kuna puudub allkirjale vastav võti.\n"
-"Te peaksite peatama kustutamise, kuni on teada, millist võtit see\n"
-"kasutab, sest see võti võib moodustada usaldussuhte läbi mõne juba\n"
-"sertifitseeritud võtme."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "Allkiri ei ole kehtiv. Oleks mõistlik see võtmehoidlast kustutada."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"See allkiri seob kasutaja ID võtmega. Sellist allkirja ei ole\n"
-"üldiselt soovitatav eemaldada. Peale selle kustutamist ei pruugi\n"
-"GnuPG enam olla võimeline seda võtit leidma. Kustutada võiks\n"
-"vaid siis, kui see allkiri ei ole miskipärast kehtiv ja on\n"
-"olemas ka teine allkiri, mis kasutajat võtmega seob."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Muuda kõikide kasutaja ID-de seaded (või ainult valitud)\n"
-"vastavaks hetkel määratud seadetele. Kõikide asjasse puutuvate\n"
-"ise loodud allkirjade ajatempleid suurendatakse ühe sekundi võrra.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Palun sisestage parool; see on salajane tekst \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Palun korrake parooli, siis saate oma kirjutatus kindel olla."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Sisestage palun failinimi, mida allkirjastada"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Vastake \"jah\", kui faili võib üle kirjutada"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Palun sisestage uus failinimi. Kui te vajutate lihtsalt reavahetust,\n"
-"kasutatakse vaikimisi faili (nimi on nurksulgudes)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Te peate määrama sertifitseerimise põhjuse. Sõltuvalt kontekstist on\n"
-"teil võimalus valida üks järgnevaist:\n"
-" \"Võti on kompromiteeritud\"\n"
-" Kasutage seda, kui teil on põhjust uskuda, et autoriseerimata\n"
-" isikud on saanud juurdepääsu teie salajasele võtmele.\n"
-" \"Võti on asendatud\"\n"
-" Kasutage seda, kui te olete selle võtme asendanud uuemaga.\n"
-" \"Võti ei ole enam kasutusel\"\n"
-" Kasutage seda, kui te ei kasuta enam seda võtit.\n"
-" \"Kasutaja ID ei ole enam kehtiv\"\n"
-" Kasutage seda märkimaks, et konkreetset kasutaja ID ei peaks enam\n"
-" kasutama; seda kasutatakse tavaliselt märkimaks vigast e-posti "
-"aadressi.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Kui te soovite, võite nüüd sisestada põhjenduse, miks te\n"
-"soovite seda tühistamise sertifikaati esitada. Palun kirjutage\n"
-"lühidalt. Tühi rida lõpetab teksti.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Abiinfo puudub"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "`%s' kohta abiinfo puudub"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "viga võtmehoidla `%s' loomisel: %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "võtmehoidla `%s' on loodud\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "võtmehoidla vahemälu uuesti loomine ebaõnnestus: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "HOIATUS: on olemas 2 faili konfidentsiaalse infoga.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s ei ole muudetud\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s on uus\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Palun parandage see võimalik turvaprobleem\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "kontrollin võtmehoidlat `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "seni on kontrollitud %lu võtit (%lu allkirja)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "kontrollitud %lu võtit (%lu allkirja)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: võtmehoidla on loodud\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "te peate GnuPG uuesti käivitama, siis võetakse uued võtmed arvesse\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "`%s' õiguste muutmine ebaõnnestus: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NIMI=VÄÄRTUS|kasuta neid noteerimise andmeid"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "esimene sümbol noteerimise nimes peab olema täht või alakriips\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "punktid noteerimise nimes peavad olema ümbritsetud teiste sümbolitega\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "HOIATUS: Sellel võtmel on juba foto ID.\n"
-#~ " Järgmise foto ID lisamine võib tekitada segadusi mõne PGP\n"
-#~ " versiooni kasutamisel.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Võtmel võib olla ainult üks foto ID.\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Sõrmejälg:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Sõrmejälg:"
diff --git a/po/fr.po b/po/fr.po
deleted file mode 100644
index 709c670e9..000000000
--- a/po/fr.po
+++ /dev/null
@@ -1,4750 +0,0 @@
-# GnuPG French translation
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-# Gaël Quéri <gael@lautre.net>, 1998.
-#
-# Thanks to Rémi Guyomarch <rguyom@mail.dotcom.fr> and <nmorant@amadeus.net>
-# for pointing me out some errors.
-#
-# $Id$
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-06-24 02:06+02:00\n"
-"Last-Translator: Gaël Quéri <gael@lautre.net>\n"
-"Language-Team: French <traduc@traduc.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Avertissement: l'utilisation de la mémoire n'est pas sûre !\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "voir http://www.gnupg.org/fr/faq.html pour plus d'informations\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr ""
-"l'opération n'est pas possible tant que la mémoire sûre n'est pas\n"
-"initialisée\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(vous avez peut-être utilisé un programme non adapté à cette fin)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "oui"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "oO"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "non"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "quitter"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "erreur générale"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "type de paquet inconnu"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "version inconnue"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algorithme à clé publique inconnu"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algorithme de hachage inconnu"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "mauvaise clé publique"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "mauvaise clé secrète"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "mauvaise signature"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "somme de contrôle erronée"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "mauvais mot de passe"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "clé publique non trouvée"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algorithme de chiffrement inconnu"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "impossible d'ouvrir le porte-clés"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "paquet invalide"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armure invalide"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "pas d'utilisateur de ce nom"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "la clé secrète n'est pas disponible"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "mauvaise clé secrète utilisée"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "non supporté"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "mauvaise clé"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "erreur de lecture"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "erreur d'écriture"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algorithme de compression inconnu"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "erreur d'ouverture de fichier"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "erreur de création de fichier"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "mot de passe invalide"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algorithme à clé publique non implanté"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algorithme de chiffrement non implanté"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "classe de signature inconnue"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "erreur dans la base de confiance"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "mauvais entier en précision multiple (MPI)"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "limite de ressources atteinte"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "porte-clés invalide"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "mauvais certificat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "nom d'utilisateur malformé"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "erreur de fermeture de fichier"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "erreur pendant le changement de nom du fichier"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "erreur pendant la suppression du fichier"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "données inattendues"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "conflit de dates"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algorithme de clés publiques inutilisable"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "le fichier existe"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "clé faible"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argument invalide"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "mauvaise adresse (URI)"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI non supportée"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "erreur de réseau"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "non chiffré"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "non traité"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "clé publique inutilisable"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "clé secrète inutilisable"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "erreur du serveur de clés"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... c'est un bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "vous avez trouvé un bug... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "impossible d'ouvrir `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "impossible d'accéder à `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' n'est pas un fichier régulier - ignoré\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "note: le fichier `random_seed' est vide\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"avertissement: la taille du fichier `random_seed' est invalide.\n"
-"Celui-ci ne sera pas utilisé.\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "impossible de lire `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "note: le fichier `random_seed' n'a pas été mis à jour\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "impossible de créer `%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "impossible d'écrire `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "impossible de fermer `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr ""
-"ATTENTION: utilisation d'un générateur de nombres aléatoires peu sûr !!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Le générateur de nombres aléatoires n'est qu'un artifice visant à exécuter\n"
-"GnuPG - ce n'est en aucune manière un générateur (RNG) fort!\n"
-"\n"
-"N'UTILISEZ PAS LES DONNÉES GÉNÉRÉES PAR CE PROGRAMME !!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Il n'y a pas assez d'octets aléatoires disponibles. Faites autre chose\n"
-"pour que l'OS puisse amasser plus d'entropie ! (il faut %d octets de plus)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Commandes:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[fichier]|faire une signature"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[fichier]|faire une signature en texte clair"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "faire une signature détachée"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "chiffrer les données"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "[fichier]|chiffrer les fichiers"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "chiffrement symétrique seulement"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "pas d'action"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "déchiffrer les données (défaut)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[fichiers]|déchiffrer les fichiers"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "vérifier une signature"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "lister les clés"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "lister les clés et les signatures"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "vérifier les signatures des clés"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "lister les clés et les empreintes"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "lister les clés secrètes"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "générer une nouvelle paire de clés"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "enlever les clés du porte-clés public"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "enlever les clés du porte-clés secret"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "signer une clé"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "signer une clé localement"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "signer une clé irrévocablement"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "signer une clé localement et irrévocablement"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "signer ou éditer une clé"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "générer un certificat de révocation"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exporter les clés"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exporter les clés vers un serveur de clés"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importer les clés d'un serveur de clés"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "chercher les clés avec un serveur de clés"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "mettre à jour les clés depuis un serveur"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importer/fusionner les clés"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "ne lister que les paquets"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exporter les indices de confiance"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importer les indices de confiance"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "mettre la base de confiance à jour"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "mise à jour inattendue de la base de confiance"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "réparer une base de confiance corrompue"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Enlever l'armure d'un fichier ou de stdin"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Mettre une armure à un fichier ou à stdin"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|alg. [fich.]|indiquer les fonctions de hachage"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Options:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "créer une sortie ascii avec armure"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOM|chiffrer pour NOM"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOM|utiliser NOM comme récipient par défaut"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "utiliser la clé par déf. comme récipient"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "utiliser ce nom pour signer ou déchiffrer"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|niveau de compression N (0 désactive)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "utiliser le mode texte canonique"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "utiliser comme fichier de sortie"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "bavard"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "devenir beaucoup plus silencieux"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "ne pas utiliser du tout le terminal"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "forcer les signatures en v3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "ne pas forcer les signatures en v3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "forcer les signatures en v4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "ne pas forcer les signatures en v4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "toujours utiliser un sceau pour le chiffrement"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr ""
-"ne jamais utiliser de sceau pour le\n"
-"chiffrement"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "ne rien changer"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "utiliser gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "mode automatique: ne jamais rien demander"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "répondre oui à la plupart des questions"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "répondre non à la plupart des questions"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "ajouter ce porte-clés à la liste"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "ajouter ce porte-clés secret à la liste"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "indiquer où est une clé listée"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOM|utiliser NOM comme clé secrète par défaut"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HÔTE|utiliser ce serveur pour chercher des clés"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NOM|le terminal utilise la table de caractères NOM"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "lire les options du fichier"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|écrire l'état sur ce descripteur"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[fichier]|écrire les informations d'état vers ce fichier"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|IDCLÉ|donner une confiance ultime à cette clé"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FICH|charger le module d'extension FICH"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "imiter le mode décrit dans la RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "utiliser le comportement défini par OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"utiliser le comportement de PGP 2.x\n"
-"pour toutes les options de paquets,\n"
-"de hachage et de chiffrement"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|coder les mots de passe suivant le mode N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NOM|utiliser le hachage NOM pour les mots de passe"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NOM|utiliser le chiffre NOM pour les mots de passe"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOM|utiliser l'algorithme de chiffrement NOM"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOM|utiliser la fonction de hachage NOM"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|utiliser l'algorithme de compression N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "supprimer l'ident. des paquets chiffrés"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Montrer les photos d'identité"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Ne pas montrer les photos d'identité"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-"Choisir la ligne de commande servant à\n"
-"afficher les photos d'identité"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Voir la page de manuel pour une liste complète des commandes et options)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Exemples:\n"
-"\n"
-" -se -r Alice [fichier] signer et chiffrer pour l'utilisateur Alice\n"
-" --clearsign [fichier] faire une signature en texte clair\n"
-" --detach-sign [fichier] faire une signature détachée\n"
-" --list-keys [utilisateur] montrer les clés\n"
-" --fingerprint [utilisateur] montrer les empreintes\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr ""
-"Signaler toutes anomalies à <gnupg-bugs@gnu.org> (en anglais)\n"
-"et tout problème de traduction à <traduc@traduc.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Utilisation: gpg [options] [fichiers] (-h pour l'aide)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Syntaxe: gpg [options] [fichiers]\n"
-"signer, vérifier, chiffrer ou déchiffrer\n"
-"l'opération par défaut dépend des données entrées\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algorithmes supportés:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "utilisation: gpg [options] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "commandes en conflit\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Attention: propriétaire de %s \"%s\" peu sûr\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Attention: permissions de %s \"%s\" peu sûres\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Attention: propriétaire de %s \"%s\" peu sûr\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Attention: permissions de %s \"%s\" peu sûres\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTE: pas de fichier d'options par défaut `%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTE: pas de fichier d'options par défaut `%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "fichier d'options `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "lire les options de `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s n'est pas une table de caractères valide\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "impossible d'interpréter l'URI du serveur de clés\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: version %d du fichier invalide\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armure invalide"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: version %d du fichier invalide\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "porte-clés invalide"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "impossible de mettre le chemin d'exécution à %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "ATTENTION: Le programme peut créer un fichier «core» !\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "ATTENTION: %s remplace %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTE: %s n'est pas pour une utilisation normale !\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s n'est pas permis avec %s !\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s n'a aucun sens avec %s !\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"il n'est possible de faire une signature détachée ou en texte clair\n"
-"qu'en mode --pgp2\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "vous ne pouvez pas signer et chiffrer en même temps en mode --pgp2\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-"vous devez utiliser des fichiers (et pas un tube) lorsque --pgp2\n"
-"est activé.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-"chiffrer un message en mode --pgp2 nécessite l'algorithme de chiffrage IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "ce message ne sera pas forcément utilisable par PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "l'algorithme de chiffrement sélectionné est invalide\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "la fonction de hachage sélectionnée est invalide\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "la fonction de hachage sélectionnée est invalide\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "l'algorithme de compression doit faire partie de l'intervalle %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "«completes-needed» doit être supérieur à 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "«marginals-needed» doit être supérieur à 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "«max-cert-depth» doit être compris entre 1 et 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTE: le mode S2K simple (0) est fortement déconseillé\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "mode S2K invalide; ce doit être 0, 1 ou 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "default-check-level invalide; ce doit être 0, 1, 2 ou 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "préférences invalides\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "préférences invalides\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "préférences invalides\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "préférences invalides\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "impossible d'initialiser la base de confiance: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [nom du fichier]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [nom du fichier]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [nom du fichier]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [nom du fichier]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [nom du fichier]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [nom du fichier]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [nom du fichier]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [nom du fichier]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key utilisateur"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key utilisateur"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key utilisateur"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key utilisateur"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key utilisateur [commandes]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "impossible d'ouvrir %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [utilisateur] [porte-clés]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "la suppression d'une armure a échoué: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "la construction d'une armure a échoué: %s \n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algorithme de hachage `%s' invalide\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nom du fichier]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Vous pouvez taper votre message...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "impossible d'ouvrir `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"le nom d'une notation ne doit comporter que des lettres, des chiffres,\n"
-"des points ou des traits de soulignement et doit se terminer par un signe "
-"égal\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "une valeur de notation ne doit utiliser aucun caractère de contrôle\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "l'URL de politique de certification donnée est invalide\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "l'URL de politique de signature donnée est invalide\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armure: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "en-tête d'armure invalide: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "en-tête d'armure: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "en-tête de signature claire invalide\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "signatures en texte clair imbriquées\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "ligne échappée par `-' invalide: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armure inattendue:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "caractère %02x invalide en base 64 ignoré\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "fin de fichier prématurée (pas de CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "fin de fichier prématurée (dans le CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC déformé\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "Erreur de CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "fin de fichier prématurée (dans la remorque)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "erreur dans la ligne de remorque\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "aucune donnée OpenPGP valide n'a été trouvée.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armure invalide: ligne plus longue que %d caractères\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"caractère cité-imprimable (quoted-printable) dans l'armure provenant\n"
-"certainement d'un agent de transfert de messages bogué\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Aucune raison spécifiée"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "La clé a été remplacée"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "La clé a été compromise"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "La clé n'est plus utilisée"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Le nom d'utilisateur n'est plus valide"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Cause de révocation: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Commentaire de révocation: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Pas de confiance définie pour :\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"À quel point avez-vous confiance en cet utilisateur pour la vérification\n"
-"des clés des autres utilisateurs (vous pouvez vérifier son passeport,\n"
-"vérifier les empreintes de diverses sources...) ?\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = ne sait pas\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = je ne fais PAS confiance\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = je crois marginalement\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = je fais entièrement confiance\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = je donne une confiance ultime\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = donnez-moi plus d'informations\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = retour au menu principal\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = sauter cette clé\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = quitter\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Votre décision ? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Voulez-vous vraiment donner une confiance ultime à cette clé ?"
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificats conduisant vers une clé à confiance ultime:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "clé %08lX: la clé a été révoquée !\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Utiliser cette clé quand même ? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "clé %08lX: la sous-clé a été révoquée !\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: la clé a expiré\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr "%08lX: Rien ne dit que la clé appartient vraiment au propriétaire.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Nous ne faisons PAS confiance à cette clé\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Il n'est pas sûr que cette clé appartient vraiment à son\n"
-"propriétaire mais elle est quand même acceptée\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Cette clé appartient probablement à son propriétaire\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Cette clé nous appartient\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Il n'est pas certain que la clé appartient à sos propriétaire.\n"
-"Si vous savez *vraiment* ce que vous faites, vous pouvez répondre\n"
-"oui à la prochaine question\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "ATTENTION: Utilisation d'une clé sans confiance !\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "ATTENTION: Cette clé à été révoquée par son propriétaire !\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Cela pourrait signifier que la signature est fausse.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "ATTENTION: Cette sous-clé à été révoquée par son propriétaire !\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Note: cette clé a été désactivée.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Note: Cette clé a expiré !\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr ""
-"ATTENTION: Cette clé n'est pas certifiée avec une signature de confiance !\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Rien ne dit que la signature appartient à son propriétaire.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "ATTENTION: Nous ne faisons PAS confiance à cette clé !\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " La signature est certainement FAUSSE.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"ATTENTION: Les signatures de cette clé n'ont pas une confiance suffisante !\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr ""
-" Il n'est pas sûr que la signature appartient à son "
-"propriétaire.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ignoré: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ignoré: clé publique déjà présente\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr ""
-"Vous n'avez pas spécifié de nom d'utilisateur. (vous pouvez\n"
-"utiliser «-r»)\n"
-"\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Entrez le nom d'utilisateur, en terminant par une ligne vide: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Pas d'utilisateur de ce nom.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "ignoré: la clé publique est déjà le récipient par défaut\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "La clé publique est désactivée.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "ignoré: clé publique déjà activée\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "récipient par défaut `%s' inconnu\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ignoré: la clé publique est désactivée\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "pas de destinataire valide\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "la préférence %c%lu n'est pas valide\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "préférence %c%lu dupliquée\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "trop de préférences `%c'\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "Caractère invalide dans la chaîne de préférences\n"
-
-# g10/keygen.c:123 ???
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "écriture de l'auto-signature\n"
-
-# g10/keygen.c:123 ???
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "écriture de l'auto-signature\n"
-
-# g10/keygen.c:161 ???
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "écriture de la signature de liaison\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "Taille invalide; utilisation de %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "taille arrondie à %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Sélectionnez le type de clé désiré:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA et ElGamal (par défaut)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (signature seule)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (chiffrement seul)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signature et chiffrement)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (signature seule)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (chiffrement seul)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signature et chiffrement)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Votre choix ? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-"L'utilisation de cet algorithme est déconseillé - faut-il quand-même\n"
-"créer la clé ?"
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Choix invalide.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Préparation à la génération d'une nouvelle paire de clés %s.\n"
-" la taille minimale est 768 bits\n"
-" la taille par défaut est 1024 bits\n"
-" la taille maximale conseillée est 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Quelle taille de clé désirez-vous ? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA permet seulement des tailles comprises entre 512 et 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "taille trop petite; 1024 est la plus petite valeur permise pour RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "taille trop petite; 768 est la plus petite valeur permise.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "taille trop importante; %d est la plus grande valeur permise.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Les tailles supérieures à 2048 ne sont pas conseillées car\n"
-"les calculs prennent VRAIMENT beaucoup de temps !\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Etes-vous sûr de vouloir cette taille ? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"D'accord, mais n'oubliez pas que les radiations de votre écran et de votre\n"
-"clavier sont aussi très vulnérables aux attaques !\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "La taille demandée est %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "arrondie à %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Spécifiez combien de temps cette clé devrait être valide.\n"
-" 0 = la clé n'expire pas\n"
-" <n> = la clé expire dans n jours\n"
-" <n>w = la clé expire dans n semaines\n"
-" <n>m = la clé expire dans n mois\n"
-" <n>y = la clé expire dans n années\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Spécifiez combien de temps la signature devrait être valide.\n"
-" 0 = la signature n'expire pas\n"
-" <n> = la signature expire dans n jours\n"
-" <n>w = la signature expire dans n semaines\n"
-" <n>m = la signature expire dans n mois\n"
-" <n>y = la signature expire dans n années\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "La clé est valide pour ? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "La signature est valide pour ? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valeur invalide\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s n'expire pas du tout\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s expire le %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Votre système ne sait pas afficher les dates au-delà de 2038.\n"
-"Cependant la gestion des dates sera correcte jusqu'à 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Est-ce correct (o/n) ? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Vous avez besoin d'un nom d'utilisateur pour identifier votre clé; le\n"
-"programme le construit à partir du nom réel, d'un commentaire et d'une\n"
-"adresse e-mail de cette manière:\n"
-" « Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de> »\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nom réel: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Caractère invalide dans le nom\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Le nom ne doit pas commencer par un chiffre\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Le nom doit faire au moins 5 caractères de long\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Adresse e-mail: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Ce n'est pas une adresse e-mail valide\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Commentaire: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Caractère invalide dans le commentaire\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Vous utilisez le jeu de caractères '%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Vous avez sélectionné ce nom d'utilisateur:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-"Ne mettez pas d'adresse e-mail dans le nom réel ou dans le commentaire\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoQq"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (Q)uitter ? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (O)K/(Q)uitter ? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Corrigez l'erreur d'abord\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Vous avez besoin d'un mot de passe pour protéger votre clé secrète.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "le mot de passe n'a pas été correctement répété ; recommencez."
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Vous ne voulez pas de mot de passe - c'est sûrement une *mauvaise* idée !\n"
-"Je l'accepte quand-même. Vous pouvez changer votre mot de passe quand vous\n"
-"le désirez, en utilisant ce programme avec l'option « --edit-key ».\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Un grand nombre d'octets aléatoires doit être généré. Vous devriez faire\n"
-"autre-chose (taper au clavier, déplacer la souris, utiliser les disques)\n"
-"pendant la génération de nombres premiers; cela donne au générateur de\n"
-"nombres aléatoires une meilleure chance d'avoir assez d'entropie.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "La paire de clés DSA fera 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "La génération de clé a été annulée.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "écriture de la clé publique vers `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "écriture de la clé secrète vers `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr ""
-"aucun portes-clés public n'a été trouvé avec des droits d'écriture : %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr ""
-"aucun portes-clés secret n'a été trouvé avec des droits d'écriture : %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "erreur durant l'écriture du porte-clés public `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "erreur durant l'écriture du porte-clés secret `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "les clés publique et secrète ont été créées et signées.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "clé marquée comme ayant une confiance ultime.\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Notez que cette clé ne peut être utilisée pour chiffrer. Vous pouvez\n"
-"utiliser la commande «--edit-key» pour générer une clé secondaire à\n"
-"cette fin.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "La génération de clé a échoué: %s\n"
-
-# on s'amuse comme on peut...
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"la clé a été créée %lu seconde dans le futur (rupture spatio-temporelle ou\n"
-"problème d'horloge)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"la clé a été créée %lu secondes dans le futur (rupture spatio-temporelle ou\n"
-"problème d'horloge\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr ""
-"NOTE: créer des sous-clés pour des clés v3 n'est pas conforme à OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Créer vraiment ? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output n'est pas compatible avec cette commande\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: impossible d'ouvrir: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "erreur pendant la création du mot de passe: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' déjà compressé\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ATTENTION: fichier vide\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"le chiffrement RSA ne se fait qu'avec des clés de moins de 2048 bits\n"
-"en mode --pgp2\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "lecture de `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"impossible d'utiliser le chiffre IDEA pour toutes les clés vers\n"
-"lesquelles vous chiffrez.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"NOTE: l'algorithme de chiffrement %d n'a pas été trouvé dans les "
-"préférences\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Cette commande n'est pas admise en mode %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s chiffré pour: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "clé '%s' introuvable: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "erreur pendant la lecture du bloc de clé : %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "clé %08lX: ce n'est pas une clé rfc2440 - ignorée\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "clé %08lX: non protégée - ignorée\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "clé %08lX: clé de style PGP 2.x - ignorée\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "ATTENTION: rien n'a été exporté\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "trop d'entrées dans le cache pk - désactivé\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Nom utilisateur introuvable]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"La clé invalide %08lX a été rendue valide par --allow-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr ""
-"utilisation de la clé secondaire %08lX à la place de la clé\n"
-"principale %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "clé %08lX: clé secrète sans clé publique - non prise en compte\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "un bloc de type %d a été ignoré\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu clés traitées jusqu'ici\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "erreur pendant la lecture de `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr " Quantité totale traitée: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " nouvelles clés ignorées: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sans nom d'utilisateur: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importée: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " inchangée: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nouveaux noms d'utilisateurs: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nouvelles sous-clés: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nouvelles signatures: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " nouvelles révocations de clés: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " clés secrètes lues: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " clés secrètes importées: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " clés secrètes inchangées: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importée: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "clé %08lX: pas de nom d'utilisateur\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "clé %08lX: pas de sous-clé pour relier la clé\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "clé %08lX: nom d'utilisateur non auto-signé accepté '%s':\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "clé %08lX: pas de nom d'utilisateur valide\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "cela peut provenir d'une auto-signature manquante\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "clé %08lX: clé publique pas trouvée: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "clé %08lX: nouvelle clé - ignorée\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "aucun porte-clé n'a été trouvé avec des droits d'écriture : %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "écriture de `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "erreur durant l'écriture du porte-clés `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "clé %08lX: clé publique importée\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "clé %08lX: ne ressemble pas à notre copie\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "clé %08lX: impossible de trouver le bloc de clés original: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "clé %08lX: impossible de lire le bloc de clés original: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "clé %08lX: un nouvel utilisateur\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "clé %08lX: %d nouveaux utilisateurs\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "clé %08lX: une nouvelle signature\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "clé %08lX: %d nouvelles signatures\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "clé %08lX: une nouvelle sous-clé\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "clé %08lX: %d nouvelles sous-clés\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "clé %08lX: n'a pas changé\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "pas de porte-clés par défaut: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "clé %08lX: clé secrète importée\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "clé %08lX: déjà dans le porte-clés secret\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "clé %08lX: clé secrète pas trouvée: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"clé %08lX: pas de clé publique - le certificat de révocation ne peut\n"
-"être appliqué\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "clé %08lX: certificat de révocation invalide: %s - rejeté\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "clé %08lX: certificat de révocation importé\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "clé %08lX: pas d'utilisateur pour la signature\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"clé %08lX: algorithme de clé publique non supporté sur le nom\n"
-"d'utilisateur \"%s\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "clé %08lX: auto-signature sur le nom d'utilisateur \"%s\" invalide\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "clé %08lX: pas de sous-clé pour relier la clé\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "clé %08lX: algorithme de clé publique non supporté\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "clé %08lX: liaison avec la sous-clé invalide\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "clé %08lX: liaison avec la sous-clé invalide\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "clé %08lX: pas de sous-clé pour relier la clé\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "clé %08lX: liaison avec la sous-clé invalide\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "clé %08lX: liaison avec la sous-clé invalide\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "clé %08lX: utilisateur non pris en compte: '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "clé %08lX: sous-clé non prise en compte\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "clé %08lX: signature non exportable (classe %02x) - ignorée\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "clé %08lX: certificat de révocation au mauvais endroit - ignorée\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "clé %08lX: certificat de révocation invalide: %s - ignorée\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "clé %08lX: certificat de révocation au mauvais endroit - ignorée\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "clé %08lX: nom d'utilisateur en double fusionné\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"Attention: la clé %08lX est peut-être révoquée: recherche de la clé de\n"
-"révocation %08lX\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"Attention: la clé %08lX est peut-être révoquée: la clé de révocation\n"
-"%08lX est absente.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "clé %08lX: certificat de révocation ajouté\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "clé %08lX: ajout de la signature de clé directe\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[révocation]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[auto-signature]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "une mauvaise signature\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d mauvaises signatures\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "une signature non vérifiée à cause d'une clé manquante\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signatures non vérifiées à cause de clés manquantes\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "une signature non vérifiée à cause d'une erreur\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signatures non vérifiées à cause d'erreurs\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "un nom d'utilisateur sans auto-signature valide détecté\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d nom d'utilisateurs sans auto-signature valide détecté\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Le nom d'utilisateur \"%s\" est révoqué."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Etes-vous sur de toujours vouloir le signer ? (o/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Impossible de signer.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "AVERTISSEMENT: `%s' est un fichier vide\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Votre signature actuelle sur \"%s\"\n"
-"est locale.\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Voulez vous la rendre complètement exportable ? (o/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Votre signature actuelle sur \"%s\"\n"
-"est locale.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "Voulez vous la rendre complètement exportable ? (o/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" a déjà été signé localement par la clé %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" a déjà été signé localement par la clé %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Rien à signer avec la clé %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Cette clé a expiré !"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Cette clé va expirer le %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Voulez-vous que votre signature expire en même temps ? (O/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"il n'est pas possible de générer une signature OpenPGP sur une clé de style\n"
-"PGP 2.x en mode --pgp2.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Cela rendra la clé inutilisable par PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Avec quel soin avez-vous vérifié que la clé que vous allez signer\n"
-"appartient réellement à la personne sus-nommée ? Si vous ne savez\n"
-"quoi répondre, entrez \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Je ne répondrai pas.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Je n'ai pas vérifié du tout.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) J'ai un peu vérifié.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) J'ai vérifié très soigneusement.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Etes-vous vraiment sûr(e) que vous voulez signer cette clé\n"
-"avec la vôtre: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "cela peut provenir d'une auto-signature manquante\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La signature sera marquée comme non-exportable.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La signature sera marquée comme non-révocable.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La signature sera marquée comme non-exportable.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La signature sera marquée comme non-révocable.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Je n'ai pas du tout vérifié cette clé.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"J'ai un peu vérifié cette clé.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"J'ai vérifié cette clé avec grand soin.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Signer réellement ? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "la signature a échoué: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Cette clé n'est pas protégée.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Les parties secrètes de la clé principale ne sont pas disponibles.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "La clé est protégée.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Impossible d'éditer cette clé: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr "Entrez le nouveau mot de passe pour cette clé secrète.\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Vous ne voulez pas de mot de passe - cela est certainement une\n"
-"*mauvaise* idée\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Voulez-vous vraiment faire cela ? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "replacer la signature d'une clé à l'endroit correct\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "quitter ce menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "enregistrer"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "enregistrer et quitter"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "afficher cette aide"
-
-# g10/keyedit.c:556 ???
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "afficher l'empreinte"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "lister"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "lister la clé et les noms d'utilisateurs"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "sélectionner le nom d'utilisateur N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "clé"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "sélectionner la clé secondaire N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "vérifier"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "lister les signatures"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "signer"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "signer la clé"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsigner"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "signer la clé localement"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsigner"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "signer la clé de façon non-révocable"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsigner"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "signer la clé de façon locale et non-révocable"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "déboguer"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "aj.ut"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "ajouter un utilisateur"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "aj.photo"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "ajouter une photo d'identité"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "suppr.ut"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "enlever un utilisateur"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "suppr.photo"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "aj.clé"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "ajouter une clé secondaire"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "suppr.clé"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "enlever une clé secondaire"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "aj.clé"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "ajouter une clé secondaire"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "suppr.sign"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "supprimer les signatures"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "changer la date d'expiration"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "principale"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "marquer le nom d'utilisateur comme principal"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "changer"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "passer de la liste des clés secrètes aux clés privées et inversement"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "préf"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "lister les préférences (expert)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "montr.préf"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "lister les préférences (bavard)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "mettre.préf"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "donner la liste de préférences"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "préf.màj"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "préférences mises à jour"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "mot.pas"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "changer le mot de passe"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "confi."
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "changer la confiance"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "révoquer les signatures"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revclé"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "révoquer une clé secondaire"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "désactiver"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "désactiver une clé"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "activer"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "activer une clé"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "montr.photo"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "montrer la photo d'identité"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "impossible de faire cela en mode automatique\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "erreur pendant la lecture du bloc de clé secrète `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "La clé secrète est disponible.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Commande> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Il faut la clé secrète pour faire cela.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Utilisez la commande «toggle» d'abord.\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "La clé est révoquée."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Signer vraiment tous les utilisateurs ? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Aide: Sélectionner les utilisateurs à signer\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Cette commande n'est pas admise en mode %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Vous devez sélectionner au moins un utilisateur.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Vous ne pouvez pas supprimer le dernier utilisateur !\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Enlever réellement tous les utilisateurs sélectionnés ? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Enlever réellement cet utilisateur ? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Vous devez sélectionner au moins une clé.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Voulez-vous vraiment supprimer les clés sélectionnées ? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Voulez-vous vraiment supprimer cette clé ? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Voulez-vous vraiment révoquer les clés sélectionnées ? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Voulez-vous vraiment révoquer cette clé ? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Enlever réellement les préférences des utilisateurs sélectionnés ? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Faut-il vraiment mettre à jour les préférences ? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Enregistrer les changements? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Quitter sans enregistrer? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "la mise à jour a échoué: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "la mise à jour de la clé secrète a échoué: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "La clé n'a pas changé donc la mise à jour est inutile.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Commande invalide (essayez «help»)\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Cette clé peut être révoquée par la clé %s %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (sensible)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX créée: %s expire: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " confiance: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Cette clé a été désactivée"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! la sous-clé a été révoquée: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- une révocation truquée a été trouvée\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problème de vérification de la révocation: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Notez que la validité affichée pour la clé n'est pas nécessairement\n"
-"correcte à moins de redémarrer le programme.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"ATTENTION: C'est une clé du style PGP2. Ajouter une photo\n"
-"d'identité peut empêcher certaines versions de PGP d'accepter\n"
-"cette clé\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Etes-vous sur de vouloir l'ajouter ? (y/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-"Vous ne pouvez pas ajouter de photo d'identité à une clé du style PGP2.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Supprimer cette bonne signature ? (o/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Supprimer cette signature invalide ? (o/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Supprimer cette signature inconnue ? (o/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Faut-il vraiment supprimer cette auto-signature ? (o/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d signature supprimée.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d signatures supprimées\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Rien n'a été supprimé.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Entrez la taille de la clé"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Enlevez les sélections des clés secrètes.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Vous devez sélectionner au plus une clé secondaire.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Changer la date d'expiration d'une clé secondaire.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Changer la date d'expiration de la clé principale.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Vous ne pouvez pas changer la date d'expiration d'une clé v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Pas de signature correspondante dans le porte-clés secret\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Vous devez sélectionner exactement un utilisateur.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "clé %08lX: auto-signature sur le nom d'utilisateur \"%s\" invalide\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Pas d'utilisateur avec l'index %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Pas de clé secondaire avec l'index %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "nom d'utilisateur: «"
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"»\n"
-"signé avec votre clé %08lX à %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"signé localement avec votre clé %08lX à %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Cette signature a expiré le %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Etes-vous sur de vouloir toujours le révoquer ? (y/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Générer un certificat de révocation pour cette signature ? (o/N) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Vous avez signé ces noms d'utilisateurs:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " signé par %08lX à %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " révoqué par %08lX à %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Vous êtes sur le point de révoquer ces signatures:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " signé par %08lX à %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (non-exportable)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Créer réellement les certificats de révocation ? (o/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "pas de clé secrète\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Affichage %s photo d'identité de taille %ld pour la clé 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Politique de signature: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Politique de signature: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "ATTENTION: des données de notation invalides ont été détectées\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notation de signature: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Notation de signature: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "illisible par un humain"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Porte-clés"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [expire: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "lister les clés et les empreintes"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Empreinte de la clé ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Empreinte de la clé ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Empreinte de la clé ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Empreinte de la clé ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algorithme de hachage `%s' invalide\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "données chiffrées avec %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "chiffré avec l'algorithme inconnu %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "la clé publique est %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "données chiffrées par clé publique: bonne clé de chiffrement (DEK)\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "chiffré avec une clé de %u bits %s, ID %08lX, créée le %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "chiffré avec une clé %s, %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "le déchiffrement par clé publique a échoué: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "on suppose des données chiffrées avec %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-"L'algorithme IDEA n'est pas disponible, avec un peu de chance %s marchera\n"
-"peut-être\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "le déchiffrement a réussi\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "ATTENTION: le message chiffré a été manipulé !\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "le déchiffrement a échoué: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTE: l'expéditeur a demandé «pour vos yeux seulement»\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nom de fichier original: '%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "révocation autonome - utilisez «gpg --import» pour l'appliquer\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notation: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Politique: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "vérification de signature supprimée\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "le traitement de ces signatures multiples est impossible\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Signature faite %.*s avec une clé %s ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "MAUVAISE signature de \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Signature expirée de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Bonne signature de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[incertain]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Impossible de vérifier la signature: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "la signature n'est pas détachée\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "signature autonome de classe 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "signature d'un ancien style (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "paquet racine invalide détecté dans proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "impossible d'empêcher la génération de fichiers «core»: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Les algorithmes expérimentaux ne devraient pas être utilisés !\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"Cet algorithme de chiffrement est déconseillé; utilisez-en un\n"
-"plus standard !\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "le module de chiffrement IDEA n'est pas présent\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"voir http://www.gnupg.org/fr/why-not-idea.html pour plus d'informations\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "AVERTISSEMENT: `%s' est une option déconseillée.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "AVERTISSEMENT: `%s' est une option déconseillée.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "utilisez \"--keyserver-options %s\" à la place\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "impossible de gérer l'algorithme à clé publique %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "un sous-paquet de type %d possède un bit critique\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent n'est pas disponible dans cette session\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "impossible d'obtenir le pid du client pour l'agent\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr ""
-"impossible d'obtenir le descripteur de lecture du serveur\n"
-"pour l'agent\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr ""
-"impossible d'obtenir le descripteur d'écriture du serveur pour l'agent\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "la variable d'environnement GPG_AGENT_INFO est mal définie\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "le protocole gpg-agent version %d n'est pas supporté\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "impossible de se connecter à `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problème de communication avec ssh-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problème avec l'agent - arrêt d'utilisation de l'agent\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (ID clé principale %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Vous avez besoin d'un mot de passe pour déverrouiller la clé secrète pour\n"
-"l'utilisateur:\n"
-"\"%.*s\"\n"
-"clé %u bits %s, ID %08lX, créée %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Entrez le mot de passe\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Répétez le mot de passe\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "mot de passe trop long\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "réponse de l'agent invalide\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "annulé par l'utilisateur\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problème avec l'agent : l'agent renvoie 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Vous avez besoin d'un mot de passe pour déverrouiller la clé secrète pour\n"
-"l'utilisateur: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "clé de %u bits %s, ID %08lX, créée le %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "impossible de demander un mot de passe en mode automatique\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Entrez le mot de passe: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Répétez le mot de passe: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"les données ne sont pas enregistrées; utilisez l'option «--output» pour\n"
-"les enregistrer\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "erreur pendant la création de `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Signature détachée.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Entrez le nom du fichier de données: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "lecture de l'entrée standard...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "pas de données signées\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "impossible d'ouvir les données signées `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinataire anonyme; essai de la clé secrète %08lX...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "d'accord, nous sommes le récipient anonyme.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "l'ancien codage de la clé de chiffrement (DEK) n'est pas supporté\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "l'algorithme de chiffrement %d%s est inconnu ou désactivé\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr ""
-"NOTE: l'algorithme de chiffrement %d n'a pas été trouvé dans les "
-"préférences\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTE: la clé secrète %08lX a expiré le %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "clé %08lX: la clé a été révoquée !\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "requête de la clé %08lX du serveur de clés HKP %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "impossible d'obtenir les clés du serveur: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "erreur pendant l'envoi de `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "l'envoi à `%s' s'est déroulé avec succès (résultat=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "l'envoi à `%s' a échoué: le résultat est %u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "recherche de \"%s\" du serveur HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "impossible de chercher une clé dans le serveur : %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "les parties secrètes ne sont pas disponibles\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "l'algorithme de protection %d%s n'est pas supporté\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Mot de passe invalide ; réessayez"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "ATTENTION: Clé faible détectée - changez encore le mot de passe.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"génération de la somme de contrôle de 16 bits (dépréciée) pour protéger\n"
-"la clé secrète\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"Ceci est une clé ElGamal générée par PGP qui n'est PAS sûre pour les\n"
-"signatures !\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "la clé publique est plus récente de %lu seconde que la signature\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "la clé publique est plus récente de %lu secondes que la signature\n"
-
-# on s'amuse comme on peut...
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"la clé a été créée %lu seconde dans le futur (rupture spatio-temporelle ou\n"
-"problème d'horloge)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"la clé a été créée %lu secondes dans le futur (rupture spatio-temporelle ou\n"
-"problème d'horloge\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTE: la clé de signature %08lX a expiré le %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"la signature est supposée être fausse car un bit critique est\n"
-"inconnu\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"AVERTISSEMENT: impossible de faire une expansion à base de %% de l'url\n"
-"de politique (trop grande). Utilisation de la version non expansée.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"AVERTISSEMENT: impossible de faire une expansion à base de %% de l'url\n"
-"de politique (trop grande). Utilisation de la version non expansée.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "Impossible de vérifier la signature créée: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "Signature %s de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "AVERTISSEMENT: `%s' est un fichier vide\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"il n'est possible de signer avec des clés de style PGP 2.x uniquement\n"
-"en mode --pgp2\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "impossible de créer %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"NOTE: l'algorithme de chiffrement %d n'a pas été trouvé dans les "
-"préférences\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "signature:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"il n'est possible de faire une signature en texte clair avec des clés\n"
-"de style PGP 2.x qu'en mode --pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "le chiffrement %s sera utilisé\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "impossible de traiter les lignes plus longues que %d caractères\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "la ligne d'entrée est plus longue que %d caractères\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "enregistrement de base de confiance %lu: lseek a échoué: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr ""
-"enregistrement de la base de confiance %lu: l'écriture a échoué (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transaction de base de confiance trop volumineuse\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: impossible d'accéder: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: le répertoire n'existe pas !\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: impossible de créer le verrouillage\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: impossible de créer le verrou\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: impossible de créer: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: impossible de créer un enregistrement de version: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: base de confiance invalide créée\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: base de confiance créée\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: base de confiance invalide\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: la création de la table de hachage a échoué: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: erreur pendant la mise à jour de l'enregistrement de version: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: erreur pendant la lecture de l'enregistrement de version: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: erreur pendant l'écriture de l'enregistrement de version: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "base de confiance: «lseek()» a échoué: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "base de confiance: la lecture a échoué (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: ce n'est pas un fichier de base de confiance\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: enregistrement de version avec un numéro %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: version %d du fichier invalide\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: erreur pendant la lecture de l'enregistrement libre: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr ""
-"%s: erreur pendant l'écriture de l'enregistrement de\n"
-"répertoire: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: n'a pu mettre un enregistrement à zéro: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: impossible d'ajouter un enregistrement: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "la base de confiance est corrompue; exécutez «gpg --fix-trustdb».\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' n'est pas une identification de clé longue valide\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "clé %08lX: acceptée comme clé de confiance.\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "la clé %08lX apparaît plusieurs fois dans la base de confiance\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "clé %08lX: pas de clé publique pour la clé de confiance - ignorée\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr ""
-"enregistrement de confiance %lu, type de requête %d: la lecture a échoué: %"
-"s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "l'enregistrement de confiance %lu: n'est pas du type demandé %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "enregistrement de confiance %lu, type %d: l'écriture a échoué: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "base de confiance: la synchronisation a échoué: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "vérification de la base de confiance inutile\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "la prochaine vérification de la base de confiance aura lieu le %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "vérifier la base de confiance\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "clé publique %08lX non trouvée : %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "la clé publique de la clé de confiace ultime %08lX est introuvable\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"vérification à la profondeur %d signé=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"impossible de vérifier la signature.\n"
-"Rappelez-vous bien que le fichier de signature (.sig ou .asc)\n"
-"doit être le premier fichier indiqué sur la ligne de commande.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr ""
-"la ligne d'entrée %u est trop longue ou il manque un caractère de saut\n"
-"de ligne\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"la clé n'est pas marquée comme non-sûre; on ne peut pas l'utiliser avec le\n"
-"pseudo-générateur de nombres aléatiores !\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "`%s' a été ignoré: dupliqué\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "`%s' a été ignoré: %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "ignoré: clé secrète déjà présente\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"`%s' a été ignorée: c'est une clé ElGamal générée par PGP qui n'est pas\n"
-"sûre pour les signatures !\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Le fichier `%s' existe. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Réécrire (o/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: suffixe inconnu\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Entrez le nouveau nom de fichier"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "écriture vers la sortie standard\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "les données signées sont supposées être dans `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: nouveau fichier d'options créé\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: impossible de créer le répertoire: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: répertoire créé\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"ATTENTION: Le message a été chiffré avec une clé faible pendant le\n"
-"chiffrement symétrique.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problème de gestion des paquets chiffrés\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "clé faible générée - nouvel essai\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"impossible d'éviter une clé faible pour le chiffrement symétrique:\n"
-"%d essais ont eu lieu !\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA nécessite l'utilisation d'un algorithme de hachage de 160 bits\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "impossible de faire cela en mode automatique sans «--yes»\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Enlever cette clé du porte-clés ? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "C'est une clé secrète - faut-il vraiment l'effacer ? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "la suppression du bloc de clés a échoué : %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "les informations de confiance au propriétaires ont été effacées\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "il y a une clé secrète pour la clé publique \"%s\" !\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "utiliser l'option «--delete-secret-keys» pour l'effacer d'abord.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"C'est à vous d'assigner une valeur ici; cette valeur ne sera jamais\n"
-"envoyée à une tierce personne. Nous en avons besoin pour créer le réseau\n"
-"de confiance (web-of-trust); cela n'a rien à voir avec le réseau des\n"
-"certificats (créé implicitement)"
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Pour mettre en place le Réseau de confiance (Web of Trust), GnuPG a\n"
-"besoin de savoir en quelles clés votre confiance est ultime - ce sont\n"
-"en général les clés dont vous avez accès à la clé secrète. Répondez\n"
-"\"oui\" pour indiquer que votre confiance en cette clé est ultime\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Si vous voulez utiliser cette clé révoquée quand-même, répondez «oui»."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "Si vous voulez utiliser cette clé peu sûre quand-même, répondez «oui»."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr ""
-"Entrez le nom d'utilisateur de la personne à qui vous voulez envoyer\n"
-"le message."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Sélectionnez l'algorithme à utiliser.\n"
-"DSA (alias DSS) est l'algorithme de signatures électroniques qui ne peut\n"
-"être utilisé que pour les signatures. C'est l'algorithme recommandé car\n"
-"la vérification des signatures DSA est beaucoup plus rapide que celle des\n"
-"signatures ElGamal.\n"
-"\n"
-"ElGamal est un algorithme pouvant à la fois être utilisé pour les\n"
-"signatures et le chiffrement. OpenPGP en distingue deux sortes:\n"
-"l'une destinée uniquement au chiffrement et l'autre pouvant aussi bien\n"
-"servir aux signatures ; elles sont en fait identiques mais certains\n"
-"paramètres doivent être spécialement choisis pour que la clé génère des\n"
-"signatures sûres: ce programme est capable de le faire mais les autres\n"
-"implantations de OpenPGP ne sont pas obligées d'accepter cette forme de\n"
-"clé.\n"
-"\n"
-"La première clé (clé principale) doit toujours être capable de signer ;\n"
-"c'est pourquoi la clé ElGamal de chiffrement seul est alors désactivée."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Bien que ces clés soient définies dans la RFC2440 elles ne sont pas\n"
-"conseillées car tous les programmes ne les supportent pas et les\n"
-"signatures créées avec elles sont plutôt longues et très lentes à vérifier."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Entrez la taille de la clé"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Répondez «oui» ou «non»"
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Entrez la valeur demandée comme indiqué dans la ligne de commande.\n"
-"On peut entrer une date ISO (AAAA-MM-JJ) mais le résultat d'erreur sera\n"
-"mauvais - le système essaierait d'interpréter la valeur donnée comme un\n"
-"intervalle."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Entrez le nom du propriétaire de la clé"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "entrez une adresse e-mail optionnelle mais hautement recommandée"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Entrez un commentaire optionnel"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N pour changer le nom.\n"
-"C pour changer le commentaire.\n"
-"E pour changer l'adresse e-mail.\n"
-"O pour continuer à générer la clé.\n"
-"Q pour arrêter de générer de clé."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Répondez «oui» (ou simplement «o») pour générer la sous-clé"
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Quand vous signez un nom d'utilisateur d'une clé, vous devriez d'abord\n"
-"vérifier que la clé appartient à la personne nommée. Il est utile que\n"
-"les autres personnes sachent avec quel soin vous l'avez vérifié.\n"
-"\n"
-"\"0\" signifie que vous n'avez pas d'opinon.\n"
-"\n"
-"\"1\" signifie que vous croyez que la clé appartient à la personne qui\n"
-"dit la posséder mais vous n'avez pas pu vérifier du tout la clé.\n"
-"C'est utile lorsque vous signez la clé d'un pseudonyme.\n"
-"\n"
-"\"2\" signifie que vous avez un peu vérifié la clé. Par exemple, cela\n"
-"pourrait être un vérification de l'empreinte et du nom de\n"
-"l'utilisateur avec la photo.\n"
-"\n"
-"\"3\" signifie que vous avez complètement vérifié la clé. Par exemple,\n"
-"cela pourrait être une vérification de l'empreinte, du nom de\n"
-"l'utilisateur avec un document difficile à contrefaire (comme un\n"
-"passeport) et de son adresse e-mail (vérifié par un échange de\n"
-"courrier électronique).\n"
-"\n"
-"Notez bien que les exemples donnés ci-dessus pour les niveaux 2 et\n"
-"3 ne sont *que* des exemples.\n"
-"C'est à vous de décider quelle valeur mettre quand vous signez\n"
-"les clés des autres personnes.\n"
-"\n"
-"Si vous ne savez pas quelle réponse est la bonne, répondez \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Répondez «oui» si vous voulez signer TOUS les noms d'utilisateurs"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Répondez «oui» si vous voulez vraiment supprimer ce nom\n"
-"d'utilisateur. Tous les certificats seront alors perdus en même temps !"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Répondez «oui» s'il faut vraiment supprimer la sous-clé"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"C'est une signature valide dans la clé; vous n'avez pas normalement\n"
-"intérêt à supprimer cette signature car elle peut être importante pour\n"
-"établir une connection de confiance vers la clé ou une autre clé certifiée\n"
-"par celle-là."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Cette signature ne peut pas être vérifiée parce que vous n'avez pas la\n"
-"clé correspondante. Vous devriez remettre sa supression jusqu'à ce que\n"
-"vous soyez sûr de quelle clé a été utilisée car cette clé de signature\n"
-"peut établir une connection de confiance vers une autre clé déjà certifiée."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"Cette signature n'est pas valide. Vous devriez la supprimer de votre\n"
-"porte-clés."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Cette signature relie le nom d'utilisateur à la clé. Habituellement\n"
-"enlever une telle signature n'est pas une bonne idée. En fait GnuPG peut\n"
-"ne plus être capable d'utiliser cette clé. Donc faites ceci uniquement si\n"
-"cette auto-signature est invalide pour une certaine raison et si une autre\n"
-"est disponible."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Changer les préférences de tous les noms d'utilisateurs (ou juste\n"
-"ceux qui sont sélectionnés) vers la liste actuelle. La date de toutes\n"
-"les auto-signatures affectées seront avancées d'une seconde.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Entrez le mot de passe ; c'est une phrase secrète \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Répétez le dernier mot de passe pour être sûr de ce que vous avez tapé."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Donnez le nom du fichier auquel la signature se rapporte"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Répondez «oui» s'il faut vraiment réécrire le fichier"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Entrez le nouveau nom de fichier. Si vous tapez simplement ENTRÉE le\n"
-"fichier par défaut (indiqué entre crochets) sera utilisé."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Vous devriez donner une raison pour la certification. Selon le contexte\n"
-"vous pouvez choisir dans cette liste:\n"
-" «La clé a été compromise»\n"
-" Utilisez cette option si vous avez une raison de croire que des\n"
-" personnes ont pu accéder à votre clé secrète sans autorisation.\n"
-" «La clé a été remplacée»\n"
-" Utilisez cette option si vous avez remplacé la clé par une nouvelle.\n"
-" «La clé n'est plus utilisée»\n"
-" Utilisez cette option si cette clé n'a plus d'utilité.\n"
-" «Le nom d'utilisateur n'est plus valide»\n"
-" Utilisez cette option si le nom d'utilisateur ne doit plus être\n"
-" utilisé. Cela sert généralement à indiquer qu'une adresse e-mail\n"
-" est invalide.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Si vous le désirez, vous pouvez entrer un texte qui explique pourquoi vous\n"
-"avez émis ce certificat de révocation. Essayez de garder ce texte concis.\n"
-"Une ligne vide délimite la fin du texte.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Pas d'aide disponible"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Pas d'aide disponible pour `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "erreur durant la création du porte-clés `%s' : %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "le porte-clés `%s` a été créé\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "la reconstruction du cache de porte-clés a échoué : %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr ""
-"ATTENTION: 2 fichiers avec des informations confidentielles existent.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s est le fichier original\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s est le nouveau\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Réparez ce problème de sécurité possible\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "vérification du porte-clés `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu clés traitées jusqu'ici (%lu signatures)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu clés vérifiées (%lu signatures)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: porte-clés créé\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "vous devez redémarrer GnuPG pour qu'il puisse lire le nouveau\n"
-#~ "fichier «options»\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "le changement de permission de `%s' a échoué: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOM=VALEUR|utiliser ces données de notation"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "le premier caractère du nom d'une notation doit être un lettre ou un "
-#~ "trait\n"
-#~ "de soulignement\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "les points dans le nom d'une notation doivent être entourés d'autes "
-#~ "caractères\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "ATTENTION: Cette clé possède déjà une photo d'identité.\n"
-#~ " Ajouter une autre photo d'identité peut poser des\n"
-#~ " problèmes avec certaines versions de PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Vous ne pouvez avoir qu'une seule photo d'identité par clé.\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Empreinte:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Empreinte :"
diff --git a/po/gl.po b/po/gl.po
deleted file mode 100644
index 119573bf4..000000000
--- a/po/gl.po
+++ /dev/null
@@ -1,5002 +0,0 @@
-# Galician translation of GNUpg
-# Copyright (C) 2001 Free Software Foundation, Inc.
-# Jacobo Tarrio <jtarrio@trasno.net>, 2001.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-05-14 13:21+0200\n"
-"Last-Translator: Jacobo Tarrio <jtarrio@trasno.net>\n"
-"Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Aviso: ¡úsase unha zona insegura de memoria!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "mire en http://www.gnupg.org/faq.html para obter máis información\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "a operación non é posible sen memoria inicializada como segura\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(pode que usara o programa equivocado para esta tarefa)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "si"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "sS"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "non"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "abandonar"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "aA"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "erro xeral"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "tipo de paquete descoñecido"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "versión descoñecida"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algoritmo de chave pública descoñecido"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algoritmo de resumo descoñecido"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "chave pública errónea"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "chave secreta errónea"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "sinatura errónea"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "error de checksum"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "contrasinal erróneo"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "non se atopou a chave pública"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algoritmo de cifrado descoñecido"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "non foi posible abri-lo chaveiro"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "paquete non válido"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armadura non válida"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "non hai tal id de usuario"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "a chave secreta non está dispoñible"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "empregouse unha chave secreta errónea"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "non está soportado"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "chave incorrecta"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "erro de lectura de ficheiro"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "erro de escritura de ficheiro"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritmo de compresión descoñecido"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "erro de apertura de ficheiro"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "erro de creación de ficheiro"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "contrasinal incorrecto"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmo de chave pública non implementado"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritmo de cifrado non implementado"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "clase de sinatura descoñecida"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "erro da base de datos de confianza"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI erróneo"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "límite de recursos"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "chaveiro incorrecto"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "certificado erróneo"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "id de usuario mal formado"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "erro de peche de ficheiro"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "erro de cambio de nome de ficheiro"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "erro de borrado de ficheiro"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "datos inesperados"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "conflicto de selo de data"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritmo de chave pública imposible de usar"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "o ficheiro xa existe"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "chave feble"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argumento non válido"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI incorrecto"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI non soportado"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "erro de rede"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "non cifrado"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "non procesado"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "chave pública non utilizable"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "chave secreta non utilizable"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "erro do servidor de chaves"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... isto é un erro (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "atopou un erro ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "non se puido abrir `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "non se puido facer stat sobre `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' non é un ficheiro normal - ignórase\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "nota: o ficheiro random_seed está baleiro\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "aviso: tamaño de random_seed non válido - non se emprega\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "non se pode ler de `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "nota: o ficheiro random_seed non se actualiza\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "non se pode crear `%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "non se pode escribir en `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "non se pode pechar `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "AVISO: ¡¡emprégase un xerador de números aleatorios inseguro!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"O xerador de números aleatorios só é un truco para poder\n"
-"executalo - ¡non é de ningún xeito un xerador de números\n"
-"aleatorios seguro!\n"
-"\n"
-"¡NON USE NINGUN DATO XERADO POR ESTE PROGRAMA!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Non hai suficientes bytes aleatorios dispoñibles. Por favor, faga outro\n"
-"traballo para lle dar ao sistema operativo unha oportunidade de acumular\n"
-"máis entropía (Precísanse %d bytes máis)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Comandos:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[ficheiro]|facer unha sinatura"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[ficheiro]|facer unha sinatura en texto claro"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "facer unha sinatura separada"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "cifrar datos"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[ficheiros]|cifrar ficheiros"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "cifrar só con cifrado simétrico"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "só armacenar"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "descifrar datos (por defecto)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[ficheiros]|descifrar ficheiros"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verificar unha sinatura"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "ve-la lista de chaves"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "ve-la lista de chaves e sinaturas"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "verifica-las sinaturas das chaves"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "ve-la lista de chaves e pegadas dactilares"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "ve-la lista de chaves secretas"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "xerar un novo par de chaves"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "borrar chaves do chaveiro público"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "borrar chaves do chaveiro secreto"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "asinar unha chave"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "asinar unha chave localmente"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "asinar unha chave de xeito non revocable"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "asinar unha chave localmente e de xeito non revocable"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "asinar ou editar unha chave"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "xerar un certificado de revocación"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exportar chaves"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exportar chaves a un servidor de chaves"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importar chaves dun servidor de chaves"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "buscar chaves nun servidor de chaves"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "actualizar tódalas chaves dun servidor de chaves"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importar/mesturar chaves"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "listar só a secuencia de paquetes"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exporta-los valores de confianza no propietario"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importa-los valores de confianza no propietario"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "actualiza-la base de datos de confianza"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "actualización inatendida da base de datos de confianza"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "amañar unha base de datos de confianza corrompida"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Quita-la armadura a un ficheiro ou á entrada estándar"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Pór armadura a un ficheiro ou á entrada estándar"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [ficheiros]|visualizar resumos de mensaxes"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opcións:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "crear saída con armadura en ascii"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOME|cifrar para NOME"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOME|empregar NOME como valor por defecto do destinatario"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "usa-la chave por defecto coma o destinatario por defecto"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "empregar este id de usuario para asinar ou descifrar"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|axusta-lo nivel de compresión a N (0 desactiva)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "usar modo de texto canónico"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "usar coma ficheiro de saída"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "lareto"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "ser un pouquiño máis calado"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "non usa-la terminal en absoluto"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "forzar sinaturas v3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "non forzar sinaturas v3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "forzar sinaturas de chave v4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "non forzar sinaturas de chave v4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "sempre usar un MDC para cifrar"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "nunca usar un MDC para cifrar"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "non facer ningún cambio"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "emprega-lo gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "modo por lotes: non preguntar nunca"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "asumir `si' na maioría das preguntas"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "asumir `non' na maioría das preguntas"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "engadir este chaveiro á lista de chaveiros"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "engadir este chaveiro secreto á lista"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "amosar en que chaveiro está unha chave listada"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOME|empregar NOME coma chave secreta por defecto"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|empregar este servidor de chaves para buscar chaves"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAME|axusta-lo xogo de caracteres do terminal a NOME"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "le-las opcións dun ficheiro"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|DF|escribi-la información de estado a este DF"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[ficheiro]|escribi-la información de estado no ficheiro"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|IDCHAVE|confiar absolutamente nesta chave"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FICHEIRO|carga-lo módulo de extensión FICHEIRO"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emula-lo modo descrito no RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"axustar tódalas opcións de paquetes, cifrado e resumo ao comportamento "
-"OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"axustar tódalas opcións de paquetes, cifrado e resumo ao comportamento PGP 2."
-"x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|emprega-lo modo de contrasinal N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NOME|emprega-lo algoritmo para resumos NOME para os contrasinais"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NOME|emprega-lo algoritmo de cifrado NOME para os contrasinais"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOME|emprega-lo algoritmo de cifrado NOME"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOME|emprega-lo algoritmo de resumos de mensaxes NOME"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|emprega-lo algoritmo de compresión N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "descarta-lo campo de id de chave dos paquetes cifrados"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Amosar Identificacións Fotográficas"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Non amosar Identificacións Fotográficas"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Estabrece-la liña de comando para ve-las Identificacións Fotográficas"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Vexa a páxina man para un listado completo de comandos e opcións)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Exemplos:\n"
-"\n"
-" -se -r Bob [ficheiro] asinar e cifrar para o usuario Bob\n"
-" --clearsgn [ficheiro] facer unha sinatura en texto claro\n"
-" --detach-sign [ficheiro] facer unha sinatura separada\n"
-" --list-keys [nomes] amosa-las chaves\n"
-" --fingerprint [nomes] amosa-las pegadas dactilares\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr ""
-"Por favor, informe dos erros no programa a <gnupg-bugs@gnu.org>,\n"
-"e dos erros na traducción a <proxecto@trasno.net>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Uso: gpg [opcións] [ficheiros] (-h para ve-la axuda)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintaxe: gpg [opcións] [ficheiros]\n"
-"asinar, verificar, cifrar ou descifrar\n"
-"a operación por defecto depende dos datos de entrada\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritmos soportados:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "uso: gpg [opcións] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "comandos conflictivos\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Aviso: propiedade insegura en %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Aviso: permisos inseguros en %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Aviso: propiedade insegura en %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Aviso: permisos inseguros en %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTA: non existe o ficheiro de opcións por defecto `%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTA: non existe o ficheiro de opcións por defecto `%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "ficheiro de opcións `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "lendo as opcións de `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s non é un xogo de caracteres válido\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "non se puido analisa-lo URI do servidor de chaves\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: versión do ficheiro incorrecta %d\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armadura non válida"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: versión do ficheiro incorrecta %d\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "chaveiro incorrecto"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "non se puido estabrecer exec-path a %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "AVISO: ¡o programa pode crear un ficheiro 'core'!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "AVISO: %s fai que se ignore %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTA: ¡%s non é para uso normal!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "¡%s non se admite con %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "¡%s non ten sentido empregándoo con %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "só pode crear sinaturas separadas ou en claro no modo --pgp2\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "non pode asinar e cifrar ao mesmo tempo no modo --pgp2\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-"debe empregar ficheiros (e non canalizacións) ao traballar con --pgp2 "
-"activado.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "para cifrar unha mensaxe en modo --pgp2 precísase da cifra IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "esta mensaxe pode non ser utilizable por PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "o algoritmo de cifrado seleccionado non é válido\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "o algoritmo de resumo seleccionado non é válido\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "o algoritmo de resumo seleccionado non é válido\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "o algoritmo de compresión debe estar entre %d e %d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed debe ser superior a 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed debe ser superior a 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth debe valer entre 1 e 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: desaconséllase encarecidamente o modo S2K simple (0)\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "modo S2K non válido; debe ser 0, 1 ou 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "nivel de comprobación por defecto non válido; debe ser 0, 1, 2 ou 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "preferencias non válidas\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "preferencias non válidas\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "preferencias non válidas\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "preferencias non válidas\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "non se puido inicializa-la base de datos de confianzas: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [ficheiro]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [ficheiro]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [ficheiro]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [ficheiro]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [ficheiro]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [ficheiro]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [ficheiro]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [ficheiro]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key id-de-usuario"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key id-de-usuario"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key id-de-usuario"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key id-de-usuario"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id-de-usuario [comandos]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "non se puido abrir %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [id-de-usuario] [chaveiro]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "non se puido quita-la armadura: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "non se puido poñe-la armadura: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algoritmo de hash non válido `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[ficheiro]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Escriba a súa mensaxe ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "non se puido abrir `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"un nome de notación só debe ter letras, díxitos, puntos ou guións baixos e "
-"rematar con '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "un valor de notación non pode empregar ningún carácter de control\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "o URL de normativa de certificación dado non é válido\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "o URL de normativa de sinaturas dado non é válido\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armadura: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "cabeceira de armadura non válida: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "cabeceira de armadura: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "cabeceira de sinatura en claro non válida\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "sinaturas en texto claro aniñadas\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "liña escapada cunha barra non válida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armadura inesperada:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "carácter radix64 non válido %02x omitido\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "fin de ficheiro prematura (non hai CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "fin de ficheiro prematura (no CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC mal formado\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "Erro de CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "fin de ficheiro prematura (nas liñas adicionais)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "error nunha liña adicional\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "non se atoparon datos OpenPGP válidos.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armadura incorrecta: liña máis longa ca %d caracteres\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"carácter quoted-printable na armadura - seguramente empregouse un MTA con "
-"erros\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Non se especificou un motivo"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "A chave é obsoleta"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Esta chave quedou descoberta"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Xa non se emprega esta chave"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "O ID de usuario xa non é válido"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Motivo para a revocación: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Comentario de revocación: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMsSoO"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Non se asignou un valor de confianza a:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Por favor, decida canto confía en que este usuario verifique\n"
-"correctamente as chaves de outros usuarios (mirando nos pasaportes,\n"
-"comprobando pegadas dactilares de varias fontes...).\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Non sei\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = NON confío\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Confío marxinalmente\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Confío totalmente\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Confío absolutamente\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = amosar máis información\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = voltar ao menú principal\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " o = omitir esta chave\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " s = saír\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "¿A súa decisión? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "¿Está seguro de querer dar confianza absoluta a esta chave? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificados que conducen a unha chave de confianza absoluta:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "chave %08lX: ¡esta chave está revocada!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "¿Empregar esta chave de tódolos xeitos?"
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "chave %08lX: ¡unha subchave está revocada!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: a chave caducou\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Non hai indicacións de que a sinatura pertenza ao seu propietario.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Esta chave NON é de confianza\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Non é seguro que esta chave pertenza de verdade ao seu propietario\n"
-"pero acéptase de tódolos xeitos\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Esta chave probablemente pertenza ao propietario\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Esta chave perténcenos a nós\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"NON é seguro que a chave pertenza ao seu propietario.\n"
-"Se *de verdade* sabe o que está a facer, pode respostar á\n"
-"seguinte pregunta cun \"si\"\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "AVISO: ¡Emprégase unha chave que non é de confianza!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "AVISO: ¡Esta chave está revocada polo propietario!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Isto pode significar que a sinatura está falsificada.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "AVISO: ¡Esta subchave está revocada polo propietario!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Nota: Esta chave está desactivada.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Nota: ¡Esta chave xa caducou!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "AVISO: ¡Esta chave non está certificada cunha sinatura de confianza!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Non hai indicacións de que a sinatura pertenza ao seu propietario.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "AVISO: ¡Esta chave NON é de confianza!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Probablemente, a sinatura estea FALSIFICADA.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"AVISO: ¡Esta chave non está certificada con sinaturas de suficiente "
-"confianza!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Non é seguro que a sinatura pertenza ao seu propietario.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: omitido: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: omitido: a chave pública xa está presente\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Non especificou un ID de usuario. (pode empregar \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Introduza o ID de usuario. Remate cunha liña en branco: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Non hai tal ID de usuario.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr ""
-"omitido: a chave pública xa está estabrecida coma destinatario por defecto\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "A chave pública está desactivada.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "omitido: chave pública xa estabrecida\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "destinatario por defecto `%s' descoñecido\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: omitido: a chave pública está desactivada\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "non hai enderezos válidos\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "a preferencia %c%lu non é válida\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "preferencia %c%lu duplicada\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "demasiadas preferencias `%c'\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "caracter non válido na cadea de preferencias\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "escribindo a propia sinatura\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "escribindo a propia sinatura\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "escribindo unha sinatura que liga a chave\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "tamaño de chave non válido; empregando %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "tamaño de chave redondeado a %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Por favor, seleccione o tipo de chave que quere:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA e ElGamal (por defecto)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (só asinar)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (só cifrar)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (asinar e cifrar)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (só asinar)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (só cifrar)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (asinar e cifrar)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "¿A súa selección? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "Este algoritmo está obsoleto - ¿crear de tódolos xeitos? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Selección non válida.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Hase crear unh novo par de chaves %s.\n"
-" tamaño de chave mínimo: 768 bits\n"
-" tamaño de chave por defecto: 1024 bits\n"
-" tamaño de chave máximo recomendado: 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "¿Qué tamaño de chave quere? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA só admite tamaños entre 512 e 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "chave pequena de máis; 1024 é o menor valor admitido para RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "chave pequena de máis; 768 é o menor valor admitido\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "chave grande de máis; %d é o maior tamaño admitido.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"¡As chaves maiores de 2048 bits non se aconsellan porque\n"
-"os cálculos levan MOITO tempo!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "¿Está seguro de que quere este tamaño de chave? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"De acordo, ¡pero teña en conta que a radiación do monitor e o teclado tamén "
-"son vulnerables a ataques!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "O tamaño de chave requerido son %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "redondeado a %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Por favor, indique canto tempo debería ser válida a chave.\n"
-" 0 = a chave non caduca\n"
-" <n> = a chave caduca en n días\n"
-" <n>w = a chave caduca en n semanas\n"
-" <n>m = a chave caduca en n meses\n"
-" <n>y = a chave caduca en n anos\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Por favor, indique canto tempo debería ser válida a sinatura.\n"
-" 0 = a sinatura non caduca\n"
-" <n> = a sinatura caduca en n días\n"
-" <n>w = a sinatura caduca en n semanas\n"
-" <n>m = a sinatura caduca en n meses\n"
-" <n>y = a sinatura caduca en n anos\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "¿Por canto tempo é válida a chave? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "¿Por canto tempo é válida a sinatura? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valor non válido\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s non caduca nunca\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s caduca o %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"O seu sistema non pode amosar datas máis aló do 2038.\n"
-"Aínda así, hase tratar correctamente ata o 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "¿Isto é correcto? (s/n) "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Precisa un ID de usuario para identifica-la súa chave; o software constrúe "
-"o\n"
-"id de usuario co Nome, un Comentario e un Enderezo de E-mail deste xeito:\n"
-" \"Heinrich Heime (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nome: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Caracter non válido no nome\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "O nome non pode comezar cun díxito\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "O nome debe ter alomenos 5 caracteres\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Enderezo de E-mail: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Non é un enderezo de e-mail válido\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Comentario: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Carácter non válido no comentario\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Está a usa-lo xogo de caracteres `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Escolleu este ID de usuario:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-"Por favor, non poña o enderezo de correo no nome real ou no comentario\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeAaSs"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "¿Cambia-lo (N)ome, (C)omentario, (E)-mail ou (S)aír? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "¿Cambiar (N)ome, (C)omentario, (E)-mail ou (A)ceptar/(S)aír? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Por favor, corrixa antes o erro\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Necesita un contrasinal para protexe-la súa chave secreta.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "o contrasinal non se repetiu correctamente; ténteo de novo"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Non quere empregar un contrasinal - ¡é unha idea *moi* mala!\n"
-"Hase facer así de tódolos xeitos; pode cambia-lo contrasinal en calquera\n"
-"momento, empregando este programa coa opción \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Cómpre xerar unha morea de bytes aleatorios. E unha boa idea facer outras\n"
-"cousas (premer teclas no teclado, move-lo rato, usa-los discos duros)\n"
-"mentres se xeran os números primos; isto proporciónalle ao xerador de\n"
-"números aleatorios unha opoertunidade de acumular entropía de abondo.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "O par de chaves DSA ha ter 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Cancelouse a xeración de chaves.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "gravando a chave pública en `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "gravando a chave secreta en `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "non se atopou un chaveiro público no que se poida escribir: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "non se atopou un chaveiro privado no que se poida escribir: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "erro escribindo no chaveiro público `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "erro escribindo no chaveiro secreto `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "creáronse e asináronse as chaves pública e secreta.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "chave marcada coma de confianza absoluta.\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Teña en conta que non se pode empregar esta chave para cifrar. Pode que\n"
-"queira emprega-lo comando \"--edit-key\" para xerar unha chave secundaria\n"
-"con esa finalidade.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "A xeración da chave fallou: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co "
-"reloxo)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"creouse a chave %lu segundos no futuro (salto no tempo ou problemas co "
-"reloxo)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NOTA: a creación de subchaves para chaves v3 non cumpre OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "¿Crear realmente? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output non traballa con este comando\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: non se pode abrir: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "erro ao crea-lo contrasinal: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' xa está comprimido\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: AVISO: ficheiro baleiro\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr "só pode cifrar a chaves RSA de 2048 bits ou menos en modo --pgp2\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "lendo de `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"non se puido emprega-la cifra IDEA para tódalas chaves ás que está a "
-"cifrar.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: o algoritmo de cifrado %d non foi atopado nas preferencias\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Non se admite este comando no modo %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s cifrado para: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "non se atopou a chave `%s': %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "erro ao le-lo bloque de chaves: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "chave %08lX: non é unha chave rfc2440 - omitida\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "chave %08lX: non está protexida - omitida\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "chave %08lX: chave estilo PGP 2.x - omitida\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "AVISO: non se exportou nada\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "demasiadas entradas na caché de chaves públicas - desactivada\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Non se atopou o id de usuario]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Chave %08lX non válida convertida en válida por --allow-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "emprégase a chave secundaria %08lX no canto da primaria %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "chave %08lX: chave secreta sen chave pública - ignorada\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "pasando por alto un bloque de tipo %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu chaves procesadas hasta polo momento\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "erro lendo `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Número total procesado: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr "novas chaves omitidas: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sin IDs de usuario: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importadas: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " sin cambios: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " novos IDs de usuario: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " novas sub-chaves: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " novas sinaturas: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " novas revocacións de chaves: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr "chaves secretas lidas: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "chaves secretas importadas: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "chaves secretas sin cambios: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importadas: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "chave %08lX: non hai ID de usuario\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "chave %08lX: non hai sub-chave para o enlace da chave\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "chave %08lX: aceptouse o ID de usuario '%s' sen auto-sinatura\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "chave %08lX: non hai IDs de usuario válidos\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "isto pode ser causado por unha auto-sinatura que falta\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "chave %08lX: chave pública non atopada: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "chave %08lX: nova chave - omitida\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "non se atopou un chaveiro no que se poida escribir: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "escribindo a `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "erro escribindo no chaveiro `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "chave %08lX: chave pública importada\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "chave %08lX: non coincide coa nosa copia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr ""
-"chave %08lX: non foi posible localiza-lo bloque de chaves original:\n"
-"%s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr ""
-"chave %08lX: non foi posible le-lo bloque de chaves original:\n"
-"%s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "chave %08lX: 1 novo ID de usuario\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "chave %08lX: %d novos IDs de usuario\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "chave %08lX: 1 nova sinatura\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "chave %08lX: %d novas sinaturas\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "chave %08lX: 1 nova sub-chave\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "chave %08lX: %d novas sub-chaves\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "chave %08lX: sin cambios\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "non hai un chaveiro privado por defecto: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "chave %08lX: chave secreta importada\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "chave %08lX: xa estaba no chaveiro secreto\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "chave %08lX: chave secreta non atopada: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"chave %08lX: non hai chave pública - non se pode aplica-lo\n"
-"certificado de revocación\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr ""
-"chave %08lX: certificado de revocación incorrecto:\n"
-"%s - rechazado\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "chave %08lX: certificado de revocación importado\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "chave %08lX: non hai ID de usuario para a sinatura\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"chave %08lX: algoritmo de chave pública non soportado no ID de usuario \"%s"
-"\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr ""
-"chave %08lX: auto-sinatura non válida no identificadr de usuario \"%s\"\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "chave %08lX: non hai sub-chave para o enlace da chave\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "chave %08lX: algoritmo de chave pública non soportado\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "chave %08lX: enlace de sub-chave incorrecto\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "chave %08lX: enlace de sub-chave incorrecto\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "chave %08lX: non hai sub-chave para o enlace da chave\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "chave %08lX.%lu: Revocación de subchave válida\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "chave %08lX: enlace de sub-chave incorrecto\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "chave %08lX: pasado por alto o ID de usuario '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "chave %08lX: pasada por alto a sub-chave\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "chave %08lX: sinatura non exportable (clase %02x) - pasada por alto\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr ""
-"chave %08lX: certificado de revocación no lugar erróneo - pasada\n"
-"por alto\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr ""
-"chave %08lX: certificado de revocación incorrecto:\n"
-"%s - pasado por alto\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr ""
-"chave %08lX: certificado de revocación no lugar erróneo - pasada\n"
-"por alto\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "chave %08lX: ID de usuario duplicado detectado - mezclado\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"Aviso: a chave %08lX pode estar revocada: obtendo a chave de revocación %"
-"08lX\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"Aviso: a chave %08lX pode estar revocada: chave de revocación %08lX "
-"ausente.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "chave %08lX: certificado de revocación engadido\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "chave %08lX: engadiuse unha sinatura de chave directa\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revocación]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[auto-sinatura]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 sinatura errónea\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d sinaturas erróneas\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 sinatura non verificada debido a unha chave que falta\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d sinaturas non verificadas debido a chaves que faltan\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 sinatura non verificada debido a un erro\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d sinaturas non verificadas debido a erros\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "detectado 1 ID de usuario sin auto-sinatura válida\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "detectados %d IDs de usuario sin auto-sinatura válida\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "O ID de usuario \"%s\" está revocado."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "¿Está seguro de que quere asinalo? (s/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Non se puido asinar.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "AVISO: `%s' é un ficheiro baleiro\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"A súa sinatura actual en \"%s\"\n"
-"é unha sinatura local.\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "¿Quere promovela a sinatura totalmente exportable? (s/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"A súa sinatura actual en \"%s\"\n"
-"é unha sinatura local.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "¿Quere promovela a sinatura totalmente exportable? (s/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" xa estaba asinado localmente coa chave %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" xa estaba asinado coa chave %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nada que asinar coa chave %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "¡Esta chave caducou!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Esta chave ha caducar o %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "¿Quere que a súa sinatura caduque ao mesmo tempo? (S/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"Non pode facer unha sinatura OpenPGP nunha chave PGP 2.x no modo --pgp2.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Isto podería face-la chave non utilizable en PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"¿Con canto tino comprobou que a chave que vai asinar realmente pertence á\n"
-"persoa de enriba? Se non sabe que respostar, introduza \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Non hei respostar.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Non o comprobei en absoluto.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Fixen algunhas comprobacións.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Fixen comprobacións moi exhaustivas.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"¿Esta seguro de que quere asinar esta chave\n"
-"coa súa chave: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "isto pode ser causado por unha auto-sinatura que falta\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"A sinatura hase marcar coma non exportable.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"A sinatura hase marcar coma non revocable.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"A sinatura hase marcar coma non exportable.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"A sinatura hase marcar coma non revocable.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Non se comprobou esta chave en absoluto.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Comprobouse esta chave de xeito informal.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Comprobouse esta chave con moito tino.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "¿Asinar de verdade? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "fallou a sinatura: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Esta chave non está protexida.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "as partes secretas da chave primaria non están dispoñibles.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "A chave está protexida.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Non se pode editar esta chave: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Introduza o novo contrasinal para esta chave secreta.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Non desexa un contrainal - ¡o que é unha *mala* idea!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "¿Seguro que quere facer esto? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "movendo a sinatura dunha chave ó seu sitio\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "saír deste menú"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "s"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "gardar"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "gardar e saír"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "axuda"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "amosar esta axuda"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "amosar fingerprint"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "listar"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "listar chave e IDs de usuario"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "selecciona-lo ID de usuario N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "chave"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "selecciona-la chave secundaria N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "verificar"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "listar sinaturas"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "v"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "asina-la chave"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "f"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "asina-la chave localmente"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "asina-la chave de xeito non revocable"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "asina-la chave localmente e de xeito non revocable"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "depurar"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "engadir un ID de usuario"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "engadir unha identificación fotográfica"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "borrar un ID de usuario"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "engadir unha chave secundaria"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "borrar unha chave secundaria"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "engadir unha chave secundaria"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "borrar sinaturas"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "cambia-la fecha de expiración"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primary"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "marcar un ID de usuario coma primario"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "cambiar entre o listado de chaves públicas e secretas"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "c"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "lista-las preferencias (expertos)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "lista-las preferencias (moitos datos)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "estabrece-la lista de preferencias"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "preferencias actualizadas"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "cambia-lo contrasinal"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "cambia-la confianza sobre o dono"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revocar sinaturas"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revocar unha chave secundaria"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "deshabilitar unha chave"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "habilitar unha chave"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "amosa-la identificación fotográfica"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "non se pode facer iso no modo por lotes\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "erro ao le-lo bloque de chave secreta `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "A chave secreta está disponible.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Comando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Cómpre a chave secreta para facer isto.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Por favor, empregue o comando \"toggle\" antes.\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "A chave está revocada."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "¿Seguro de que quere asinar tódolos IDs de usuario? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Pista: seleccione os IDs de usuario que desexa asinar\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Non se admite este comando no modo %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Debe seleccionar alomenos un ID de usuario.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "¡Non pode borra-lo último ID de usuario!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "¿Seguro de que quere borrar tódolos IDs de usuario seleccionados? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "¿Seguro de que quere borrar este ID de usuario? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Debe seleccionar alomenos unha chave.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "¿Seguro de que quere borra-las chaves seleccionadas? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "¿Seguro de que quere borrar esta chave? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "¿Realmente quere revoca-las chaves seleccionadas? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "¿Realmente quere revocar esta chave? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"¿Seguro que quere actualiza-las preferencias dos IDs de usuario "
-"seleccionados? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "¿Realmente desexa actualiza-las preferencias? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "¿Garda-los cambios? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "¿Saír sin gardar? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "a actualización fallou: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "o segredo da actualización fallou: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "A chave non cambiou, polo que non fai falla actualizar.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Comando incorrecto (tente \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Esta chave pode estar revocada por %s chave %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (sensible)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX creada: %s caduca: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " confianza: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Esta chave está desactivada"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! revocouse a subchave: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- atopouse unha revocación falsa\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problema ao comproba-la revocación: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Teña en conta que a validez da chave amosada non é necesariamente\n"
-"correcta ata que reinicie o programa.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"AVISO: Esta é unha chave de estilo PGP2. Se engade unha identificación\n"
-" fotográfica algunhas versións de PGP han rexeitar esta chave.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "¿Está seguro de que quere engadila? (s/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-"Non pode engadir unha identificación fotográfica a unha chave de estilo "
-"PGP2.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "¿Borrar esta sinatura correcta? (y/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "¿Borrar esta sinatura incorrecta? (y/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "¿Borrar esta sinatura descoñecida? (y/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "¿Realmente quere borrar esta auto-sinatura? (y/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Borrada %d sinatura.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Borradas %d sinaturas.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Non se borrou nada.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Introduza o tamaño da chave"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Por favor, quite as seleccións das chaves secretas.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Por favor, seleccione como máximo unha chave secundaria.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Cambiando a data de expiración para a chave secundaria.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Cambiando a data de expiración da chave primaria.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Non pode cambia-la data de expiración dunha chave v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Non hai unha sinatura correspondiente no chaveiro secreto\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Escolla exactamente un ID de usuario.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr ""
-"chave %08lX: auto-sinatura non válida no identificadr de usuario \"%s\"\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Non hai ID de usuario con índice %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Non hai chave secundaria con índice %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "ID de usuario: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"asinado coa súa chave %08lX no %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"asinado localmente coa súa chave %08lX no %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Esta sinatura caducou o %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "¿Está seguro de que quere revocala? (s/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "¿Crear un certificado de revocación para esta sinatura? (s/N) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Firmou estes IDs de usuario: \n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " asinada por %08lX no %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revocada por %08lX no %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Está a punto de revocar estas sinaturas:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " asinada por %08lX no %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (non exportable)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "¿Realmente desexa crea-los certificados de revocación? (s/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "non hai chave secreta\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Amosando a id. fotográfica %s de tamaño %ld da chave 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Normativa de sinaturas: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Normativa de sinaturas: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "AVISO: atopáronse datos de notación non válidos\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notación de sinaturas: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Notación de sinaturas: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "non lexible por humanos"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Chaveiro"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [caduca: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "ve-la lista de chaves e pegadas dactilares"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Pegada dactilar ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Pegada dactilar ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Pegada dactilar ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Pegada dactilar ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algoritmo de hash non válido `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "datos cifrados con %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "cifrado cun algoritmo descoñecido %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "a chave pública é %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "datos cifrados coa chave pública: DEK correcto\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "cifrado cunha chave de %u bits, %s, ID %08lX, creado o %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "cifrado cunha chave %s, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "fallou o descifrado de chave pública: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "supoñendo datos cifrados con %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "A cifra IDEA non está dispoñible, téntase empregar %s no seu canto\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "descifrado correcto\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "AVISO: ¡a mensaxe cifrada foi manipulada!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "o descifrado fallou: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: o remitente pediu \"confidencial\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nome do ficheiro orixinal='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "revocación independente - empregue \"gpg --import\" para aplicar\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notación: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Normativa: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verificación de sinatura suprimida\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "non se poden manexar estas sinaturas múltiples\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Asinada o %.*s usando %s coa chave de ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "Sinatura INCORRECTA de\""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Sinatura caducada de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Sinatura correcta de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[incerto]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Non foi posible verifica-la sinatura: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "non é unha sinatura separada\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "sinatura independiente de clase 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "Sinatura ó vello estilo (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "paquete raíz incorrecto detectado en proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "non é posible deshabilita-los volcados de 'core': %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "¡Os algoritmos experimentais non deberían ser usados!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"este algoritmo de cifrado está obsoleto; por favor, empregue un máis "
-"estándar!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "o plugin de cifra IDEA non está presente\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"mire en http://www.gnupg.org/why-not-idea.html para obter máis información\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "AVISO: %s é unha opción a extinguir.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "AVISO: %s é unha opción a extinguir.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "empregue \"--keyserver-options %s\" no seu canto\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "non é posible manexa-lo algoritmo de chave pública %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "un subpaquete de tipo %d ten o bit crítico posto\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent non está dispoñible nesta sesión\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "non se pode estabrece-lo pid do cliente para o axente\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "non se pode obte-lo FD de lectura do servidor para o axente\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "non se pode obte-lo FD de escritura do servidor para o axente\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "variable de ambiente GPG_AGENT_INFO mal formada\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "a versión %d do protocolo de gpg-agent non está soportada\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "non se puido conectar a `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problema de comunicación con gpg-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problema co axente - desactivando o emprego do axente\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (ID principal da chave %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Precisa un contrasinal para desbloquea-la chave secreta do usuario:\n"
-"\"%.*s\"\n"
-"Chave de %u bits, %s, ID %08lX, creada o %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Introduza o contrasinal\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Repita o contrasinal\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "contrasinal demasiado longo\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "resposta do axente non válida\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "cancelado polo usuario\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problema co axente: o axente voltou coa resposta 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Necesita un contrasinal para desbloquea-la chave secreta para\n"
-"o usuario \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bits, chave %s, ID %08lX, creada %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "non se pode consulta-lo contrasinal en modo de proceso por lotes\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Introduza o contrasinal: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Repita o contrasinal: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "os datos non foron gardados; use a opción \"--output\" para gardalos\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "erro ao crear `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Sinatura non adxunta.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Por favor, introduza o nome do ficheiro de datos: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "lendo de stdin ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "non hai datos asinados\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "non foi posible abri-los datos asinados `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinatario anónimo; tentando a chave secreta %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "vale, nós somo-lo destinatario anónimo.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "a codificación vella do DEK non está soportada\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "o algoritmo de cifrado %d%s é descoñecido ou está desactivado\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "NOTA: o algoritmo de cifrado %d non foi atopado nas preferencias\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTA: a chave secreta %08lX caducou o %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "chave %08lX: ¡esta chave está revocada!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "solicitando a chave %08lX do servidor de chaves HKP %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "non se pode obte-la chave do servidor de chaves: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "erro ao enviar a `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "éxito ao enviar a `%s' (estado=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "fallo ao enviar a `%s': estado=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "buscando \"%s\" no servidor HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "non se pode buscar no servidor de chaves: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "hai partes da chave secreta non dispoñibles\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "o algoritmo de protección %d%s non está soportado\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Contrasinal non válido; por favor, ténteo de novo"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"AVISO: Detectouse unha chave feble - por favor, cambie o contrasinal outra "
-"vez.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"xerando o checksum de 16-bits a extinguir para a protección da chave "
-"secreta\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"¡esta é unha chave ElGamal xerada por PGP que non é segura para sinaturas!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "a chave pública é %lu segundo máis nova cá sinatura\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "a chave pública é %lu segundos máis nova cá sinatura\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"creouse a chave %lu segundo no futuro (salto no tempo ou problemas co "
-"reloxo)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"creouse a chave %lu segundos no futuro (salto no tempo ou problemas co "
-"reloxo)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTA: a chave de sinatura %08lX caducou o %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"asumindo unha sinatura incorrecta debido a un bit crítico descoñecido\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr "AVISO: non se pode expandir-%% o url de normativa (grande de máis).\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr "AVISO: non se pode expandir-%% o url de normativa (grande de máis).\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "fallou a comprobación da sinatura creada: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "Sinatura %s de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "AVISO: `%s' é un ficheiro baleiro\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "só pode asinar con chaves estilo PGP 2.x no modo --pgp2\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "non foi posible crear %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: o algoritmo de cifrado %d non foi atopado nas preferencias\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "asinando:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "só pode asinar en claro con chaves estilo PGP 2.x no modo --pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "hase empregar cifrado %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "non é posible manexar liñas de texto maiores que %d caracteres\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "a liña de entrada contén máis de %d caracteres\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "rexistro da base de datos de confianza %lu: lseek fallou: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr ""
-"rexistro da base de datos de confianza %lu: fallou a escritura (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transacción da base de datos de confianza demasiado grande\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: non é posible acceder: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: ¡o directorio non existe!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: non se pode crea-lo bloqueo\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: non se pode bloquear\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: non se pode crear: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: non se puido crea-lo rexistro de versión: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: creouse unha base de datos de confianza incorrecta\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: creouse a base de datos de confianza\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: base de datos de confianza non válida\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: fallo ao crear unha táboa hash: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: erro ao actualiza-lo rexistro de versión: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: erro ao le-lo rexistro de versión: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: erro ao escribi-lo rexistro de versión: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "base de datos de confianza: lseek fallou: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "base de datos de confianza: fallou a lectura (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: non é un ficheiro de base de datos de confianza\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: rexistro de versión con número de rexistro %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versión do ficheiro incorrecta %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: erro ao ler un rexistro libre: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: erro ao escribi-lo rexistro de directorios: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: non se puido pór a cero un rexistro: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: non se puido engadir un rexistro: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"a base de datos de confianza está corrompida; execute \"gpg --fix-trustdb"
-"\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' non é un ID longo de chave válido\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "chave %08lX: aceptada como chave de confianza\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "a chave %08lX aparece máis dunha vez na base de datos de confianza\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"chave %08lX: non hai unha chave pública para a chave de confianza - omitida\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "rexistro de confianza %lu, tipo da petición %d: fallou a lectura: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "o rexistro de confianza %lu non é do tipo %d solicitado\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "rexistro de confianza %lu, tipo %d: fallou a escritura: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "base de datos de confianza: fallou a sincronización: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "non se precisa comproba-la base de datos de confianza\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "hase comproba-la base de datos de confianza o %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "comprobando a base de datos de confianza\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "non se atopou a chave pública %08lX: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "non se atopou a chave pública da clave de confianza absoluta %08lX\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"comprobando con profundidade %d asinadas=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%"
-"d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"non se puido verifica-la sinatura.\n"
-"Por favor, lembre que o ficheiro de sinatura (.sig ou .asc) debería\n"
-"se-lo primeiro ficheiro que se indique na liña de comandos.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr ""
-"a liña de entrada %u é longa de máis ou fáltalle a marca de fin de liña\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"a chave non está marcada coma insegura - non se pode empregar co xerador de "
-"números aleatorios falso\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "omítese `%s': duplicada\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "omítese `%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "omítese: a chave secreta xa está presente\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"ignorouse `%s': ¡esta é unha chave ElGamal xerada por PGP que non é segura "
-"para sinaturas!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "O ficheiro `%s' xa existe. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "¿Sobrescribir? (s/N) "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: sufixo descoñecido\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Introduza o novo nome de ficheiro"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "escribindo na saída estándar\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "suponse que hai datos asinados en `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: creouse un novo ficheiro de opcións\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: non foi posible crear un directorio: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: directorio creado\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr "AVISO: cifrouse a mensaxe cunha chave feble no cifrado simétrico.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problema ao manexa-lo paquete cifrado\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "creouse unha chave feble - volvendo a tentalo\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"non se pode evitar unha chave feble para o cifrado simétrico; tentouse %d "
-"veces\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA require o emprego dun algoritmo hash de 160 bits\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr ""
-"iso non se pode facer no modo de procesamento por lotes sen \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "¿Borrar esta chave do chaveiro? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "¡Esta é unha chave secreta! - ¿está seguro de que quere borrala? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "fallou o borrado do bloque de chaves: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "borrouse a información de confianza\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "¡hai unha chave secreta para a chave pública \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "empregue a opción \"--delete-secret-keys\" para borrala primeiro.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"A asignación dun valor aquí é cousa súa; este valor nunca se ha exportar\n"
-"a ningún terceiro. Precísase para implementa-la rede de confianza; non ten\n"
-"nada que ver coa rede de certificados."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Para construí-la Rede-de-Confianza, GnuPG precisa saber que chaves teñen\n"
-"confianza absoluta - esas adoitan se-las chaves das que ten acceso á chave\n"
-"secreta. Responda \"si\" para lle dar confianza total a esta chave\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Se desexa empregar esta chave revocada, conteste \"si\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "Se desexa empregar esta clave na que non se confía, conteste \"si\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Introduza o ID de usuario da persoa á que lle quere manda-la mensaxe."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Seleccione o algoritmo a usar.\n"
-"\n"
-"DSA (tamén chamado DSS) é un algoritmo de sinatura dixital, que só se pode\n"
-"empregar para asinar. É o algoritmo aconsellado porque é moito máis rápido\n"
-"verificar unha sinatura DSA que unha sinatura ElGamal.\n"
-"\n"
-"ElGamal é un algoritmo que se pode empregar para asinar e cifrar. OpenPGP\n"
-"distingue entre dúas variantes do algoritmo: un que só cifra e outro que\n"
-"asina e cifra; realmente é o mesmo, pero hai que escoller algúns parámetros\n"
-"dun xeito especial para crear unha clave que sexa segura para asinar: este\n"
-"programa faino, pero outras implementacións de OpenPGP non teñen por que\n"
-"entende-la variante de asinado+cifrado.\n"
-"\n"
-"A primeira clave (a primaria) debe ser sempre unha clave capaz de asinar;\n"
-"este é o motivo polo que a clave ElGamal que só cifra non está dispoñible\n"
-"neste menú."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Aínda que estas chaves están definidas no RFC2440, non se aconsellan\n"
-"porque non están soportadas por tódolos programas, e as sinaturas\n"
-"creadas con elas son moi grandes e lentas de comprobar."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Introduza o tamaño da chave"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Conteste \"si\" ou \"non\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Introduza o valor requerido tal como se amosa no indicativo.\n"
-"É posible introducir unha data ISO (AAA-MM-DD) pero non ha obter unha\n"
-"boa resposta de erro - no canto diso, o sistema ha tratar de interpreta-lo\n"
-"valor proporcionado coma se fora un intervalo."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Introduza o nome do propietario da chave"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "por favor, introduza un enderezo de e-mail (opcional pero recomendado)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Por favor, introduza un comentario (opcional)"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N para cambia-lo nome.\n"
-"C para cambia-lo comentario.\n"
-"E para cambia-lo enderezo de e-mail.\n"
-"O para continuar coa xeración da chave.\n"
-"S para saír da xeración da chave."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Conteste \"si\" (ou só \"s\") se é correcto xerar esta subchave."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Cando asina un ID de usuario dunha chave, debería comprobar antes\n"
-"que a chave pertence á persoa que aparece no identificador. É útil para os\n"
-"demais saber con canto tino comprobou isto.\n"
-"\n"
-"\"0\" significa que non di nada do coidado co que comprobou a chave.\n"
-"\n"
-"\"1\" significa que cre que a chave pertence á persoa que o afirma, pero "
-"non\n"
-" puido ou non quixo verifica-la chave. É útil para verificacións de\n"
-" \"personaxes\", nas que asina a chave dun usuario pseudónimo.\n"
-"\n"
-"\"2\" significa que fixo unha comprobación informal da chave. Por exemplo,\n"
-" pode significar que comprobou a pegada dixital da chave e comprobou\n"
-" a identidade do usuario na chave contra unha identificación "
-"fotográfica.\n"
-"\n"
-"\"3\" significa que fixo unha comprobación extensiva da chave. Por exemplo,\n"
-" pode significar que comprobou a pegada dixital da chave co propietario\n"
-" da chave en persoa, e que comprobou, cun documento difícil de "
-"falsificar\n"
-" cunha identificación fotográfica (coma o carnet de identidade ou\n"
-" pasaporte) que o nome do propietario da chave coincide co do "
-"identificador\n"
-" de usuario da chave, e que comprobou (por intercambio de correo\n"
-" electrónico) que o enderezo de e-mail da chave pertence ao propietario\n"
-" da chave.\n"
-"\n"
-"Teña en conta que os exemplos de enriba para os niveis 2 e 3 son *só*\n"
-"exemplos. Á final, depende de vostede decidir que significan \"informal\" e\n"
-"\"extensivo\" ao asinar outras chaves.\n"
-"\n"
-"Se non sabe cal é a resposta correcta, resposte \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Conteste \"si\" se quere asinar TÓDOLOS IDs de usuario"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Conteste \"si\" se realmente desexa borrar este ID de usuario.\n"
-"¡Tamén se han perder tódolos certificados!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Conteste \"si\" se é correcto borrar esta subchave"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Esta é unha sinatura válida na chave; normalmente non ha borrar esta\n"
-"sinatura porque pode ser importante para estabrecer unha conexión de\n"
-"confianza na chave ou noutra chave certificada por esta chave."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Non se pode verificar esta sinatura porque non posúe a chave\n"
-"correspondente. Debería retrasa-lo borrado ata que saiba que chave\n"
-"se empregou porque esta chave de sinatura podería estabrecer unha\n"
-"conexión de confianza mediante outra chave xa certificada."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "A sinatura non é correcta. Ten sentido borrala do chaveiro."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Esta é unha sinatura que liga o ID de usuario á chave. Normalmente\n"
-"non é unha boa idea borrar unha sinatura como esta. De feito,\n"
-"GnuPG pode non ser capaz de usar máis esta chave. Así que faga isto\n"
-"só se esta auto-sinatura non é correcta por algun motivo e hai\n"
-"unha segunda á súa disposición."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Cambia-las preferencias de tódolos IDs de usuario (ou só dos seleccionados)\n"
-"á lista actual de preferencias. A marca de tempo de tódalas auto-sinaturas\n"
-"afectadas ha avanzar un segundo.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Por favor, introduza o contrasinal; esta é unha frase secreta \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Por favor, repita o último contrasinal, para estar seguro do que tecleou."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Introduza o nome do ficheiro ao que corresponde a sinatura"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Conteste \"si\" se é correcto sobrescribi-lo ficheiro"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Por favor, introduza un novo nome de ficheiro. Se só preme ENTER, hase\n"
-"emprega-lo ficheiro por defecto (que se amosa entre corchetes)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Debería especificar un motivo para o certificado. Dependendo do contexto\n"
-"pode escoller desta lista:\n"
-" \"Descobreuse a chave\"\n"
-" Emprégueo se ten motivos para crer que algunha persoa non autorizada\n"
-" obtivo acceso á súa chave secreta.\n"
-" \"A chave é obsoleta\"\n"
-" Emprégueo se cambiou esta chave cunha máis recente.\n"
-" \"Xa non se emprega a chave\"\n"
-" Emprégueo se retirou esta chave.\n"
-" \"O ID de usuario xa non é válido\"\n"
-" Emprégueo para indicar que o ID de usuario xa non se debería empregar;\n"
-" adoita empregarse para marcar un enderezo de correo non válido.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Se quere, pode introducir un texto que describa por que emite este\n"
-"certificado de revocación. Por favor, manteña este texto breve.\n"
-"Unha liña en branco remata o texto.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Non hai axuda dispoñible"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Non hai axuda dispoñible para `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "erro ao crea-lo chaveiro `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "chaveiro `%s' creado\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "fallo ao reconstruí-la caché de chaveiros: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "AVISO: existen dous ficheiros con información confidencial.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s é o que non cambiou\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s é o novo\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Por favor, amañe este posible fallo de seguridade\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "comprobando o chaveiro `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu chaves comprobadas ata o momento (%lu sinaturas)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu chaves comprobadas (%lu sinaturas)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: chaveiro creado\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "ten que iniciar GnuPG outra vez para que lea o novo ficheiro de opcións\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "o cambio de permisos de `%s' fallou: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOME=VALOR|usar estes datos de notación"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "o primeiro carácter dun nome de notación debe ser unha letra ou guión "
-#~ "baixo\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "os puntos dun nome de notación deben estar rodeados por outros "
-#~ "caracteres\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "AVISO: Esta chave xa ten unha identificación fotográfica.\n"
-#~ " Se engade outra pode confundir a algunhas versións de PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Só pode ter unha identificación fotográfica nunha chave.\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Pegada dactilar:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Pegada dactilar:"
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "pedíronse demasiados bits aleatorios; o límite é %d\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NOMES]|verifica-la base de datos de confianza"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key id-de-usuario"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key id de usuario"
-
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-key-and-public-key id-de-usuario"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "Para obter máis información vexa http://www.gnupg.org"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "iImMsS"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Non se puido atopar unha ruta de confianza válida ata a chave. Hase ver "
-#~ "se\n"
-#~ "se pode asignar algún valor de confianza non asignado.\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Non se atopou unha ruta que conduza a unha das nosas chaves.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Non se atoparon certificados con confianza non definida.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Non se cambiou ningún valor de confianza.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr ""
-#~ "%08lX: non hai información para calcular unha probabilidade de confianza\n"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Introduza o ID de usuario: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "omitida: a chave pública xa está estabrecida con --encrypt-to\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: erro ao verifica-la chave: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "¿Seguro que quere crear unha chave para asinar e cifrar? "
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "¿Está seguro de precisar un tamaño de chave tan grande? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: non se atopou o usuario: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "problema de lectura do certificado: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "demasiadas entradas na caché de chaves descoñecidas - desactivada\n"
-
-#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
-#~ msgstr ""
-#~ "non se importou a chave secreta %08lX (empregue %s para permitilo)\n"
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "chave %08lX: a nosa copia non ten auto-sinatura\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: usuario non atopado\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr ""
-#~ "a actualización da base de datos de confianza fallou:\n"
-#~ "%s\n"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr ""
-#~ "non hai un servidor de chaves coñecido (empregue a opción --keyserver)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: non é un ID de chave válido\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "asumindo un MDC incorrecto debido a un bit crítico\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "erro ao le-lo rexistro de directorio para o LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr ""
-#~ "lid %lu: esperábase un rexistro de directorio, obtívose un tipo %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "non hai unha chave primaria para o LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "erro ao le-la chave primaria para o LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record fallou: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "chave %08lX: a consulta do rexistro fallou\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "chave %08lX: xa está na tabla de chaves de confianza\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "NOTA: a chave secreta %08lX NON está protexida.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "chave %08lX: as chaves secreta e pública non coinciden\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "erro ao enumera-las chaves secretas: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "chave %08lX.%lu: Ligadura de subchave correcta\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "chave %08lX.%lu: Ligadura de subchave non válida: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "chave %08lX.%lu: Revocación de chave válida\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "chave %08lX.%lu: Revocación de chave non válida: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Auto-sinatura correcta"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Auto-sinatura non válida"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Omítese unha revocación de ID de usuario válida debido a unha auto-"
-#~ "sinatura máis recente"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Revocación de ID de usuario válida"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Revocación de ID de usuario non válida"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Revocación de certificado válida"
-
-#~ msgid "Good certificate"
-#~ msgstr "Certificado correcto"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Revocación de certificado non válida"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Certificado non válido"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "o rexistro de sinatura %lu[%d] apunta a un rexistro incorrecto.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "certificado duplicado - borrado"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir fallou: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: a inserción fallou: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: a inserción fallou: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: inserido\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "erro lendo o rexistro de directorio: %s\n"
-
-#~ msgid "\t%lu keys with errors\n"
-#~ msgstr "\t%lu chaves con erros\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu chaves inseridas\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: rexistro de directorio sen chave - ignorado\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\t%lu debidos a novas chaves públicas\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu chaves omitidas\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu chaves actualizadas\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Ooops, non hai chaves\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Ooops, non hai IDs de usuario\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr ""
-#~ "check_trust:\n"
-#~ "a búsqueda de rexistro de directorio fallou: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr ""
-#~ "chave %08lX:\n"
-#~ "a inserción na base de datos de confianza fallou: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "chave %08lX.%lu: inserida na base de datos de confianza\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "chave %08lX.%lu: creada no futuro (salto no tempo ou problema de reloxo)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "chave %08lX.%lu: caducou o %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "chave %08lX.%lu: a verificación de confianza fallou: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "problema ao buscar '%s' na base de datos de confianza: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr "o usuario '%s' non está na base de datos de confianza - inserindo\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "erro ao pór '%s' na base de datos de confianza: %s\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr ""
-#~ "AVISO: aínda non se poden manexar rexistros de preferencias longos\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: non se pode crea-lo chaveiro: %s\n"
-
-#~ msgid "set debugging flags"
-#~ msgstr "axusta-los valores de depuración"
-
-#~ msgid "enable full debugging"
-#~ msgstr "habilitar depuración total"
-
-#~ msgid "do not write comment packets"
-#~ msgstr "non escribir paquetes de comentario"
-
-#~ msgid "(default is 1)"
-#~ msgstr "(por defecto é 1)"
-
-#~ msgid "(default is 3)"
-#~ msgstr "(por defecto é 3)"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr " (%d) ElGamal nun paquete v3\n"
-
-#~ msgid "Key generation can only be used in interactive mode\n"
-#~ msgstr "A xeración de chaves somentes pode ser usada no modo interactivo\n"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "A chave RSA non pode user usada nesta version\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Non hay unha chave para o ID de usuario\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Non hai un ID de usuario para a chave\n"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "non hai chave secreta disponible para desencriptar\n"
-
-#~ msgid ""
-#~ "RSA keys are deprecated; please consider creating a new key and use this "
-#~ "key in the future\n"
-#~ msgstr ""
-#~ "As chaves RSA están obsoletas; por favor, considere a opción de crear "
-#~ "unha\n"
-#~ "chave nova e usa-la no futuro.\n"
diff --git a/po/id.po b/po/id.po
deleted file mode 100644
index 407348c29..000000000
--- a/po/id.po
+++ /dev/null
@@ -1,4707 +0,0 @@
-# gnupg 1.0.7 (Indonesian)
-# Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-# Tedi Heriyanto <tedi_h@gmx.net>, 1999, 2000, 2001, 2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-07-24 21:11GMT+0700\n"
-"Last-Translator: Tedi Heriyanto <tedi_h@gmx.net>\n"
-"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 0.9.5\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Peringatan: menggunakan memori yang tidak aman!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-"silakan lihat http://www.gnupg.org/faq.html untuk informasi lebih lanjut\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "operasi tidak mungkin tanpa menginisialisasi memori yang aman\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(anda mungkin menggunakan program yang salah untuk tugas ini)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "ya"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "yY"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "tidak"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "tT"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "keluar"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "kK"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "Kesalahan umum"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "tipe paket tidak dikenal"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "versi tidak dikenal"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algoritma pubkey tidak dikenal"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algoritma digest tidak dikenal"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "kunci publik yang buruk"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "kunci rahasia yang buruk"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "signature yang buruk"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "kesalahan checksum"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "passphrase yang buruk"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "kunci publik tidak ditemukan"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algoritma cipher tidak dikenal"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "tidak dapat membuka keyring"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "paket tidak valid"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armor tidak valid"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "tidak ada user id tsb"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "kunci rahasia tidak tersedia"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "digunakan kunci rahasia yang salah"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "tidak didukung"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "kunci yang buruk"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "kesalahan baca file"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "kesalahan tulis file"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritma kompresi tidak dikenal"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "kesalahan buka file"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "kesalahan buat file"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "passphrase tidak valid"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritma pubkey belum diimplementasikan"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritma cipher belum diimplementasikan"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "kelas signature tidak dikenal"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "kesalahan database trust"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI yang buruk"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "batasan sumber daya"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "keyring tidak valid"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "sertifikat yang buruk"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "user id yang tidak benar"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "kesalahan tutup file"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "kesalahan ganti nama file"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "kesalahan hapus file"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "data tidak terduga"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "konflik timestamp"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritma pubkey tidak dapat digunakan"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "file ada"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "kunci lemah"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argumen tidak valid"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI yang buruk"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI tidak didukung"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "kesalahan jaringan"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "tidak dienkripsi"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "tidak diproses"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "kunci publik tidak dapat dipakai"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "kunci rahasia tidak dapat dipakai"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "kesalahan keyserver"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... kesalahan (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "anda menemukan kesalahan ...(%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "tidak dapat membuka `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "tidak dapat melakukan statistik `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "'%s' bukan file reguler - diabaikan\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "catatan: file random_seed kosong\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "peringatan: ukuran file random_seed tidak valid - tidak dipakai\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "tidak dapat membaca `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "catatan: file random_seed tidak diupdate\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "tidak dapat membuat %s: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "tidak dapat menulis `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "tidak dapat menutup `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "PERINGATAN: menggunakan random number generator yang tidak aman!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Random number generator yang digunakan tidak aman,\n"
-"ia bukanlah RNG yang kuat!\n"
-"\n"
-"JANGAN MENGGUNAKAN DATA YANG DIHASILKAN PROGRAM INI!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Tidak tersedia cukup byte random. Silakan melakukan aktivitas lain agar\n"
-"memungkinkan SO mengumpulkan lebih banyak entropi! (Perlu %d byte lagi)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Perintah:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[file]|buat signature"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[file]|buat signature teks"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "buat detached signature"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "enkripsi data"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[files]|enkripsi file"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "enkripsi hanya dengan symmetric cipher"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "hanya disimpan"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "dekripsi data (default)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[files]|dekripsi file"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verifikasi signature"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "tampilkan kunci"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "tampilkan kunci dan signature"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "periksa signature kunci"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "tampilkan kunci dan fingerprint"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "tampilkan kunci rahasia"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "buat sepasang kunci baru"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "hapus kunci dari keyring publik"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "hapus kunci dari keyring pribadi"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "tandai kunci"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "tandai kunci secara lokal"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "tandai kunci tidak dapat di-revoke"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "tandai kunci secara lokal dan tidak dapat di-revoke"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "tandai atau edit kunci"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "buat sertifikat revokasi"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "ekspor kunci"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "ekspor kunci ke key server"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "impor kunci dari key server"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "cari kunci di key server"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "update semua kunci dari keyserver"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "impor/gabung kunci"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "tampilkan hanya urutan paket"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "ekspor nilai ownertrust"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "impor nilai ownertrust"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "perbarui database trust"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "perbarui database trust secara otomatis"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "perbaiki database trust yang terkorupsi"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "De-Armor file atau stdin"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "En-Armor file atau stdin"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [file]|cetak digest pesan"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Pilihan:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "ciptakan output ascii"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NAMA|enkripsi untuk NAMA"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NAMA|gunakan NAMA sebagai penerima baku"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "gunakan kunci baku sebagai penerima baku"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "gunakan id-user ini untuk menandai/dekripsi"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|set tingkat kompresi N (0 tidak ada)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "gunakan mode teks kanonikal"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "gunakan sebagai file output"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "detil"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "lebih diam"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "jangan menggunakan terminal"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "paksa signature v3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "jangan paksa signature v3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "paksa signature kunci v4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "jangan paksa signature kunci v4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "selalu gunakan MDC untuk enkripsi"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "jangan gunakan MDC untuk enkripsi"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "jangan buat perubahan"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "gunakan gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "mode batch: tanpa tanya"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "asumsikan ya untuk seluruh pertanyaan"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "asumsikan tidak untuk seluruh pertanyaan"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "tambah keyring ini ke daftar keyring"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "tambah keyring rahasia ini ke daftar"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "tampilkan keyring tempat kunci yang dipilih berada"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NAMA|gunakan NAMA sebagai kunci rahasia baku"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|gunakan keyserver ini utk lihat kunci"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAMA|set charset terminal ke NAMA"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "baca pilihan dari file"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|tulis info status ke FD ini"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[file]|tulis status info ke file"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KEYID|sangat percayai kunci ini"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FILE|muat modul ekstensi FILE"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emulasikan mode seperti dalam RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "set pilihan semua paket, cipher, digest ke perilaku OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "set pilihan semua paket, cipher, digest ke perilaku PGP 2.x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|gunakan passphrase mode N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NAMA|gunakan algoritma digest NAMA utk passphrase"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NAMA|gunakan algoritma cipher NAMA untuk passphrase"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NAMA|gunakan algoritma cipher NAMA"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NAMA|gunakan algoritma digest pesan NAMA"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|gunakan algoritma kompresi N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "buang field keyid paket terenkripsi"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Tampilkan Photo IDs"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Jangan tampilkan Photo IDs"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Set perintah baris untuk melihat Photo IDs"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Lihat man page untuk daftar lengkap semua perintah dan option)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Contoh:\n"
-"\n"
-" -se -r Bob [file] tandai dan enkripsi untuk user Bob\n"
-" --clearsign [file] buat signature berbentuk teks\n"
-" --detach-sign [file] buat signature detached\n"
-" --list-keys [nama] tampilkan kunci\n"
-" --fingerprint [nama] tampilkan fingerprint\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Silakan laporkan kesalahan ke <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Pemakaian: gpg [pilihan] [file] (-h untuk bantuan)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintaks: gpg [pilihan] [file]\n"
-"tandai, cek, enkripsi atau dekripsi\n"
-"operasi baku tergantung pada data input\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritma yang didukung:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "pemakaian: gpg [pilihan] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "perintah saling konflik\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Peringatan: kepemilikan tidak aman pada %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Peringatan: kepemilikan tidak aman pada %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "CATATAN: tidak ada file pilihan baku `%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "CATATAN: tidak ada file pilihan baku `%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "file pilihan `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "membaca pilihan dari `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s bukanlah set karakter yang valid\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "tidak dapat memparsing URI keyserver\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: versi file %d tidak valid\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armor tidak valid"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: versi file %d tidak valid\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "keyring tidak valid"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "PERINGATAN: program mungkin membuat file core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "PERINGATAN: %s menimpa %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "CATATAN: %s tidak untuk pemakaian normal!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s tidak dibolehkan dengan %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s tidak masuk akal dengan %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"anda hanya dapat membuat signature detached atau clear saat dalam mode --"
-"pgp2\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-"anda tidak dapat menandai dan mengenkripsi pada saat bersamaan dalam mode --"
-"pgp2\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-"anda harus menggunakan file (dan bukan pipe) saat bekerja dengan opsi --"
-"pgpg2\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "mengenkripsi pesan dalam mode --pgp2 membutuhkan cipher IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "pesan ini mungkin tidak dapat digunakan oleh PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "algoritma cipher yang dipilih tidak valid\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "algoritma digest yang dipilih tidak valid\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "algoritma digest yang dipilih tidak valid\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "algoritma kompresi harus di antara %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed harus lebih dari 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed harus lebih dari 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth harus di antara 1 hingga 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "CATATAN: mode S2K sederhana (0) tidak dianjurkan\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "mode S2K yang tidak valid; harus 0, 1 atau 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "default-check-level tidak valid; harus 0, 1, 2, atau 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "preferensi tidak valid\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "preferensi tidak valid\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "preferensi tidak valid\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "preferensi tidak valid\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "gagal inisialisasi TrustDB: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [namafile]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [namafile]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [namafile]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [namafile]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [namafile]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [namafile]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [namafile]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [namafile]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key id-user"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key id-user"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key user-id"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key user-id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id-user [perintah]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "tidak dapat membuka %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [id-user] [keyring]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "gagal dearmoring: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "gagal enarmoring: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algoritma hash tidak valid `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[namafile]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Teruskan dan ketikkan pesan anda ....\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "tidak dapat membuka `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"nama notasi hanya terdiri dari huruf, digit, titik atau garis bawah dan "
-"diakhiri dengan sebuah '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "nilai notasi tidak boleh menggunakan karakter kendali\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "URL sertifikasi kebijakan yang diberikan tidak valid\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "URL signature kebijakan yang diberikan tidak valid\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armor: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "header armor tidak valid: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "header armor: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "header clearsig tidak valid\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "signature teks bersarang\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "dash escaped line tidak valid: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armor tidak terduga:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "karakter radix64 tidak valid %02x dilewati\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "eof prematur (tanpa CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "eof prematur (dalam CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC tidak tepat\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "kesalahan CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "eof prematur (dalam Trailer)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "kesalahan dalam garis trailer\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "tidak ditemukan data OpenPGP yang valid.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armor tidak valid: baris melebihi %d karakter\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"karakter yang dapat dicetak dalam armor - mungkin telah digunakan MTA yang "
-"mengandung bug\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Tidak ada alasan diberikan"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Kunci dilampaui"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Kunci ini telah dikompromikan"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Kunci tidak lagi digunakan"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "ID User tidak lagi valid"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Alasan pembatalan:"
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Komentar pembatalan:"
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Tidak ada nilai trust untuk:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Silakan putuskan seberapa jauh anda percaya user ini untuk\n"
-"secara tepat memverifikasi kunci user lain (dengan melihat pada passpor,\n"
-"memeriksa fingerprint dari berbagai sumber...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Tidak tahu\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d: Saya TIDAK percaya\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Saya cukup percaya\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Saya sangat percaya\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Saya sangat percaya sekali\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = beri saya informasi lebih banyak lagi\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = kembali ke menu utama\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = lewati kunci ini\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = berhenti\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Keputusan anda? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Anda ingin menset kunci ini menjadi sangat percaya sekali?"
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Sertifikat mengarahkan ke kunci terpercaya:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "kunci %08lX: kunci telah dibatalkan!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Tetap gunakan kunci ini? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "kunci %08lX: subkey telah dibatalkan!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: kunci telah berakhir\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Tidak ada indikasi bahwa kunci ini benar-benar milik pemiliknya\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Kita TIDAK percaya kunci ini\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Tidak pasti kunci ini milik pemiliknya\n"
-"tapi tetap diterima\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Kunci ini mungkin milik pemiliknya\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Kunci ini milik kita\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Tidak pasti bahwa kunci milik pemiliknya.\n"
-"Jika anda sangat tahu apa yang sedang anda lakukan, anda boleh menjawab\n"
-"pertanyaan berikut dengan ya\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "PERINGATAN: Menggunakan kunci tidak dipercaya!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "PERINGATAN: Kunci ini telah dibatalkan oleh pemiliknya!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Hal ini dapat berarti bahwa signature adalah palsu.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "PERINGATAN: Subkey ini telah dibatalkan oleh pemiliknya!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Catatan: Kunci ini telah ditiadakan\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Catatan: Kunci ini telah berakhir!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr ""
-"PERINGATAN: Kunci ini tidak disertifikasi dengan sig yang terpercaya!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " Tidak ada indikasi signature milik pemilik.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "PERINGATAN: Kita tidak percaya kunci ini!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Signature mungkin palsu.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"PERINGATAN: Kunci tdk disertifikasi dg signature terpercaya yg cukup!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Tidak pasti signature milik pemilik.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: dilewati: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: dilewati: kunci publik telah ada\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Anda tidak menspesifikasikan ID user. (anda dapat gunakan \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Masukkan user ID. Akhiri dengan baris kosong: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Tidak ada ID user tersebut.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "dilewati: kunci publik telah diset sebagai penerima baku\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Kunci publik dimatikan.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "dilewati: kunci publik telah diset\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "penerima baku tidak dikenal `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: dilewati: kunci publik dimatikan\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "tidak ada alamat yang valid\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "preferensi %c%lu tidak valid\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "preferensi %c%lu ganda \n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "terlalu banyak preferensi `%c'\n"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "Karakter tidak valid dalam string\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "menulis self signature\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "menulis self signature\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "menulis key binding signature\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "keysize tidak valid; menggunakan %u bit\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "keysize dibulatkan hingga %u bit\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Silakan pilih kunci yang anda inginkan:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA dan ElGamal (baku)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (hanya menandai)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (hanya enkripsi)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (tandai dan enkripsi)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (hanya menandai)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (hanya enkripsi)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (tandai dan enkripsi)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Pilihan anda? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "Penggunaan algoritma ini didepresiasi - tetap ciptakan?"
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Pilihan tidak valid.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Akan dibuat satu pasang kunci baru %s.\n"
-" keysize minimum adalah 768 bit\n"
-" keysize default adalah 1024 bit\n"
-" keysize tertinggi dianjurkan 2048 bit\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Keysize yang anda inginkan? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA hanya membolehkan keysize dari 512 hingga 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr ""
-"keysize terlalu kecil; 1024 adalah nilai terendah yang diijinkan untuk RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "keysize terlalu kecil; 768 adalah nilai terendah yang diijinkan.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "keysize terlalu besar; %d adalah nilai tertinggi yang diijinkan.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Keysize lebih besar dari 2048 tidak dianjurkan karena\n"
-"komputasi akan sangat lama!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Apakah anda yakin memerlukan keysize ini? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Oke, tetapi ingat bahwa radiasi monitor dan keyboard anda juga sangat mudah "
-"diserang!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Keysize yang diminta adalah %u bit\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "dibulatkan hingga %u bit\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Silakan spesifikasikan lama kunci tetap valid.\n"
-" 0 = kunci tidak pernah berakhir\n"
-" <n> = kunci berakhir dalam n hari\n"
-" <n>w = kunci berakhir dalam n minggu\n"
-" <n>m = kunci berakhir dalam n bulan\n"
-" <n>y = kunci berakhir dalam n tahun\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Silakan spesifikasikan lama signature tetap valid.\n"
-" 0 = signature tidak pernah berakhir\n"
-" <n> = signature berakhir dalam n hari\n"
-" <n>w = signature berakhir dalam n minggu\n"
-" <n>m = signature berakhir dalam n bulan\n"
-" <n>y = signature berakhir dalam n tahun\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Kunci valid untuk? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Signature valid untuk? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "nilai yang tidak valid\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s tidak pernah berakhir\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s berakhir pada %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Sistem anda tidak dapat menampilkan tanggal melebihi 2038.\n"
-"Namun, ia dapat menanganinya secara benar hingga 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Benar (y/t)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Anda perlu sebuah User-ID untuk mengidentifikasi kunci anda; software "
-"membuat \n"
-"user-id dari Nama sebenarnya, Komentar dan Alamat email dalam bentuk:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nama sebenarnya: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Karakter tidak valid dalam nama\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Nama tidak boleh dimulai dengan digit\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Nama harus berukuran minimum 5 karakter\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Alamat email: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Bukan alamat email yang valid\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Komentar: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Karakter tidak valid dalam komentar\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Anda menggunakan set karakter `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Anda memilih USER-ID ini:\n"
-" \"%s\"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Jangan menaruh alamat email ke dalam nama sebenarnya atau komentar\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnKkEeOoQq"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (Q)uit? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (O)ke/(Q)uit? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Silakan perbaiki kesalahan ini dulu\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Anda perlu sebuah passphrase untuk melindungi kunci rahasia anda.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "passphrase tidak diulang dengan benar; coba lagi"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Anda tidak ingin sebuah passphrase - ini mungkin ide yang *buruk*!\n"
-"Namun saya akan tetap lakukan. Anda dapat merubah passphrase anda setiap "
-"saat,\n"
-"menggunakan program ini dengan pilihan \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Kita perlu membuat banyak byte random. Adalah ide yang baik untuk melakukan\n"
-"aksi lain (mengetik pada keyboard, menggerakkan mouse, memakai disk)\n"
-"selama pembuatan prima; ini akan memberi random number generator kesempatan\n"
-"yang baik untuk memperoleh entropi.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "Keypair DSA akan memiliki 1024 bit.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Pembuatan kunci dibatalkan.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "menulis kunci publik ke `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "menulis kunci rahasia ke `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "tidak ditemukan keyring publik yang dapat ditulisi: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "tidak ditemukan keyring rahasia yang dapat ditulisi: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "kesalahan menulis keyring publik `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "kesalahan menulis keyring rahasia `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "kunci publik dan rahasia dibuat dan ditandai.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "kunci ditandai sebagai sangat dipercaya.\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Perhatikan bahwa kunci ini tidak dapat digunakan untuk enkripsi. Anda \n"
-"mungkin ingin menggunakan perintah \"--edit-key\" untuk membuat kunci kedua "
-"untuk tujuan ini.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Pembuatan kunci gagal: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "CATATAN: membuat subkey bagi kunci-kunci v3 tidak OpenPGP compliant\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Ingin diciptakan? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output tidak berfungsi untuk perintah ini\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: tidak dapat membuka: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "kesalahan penciptaan passphrase: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' sudah dikompresi\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: PERINGATAN: file kosong\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"anda hanya dapat mengenkripsi ke kunci RSA 2048 bit atau kurang dalam mode --"
-"pgp2\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "Membaca dari `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"tidak dapat menggunakan cipher IDEA untuk semua kunci yang anda enkripsi.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "CATATAN: algoritma cipher %d tidak ditemukan dalam preferensi\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Perintah ini tidak dibolehkan saat dalam mode %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s dienkripsi untuk: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "kunci '%s' tidak ditemukan: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "gagal membaca keyblock: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "kunci %08lX: bukan kunci rfc2440 - dilewati\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "kunci %08lX: tidak diproteksi - dilewati\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "kunci %08lX: kunci gaya PGP 2.x - dilewati\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "PERINGATAN: tidak ada yang diekspor\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "terlalu banyak masukan dalam pk cache - ditiadakan\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[User id tidak ditemukan]"
-
-#: g10/getkey.c:1438
-#, fuzzy, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr "kunci tidak valid %08lX dibuat valid oleh --always-trust\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "menggunakan kunci sekunder %08lX bukannya kunci primer %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "kunci %08lX: kunci rahasia tanpa kunci publik - dilewati\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "melewati blok tipe %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu kunci telah diproses\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "kesalahan membaca `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Jumlah yang telah diproses: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " lewati kunci baru: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " tanpa ID user: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " diimpor: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " tidak berubah: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " ID user baru: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " subkey baru: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " signature baru: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " pembatalan kunci baru: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " kunci rahasia dibaca: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " kunci rahasia diimpor: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " kunci rahasia tidak berubah: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " diimpor: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "kunci %08lX: tidak ada ID user\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "kunci %08lX: tidak ada subkey untuk key binding\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "kunci %08lX: menerima ID user yang tidak self-signed "
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "kunci %08lX: tidak ada ID user yang valid\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "mungkin disebabkan oleh self-signature yang tidak ada\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "kunci %08lX: kunci publik tidak ditemukan: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "kunci %08lX: kunci baru - dilewati\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "tidak ditemukan keyring yang dapat ditulisi: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "menulis ke `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "kesalahan menulis keyring `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "kunci %08lX: kunci publik diimpor\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "kunci %08lX: tidak cocok dengan duplikat kami\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "kunci %08lX: 1 user ID baru\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "kunci %08lX: %d user ID baru\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "kunci %08lX: 1 signature baru\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "kunci %08lX: %d signature baru\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "kunci %08lX: 1 subkey baru\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "kunci %08lX: %d subkey baru\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "kunci %08lX: tidak berubah\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "tidak ada keyring rahasia baku: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "kunci %08lX: kunci rahasia diimpor\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "kunci %08lX: sudah ada di keyring rahasia\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "kunci %08lX: kunci rahasia tidak ditemukan: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"kunci %08lX: tdk ada kunci publik-tdk dpt mengaplikasikan sertifikat "
-"pembatalan\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - ditolak\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "kunci %08lX: sertifikat pembatalan diimpor\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "kunci %08lX: tidak ada ID user untuk signature\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "kunci %08lX: algoritma publik key tidak didukung\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "kunci %08lX: self-signature tidak valid\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "kunci %08lX: tidak ada subkey untuk key binding\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "kunci %08lX: algoritma publik key tidak didukung\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "kunci %08lX: subkey binding tidak valid\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "kunci %08lX: subkey binding tidak valid\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "kunci %08lX: tidak ada subkey untuk key binding\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "kunci %08lX: subkey binding tidak valid\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "kunci %08lX: subkey binding tidak valid\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "kunci %08lX: melewati ID user "
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "kunci %08lX: melewati subkey\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "kunci %08lX: signature tidak dapat diekpor (kelas %02x) - dilewati\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "kunci %08lX: sertifikat pembatalan di tempat yang salah - dilewati\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - dilewati\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "kunci %08lX: sertifikat pembatalan di tempat yang salah - dilewati\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "kunci %08lX: terdeteksi ID user duplikat - digabungkan\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "kunci %08lX: penambahan sertifikat pembatalan\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "kunci %08lX: signature kunci langsung ditambahkan\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[pembatalan]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[self-signature]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 signature yang buruk\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d signature yang buruk\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signature tidak diperiksa karena tidak ada kunci\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signature tidak diperiksa karena tidak ada kunci\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signature tidak diperiksa karena kesalahan\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signature tidak diperiksa karena ada kesalahan\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "terdeteksi 1 ID user tanpa self-signature yang valid\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "terdeteksi ID %d user tanpa self-signature yang valid\n"
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "ID User \"%s\" dibatalkan.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Apakah anda yakin masih ingin menandainya?\n"
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "PERINGATAN: `%s' adalah file kosong\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Signature anda saat ini pada \"%s\"\n"
-"adalah signature.lokal \n"
-"\n"
-"Apakah anda ingin menjadikannya signature yang full exportable?\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-"Signature anda saat ini pada \"%s\"\n"
-"adalah signature.lokal \n"
-"\n"
-"Apakah anda ingin menjadikannya signature yang full exportable?\n"
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, fuzzy, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Signature anda saat ini pada \"%s\"\n"
-"adalah signature.lokal \n"
-"\n"
-"Apakah anda ingin menjadikannya signature yang full exportable?\n"
-
-#: g10/keyedit.c:426
-#, fuzzy
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-"Signature anda saat ini pada \"%s\"\n"
-"adalah signature.lokal \n"
-"\n"
-"Apakah anda ingin menjadikannya signature yang full exportable?\n"
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" Sudah ditandai %s dengan kunci %08lX\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" Sudah ditandai %s dengan kunci %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Tidak ada yang ditandai dengan kunci %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Kunci ini telah berakhir!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Kunci ini akan kadaluarsa pada %s \n"
-
-#: g10/keyedit.c:502
-#, fuzzy
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Anda ingin signature anda kadaluarsa pada waktu yang sama? (y/n) "
-
-#: g10/keyedit.c:535
-#, fuzzy
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"anda hanya dapat menandai kunci bergaya PGP 2.x saat dalam mode --pgp2\n"
-
-#: g10/keyedit.c:537
-#, fuzzy
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "pesan ini mungkin tidak dapat digunakan oleh PGP 2.x\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Sudah seberapa teliti anda memverifikasi kunci yang akan anda gunakan untuk "
-"menandai benar benar milik\n"
-"orang tersebut? Jika anda tidak tahu jawabannya. masukkan \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Saya tidak akan menjawab.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Saya belum memeriksanya.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Saya telah melakukan pemeriksaan biasa.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Saya telah melakukan pemeriksaan hati-hati.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Apakah anda yakin untuk menandai kunci ini \n"
-"dengan kunci anda: "
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "mungkin disebabkan oleh self-signature yang tidak ada\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Signature akan ditandai sebagai tidak dapat diekspor.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Signature akan ditandai sebagai tidak dapat dibatalkan.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Signature akan ditandai sebagai tidak dapat diekspor.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Signature akan ditandai sebagai tidak dapat dibatalkan.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Saya belum memeriksa kunci ini sama sekali.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Saya telah memeriksa kunci ini.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Saya telah memeriksa kunci ini dengan sangat hati-hati.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Ditandai? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "gagal menandai: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Kunci ini tidak diproteksi.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Bagian rahasia kunci primer tidak tersedia.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Kunci diproteksi.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Tidak dapat mengedit kunci ini: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Masukkan passphrase baru untuk kunci rahasia ini.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Anda tidak ingin passphrase - bukan ide yang baik!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Apakah anda ingin melakukan hal ini? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "memindahkan signature kunci ke tempat yang tepat\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "berhenti dari menu ini"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "simpan"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "simpan dan berhenti"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "bantuan"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "tampilkan bantuan"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "tampilkan fingerprint"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "tampilkan"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "tampilkan kunci dan ID user"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "pilih ID user N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "kunci"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "pilih kunci sekunder N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "periksa"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "tampilkan signature"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "tandai"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "tandai kunci"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "tandai kunci secara lokal"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "tandai kunci sebagai tidak dapat dibatalkan"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "tandai kunci secara lokal dan tidak dapat dibatalkan"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "tambah sebuah ID user"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "tambah sebuah photo ID"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "hapus ID user"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "tambah kunci sekunder"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "hapus kunci sekunder"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "tambah kunci sekunder"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "hapus signature"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "ubah tanggal kadaluarsa"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primer"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "tandai ID user sebagai primer"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "ubah tampilan kunci rahasia dan publik"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "tampilkan preferensi (ahli)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "tampilkan preferensi (verbose)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "set daftar preferensi"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "perbarui preferensi"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "ubah passphrase"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "ubah ownertrust"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "batalkan signature"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "batalkan kunci sekunder"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "tiadakan kunci"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "aktifkan kunci"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "tampilkan photo ID"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "tidak dapat melakukan hal itu dalam mode batch\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "kesalahan membaca keyblock rahasia `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Kunci rahasia tersedia.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Perintah> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Perlu kunci rahasia untuk melakukan hal ini.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Silakan gunakan dulu perintah \"toogle\".\n"
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "Kunci dibatalkan.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Tandai ID seluruh user? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Petunjuk: Pilih ID user untuk ditandai\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Perintah ini tidak dibolehkan saat dalam mode %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Anda harus memilih minimum satu ID user.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Anda tidak dapat menghapus ID user terakhir!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Hapus seluruh ID user terpilih? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Hapus ID user ini? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Anda harus memilih minimum satu kunci.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Anda ingin menghapus kunci terpilih ini? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Anda ingin menghapus kunci ini? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Anda ingin membatalkan kunci terpilih ini? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Anda ingin membatalkan kunci ini? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Perbarui preferensi untuk user ID terpilih?"
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Update preferensi?"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Simpan perubahan? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Berhenti tanpa menyimpan? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "gagal memperbarui: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "gagal perbarui rahasia: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Kunci tidak berubah sehingga tidak perlu pembaharuan.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Perintah tidak valid (coba \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Kunci ini mungkin dibatalkan oleh %s kunci %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (sensitive)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX diciptakan: %s berakhir: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " trust: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Kunci ini telah ditiadakan"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! subkey telah dibatalkan: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev - ditemukan pembatalan palsu\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? masalah memeriksa pembatalan: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"PERINGATAN: Ini adalah kunci bergaya PGP2. Menambahkan sebuah photo ID "
-"dapat menyebabkan beberapa versi\n"
-" PGP menolak kunci ini.\n"
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Anda tetap ingin menambahkannya? (y/n) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Anda tidak boleh menambahkan sebuah photo ID ke kunci bergaya PGP2 \n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Hapus signature baik ini? (y/T/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Hapus signature tidak valid ini? (y/T/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Hapus signature tidak dikenal ini? (y/T/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Yakin ingin menghapus self-signature ini? (y/T)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Menghapus %d signature.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Menghapus %d signature.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Tidak ada yang dihapus.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Masukkan ukuran kunci"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Silakan hapus pilihan dari kunci rahasia.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Silakan pilih maksimum satu kunci sekunder.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Merubah batas waktu untuk kunci sekunder.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Merubah batas waktu untuk kunci primer.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Anda tidak dapat merubah batas waktu kunci v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Tidak ada signature koresponden di ring rahasia\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Anda harus memilih minimum satu ID user.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "kunci %08lX: self-signature tidak valid\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Tidak ada ID user dengan index %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Tidak ada kunci sekunder dengan index %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "ID user: "
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"ditandai dengan kunci anda %08lX pada %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"ditandai dengan kunci anda %08lX pada %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Kunci ini akan kadaluarsa pada %s \n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Anda tetap ingin menambahkannya? (y/n) "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Membuat sertifikat pembatalan untuk signature ini? (y/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Anda telah menandai ID user ini:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " ditandai oleh %08lX pada %s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " dibatalkan oleh %08lX pada %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Anda akan membatalkan signature ini:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " ditandai oleh %08lX pada %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Ingin membuat sertifikat pembatalan? (y/T)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "tidak ada kunci rahasia\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Kebijakan signature: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Kebijakan signature: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "PERINGATAN: ditemukan notasi data tidak valid\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notasi signature: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Notasi signature: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "tidak dapat dibaca manusia"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Keyring"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [berakhir: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "tampilkan kunci dan fingerprint"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingerprint kunci ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Fingerprint kunci ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingerprint kunci ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Fingerprint kunci ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algoritma hash tidak valid `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s data terenkripsi\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "dienkripsi dengan algoritma tidak dikenal %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "kunci publik adalah %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "data terenkripsi dengan kunci publik: DEK baik\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "dienkripsi dengan %u-bit kunci %s, ID %08lX, tercipta %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "dienkripsi dengan kunci %s, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "gagal dekripsi kunci publik: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "asumsikan %s data terenkripsi\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "Cipher IDEA tidak tersedia, secara optimis berusaha menggunakan %s\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "dekripsi lancar\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "PERINGATAN: pesan terenkripsi telah dimanipulasi!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "dekripsi gagal: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "CATATAN: pengirim meminta \"for-your-eyes-only\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "original file name='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "pembatalan mandiri - gunakan \"gpg --import\" untuk mengaplikasikan\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notasi: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Kebijakan: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verifikasi signature tidak diabaikan\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "tidak dapat menangani banyak signature ini\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Signature dibuat %.*s menggunakan kunci %s ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "signature BURUK dari \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Signature kadaluarsa dari \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Signature baik dari \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[uncertain]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Tidak dapat memeriksa signature: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "bukan detached signature\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "kelas signature mandiri 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "signature model lama (PGP 2.X)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "terdeteksi root paket tidak valid dalam proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "tidak dapat meniadakan core dump: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Algoritma eksperimental sebaiknya tidak dipakai!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"algoritma cipher ini didepresiasi; silakan gunakan yang lebih standar!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "plugin cipher IDEA tidak tersedia\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"silakan lihat http://www.gnupg.org/why-not-idea.html untuk informasi lebih "
-"lanjut\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "PERINGATAN: `%s' adalah file kosong\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "PERINGATAN: `%s' adalah file kosong\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "tidak dapat menangani algoritma kunci publik %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "subpaket tipe %d memiliki bit kritis terset\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent tidak tersedia untuk sesi ini\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "tidak dapat menset pid client untuk agen\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "tidak dapat membuat server membaca FD untuk agen\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "tidak dapat membuat server menulis FD untuk agen\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "variabel lingkungan GPG_AGENT_INFO salah bentuk\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "protokol gpg-agent versi %d tidak didukung\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "tidak dapat terkoneksi ke `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "masalah komunikasi dengan gpg-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "masalah dengan agen - tiadakan penggunaan agen\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (ID kunci utama %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Anda perlu passphrase untuk membuka kunci rahasia untuk user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, tercipta %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Masukkan passphrase\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Ulangi passphrase\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "passphrase terlalu panjang\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "respon tidak valid dari agen\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "dibatalkan oleh user\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "masalah dengan agen: agen mengembalikan 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Anda perlu passphrase untuk membuka kunci rahasia untuk\n"
-"pemakai: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bit kunci %s, ID %08lX, tercipta %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "tidak dapat meminta password dalam mode batch\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Masukkan passphrase: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Ulangi passphrase: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "data tidak disimpan; gunakan pilihan \"--output\" untuk menyimpannya\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "kesalahan penciptaan : `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Menghapus signature.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Silakan masukkan nama file data: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "membaca stdin ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "tidak ada data tertandai\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "tidak dapat membuka data tertandai `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "penerima anonim; mencoba kunci rahasia %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "baik, kita adalah penerima anonim.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "encoding lama DEK tidak didukung\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "algoritma cipher %d%s tidak dikenal atau ditiadakan\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "CATATAN: algoritma cipher %d tidak ditemukan dalam preferensi\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "CATATAN: kunci pribadi %08lX berakhir pada %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "kunci %08lX: kunci telah dibatalkan!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "meminta kunci %08lX dari keyserver HKP %s ...\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "tidak dapat memperoleh kunci keyserver: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "kesalahan mengirim ke `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "success sending to `%s' (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "failed sending to `%s': status=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "mencari \"%s\" dari server HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "tidak dapat mencari keyserver: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "bagian kunci rahasia tidak tersedia\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "algoritma proteksi %d%s tidak didukung\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Passphrase tidak valid; silakan coba lagi"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "PERINGATAN: terdeteksi kunci lemah - silakan ubah passphrase lagi.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"ini adalah kunci ElGamal ciptaan PGP yang tidak aman untuk signature!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "kunci publik adalah %lu detik lebih baru daripada signature\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "kunci publik adalah %lu detik lebih baru daripada signature\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "CATATAN: kunci signature %08lX berakhir %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "mengasumsikan signature buruk karena ada bit kritik tidak dikenal\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"PERINGATAN: tidak dapat melakukan %%-expand policy url (terlalu besar). "
-"Menggunakan yang tidak expand.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"PERINGATAN: tidak dapat melakukan %%-expand policy url (terlalu besar). "
-"Menggunakan yang tidak expand.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "Gagal memeriksa signature yang dibuat: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s signature dari: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "PERINGATAN: `%s' adalah file kosong\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"anda hanya dapat menandai kunci bergaya PGP 2.x saat dalam mode --pgp2\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "tidak dapat membuat %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "CATATAN: algoritma cipher %d tidak ditemukan dalam preferensi\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "menandai:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"anda hanya dapat clearsign dengan kunci bergaya PGP 2.x saat dalam mode --"
-"pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "%s enkripsi akan digunakan\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "tidak dapat menangani baris teks lebih dari %d karakter\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "baris input lebih dari %d karakter\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "trustdb rec %lu: lseek gagal: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "trustdb rec %lu: write failed (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transaksi trustdb terlalu besar\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: tidak dapat mengakses: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: direktori tidak ada!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: tidak dapat membuat lock\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: tidak dapat membuat lock\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: tidak dapat membuat: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: gagal membuat catatan versi: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: tercipta trustdb tidak valid\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: tercipta trustdb\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: trustdb tidak valid\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: gagal membuat hashtable: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: kesalahan memperbaharui catatan versi: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: kesalahan membaca catatan versi: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: kesalahan menulis catatan versi: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "trustdb: lseek gagal: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "trustdb: read failed (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: bukan file trustdb\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: catatan versi dengan recnum %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versi file %d tidak valid\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: kesalahan membaca record bebas: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: kesalahan menulis dir record: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: gagal mengosongkan record: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: gagal menambahkan record: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "trustdb terkorupsi; silakan jalankan \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "'%s' bukanlah keyID panjang yang valid\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "kunci %08lX: diterima sebagai kunci terpercaya.\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "kunci %08lX muncul lebih dari satu kali dalam trustdb\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "kunci %08lX: tidak ada kunci publik untuk trusted key- dilewati\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "trust record %lu, req tipe %d: gagal baca: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "trust record %lu tidak dalam jenis yang diminta %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "trust record %lu, tipe %d: gagal menulis: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "trustdb: gagal sync: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "tidak perlu memeriksa trustdb\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "pemeriksaan trustdb berikutnya pada %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "memeriksa trustdb\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "kunci publik %08lX tidak ditemukan: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "kunci publik yang sangat terpercaya %08lX tidak ditemukan\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"signature tidak dapat diverifikasi.\n"
-"Tolong ingat bahwa file signature (.sig atau .asc)\n"
-"haruslah file pertama yang diberikan pada perintah baris.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "baris input %u terlalu panjang atau hilang LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"kunci tidak dianggap sebagai tidak aman - tidak dapat digunakan dengan RNG "
-"palsu!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "lewati `%s': terduplikasi\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "melewati `%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "dilewati: kunci pribadi telah ada\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"melewati `%s': ini adalah kunci ElGamal yang dihasilkan PGP yang tidak aman "
-"untuk signature!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "File `%s' ada. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Ditimpa (y/T)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: suffix tidak dikenal\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Masukkan nama file baru"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "menulis ke stdout\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "mengasumsikan data bertanda dalam `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: file pilihan baru tercipta\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: tidak dapat membuat direktori: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: direktori tercipta\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"PERINGATAN: pesan dienkripsi dengan kunci lemah dalam cipher simetrik.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "masalah menangani paket terenkripsi\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "kunci lemah tercipta - mengulang\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"tidak dapat menghindari kunci lemah untuk cipher simetrik; mencoba %d kali!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "tidak dapat dilakukan dalam mode batch tanpa \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Menghapus kunci ini dari keyring? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Ini adalah kunci rahasia! - Yakin dihapus? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "gagal menghapus keyblok: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "terdapat kunci rahasia untuk kunci publik \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "gunakan pilihan \"--delete-secret-key\" untuk menghapusnya.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Terserah anda untuk memberi nilai baru di sini; nilai ini tidak akan "
-"diekspor\n"
-"ke pihak ketiga. Kami perlu untuk mengimplementasikan web-of-trust; tidak "
-"ada\n"
-"kaitan dengan (membuat secara implisit) web-of-certificates."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Untuk membuat Web-of-Trust, GnuPG perlu tahu kunci mana yang\n"
-"sangat dipercaya - mereka biasanya adalah kunci yang anda punya\n"
-"akses ke kunci rahasia. Jawab \"yes\" untuk menset kunci ini ke\n"
-"sangat dipercaya\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Jika anda ingin menggunakan kunci yang dibatalkan, jawab \"ya\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "Jika anda ingin menggunakan kunci tidak terpercaya ini, jawab \"ya\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Masukkan ID user penerima pesan."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Pilih algoritma untuk digunakan.\n"
-"\n"
-"DSA (DSS) adalah algoritma signature digital yang hanya dapat digunakan \n"
-"untuk signature. Ia merupakan algoritma yang disarankan karena verifikasi\n"
-"signature DSA jauh lebih cepat daripada ElGamal.\n"
-"\n"
-"ElGamal adalah suatu algoritma yang dapat digunakan untuk signature dan \n"
-"enkripsi. OpenPGP membedakannya ke dalam dua bentuk yaitu: hanya enkripsi\n"
-"dan enkripsi+sign; sebenarnya sama, tetapi beberapa parameter harus dipilih\n"
-"secara khusus untuk membuat kunci yang aman untuk signature; program ini\n"
-"melakukannya tetapi implementasi OpenPGP lain tidak harus memahami bentuk\n"
-"signature+enkripsi.\n"
-"\n"
-"Kunci pertama (primer) harus selalu merupakan kunci yang mampu men-sign;\n"
-"hal ini merupakan alasan mengapa kunci ElGamal hanya-enkripsi tidak ada\n"
-"di menu ini."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Meskipun kunci ini didefinisikan dalam RFC2440 mereka tidak disarankan\n"
-"karena belum didukung oleh seluruh program dan signature yang dibuat\n"
-"oleh mereka cukup besar dan sangat lambat untuk diverifikasi."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Masukkan ukuran kunci"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Jawab \"ya\" atau \"tidak\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Masukkan nilai yang diperlukan seperti pada prompt.\n"
-"Dapat digunakan format (YYYY-MM-DD) untuk mengisi tanggal ISO tetapi anda\n"
-"tidak akan mendapat respon kesalahan yang baik - sebaiknya sistem akan\n"
-"berusaha menginterprestasi nilai yang diberikan sebagai sebuah interval."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Masukkan nama pemegang kunci"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "silakan masukkan alamat email (pilihan namun sangat dianjurkan)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Silakan masukkan komentar tambahan"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N untuk merubah nama.\n"
-"K untuk merubah komentar.\n"
-"E untuk merubah alamat email.\n"
-"O untuk melanjutkan dengan pembuatan kunci.\n"
-"K untuk menghentikan pembuatan kunci."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Jawab \"ya\" (atau \"y\") jika telah siap membuat subkey."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Ketika anda menandai user ID pada kunci, anda perlu memverifikasi bahwa "
-"kunci\n"
-"milik orang yang disebut dalam user ID. Ini penting bagi orang lain untuk "
-"tahu\n"
-"seberapa cermat anda memverifikasi ini.\n"
-"\n"
-"\"0\" berarti anda tidak melakukan klaim tentang betapa cermat anda "
-"memverifikasi kunci.\n"
-"\n"
-"\"1\" berarti anda percaya bahwa kunci dimiliki oleh orang yang mengklaim "
-"memilikinya\n"
-" namun anda tidak dapat, atau tidak memverifikasi kunci sama sekali. Hal "
-"ini bergunabagi\n"
-" verifikasi \"persona\", yaitu anda menandai kunci user pseudonymous\n"
-"\n"
-"\"2\" berarti anda melakukan verifikasi kasual atas kunci. Sebagai contoh, "
-"halini dapat\n"
-" berarti bahwa anda memverifikasi fingerprint kunci dan memeriksa user ID "
-"pada kunci\n"
-" dengan photo ID.\n"
-"\n"
-"\"3\" berarti anda melakukan verifikasi ekstensif atas kunci. Sebagai "
-"contoh, hal ini\n"
-" dapat berarti anda memverifikasi fingerprint kunci dengan pemilik kunci\n"
-" secara personal, dan anda memeriksa, dengan menggunakan dokumen yang "
-"sulit dipalsukan yang memiliki\n"
-" photo ID (seperti paspor) bahwa nama pemilik kunci cocok dengan\n"
-" nama user ID kunci, dan bahwa anda telah memverifikasi (dengan "
-"pertukaran\n"
-" email) bahwa alamat email pada kunci milik pemilik kunci.\n"
-"\n"
-"Contoh-contoh pada level 2 dan 3 hanyalah contoh.\n"
-"Pada akhirnya, terserah anda untuk memutuskan apa arti \"kasual\" dan "
-"\"ekstensif\"\n"
-"bagi anda ketika menandai kunci lain.\n"
-"\n"
-"Jika anda tidak tahu jawaban yang tepat, jawab \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Jawab \"ya\" jika anda ingin menandai seluruh ID user"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Jawab \"ya\" jika anda benar-benar ingin menghapus ID user ini.\n"
-"Seluruh sertifikat juga akan hilang!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Jawab \"ya\" jika ingin menghapus subkey"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Ini adalah signature valid untuk kunci; anda normalnya tdk ingin menghapus\n"
-"signature ini karena mungkin penting membangun koneksi trust ke kunci atau\n"
-"ke kunci tersertifikasi lain dengan kunci ini."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Signature ini tidak dapat diperiksa karena anda tidak memiliki kunci\n"
-"korespondennya. Anda perlu menunda penghapusannya hingga anda tahu\n"
-"kunci yang digunakan karena kunci penanda ini mungkin membangun suatu\n"
-"koneksi trust melalui kunci yang telah tersertifikasi lain."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"Signature tidak valid. Adalah hal yang masuk akal untuk menghapusnya dari\n"
-"keyring anda"
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Ini adalah signature yang menghubungkan ID pemakai ke kunci. Biasanya\n"
-"bukan ide yang baik untuk menghapus signature semacam itu. Umumnya\n"
-"GnuPG tidak akan dapat menggunakan kunci ini lagi. Sehingga lakukan hal\n"
-"ini bila self-signature untuk beberapa alasan tidak valid dan\n"
-"tersedia yang kedua."
-
-#: g10/helptext.c:237
-#, fuzzy
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Rubah preferensi seluruh user ID (atau hanya yang terpilih)\n"
-"ke daftar preferensi saat ini. Timestamp seluruh self-signature\n"
-"yang terpengaruh akan bertambah satu detik.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Silakan masukkan passphrase; ini kalimat rahasia\n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Silakan ulangi passphrase terakhir, sehingga anda yakin yang anda ketikkan."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Beri nama file tempat berlakunya signature"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Jawab \"ya\" jika tidak apa-apa menimpa file"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Silakan masukan nama file baru. Jika anda hanya menekan RETURN nama\n"
-"file baku (yang diapit tanda kurung) akan dipakai."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Anda harus menspesifikasikan alasan pembatalan. Semua ini tergantung\n"
-"konteks, anda dapat memilih dari daftar berikut:\n"
-" \"Key has been compromised\"\n"
-" Gunakan ini jika anda punya alasan untuk percaya bahwa orang yang "
-"tidak berhak\n"
-" memiliki akses ke kunci pribadi anda.\n"
-" \"Key is superseded\"\n"
-" Gunakan ini bila anda mengganti kunci anda dengan yang baru.\n"
-" \"Key is no longer used\"\n"
-" Gunakan ini bila anda telah mempensiunkan kunci ini.\n"
-" \"User ID is no longer valid\"\n"
-" Gunakan ini untuk menyatakan user ID tidak boleh digunakan lagi;\n"
-" normalnya digunakan untuk menandai bahwa alamat email tidak valid "
-"lagi.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Jika anda suka, anda dapat memasukkan teks menjelaskan mengapa anda\n"
-"mengeluarkan sertifikat pembatalan ini. Buatlah ringkas.\n"
-"Baris kosong mengakhiri teks.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Tidak tersedia bantuan"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Tidak tersedia bantuan untuk `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "kesalahan menulis keyring `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "%s: keyring tercipta\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "gagal membuat kembali cache keyring: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "PERINGATAN: terdapat 2 file dengan informasi penting.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s adalah yang tidak berubah\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s adalah yang baru\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Silakan perbaiki kemungkinan lubang keamanan ini\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "memeriksa keyring `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu kunci telah diperiksa (%lu signature)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu kunci telah diperiksa (%lu signature)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: keyring tercipta\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "anda harus memulai GnuPG lagi, sehingga ia dapat membaca file option "
-#~ "baru\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "merubah permisi `%s' gagal: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NAME=VALUE|gunakan notasi data ini"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "karakter pertama nama notasi harus huruf atau garis bawah\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "titik dalam nama notasi harus diapit oleh karakter lain\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "PERINGATAN: Kunci ini telah memiliki sebuah photo ID.\n"
-#~ " Menambahkan photo ID lain dapat membingungkan beberapa versi "
-#~ "PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Anda hanya boleh memiliki satu photo ID untuk satu kunci. \n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Fingerprint:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Fingerprint:"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Apakah anda perlu keysize sebesar itu? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "kunci %08lX: salinan kita tidak memiliki self-signature\n"
-
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr " Apakah anda yakin masih ingin menandainya?\n"
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " ditandai oleh %08lX pada %s\n"
diff --git a/po/it.po b/po/it.po
deleted file mode 100644
index e21091c6f..000000000
--- a/po/it.po
+++ /dev/null
@@ -1,4704 +0,0 @@
-# GnuPG italian translation
-# Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
-# Marco d'Itri <md@linux.it>, 1998, 1999, 2001, 2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg-1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-05-09 21:57+0200\n"
-"Last-Translator: Marco d'Itri <md@linux.it>\n"
-"Language-Team: Italian <tp@lists.linux.it>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Attenzione: si sta usando memoria insicura!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "visitare http://www.gnupg.org/faq.html per ulteriori informazioni\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "l'operazione non è possibile senza memoria sicura inizializzata\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(potresti avere usato il programma sbagliato per questa funzione)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "sì"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "sS"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "no"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "quit"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "errore generale"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "pacchetto di tipo sconosciuto"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "versione sconosciuta"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algoritmo della chiave pubblica sconosciuto"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algoritmo del digest sconosciuto"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "chiave pubblica errata"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "chiave segreta errata"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "firma errata"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "codice di controllo errato"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "passphrase errata"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "chiave pubblica non trovata"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algoritmo di cifratura sconosciuto"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "impossibile aprire il portachiavi"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "pacchetto non valido"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armatura non valida"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "l'user id non esiste"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "la chiave segreta non è disponibile"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "è stata usata la chiave segreta sbagliata"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "non gestito"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "chiave sbagliata"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "errore durante la lettura del file"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "errore durante la scrittura del file"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritmo di compressione sconosciuto"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "errore durante l'apertura del file"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "errore durante la creazione del file"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "passphrase non valida"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmo della chiave pubblica non implementato"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritmo di cifratura non implementato"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "classe della firma sconosciuta"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "errore nel database della fiducia"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI danneggiato"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "limite della risorsa"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "portachiavi non valido"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "certificato danneggiato"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "user id malformato"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "errore durante la chiusura del file"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "errore durante la rinominazione del file"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "errore durante la cancellazione del file"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "dati inattesi"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "date in conflitto"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritmo della chiave pubblica non utilizzabile"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "il file esiste"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "chiave debole"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argomento non valido"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI non valida"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI non gestito"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "errore di rete"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "non cifrato"
-
-# ??? (Md)
-#: util/errors.c:103
-msgid "not processed"
-msgstr "non esaminato"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "chiave pubblica inutilizzabile"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "chiave segreta inutilizzabile"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "errore del keyserver"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... questo è un bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "Hai trovato un bug... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "impossibile aprire `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "impossibile eseguire stat su `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' non è un file regolare - ignorato\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "nota: il file random_seed è vuoto\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"attenzione: le dimensioni del file random_seed non sono valide - non usato\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "impossibile leggere `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "nota: il file random_seed non è stato aggiornato\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "impossibile creare `%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "impossibile scrivere su `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "impossibile chiudere `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr ""
-"ATTENZIONE: si sta usando un generatore di numeri casuali non sicuro!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Il generatore di numeri casuali è solo un ripiego per fare\n"
-"compilare il programma - non è assolutamente un RNG forte!\n"
-"\n"
-"NON USARE ALCUN DATO GENERATO DA QUESTO PROGRAMMA!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Non ci sono abbastanza byte casuali disponibili. Per favore fai qualche\n"
-"altra cosa per dare all'OS la possibilità di raccogliere altra entropia!\n"
-"(Servono altri %d byte)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Comandi:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[file]|fai una firma"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[file]|fai una firma mantenendo il testo in chiaro"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "fai una firma separata"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "cifra dati"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[file]|cifra i file"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "cifra solo con un cifrario simmetrico"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "immagazzina soltanto"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "decifra dati (predefinito)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[file]|decifra i file"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verifica una firma"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "elenca le chiavi"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "elenca le chiavi e le firme"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "controlla le firme delle chiavi"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "elenca le chiavi e le impronte digitali"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "elenca le chiavi segrete"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "genera una nuova coppia di chiavi"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "rimuove le chiavi dal portachiavi pubblico"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "rimuove le chiavi dal portachiavi privato"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "firma una chiave"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "firma una chiave localmente"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "firma una chiave irrevocabilmente"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "firma una chiave localmente e irrevocabilmente"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "firma o modifica una chiave"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "genera un certificato di revoca"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "esporta delle chiavi"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "esporta le chiavi a un key server"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importa le chiavi da un key server"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "cerca delle chiavi su un key server"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "aggiorna tutte le chiavi da un key server"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importa/aggiungi delle chiavi"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "elenca solo la sequenza dei pacchetti"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "esporta i valori di fiducia"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importa i valori di fiducia"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "aggiorna il database della fiducia"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "aggiornamento non presidiato del database della fiducia"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "ripara un database della fiducia rovinato"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "rimuovi l'armatura a un file o a stdin"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "crea l'armatura a un file o a stdin"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [files]|stampa tutti i message digests"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opzioni:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "crea un output ascii con armatura"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOME|cifra per NOME"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOME|usa NOME come destinatario predefinito"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "usa la chiave predefinita come destinatario predefinito"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "usa questo user-id per firmare o decifrare"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|imposta il livello di compressione (0 disab.)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "usa il modo testo canonico"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "usa come file di output"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "prolisso"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "meno prolisso"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "non usa per niente il terminale"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "forza l'uso di firme v3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "non forza l'uso di firme v3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "forza l'uso di firme v4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "non forza l'uso di firme v4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "usa sempre un MDC per cifrare"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "non usa mai un MDC per cifrare"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "non fa cambiamenti"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "usa gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "modo batch: non fa domande"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "assumi \"sì\" per quasi tutte le domande"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "assumi \"no\" per quasi tutte le domande"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "aggiungi questo portachiavi alla lista"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "aggiungi questo portachiavi segreto alla lista"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "mostra in quali portachiavi sono contenute le chiavi elencate"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOME|usa NOME come chiave segreta predefinita"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|cerca le chiavi in questo keyserver"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NOME|imposta NOME come set di caratteri del terminale"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "leggi le opzioni dal file"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|scrivi le informazioni di stato sul FD"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[file]|scrivi le informazioni di stato nel file"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KEYID|assegna fiducia definitiva a questa chiave"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FILE|carica il modulo di estensione FILE"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emula il modo descritto in RFC 1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"imposta tutte le opzioni di pacchetto,\n"
-"cifrario e digest per OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "imposta tutte le opzioni di pacchetto, cifrario e digest per PGP 2.x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|usa il modo N per la passphrase"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NOME|usa l'algoritmo di message digest NOME per le passphrase"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NOME|usa l'alg. di cifratura NOME per le passphrase"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOME|usa l'algoritmo di cifratura NOME"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOME|usa l'algoritmo di message digest NOME"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|usa l'algoritmo di compressione N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "elimina il campo keyid dei pacchetti cifrati"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Mostra le fotografie"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Non mostra le fotografie"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Imposta la riga di comando per vedere le fotografie"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Vedi la man page per una lista completa di tutti i comandi e opzioni)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Esempi:\n"
-"\n"
-" -se -r Bob [file] firma e cifra per l'utente Bob\n"
-" --clearsign [file] fai una firma mantenendo il testo in chiaro\n"
-" --detach-sign [file] fai una firma separata\n"
-" --list-keys [nomi] mostra le chiavi\n"
-" --fingerprint [nomi] mostra le impronte digitali\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintassi: gpg [opzioni] [files]\n"
-"firma, controlla, cifra o decifra\n"
-"l'operazione predefinita dipende dai dati di input\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritmi gestiti:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "uso: gpg [opzioni] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "comandi in conflitto\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Attenzione: proprietario \"%s\" di %s insicuro\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Attenzione: permessi \"%s\" di %s insicuri\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Attenzione: proprietario \"%s\" di %s insicuro\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Attenzione: permessi \"%s\" di %s insicuri\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTA: manca il file `%s' con le opzioni predefinite\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTA: manca il file `%s' con le opzioni predefinite\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "file con le opzioni `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "lettura delle opzioni da `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s non è un set di caratteri valido\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "impossibile fare il parsing dell'URI del keyserver\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: versione %d del file non valida\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armatura non valida"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: versione %d del file non valida\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "portachiavi non valido"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "impossibile impostare exec-path a %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "ATTENZIONE: il programma potrebbe creare un file core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "ATTENZIONE: %s ha la precedenza su %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTA: %s normalmente non deve essere usato!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "Non è permesso usare %s con %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "Non ha senso usare %s con %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "nella modalità --pgp2 puoi fare solo firme in chiaro o separate\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "nella modalità --pgp2 non puoi firmare e cifrare contemporaneamente\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-"devi usare dei file (e non una pipe) quando lavori con --pgp2 attivo.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-"nella modalità --pgp2 è richiesto il cifrario IDEA per cifrare un messaggio\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "questo messaggio può non essere utilizzabile da PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "l'algoritmo di cifratura selezionato non è valido\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "l'algoritmo di digest selezionato non è valido\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "l'algoritmo di digest selezionato non è valido\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "l'algoritmo di compressione deve essere tra %d e %d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed deve essere maggiore di 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed deve essere maggiore di 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth deve essere tra 1 e 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: l'uso del modo S2K semplice (0) è fortemente scoraggiato\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "modo S2K non valido; deve essere 0, 1 o 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "default-check-level non valido; deve essere 0, 1 o 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "preferenze non valide\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "preferenze non valide\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "preferenze non valide\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "preferenze non valide\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [nomefile]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [nomefile]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [nomefile]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [nomefile]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [nomefile]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [nomefile]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [nomefile]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [nomefile]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key user-id"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key user-id"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key user-id"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key user-id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key user-id [comandi]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "impossibile aprire `%s': %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [user-id] [portachiavi]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "rimozione dell'armatura fallita: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nomefile]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Vai avanti e scrivi il messaggio...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "impossibile aprire `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"il nome di una nota deve essere formato solo da lettere, numeri, punti o\n"
-"underscore e deve finire con `='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "il valore di una nota non deve usare caratteri di controllo\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "l'URL della politica di certificazione indicato non è valido\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "l'URL della politica di firma indicato non è valido\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armatura: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "header dell'armatura non valido: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "header dell'armatura: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "header della firma in chiaro non valido\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "firme in chiaro annidate\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "riga protetta con il trattino non valida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armatura inaspettata:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "Carattere radix64 non valido %02x saltato\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "eof prematura (nessun CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "eof prematura (nel CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC malformato\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "errore nel CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "eof prematura (nella coda)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "errore nella riga della coda\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "Non sono stati trovati dati OpenPGP validi.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armatura non valida: linea più lunga di %d caratteri\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"carattere quoted printable nell'armatura - probabilmente è stato usato\n"
-"un MTA buggato\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Nessuna ragione specificata"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Questa chiave è stata sostituita"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Questa chiave è stata compromessa"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "La chiave non è più usata"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "L'user ID non è più valido"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Ragione della revoca: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Commento alla revoca: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Nessun valore di fiducia assegnato a:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Per favore decidi quanto hai fiducia che questo utente firmi correttamente\n"
-"le chiavi di altri utenti (guardando il loro passaporto, controllando le\n"
-"impronte digitali da diverse fonti...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Non lo so\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = NON mi fido\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Mi fido marginalmente\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Mi fido completamente\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Mi fido definitivamente\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = mostrami ulteriori informazioni\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = torna al menù principale\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = salta questa chiave\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = abbandona\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Cosa hai deciso? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Vuoi davvero assegnare fiducia definitiva a questa chiave? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificati che portano a chiavi definitivamente affidabili:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "chiave %08lX: la chiave è stata revocata!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Uso lo stesso questa chiave? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "chiave %08lX: la subchiave è stata revocata!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: la chiave è scaduta\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lX: Non ci sono indicazioni che la chiave appartenga al proprietario\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: NON ci fidiamo di questa chiave!\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Non è sicuro che questa chiave appartenga veramente al proprietario\n"
-"ma è accettata comunque\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Questa chiave probabilmente appartiene al proprietario\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Questa chiave ci appartiene\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"NON è sicuro che la chiave appartenga al suo proprietario.\n"
-"Se *veramente* sai cosa stai facendo, puoi rispondere sì alla\n"
-"prossima domanda.\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "ATTENZIONE: uso di una chiave non fidata!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "ATTENZIONE: questa chiave è stata revocata dal suo proprietario!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Questo può significare che la firma è stata falsificata.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "ATTENZIONE: questa subchiave è stata revocata dal proprietario!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Nota: questa chiave è stata disabilitata.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Nota: questa chiave è scaduta!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "ATTENZIONE: questa chiave non è certificata con una firma fidata!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Non ci sono indicazioni che la firma appartenga al proprietario.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "ATTENZIONE: NON ci fidiamo di questa chiave!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " La firma è probabilmente un FALSO.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"ATTENZIONE: questa chiave non è certificata con firme abbastanza fidate!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Non è sicuro che la firma appartenga al proprietario.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: saltata: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: saltato: chiave pubblica già presente\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Non hai specificato un user ID. (puoi usare \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Inserisci l'user ID. Termina con una riga vuota: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "User ID inesistente.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "saltato: chiave pubblica già impostata come destinatario predefinito\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "La chiave pubblica è disabilitata.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "saltato: chiave pubblica già impostata\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "destinatario predefinito `%s' sconosciuto\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: saltato: chiave pubblica disabilitata\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "nessun indirizzo valido\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "la preferenza %c%lu non è valida\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "la preferenza %c%lu è doppia\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "ci sono troppe preferenze `%c'\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "carattere non valido nella stringa delle preferenze\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "scrittura della autofirma\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "scrittura della autofirma\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "scrittura della firma di collegamento alla chiave\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "dimensione della chiave non valida; uso %u bit\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "dimensioni della chiave arrotondate a %u bit\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Per favore scegli che tipo di chiave vuoi:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA e ElGamal (default)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (firma solo)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (cifra solo)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (firma e cifra)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (firma solo)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (cifra solo)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (firma e cifra)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Cosa scegli? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "L'uso di questo algoritmo è deprecato - la creo comunque? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Scelta non valida.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Sto per generare una nuova coppia di chiavi %s.\n"
-" la dimensione minima è 768 bit\n"
-" la dimensione predefinita è 1024 bit\n"
-" la dimensione massima consigliata è 2048 bit\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Di che dimensioni vuoi la chiave? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA permette solo chiavi di dimensioni tra 512 e 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "la chiave è troppo corta; 1024 è il minimo valore permesso per RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "la chiave è troppo corta; 768 è il minimo valore permesso.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "la chiave è troppo lunga; %d è il massimo valore permesso.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Chiavi più lunghe di 2048 non sono consigliate perchè i calcoli sono\n"
-"VERAMENTE lunghi!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Sei sicuro di volere una chiave di queste dimensioni? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Va bene, ma ricordati che anche le radiazioni emesse dal tuo monitor e dalla "
-"tua tastiera sono molto vulnerabili ad attacchi!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "La dimensione richiesta della chiave è %u bit\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "arrotondate a %u bit\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Per favore specifica per quanto tempo la chiave sarà valida.\n"
-" 0 = la chiave non scadrà\n"
-" <n> = la chiave scadrà dopo n giorni\n"
-" <n>w = la chiave scadrà dopo n settimane\n"
-" <n>m = la chiave scadrà dopo n mesi\n"
-" <n>y = la chiave scadrà dopo n anni\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Per favore specifica per quanto tempo la firma sarà valida.\n"
-" 0 = la chiave non scadrà\n"
-" <n> = la chiave scadrà dopo n giorni\n"
-" <n>w = la chiave scadrà dopo n settimane\n"
-" <n>m = la chiave scadrà dopo n mesi\n"
-" <n>y = la chiave scadrà dopo n anni\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Chiave valida per? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Firma valida per? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valore non valido\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s non ha scadenza\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s scadrà il %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Il tuo sistema non può mostrare date oltre il 2038.\n"
-"Comunque, sarà gestita correttamente fino al 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "È giusto (s/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Ti serve un User ID per identificare la tua chiave; il software costruisce "
-"l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email "
-"indicati in questa forma:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nome e Cognome: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Carattere non valido nel nome\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Il nome non può iniziare con una cifra\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Il nome deve essere lungo almeno 5 caratteri\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Indirizzo di Email: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "L'indirizzo di email non è valido\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Commento: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Carattere non valido nel commento\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Stai usando il set di caratteri `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Hai selezionato questo User Id:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Per favore non mettere l'indirizzo di email nel nome o nel commento\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoQq"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (Q)uit? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Per favore correggi prima l'errore\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Ti serve una passphrase per proteggere la tua chiave segreta.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "passphrase non ripetuta correttamente; prova ancora"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Non hai specificato una passphrase - questa è probabilmente una *cattiva*\n"
-"idea! Lo farò io comunque. Puoi cambiarla in ogni momento, usando questo\n"
-"programma con l'opzione \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Dobbiamo generare un mucchio di byte casuali. È una buona idea eseguire\n"
-"qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i\n"
-"dischi) durante la generazione dei numeri primi; questo da al generatore di\n"
-"numeri casuali migliori possibilità di raccogliere abbastanza entropia.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "La coppia DSA avrà 1024 bit.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Generazione della chiave annullata.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "scrittura della chiave pubblica in `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "non è stato trovato un portachiavi pubblico scrivibile: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "non è stato trovato un portachiavi segreto scrivibile: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "errore scrivendo il portachiavi pubblico `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "chiavi pubbliche e segrete create e firmate.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "chiavi marcate definitivamente affidabili.\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Nota che questa chiave non può essere usata per cifrare. Forse vorrai usare\n"
-"il comando \"--edit-key\" per generare una chiave secondaria per questo "
-"scopo.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Generazione della chiave fallita: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"la chiave è stata creata %lu secondi nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NB: la creazione di sottochiavi per chiavi v3 non rispetta OpenPGP.\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Crea davvero? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output non funziona con questo comando\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: impossibile aprire: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' è già compresso\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ATTENZIONE: file vuoto\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"in modalità --pgp2 puoi cifrare solo per chiavi RSA non più lunghe di 2048 "
-"bit\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "lettura da `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"impossibile usare il cifrario IDEA con tutti i tipi di chiavi per cui\n"
-"stai cifrando.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"NOTA: l'algoritmo di cifratura %d non è stato trovato tra le preferenze\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Questo comando non è permesso in modalità %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s cifrato per: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "chiave `%s' non trovata: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "errore leggendo il keyblock: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "chiave %08lX: chiave non rfc2440 - saltata\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "chiave %08lX: non protetta - saltata\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "chiave %08lX: chiave in stile PGP 2.x - saltata\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "ATTENZIONE: non è stato esportato nulla\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "troppe voci nella pk cache - disabilitata\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[User ID non trovato]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr "Chiave %08lX non valida resa valida da --allow-non-selfsigned-uid\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "uso la chiave secondaria %08lX invece della chiave primaria %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "chiave %08lX: chiave segreta senza chiave pubblica - saltata\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "salto un blocco di tipo %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "Per ora sono state esaminate %lu chiavi\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Numero totale esaminato: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " nuove chiavi saltate: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " senza user ID: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importate: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " non modificate: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nuovi user ID: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nuove subchiavi: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nuove firme: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr "nuove revoche di chiavi: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " chiavi segrete lette: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "chiavi segrete importate: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "chiavi segrete non cambiate: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importate: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "chiave %08lX: nessun user ID\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "chiave %08lX: accettato l'user ID non autofirmato '%s'\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "chiave %08lX: nessun user ID valido\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "questo può essere causato da una autofirma mancante\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "chiave %08lX: chiave pubblica non trovata: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "chiave %08lX: nuova chiave - saltata\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "non è stato trovato un portachiavi scrivibile: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "scrittura in `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "chiave %08lX: chiave pubblica importata\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "chiave %08lX: non corrisponde alla nostra copia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "chiave %08lX: 1 nuovo user ID\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "chiave %08lX: %d nuovi user ID\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "chiave %08lX: una nuova firma\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "chiave %08lX: %d nuove firme\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "chiave %08lX: una nuova subchiave\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "chiave %08lX: %d nuove subchiavi\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "chiave %08lX: non cambiata\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "nessun portachiavi segreto predefinito: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "chiave %08lX: chiave segreta importata\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "chiave %08lX: già nel portachiavi segreto\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "chiave %08lX: chiave segreta non trovata: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"chiave %08lX: manca la chiave pubblica - impossibile applicare il\n"
-"certificato di revoca\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "chiave %08lX: certificato di revoca importato\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "chiave %08lX: nessun user ID per la firma\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"chiave %08lX: algoritmo a chiave pubblica non gestito sull'user ID \"%s\"\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "chiave %08lX: autofirma non valida sull'user ID \"%s\"\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "chiave %08lX: legame con la subchiave non valido:\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "chiave %08lX: legame con la subchiave non valido:\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "chiave %08lX: legame con la subchiave non valido:\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "chiave %08lX: legame con la subchiave non valido:\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "chiave %08lX: saltato l'user ID '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "chiave %08lX: saltata la subchiave\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "chiave %08lX: firma non esportabile (classe %02x) - saltata\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "chiave %08lX: certificato di revoca nel posto sbagliato - saltato\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "chiave %08lX: certificato di revoca non valido: %s - saltato\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "chiave %08lX: certificato di revoca nel posto sbagliato - saltato\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "chiave %08lX: trovato un user ID duplicato - unito\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"Attenzione: la chiave %08lX può essere stata revocata: scarico la chiave\n"
-"di revoca %08lX.\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"Attenzione: la chiave %08lX può essere stata revocata: la chiave di revoca\n"
-"%08lX non è presente.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "chiave %08lX: certificato di revoca aggiunto\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "chiave %08lX: aggiunta una firma alla chiave diretta\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revoca]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[autofirma]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "una firma non corretta\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d firme non corrette\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "una firma non controllata per mancanza della chiave\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d firme non controllate per mancanza delle chiavi\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "una firma non controllata a causa di un errore\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d firme non controllate a causa di errori\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Trovato un user ID senza autofirma valida\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Trovati %d user ID senza autofirme valide\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "L'user ID \"%s\" è stato revocato."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Sei ancora sicuro di volerla firmare? (s/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Impossibile firmarla.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "ATTENZIONE: `%s' è un file vuoto\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"La tua firma attuale su \"%s\"\n"
-"è una firma locale.\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Vuoi trasformarla in una firma completa esportabile? (s/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"La tua firma attuale su \"%s\"\n"
-"è una firma locale.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "Vuoi trasformarla in una firma completa esportabile? (s/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" era già stato firmato localmente dalla chiave %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" era già stato firmato dalla chiave %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Niente da firmare con la chiave %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Questa chiave è scaduta!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Questa chiave scadrà il %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Vuoi che la tua firma scada nello stesso momento? (S/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"In modalità -pgp2 non è possibile fare firme OpenPGP su chiavi in stile PGP "
-"2.x.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Questo renderebbe la chiave non utilizzabile da PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Con quanta attenzione hai verificato che la chiave che stai per firmare\n"
-"appartiene veramente alla persona indicata sopra?\n"
-"Se non sai cosa rispondere digita \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Preferisco non rispondere.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Non l'ho controllata per niente.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) L'ho controllata superficialmente.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) L'ho controllata molto attentamente.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Sei davvero sicuro di volere firmare questa chiave\n"
-"con la tua chiave: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "questo può essere causato da una autofirma mancante\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La firma sarà marcata come non esportabile.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La firma sarà marcata come irrevocabile.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La firma sarà marcata come non esportabile.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La firma sarà marcata come irrevocabile.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Non ho controllato per niente questa chiave.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Ho controllato questa chiave superficialmente.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Ho controllato questa chiave molto attentamente.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Firmo davvero? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "firma fallita: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Questa chiave non è protetta.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Parti della chiave segreta non sono disponibili.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "La chiave è protetta.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Impossibile modificare questa chiave: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Inserisci la nuova passphrase per questa chiave segreta.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Non vuoi una passphrase - questa è probabilmente una *cattiva* idea!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Vuoi veramente farlo?"
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "spostamento della firma di una chiave nel posto corretto\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "abbandona questo menù"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "salva ed esci"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "mostra questo aiuto"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "mostra le impronte digitali"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "elenca le chiavi e gli user ID"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "scegli l'user ID N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "scegli la chiave secondaria N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "elenca le firme"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "firma la chiave"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "firma la chiave localmente"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "firma la chiave irrevocabilmente"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "firma la chiave localmente e irrevocabilmente"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "aggiungi un user ID"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "aggiungi un ID fotografico"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "cancella un user ID"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "aggiungi una chiave secondaria"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "cancella una chiave secondaria"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "aggiungi una chiave secondaria"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsign"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "cancella le firme"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "cambia la data di scadenza"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primary"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "imposta l'user ID come primario"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "cambia tra visualizzare la chiave segreta e la chiave pubblica"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "elenca le preferenze (per esperti)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "elenca le preferenze (prolisso)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "imposta la lista di preferenze"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "preferenze aggiornate"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "cambia la passphrase"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "cambia il valore di fiducia"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revoca firme"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revoca una chiave secondaria"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "disabilita una chiave"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "abilita"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "abilita una chiave"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "mostra l'ID fotografico"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "impossibile fare questo in modo batch\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "errore leggendo il keyblock segreto `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "È disponibile una chiave segreta.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Comando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Per fare questo serve la chiave segreta.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Per favore usa prima il comando \"toggle\".\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "La chiave è stata revocata."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Firmo davvero tutti gli user ID? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Suggerimento: seleziona gli user ID da firmare\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Questo comando non è permesso in modalità %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Devi selezionare almeno un user ID.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Non puoi cancellare l'ultimo user ID!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Tolgo davvero tutti gli user ID selezionati? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Tolgo davvero questo user ID? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Devi selezionare almeno una chiave.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Vuoi davvero cancellare le chiavi selezionate? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Vuoi davvero cancellare questa chiave? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Vuoi davvero revocare le chiavi selezionate? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Vuoi davvero revocare questa chiave? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Aggiorno davvero le preferenze? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Salvo i cambiamenti? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Esco senza salvare? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "aggiornamento della chiave segreta fallito: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "La chiave non è cambiata quindi non sono necessari aggiornamenti.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Comando non valido (prova \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Questa chiave può essere revocata dalla chiave %s %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (sensibile)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX creata: %s scade: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " fiducia: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Questa chiave è stata disabilitata"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! la subchiave è stata revocata: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- trovata una revoca falsificata\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problema controllando la revoca: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Nota che la validità della firma indicata non sarà necessariamente corretta\n"
-"finchè non eseguirai di nuovo il programma.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"ATTENZIONE: Questa è una chiave in stile PGP2. Aggiungere un ID fotografico\n"
-" può causare il rifiuto della chiave da parte di alcune versioni\n"
-" di PGP.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Sei ancora sicuro di volerlo aggiungere? (s/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-"Non è possibile aggiungere un ID fotografico a una chiave in stile PGP2.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Cancellare questa firma corretta? (s/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Cancellare questa firma non valida? (s/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Cancellare questa firma sconosciuta? (s/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Cancellare davvero questa autofirma? (s/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Cancellata %d firma.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Cancellate %d firme.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Non è stato cancellato nulla.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Inserisci le dimensioni della chiave"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Togli le selezioni dalle chiavi segrete.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Seleziona al massimo una chiave secondaria.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Cambio la data di scadenza per una chiave secondaria.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Cambio la data di scadenza per la chiave primaria.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Manca la firma corrispondente nel portachiavi segreto\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Devi selezionare esattamente un user ID.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "chiave %08lX: autofirma non valida sull'user ID \"%s\"\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Nessun user ID con l'indice %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Nessuna chiave secondaria con l'indice %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "user ID: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"firmata con la tua chiave %08lX il %s\n"
-"\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"firmata localmente con la tua chiave %08lX il %s\n"
-"\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Questa chiave è scaduta il %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Sei ancora sicuro di volerlo aggiungere? (s/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Creare un certificato di revoca per questa firma? (s/N) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Non puoi cancellare l'ultimo user ID!\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " firmata da %08lX il %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revocata da %08lX il %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Stai per revocare queste firme:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " firmata da %08lX il %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (non esportabile)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Creare davvero i certificati di revoca? (s/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "manca la chiave segreta\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Mostro %s ID fotografici di dimensioni %ld per la chaive 0x%08lX (uid %d)\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Politica di firma: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Politica di firma: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "ATTENZIONE: trovati dati di una nota non validi\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Annotazione della firma: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Annotazione della firma: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "non leggibile"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Portachiavi"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr "[scadenza: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "elenca le chiavi e le impronte digitali"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Impronta digitale ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Impronta digitale ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Impronta digitale ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Impronta digitale ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algoritmo di hash non valido `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "dati cifrati con %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "cifrato con l'algoritmo sconosciuto %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "la chiave pubblica è %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "dati cifrati con la chiave pubblica: DEK corretto\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "cifrato con la chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "Cifrato con la chiave %s con ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "decifratura della chiave pubblica fallita: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "suppongo che i dati siano cifrati con %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "Cifrario IDEA non disponibile, ottimisticamente cerco di usare %s\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "decifratura corretta\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "ATTENZIONE: il messaggio cifrato è stato manipolato!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "decifratura fallita: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: il mittente ha richiesto \"solo-per-i-tuoi-occhi\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nome del file originale='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "revoca solitaria - usa \"gpg --import\" per applicarla\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Nota: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Policy: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verifica della firma soppressa\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "impossibile gestire queste firme multiple\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Firma fatta %.*s usando la chiave %s con ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "Firma NON corretta da \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Firma scaduta da \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Firma valida da \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[incerta]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Impossibile controllare la firma: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "non è una firma separata\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "firma solitaria di classe 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "firma vecchio stile (PGP 2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "individuato un pacchetto radice non valido in proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "impossibile disabilitare i core dump: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Gli algoritmi sperimentali non dovrebbero essere usati!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr "questo algoritmo di cifratura è deprecato; usane uno più standard!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "il plugin per il cifrario IDEA non è presente\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"per ulteriori informazioni si veda http://www.gnupg.org/it/why-not-idea."
-"html\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "ATTENZIONE: %s è una opzione deprecata.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "ATTENZIONE: %s è una opzione deprecata.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "usa al suo posto \"--keyserver-options %s\"\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "impossibile gestire l'algoritmo a chiave pubblica %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "il sottopacchetto di tipo %d ha un bit critico impostato\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent non è disponibile in questa sessione\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "impossibile impostare il pid del client dell'agent\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "impossibile ottenere il FD di lettura dell'agent\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "impossibile ottenere il FD di scrittura dell'agent\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "la versione %d del protocollo di gpg-agent non è gestita\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "impossibile connettersi a `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problema di comunicazione con gpg-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problema con l'agent - uso dell'agent disattivato\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (key ID principale %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Ti serve una passphrase per sbloccare la chiave segreta dell'utente:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Inserisci la passphrase\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Ripeti la passphrase\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "passphrase troppo lunga\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "risposta non valida dall'agent\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "interrotto dall'utente\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problema con l'agent: ha restituito 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Ti serve una passphrase per sbloccare la chiave segreta\n"
-"dell'utente: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "impossibile chiedere la password in modo batch\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Inserisci la passphrase: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Ripeti la passphrase: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"i dati non sono stati salvati; usa l'opzione \"--output\" per salvarli\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "errore creando `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Firma separata.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Inserisci il nome del file di dati: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "viene letto stdin...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "non ci sono dati firmati\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "impossibile aprire i dati firmati `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinatario anonimo; provo la chiave segreta %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "bene, siamo il destinatario anonimo.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "la vecchia codifica del DEK non è gestita\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "l'algoritmo di cifratura %d%s è sconosciuto o disattivato\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr ""
-"NOTA: l'algoritmo di cifratura %d non è stato trovato tra le preferenze\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTA: chiave %08lX scaduta il %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "chiave %08lX: la chiave è stata revocata!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "richiedo la chiave %08lX dal keyserver HKP %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "impossibile scaricare la chiave dal keyserver: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "inviata con successo a `%s' (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "invio a `%s' fallito: status=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "cerco \"%s\" sul server HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "impossibile cercare sul keyserver: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "parti della chiave segreta non sono disponibili\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Passphrase non valida; riprova"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"ATTENZIONE: Individuata una chiave debole - per favore cambia ancora la\n"
-"passphrase.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"genero il checksum a 16 bit deprecato per la protezione della chiave "
-"segreta\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"questa è una chiave ElGamal generata da PGP e NON è sicura per le firme!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "la chiave pubblica è %lu secondo più recente della firma\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "la chiave pubblica è %lu secondi più recente della firma\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"la chiave è stata creata %lu secondi nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTA: chiave per firmare %08lX scaduta il %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"si suppone una firma non valida a causa di un bit critico sconosciuto\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"ATTENZIONE: Impossibile espandere i %% nell'URL (troppo lunga). Usata "
-"inespansa.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"ATTENZIONE: Impossibile espandere i %% nell'URL (troppo lunga). Usata "
-"inespansa.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "Firma %s da: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "ATTENZIONE: `%s' è un file vuoto\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "In modalità -pgp2 puoi firmare solo con chiavi in stile PGP 2.x\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "impossibile creare %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr ""
-"NOTA: l'algoritmo di cifratura %d non è stato trovato tra le preferenze\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "firma:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-"In modalità -pgp2 puoi firmare in chiaro solo con chiavi in stile PGP 2.x\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "sarà usato il cifrario %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "impossibile gestire linee di testo più lunghe di %d caratteri\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "linea di input più lunga di %d caratteri\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "trustdb rec %lu: lseek fallita: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "trustdb rec %lu: scrittura fallita (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transazione del trustdb troppo grande\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: impossibile acedere a: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: la directory non esiste!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: impossibile creare il lock\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: impossibile creare il lock\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: impossibile creare: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: creazione del record della versione fallita: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: è stato creato un trustdb non valido\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: creato il trustdb\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: trustdb non valido\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: creazione della tabella hash fallita: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: errore durante l'aggiornamento del record di versione: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: errore durante la lettura del record di versione: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: errore durante la scrittura del record di versione: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "trustdb: lseek fallita: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "trustdb: read fallita (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: non è un file di trustdb\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: record di versione con recnum %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versione %d del file non valida\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: errore durante la lettura del record libero: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: errore durante la scrittura del dir record: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: azzeramento di un record fallito: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: accodatura a un record fallita: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "Il trustdb è danneggiato; eseguire \"gpg --fix-trust-db\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' non è un key ID lungo valido\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "chiave %08lX: accettata come chiave affidabile\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "chiave %08lX: appare nel trustdb più di una volta\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"chiave %08lX: manca la chiave pubblica della chiave fidata - ignorata\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "trust record %lu, tipo %d: read fallita: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "il trust record %lu non è del tipo richiesto %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "trust record %lu, req type %d: write fallita: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "trustdb: sync fallita: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "non è necessario un controllo del trustdb\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "il prossimoi controllo del trustdb sarà fatto il %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "controllo il trustdb\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "chiave pubblica %08lX non trovata: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "chiave pubblica definitivamente affidabile %08lX non trovata\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr "controllo al livello %d firmato=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"non è stato possibile verificare la firma.\n"
-"Ricorda che il file con la firma (.sig or .asc) deve\n"
-"essere il primo file indicato sulla riga di comando.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "linea di input %u troppo lunga o LF mancante\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"la chiave non è indicata come insicura - impossibile usarla con il RNG "
-"finto!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "saltata `%s': doppia\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "saltata `%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "saltata: chiave pubblica già presente\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"saltata %s: questa è una chiave ElGamal generata da PGP che NON è sicura per "
-"le firme!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Il file `%s' esiste. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Sovrascrivo (s/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: suffisso sconosciuto\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Inserire il nuovo nome del file"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "scrivo su stdout\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "suppongo che i dati firmati siano in `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: creato un nuovo file delle opzioni\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: impossibile creare la directory: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: directory creata\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"ATTENZIONE: il messaggio era stato cifrato usando una chiave debole\n"
-"per il cifrario simmetrico\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problema nella gestione del pacchetto cifrato\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "creata una chiave debole - riprovo\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"Impossibile evitare una chiave debole per il cifrario simmetrico;\n"
-"ho provato %d volte!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA richiede l'uso di un algoritmo di hashing con almeno 160 bit\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "impossibile fare questo in modo batch senza \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Vuoi cancellare questa chiave dal portachiavi? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "È una chiave segreta! - Vuoi cancellarla davvero? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "informazioni di fiducia del possessore cancellate\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "c'è una chiave segreta per la chiave pubblica \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "usa prima l'opzione \"--delete-secret-keys\" per cancellarla.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"E compito tuo assegnare un valore; questo valore non sarà mai esportato a\n"
-"terzi. Ci serve per implementare il web-of-trust; non ha nulla a che fare\n"
-"con il web-of-certificates (creato implicitamente)."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Per costruire il Web-Of-Trust, GnuPG ha bisogno di sapere quali chiavi sono\n"
-"definitivamente affidabili - di solito quelle per cui hai accesso alla "
-"chiave\n"
-"segreta.\n"
-"Rispondi \"sì\" per impostare questa chiave come definitivamente affidabile\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Se vuoi usare comunque questa chiave revocata, rispondi \"si\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "Se vuoi usare comunque questa chiave non fidata, rispondi \"si\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Inserisci l'user ID del destinatario a cui vuoi mandare il messaggio."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Seleziona l'algoritmo da usare.\n"
-"\n"
-"DSA (alias DSS) è un algoritmo usabile solo per firmare. E l'algoritmo\n"
-"suggerito perché verificare firme DSA è molto più veloce di quelle ElGamal.\n"
-"\n"
-"ElGamal è un algoritmo usabile per firmare e cifrare.\n"
-"OpenPGP distingue tra due versioni di questo algoritmo: una solo per "
-"firmare\n"
-"e una per firmare e cifrare. In realtà è sempre lo stesso, ma per creare\n"
-"firme sicure per la cifratura occorre scegliere in un modo particolare "
-"alcuni\n"
-"parametri: questo programma lo fa ma non è richiesto che altre "
-"implementazioni\n"
-"di OpenPGP capiscano la versione per firmare e cifrare.\n"
-"\n"
-"La prima chiave (primaria) deve sempre essere una chiave in grado di "
-"firmare;\n"
-"questo è il motivo per cui le chiavi ElGamal solo per cifrare non sono\n"
-"disponibili in questo menù."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Anche se queste chiavi sono definite da RFC2400 non sono suggerite perché "
-"non\n"
-"sono gestite da tutti i programmi e le firme create sono grandi e lunghe da\n"
-"verificare."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Inserisci le dimensioni della chiave"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Rispondi \"si\" o \"no\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Inserisci il valore richiesto come indicato dal prompt.\n"
-"È possibile inserire una data in formato ISO (YYYY-MM-DD) ma non avrai un\n"
-"messaggio di errore corretto: il sistema cerca di interpretare il valore\n"
-"dato come un intervallo."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Inserisci il nome del proprietario della chiave"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "Inserisci un indirizzo di email opzionale (ma fortemente suggerito)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Inserisci un commento opzionale"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N per cambiare il nome.\n"
-"C per cambiare il commento.\n"
-"E per cambiare l'indirizzo di email.\n"
-"O per continuare con la generazione della chiave.\n"
-"Q per abbandonare il processo di generazione della chiave."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Rispondi \"si\" (o \"y\") se va bene generare la subchiave."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Quando firmi l'user ID di una chiave dovresti prima verificare che questa\n"
-"appartiene alla persona indicata nell'user ID. È utile agli altri sapere\n"
-"con quanta attenzione lo hai verificato.\n"
-"\n"
-"\"0\" significa che non fai particolari affermazioni sull'attenzione con "
-"cui\n"
-" hai ferificato la chiave.\n"
-"\n"
-"\"1\" significa che credi che la chiave sia posseduta dalla persona che dice "
-"di\n"
-" possederla, ma non hai o non hai potuto verificare per niente la "
-"chiave.\n"
-"\n"
-"\"2\" significa che hai fatto una verifica superficiale della chiave. Per "
-"esempio\n"
-" potrebbe significare che hai verificato l'impronta digitale e "
-"confrontato\n"
-" l'user ID della chiave con un documento di identità con fotografia.\n"
-"\n"
-"\"3\" significa che hai fatto una verifica approfondita della chiave. Per "
-"esempio\n"
-" potrebbe significare che hai verificato di persona l'impronta digitale "
-"con\n"
-" il possessore della chiave e hai controllato, per esempio per mezzo di\n"
-" un documento di identità con fotografia difficile da falsificare (come\n"
-" un passaporto), che il nome del proprietario della chiave corrisponde a\n"
-" quello nell'user ID della chiave, e per finire che hai verificato\n"
-" (scambiando dei messaggi) che l'indirizzo di email sulla chiave "
-"appartiene\n"
-" al proprietario.\n"
-"\n"
-"Nota che gli esempi indicati per i livelli 2 e 3 sono *solo* esempi. Alla "
-"fine\n"
-"sta a te decidere cosa significano \"superficiale\" e \"approfondita\" "
-"quando\n"
-"firmi chiavi di altri.\n"
-"\n"
-"Se non sai cosa rispondere, rispondi \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Rispondi \"si\" se vuoi firmare TUTTI gli user ID"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Rispondi \"si\" se vuoi davvero cancellare questo user ID.\n"
-"Tutti i certificati saranno persi!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Rispondi \"si\" se va bene cancellare la subchiave"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Questa è una firma valida per la chiave. Normalmente non vorresti "
-"cancellare\n"
-"questa firma perchè può essere importante per stabilire una connessione di\n"
-"fiducia alla chiave o a un'altra chiave certificata da questa chiave."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Questa firma non può essere verificata perchè non hai la chiave "
-"corrispondente.\n"
-"Dovresti rimandare la sua cancellazione finchè non saprai quale chiave è "
-"stata\n"
-"usata perchè questa chiave potrebbe stabilire una connessione di fiducia\n"
-"attraverso una chiave già certificata."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "La firma non è valida. Ha senso rimuoverla dal tuo portachiavi."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Questa è una firma che collega l'user id alla chiave. Solitamente non è una\n"
-"buona idea rimuovere questo tipo di firma. In realtà GnuPG potrebbe non "
-"essere\n"
-"più in grado di usare questa chiave. Quindi fallo solo se questa autofirma "
-"non\n"
-"è valida per qualche ragione e ne è disponibile un'altra."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Cambia le preferenze di tutti gli user ID (o solo di quelli selezionati) "
-"con\n"
-"la lista di preferenze corrente. L'orario di tutte le autofirme coinvolte\n"
-"sarà aumentato di un secondo.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Ripeti l'ultima passphrase per essere sicuro di cosa hai scritto."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Inserisci il nome del file a cui si riferisce la firma."
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Rispondi \"si\" se va bene sovrascrivere il file."
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Inserisci il nuovo nome del file. Se premi INVIO sarà usato il nome\n"
-"predefinito (quello indicato tra parentesi)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Dovresti specificare un motivo per questa certificazione. A seconda del\n"
-"contesto hai la possibilità di scegliere tra questa lista:\n"
-" \"Key has been compromised\"\n"
-" Usa questo se hai un motivo per credere che una persona non "
-"autorizzata\n"
-" abbia avuto accesso alla tua chiave segreta.\n"
-" \"Key is superseded\"\n"
-" Usa questo se hai sostituito questa chiave con una più recente.\n"
-" \"Key is no longer used\"\n"
-" Usa questo se hai mandato in pensione questa chiave.\n"
-" \"User ID is no longer valid\"\n"
-" Usa questo per affermare che l'user ID non dovrebbe più essere usato;\n"
-" solitamente è usato per indicare un indirizzo di email non valido.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Se vuoi, puoi digitare un testo che descrive perché hai emesso\n"
-"questo certificato di revoca. Per favore sii conciso.\n"
-"Una riga vuota termina il testo.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Non è disponibile un aiuto"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Non è disponibile un aiuto per `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "portachiavi `%s' creato\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "rebuild della cache del portachiavi fallito: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s è quello non modificato\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s è quello nuovo\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Per favore risolvete questo possibile problema di sicurezza\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "controllo il portachiavi `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "Per ora sono state controllate %lu chiavi (%lu firme)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "Sono state controllate %lu chiavi (%lu firme)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: portachiavi creato\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "è necessario eseguire di nuovo GnuPG in modo che possa leggere il nuovo\n"
-#~ "file delle opzioni\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "cabiamento dei permessi di `%s' fallito: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOME=VALORE|usa questi dati per una nota"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "il primo carattere del nome di una nota deve essere una lettera o un\n"
-#~ "underscore\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "nel nome di una nota i punti devono avere altri caratteri intorno\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "ATTENZIONE: Questa chiave ha già un ID fotografico.\n"
-#~ " Aggiungerne un altro può confondere alcune versioni di PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "È possibile avere un solo ID fotografico su ogni chiave.\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Impronta digitale:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Impronta digitale:"
diff --git a/po/ja.po b/po/ja.po
deleted file mode 100644
index 8af08559c..000000000
--- a/po/ja.po
+++ /dev/null
@@ -1,4671 +0,0 @@
-# Japanese messages for GnuPG
-# Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
-# IIDA Yosiaki <iida@gnu.org>, 1999, 2000, 2002.
-# Yoshihiro Kajiki <kajiki@ylug.org>, 1999.
-# This file is distributed under the same license as the GnuPG package.
-# Special thanks to "Takashi P.KATOH".
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.7\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-05-10 07:28-0400\n"
-"Last-Translator: IIDA Yosiaki <iida@gnu.org>\n"
-"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=EUC-JP\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "·Ù¹ð: ¤ä¤Ð¤¤¥á¥â¥ê¡¼¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "¾ÜºÙ¤Ïhttp://www.gnupg.org/faq.html¤ò¤´Í÷¤¯¤À¤µ¤¤\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "½é´ü²½ºÑ¤ß¤Î°ÂÁ´¤Ê¥á¥â¥ê¡¼¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(¤³¤ÎÌÜŪ¤Ë¤Ï¸í¤Ã¤¿¥×¥í¥°¥é¥à¤òÍѤ¤¤¿¤Î¤Ç¤·¤ç¤¦)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "yes"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "yY"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "no"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "quit"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "°ìÈÌŪ¤Ê¥¨¥é¡¼"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "̤ÃΤΥѥ±¥Ã¥È¡¦¥¿¥¤¥×¤Ç¤¹"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "̤ÃΤΥС¼¥¸¥ç¥ó¤Ç¤¹"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "̤ÃΤθø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "̤ÃΤÎÍ×Ì󥢥르¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "¸ø³«¸°¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "ÈëÌ©¸°¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "½ð̾¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "¥Á¥§¥Ã¥¯¥µ¥à¡¦¥¨¥é¡¼"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "̤ÃΤΰŹ楢¥ë¥´¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "¸°Îؤ¬³«¤±¤Þ¤»¤ó"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "̵¸ú¤Ê¥Ñ¥±¥Ã¥È¤Ç¤¹"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "̵¸ú¤ÊÊñÁõ¤Ç¤¹"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "¤½¤Î¥æ¡¼¥¶¡¼ID¤Ï¤¢¤ê¤Þ¤»¤ó"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "ÈëÌ©¸°¤¬ÆÀ¤é¤ì¤Þ¤»¤ó"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "¸í¤Ã¤¿ÈëÌ©¸°¤¬ÍѤ¤¤é¤ì¤Æ¤¤¤Þ¤¹"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "¸°¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "¥Õ¥¡¥¤¥ë¤ÎÆɽФ·¥¨¥é¡¼"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "¥Õ¥¡¥¤¥ë¤Î½ñ¹þ¤ß¥¨¥é¡¼"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "̤ÃΤΰµ½Ì¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "¥Õ¥¡¥¤¥ë¤ÎºîÀ®¥¨¥é¡¼"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬Ìµ¸ú¤Ç¤¹"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "̤¼ÂÁõ¤Î¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "̤¼ÂÁõ¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "̤ÃΤνð̾¥¯¥é¥¹¤Ç¤¹"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¥¨¥é¡¼¤Ç¤¹"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "ÉÔÀµ¤ÊMPI¤Ç¤¹"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "¥ê¥½¡¼¥¹¤¬¸Â³¦¤Ç¤¹"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "¸°Îؤ¬Ìµ¸ú¤Ç¤¹"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "¾ÚÌÀ½ñ¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "¥æ¡¼¥¶¡¼ID¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "¥Õ¥¡¥¤¥ë¤¬ÊĤ¸¤é¤ì¤Þ¤»¤ó"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "¥Õ¥¡¥¤¥ë̾¤ÎÊѹ¹¥¨¥é¡¼"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "¥Õ¥¡¥¤¥ë¤Îºï½ü¥¨¥é¡¼"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "ͽ´ü¤»¤Ì¥Ç¡¼¥¿¤Ç¤¹"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "ÆüÉÕ¤¬¾×Æͤ·¤Æ¤¤¤Þ¤¹"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "»ÈÍѤǤ­¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Æ¤¤¤Þ¤¹"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "¼å¤¤¸°¤Ç¤¹"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "̵¸ú¤Ê»ØÄê¤Ç¤¹"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI¤¬ÉÔÀµ¤Ç¤¹"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "¤½¤ÎURI¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "¥Í¥Ã¥È¥ï¡¼¥¯¡¦¥¨¥é¡¼"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "̤½èÍý"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "»ÈÍѤǤ­¤Ê¤¤¸ø³«¸°¤Ç¤¹"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "»ÈÍѤǤ­¤Ê¤¤ÈëÌ©¸°¤Ç¤¹"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤Î¥¨¥é¡¼"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... ¥Ð¥°¤Ç¤¹ (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤è¤¦¤Ç¤¹ ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "`%s'¤¬³«¤±¤Þ¤»¤ó: %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "`%s'¤òÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' ¤ÏÉáÄ̤Υե¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ̵»ë\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "Ãí°Õ: random_seed ¥Õ¥¡¥¤¥ë¤Ï¶õ¤Ç¤¹\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "·Ù¹ð: ̵¸ú¤Ê¥µ¥¤¥º¤Î random_seed ¥Õ¥¡¥¤¥ë - »È¤¤¤Þ¤»¤ó\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "`%s'¤òÆɤá¤Þ¤»¤ó: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "Ãí°Õ: random_seed ¥Õ¥¡¥¤¥ë¤Î¹¹¿·¤ò¤·¤Þ¤»¤ó\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "`%s'¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "`%s'¤Ë½ñ¤±¤Þ¤»¤ó: %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "`%s'¤òÊĤ¸¤é¤ì¤Þ¤»¤ó: %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "·Ù¹ð: ¤ä¤Ð¤¤Íð¿ôÀ¸À®»Ò¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤¹!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"ÅëºÜ¤µ¤ì¤Æ¤¤¤ëÍð¿ôÀ¸À®»Ò¤Ï¡¢°Å¹æÍѤȤ·¤Æ¤Ï¤ª¤½¤Þ¤Ä¤Ç¡¢\n"
-"¶¯¤¤Íð¿ô¤¬¤Ç¤­¤Þ¤»¤ó!\n"
-"\n"
-"¤³¤Î¥×¥í¥°¥é¥à¤ÎÀ¸À®¤·¤¿¥Ç¡¼¥¿¤ò°ìÀÚ»ÈÍѤ·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"½½Ê¬¤ÊŤµ¤ÎÍð¿ô¤¬ÆÀ¤é¤ì¤Þ¤»¤ó¡£OS¤¬¤â¤Ã¤ÈÍ𻨤µ¤ò¼ý½¸\n"
-"¤Ç¤­¤ë¤è¤¦¡¢²¿¤«¤·¤Æ¤¯¤À¤µ¤¤! (¤¢¤È%d¥Ð¥¤¥È¤¤¤ê¤Þ¤¹)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@¥³¥Þ¥ó¥É:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[¥Õ¥¡¥¤¥ë]|½ð̾¤òºîÀ®"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[¥Õ¥¡¥¤¥ë]|¥¯¥ê¥¢½ð̾¤òºîÀ®"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "ʬΥ½ð̾¤òºîÀ®"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "¥Ç¡¼¥¿¤ò°Å¹æ²½"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[¥Õ¥¡¥¤¥ë·²]|¥Õ¥¡¥¤¥ë·²¤ò°Å¹æ²½"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "°Å¹æ²½¤Ë¤ÏÂоΰŹæË¡¤Î¤ß¤ò»ÈÍÑ"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "Êݸ¤Î¤ß"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "¥Ç¡¼¥¿¤òÉü¹æ (´ûÄê)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[¥Õ¥¡¥¤¥ë·²]|¥Õ¥¡¥¤¥ë·²¤òÉü¹æ"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "½ð̾¤ò¸¡¾Ú"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "¸°¤Î°ìÍ÷"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "¸°¤È½ð̾¤Î°ìÍ÷"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "¸°¤Î½ð̾¤ò¸¡¾Ú"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "¸°¤È»ØÌæ¤Î°ìÍ÷"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "ÈëÌ©¸°¤Î°ìÍ÷"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "¿·¤·¤¤¸°ÂФòÀ¸À®"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "¸ø³«¸°Îؤ«¤é¸°·²¤òºï½ü"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "ÈëÌ©¸°Îؤ«¤é¸°·²¤òºï½ü"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "¸°¤Ë½ð̾"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "¸°¤ØÆâÉôŪ¤Ë½ð̾"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤Ë½ð̾"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤ØÆâÉôŪ¤Ë½ð̾"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "¸°¤Ø¤Î½ð̾¤äÊÔ½¸"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "ÇË´þ¾ÚÌÀ½ñ¤òÀ¸À®"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "¸°¤ò½ñ¤­½Ð¤¹"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤Ë¸°¤ò½ñ¤­½Ð¤¹"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÆɤ߹þ¤à"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤Î¸°¤ò¸¡º÷¤¹¤ë"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÁ´Éô¹¹¿·¤¹¤ë"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "¸°¤ÎÆɹþ¤ß/Ê»¹ç"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "¥Ñ¥±¥Ã¥ÈÎó¤Î¤ß¤Î°ìÍ÷"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "½êÍ­¼Ô¤ò¿®ÍѤ·¤¿Ãͤò½ñ¤­½Ð¤¹"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "½êÍ­¼Ô¤ò¿®ÍѤ·¤¿ÃͤòÆɤ߹þ¤à"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "¼êÅö¤Æ¤·¤Æ¤Ê¤¤¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "²õ¤ì¤¿¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ò½¤Éü"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr ""
-"¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ïɸ½àÆþÎϤÎ\n"
-"ÊñÁõ½üµî"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ïɸ½àÆþÎϤÎÊñÁõ²½"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|¥¢¥ë¥´¥ê¥º¥à [¥Õ¥¡¥¤¥ë]|¥á¥Ã¥»¡¼¥¸Í×Ìó¤ò½ÐÎÏ"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"¥ª¥×¥·¥ç¥ó:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "ASCII·Á¼°¤ÎÊñÁõ¤òºîÀ®"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|̾Á°|¡Ö̾Á°¡×ÍѤ˰Ź沽"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr ""
-"|̾Á°|´ûÄê¤Î¼õ¿®¼Ô¤È¤·¤Æ\n"
-"¡Ö̾Á°¡×¤ò»ÈÍÑ"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "´ûÄê¤Î¼õ¿®¼Ô¤Ë´ûÄê¤Î¸°¤ò»ÈÍÑ"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr ""
-"½ð̾¤äÉü¹æ¤Ë¤³¤Î¥æ¡¼¥¶¡¼id\n"
-"¤ò»ÈÍÑ"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr ""
-"|N|°µ½Ì¥ì¥Ù¥ë¤òN¤ËÀßÄê\n"
-"(0¤ÏÈó°µ½Ì)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "Àµ½à¥Æ¥­¥¹¥È¡¦¥â¡¼¥É¤ò»ÈÍÑ"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë¤È¤·¤Æ»ÈÍÑ"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "¾éĹ"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "¤ä¤äÀŤ«"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "üËö¤òÉÔ»ÈÍÑ"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "¶¯À©Åª¤Ëv3½ð̾"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "v3½ð̾¤ò¶¯À©¤·¤Ê¤¤"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "¶¯À©Åª¤Ëv4½ð̾"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "v4½ð̾¤ò¶¯À©¤·¤Ê¤¤"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "°Å¹æ²½¤Ë¤Ï¾ï¤ËMDC¤ò»ÈÍÑ"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "°Å¹æ²½¤Ë¤ÏÀäÂФËMDC¤ò»ÈÍѤ·¤Ê¤¤"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "̵Êѹ¹"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "gpg¥¨¡¼¥¸¥§¥ó¥È¤ò»ÈÍÑ"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "¥Ð¥Ã¥Á¡¦¥â¡¼¥É: ³Îǧ¾Êά"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr ""
-"¤¿¤¤¤Æ¤¤¤Î¼ÁÌä¤ÎÅú¤¨¤Ïyes\n"
-"¤È¤ß¤Ê¤¹"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr ""
-"¤¿¤¤¤Æ¤¤¤Î¼ÁÌä¤ÎÅú¤¨¤Ïno\n"
-"¤È¤ß¤Ê¤¹"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "¸°ÎؤΰìÍ÷¤Ë¤³¤Î¸°ÎؤòÄɲÃ"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "°ìÍ÷¤Ë¤³¤ÎÈëÌ©¸°ÎؤòÄɲÃ"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "°ìÍ÷¤Î¸°¤¬¤¢¤ë¸°Îؤòɽ¼¨"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr ""
-"|̾Á°|´ûÄê¤ÎÈëÌ©¸°¤È¤·¤Æ\n"
-"¡Ö̾Á°¡×¤ò»ÈÍÑ"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|¥Û¥¹¥È|¸°¤Î¸¡º÷¤Ë¤³¤Î¸°¥µ¡¼¥Ð¡¼¤ò»ÈÍÑ"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr ""
-"|CHARSET̾|üËö¤Îcharset¤ò¡ÖCHARSET̾¡×\n"
-"¤ËÀßÄê"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr ""
-"¥Õ¥¡¥¤¥ë¤«¤é¥ª¥×¥·¥ç¥ó¤ò\n"
-"Æɤ߹þ¤à"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr ""
-"|¥Õ¥¡¥¤¥ëµ­½Ò»Ò|¤³¤Î¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤Ë¾õÂÖ¤ò\n"
-"½ñ¤­½Ð¤¹"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr ""
-"|¥Õ¥¡¥¤¥ë|¥¹¥Æ¡¼¥¿¥¹¾ðÊó¤ò¥Õ¥¡¥¤¥ë¤Ë\n"
-"½ñ¤­½Ð¤¹"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|¸°ID|¤³¤Î¸°¤òµæ¶ËŪ¤Ë¿®ÍѤ¹¤ë"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr ""
-"|¥Õ¥¡¥¤¥ë|³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Î¥Õ¥¡¥¤¥ë¤ò\n"
-"Æɤ߹þ¤à"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr ""
-"RFC1991¤Ëµ­½Ò¤µ¤ì¤¿¥â¡¼¥É¤ò\n"
-"»ÈÍÑ"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"¥Ñ¥±¥Ã¥È¤È°Å¹æ¤È½ð̾¤Î¥ª¥×¥·¥ç\n"
-"¥ó¤òÁ´¤ÆOpenPGP¤Î¿¶Éñ¤ËÀßÄê"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"¥Ñ¥±¥Ã¥È¤È°Å¹æ¤ÈÍ×Ìó¤Î¥ª¥×¥·¥ç\n"
-"¥ó¤òÁ´¤ÆPGP 2.x¤Î¿¶Éñ¤ËÀßÄê"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|¥Ñ¥¹¥Õ¥ì¡¼¥º¡¦¥â¡¼¥ÉN¤ò»ÈÍÑ"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr ""
-"|̾Á°|¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ë¡Ö̾Á°¡×¤Î¥á¥Ã\n"
-"¥»¡¼¥¸Í×Ì󥢥르¥ê¥º¥à¤ò»ÈÍÑ"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr ""
-"|̾Á°|¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ë¡Ö̾Á°¡×¤Î°Å¹æ\n"
-"¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr ""
-"|̾Á°|¡Ö̾Á°¡×¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤ò\n"
-"»ÈÍÑ"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr ""
-"|̾Á°|¡Ö̾Á°¡×¤Î¥á¥Ã¥»¡¼¥¸Í×Ìó\n"
-"¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr ""
-"|̾Á°|¡Ö̾Á°¡×¤Î°µ½Ì¥¢¥ë¥´¥ê¥º¥à¤ò\n"
-"»ÈÍÑ"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr ""
-"°Å¹æ¥Ñ¥±¥Ã¥È¤Î¸°ID¥Õ¥£¡¼¥ë¥É\n"
-"¤òÁ÷½Ð"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "¥Õ¥©¥ÈID¤òɽ¼¨"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "¥Õ¥©¥ÈID¤òɽ¼¨¤·¤Ê¤¤"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-"¥Õ¥©¥ÈID¤ò±ÜÍ÷¤¹¤ë¥³¥Þ¥ó¥É¹Ô\n"
-"¤òÀßÄê"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(¥³¥Þ¥ó¥É¤È¥ª¥×¥·¥ç¥óÁ´Éô¤Î°ìÍ÷¤Ï¡¢\n"
-"¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤ò¤´Í÷¤¯¤À¤µ¤¤)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Îã:\n"
-"\n"
-" -se -r Bob [¥Õ¥¡¥¤¥ë] ¥æ¡¼¥¶¡¼Bob¤Ø¤Î½ð̾¤È°Å¹æ²½\n"
-" --clearsign [¥Õ¥¡¥¤¥ë] ¥¯¥ê¥¢½ð̾¤òÀ¸À®\n"
-" --detach-sign [¥Õ¥¡¥¤¥ë] ʬΥ½ð̾¤òÀ¸À®\n"
-" --list-keys [̾Á°] ¸°¤òɽ¼¨\n"
-" --fingerprint [̾Á°] »ØÌæ¤òɽ¼¨\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤é <gnupg-bugs@gnu.org> ¤Þ¤Ç¤´Êó¹ð¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "»È¤¤Êý: gpg [¥ª¥×¥·¥ç¥ó] [¥Õ¥¡¥¤¥ë] (¥Ø¥ë¥×¤Ï -h)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"½ñ¼°: gpg [¥ª¥×¥·¥ç¥ó] [¥Õ¥¡¥¤¥ë]\n"
-"½ð̾¡¢¸¡¾Ú¡¢°Å¹æ²½¤äÉü¹æ\n"
-"´ûÄê¤ÎÆ°ºî¤Ï¡¢ÆþÎϥǡ¼¥¿¤Ë°Í¸\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥¢¥ë¥´¥ê¥º¥à:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "»È¤¤Êý: gpg [¥ª¥×¥·¥ç¥ó] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "¥³¥Þ¥ó¥É¤Î¾×ÆÍ\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "·Ù¹ð: %s \"%s\" ¤Î°ÂÁ´¤Ç¤Ê¤¤½êÍ­¼Ô\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "·Ù¹ð: %s \"%s\" ¤Î°ÂÁ´¤Ç¤Ê¤¤µö²Ä\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "·Ù¹ð: %s \"%s\" ¤Î°ÂÁ´¤Ç¤Ê¤¤½êÍ­¼Ô\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "·Ù¹ð: %s \"%s\" ¤Î°ÂÁ´¤Ç¤Ê¤¤µö²Ä\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "Ãí°Õ: ´ûÄê¤Î¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë`%s'¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "Ãí°Õ: ´ûÄê¤Î¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë`%s'¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë`%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "`%s'¤«¤é¥ª¥×¥·¥ç¥ó¤òÆɤ߹þ¤ß¤Þ¤¹\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s¤ÏÀµ¤·¤¤Ê¸»ú½¸¹ç¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤ÎURI¤ò²òÀÏÉÔǽ\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë¡¦¥Ð¡¼¥¸¥ç¥ó%d\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "̵¸ú¤ÊÊñÁõ¤Ç¤¹"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë¡¦¥Ð¡¼¥¸¥ç¥ó%d\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "¸°Îؤ¬Ìµ¸ú¤Ç¤¹"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "exec-path¤ò%s¤ËÀßÄêÉÔǽ\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "·Ù¹ð: ¥×¥í¥°¥é¥à¤Î¥³¥¢¡¦¥Õ¥¡¥¤¥ë¤¬¤Ç¤­¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "·Ù¹ð: %s¤Ï%s¤è¤êÍ¥Àè\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "Ãí°Õ: ÉáÄÌ%s¤ÏÍѤ¤¤Þ¤»¤ó!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s¤Ï%s¤È¤È¤â¤ËÍѤ¤¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s¤Ï%s¤È¤È¤â¤ËÍѤ¤¤Æ¤â̵°ÕÌ£¤Ç¤¹!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏʬΥ½ð̾¤«¥¯¥ê¥¢½ð̾¤À¤±¤·¤«¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "--pgp2¥â¡¼¥É¤Ç¤Ï½ð̾¤È°Å¹æ¤òƱ»þ¤Ë¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "--pgp2¤ò»ØÄꤷ¤¿¤é¡¢(¥Ñ¥¤¥×¤Ç¤Ê¤¯) ¥Õ¥¡¥¤¥ë¤ò»ØÄꤻ¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "--pgp2¥â¡¼¥É¤Î¥á¥Ã¥»¡¼¥¸°Å¹æ²½¤Ç¤ÏIDEA°Å¹æ¤¬Í׵ᤵ¤ì¤Þ¤¹ \n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏPGP 2.x¤Ç¤Ï»ÈÍѤǤ­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "ÁªÂò¤µ¤ì¤¿°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤Ï̵¸ú¤Ç¤¹\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "ÁªÂò¤µ¤ì¤¿Í×Ì󥢥르¥ê¥º¥à¤Ï̵¸ú¤Ç¤¹\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "ÁªÂò¤µ¤ì¤¿Í×Ì󥢥르¥ê¥º¥à¤Ï̵¸ú¤Ç¤¹\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "°µ½Ì¥¢¥ë¥´¥ê¥º¥à¤Ï%d..%d¤ÎÈϰϤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed¤ÏÀµ¤ÎÃͤ¬É¬ÍפǤ¹\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed¤Ï1¤è¤êÂ礭¤ÊÃͤ¬É¬ÍפǤ¹\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth¤Ï1¤«¤é255¤ÎÈϰϤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "Ãí°Õ: ñ½ã¤ÊS2K¥â¡¼¥É(0)¤Î»ÈÍѤˤ϶¯¤¯È¿ÂФ·¤Þ¤¹\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "̵¸ú¤ÊS2K¥â¡¼¥É¡£0¤«1¤«3¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "̵¸ú¤Êdefault-check-level¡£0¤«1¤«2¤«3¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "̵¸ú¤ÊÍ¥Àè½ç°Ì\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "̵¸ú¤ÊÍ¥Àè½ç°Ì\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "̵¸ú¤ÊÍ¥Àè½ç°Ì\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "̵¸ú¤ÊÍ¥Àè½ç°Ì\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î½é´ü²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key ¥æ¡¼¥¶¡¼id"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key ¥æ¡¼¥¶¡¼id"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key ¥æ¡¼¥¶¡¼id"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key ¥æ¡¼¥¶¡¼id"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key ¥æ¡¼¥¶¡¼id [¥³¥Þ¥ó¥É]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "%s¤¬³«¤±¤Þ¤»¤ó: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [¥æ¡¼¥¶¡¼id] [¸°ÎØ]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "ÊñÁõ½üµî¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "ÊñÁõ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "̵¸ú¤Ê¥Ï¥Ã¥·¥å¡¦¥¢¥ë¥´¥ê¥º¥à`%s'¤Ç¤¹\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[¥Õ¥¡¥¤¥ë̾]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "³«»Ï¤·¤Þ¤¹¡£¥á¥Ã¥»¡¼¥¸¤ò¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤ ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "`%s'¤¬³«¤±¤Þ¤»¤ó\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"Ãí¼á̾¤Ë¤Ïʸ»ú¡¢¿ô»ú¡¢¥É¥Ã¥È¡¢¥¢¥ó¥À¡¼¥¹¥³¥¢¤Î¤ß¤òÍѤ¤¡¢\n"
-"'='¤Ç½ª¤ï¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "Ãí¼á̾¤ÎÃͤËÀ©¸æʸ»ú¤òÍѤ¤¤Æ¤Ï¤¤¤±¤Þ¤»¤ó\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "¤¢¤¿¤¨¤é¤ì¤¿¾ÚÌÀ½ñ¥Ý¥ê¥·¡¼URL¤Ï̵¸ú¤Ç¤¹\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "¤¢¤¿¤¨¤é¤ì¤¿½ð̾¥Ý¥ê¥·¡¼URL¤Ï̵¸ú¤Ç¤¹\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "ÊñÁõ: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "̵¸ú¤ÊÊñÁõ¥Ø¥Ã¥À¡¼: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "ÊñÁõ¥Ø¥Ã¥À¡¼: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "̵¸ú¤Ê¥¯¥ê¥¢½ð̾¥Ø¥Ã¥À¡¼\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "Æþ¤ì»Ò¤Î¥¯¥ê¥¢½ð̾\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "̵¸ú¤Ê¥À¥Ã¥·¥å¤Ç¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿¹Ô: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "ͽ´ü¤»¤ÌÊñÁõ:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "̵¸ú¤Ê64¿Êʸ»ú%02x¤ò¤È¤Ð¤·¤Þ¤¹\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "¥Õ¥¡¥¤¥ëËöÈø¤¬Á᤹¤®¤Þ¤¹ (CRC¤¬¤¢¤ê¤Þ¤»¤ó)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "¥Õ¥¡¥¤¥ëËöÈø¤¬Á᤹¤®¤Þ¤¹ (CRC¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "CRC¥¨¥é¡¼¡£%06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "¥Õ¥¡¥¤¥ëËöÈø¤¬Á᤹¤®¤Þ¤¹ (¸åÈøÉô¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "¸åÈø¤Î¹Ô¤Ë¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "Í­¸ú¤ÊOpenPGP¥Ç¡¼¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "̵¸ú¤ÊÊñÁõ: ¹Ô¤ÎŤµ¤¬%dʸ»ú¤òĶ¤¨¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"ÊñÁõ¤ÎÃæ¤Ë quoted printable ʸ»ú¤¬¤¢¤ê¤Þ¤¹¡£¤ª¤½¤é¤¯¥Ð¥°¤Î¤¢¤ë\n"
-"MTA¤ò»ÈÍѤ·¤¿¤Î¤Ç¤·¤ç¤¦\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Íýͳ¤Ï»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "¸°¤¬¤È¤ê¤«¤ï¤Ã¤Æ¤¤¤Þ¤¹"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "¸°¤¬¥Ñ¥¯¤é¤ì¤Þ¤·¤¿"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "¸°¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "¥æ¡¼¥¶¡¼ID¤¬¤â¤¦Í­¸ú¤Ç¤¢¤ê¤Þ¤»¤ó"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "ÇË´þÍýͳ: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "ŬÍÑ: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"¿®ÍÑÅÙ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"¾¤Î¥æ¡¼¥¶¡¼¤Î¸°¤òÀµ¤·¤¯¸¡¾Ú¤¹¤ë¤¿¤á¤Ë¡¢¤³¤Î¥æ¡¼¥¶¡¼¤Î¿®ÍÑÅÙ¤ò·è¤á¤Æ\n"
-"¤¯¤À¤µ¤¤(¥Ñ¥¹¥Ý¡¼¥È¤ò¸«¤»¤Æ¤â¤é¤Ã¤¿¤ê¡¢Â¾¤«¤éÆÀ¤¿»ØÌæ¤È¾È¹ç¤·¤¿¤ê...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = ̤ÃÎ\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = ¿®ÍѤ· ¤Ê¤¤\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = ¤¢¤ëÄøÅÙ¿®ÍѤ¹¤ë\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = ´°Á´¤Ë¿®ÍѤ¹¤ë\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = ÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = ¤è¤ê¾Ü¤·¤¤¾ðÊó¤ò¸«¤ë\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = ¥á¡¼¥ó¡¦¥á¥Ë¥å¡¼¤ËÌá¤ë\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = ¤³¤Î¸°¤Ï¤È¤Ð¤¹\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = ½ªÎ»\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "¤¢¤Ê¤¿¤Î·èÄê¤Ï? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "ËÜÅö¤Ë¤³¤Î¸°¤òÀäÂÐŪ¤Ë¿®ÍѤ·¤Þ¤¹¤«? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "ÀäÂÐŪ¤Ë¿®ÍѤ·¤¿¸°¤Ø¤Î¾ÚÌÀ½ñ:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "¸°%08lX: ¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "¤½¤ì¤Ç¤â¤³¤Î¸°¤ò»È¤¤¤Þ¤¹¤«? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "¸°%08lX: Éû¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "¸°%08lX: ¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr "%08lX: ¤³¤Î¸°¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¼êÃʤ¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤Þ ¤»¤ó\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: ¤³¤Î¸°¤Ï¼ÂºÝ¤ËËܿͤΤâ¤Î¤«¤ÏÉÔÌÀ¤Ç¤¹¤¬¡¢\n"
-"¤¤¤Á¤ª¤¦¼õÍý¤·¤Þ¤¹\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "¤³¤Î¸°¤Ï¤¿¤Ö¤óËܿͤΤâ¤Î¤Ç¤¹\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "¤³¤Î¸°¤Ï²æ¡¹¤Î¤â¤Î¤Ç¤¹\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"¤³¤Î¸°¤ÏËܿͤΤâ¤Î¤«¤É¤¦¤«³Î¿®¤Ç¤­¤Þ ¤»¤ó¡£\n"
-"º£¤«¤é¹Ô¤¦¤³¤È¤ò *³Î¼Â¤Ë* Íý²ò¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢\n"
-"¼¡¤Î¼ÁÌä¤Ë¤Ïno¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "·Ù¹ð: ¿®ÍѤǤ­¤Ê¤¤¸°¤òÍѤ¤¤Æ¤¤¤Þ¤¹!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "·Ù¹ð: ¤³¤Î¸°¤ÏËܿͤˤè¤Ã¤ÆÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " ½ð̾¤¬µ¶Êª¤Ê¤³¤È¤â¤¢¤ë¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "·Ù¹ð: ¤³¤ÎÉû¸°¤ÏËܿͤˤè¤Ã¤ÆÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Ãí°Õ: ¤³¤Î¸°¤Ï»ÈÍѶػߤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Ãí°Õ: ¤³¤Î¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤ë½ð̾¤Ç¾ÚÌÀ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " ¤³¤Î½ð̾¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«¤Î¸¡¾Ú¼êÃʤ¬¤¢¤ê¤Þ¤»¤ó¡£\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï¿®ÍѤǤ­¤Þ ¤»¤ó!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " ¤³¤Î½ð̾¤Ï¤ª¤½¤é¤¯ µ¶Êª ¤Ç¤¹¡£\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr "·Ù¹ð: ¤³¤Î¸°¤Ï½½Ê¬¤Ë¿®ÍѤǤ­¤ë½ð̾¤Ç¾ÚÌÀ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " ¤³¤Î½ð̾¤¬ËܿͤΤâ¤Î¤«¤É¤¦¤«³Î¿®¤Ç¤­¤Þ¤»¤ó¡£\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ¥¹¥­¥Ã¥×: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï´û¤Ë¤¢¤ê¤Þ¤¹\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "¥æ¡¼¥¶¡¼ID¤ò»ØÄꤷ¤Æ¤¤¤Þ¤»¤ó (¡Ö-r¡×¤òÍѤ¤¤Þ¤·¤ç¤¦) ¡£\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"¥æ¡¼¥¶¡¼ID¤òÆþÎÏ¡£¶õ¹Ô¤Ç½ªÎ»: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "¤½¤Î¥æ¡¼¥¶¡¼ID¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï´ûÄê¤Î¼õ¿®¼Ô¤È¤·¤ÆÀßÄêºÑ¤ß¤Ç¤¹\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "¸ø³«¸°¤Ï»ÈÍѶػߤǤ¹¡£\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "¥¹¥­¥Ã¥×: ¸ø³«¸°¤ÏÀßÄêºÑ¤ß¤Ç¤¹\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "´ûÄê¤Î¼õ¿®¼Ô`%s'¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ¥¹¥­¥Ã¥×: ¸ø³«¸°¤Ï»ÈÍѶػߤǤ¹\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "Í­¸ú¤Ê¥¢¥É¥ì¥¹¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "Áª¹¥%c%lu¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "Áª¹¥%c%lu¤Î½ÅÊ£\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "¿¤¹¤®¤ë`%c'Áª¹¥\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "Áª¹¥Ê¸»úÎó¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "¼«¸Ê½ð̾¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "¼«¸Ê½ð̾¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "½ð̾¤ËÂбþ¤¹¤ë¸°¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "̵¸ú¤Ê¸°¥µ¥¤¥º¡£%u¥Ó¥Ã¥È¤Ë¤·¤Þ¤¹\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "¸°¥µ¥¤¥º¤ò%u¥Ó¥Ã¥È¤Ë´Ý¤á¤Þ¤¹\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "¤¹¤­¤Ê¸°¤Î¼ïÎà¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA¤ÈElGamal (´ûÄê)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (½ð̾¤Î¤ß)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (°Å¹æ²½¤Î¤ß)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (½ð̾¤È°Å¹æ²½)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (½ð̾¤Î¤ß)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (°Å¹æ²½¤Î¤ß)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (½ð̾¤È°Å¹æ²½)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "¤É¤ì¤Ë¤·¤Þ¤¹¤«? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤Þ¤¹ - ¤½¤ì¤Ç¤âºî¤ê¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "̵¸ú¤ÊÁªÂò¤Ç¤¹¡£\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"¿·¤·¤¤%s¸°ÂФòÀ¸À®¤·¤Þ¤¹¡£\n"
-" ºÇ¾®¤Î¸°Ä¹¤Ï 768 ¥Ó¥Ã¥È\n"
-" ´ûÄê¤Î¸°Ä¹¤Ï 1024 ¥Ó¥Ã¥È\n"
-" ºÇÂç¤Î¿ä¾©¸°Ä¹¤Ï 2048 ¥Ó¥Ã¥È\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "¤É¤Î¸°Ä¹¤Ë¤·¤Þ¤¹¤«? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA¤Î¸°Ä¹¤Ï512¤«¤é1024¤Þ¤Ç¤Ç¤¹\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "¸°Ä¹¤¬¾®¤µ¤¹¤®¤Þ¤¹¡£RSA¤ÏºÇ¾®¤Ç¤â1024¤Ç¤¹¡£\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "¸°Ä¹¤¬¾®¤µ¤¹¤®¤Þ¤¹¡£ºÇ¾®¤Ç¤â768¤Ç¤¹¡£\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "¸°Ä¹¤¬Â礭¤¹¤®¤Þ¤¹¡£%d¤¬ºÇÂç¤Ç¤¹¡£\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"2048¤è¤êÂ礭¤Ê¸°Ä¹¤Ï¡¢·×»»»þ´Ö¤¬ Èó¾ï¤Ë Ť¯¤Ê¤ë¤Î¤Ç\n"
-"¿ä¾©¤·¤Þ¤»¤ó!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "¤³¤Î¸°Ä¹¤ÇËÜÅö¤Ë¤¤¤¤¤Ç¤¹¤«? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"¤ï¤«¤ê¤Þ¤·¤¿¡£¤·¤«¤·¡¢¤¢¤Ê¤¿¤Î¥â¥Ë¥¿¡¼¤ä¥­¡¼¥Ü¡¼¥ÉÆþÎϤϡ¢\n"
-"¹¶·â¤Ë¤¿¤¤¤·¤ÆÀȼå¤Ç¤¢¤ë¤³¤È¤ò¿´¤Ëα¤á¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Í׵ᤵ¤ì¤¿¸°Ä¹¤Ï%u¥Ó¥Ã¥È\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "%u¥Ó¥Ã¥È¤Ë´Ý¤á¤Þ¤¹\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"¸°¤Î´ü¸Â¤ò·è¤á¤Æ¤¯¤À¤µ¤¤¡£\n"
-" 0 = ̵´ü¸Â\n"
-" <n> = Í­¸ú´ü¸Â n Æü´Ö\n"
-" <n>w = Í­¸ú´ü¸Â n ½µ´Ö\n"
-" <n>m = Í­¸ú´ü¸Â n ¤«·î´Ö\n"
-" <n>y = Í­¸ú´ü¸Â n ǯ´Ö\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"½ð̾¤Î´ü¸Â¤ò·è¤á¤Æ¤¯¤À¤µ¤¤¡£\n"
-" 0 = ̵´ü¸Â\n"
-" <n> = Í­¸ú´ü¸Â n Æü´Ö\n"
-" <n>w = Í­¸ú´ü¸Â n ½µ´Ö\n"
-" <n>m = Í­¸ú´ü¸Â n ¤«·î´Ö\n"
-" <n>y = Í­¸ú´ü¸Â n ǯ´Ö\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "¸°¤ÎÍ­¸ú´ü´Ö¤Ï? (0)"
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "½ð̾¤ÎÍ­¸ú´ü´Ö¤Ï? (0)"
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "̵¸ú¤ÊÃÍ\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s¤Ï̵´ü¸Â¤Ç¤¹\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s¤Ï%s¤Ë¤Æ´ü¸ÂÀÚ¤ì¤Ë¤Ê¤ê¤Þ¤¹\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"¤³¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢2038ǯ°Ê¹ß¤ÎÆüÉÕ¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó¤¬¡¢\n"
-"2106ǯ¤Þ¤Ç¤Ê¤éÀµ¤·¤¯½èÍý¤Ç¤­¤Þ¤¹¡£\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "¤³¤ì¤Ç¤¤¤¤¤Ç¤¹¤« (y/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"¤¢¤Ê¤¿¤Î¸°¤òƱÄꤹ¤ë¤¿¤á¤Ë¥æ¡¼¥¶¡¼ID¤¬É¬ÍפǤ¹¡£\n"
-"¤³¤Î¥½¥Õ¥È¤ÏËÜ̾¡¢¥³¥á¥ó¥È¡¢ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤«¤é\n"
-"¼¡¤Î½ñ¼°¤Ç¥æ¡¼¥¶¡¼ID¤ò¹½À®¤·¤Þ¤¹:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "ËÜ̾: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "̾Á°¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "̾Á°¤ò¿ô»ú¤Ç»Ï¤á¤Æ¤Ï¤¤¤±¤Þ¤»¤ó\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "̾Á°¤Ï5ʸ»ú°Ê¾å¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Í­¸ú¤ÊÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "¥³¥á¥ó¥È: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "¥³¥á¥ó¥È¤Ë̵¸ú¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "¤¢¤Ê¤¿¤Ïʸ»ú½¸¹ç`%s'¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"¼¡¤Î¥æ¡¼¥¶¡¼ID¤òÀßÄꤷ¤Þ¤·¤¿:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤òËÜ̾¤ä¥³¥á¥ó¥È¤ËÆþ¤ì¤Ê¤¤¤è¤¦¤Ë\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoQq"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "̾Á°(N)¡¢¥³¥á¥ó¥È(C)¡¢ÅŻҥ᡼¥ë(E)¤ÎÊѹ¹¡¢¤Þ¤¿¤Ï½ªÎ»(Q)? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "̾Á°(N)¡¢¥³¥á¥ó¥È(C)¡¢ÅŻҥ᡼¥ë(E)¤ÎÊѹ¹¡¢¤Þ¤¿¤ÏOK(O)¤«½ªÎ»(Q)? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "¤Þ¤º¥¨¥é¡¼¤ò½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"ÈëÌ©¸°¤òÊݸ¤ë¤¿¤á¤Ë¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¤¤ê¤Þ¤¹¡£\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ò¤Á¤ã¤ó¤È·«¤êÊÖ¤·¤Æ¤¤¤Þ¤»¤ó¡£ºÆÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔɬÍפʤ褦¤Ç¤¹¤¬¡¢¤ª¤½¤é¤¯¤½¤ì¤Ï¤í¤¯¤Ê¹Í¤¨¤Ç¤Ï\n"
-"¤¢¤ê¤Þ¤»¤ó! ¤¤¤Á¤ª¤¦Â³¹Ô¤·¤Þ¤¹¡£¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ï¡¢¤³¤Î¥×¥í¥°¥é¥à\n"
-"¤Î¡Ö--edit-key¡×¥ª¥×¥·¥ç¥ó¤Ç¤¤¤Ä¤Ç¤âÊѹ¹¤Ç¤­¤Þ¤¹¡£\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"º£¤«¤éŤ¤Íð¿ô¤òÀ¸À®¤·¤Þ¤¹¡£¥­¡¼¥Ü¡¼¥É¤òÂǤĤȤ«¡¢¥Þ¥¦¥¹¤òÆ°¤«¤¹\n"
-"¤È¤«¡¢¥Ç¥£¥¹¥¯¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¤«¤Î¾¤Î¤³¤È¤ò¤¹¤ë¤È¡¢Íð¿ôÀ¸À®»Ò¤Ç\n"
-"Í𻨤µ¤ÎÂ礭¤Ê¤¤¤¤Íð¿ô¤òÀ¸À®¤·¤ä¤¹¤¯¤Ê¤ë¤Î¤Ç¡¢¤ª´«¤á¤·¤Þ¤¹¡£\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA¸°ÂФÏ1024¥Ó¥Ã¥È¤Ë¤Ê¤ê¤Þ¤¹¡£\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "¸°¤ÎÀ¸À®¤¬Ãæ»ß¤µ¤ì¤Þ¤·¤¿¡£\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "`%s'¤Ø¸ø³«¸°¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "`%s'¤ØÈëÌ©¸°¤ò½ñ¤­¹þ¤ß¤Þ¤¹\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "½ñ¹þ¤ß²Äǽ¤Ê¸ø³«¸°Îؤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "½ñ¹þ¤ß²Äǽ¤ÊÈëÌ©¸°Îؤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "¸ø³«¸°ÎØ`%s'¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "ÈëÌ©¸°ÎØ`%s'¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "¸ø³«¸°¤ÈÈëÌ©¸°¤òºî¤ê¡¢½ð̾¤·¤Þ¤·¤¿¡£\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "ÀäÂÐŪ¤Ë¿®ÍѤ·¤¿¸°¤È¤·¤Æµ­Ï¿¤·¤Þ¤·¤¿¡£\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"¤³¤Î¸°¤Ï°Å¹æ²½¤Ë¤Ï»ÈÍѤǤ­¤Ê¤¤¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£°Å¹æ²½¤ò¹Ô¤¦¤Ë¤Ï¡¢\n"
-"¡Ö--edit-key¡×¥³¥Þ¥ó¥É¤òÍѤ¤¤ÆÉû¸°¤òÀ¸À®¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "¸°¤ÎÀ¸À®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr "¸°¤Ï%luÉÃ̤Íè¤Ë¤Ç¤­¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr "¸°¤Ï%luÉÃ̤Íè¤Ë¤Ç¤­¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "Ãí°Õ: v3¸°¤ÎÉû¸°¤ÎºîÀ®¤Ï¡¢OpenPGP¤ËŬ¹ç¤·¤Þ¤»¤ó\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "ËÜÅö¤Ëºî¤ê¤Þ¤¹¤«? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "¤³¤Î¥³¥Þ¥ó¥É¤Ç--output¤Ïµ¡Ç½¤·¤Þ¤»¤ó\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: ³«¤±¤Þ¤»¤ó: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎºîÀ®¥¨¥é¡¼: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s'¤Ï´û¤Ë°µ½ÌºÑ¤ß¤Ç¤¹\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: ·Ù¹ð: ¶õ¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr "--pgp2¥â¡¼¥É¤Ç¤Ï2048¥Ó¥Ã¥È°Ê²¼¤ÎRSA¸°¤Ç°Å¹æ²½¤·¤«¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "`%s'¤«¤éÆɤ߹þ¤ß¤Þ¤¹\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr "°Å¹æ²½¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¸°¤ÏÁ´ÉôIDEA°Å¹æ¤ò»È¤¨¤Þ¤»¤ó¡£\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "Ãí°Õ: °Å¹æ¥¢¥ë¥´¥ê¥º¥à%d¤ÏÍ¥Àè½ç¤ËÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "%s¥â¡¼¥É¤Ç¤³¤Î¥³¥Þ¥ó¥É¤òÍѤ¤¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s°Å¹æ²½ ¼õ¿®¼Ô: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "¸°`%s'¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "¸°¥Ö¥í¥Ã¥¯¤ÎÆɹþ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "¸° %08lX: rfc2440¤Î¸°¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "¸° %08lX: Êݸ¤ì¤Æ¤¤¤Þ¤»¤ó - ¥¹¥­¥Ã¥×\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "¸° %08lX: PGP 2.x·Á¼°¤Î¸°¤Ç¤¹ - ¥¹¥­¥Ã¥×\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "·Ù¹ð: ²¿¤â½ñ¤­½Ð¤·¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "pk¥­¥ã¥Ã¥·¥å¤Î¥¨¥ó¥È¥ê¡¼¤¬Â¿¤¹¤®¤Þ¤¹ - »ÈÍѶػß\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[¥æ¡¼¥¶¡¼id¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr "--allow-non-selfsigned-uid¤ÇÍ­¸ú¤Ë¤µ¤ì¤¿Ìµ¸ú¤Ê¸°%08lX¤Ç¤¹\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "Éû¸°%08lX¤ò¼ç¸°%08lX¤ËÂåÍѤ·¤Þ¤¹\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "¸°%08lX: ¸ø³«¸°¤Î¤Ê¤¤ÈëÌ©¸°¤Ç¤¹¡£¥¹¥­¥Ã¥×\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "¥¿¥¤¥×%d¤Î¥Ö¥í¥Ã¥¯¤ò¥¹¥­¥Ã¥×¤·¤Þ¤¹\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu¸°¤Þ¤Ç½èÍý\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "`%s'¤ÎÆɹþ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr " ½èÍý¿ô¤Î¹ç·×: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " ¥¹¥­¥Ã¥×¤·¤¿¿·¤·¤¤¸°: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " ¥æ¡¼¥¶¡¼ID¤Ê¤·: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " Æɹþ¤ß: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " Êѹ¹¤Ê¤·: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " ¿·¤·¤¤¥æ¡¼¥¶¡¼ID: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " ¿·¤·¤¤Éû¸°: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " ¿·¤·¤¤½ð̾: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " ¿·¤·¤¤¸°¤ÎÇË´þ: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " ÈëÌ©¸°¤ÎÆɽФ·: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " ÈëÌ©¸°¤ÎÆɹþ¤ß: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " ̵Êѹ¹¤ÎÈëÌ©¸°: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " Æɹþ¤ß: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "¸°%08lX: ¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "¸°%08lX: ¸°¤ËÂбþ¤¹¤ëÉû¸°¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "¸°%08lX: ¼õÍý¤·¤¿Ì¤¼«¸Ê½ð̾¤Î¥æ¡¼¥¶¡¼ID '%s'\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "¸°%08lX: ¿®ÍѤǤ­¤ë¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "¼«¸Ê½ð̾¤Î¤Ê¤¤¤»¤¤¤Ç¤·¤ç¤¦\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "¸°%08lX: ¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "¸° %08lX: ¿·¤·¤¤¸°¤Ç¤¹ - ¥¹¥­¥Ã¥×\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "½ñ¹þ¤ß²Äǽ¤Ê¸°Îؤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "`%s'¤Ø¤Î½ñ½Ð¤·\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "¸°ÎØ`%s'¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "¸°%08lX: ¸ø³«¸°¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "¸°%08lX: ¤³¤Á¤é¤ÎÊ£À½¤È¹ç¤¤¤Þ¤»¤ó\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "¸°%08lX: ¸µ¤Î¸°¥Ö¥í¥Ã¥¯¤Ë°ÌÃ֤Ť±¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "¸°%08lX: ¸µ¤Î¸°¥Ö¥í¥Ã¥¯¤òÆɤ߹þ¤á¤Þ¤»¤ó: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "¸°%08lX: ¿·¤·¤¤¥æ¡¼¥¶¡¼ID¤ò1¸Ä\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "¸°%08lX: ¿·¤·¤¤¥æ¡¼¥¶¡¼ID¤ò%d¸Ä\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "¸°%08lX: ¿·¤·¤¤½ð̾¤ò1¸Ä\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "¸°%08lX: ¿·¤·¤¤½ð̾¤ò%d¸Ä\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "¸°%08lX: ¿·¤·¤¤Éû¸°¤ò1¸Ä\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "¸°%08lX: ¿·¤·¤¤Éû¸°¤ò%d¸Ä\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "¸°%08lX: Êѹ¹¤Ê¤·\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "´ûÄê¤ÎÈëÌ©¸°Îؤ¬¤¢¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "¸°%08lX: ÈëÌ©¸°¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "¸°%08lX: ´û¤ËÈëÌ©¸°Îؤˤ¢¤ê¤Þ¤¹\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "¸°%08lX: ÈëÌ©¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr "¸°%08lX: ¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó - ÇË´þ¾ÚÌÀ½ñ¤òŬÍѤǤ­¤Þ¤»¤ó\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "¸°%08lX: ̵¸ú¤ÊÇË´þ¾ÚÌÀ½ñ: %s - µñÈÝ\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤òÆɤ߹þ¤ß¤Þ¤·¤¿\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "¸°%08lX: ½ð̾¤ËÂбþ¤¹¤ë¥æ¡¼¥¶¡¼ID¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"¸°%08lX: ¥æ¡¼¥¶¡¼id \"%s\" ¤Î¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "¸°%08lX: ¥æ¡¼¥¶¡¼id \"%s\" ¤Î¼«¸Ê½ð̾¤¬Ìµ¸ú¤Ç¤¹\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "¸°%08lX: ¸°¤ËÂбþ¤¹¤ëÉû¸°¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "¸°%08lX: ¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¸ø³«¸°¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "¸°%08lX: ̵¸ú¤ÊÉû¸°¤ÎÂбþ¤Ç¤¹\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "¸°%08lX: ̵¸ú¤ÊÉû¸°¤ÎÂбþ¤Ç¤¹\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "¸°%08lX: ¸°¤ËÂбþ¤¹¤ëÉû¸°¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "¸°%08lX: ̵¸ú¤ÊÉû¸°¤ÎÂбþ¤Ç¤¹\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "¸°%08lX: ̵¸ú¤ÊÉû¸°¤ÎÂбþ¤Ç¤¹\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "¸°%08lX: ¥¹¥­¥Ã¥×¤·¤¿¥æ¡¼¥¶¡¼ID '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "¸°%08lX: ¥¹¥­¥Ã¥×¤·¤¿Éû¸°\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "¸°%08lX: ½ñ½Ð¤·ÉԲĤʽð̾ (¥¯¥é¥¹%02x) - ¥¹¥­¥Ã¥×\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤¬¸í¤Ã¤ÆÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹ - ¥¹¥­¥Ã¥×\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "¸°%08lX: ̵¸ú¤ÊÇË´þ¾ÚÌÀ½ñ: %s - ¥¹¥­¥Ã¥×\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤¬¸í¤Ã¤ÆÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹ - ¥¹¥­¥Ã¥×\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "¸°%08lX: ½ÅÊ£¤·¤¿¥æ¡¼¥¶¡¼ID¤Î¸¡½Ð - Ê»¹ç\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr "·Ù¹ð: ¸°%08lX¤ÏÇË´þ¤µ¤ì¤¿¤è¤¦¤Ç¤¹: ÇË´þ¸°%08lX¤Î°ú¤­½Ð¤·\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr "·Ù¹ð: ¸°%08lX¤ÏÇË´þ¤µ¤ì¤¿¤è¤¦¤Ç¤¹: ÇË´þ¸°%08lX¤ÏÉԺߡ£\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "¸°%08lX: ÇË´þ¾ÚÌÀ½ñ¤ÎÄɲÃ\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "¸°%08lX: ľÀܸ°½ð̾¤òÄɲÃ\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[ÇË´þ]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[¼«¸Ê½ð̾]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "̵¸ú¤Ê½ð̾1¸Ä\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "̵¸ú¤Ê½ð̾%d¸Ä\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "¸°¤¬¤Ê¤¤¤¿¤á1¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "¸°¤¬¤Ê¤¤¤¿¤á%d¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "¥¨¥é¡¼¤Î¤¿¤á1¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "¥¨¥é¡¼¤Î¤¿¤á%d¸Ä¤Î½ð̾¤ò¸¡¾Ú¤·¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾¤Î¤Ê¤¤¥æ¡¼¥¶¡¼ID¤ò1¸Ä¸¡½Ð\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "Í­¸ú¤Ê¼«¸Ê½ð̾¤Î¤Ê¤¤¥æ¡¼¥¶¡¼ID¤ò%d¸Ä¸¡½Ð\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "¥æ¡¼¥¶¡¼ID \"%s\" ¤ÏÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "¤½¤ì¤Ç¤â¤³¤Î¸°¤Ë½ð̾¤·¤¿¤¤¤Ç¤¹¤«? (y/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " ½ð̾ÉÔǽ¡£\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "·Ù¹ð: `%s'¤Ï¶õ¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"\"%s\" ¤Ë¤¿¤¤¤¹¤ëº£¤Î¤¢¤Ê¤¿¤Î½ð̾¤Ï\n"
-"ÆâÉô½ð̾¤Ç¤¹¡£\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "½ñ½Ð¤·²Äǽ¤Ê½ð̾¤Ë³Ê¾å¤²¤·¤¿¤¤¤Ç¤¹¤«? (y/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"\"%s\" ¤Ë¤¿¤¤¤¹¤ëº£¤Î¤¢¤Ê¤¿¤Î½ð̾¤Ï\n"
-"ÆâÉô½ð̾¤Ç¤¹¡£\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "½ñ½Ð¤·²Äǽ¤Ê½ð̾¤Ë³Ê¾å¤²¤·¤¿¤¤¤Ç¤¹¤«? (y/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" ¤Ï¸°%08lX¤Ç¤â¤¦ÆâÉô½ð̾¤·¤Æ¤¢¤ê¤Þ¤¹\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" ¤Ï¸°%08lX¤Ç¤â¤¦½ð̾¤·¤Æ¤¢¤ê¤Þ¤¹\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "¸°%08lX¤Ç½ð̾¤¹¤ë¤â¤Î¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "¤³¤Î¸°¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "¤³¤Î¸°¤Ï%s¤Ç´ü¸Â¤¬ÀÚ¤ì¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Ʊ»þ¤Ë½ð̾¤â´ü¸ÂÀÚ¤ì¤Ë¤·¤¿¤¤¤Ç¤¹¤«? (Y/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏPGP 2.x¸°¤ÇOpenPGP½ð̾¤¬¤Ç¤­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "¤³¤Î¸°¤ÏPGP 2.x¤Ç»ÈÍѤǤ­¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"½ð̾¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¸°¤¬¼ÂºÝ¤Ë¾åµ­¤Î̾Á°¤Î¿Í¤Î¤â¤Î¤«¤É¤¦¤«¡¢¤É¤ÎÄøÅÙ\n"
-"Ãí°Õ¤·¤Æ¸¡¾Ú¤·¤Þ¤·¤¿¤«? Åú¤¬¤ï¤«¤é¤Ê¤±¤ì¤Ð\"0\"¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Åú¤¨¤Þ¤»¤ó¡£%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Á´Á³¡¢³Îǧ¤·¤Æ¤¤¤Þ¤»¤ó¡£%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) °ì±þ¡¢³Îǧ¤·¤Þ¤·¤¿¡£%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) ¤«¤Ê¤êÃí°Õ¤·¤Æ³Îǧ¤·¤Þ¤·¤¿¡£%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr "ËÜÅö¤Ë¤³¤Î¸°¤Ë¤¢¤Ê¤¿¤Î¸°¤Ç½ð̾¤·¤Æ¤è¤¤¤Ç¤¹¤«: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "¼«¸Ê½ð̾¤Î¤Ê¤¤¤»¤¤¤Ç¤·¤ç¤¦\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"½ð̾¤Ï½ñ½Ð¤·ÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"½ð̾¤ÏÇË´þÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"½ð̾¤Ï½ñ½Ð¤·ÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"½ð̾¤ÏÇË´þÉԲĤËÀßÄꤵ¤ì¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"¤³¤Î¸°¤ÏÁ´Á³¡¢³Îǧ¤·¤Æ¤¤¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"¤³¤Î¸°¤Ï°ì±þ¡¢³Îǧ¤·¤Þ¤·¤¿¡£\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"¤³¤Î¸°¤Ï¡¢¤«¤Ê¤êÃí°Õ¤·¤Æ³Îǧ¤·¤Þ¤·¤¿¡£\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "ËÜÅö¤Ë½ð̾¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "½ð̾¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "¤³¤Î¸°¤ÏÊݸ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "¼ç¸°¤ÎÈëÌ©Éôʬ¤¬ÆÀ¤é¤ì¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "¸°¤ÏÊݸ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "¤³¤Î¸°¤ÏÊÔ½¸¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"¤³¤ÎÈëÌ©¸°¤Î¿·¤·¤¤¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬ÉÔɬÍפʤ褦¤Ç¤¹¤¬¡¢\n"
-"¤ª¤½¤é¤¯¤½¤ì¤Ï¤í¤¯¤Ê¹Í¤¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "ËÜÅö¤Ë¼Â¹Ô¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "¸°¤Î½ð̾¤òÀµ¤·¤¤¾ì½ê¤Ë°ÜÆ°¤·¤Þ¤¹\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "¤³¤Î¥á¥Ë¥å¡¼¤ò½ªÎ»"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "Êݸ¤·¤Æ½ªÎ»"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "¤³¤Î¥Ø¥ë¥×¤ò¸«¤ë"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "»ØÌæ¤ò¸«¤ë"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "¸°¤È¥æ¡¼¥¶¡¼ID¤Î°ìÍ÷"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "¥æ¡¼¥¶¡¼ID N¤ÎÁªÂò"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "Éû¸°N¤ÎÁªÂò"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "½ð̾¤Î°ìÍ÷"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "¸°¤Ø½ð̾"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "¸°¤ØÆâÉôŪ¤Ë½ð̾"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤Ø½ð̾"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "ÇË´þ¤Ç¤­¤Ê¤¤¤è¤¦¸°¤ØÆâÉôŪ¤Ë½ð̾"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "¥æ¡¼¥¶¡¼ID¤ÎÄɲÃ"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "¥Õ¥©¥ÈID¤ÎÄɲÃ"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "¥æ¡¼¥¶¡¼ID¤Îºï½ü"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "Éû¸°¤ÎÄɲÃ"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "Éû¸°¤Îºï½ü"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "Éû¸°¤ÎÄɲÃ"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "½ð̾¤Îºï½ü"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "Í­¸ú´ü¸Â¤ÎÊѹ¹"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primary"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "¥æ¡¼¥¶¡¼ID¤ò¼ç¤Ë¤¹¤ë"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "ÈëÌ©¸°¤È¸ø³«¸°¤Î°ìÍ÷¤ÎÀÚÂؤ¨"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "Áª¹¥¤Î°ìÍ÷ (¥¨¥­¥¹¥Ñ¡¼¥È)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "Áª¹¥¤Î°ìÍ÷ (¾éĹ)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "Áª¹¥¤Î°ìÍ÷¤òÀßÄê"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "Áª¹¥¤Î°ìÍ÷¤ò¹¹¿·"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎÊѹ¹"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "½êÍ­¼Ô¿®ÍѤÎÊѹ¹"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "½ð̾¤ÎÇË´þ"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "Éû¸°¤ÎÇË´þ"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "¸°¤Î»ÈÍѤò¶Ø»ß¤¹¤ë"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "¸°¤Î»ÈÍѤòµö²Ä¤¹¤ë"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "¥Õ¥©¥ÈID¤òɽ¼¨"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "¤½¤ì¤Ï¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "ÈëÌ©¸°¥Ö¥í¥Ã¥¯`%s'¤ÎÆɹþ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "ÈëÌ©¸°¤¬»ÈÍѤǤ­¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "¥³¥Þ¥ó¥É> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "¤³¤Î¼Â¹Ô¤Ë¤ÏÈëÌ©¸°¤¬¤¤¤ê¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "¤Þ¤º¡Ötoggle¡×¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "¸°¤ÏÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "ËÜÅö¤ËÁ´¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "¥³¥Ä: ¤Þ¤º½ð̾¤¹¤ë¥æ¡¼¥¶¡¼ID¤òÁªÂò¤·¤Þ¤¹\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "%s¥â¡¼¥É¤Ç¤³¤Î¥³¥Þ¥ó¥É¤òÍѤ¤¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "¥æ¡¼¥¶¡¼ID¤ò¾¯¤Ê¤¯¤È¤â¤Ò¤È¤ÄÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "ºÇ¸å¤Î¥æ¡¼¥¶¡¼ID¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "ÁªÂò¤·¤¿Á´¥æ¡¼¥¶¡¼ID¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "¤³¤Î¥æ¡¼¥¶¡¼ID¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "¸°¤ò¾¯¤Ê¤¯¤È¤â¤Ò¤È¤ÄÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "ÁªÂò¤·¤¿¸°¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "¤³¤Î¸°¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "ÁªÂò¤·¤¿¸°¤òËÜÅö¤ËÇË´þ¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "¤³¤Î¸°¤òËÜÅö¤ËÇË´þ¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "ÁªÂò¤·¤¿¥æ¡¼¥¶¡¼ID¤ÎÁª¹¥¤òËÜÅö¤Ë¹¹¿·¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Áª¹¥¤òËÜÅö¤Ë¹¹¿·¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Êѹ¹¤òÊݸ¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Êݸ¤»¤º¤Ë½ªÎ»¤·¤Þ¤¹¤«? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "¹¹¿·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "ÈëÌ©¸°¤Î¹¹¿·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "¸°¤Ï̵Êѹ¹¤Ê¤Î¤Ç¹¹¿·¤Ï¤¤¤ê¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "̵¸ú¤Ê¥³¥Þ¥ó¥É (¡Öhelp¡×¤ò»²¾È)\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "¤³¤Î¸°¤Ï%s¸°%s%s¤Ë¤è¤Ã¤ÆÇË´þ¤µ¤ì¤¿¤è¤¦¤Ç¤¹\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (¥Ç¥ê¥±¡¼¥È)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX ºîÀ®: %s ´ü¸Â: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " trust: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "¤³¤Î¸°¤Ï»ÈÍѶػߤËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! Éû¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- ¤Ç¤Ã¤Á¤¢¤²¤ÎÇË´þ¤òȯ¸«\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? ÇË´þ³Îǧ¾ã³²: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"¥×¥í¥°¥é¥à¤òºÆµ¯Æ°¤¹¤ë¤Þ¤Ç¡¢É½¼¨¤µ¤ì¤¿¸°¤ÎÍ­¸úÀ­¤ÏÀµ¤·¤¯¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡¢\n"
-"¤È¤¤¤¦¤³¤È¤òǰƬ¤ËÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"·Ù¹ð: ¤³¤ì¤ÏPGP2·Á¼°¤Î¸°¤Ç¤¹¡£¥Õ¥©¥ÈID¤ÎÄɲäǡ¢°ìÉô¤ÎÈǤÎPGP¤Ï¡¢\n"
-" ¤³¤Î¸°¤òµñÈݤ¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "¤½¤ì¤Ç¤âÄɲä·¤¿¤¤¤Ç¤¹¤«? (y/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "PGP2·Á¼°¤Î¸°¤Ë¤Ï¥Õ¥©¥ÈID¤òÄɲäǤ­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "¤³¤ÎÀµ¤·¤¤½ð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "¤³¤Î̵¸ú¤Ê½ð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "¤³¤Î̤ÃΤνð̾¤òºï½ü¤·¤Þ¤¹¤«? (y/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "¤³¤Î¼«¸Ê½ð̾¤òËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? (y/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d¸Ä¤Î½ð̾¤òºï½ü¤·¤Þ¤·¤¿¡£\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d¸Ä¤Î½ð̾¤òºï½ü¤·¤Þ¤·¤¿¡£\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "²¿¤âºï½ü¤·¤Æ¤¤¤Þ¤»¤ó¡£\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "¸°¤ÎŤµ¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "ÈëÌ©¸°¤ÎÁªÂò¤ò¤È¤¤¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "¹â¡¹1¸Ä¤ÎÉû¸°¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Éû¸°¤ÎÍ­¸ú´ü¸Â¤òÊѹ¹¤·¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "¼ç¸°¤ÎÍ­¸ú´ü¸Â¤òÊѹ¹¤·¤Þ¤¹¡£\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "v3¸°¤ÎÍ­¸ú´ü¸Â¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "ÈëÌ©¸°ÎؤËÂбþ¤¹¤ë½ð̾¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "¥æ¡¼¥¶¡¼ID¤ò¤­¤Ã¤«¤ê¤Ò¤È¤ÄÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "¸°%08lX: ¥æ¡¼¥¶¡¼id \"%s\" ¤Î¼«¸Ê½ð̾¤¬Ìµ¸ú¤Ç¤¹\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "%dÈ֤Υ桼¥¶¡¼ID¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "%dÈÖ¤ÎÉû¸°¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "¥æ¡¼¥¶¡¼ID: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"¤¢¤Ê¤¿¤Î¸°%08lX¤Ç%s¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"¤¢¤Ê¤¿¤Î¸°%08lX¤Ç%s¤ËÆâÉôŪ¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "¤³¤Î½ð̾¤Ï%s¤Ç´ü¸ÂÀÚ¤ì¤Ç¤¹¡£\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "¤½¤ì¤Ç¤âÇË´þ¤·¤¿¤¤¤Ç¤¹¤«? (y/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "¤³¤Î½ð̾¤Ë¤¿¤¤¤¹¤ëÇË´þ¾ÚÌÀ½ñ¤òºî¤ê¤Þ¤¹¤«? (y/N) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "¤³¤ì¤é¤Î¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤·¤Þ¤·¤¿:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " %08lX¤Ç%s%s%s¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " %08lX¤Ç%s¤ËÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "¤³¤ì¤é¤Î½ð̾¤òÇË´þ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " %08lX¤Ç%s%s¤Ë½ð̾¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (½ñ½Ð¤·ÉÔ²Ä)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "ÇË´þ¾ÚÌÀ½ñ¤òËÜÅö¤Ëºî¤ê¤Þ¤¹¤«? (y/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "ÈëÌ©¸°¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr "%s¤ò¥µ¥¤¥º%ld¤Î¸°0x%08lX (uid %d) ¤Î¥Õ¥©¥ÈID¤È¤·¤Æɽ¼¨\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "½ð̾¥Ý¥ê¥·¡¼: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "½ð̾¥Ý¥ê¥·¡¼: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "·Ù¹ð: ̵¸ú¤ÊÃí¼á¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "½ð̾Ãí¼á: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "½ð̾Ãí¼á: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "¿Í¤Ë¤ÏÆɤá¤Þ¤»¤ó"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "¸°ÎØ"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [Í­¸ú´ü¸Â: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "¸°¤È»ØÌæ¤Î°ìÍ÷"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " »ØÌæ ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " »ØÌæ ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " »ØÌæ ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " »ØÌæ ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "̵¸ú¤Ê¥Ï¥Ã¥·¥å¡¦¥¢¥ë¥´¥ê¥º¥à`%s'¤Ç¤¹\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "̤ÃΤΥ¢¥ë¥´¥ê¥º¥à¤Ë¤è¤ë°Å¹æ %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "¸ø³«¸°¤Ï%08lX¤Ç¤¹\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "¸ø³«¸°¤Ç°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿: Àµ¤·¤¤DEK¤Ç¤¹\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "%u-¥Ó¥Ã¥È%s¸°, ID %08lX¤Ç°Å¹æ²½%s¤Ë¤Ç¤­¤Þ¤·¤¿\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "%s¸°, ID %08lX¤Ç°Å¹æ²½¤µ¤ì¤Þ¤·¤¿\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "¸ø³«¸°¤ÎÉü¹æ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "%s°Å¹æ²½¤µ¤ì¤¿¥Ç¡¼¥¿¤ò²¾Äê\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "IDEA°Å¹æ¤ÏÍøÍÑÉÔǽ¤Ê¤Î¤Ç¡¢³ÚŷŪ¤Ç¤¹¤¬%s¤ÇÂåÍѤ·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "Éü¹æ¤ËÀ®¸ù\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "·Ù¹ð: °Å¹æ²½¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤Ï²þã⤵¤ì¤Æ¤¤¤Þ¤¹!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "Éü¹æ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "Ãí°Õ: Á÷¿®¼Ô¤Ï¡ÖÆâ½ï¤Ë¤¹¤ë¡×¤è¤¦¤Ëµá¤á¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "¸µ¤Î¥Õ¥¡¥¤¥ë̾='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "ÆÈΩÇË´þ¡£¡Ögpg --import¡×¤ò»È¤Ã¤ÆŬÍѤ·¤Æ¤¯¤À¤µ¤¤\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Ãí¼á: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "¥Ý¥ê¥·¡¼: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "½ð̾¤Î¸¡¾Ú¤ò¾Êά\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "¤³¤Î¿½Å½ð̾¤Ï¼è¤ê°·¤¨¤Þ¤»¤ó\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "%.*s ¤Î%s¸°ID %08lX¤Ë¤è¤ë½ð̾\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "ÉÔÀµ¤Ê ½ð̾: \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "´ü¸ÂÀÚ¤ì¤Î½ð̾: \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Àµ¤·¤¤½ð̾: \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[ÉÔ³ÎÄê]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " ÊÌ̾ \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "½ð̾¤ò¸¡¾Ú¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "ʬΥ½ð̾¤Ç¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "¥¯¥é¥¹0x%02x¤ÎÆÈΩ½ð̾\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "¸Å¤¤·Á¼° (PGP 2.x) ¤Î½ð̾\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "proc_tree() ¤ÎÃæ¤Ë̵¸ú¤Ê¥Ñ¥±¥Ã¥È¤ò¸¡½Ð¤·¤Þ¤·¤¿\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "¥³¥¢¡¦¥À¥ó¥×¤ò̵¸ú¤Ë¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "¼Â¸³Ãæ¤Î¥¢¥ë¥´¥ê¥º¥à¤Ï»ÈÍѤ¹¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"¤³¤Î°Å¹æ¥¢¥ë¥´¥ê¥º¥à¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
-"¤â¤Ã¤Èɸ½àŪ¤Ê¥¢¥ë¥´¥ê¥º¥à¤òÍѤ¤¤Æ¤¯¤À¤µ¤¤!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "IDEA°Å¹æ¤Î¥×¥é¥°¥¤¥ó¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr "¾ÜºÙ¤Ï¡¢http://www.gnupg.org/why-not-idea.html¤ò¤´Í÷¤¯¤À¤µ¤¤\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "·Ù¹ð: %s¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤ë¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "·Ù¹ð: %s¤ÏÈ¿ÂФµ¤ì¤Æ¤¤¤ë¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "\"--keyserver-options %s\"¤òÂå¤ï¤ê¤Ë»È¤Ã¤Æ¤¯¤À¤µ¤¤\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "¸ø³«¸°¤Î¥¢¥ë¥´¥ê¥º¥à%d¤Ï»ÈÍѤǤ­¤Þ¤»¤ó\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "¥¿¥¤¥×%d¤Î²¼°Ì¥Ñ¥±¥Ã¥È¤Ë¥¯¥ê¥Æ¥£¥«¥ë¡¦¥Ó¥Ã¥È¤òȯ¸«\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "¤³¤Î¥»¥Ã¥·¥ç¥ó¤Çgpg¥¨¡¼¥¸¥§¥ó¥È¤Ï̵¸ú¤Ç¤¹\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "¥¨¡¼¥¸¥§¥ó¥È¤Î¥¯¥é¥¤¥¢¥ó¥Èpid¤òÀßÄê¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "¥¨¡¼¥¸¥§¥ó¥ÈÍѤΥµ¡¼¥Ð¡¼ÆɽФ·FD¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "¥¨¡¼¥¸¥§¥ó¥ÈÍѤΥµ¡¼¥Ð¡¼½ñ¹þ¤ßFD¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "GPG_AGENT_INFO´Ä¶­ÊÑ¿ô¤Î½ñ¼°¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "gpg-agent¥×¥í¥È¥³¥ë¡¦¥Ð¡¼¥¸¥ç¥ó%d¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "`%s'¤ØÀܳ¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "gpg-agent¤È¤ÎÄÌ¿®¾ã³²\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "¥¨¡¼¥¸¥§¥ó¥È¤Ë¾ã³²: ¥¨¡¼¥¸¥§¥ó¥ÈÍøÍѶػß\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (¼ç¸°ID %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"¼¡¤Î¥æ¡¼¥¶¡¼¤ÎÈëÌ©¸°¤Î¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë¤Ë¤Ï¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¤¤ê¤Þ¤¹:\n"
-"\"%.*s\"\n"
-"%u¥Ó¥Ã¥È%s¸°, ID %08lXºîÀ®ÆüÉÕ¤Ï%s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎÏ\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òºÆÆþÎÏ\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬Ä¹²á¤®¤Þ¤¹\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "¥¨¡¼¥¸¥§¥ó¥È¤«¤é¤Î̵¸ú¤Ê±þÅú\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "¥æ¡¼¥¶¡¼¤Ë¤è¤ë¼è¾Ã¤·\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "¥¨¡¼¥¸¥§¥ó¥È¤Ë¾ã³²: ¥¨¡¼¥¸¥§¥ó¥È¤¬0x%lx¤òÊÖµÑ\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"¼¡¤Î¥æ¡¼¥¶¡¼¤ÎÈëÌ©¸°¤Î¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë¤Ë¤Ï\n"
-"¥Ñ¥¹¥Õ¥ì¡¼¥º¤¬¤¤¤ê¤Þ¤¹: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u¥Ó¥Ã¥È%s¸°, ID %08lXºîÀ®ÆüÉÕ¤Ï%s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¥Ñ¥¹¥ï¡¼¥É¤ÎÌä¹ç¤»¤¬¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎÏ: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òºÆÆþÎÏ: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"¥Ç¡¼¥¿¤ÏÊݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
-"Êݸ¤¹¤ë¤Ë¤Ï¡Ö--output¡×¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "`%s'¤ÎºîÀ®¥¨¥é¡¼: %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "ʬΥ½ð̾¡£\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "¥Ç¡¼¥¿¡¦¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÆþÎÏ: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "ɸ½àÆþÎϤè¤êÆɹþ¤ßÃæ ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿`%s'¤¬³«¤±¤Þ¤»¤ó\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "ƿ̾¤Î¼õ¿®¼ÔÍѤǤ¹¡£ÈëÌ©¸°%08lX¤òÍѤ¤¤Þ¤¹ ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "½ªÎ»¡£Æ¿Ì¾¤Î¼õ¿®¼ÔÍѤǤ¹¡£\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "DEK¤Ë¤è¤ëµì¼°¤Î°Å¹æ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "Êݸ¥ë¥´¥ê¥º¥à%d%s¤Ï̤ÃΤ«»ÈÍÑÉԲĤǤ¹\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "Ãí°Õ: °Å¹æ¥¢¥ë¥´¥ê¥º¥à%d¤ÏÍ¥Àè½ç¤ËÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "Ãí°Õ: ÈëÌ©¸°%08lX¤Ï%s¤Ç´ü¸ÂÀÚ¤ì¤Ç¤¹\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "¸°%08lX: ¸°¤ÏÇË´þºÑ¤ß¤Ç¤¹!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "¸°%08lX¤òHKP¸°¥µ¡¼¥Ð¡¼%s¤ËÍ×µá\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤«¤é¸°¤òÆɤ߹þ¤á¤Þ¤»¤ó: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "`%s'¤Ø¤ÎÁ÷¿®¥¨¥é¡¼: %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "`%s'¤Ø¤ÎÁ÷¿®¤ËÀ®¸ù (¾õÂÖ=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "`%s'¤Ø¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: ¾õÂÖ=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "\"%s\"¤òHKP¥µ¡¼¥Ð¡¼%s¤«¤é¸¡º÷\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "¸°¥µ¡¼¥Ð¡¼¤ò¸¡º÷¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "ÈëÌ©Éôʬ¤¬ÆÀ¤é¤ì¤Þ¤»¤ó\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "Êݸ¥ë¥´¥ê¥º¥à%d%s¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "̵¸ú¤Ê¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ç¤¹¡£ºÆÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "·Ù¹ð: ¼å¤¤¸°¤ò¸¡½Ð¤·¤Þ¤·¤¿¡£¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr "È¿ÂФµ¤ì¤¿16¥Ó¥Ã¥È¤Î¥Á¥§¥Ã¥¯¥µ¥à¤òÈëÌ©¸°¤ÎÊݸî¤ËÀ¸À®\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"¤³¤ì¤ÏPGP¤ÎÀ¸À®¤·¤¿ElGamal¸°¤Ç¤¹¡£\n"
-"½ð̾¤ËÍѤ¤¤ë¤Ë¤Ï¡¢¤³¤Î¸°¤Ï°ÂÁ´¤Ç¤Ï ¤Ê¤¤ ¤Ç¤¹!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "¸ø³«¸°¤Ï½ð̾¤è¤ê¤â%luÉøå¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "¸ø³«¸°¤Ï½ð̾¤è¤ê¤â%luÉøå¤ËºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr "¸°¤Ï%luÉÃ̤Íè¤Ë¤Ç¤­¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr "¸°¤Ï%luÉÃ̤Íè¤Ë¤Ç¤­¤Þ¤·¤¿ (»þ´Öι¹Ô¤«»þ·×¤Î¤¯¤ë¤¤¤Ç¤·¤ç¤¦)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "Ãí°Õ: ½ð̾¸°%08lX¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹%s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "̤ÃΤΥ¯¥ê¥Æ¥£¥«¥ë¡¦¥Ó¥Ã¥È¤¬¤¢¤Ã¤¿¤Î¤Ç¡¢½ð̾¤ÏÉÔÀµ¤À¤È¤ß¤Ê¤·¤Þ¤¹\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr "·Ù¹ð: ¥Ý¥ê¥·¡¼url¤ò%%³ÈÄ¥ÉÔǽ (Â礭¤¹¤®)¡£Ì¤³ÈÄ¥¤ò»ÈÍÑ¡£\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr "·Ù¹ð: ¥Ý¥ê¥·¡¼url¤ò%%³ÈÄ¥ÉÔǽ (Â礭¤¹¤®)¡£Ì¤³ÈÄ¥¤ò»ÈÍÑ¡£\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "ºîÀ®¤µ¤ì¤¿½ð̾¤Î¸¡¾Ú¤Ë¼ºÇÔ: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s½ð̾¡£½ð̾¼Ô: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "·Ù¹ð: `%s'¤Ï¶õ¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏPGP 2.x·Á¼°¤Î¸°¤Ç½ð̾¤Ç¤­¤ë¤À¤±¤Ç¤¹\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "%s¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "Ãí°Õ: °Å¹æ¥¢¥ë¥´¥ê¥º¥à%d¤ÏÍ¥Àè½ç¤ËÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "½ð̾:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "--pgp2¥â¡¼¥É¤Ç¤ÏPGP 2.x·Á¼°¤Î¸°¤Ç¥¯¥ê¥¢½ð̾¤·¤«¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "%s°Å¹æ²½¤ò»ÈÍѤ·¤Þ¤¹\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "%dʸ»ú°Ê¾å¤ÎŤµ¤Î¥Æ¥­¥¹¥È¹Ô¤Ï»ÈÍѤǤ­¤Þ¤»¤ó\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "ÆþÎϹԤÎŤµ¤¬%dʸ»ú¤òĶ¤¨¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥ì¥³¡¼¥É%lu: ¥·¡¼¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹ ¥ì¥³¡¼¥É%lu: ½ñ¹þ¤ß¤Ë¼ºÇÔ (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬Â礭¤¹¤®¤Þ¤¹\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: ¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: ¼­½ñ¤¬¤¢¤ê¤Þ¤»¤ó!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: ¥í¥Ã¥¯¤¬¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: ¥í¥Ã¥¯¤¬¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: ºîÀ®¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: ̵¸ú¤Ê¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤òºîÀ®\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤¬¤Ç¤­¤Þ¤·¤¿\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: ̵¸ú¤Ê¿®Íѥǡ¼¥¿¥Ù¡¼¥¹\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: ¥Ï¥Ã¥·¥åɽ¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤Î¹¹¿·¥¨¥é¡¼: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤ÎÆɽФ·¥¨¥é¡¼: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: ¥Ð¡¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: ¥·¡¼¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: ÆɽФ·¤Ë¼ºÇÔ (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: ¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¡¦¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: ¥ì¥³¡¼¥ÉÈÖ¹æ%luÈ֤ΥС¼¥¸¥ç¥ó¡¦¥ì¥³¡¼¥É\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë¡¦¥Ð¡¼¥¸¥ç¥ó%d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: ¶õ¤­¥ì¥³¡¼¥É¤ÎÆɽФ·¥¨¥é¡¼: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¡¼¡¦¥ì¥³¡¼¥É¤Î½ñ¹þ¤ß¥¨¥é¡¼: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: ¥ì¥³¡¼¥É¤Î½é´ü²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: ¥ì¥³¡¼¥É¤ÎÄɲä˼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡£¡Ögpg --fix-trustdb¡×¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' ¤ÏÀµ¤·¤¤Âç·¿¸°ID¤Ç¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "¸°%08lX: ¿®ÍѤ¹¤ë¸°¤È¤·¤Æ¼õÍý¤·¤Þ¤·¤¿\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "¸°%08lX¤¬¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤ËÊ£¿ô¤¢¤ê¤Þ¤¹\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "¸° %08lX: ¿®ÍѤ¹¤ë¸°¤Î¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó - ¥¹¥­¥Ã¥×\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "¿®Íѥ쥳¡¼¥É%lu, ¥ê¥¯¥¨¥¹¥È¡¦¥¿¥¤¥×%d: ÆɽФ·¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "¿®Íѥ쥳¡¼¥É%lu¤¬Í׵ᤵ¤ì¤¿·¿%d¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "¿®Íѥ쥳¡¼¥É%lu, ¥¿¥¤¥×%d: ½ñ¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹: Ʊ´ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¸¡¾Ú¤ÏÉÔÍפǤ¹\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¼¡²ó¤Î¸¡¾Ú¤Ï%s¤Ç¤¹\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "¿®Íѥǡ¼¥¿¥Ù¡¼¥¹¤Î¸¡¾Ú\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "¸ø³«¸°%08lX¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "ÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë¸°%08lX¤Î¸ø³«¸°¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr "¿¼¤µ%d¤Ç¸¡¾Ú¡¢½ð̾ºÑ¤ß=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"½ð̾¤ò¸¡¾Ú¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£½ð̾¥Õ¥¡¥¤¥ë\n"
-"(.sig¤ä.asc)¤¬¥³¥Þ¥ó¥É¹Ô¤ÎºÇ½é¤Ç¤Ê¤±¤ì¤Ð\n"
-"¤Ê¤é¤Ê¤¤¤³¤È¤òǰƬ¤Ë¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "ÆþÎϤÎ%u¹ÔÌܤ¬Ä¹¤¹¤®¤ë¤«¡¢LF¤¬¤Ê¤¤¤è¤¦¤Ç¤¹\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"¤ä¤Ð¤¯¤Æ¤â¤¤¤¤¥Õ¥é¥°¤¬¸°¤Ë¤ÏÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
-"µ¶ÊªÍð¿ôÀ¸À®»Ò¤È¤Ï¤¤¤Ã¤·¤ç¤Ë»È¤¨¤Þ¤»¤ó!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "`%s'¤ò¥¹¥­¥Ã¥×: ½ÅÊ£\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "`%s'¤ò¥¹¥­¥Ã¥×: %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "¥¹¥­¥Ã¥×: ÈëÌ©¸°¤Ï´û¤Ë¤¢¤ê¤Þ¤¹\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"`%s'¤ò¥¹¥­¥Ã¥×: ¤³¤ì¤ÏPGP¤ÎÀ¸À®¤·¤¿ElGamal¸°¤Ç¤¹¡£\n"
-"½ð̾¤ËÍѤ¤¤ë¤Ë¤Ï¡¢°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "¥Õ¥¡¥¤¥ë`%s'¤Ï´û¤Ë¸ºß¤·¤Þ¤¹¡£"
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "¾å½ñ¤­¤·¤Þ¤¹¤« (y/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: ̤ÃΤγÈÄ¥»Ò\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "ɸ½à½ÐÎϤ˽ñ¤­½Ð¤·¤Þ¤¹\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "½ð̾¤µ¤ì¤¿¥Ç¡¼¥¿¤¬`%s'¤Ë¤¢¤ë¤ÈÁÛÄꤷ¤Þ¤¹\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: ¿·¤·¤¤¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë¤¬¤Ç¤­¤Þ¤·¤¿\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: ¼­½ñ¤¬¤Ç¤­¤Þ¤»¤ó: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: ¼­½ñ¤¬¤Ç¤­¤Þ¤·¤¿\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr "·Ù¹ð: ¥á¥Ã¥»¡¼¥¸¤ÏÂоΰŹæË¡¤Î¼å¤¤¸°¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "°Å¹æ¥Ñ¥±¥Ã¥È¤Î¼è¤ê°·¤¤¤Ç¾ã³²\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "¼å¤¤¸°¤¬¤Ç¤­¤Þ¤·¤¿ - ºÆ¼Â¹Ô\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr "ÂоΰŹæË¡¤Î¼å¤¤¸°¤ò²óÈò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£%d²ó»î¤ß¤Þ¤·¤¿!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA¤Ç¤Ï160¥Ó¥Ã¥È¤Î¥Ï¥Ã¥·¥å¡¦¥¢¥ë¥´¥ê¥º¥à¤Î»ÈÍѤ¬É¬ÍפǤ¹\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "¡Ö--yes¡×¤Î¤Ê¤¤¥Ð¥Ã¥Á¥â¡¼¥É¤Ç¤Ï¤Ç¤­¤Þ¤»¤ó\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "¤³¤Î¸°¤ò¸°Îؤ«¤éºï½ü¤·¤Þ¤¹¤«? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "¤³¤ì¤ÏÈëÌ©¸°¤Ç¤¹! ËÜÅö¤Ëºï½ü¤·¤Þ¤¹¤«? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "¸°¥Ö¥í¥Ã¥¯¤Îºï½ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "½êÍ­¼Ô¿®ÍѾðÊó¤ò¥¯¥ê¥¢¤·¤Þ¤·¤¿\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "¤³¤Î¸ø³«¸°¤Ë¤¿¤¤¤¹¤ëÈëÌ©¸° \"%s\" ¤¬¤¢¤ê¤Þ¤¹!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "¤Þ¤º¡Ö--delete-secret-keys¡×¥ª¥×¥·¥ç¥ó¤Ç¤³¤ì¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"¤³¤ÎÃͤÎÀßÄê¤Ï¡¢¤¢¤Ê¤¿¼¡Âè¤Ç¤¹¡£¤³¤ÎÃͤϡ¢Âè»°¼Ô¤Ë·è¤·\n"
-"¤ÆÄ󶡤µ¤ì¤Þ¤»¤ó¡£¤³¤ì¤Ï¡¢web-of-trust ¤Î¼ÂÁõ¤ËɬÍפǡ¢\n"
-"(°ÅÌÛŪ¤Ë¤Ç¤­¤¿) web-of-certificates ¤È¤Ï̵´Ø·¸¤Ç¤¹¡£"
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Web-of-Trust¤ò¹½ÃÛ¤¹¤ë¤¿¤áGnuPG¤Ï¡¢¤É¤Î¸°¤òÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë\n"
-"¤Î¤«¤òÃΤëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤½¤ì¤Ï¤Õ¤Ä¤¦¡¢ÈëÌ©¸°¤Ë¥¢¥¯¥»¥¹¤Ç¤­\n"
-"¤ë¸°¤Î¤³¤È¤Ç¤¹¡£¤³¤Î¸°¤òÀäÂÐŪ¤Ë¿®ÍѤ¹¤ë¤³¤È¤Ë¤¹¤ë¤Ê¤é¡¢\n"
-"\"yes\"¤È¤ª¤³¤¿¤¨¤¯¤À¤µ¤¤¡£\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "¤³¤ÎÇË´þ¤µ¤ì¤¿¸°¤ò»È¤¤¤¿¤¯¤Ê¤±¤ì¤Ð¡¢¡Öno¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "¤³¤Î¿®ÍѤǤ­¤Ê¤¤¸°¤ò»È¤¤¤¿¤¯¤Ê¤±¤ì¤Ð¡¢¡Öno¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ëÁê¼ê¥¢¥É¥ì¥¹¤Î¥æ¡¼¥¶¡¼ID¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"»ÈÍѤ¹¤ë¥¢¥ë¥´¥ê¥º¥à¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-"\n"
-"DSA (ÊÌ̾DSS) ¤Ï¡¢½ð̾¤Ë¤Î¤ßÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ëÅŻҽð̾¥¢¥ë¥´¥ê\n"
-"¥º¥à¤Ç¤¹¡£DSA½ð̾¤ÏElGamalË¡¤è¤ê¤â¹â®¤Ë¸¡¾Ú¤Ç¤­¤ë¤Î¤Ç¡¢¤³¤ì¤Ï\n"
-"¿ä¾©¤¹¤ë¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£\n"
-"\n"
-"ElGamal¤Ï¡¢½ð̾¤È°Å¹æ²½¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¥¢¥ë¥´¥ê¥º¥à¤Ç¤¹¡£\n"
-"OpenPGP¤Ç¤Ï¡¢¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤Î¡Ö°Å¹æ²½¤Î¤ß¡×¤È¡Ö½ð̾+°Å¹æ²½¡×\n"
-"¤Î2¤Ä¤ÎÍÑË¡¤ò¶èÊ̤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼ÂºÝ¤Ë¤ÏƱ¤¸¤Ç¤¹¡£¤·¤«¤·¡¢½ð̾ÍÑ\n"
-"¤Î°ÂÁ´¤Ê¸°¤òºî¤ë¤Ë¤Ï°ìÉô¤ÎÊÑ¿ô¤òÆÃÊ̤ÊÊýË¡¤ÇÁªÂò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê\n"
-"¤Þ¤»¤ó¡£¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¤½¤ì¤¬²Äǽ¤Ç¤¹¤¬¡¢Â¾¤ÎOpenPGP¤Î¼ÂÁõ¤Ç\n"
-"¤Ï¡¢¡Ö½ð̾+°Å¹æ²½¡×¤ÎÍÑË¡¤ò²ò¼á¤·¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£\n"
-"\n"
-"ºÇ½é¤Î¸°(¼ç¸°)¤Ï¡¢½ð̾¤Ë»ÈÍѤǤ­¤ë¸°¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤ì¤¬\n"
-"¤³¤Î¥á¥Ë¥å¡¼¤Ë¡Ö°Å¹æ²½¤Î¤ß¡×¤ÎElGamal¸°¤Î¤Ê¤¤Íýͳ¤Ç¤¹¡£"
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"¤³¤ì¤é¤Î¸°¤ÏRFC2440¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¿ä¾©¤·¤Þ¤»¤ó¡£\n"
-"¤Ê¤¼¤Ê¤é¡¢¤³¤ì¤é¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥×¥í¥°¥é¥à¤¬¤¢¤ê¡¢\n"
-"ºîÀ®¤µ¤ì¤ë½ð̾¤ÏÈó¾ï¤ËŤ¯¤Æ¡¢¸¡¾Ú¤Ë¤â»þ´Ö¤¬¤«¤«¤ë¤¿¤á¤Ç¤¹¡£"
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "¸°¤ÎŤµ¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "¡Öyes¡×¤«¡Öno¡×¤ÇÅú¤¨¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"¥×¥í¥ó¥×¥È¤Ë¼¨¤¹½ñ¼°¤ÇÃͤòÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n"
-"ISO¤ÎÆüÉդνñ¼° (YYYY-MM-DD) ¤Ç¤âÆþÎϤǤ­¤Þ¤¹¤¬¡¢Àµ¤·¤¤¥¨¥é¡¼¤Ï\n"
-"ɽ¼¨¤µ¤ì¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤½¤ÎÂå¤ê¡¢¥·¥¹¥Æ¥à¤ÏÆþÎÏÃͤò´ü´Ö¤ØÊÑ´¹¤¹¤ë\n"
-"¤è¤¦¤Ë»î¤ß¤Þ¤¹¡£"
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "¸°¥Û¥ë¥À¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "¥ª¥×¥·¥ç¥ó¤Ç¤¹¤¬¡¢ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤òÆþÎϤ¹¤ë¤³¤È¤ò¶¯¤¯¿ä¾©¤·¤Þ¤¹"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "¥ª¥×¥·¥ç¥ó¤Î¥³¥á¥ó¥È¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N ̾Á°¤ÎÊѹ¹¡£\n"
-"C ¥³¥á¥ó¥È¤ÎÊѹ¹¡£\n"
-"E ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤ÎÊѹ¹¡£\n"
-"O ¸°¤ÎÀ¸À®¤Î³¹Ô¡£\n"
-"Q ¸°¤ÎÀ¸À®¤ÎÃæ»ß¡£"
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Éû¸°¤òÀ¸À®¤¹¤ë¾ì¹ç¡¢¡Öyes¡×(¤Þ¤¿¤Ï¡¢Ã±¤Ë¡Öy¡×) ¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"¸°¤Î¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤¹¤ë¤È¤­¤Ï¡¢¸°¤Î¥æ¡¼¥¶¡¼ID¤Î̾Á°¤Î¿Í¤¬¸°\n"
-"¤ò½êÍ­¤·¤Æ¤¤¤ë¡¢¤È¤¤¤¦¤³¤È¤ò³Îǧ¤¹¤ë¤Ù¤­¤Ç¤¹¡£¤¢¤Ê¤¿¤¬¤É¤ÎÄø\n"
-"ÅÙÃí°Õ¿¼¤¯³Îǧ¤·¤¿¤Î¤«¤ò¾¤Î¿Í¤¿¤Á¤ËÃΤ餻¤ë¤È¡¢ÊØÍø¤Ç¤¹¡£\n"
-"\n"
-"\"0\" ¤Ï¡¢¤¢¤Ê¤¿¤¬¤É¤ÎÄøÅÙÃí°Õ¿¼¤¯³Îǧ¤·¤¿¤Î¤«¤ò¡¢Æä˼çÄ¥¤·¤Ê\n"
-" ¤¤¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£\n"
-"\n"
-"\"1\" ¤Ï¡¢¸°¤Î½êÍ­¼Ô¤È¼çÄ¥¤·¤Æ¤¤¤ë¿Í¤¬¤½¤Î¸°¤ò½êÍ­¤·¤Æ¤¤¤ë¡¢¤È\n"
-" ¤¢¤Ê¤¿¤Ï¿®¤¸¤Æ¤Ï¤¤¤ë¤â¤Î¤Î¡¢³Îǧ¤ÏÁ´Á³¤·¤Æ¤Ê¤«¤Ã¤¿¡¢¤Þ¤¿\n"
-" ¤Ï¤Ç¤­¤Ê¤«¤Ã¤¿¡¢¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£¤³¤ì¤Ï¡¢¥Ú¥ó¥Í¡¼¥à¤ò»È¤¦\n"
-" ¥æ¡¼¥¶¡¼¤Î¸°¤Ë½ð̾¤¹¤ë¾ì¹ç¤Î¡¢¡Ö¥Ú¥ë¥½¥Ê¡×³Îǧ¤ËÊØÍø¤Ç¤¹¡£\n"
-"\n"
-"\"2\" ¤Ï¡¢¤¢¤Ê¤¿¤¬°ì±þ¸°¤Î³Îǧ¤ò¤·¤¿¡¢¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£¤¿¤È¤¨¤Ð\n"
-" ¸°¤Î»ØÌæ¤ò¸¡¾Ú¤·¡¢¥Õ¥©¥ÈID¤Ë¤¿¤¤¤·¤Æ¸°¤Î¥æ¡¼¥¶¡¼ID¤ò³Îǧ\n"
-" ¤·¤¿¾ì¹ç¤¬¤½¤¦¤Ç¤¹¡£\n"
-"\n"
-"\"3\" ¤Ï¡¢¤¢¤Ê¤¿¤¬¹­ÈϰϤˤ錄¤ê¸°¤ò¸¡¾Ú¤·¤¿¡¢¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£\n"
-" ¤¿¤È¤¨¤Ð¡¢¸°¤Î½êÍ­¼ÔËܿͤȸ°¤Î»ØÌæ¤ò¸¡¾Ú¤·¡¢(¥Ñ¥¹¥Ý¡¼¥È\n"
-" ¤Î¤è¤¦¤Ê) µ¶Â¤¤Î¤à¤Ä¤«¤·¤¤¡¢¥Õ¥©¥ÈID¤Ä¤­¤Î¼êÃʤǡ¢¸°¤Î½ê\n"
-" Í­¼Ô¤Î̾Á°¤¬¡¢¸°¤Î¥æ¡¼¥¶¡¼ID¤Î̾Á°¤È°ìÃפ¹¤ë¤³¤È¤ò³Îǧ¤·\n"
-" ¤Æ¡¢(ÅŻҥ᡼¥ë¤Î¸ò´¹¤Ê¤É¤Ç) ¸°¤ÎÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤¬\n"
-" ¸°¤Î½êÍ­¼Ô¤Ë°¤·¤Æ¤¤¤ë¤³¤È¤ò¸¡¾Ú¤·¤¿¾ì¹ç¤¬¤½¤¦¤Ç¤¹¡£\n"
-"\n"
-"¾åµ­2¤È3¤ÎÎã¤Ï¡¢*ñ¤Ê¤ë*Îã¤Ë¤¹¤®¤Ê¤¤¡¢¤È¤¤¤¦¤³¤È¤òǰƬ¤ËÃÖ¤¤\n"
-"¤Æ¤¯¤À¤µ¤¤¡£Â¾¤Î¸°¤Ë½ð̾¤¹¤ëºÝ¡¢¡Ö°ì±þ¡×¤ä¡Ö¹­Èϰϡפ¬²¿¤ò°Õ\n"
-"Ì£¤¹¤ë¤«¤òºÇ½ªÅª¤Ë·è¤á¤ë¤Î¤Ï¡¢¤¢¤Ê¤¿¤Ç¤¹¡£\n"
-"\n"
-"Àµ¤·¤¤Åú¤Î¤ï¤«¤é¤Ê¤¤¾ì¹ç¤Ï¡¢¡Ö0¡×¤ÇÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Á´¤Æ¤Î ¥æ¡¼¥¶¡¼ID¤Ë½ð̾¤·¤¿¤±¤ì¤Ð¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"¤³¤ì¤é¤Î¥æ¡¼¥¶¡¼ID¤òËÜÅö¤Ëºï½ü¤·¤¿¤±¤ì¤Ð¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤¡£\n"
-"¾ÚÌÀ½ñ¤âÁ´ÉôƱ»þ¤Ëºï½ü¤·¤Þ¤¹!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "¤³¤ÎÉû¸°¤òºï½ü¤¹¤ë¾ì¹ç¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"¤³¤ì¤Ï¸°¤Ë¤¿¤¤¤¹¤ëÍ­¸ú¤Ê½ð̾¤Ç¤¹¡£ÉáÄ̤³¤Î½ð̾¤òºï½ü¤¹¤ë¤Ù¤­¤Ç\n"
-"¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤Ê¤¼¤Ê¤é¡¢¤³¤Î½ð̾¤Ï¡¢¸°¤Ø¤Î¿®ÍѤÎÎؤκîÀ®¤ä¡¢\n"
-"¤³¤Î¸°¤Ë¤è¤ë¾ÚÌÀ¤Ë¤È¤Ã¤Æ½ÅÍפÀ¤«¤é¤Ç¤¹¡£"
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"¤³¤Î½ð̾¤È°ìÃפ¹¤ë¸°¤òÊÝÍ­¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢¤³¤Î½ð̾¤Ï¸¡¾Ú¤Ç¤­¤Þ¤»¤ó¡£\n"
-"¤½¤Î¸°¤¬»ÈÍѤµ¤ì¤ë¤Þ¤Ç¤Ï¡¢¤¢¤Ê¤¿¤Ï¤³¤Î½ð̾¤Îºï½ü¤òÊÝα¤¹¤ë¤Ù¤­¤Ç¤¹¡£\n"
-"¤Ê¤¼¤Ê¤é¡¢¤³¤Î½ð̾¤Î¸°¤Ï¡¢Â¾¤Î¾ÚÌÀ¤µ¤ì¤¿¸°¤Ç¿®ÍѤÎÎؤò·ÁÀ®¤¹¤ë¤«¤â\n"
-"¤·¤ì¤Ê¤¤¤«¤é¤Ç¤¹¡£"
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"¤³¤Î½ð̾¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤³¤Î¤³¤È¤Ï¡¢¤¢¤Ê¤¿¤Î¸°Îؤ«¤éºï½ü¤¹¤Ù¤­¤À\n"
-"¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£"
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"¤³¤ì¤Ï¡¢¸°¤Î¥æ¡¼¥¶¡¼ID¤ËÂбþ¤·¤¿½ð̾¤Ç¤¹¡£Ä̾¤³¤Î½ð̾¤òºï½ü¤¹¤ë¤Î¤Ï\n"
-"¤¤¤¤¹Í¤¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¼ÂºÝ¤Ë¤Ï¡¢GnuPG¤Ï¤â¤Ï¤ä¤³¤Î¸°¤ò»È¤¨¤Ê¤¤¤Î¤«¤â\n"
-"¤·¤ì¤Þ¤»¤ó¡£¤è¤Ã¤Æ¡¢¤³¤Î¼«¸Ê½ð̾¤¬²¿¤é¤«¤ÎÍýͳ¤Ë¤è¤ê̵¸ú¤Ç¤¢¤Ã¤Æ¡¢\n"
-"ÂåÂؤȤʤ븰¤¬¤¢¤ë¾ì¹ç¤Ë¤Î¤ß¡¢ºï½ü¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Á´Éô (¤Þ¤¿¤ÏÁªÂò¤·¤¿) ¥æ¡¼¥¶¡¼ID¤ÎÁª¹¥¤ò¡¢¸½ºß¤ÎÁª¹¥°ìÍ÷¤ËÊѹ¹\n"
-"¤·¤Þ¤¹¡£´Ø·¸¤¹¤ë¼«¸Ê½ð̾¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤Ï¡¢1É乤¹¤ß¤Þ¤¹¡£\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£¤³¤ì¤ÏÈëÌ©¤Îʸ¾Ï¤Î¤³¤È¤Ç¤¹ \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "ÆþÎϤ·¤¿¥Ñ¥¹¥Õ¥ì¡¼¥º¤Î³Îǧ¤Î¤¿¤á¡¢ºÆÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£"
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "½ð̾¤ò¹Ô¤¦¥Õ¥¡¥¤¥ë¤Î̾Á°¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "¾å½ñ¤­¤·¤Æ¤è¤±¤ì¤Ð¡¢¡Öyes¡×¤ÈÅú¤¨¤Æ¤¯¤À¤µ¤¤"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£Ã±¤Ë¥ê¥¿¡¼¥ó¡¦¥­¡¼¤ò²¡¤¹¤È¡¢\n"
-"(³ç¸Ì¤Ç°Ï¤ó¤À) ´ûÄê¤Î¥Õ¥¡¥¤¥ë̾¤ò»ÈÍѤ·¤Þ¤¹¡£"
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"¾ÚÌÀ½ñ¤ËÍýͳ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£Á°¸å´Ø·¸¤Ë¤â¤è¤ê¤Þ¤¹¤¬¡¢\n"
-"°Ê²¼¤«¤éÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£\n"
-" ¡Ö¸°¤¬¥Ñ¥¯¤é¤ì¤Þ¤·¤¿¡×\n"
-" ǧ¾Ú¤µ¤ì¤Æ¤¤¤Ê¤¤¿Í¤¬ÈëÌ©¸°¤Ø¤Î¥¢¥¯¥»¥¹¤òÆÀ¤¿¡¢¤È¿®¤º¤ë\n"
-" ¤Ë­¤ëÍýͳ¤Î¤¢¤ë¤È¤­¤Ë¡¢¤³¤ì¤ò»È¤¤¤Þ¤¹¡£\n"
-" ¡Ö¸°¤¬¤È¤ê¤«¤ï¤Ã¤Æ¤¤¤Þ¤¹¡×\n"
-" ¤³¤Î¸°¤ò¼«Ê¬¤Ç¿·¤·¤¤¸°¤È¤È¤ê¤«¤¨¤¿¤È¤­¤Ë»È¤¤¤Þ¤¹¡£\n"
-" ¡Ö¸°¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó¡×\n"
-" ¤³¤Î¸°¤ò»È¤¦¤Î¤ò¤ä¤á¤¿¤È¤­¤Ë»È¤¤¤Þ¤¹¡£\n"
-" ¡Ö¥æ¡¼¥¶¡¼ID¤¬¤â¤¦Í­¸ú¤Ç¤¢¤ê¤Þ¤»¤ó¡×\n"
-" ¤â¤¦¤½¤Î¥æ¡¼¥¶¡¼ID¤Ï»È¤¦¤Ù¤­¤Ç¤Ê¤¤¡¢¤È¤¤¤¦¤È¤­¤Ë»È¤¤\n"
-" ¤Þ¤¹¡£¤³¤ì¤ÏÉáÄÌ¡¢ÅŻҥ᡼¥ë¤Î¥¢¥É¥ì¥¹¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤¿¤È\n"
-" ¤­¤Ë»È¤¤¤Þ¤¹¡£\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"¤â¤·¤½¤¦¤·¤¿¤±¤ì¤Ð¡¢¤Ê¤¼ÇË´þ¾ÚÌÀ½ñ¤òȯ¹Ô¤¹¤ë¤Î¤«¤òÀâÌÀ¤¹¤ë¥Æ\n"
-"¥­¥¹¥È¤òÆþÎϤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥Æ¥­¥¹¥È¤Ï´Ê·é¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
-"¶õ¹Ô¤Ç½ª¤ï¤ê¤Ë¤Ê¤ê¤Þ¤¹¡£\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "¥Ø¥ë¥×¤Ï¤¢¤ê¤Þ¤»¤ó"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "`%s'¤Î¥Ø¥ë¥×¤Ï¤¢¤ê¤Þ¤»¤ó"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "¸°ÎØ`%s'¤ÎºîÀ®¥¨¥é¡¼: %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "¸°ÎØ `%s' ¤¬¤Ç¤­¤Þ¤·¤¿\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "¸°ÎØ¥­¥ã¥Ã¥·¥å¤ÎºÆ¹½Ãۤ˼ºÇÔ¤·¤Þ¤·¤¿: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "·Ù¹ð: ¿®ÍѾðÊó¤ò¤â¤Ã¤¿2¤Ä¤Î¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹¡£\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s¤ÏÊѹ¹¤Î¤Ê¤¤Êý¤Ç¤¹\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s¤Ï¿·¤·¤¤Êý¤Ç¤¹\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "¤³¤Î°ÂÁ´¾å¤Î·ç´Ù¤ò½¤Àµ¤·¤Æ¤¯¤À¤µ¤¤\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "¸°ÎØ`%s'¤ò¸¡¾Ú¤·¤Æ¤¤¤Þ¤¹\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "¤³¤ì¤Þ¤Ç¤Ë%lu¸Ä¤Î¸°¤Þ¤Ç¸¡¾Ú (%lu¸Ä¤Î½ð̾)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu¸Ä¤Î¸°¤Þ¤Ç¸¡¾Ú (%lu¸Ä¤Î½ð̾)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: ¸°Îؤ¬¤Ç¤­¤Þ¤·¤¿\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr "¥ª¥×¥·¥ç¥ó¡¦¥Õ¥¡¥¤¥ë¤òÆɤßľ¤¹¤è¤¦¡¢GnuPG¤òºÆµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "`%s' ¤Ø¤Îµö²Ä¤ÎÊѹ¹¤Ë¼ºÇÔ: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|̾Á°=ÃÍ|¤³¤ÎÃí¼á¥Ç¡¼¥¿¤ò»ÈÍÑ"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "Ãí¼á̾¤ÎÀèƬ¤Ïʸ»ú¤«¥¢¥ó¥À¡¼¥¹¥³¥¢(_)¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "Ãí¼á̾¤Î¥É¥Ã¥È¤Ï¾¤Îʸ»ú¤Ç°Ï¤Þ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "·Ù¹ð: ¤³¤Î¸°¤Ë¤Ï¤â¤¦¥Õ¥©¥ÈID¤¬¤¢¤ê¤Þ¤¹¡£\n"
-#~ " °ã¤¦¥Õ¥©¥ÈID¤òÄɲ乤ë¤È¡¢°ìÉô¤ÎÈǤÎPGP¤Ïº®Í𤹤뤫¤â¤·¤ì¤Þ¤»¤ó¡£\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "1Ëܤθ°¤Ë¤Ï¥Õ¥©¥ÈID¤ò¤Ò¤È¤ÄÉÕ¤±¤é¤ì¤ë¤À¤±¤Ç¤¹¡£\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "»ØÌæ:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " »ØÌæ:"
diff --git a/po/nl.po b/po/nl.po
deleted file mode 100644
index 383952501..000000000
--- a/po/nl.po
+++ /dev/null
@@ -1,5017 +0,0 @@
-# Dutch messages for gnupg
-# Copyright (C) 2000 Free Software Foundation, Inc.
-# Ivo Timmermans <itimmermans@bigfoot.com>, 2000.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.0h\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2000-02-20 21:30+01:00\n"
-"Last-Translator: Ivo Timmermans <itimmermans@bigfoot.com>\n"
-"Language-Team: Dutch <nl@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Let op: er wordt onveilig geheugen gebruikt!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "bewerking is niet mogelijk zonder initialisatie van veilig geheugen\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(misschien heb je hiervoor het verkeerde programma gebruikt)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "ja"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "yYjJ"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "nee"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "einde"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQeE"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "algemene fout"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "onbekend pakket type"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "onbekende versie"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "onbekend publieke sleutel algoritme"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "onbekend verteeralgoritme"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "foutieve publieke sleutel"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "foutieve geheime sleutel"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "foutieve ondertekening"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "verkeerd controlegetal"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "verkeerde sleuteltekst"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "publieke sleutel niet gevonden"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "onbekend versleutelalgoritme"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "kan de sleutelbos niet openen"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "ongeldig pakket"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "ongeldige versleuteling"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "niet-bestaand gebruikersnummer"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "geheime sleutel niet beschikbaar"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "verkeerde geheime sleutel gebruikt"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "niet ondersteund"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "foutieve sleutel"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "leesfout op bestand"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "schrijffout op bestand"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "onbekend compressiealgoritme"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "fout bij openen bestand"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "fout bij aanmaken bestand"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "ongeldige sleuteltekst"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "publieke sleutel algoritme niet geïmplementeerd"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "encryptie-algoritme niet geïmplementeerd"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "onbekende klasse van ondertekeningen"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "fout in de vertrouwensrelatiedatabase"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "foutieve MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "hulpbronlimiet"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "ongeldige sleutelbos"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "foutief certificaat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "ongeldige gebruikersidentificatie"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "fout bij het sluiten van het bestand"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "fout bij het hernoemen van het bestand"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "fout bij het verwijderen van het bestand"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "onverwachte gegevens"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "tijden komen niet overeen"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "onbruikbaar publieke sleutel-algoritme"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "bestand bestaat al"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "onveilige sleutel"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "ongeldig argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "foutieve URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI wordt niet ondersteund"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "netwerkfout"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "niet versleuteld"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "niet behandeld"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "foutieve publieke sleutel"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "foutieve geheime sleutel"
-
-#: util/errors.c:107
-#, fuzzy
-msgid "keyserver error"
-msgstr "algemene fout"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... dit is een programmeerfout (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "u heeft een fout in het programma gevonden ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "kan `%s' niet openen: %s\n"
-
-#: cipher/random.c:385
-#, fuzzy, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "kan `%s' niet openen: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr ""
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr ""
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "LET OP: ongeldige aantekeningen gevonden\n"
-
-#: cipher/random.c:409
-#, fuzzy, c-format
-msgid "can't read `%s': %s\n"
-msgstr "kan `%s' niet openen: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr ""
-
-#: cipher/random.c:467
-#, fuzzy, c-format
-msgid "can't create `%s': %s\n"
-msgstr "kan %s niet aanmaken: %s\n"
-
-#: cipher/random.c:474
-#, fuzzy, c-format
-msgid "can't write `%s': %s\n"
-msgstr "kan `%s' niet openen: %s\n"
-
-#: cipher/random.c:477
-#, fuzzy, c-format
-msgid "can't close `%s': %s\n"
-msgstr "kan `%s' niet openen: %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "LET OP: de willekeurige getallengenerator is niet veilig!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"De willekeurige getallengenerator is slechts een slordige oplossing om\n"
-"het te laten werken - het is in geen geval een echte WGG!\n"
-"\n"
-"Gebruik geen enkele gegevens die door dit programma gegenereerd zijn!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Niet genoeg willekeurige gegevens beschikbaar. Ga wat ander werk doen\n"
-"om het besturingssysteem de kans te geven om meer entropie te\n"
-"verzamelen! (Nog %d bytes nodig)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Opdrachten:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[bestand]|maak een ondertekening"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[bestand]|maak een niet versleutelde ondertekening"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "maak een losstaande ondertekening"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "versleutel gegevens"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr ""
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "versleutel slechts met een symmetrische versleutelmethode"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "alleen bewaren"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "gegevens decoderen (standaard)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr ""
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "ondertekening controleren"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "lijst van sleutels genereren"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "sleutels en ondertekeningen opnoemen"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "sleutelverificaties controleren"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "sleutels en vingerafdrukken opnoemen"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "geheime sleutels opnoemen"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "nieuw sleutelpaar genereren"
-
-#: g10/g10.c:327
-#, fuzzy
-msgid "remove keys from the public keyring"
-msgstr "sleutel weghalen uit de publieke sleutelbos"
-
-#: g10/g10.c:329
-#, fuzzy
-msgid "remove keys from the secret keyring"
-msgstr "sleutel weghalen uit de geheime sleutelbos"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "onderteken een sleutel"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "onderteken een sleutel lokaal"
-
-#: g10/g10.c:332
-#, fuzzy
-msgid "sign a key non-revocably"
-msgstr "onderteken een sleutel lokaal"
-
-#: g10/g10.c:333
-#, fuzzy
-msgid "sign a key locally and non-revocably"
-msgstr "onderteken een sleutel lokaal"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "onderteken of bewerk een sleutel"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "genereer een terugtrekkings-certificaat"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exporteer sleutels"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exporteer sleutels naar een sleutelserver"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importeer sleutels van een sleutelserver"
-
-#: g10/g10.c:341
-#, fuzzy
-msgid "search for keys on a key server"
-msgstr "exporteer sleutels naar een sleutelserver"
-
-#: g10/g10.c:343
-#, fuzzy
-msgid "update all keys from a keyserver"
-msgstr "importeer sleutels van een sleutelserver"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "sleutels importeren/samenvoegen"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "noem alleen de volgorde van pakketten"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exporteer het vertrouwen in de eigenaars"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importeer het vertrouwen in de eigenaars"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "werk de vertrouwensdatabase bij"
-
-#: g10/g10.c:357
-#, fuzzy
-msgid "unattended trust database update"
-msgstr "werk de vertrouwensdatabase bij"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "repareer een beschadigde vertrouwensdatabase"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Verwijder de beveiliging op bestand of standaard invoer"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Voeg beveiliging toe aan bestad of standaard invoer"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [bestanden]|geef controlegetal van berichten weer"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opties:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "genereer beveiliging in ASCII"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NAAM|versleutel voor NAAM"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NAAM|gebruik NAAM als standaard ontvanger"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "gebruik de standaard sleutel als standaard ontvanger"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr ""
-"gebruik deze gebruikersidentificatie om te ondertekenen of te decoderen"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|stel compressieniveau in op N (uitzetten met 0)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "gebruik de verkorte tekstmodus"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "gebruik als uitvoerbestand"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "geef meer informatie"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "wees iets stiller"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "gebruik de terminal helemaal niet"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "forcees v3 ondertekening"
-
-#: g10/g10.c:397
-#, fuzzy
-msgid "do not force v3 signatures"
-msgstr "forcees v3 ondertekening"
-
-#: g10/g10.c:398
-#, fuzzy
-msgid "force v4 key signatures"
-msgstr "forcees v3 ondertekening"
-
-#: g10/g10.c:399
-#, fuzzy
-msgid "do not force v4 key signatures"
-msgstr "forcees v3 ondertekening"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "gebruik altijd een MDC voor versleuteling"
-
-#: g10/g10.c:402
-#, fuzzy
-msgid "never use a MDC for encryption"
-msgstr "gebruik altijd een MDC voor versleuteling"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "maak geen enkele verandering"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr ""
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "doorlopende modus: vraag nooit"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "veronderstel ja als antwoord op de meeste vragen"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "veronderstel nee als antwoord op de meeste vragen"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "voeg deze sleutelbos toe aan de lijst van sleutelbossen"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "voeg deze geheime sleutelbos toe aan de lijst"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr ""
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NAAM|gebruik NAAM als standaard geheime sleutel"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|SERVER|gebruik deze sleutelserver om sleutels op te zoeken"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAAM|zet tekenverzameling van terminal op NAAM"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "lees opties uit bestand"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|BB|schrijf status naar deze bestandsbeschrijver"
-
-#: g10/g10.c:427
-#, fuzzy
-msgid "|[file]|write status info to file"
-msgstr "|BB|schrijf status naar deze bestandsbeschrijver"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr ""
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|BESTAND|laad extensiemodule BESTAND"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "doe als RFC1991 voorschrijft"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "zet alle pakket-, versleutel- en controle-opties naar OpenPGP gedrag"
-
-#: g10/g10.c:443
-#, fuzzy
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "zet alle pakket-, versleutel- en controle-opties naar OpenPGP gedrag"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|gebruik sleuteltekst modus N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NAAM|gebruik berichtsamenvattingsalgoritme NAAM voor sleutelteksten"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NAAM|gebruik versleutelalgoritme NAAM voor sleutelteksten"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NAAM|gebruik versleutelalgoritme NAAM"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NAAM|gebruik berichtsamenvattingsalgoritme NAAM"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|gebruik compressiealgoritme N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "plaats geen sleutelidentificatieveld in versleutelde pakketten"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Voorbeelden:\n"
-"\n"
-" -se -r Bob [bestand] teken en versleutel voor Bob\n"
-" --clearsign [bestand] genereer een leesbare ondertekening\n"
-" --detach-sign [bestand] genereer een losstaande ondertekening\n"
-" --list-keys [namen] toon sleutels\n"
-" --fingerprints [namen] toon vingerafdrukken\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr ""
-"Meld fouten in het programma a.u.b. aan <gnupg-bugs@gnu.org>;\n"
-"fouten in de vertaling aan <nl@li.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Gebruik: gpg [opties] [bestanden] (-h voor hulp)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Syntaxis: gpg [opties] [bestanden]\n"
-"onderteken, controleer, versleutel of decodeer de ingevoerde gegevens\n"
-"standaardactie hangt af van de gegevens\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Ondersteunde algoritmes:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "gebruik: gpg [opties] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "tegenstrijdige commando's\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "LET OP: geen bestand `%s' met standaardopties\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "LET OP: geen bestand `%s' met standaardopties\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "optiebestand `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "opties inlezen van `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s is een onbekende tekenverzameling\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr ""
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "ongeldige versleuteling"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "ongeldige sleutelbos"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "LET OP: programma zou een geheugendump kunnen maken!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr ""
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "LET OP: %s is niet voor gewoon gebruik!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s is niet toegestaan met deze %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s heeft geen betekenis met %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr ""
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "geselecteerd versleutelalgoritme is ongeldig\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "geselecteerd controle-algoritme is ongeldig\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "geselecteerd controle-algoritme is ongeldig\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "compressie-algoritme moet in het bereik %d..%d liggen\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed(?) moet groter zijn dan 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed(?) moet groter zijn dan 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth moet tussen de 1 en de 255 (inclusief) liggen\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "LET OP: simpele S2K mode (0) wordt met klem afgeraden\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "ongeldige S2K modus; moet 0, 1 of 3 zijn\n"
-
-#: g10/g10.c:1862
-#, fuzzy
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "ongeldige S2K modus; moet 0, 1 of 3 zijn\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "toon voorkeuren"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "toon voorkeuren"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "toon voorkeuren"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "toon voorkeuren"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "fout bij het initialiseren van de vertrouwensdatabase: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [bestandsnaam]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [bestandsnaam]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [bestandsnaam]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [bestandsnaam]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [bestandsnaam]"
-
-#: g10/g10.c:2056
-#, fuzzy
-msgid "--sign --symmetric [filename]"
-msgstr "--symmetric [bestandsnaam]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [bestandsnaam]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [bestandsnaam]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key gebruikersidentificatie"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key gebruikers-identificatie"
-
-#: g10/g10.c:2110
-#, fuzzy
-msgid "--nrsign-key user-id"
-msgstr "--sign-key gebruikersidentificatie"
-
-#: g10/g10.c:2118
-#, fuzzy
-msgid "--nrlsign-key user-id"
-msgstr "--sign-key gebruikersidentificatie"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key gebruikersidentificatie [opdrachten]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "kan %s niet openen: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [gebruikersidentificatie] [sleutelbos]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "opheffen van beveiliging mislukt: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "beveiligen mislukt: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "ongeldig frommelalgoritme `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[bestandsnaam]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Gaat uw gang, type het bericht ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "kan `%s' niet openen\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"een notitienaam mag alleen letters, cijfers, punten of underscores bevatten "
-"en eindig met een =\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "een notitienaam mag geen controletekens bevatten\n"
-
-#: g10/g10.c:2737
-#, fuzzy
-msgid "the given certification policy URL is invalid\n"
-msgstr "de gegeven beleids-URL is ongeldig\n"
-
-#: g10/g10.c:2739
-#, fuzzy
-msgid "the given signature policy URL is invalid\n"
-msgstr "de gegeven beleids-URL is ongeldig\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "beveiliging: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "ongeldige beveiliginsinformatie: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "beveiligingsinformatie"
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "ongeldige informatie over leesbare ondertekening\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "geneste leesbare ondertekeningen\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "ongeldige regel met streepjes: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "onverwachte beveiliging:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "ongeldig wortel64 teken %02x overgeslagen\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "voortijdig einde (geen controlesom)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "voortijdig einde (in controlesom)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "verkeerde controlesom\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "fout in controlesom; %06lx - %06lx\n"
-
-# fixme
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "voortijdig einde (in trailer)\n"
-
-# fixme
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "fout in de trailer regel\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "geen geldige OpenPGP gegevens gevonden.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "ongeldige beveiliging: regel langer dan %d tekens\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"aangehaald gewoon teken in beveiliging - waaschijnlijk is er een foutief "
-"mailbezorgprogramma gebruikt\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr ""
-
-#: g10/pkclist.c:63
-#, fuzzy
-msgid "Key is superseded"
-msgstr "Sleutel is beveiligd.\n"
-
-#: g10/pkclist.c:65
-#, fuzzy
-msgid "Key has been compromised"
-msgstr "Deze sleutel is niet beschikbaar"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr ""
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr ""
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "rev- vervalste sleutelterugtrekking gevonden\n"
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "[terugtrekking]"
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr ""
-
-#: g10/pkclist.c:258
-#, fuzzy, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Geen vertrouwenswaarde toegekend aan %lu:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-#, fuzzy
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Geef aan hoezeer je deze gebruiker vertrouwt om de sleutels van andere\n"
-"gebruikers correct te verifieren (door naar paspoorten of\n"
-"vingerafdrukken van andere bronnen te kijken...) ?\n"
-"\n"
-" 1 = Geen idee\n"
-" 2 = Ik vertrouw hem niet\n"
-" 3 = Ik vertrouw hem maar ten dele\n"
-" 4 = Ik vertrouw hem volledig\n"
-" s = Geef wat meer informatie\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr ""
-
-#: g10/pkclist.c:274
-#, fuzzy, c-format
-msgid " %d = I do NOT trust\n"
-msgstr "%08lx: We vertrouwen deze sleutel NIET\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr ""
-
-#: g10/pkclist.c:276
-#, fuzzy, c-format
-msgid " %d = I trust fully\n"
-msgstr "%s: is geen vertrouwensdatabasebestand\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr ""
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr ""
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = terug naar hoofdmenu\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr ""
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = beëindigen\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Uw keuze? "
-
-#: g10/pkclist.c:316
-#, fuzzy
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Wilt u deze sleutel echt verwijderen? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificaten die leiden tot een volledig betrouwbare sleutel:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "sleutel %08lx: sleutel is teruggeroepen!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Deze sleutel toch gebruiken? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "sleutel %08lx: subsleutel is teruggeroepen!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lx: sleutel is verlopen\n"
-
-#: g10/pkclist.c:448
-#, fuzzy, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-" Er is geen indicatie dat deze ondertekening van de eigenaar is.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lx: We vertrouwen deze sleutel NIET\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lx: Het is niet helemaal zeker dat deze sleutel echt aan de\n"
-"eigenaar toebehoort, maar ik accepteer hem toch\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Deze sleutel behoort waarschijnlijk toe aan de eigenaar\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Deze sleutel is van ons\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Het is NIET zeker dat deze sleutel van de eigenaar is. Als je\n"
-"*echt* weet waar je mee bezig bent, mag je de volgende vraag\n"
-"beantwoorden met ja\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "LET OP: Ik gebruik een onbetrouwbare sleutel!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "LET OP: Deze sleutel is ingetrokken door de eigenaar!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr ""
-" Dit zou kunnen betekenen dat de ondertekening een vervalsing is.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "LET OP: Deze subsleutel is ingetrokken door de eigenaar!\n"
-
-#: g10/pkclist.c:580
-#, fuzzy
-msgid "Note: This key has been disabled.\n"
-msgstr "Deze sleutel is niet beschikbaar"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Let op: Deze sleutel is verlopen!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr ""
-"LET OP: Deze sleutel is niet getekend met een betrouwbare ondertekening!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Er is geen indicatie dat deze ondertekening van de eigenaar is.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "LET OP: We vertrouwen NIET op deze sleutel!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " De sleutel is waarschijnlijk VERVALST.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"LET OP: Deze sleutel is niet getekend met genoeg betrouwbare "
-"ondertekeningen!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr ""
-" Het is niet zeker dat deze ondertekening toebehoort aan de "
-"eigenaar.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: overgeslagen: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: overgeslagen: openbare sleutel is al aanwezig\n"
-
-#: g10/pkclist.c:811
-#, fuzzy
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr ""
-"Je gaf geen gebruikersidentificatie op. (je kunt \"-r\" gebruiken)\n"
-"\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Gebruiker bestaat niet.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr ""
-"overgeslagen: openbare sleutel is al ingesteld als de standaard ontvanger\n"
-
-# fixme
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Openbare sleutel is niet toegankelijk.\n"
-
-#: g10/pkclist.c:870
-#, fuzzy
-msgid "skipped: public key already set\n"
-msgstr "%s: overgeslagen: openbare sleutel is al aanwezig\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "onbekende standaard ontvanger `%s'\n"
-
-# fixme
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: overgeslagen: openbare sleutel is niet toegankelijk\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "geen geldige adressen\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr ""
-
-#: g10/keygen.c:189
-#, fuzzy, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "`%s' overgeslagen: dubbel\n"
-
-#: g10/keygen.c:194
-#, fuzzy, c-format
-msgid "too many `%c' preferences\n"
-msgstr "toon voorkeuren"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "Ongeldig teken in naam\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "zelfondertekening wegschrijven\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "zelfondertekening wegschrijven\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "schrijven van sleutelbindingsondertekening\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, fuzzy, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "Gevraagde sleutellengte is %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, fuzzy, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "afgerond naar %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Selecteer aub wat voor sleutel u wilt:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA en ElGamal (standaard)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (alleen ondertekenen)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (alleen versleutelen)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (ondertekenen en versleutelen)\n"
-
-#: g10/keygen.c:949
-#, fuzzy, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) DSA (alleen ondertekenen)\n"
-
-#: g10/keygen.c:951
-#, fuzzy, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) ElGamal (alleen versleutelen)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (ondertekenen en versleutelen)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Uw keuze? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Ongeldige keuze.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Ik ga zo een nieuw %s sleutelpaar aanmaken.\n"
-" mimimale sleutellengte is 768 bits\n"
-" standaard sleutellengte is 1024 bits\n"
-" hoogste aan te raden sleutellengte is 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Hoe lang wil je de sleutel maken? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA staat alleen sleutellengtes toe van 512 tot 1024\n"
-
-#: g10/keygen.c:1027
-#, fuzzy
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "sleutel te kort; 768 is de kleinste toegestane waarde.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "sleutel te kort; 768 is de kleinste toegestane waarde.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "sleutel te lang; %d is de maximumlengte.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Sleutels langer dan 2048 worden afgeraden omdat berekeningen dan ERG\n"
-"lang duren!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Okee, maar houd er rekening mee dat straling van monitor en toetsenbord ook "
-"erg vatbaar zijn voor aanvallen!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Gevraagde sleutellengte is %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "afgerond naar %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Geef aub aan hoe lang de sleutel geldig mag blijven.\n"
-" 0 = sleutel verloopt nooit\n"
-" <n> = sleutel verloopt over n dagen\n"
-" <n>w = sleutel verloopt over n weken\n"
-" <n>m = sleutel verloopt over n maanden\n"
-" <n>y = sleutel verloopt over n jaar\n"
-
-#: g10/keygen.c:1126
-#, fuzzy
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Geef aub aan hoe lang de sleutel geldig mag blijven.\n"
-" 0 = sleutel verloopt nooit\n"
-" <n> = sleutel verloopt over n dagen\n"
-" <n>w = sleutel verloopt over n weken\n"
-" <n>m = sleutel verloopt over n maanden\n"
-" <n>y = sleutel verloopt over n jaar\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Sleutel is geldig gedurende? (0) "
-
-#: g10/keygen.c:1150
-#, fuzzy
-msgid "Signature is valid for? (0) "
-msgstr "Sleutel is geldig gedurende? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "ongeldige waarde\n"
-
-#: g10/keygen.c:1160
-#, fuzzy, c-format
-msgid "%s does not expire at all\n"
-msgstr "Sleutel verloopt nooit\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, fuzzy, c-format
-msgid "%s expires at %s\n"
-msgstr "Sleutel verloopt op %s\n"
-
-# fixme
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Uw systeem kan geen data weergeven van na 2038.\n"
-"Desondanks wordt het goed behandeld tot 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Klopt dit (j/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"U heeft een gebruikersidentificatie nodig voor de sleutel; het\n"
-"programma bouwt deze op uit Echte naam, Kommentaar en Email Adres in\n"
-"dit formaat:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Echte naam: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Ongeldig teken in naam\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Naam mag niet beginnen met een cijfer\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Naam moet ten minste 5 tekens lang zijn\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Email Adres: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Ongeldig email adres\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Kommentaar: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Ongeldig teken in kommentaar\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Je gebruik tekenverzameling `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Je hebt deze gebruikersidentificatie gekozen:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnKkEeOoEe"
-
-#: g10/keygen.c:1326
-#, fuzzy
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Verander (N)aam, (K)ommentaar, (E)mail of (O)kee/ei(N)de? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Verander (N)aam, (K)ommentaar, (E)mail of (O)kee/ei(N)de? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr ""
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Je hebt een sleuteltekst nodig om je geheime sleutel te bewaken.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-#, fuzzy
-msgid "passphrase not correctly repeated; try again"
-msgstr "sleuteltekst is niet goed herhaald; probeer het opnieuw.\n"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr ""
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"U heeft gekozen voor geen sleuteltekst - dit is waaschijnlijk een\n"
-"*slecht* idee! Ik zal het toch doen. U kunt uw sleuteltekst altijd\n"
-"nog aanpassen, gebruik dit programma met de optie \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"We hebben een heleboel willekeurige data nodig. Het is wellicht een\n"
-"goed idee om wat anders te doen (het toetsenbord en de muis gebruiken,\n"
-"of de schijven aanspreken) tijdens de generatie van de priemgetallen;\n"
-"dit geeft de generator een grotere kans om genoeg entropie te\n"
-"verzamelen.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA sleutelpaar zal 1024 bits lang zijn.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Sleutelgeneratie afgebroken.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, fuzzy, c-format
-msgid "writing public key to `%s'\n"
-msgstr "Openbaar certificaat wordt geschreven naar `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, fuzzy, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "Geheim certificaat wordt weggeschreven naar `%s'\n"
-
-#: g10/keygen.c:2205
-#, fuzzy, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "sleutel %08lX: openbare sleutel niet gevonden: %s\n"
-
-#: g10/keygen.c:2211
-#, fuzzy, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "sleutel %08lX: geheime sleutel niet gevonden: %s\n"
-
-#: g10/keygen.c:2225
-#, fuzzy, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "fout bij schrijven van de sleutelbos `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, fuzzy, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "fout bij schrijven van de sleutelbos `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "openbare en geheime sleutels zijn gemaakt en getekend.\n"
-
-#: g10/keygen.c:2253
-#, fuzzy
-msgid "key marked as ultimately trusted.\n"
-msgstr "Certificaten die leiden tot een volledig betrouwbare sleutel:\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Let er op dat deze sleutel niet gebruikt kan worden voor versleutelen.\n"
-"U wilt misschien het commando \"--edit-key\" gebruiken om een tweede\n"
-"sleutel te maken hiervoor.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Sleutelgeneratie is mislukt: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"Sleutel is %lu seconden in de toekomst gemaakt (tijdsverschuiving of\n"
-"klokprobleem)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"sleutel is %lu seconden in de toekomst gemaakt (tijdsverschuiving of\n"
-"klokprobleem)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr ""
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Echt maken? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr ""
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: kon niet openen: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "fout tijdens aanmake sleuteltekst: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, fuzzy, c-format
-msgid "`%s' already compressed\n"
-msgstr "%lu sleutels verwerkt\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: LET OP: leeg bestand\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "lezen uit `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "LET OP: versleutelalgoritme %d niet gevonden in de voorkeuren\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr ""
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s versleuteld voor: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, fuzzy, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "gebruiker `%s' niet gevonden: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, fuzzy, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "fout bij lezen `%s': %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n"
-
-#: g10/export.c:238
-#, fuzzy, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n"
-
-#: g10/export.c:246
-#, fuzzy, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "LET OP: er is niets geëxporteerd\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "te veel ingangen in de pk cache - uitgezet\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-#, fuzzy
-msgid "[User id not found]"
-msgstr "[gebruiker niet gevonden]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "gebruik secundaire sleutel %08lx in plaats van de primaire %08lx\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr ""
-"sleutel %08lX: geheime sleutel zonder openbare sleutel - overgeslagen\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "blok van type %d wordt overgeslagen\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu sleutels zijn tot nu toe behandeld\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "fout bij lezen `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Totaal aantal behandeld: %lu\n"
-
-#: g10/import.c:286
-#, fuzzy, c-format
-msgid " skipped new keys: %lu\n"
-msgstr "nieuwe subsleutels: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " zonder identificatie: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr "geïmporteerd: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr "onveranderd: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr "nieuwe gebruikers: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr "nieuwe subsleutels: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr "nieuwe ondertekeningen: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr "nieuwe sleutelterugtrekkingen: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr "geheime sleutels gelezen: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "geheime sleutels geïmporteerd: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "onveranderde geheime sleutels: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr "geïmporteerd: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "sleutel %08lX: geen gebruikersidentificatie\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "sleutel %08lX: geen subsleutel voor sleutelbinding\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr ""
-"sleutel %08lX: niet zelfondertekende gebruikersidentificatie geaccepteerd '"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "sleutel %08lX: geen geldige gebruikersidentificaties\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr ""
-"dit zou veroorzaakt kunnen worden door een ontbrekende zelf-ondertkening\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "sleutel %08lX: openbare sleutel niet gevonden: %s\n"
-
-#: g10/import.c:636
-#, fuzzy, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n"
-
-#: g10/import.c:646
-#, fuzzy, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "fout bij schrijven van de sleutelbos `%s': %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "schrijven naar `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "fout bij schrijven van de sleutelbos `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "sleutel %08lX: openbare sleutel geïmporteerd\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "sleutel %08lX: komt niet overeen met onze kopie\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "sleutel %08lX: kan originele sleutelblok niet vinden: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "sleutel %08lX: kan origineel sleutelblok niet lezen: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "sleutel %08lX: 1 nieuwe gebruiker\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "sleutel %08lX: %d nieuwe gebruikers\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "sleutel %08lX: 1 nieuwe ondertekening\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "sleutel %08lX: %d nieuwe ondertekeningen\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "sleutel %08lX: 1 nieuwe subsleutel\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "sleutel %08lX: %d nieuwe subsleutels\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "sleutel %08lX: niet veranderd\n"
-
-#: g10/import.c:844
-#, fuzzy, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "geen standaard openbare sleutelbos\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "sleutel %08lX: geheime sleutel geïmporteerd\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "sleutel %08lX: reeds aanwezig in de geheime sleutelbos\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "sleutel %08lX: geheime sleutel niet gevonden: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"sleutel %08lX: geen openbare sleutel - kan terugtrekkingscertificaat niet "
-"toepassen\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "sleutel %08lX: ongeldig terugtrekkingscertificaat: %s - afgewezen\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "sleutel %08lX: terugtrekkingscertificaat geïmporteerd\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "sleutel %08lX: geen gebruikersidentificatie voor ondertekening\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "sleutel %08lX: openbaar sleutel algoritme niet ondersteund\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "sleutel %08lX: ongeldige eigen ondertekening\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "sleutel %08lX: geen subsleutel voor sleutelbinding\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "sleutel %08lX: openbaar sleutel algoritme niet ondersteund\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "sleutel %08lX: ongeldige subsleutelbinding\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "sleutel %08lX: ongeldige subsleutelbinding\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "sleutel %08lX: geen subsleutel voor sleutelbinding\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "sleutel %08lX.%lu: Geldige subsleutelterugtrekking\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "sleutel %08lX: ongeldige subsleutelbinding\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "sleutel %08lX: gebruikersidentificatie overgeslagen '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "sleutel %08lX: subsleutel overgeslagen\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr ""
-"sleutel %08lX: niet exporteerbare ondertekening (klasse %02x) - "
-"overgeslagen\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr ""
-"sleutel %08lX: terugtrekkingscertificaat op de verkeerde plek - "
-"overgeslagen\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "sleutel %08lX: ongeldig terugtrekkingscertificaat: %s - overgeslagen\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr ""
-"sleutel %08lX: terugtrekkingscertificaat op de verkeerde plek - "
-"overgeslagen\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr ""
-"sleutel %08lX: dubbele gebruikersidentificatie gevonden - samengevoegd\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "sleutel %08lX: terugtrekkingscertificaat toegevoegd\n"
-
-#: g10/import.c:1491
-#, fuzzy, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "sleutel %08lX: %d nieuwe ondertekeningen\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[terugtrekking]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[zelfondertekening]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 ongeldige ondertekening\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d ongeldige ondertekeningen\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 ondertekening niet gecontroleerd wegens een ontbrekende sleutel\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d ondertekeningen niet gecontroleerd wegens ontbrekende sleutels\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 ondertekening niet gecontroleerd wegens een fout\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d ondertekeningen niet gecontroleerd wegens fouten\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 gebruikersidentificatie gevonden zonder geldige zelfondertekening\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr ""
-"%d gebruikersidentificaties gevonden zonder geldige zelfondertekening\n"
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Sleutel is beveiligd.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "Reeds ondertekend met sleutel %08lx\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "Reeds ondertekend met sleutel %08lx\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Niets te tekenen met sleutel %08lX\n"
-
-#: g10/keyedit.c:478
-#, fuzzy
-msgid "This key has expired!"
-msgstr "Let op: Deze sleutel is verlopen!\n"
-
-#: g10/keyedit.c:498
-#, fuzzy, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Deze sleutel is niet beveiligd.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr ""
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr ""
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Bent u er echt zeker van dat u deze sleutel wilt tekenen\n"
-"met uw sleutel: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr ""
-"dit zou veroorzaakt kunnen worden door een ontbrekende zelf-ondertkening\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"Deze ondertekening zal gemarkeerd worden als niet exporteerbaar.\n"
-"\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"Deze ondertekening zal gemarkeerd worden als niet exporteerbaar.\n"
-"\n"
-
-#: g10/keyedit.c:620
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"Deze ondertekening zal gemarkeerd worden als niet exporteerbaar.\n"
-"\n"
-
-#: g10/keyedit.c:624
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"Deze ondertekening zal gemarkeerd worden als niet exporteerbaar.\n"
-"\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Echt tekenen? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "ondertekening mislukt: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Deze sleutel is niet beveiligd.\n"
-
-#: g10/keyedit.c:748
-#, fuzzy
-msgid "Secret parts of primary key are not available.\n"
-msgstr "geheime sleutel niet beschikbaar"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Sleutel is beveiligd.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Kan deze sleutel niet bewerken: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Geef de sleuteltekst voor deze geheime sleutel.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"U wilt geen sleuteltekst - dit is waaschijnlijk een *slecht* idee!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Wilt u dit echt? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "sleutelondertekening naar de juiste plaats schuiven\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "beëindig dit menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "bewaar"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "opslaan en beëindigen"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "hulp"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "geef deze hulp"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "toon vingerafdruk"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "lijst"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "lijst van sleutel- en gebruikersidentificaties"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "gebruikersidentificatie"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "selecteer gebruikersidentificatie N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "sleutel"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "selecteer subsleutel N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "controleer"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "toon ondertekeningen"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "onderteken"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "onderteken de sleutel"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lteken"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "teken de sleutel lokaal"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "nrsign"
-msgstr "onderteken"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "sign the key non-revocably"
-msgstr "teken de sleutel lokaal"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "nrlsign"
-msgstr "onderteken"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "sign the key locally and non-revocably"
-msgstr "teken de sleutel lokaal"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "voeg een gebruikersidentificatie toe"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr ""
-
-#: g10/keyedit.c:920
-#, fuzzy
-msgid "add a photo ID"
-msgstr "voeg een gebruikersidentificatie toe"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "verwijder gebruikersidentificatie"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr ""
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "voeg een secundaire sleutel toe"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "verwijder een secundaire sleutel"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "revkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "voeg een secundaire sleutel toe"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "verwijder ondertekeningen"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "verander de vervaldatum"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr ""
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr ""
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "wissel"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "wissel tussen geheime en openbare sleutels"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-#, fuzzy
-msgid "list preferences (expert)"
-msgstr "toon voorkeuren"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "list preferences (verbose)"
-msgstr "toon voorkeuren"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "setpref"
-msgstr "pref"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "set preference list"
-msgstr "toon voorkeuren"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updpref"
-msgstr "pref"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updated preferences"
-msgstr "toon voorkeuren"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "verander de sleuteltekst"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "verander het vertrouwen in de eigenaar"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "roep ondertekeningen terug"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "trek secundaire sleutel in"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "sta het gebruik van een sleutel niet toe"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "sta gebruik van een sleutel toe"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr ""
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr ""
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "kan dat niet doen in lopende band-modus\n"
-
-#: g10/keyedit.c:1000
-#, fuzzy, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "fout bij lezen `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Geheime sleutel is beschikbaar.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Commando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Ik heb de geheime sleutel nodig om dat te doen.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr ""
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "Sleutel is beveiligd.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Echt alle gebruikers tekenen? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Hint: Selecteer de gebruikersidentificaties om te tekenen\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "U moet op zijn minst een gebruikersidentificatie opgeven.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "U kunt de laatste gebruiker niet verwijderen!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Al deze gebruikers echt verwijderen? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Deze gebruiker echt verwijderen? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "U moet op zijn minst een sleutel selecteren.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Wilt u echt alle geselecteerde sleutels verwijderen? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Wilt u deze sleutel echt verwijderen? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Wilt u echt alle geselecteerde sleutels intrekken? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Wilt u deze sleutel echt intrekken? "
-
-#: g10/keyedit.c:1354
-#, fuzzy
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Al deze gebruikers echt verwijderen? "
-
-#: g10/keyedit.c:1356
-#, fuzzy
-msgid "Really update the preferences? "
-msgstr "Echt deze terugtrekkingscertificaten aanmaken? (j/N)"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Veranderingen bewaren? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Beëindigen zonder te bewaren? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "bijwerken ging niet: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "bijwerken van de geheime sleutel mislukte: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "sleutel is niet veranderd en hoeft dus niet bijgewerkt te worden.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Foutief commando (probeer \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "LET OP: Deze sleutel is ingetrokken door de eigenaar!\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr ""
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr ""
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr ""
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Deze sleutel is niet beschikbaar"
-
-#: g10/keyedit.c:1802
-#, fuzzy, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! subsleutel is teruggeroepen: %s\n"
-
-#: g10/keyedit.c:1805
-#, fuzzy
-msgid "rev- faked revocation found\n"
-msgstr "rev- vervalste sleutelterugtrekking gevonden\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr ""
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Verwijder deze goede ondertekening? (j/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Verwijder deze ongeldige ondertekening? (j/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Verwijder deze onbekende ondertekening? (j/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Deze zelfondertekening echt verwijderen? (j/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d ondertekening verwijderd.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d ondertekeningen verwijderd.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Niets verwijderd.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Geef de sleutelgrootte"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Haal a.u.b. de selecties weg voor de geheime sleutels.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Selecteer a.u.b. maximaal één secundaire sleutel.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Vervaldatum voor secundaire sleutel instellen.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Vervaldatum voor primaire sleutel instellen.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "U kunt de vervaldatum van een v3 sleutel niet wijzigen\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Geen overeenkomende ondertekening in de geheime sleutelbos\n"
-
-#: g10/keyedit.c:2546
-#, fuzzy
-msgid "Please select exactly one user ID.\n"
-msgstr "U moet op zijn minst een gebruikersidentificatie opgeven.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "sleutel %08lX: ongeldige eigen ondertekening\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Geen gebruikersidentificatie met index %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Geen secundaire sleutel met index %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "gebruikersidentificatie: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"tekende met uw sleutel %08lX op %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"tekende met uw sleutel %08lX op %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Deze sleutel is niet beveiligd.\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Terugtrekkingscertificaat maken voor deze ondertekening? (j/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "U heeft deze gebruikers ondertekend:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " getekend door %08lX op %s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " ingetrokken door %08lX op %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "U staat op het punt om deze ondertekeningen in te trekken:\n"
-
-#: g10/keyedit.c:3013
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " getekend door %08lX op %s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Echt deze terugtrekkingscertificaten aanmaken? (j/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "geen geheime sleutel\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "%s ondertekening van: %s\n"
-
-#: g10/keylist.c:93
-#, fuzzy
-msgid "Signature policy: "
-msgstr "%s ondertekening van: %s\n"
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "LET OP: ongeldige aantekeningen gevonden\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Aantekening: "
-
-#: g10/keylist.c:129
-#, fuzzy
-msgid "Signature notation: "
-msgstr "Aantekening: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr ""
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr ""
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, fuzzy, c-format
-msgid " [expires: %s]"
-msgstr "Sleutel verloopt op %s\n"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "sleutels en vingerafdrukken opnoemen"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Vingerafdruk:"
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Vingerafdruk:"
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Vingerafdruk:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-#, fuzzy
-msgid " Key fingerprint ="
-msgstr " Vingerafdruk:"
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "ongeldig frommelalgoritme `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s versleutelde gegevens\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "versleuteld met onbekend algoritme %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "openbare sleutel is %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "gegevens versleuteld met een openbare sleutel: goede DEK\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "versleuteld met %u-bit %s sleutel, nummer %08lX, gemaakt op %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "versleuteld met %s sleutel, nummer %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "openbare sleutel-ontsleuteling ging niet: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, fuzzy, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "%s versleutelde gegevens\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "ontsleutelen ging goed\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "LET OP: het versleutelde bericht is veranderd!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "ontsleuteling mislukte: %s\n"
-
-# Dit kan wel Engels blijven.. toch?
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "LET OP: afzender vroeg om \"for-your-eyes-only\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "originele bestandsnaam='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "alleenstaande intrekking - gebruik \"gpg --import\" om uit te voeren\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Aantekening: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Beleid: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "controle van de ondertekening overgeslagen\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-#, fuzzy
-msgid "can't handle these multiple signatures\n"
-msgstr "maak een losstaande ondertekening"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Ondertekening gemaakt op %.*s met %s sleutel nummer %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "FOUTE ondertekening van \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-#, fuzzy
-msgid "Expired signature from \""
-msgstr "Correcte ondertekening van \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Correcte ondertekening van \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr ""
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Kan ondertekening niet controleren: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-#, fuzzy
-msgid "not a detached signature\n"
-msgstr "maak een losstaande ondertekening"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "losstaande ondertekening van type 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "oude stijl (PGP 2.x) ondertekening\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "ongeldig hoofdpakket gevonden in proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "kan geheugendumps niet uitzetten: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Experimentele algoritmes dienen niet gebruikt te worden!\n"
-
-#: g10/misc.c:192
-#, fuzzy
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr "dit versleutelalgoritme is verouderd; gebruik een meer algemene!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr ""
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "kan openbare sleutel-algoritme %d niet behandelen\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "subpakket type %d heeft kritische bit gezet\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr ""
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr ""
-
-#: g10/passphrase.c:511
-#, fuzzy, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "beschermingsalgoritme %d wordt niet ondersteund\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "kan geen verbinding maken met `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr ""
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr ""
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (hoofdsleutelnummer %08lX)"
-
-#: g10/passphrase.c:641
-#, fuzzy, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"\n"
-"U heeft een sleuteltekst nodig om de beveiliging voor de geheime\n"
-"sleutel op te heffen voor gebruiker \"%.*s\"\n"
-"%u-bit %s sleutel, ID %08lX, gemaakt op %s%s\n"
-
-#: g10/passphrase.c:662
-#, fuzzy
-msgid "Enter passphrase\n"
-msgstr "Geef de sleuteltekst: "
-
-#: g10/passphrase.c:664
-#, fuzzy
-msgid "Repeat passphrase\n"
-msgstr "Herhaal de sleuteltekst: "
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr ""
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr ""
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr ""
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr ""
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"U heeft een sleuteltekst nodig om de beveiliging voor de geheime\n"
-"sleutel voor gebruiker op te heffen: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bit %s sleutel, nummer %08lX, gemaakt op %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "kan niet om wachtwoord vragen in lopende band-modus\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Geef de sleuteltekst: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Herhaal de sleuteltekst: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"gegevens niet bewaard; gebruik de optie \"--output\" om het op te slaan in\n"
-
-#: g10/plaintext.c:108
-#, fuzzy, c-format
-msgid "error creating `%s': %s\n"
-msgstr "fout bij lezen `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Losstaande ondertekening.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Geef de naam van het gegevensbestand: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "lezen uit standaard invoer ...\n"
-
-#: g10/plaintext.c:396
-#, fuzzy
-msgid "no signed data\n"
-msgstr "geen ondertekende gegevens\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "kan ondertekende gegevens `%s' niet openen\n"
-
-#: g10/pubkey-enc.c:101
-#, fuzzy, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "anonieme ontvanger; ik probeer geheime sleutel %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "okee, wij zijn de anonieme ontvanger.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "oude codering van de DEK wordt niet ondersteund.\n"
-
-#: g10/pubkey-enc.c:178
-#, fuzzy, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "beschermingsalgoritme %d wordt niet ondersteund\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "LET OP: versleutelalgoritme %d niet gevonden in de voorkeuren\n"
-
-#: g10/pubkey-enc.c:243
-#, fuzzy, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "LET OP: geheime sleutel %08lX is vervallen op %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "sleutel %08lx: sleutel is teruggeroepen!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "opvragen van sleutel %08lX van %s ...\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "kan de sleutel niet opvragen van de server: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "fout bij versturen naar `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "versturen naar `%s' gelukt (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "fout bij versturen naar `%s': status=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr ""
-
-#: g10/hkp.c:565
-#, fuzzy, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "kan de sleutel niet opvragen van de server: %s\n"
-
-#: g10/seckey-cert.c:53
-#, fuzzy
-msgid "secret key parts are not available\n"
-msgstr "geheime sleutel niet beschikbaar"
-
-#: g10/seckey-cert.c:59
-#, fuzzy, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "beschermingsalgoritme %d wordt niet ondersteund\n"
-
-#: g10/seckey-cert.c:224
-#, fuzzy
-msgid "Invalid passphrase; please try again"
-msgstr "Foutieve sleuteltekst; probeer a.u.b. opnieuw ...\n"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr ""
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"LET OP: Kwetsbare sleutel gevonden - verander a.u.b. de sleuteltekst "
-"opnieuw.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"dit is een ElGamal sleutel van PGP, die NIET veilig is voor "
-"ondertekeningen!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "openbare sleutel is %lu seconde nieuwer dan de ondertekening\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "openbare sleutel is %lu seconden nieuwer dan de ondertekening\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"Sleutel is %lu seconden in de toekomst gemaakt (tijdsverschuiving of\n"
-"klokprobleem)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"sleutel is %lu seconden in de toekomst gemaakt (tijdsverschuiving of\n"
-"klokprobleem)\n"
-
-#: g10/sig-check.c:249
-#, fuzzy, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "LET OP: sleutel voor ondertekening %08lX is vervallen op %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "foutieve ondertekening aangenomen wegens een onbekende kritische bit\n"
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:303
-#, fuzzy, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "Kan ondertekening niet controleren: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s ondertekening van: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "kan %s niet aanmaken: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "LET OP: versleutelalgoritme %d niet gevonden in de voorkeuren\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "ondertekenen:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:1029
-#, fuzzy, c-format
-msgid "%s encryption will be used\n"
-msgstr "ontsleuteling mislukte: %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "kan tekstregels langer dan %d tekens niet aan\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "invoerregel langer dan %d tekens\n"
-
-# Untranslated.
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "trustdb rec %lu: lseed failed: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "trustdb rec %lu: write failed (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transactie naar vertrouwensdatabase te groot\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: kan er niet bij: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: map bestaat niet!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: kan hem niet vergrendelen\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, fuzzy, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: kan hem niet vergrendelen\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: kan hem niet aanmaken: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: aanmaken van versieveld lukte niet: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: foutieve vertrouwensdatabase aangemaakt\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: vertrouwensdatabase aangemaakt\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: ongeldige vertrouwensdatabase\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: kon frommeltabel niet aanmaken: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: fout bij het bijwerken van versieveld: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: fout bij het lezen van het versieveld: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: fout bij het schrijven van het versieveld: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "vertrouwensdatabase: lseek mislukte: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "vertrouwensdatabase: lezen mislukte (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: is geen vertrouwensdatabasebestand\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: versieveld met recnr %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: ongeldige bestandsversie %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: fout bij het lezen van een beschikbaar veld: %s\n"
-
-# dir?
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: fout bij het schrijven van indexveld: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: veld met nullen vullen lukte niet: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: kon geen veld toevoegen: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"de vertrouwensdatabase is beschadigd; draai a.u.b. \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, fuzzy, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "%s: ongeldig sleutelnummer\n"
-
-#: g10/trustdb.c:235
-#, fuzzy, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "sleutel %08lX: geaccepteerd als een betrouwbare sleutel.\n"
-
-#: g10/trustdb.c:274
-#, fuzzy, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "sleutel %08lX: kan niet toevoegen aan de vertrouwensdatabase\n"
-
-#: g10/trustdb.c:290
-#, fuzzy, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "sleutel %08lx: geen sleutel volgens rfc2240 - overgeslagen\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "vertrouwensveld %lu, req type %d: lezen mislukte: %s\n"
-
-#: g10/trustdb.c:338
-#, fuzzy, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "vertrouwensveld %lu: verwijderen mislukte: %s\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "vertrouwensveld %lu, type %d: schrijven mislukte: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "vertrouwensdatabase: synchronisatie mislukte: %s\n"
-
-#: g10/trustdb.c:468
-#, fuzzy
-msgid "no need for a trustdb check\n"
-msgstr "%s: is geen vertrouwensdatabasebestand\n"
-
-# Untranslated.
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, fuzzy, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "trustdb rec %lu: lseed failed: %s\n"
-
-#: g10/trustdb.c:779
-#, fuzzy
-msgid "checking the trustdb\n"
-msgstr "verander het vertrouwen in de eigenaar"
-
-#: g10/trustdb.c:933
-#, fuzzy, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "publieke sleutel niet gevonden"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"deze ondertekening kon niet worden gecontroleerd.\n"
-"Onthoud dat het bestand met de ondertekening (.sig of .asc) het eerste\n"
-"bestand van de commandoregel moet zijn.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "invoerregel %u is te lang, of ontbrekende LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"sleutel is niet als onveilig gemarkeerd - kan hem niet gebruiken met nep-"
-"RNG!\n"
-
-#: g10/skclist.c:157
-#, fuzzy, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "`%s' overgeslagen: dubbel\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "`%s' overgeslagen: %s\n"
-
-#: g10/skclist.c:168
-#, fuzzy
-msgid "skipped: secret key already present\n"
-msgstr "overgeslagen: geheime sleutel is al aanwezig\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"`%s' overgeslagen: dit is een ElGamal sleutel gemaakt door PGP, dit is\n"
-"niet veilig genoeg voor ondertekeningen!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Bestand `%s' bestaat al. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Overschrijven (j/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: onbekend achtervoegsel\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Geef een nieuwe bestandsnaam"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "naar standaard uitvoer schrijven\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "ik neem aan dat de getekende gegevens zich in `%s' bevinden\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: nieuw optiebestand aangemaakt\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: kan map niet aamaken: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: map aangemaakt\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"LET OP: dit bericht werd versleuteld met een zwakke sleutel in het\n"
-"symmetrische versleutelalgoritme.\n"
-
-#: g10/encr-data.c:98
-#, fuzzy
-msgid "problem handling encrypted packet\n"
-msgstr "plaats geen sleutelidentificatieveld in versleutelde pakketten"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "zwakke sleutel gemaakt - ik probeer het opnieuw\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"kon het aanmaken van een zwakke sleutel voor het symmetrische\n"
-"algoritme niet voorkomen; ik heb het %d keer geprobeerd!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "kan dat niet doen in lopende band-mode zonder \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Deze sleutel van de sleutelbos verwijderen? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Dit is een geheime sleutel! - echt verwijderen? "
-
-#: g10/delkey.c:168
-#, fuzzy, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "nummeren van de sleutelblokken mislukte: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, fuzzy, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "er is een geheime sleutel voor deze openbare sleutel!\n"
-
-#: g10/delkey.c:208
-#, fuzzy
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr ""
-"gebruik eerst de optie \"--delete-secret-key\" om hem te verwijderen.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Het is aan u om hier een waarde te geven; deze waarde zal nooit\n"
-"weggegeven worden aan derden. We hebben het nodig om het\n"
-"netwerk-van-vertrouwen op te bouwen; het heeft niets te maken met het\n"
-"netwerk-van-certificaten (dat automatisch gemaakt wordt)."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Als u dit desondanks toch wilt intrekken, antwoord dan \"ja\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Als u deze onbetrouwbare sleutel toch wilt gebruiken, antwoord dan \"ja\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Geef de identificatie van de ontvangende gebruiker."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Selecteer het te gebruiken algoritme.\n"
-"\n"
-"DSA (ook wel DSS) is het `Digital Signature Algoritm' dat alleen\n"
-"gebruikt kan worden voor ondertekeningen. Dit heeft de voorkeur omdat\n"
-"controle van DSA ondertekeningen veel sneller gaan dan van ElGamal.\n"
-"\n"
-"ElGamal is een algoritme dat gebruikt kan worden voor ondertekening en\n"
-"versleuteling. OpenPGP maakt een onderscheid tussen de twee varianten\n"
-"van dit algoritme: alleen versleutelen en versleutelen+tekenen; het is\n"
-"in werkelijkheid het zelfde, maar sommige parameters moeten speciaal\n"
-"gezet worden voor de aanmaak van een veilige sleutel voor\n"
-"ondertekeningen: dit programma doet dit, maar andere OpenPGP\n"
-"implementaties zijn niet verplicht om de versleutelen+tekenen-variant\n"
-"te ondersteunen.\n"
-"\n"
-"De eerste (primaire) sleutel moet altijd een sleutel zijn waarmee\n"
-"ondertekend kan worden; om deze reden is de ElGamal sleutel voor\n"
-"alleen versleutelen niet aanwezig in dit menu."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Hoewel deze sleutels gedefinieerd zijn in RFC2440, worden ze niet\n"
-"aangeraden om dat ze niet ondersteund worden door alle programma's, en\n"
-"ondertekeningen die ermee gemaakt zijn, zijn behoorlijk groot en traag\n"
-"te verifiëren."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Geef de sleutelgrootte"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Antwoord met \"ja\" of \"nee\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Geef de verwachtte waarde zoals aangegeven in de prompt.\n"
-"Het is mogelijk om een ISO datum (JJJJ-MM-DD) op te geven, maar u zult\n"
-"dan geen goede foutafhandeling krijgen, inplaats daarvan zal het\n"
-"systeem deze waarde proberen te interpreteren als een interval."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Geef de naam van de eigenaar van de sleutel"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "geef a.u.b. een optioneel maar aan te raden e-mail adres."
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Geef eventueel een kanttekening"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N om de naam te veranderen.\n"
-"C om het kommentaar te veranderen.\n"
-"E om het e-mail adres te veranderen.\n"
-"O om door te gaan met de sleutelgeneratie.\n"
-"Q om te stoppen met de sleutelgeneratie."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Antwoord met \"ja\" (of alleen \"j\") om een subsleutel aan te maken."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Antwoord met \"ja\" als u ALLE gebruikersidentificaties wilt tekenen"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Antwoord \"ja\" indien u deze gebruiker echt wilt verwijderen.\n"
-"Alle certificaten gaan dan ook verloren!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Antwoord met \"ja\" als het goed is om de subsleutel te verwijderen"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Dit is een geldige ondertekening van de sleutel; u hoeft deze normaal\n"
-"gesproken niet te verwijderen, omdat het misschien een vertrouwens-\n"
-"relatie met deze of een andere sleutel verstoort, die getekend is met\n"
-"deze sleutel."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Deze ondertekening kan niet gecontroleerd worden omdat u de\n"
-"bijbehorende sleutel niet heeft. U kunt het verwijderen beter\n"
-"uitstellen totdat u weet welke sleutel gebruikt was, omdat het\n"
-"ondertekenen met deze sleutel misschien een vertrouwensband kan\n"
-"scheppen met een andere, al getekende, sleutel."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"De ondertekening is ongeldig. Het is zinnig om deze uit de sleutelbos\n"
-"te verwijderen."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Dit is een ondertekening die de gebruikersidentificatie met de sleutel\n"
-"verbindt. Het is meestal geen goed idee om zo'n ondertekening te\n"
-"verwijderen. Wellicht is GnuPG zelfs niet meer in staat om de sleutel\n"
-"hierna te gebruiken. Dus doe dit alleen als de zelfondertekening om de\n"
-"een of andere reden niet geldig is, en een tweede beschikbaar is."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-
-#: g10/helptext.c:244
-#, fuzzy
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr ""
-"Geef a.u.b. een sleuteltekst; dit is een geheime zin\n"
-" blabla, blablabla, ..."
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Herhaal a.u.b. de voorgaande sleuteltekst, zodat u zeker weet wat u ingetypt "
-"heeft."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Geef de naam van het bestand waaraan de ondertekening toebehoort"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Antwoord \"ja\" als het goed is om het bestand te overschrijven"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Geef a.u.b. een nieuwe bestansnaam. Als u op RETURN drukt, wordt de\n"
-"standaard bestandsnaam (tussen blokhaken weergegeven) gebruikt."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Geen hulp beschikbaar"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Geen hulp beschikbaar voor `%s'"
-
-#: g10/keydb.c:178
-#, fuzzy, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "fout bij schrijven van de sleutelbos `%s': %s\n"
-
-#: g10/keydb.c:185
-#, fuzzy, c-format
-msgid "keyring `%s' created\n"
-msgstr "%s: sleutelbos aangemaakt\n"
-
-#: g10/keydb.c:575
-#, fuzzy, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "%s: kon frommeltabel niet aanmaken: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "LET OP: er zijn 2 bestanden met vertrouwelijke informatie.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s is de onveranderde\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s is de nieuwe\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Dicht dit mogelijke beveiligingsgat\n"
-
-#: g10/keyring.c:1346
-#, fuzzy, c-format
-msgid "checking keyring `%s'\n"
-msgstr "fout bij schrijven van de sleutelbos `%s': %s\n"
-
-#: g10/keyring.c:1377
-#, fuzzy, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu sleutels zijn tot nu toe behandeld\n"
-
-#: g10/keyring.c:1388
-#, fuzzy, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "sleutels en ondertekeningen opnoemen"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: sleutelbos aangemaakt\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "u moet GnuPG opnieuw starten, zodat het het nieuwe optiebestand kan "
-#~ "inlezen\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Vingerafdruk:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Vingerafdruk:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NAAM=WAARDE|gebruik deze notitiegegevens"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "het eerste teken van een notitienaam moet een letter of laag liggend "
-#~ "steepje zijn\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "punten in notitienamen moeten omgeven zijn door andere tekens\n"
-
-#, fuzzy
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? "
-
-#, fuzzy
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr "Weet je zeker dat je deze sleutellengte wilt gebruiken? "
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Echt tekenen? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "sleutel %08lX: onze versie heeft geen zelfondertekening\n"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Heb je echt een sleutel nodig die zo lang is? "
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " getekend door %08lX op %s\n"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key gebruikersidentificatie"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key gebruikersidentificatie"
-
-#, fuzzy
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key gebruikersidentificatie"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Geef de gebruikersidentificatie: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "overgeslagen: openbare sleutel is al ingesteld met --encrypt-to\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "\n"
-#~ "WARNING: This is a PGP2-style key\n"
-#~ msgstr "LET OP: `%s' is een leeg bestand\n"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "sSmMqQ"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "geen sleutelserver bekend (gebruik de optie --keyserver)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: ongeldig sleutelnummer\n"
-
-#, fuzzy
-#~ msgid "duplicate (short) key ID %08lX\n"
-#~ msgstr "openbare sleutel is %08lX\n"
-
-#, fuzzy
-#~ msgid "%lu key(s) to refresh\n"
-#~ msgstr " %lu sleutels met fouten\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NAMEN]|controleer de vertrouwensdatabase"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Kon geen pad vinden dat leidt tot vertrouwen van de sleutel. Laten we\n"
-#~ "eens proberen of we wat missende waarden kunnen invullen.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Geen pad gevonden dat leidt naar een van onze sleutels.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Geen certificaten gevonden zonder betrouwbaarheidswaarden.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Betrouwbaarheidswaarden zijn niet veranderd.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr "%08lx: geen informatie om een betrouwbaarheidskans te berekenen\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: fout tijdens controleren van de sleutel: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "te veel ingangen in de unk cache - uitgezet\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "bijwerken van de vertrouwensdatabase ging niet goed: %s\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "foutieve MDC aangenomen wegens een onbekende kritische bit\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "fout tijdens lezen van indexveld voor LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: verwachtte indexveld, kreeg type %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "geen pimaire sleutel voor LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "fout tijdens het lezen van primaire sleutel voor LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record mislukte: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "sleutel %08lX: opvragen van veld mislukte\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "sleutel %08lX: reeds aanwezig in de betrouwbare sleutel-tabel\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "LET OP: geheime sleutel %08lX is NIET beveiligd.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "sleutel %08lX: geheime en openbare sleutel horen niet bij elkaar\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "nummeren van de geheime sleutels mislukte: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "sleutel %08lX.%lu: Goede subsleutelbinding\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "sleutel %08lX.%lu: Foutieve subsleutelbinding: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "sleutel %08lX.%lu: Geldige sleutelterugtrekking\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "sleutel %08lX.%lu: Ongeldige sleutelterugtrekking: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Correcte zelfondertekening"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Ongeldige zelfondertekening"
-
-# User ID onvertaald
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Geldig terugtrekkingscertificaat overgeslagen wegens een nieuwere "
-#~ "zelfondertekening"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Geldig terugtrekkingscertificaat voor gebruiker"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Ongeldig terugtrekkingscertificaat voor gebruiker"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Geldige terugtrekking van certificaat"
-
-#~ msgid "Good certificate"
-#~ msgstr "Correct certificaat"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Ongeldige terugtrekking van certificaat"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Ongeldig certificaat"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "ondert. veld %lu[%d] wijst naar een verkeerd veld.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "dubbel certificaat - verwijderd"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir mislukte: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: invoegen mislukte: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: invoegen mislukte: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: ingevoegd\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "fout bij het lezen van indexveld: %s\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr " %lu sleutels ingevoegd\n"
-
-#~ msgid "enumerate keyblocks failed: %s\n"
-#~ msgstr "nummeren van de sleutelblokken mislukte: %s\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: indexveld zonder sleutel - overgeslagen\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr " %lu vanwege nieuwe openbare sleutels\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr " %lu sleutels overgeslagen\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr " %lu sleutels bijgewerkt\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Ooeeps, geen sleutels\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Ooeeps, geen gebruikersidentificaties\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: zoeken naar indexveld mislukte: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "sleutel %08lX: invoegen van vertrouwensveld mislukte: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "sleutel %08lX.%lu: ingevoegd in de vertrouwensdatabase\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "sleutel %08lX.%lu: aangemaakt in de toekomst (tijdsverschuiving of "
-#~ "klokprobleem)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "sleutel %08lX.%lu: vervallen op %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "sleutel %08lX.%lu: betrouwbaarheidscontrole mislukt: %s\n"
-
-#~ msgid "user '%s' not found: %s\n"
-#~ msgstr "gebruiker `%s' niet gevonden: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "kon `%s' niet opzoeken in de vertrouwensdatabase: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr ""
-#~ "gebruiker '%s' komt niet voor in de vertrouwensdatabase - invoegen\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "kon '%s' niet invoegen in de vertrouwensdatabase: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr ""
-#~ "Wilt u echt een sleutel maken om mee te ondertekenen en versleutelen? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: gebruiker niet gevonden: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "leesprobleem voor certificaat: %s\n"
-
-#~ msgid "can't lock keyring `%s': %s\n"
-#~ msgstr "kan sleutelbos `%s' niet vergrendelen: %s\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: gebruiker niet gevonden\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr "LET OP: kan nog geen lange voorkeursblokken verwerken\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: kan sleutelbos niet aanmaken: %s\n"
-
-#, fuzzy
-#~ msgid "invalid"
-#~ msgstr "ongeldige versleuteling"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "RSA sleutel kan niet gebruikt worden in deze versie\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Geen sleutel voor gebruikersidentificatie\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Geen gebruikersidentificatie voor sleutel\n"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "geheime sleutel voor ontsleuteling is niet beschikbaar\n"
-
-#~ msgid ""
-#~ "RSA keys are deprecated; please consider creating a new key and use this "
-#~ "key in the future\n"
-#~ msgstr ""
-#~ "RSA sleutels zijn verouderd; overweeg a.u.b. het aanmaken van een\n"
-#~ "nieuwe sleutel om in de toekomst te gebruiken\n"
-
-#~ msgid "set debugging flags"
-#~ msgstr "zet afluistervlaggen"
-
-#~ msgid "enable full debugging"
-#~ msgstr "sta volledige aflustering toe"
-
-#~ msgid "do not write comment packets"
-#~ msgstr "schrijf geen commentaarpakketten"
-
-#~ msgid "(default is 1)"
-#~ msgstr "(standaard is 1)"
-
-#~ msgid "(default is 3)"
-#~ msgstr "(standaard is 3)"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr " (%d) ElGamal in een v3 pakket\n"
-
-#~ msgid "Key generation can only be used in interactive mode\n"
-#~ msgstr "Sleutelgeneratie kan alleen gebruikt worden in interactieve modus\n"
diff --git a/po/pl.po b/po/pl.po
deleted file mode 100644
index 5557177d3..000000000
--- a/po/pl.po
+++ /dev/null
@@ -1,5358 +0,0 @@
-# Gnu Privacy Guard.
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-# Janusz A. Urbanowicz <alex@bofh.net.pl>, 1999, 2000, 2001, 2002.
-#
-# To be included in GnuPG 1.0.7
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg-1.0.6\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-04-28 02:44+02: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"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Ostrze¿enie: u¿ywana pamiêæ nie jest pamiêci± bezpieczn±!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "obja¶nienie mo¿na przeczytaæ tutaj: http://www.gnupg.org/faq.html\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "operacja niemo¿liwa do wykonania bez dostêpnej pamiêci bezpiecznej\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(prawdopodobnie u¿ywany program jest niew³a¶ciwy dlatego zadania)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "tak"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "tT"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "nie"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "wyj¶cie"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "wW"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "b³±d ogólny"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "nieznany rodzaj pakietu"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "nieznana wersja"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "nieznany algorytm klucza publicznego"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "nieznany algorytm skrótu"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "niepoprawny klucz publiczny"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "niepoprawny klucz tajny"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "niepoprawny podpis"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "b³±d sumy kontrolnej"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "niepoprawne d³ugie has³o."
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "brak klucza publicznego."
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "nieznany algorytm szyfruj±cy"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "otwarcie zbioru kluczy jest niemo¿liwe"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "niepoprawny pakiet"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "b³±d w opakowaniu ASCII."
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "brak takiego identyfikatora u¿ytkownika."
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "brak klucza tajnego."
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "zosta³ u¿yty niew³a¶ciwy klucz tajny"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "nie jest obs³ugiwany"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "niepoprawny klucz."
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "b³±d przy odczycie pliku."
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "b³±d przy zapisie pliku."
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "nieznany algorytm kompresji"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "b³±d przy otwieraniu pliku."
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "b³±d przy tworzeniu pliku"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "niepoprawne d³ugie has³o"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algorytm szyfrowania z kluczem publicznym nie jest zaimplementowany"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algorytm szyfruj±cy nie jest zaimplementowany"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "nieznana klasa podpisu"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "b³±d w bazie zaufania."
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "b³±d MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "ograniczenie zasobów"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "b³±d w zbiorze kluczy"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "niepoprawny certyfikat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "b³±d formatu identyfikatora u¿ytkownika"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "b³±d przy zamykaniu pliku"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "b³±d przy zmianie nazwy pliku"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "b³±d przy usuwaniu pliku"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "nieoczekiowane dane"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "konflikt znaczników czasu"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "nieu¿yteczny algorytm z kluczem publicznym"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "plik ju¿ istnieje"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "klucz s³aby"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "b³êdny argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "niepoprawny URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI nie jest obs³ugiwany"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "b³±d sieci"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "nie zaszyfrowany"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "nie zosta³ przetworzony"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "bezu¿yteczny klucz publiczny"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "bezu¿yteczny klucz tajny"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "b³±d serwera kluczy"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... to jest b³±d w programie (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "znalaz³e¶(a¶) b³±d w programie ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "nie mo¿na otworzyæ %s: %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "nie mo¿na sprawdziæ %s: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "'%s' nie jest zwyk³ym plikiem - zostaje pominiêty\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "uwaga: plik random_seed jest pusty\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"ostrze¿enie: plik random_seed ma niew³a¶ciwy rozmiar - nie zostanie u¿yty\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "nie mo¿na odczytaæ %s: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "uwaga: plik random_seed nie jest uaktualniony\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "nie mo¿na stworzyæ %s: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "nie mo¿na zapisaæ %s: %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "nie mo¿na zamkn±æ %s: %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr ""
-"OSTRZE¯ENIE: u¿ywany generator liczb losowych\n"
-"nie jest kryptograficznie bezpieczny!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"U¿ywany generator liczb losowych jest atrap± wprowadzon± dla umo¿liwienia\n"
-"normalnej kompilacji - nie jest kryptograficznie bezpieczny!\n"
-"\n"
-"JAKIEKOLWIEK DANE GENEROWANE PRZEZ TEN PROGRAM NIE NADAJ¡ SIÊ DO \n"
-"NORMALNEGO U¯YTKU I NIE ZAPEWNIAJ¡ BEZPIECZEÑSTWA!!\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Brakuje mo¿liwo¶ci wygenerowania odpowiedniej liczby losowych bajtów.\n"
-"Proszê kontynuowaæ inne dzia³ania aby system móg³ zebraæ odpowiedni±\n"
-"ilo¶æ entropii do ich wygenerowania (brakuje %d bajtów).\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Polecenia:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[plik]|z³o¿enie podpisu"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[plik]|z³o¿enie podpisu na czytelnym dokumencie"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "z³o¿enie podpisu oddzielonego od dokumentu"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "szyfrowanie danych"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[pliki]|szyfrowanie plików"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "szyfrowanie tylko szyfrem symetrycznym"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "tylko zapis danych w formacie OpenPGP"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "odszyfrowywanie danych (domy¶lnie)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[pliki]|odszyfrowywanie plików"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "sprawdzenie podpisu"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "lista kluczy"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "lista kluczy i podpisów"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "sprawdzenie podpisów kluczy"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "lista kluczy i ich odcisków"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "lista kluczy tajnych"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "generacja nowej pary kluczy"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "usuniêcie klucza ze zbioru kluczy publicznych"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "usuniêcie klucza ze zbioru kluczy tajnych"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "z³o¿enie podpisu na kluczu"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "z³o¿enie prywatnego podpisu na kluczu"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr ""
-"z³o¿enie na kluczu podpisu nie podlegaj±cego \n"
-"uniewa¿nieniu"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr ""
-"z³o¿enie na kluczu podpisu prywatnego,\n"
-"nie podlegaj±cego uniewa¿nieniu"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "podpisanie lub modyfikacja klucza"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "tworzenie certyfikatu uniewa¿nienia klucza"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "eksport kluczy do pliku"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "eksport kluczy do serwera kluczy"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "import kluczy z serwera kluczy"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "szukanie kluczy na serwerze"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "od¶wie¿enie kluczy z serwera"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "import/do³±czenie kluczy"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "wypisane sekwencji pakietów"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "eksport warto¶ci zaufania"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "wczytanie warto¶æi zaufania"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "uaktualnienie bazy zaufania"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "automatyczne uaktualnienie bazy zaufania"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "naprawa uszkodzonej bazy zaufania"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "zdjêcie opakowania ASCII pliku lub potoku"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "opakowanie ASCII pliku lub potoku"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [pliki]|skróty wiadomo¶ci"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opcje:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "plik wynikowy w opakowaniu ASCII"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NAZWA|szyfrowanie dla odbiorcy NAZWA"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NAZWA|u¿ycie NAZWA jako domy¶lnego adresata"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "domy¶lny klucz jest domy¶lnym adresatem"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "identyfikator do podpisania lub odszyfrowania"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|poziom kompresji N (0 - brak)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "kanoniczny format tekstowy"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "plik wyj¶ciowy"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "z informacjami dodatkowymi"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "mniej komunikatóww"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "bez odwo³añ do terminala"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "wymuszenie trzeciej wersji formatu podpisów"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "bez wymuszania trzeciej wersji formatu podpisów"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "wymuszenie czwartej wersji formatu podpisów"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "bez wymuszania czwartej wersji formatu podpisów"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "do szyfrowania bêdzie u¿ywany MDC"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "do szyfrowania nie zostanie u¿yty MDC"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "pozostawienie bez zmian"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "wykorzystanie gpg-agenta"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "tryb wsadowy: ¿adnych pytañ"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "automatyczna odpowied¼ tak na wiêkszo¶æ pytañ"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "automatyczna odpowied¼ nie na wiêkszo¶æ pytañ"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "dodaæ zbiór kluczy do listy u¿ywanych"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "dodaæ zbiór kluczy tajnych do listy"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "okazanie, w którym zbiorze kluczy znajduje siê dany klucz"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NAZWA|u¿ycie NAZWA jako domy¶lnego klucza tajnego"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|HOST|serwer kluczy w którym bêd± poszukiwane"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAZWA|zestaw znaków terminala NAZWA"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "wczytanie opcji z pliku"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|zapisaæ opis stanu do FD"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[plik]|zapisaæ opis stanu do pliku"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KLUCZ|klucz ca³kowicie zaufany"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|PLIK|³adowanie modu³u rozszerzenia z PLIK"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emulacja trybu opisanego w RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "tryb zgodno¶ci formatu pakietów, szyfrów i skrótów z OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "tryb zgodno¶ci formatów, szyfrów i skrótów z PGP 2.x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|N-ty tryb obliczania has³a"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|ALG|algorytm skrótu dla has³a ALG"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|ALG|algorytmu szyfruj±cy ALG dla has³a"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NAZWA|algorytm szyfruj±cy NAZWA"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NAZWA|algorytm obliczania skrótów wiadomo¶ci NAZWA"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|algorytm kompresji N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "usuniêcie numerów kluczy adresatów z zaszyfrowanych pakietów"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "okazanie identyfikatora - zdjêcia u¿ytkownika"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "bez pokazywania zdjêæ"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "polecenie wywo³ania przegl±darki do zdjêæ"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Pe³n± listê poleceñ i opcji mo¿na znale¼æ w podrêczniku systemowym.)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Przyk³ady:\n"
-"\n"
-" -se -r Bob [plik] podpisaæ i zaszyfrowaæ kluczem Boba\n"
-" --clearsign [plik] podpisaæ z pozostawieniem czytelno¶ci dokumentu\n"
-" --detach-sign [plik] podpisaæ z umieszczeniem podpisu w osobnym "
-"pliku\n"
-" --list-keys [nazwy] pokazuje klucze\n"
-" --fingerprint [nazwy] pokazuje odciski kluczy\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "B³êdy prosimy zg³aszaæ na adres <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Wywo³anie: gpg [opcje] [pliki] (-h podaje pomoc)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sk³adnia: gpg [opcje] [pliki]\n"
-"podpisywanie, sprawdzanie podpisów, szyfrowanie, deszyfrowanie\n"
-"domy¶lnie wykonywana operacja zale¿y od danych wej¶ciowych\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Obs³ugiwane algorytmy:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "wywo³anie: gpg [opcje]"
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "sprzeczne polecenia\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Ostrze¿enie: niebezpieczne prawa w³asno¶ci do %s \"%s\".\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Ostrze¿enie: niebezpieczne prawa dostêpu do %s \"%s\".\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Ostrze¿enie: niebezpieczne prawa w³asno¶ci do %s \"%s\".\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Ostrze¿enie: niebezpieczne prawa dostêpu do %s \"%s\".\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "UWAGA: brak domy¶lnego pliku opcji '%s'\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "UWAGA: brak domy¶lnego pliku opcji '%s'\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "plik opcji '%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "odczyt opcji z '%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s nie jest poprawn± nazw± zestawu znaków\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "niezrozuma³y URI serwera kluczy\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "OSTRZE¯ENIE: '%s' jest przestarza³± opcj±.\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "b³±d w opakowaniu ASCII."
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "OSTRZE¯ENIE: '%s' jest przestarza³± opcj±.\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "b³±d w zbiorze kluczy"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "nie mo¿na ustawiæ ¶cie¿ki programów wykonywalnych na %s\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "OSTRZE¯ENIE: program mo¿e stworzyæ plik zrzutu pamiêci!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "OSTRZE¯ENIE: %s powoduje obej¶cie %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "UWAGA: %s nie jest do normalnego u¿ytku!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "Nie wolno u¿ywaæ %s z %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s nie ma sensu z %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-"w trybie --pgp2 mo¿na sk³adaæ tylko podpisy oddzielne lub do³±czone do "
-"tekstu\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "w trybie --pgp2 nie mo¿na jednocze¶nie szyfrowaæ i podpisywaæ\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "w trybie --pgp2 trzeba u¿ywaæ plików a nie potoków.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "szyfrowanie wiadomo¶ci w trybie --pgp2 wymaga modu³u szyfru IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "tej wiadomo¶ci mo¿e nie daæ siê odczytaæ za pomoc± PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "wybrany algorytm szyfruj±cy jest niepoprawny\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "wybrany algorytm geenracji skrótów wiadomo¶ci jest niepoprawny\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "wybrany algorytm geenracji skrótów wiadomo¶ci jest niepoprawny\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "ustawienie algortytmu kompresji musi pochodziæ z zakresu %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "warto¶æ completes-needed musi byæ wiêksza od 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "warto¶æ marginals-needed musi byæ wiêksza od 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "warto¶æ max-cert-depth musi mie¶ciæ siê w zakresie od 1 do 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "UWAGA: prosty tryb S2K (0) jest stanowczo odradzany\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "niepoprawny tryb S2K; musi mieæ warto¶æ 0, 1 lub 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr ""
-"niew³a¶ciwy domy¶lny poziom sprawdzania; musi mieæ warto¶æ 0, 1 lub 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "niew³a¶ciwe ustawienia\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "niew³a¶ciwe ustawienia\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "niew³a¶ciwe ustawienia\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "niew³a¶ciwe ustawienia\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "inicjowanie Bazy Zaufania nie powiod³o siê: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [plik]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [plik]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [plik]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [plik]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [plik]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [plik]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [plik]\""
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [plik]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key nazwa u¿ytkownika"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key nazwa u¿ytkownika"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key nazwa u¿ytkownika"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrsign-key nazwa u¿ytkownika"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key nazwa u¿ytkownika [polecenia]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "nie mo¿na otworzyæ %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [identyfikator] [zbiór kluczy]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "zdjêcie opakowania ASCII nie powiod³o siê: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "opakowywanie ASCII nie powiod³o siê: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "niew³a¶ciwy algorytm skrótu ,%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nazwa pliku]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Wpisz tutaj swoj± wiadomo¶æ ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "nie mo¿na otworzyæ ,%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"nazwa adnotacji mo¿e zawieraæ tylko litery, cyfry, kropki,\n"
-"podkre¶lenia, i musi koñczyæ siê ,='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "warto¶æ adnotacji nie mo¿e zawieraæ znaków steruj±cych\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "podany URL regulaminu certyfikacji jest niepoprawny\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "podany URL regulaminu podpisów jest niepoprawny\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "opakowanie: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "niepoprawny nag³ówek opakowania: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "nag³ówek opakowania: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "niew³a¶ciwy nag³ówek czytelnego podpisanego dokumentu\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "zagnie¿d¿one podpisy na czytelnym dokumencie\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "niepoprawne oznaczenie linii minusami: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "nieoczekiwane opakowanie:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "niew³a¶ciwy znak formatu radix64 %02x zosta³ pominiêty\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "przewczesny koniec pliku (brak CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "przedwczesny koniec pliku (w CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "b³±d formatu CRC\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "B³±d sumy CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "przedwczesny koniec pliku (w linii koñcz±cej)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "b³±d w linii koñcz±cej\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "b³±d opakowania: linia d³u¿sza ni¿ %d znaków\n"
-
-#: g10/armor.c:1066
-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:61
-msgid "No reason specified"
-msgstr "Nie podano przyczyny"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Klucz zosta³ zast±piony"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Klucz zosta³ skompromitowany"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Klucz nie jest ju¿ u¿ywany"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Identyfikator u¿ytkownika przesta³ byæ poprawny"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Powód uniewa¿nienia: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Komentarz do uniewa¿nienia: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMwWpP"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Brak warto¶ci zaufania dla:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Zastanów siê jak bardzo ufasz temu u¿ytkownikowi w kwestii sprawdzania\n"
-"to¿samo¶ci innych w³a¶cicieli kluczy (czy sprawdzi on odciski klucza \n"
-"pobrane z ró¿nych ¼róde³, dokumenty potwierdzaj±ce to¿samo¶æ, itd.)?\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = nie wiem\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = NIE ufam mu\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = mam ograniczone zaufanie\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = mam pe³ne zaufanie\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = ufam absolutnie\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = potrzebujê wiêcej informacji\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = powrót do g³ównego menu\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " p = pominiêcie klucza\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " w = wyj¶cie\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Twoja decyzja? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Czy na pewno chcesz przypisaæ absolutne zaufanie temu kluczowi? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certyfikaty prowadz±ce do ostatecznie zaufanego klucza:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "klucz %08lX: klucz zosta³ uniewa¿niony!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "U¿yæ tego klucza pomimo to? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "klucz %08lX: podklucz zosta³ uniewa¿niony!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: data wa¿no¶ci klucza up³ynê³a\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr "%08lX: Nie ma pewno¶ci co do to¿samo¶ci w³a¶ciciela klucza.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: NIE UFAMY temu kluczowi\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Nie ma pewne, do do kogo nale¿y ten klucz, ale jest akceptowalny.\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Ten klucz prawdopodobnie nale¿y do tej osoby.\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Ten klucz nale¿y do nas\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"NIE MA pewno¶ci, do kogo nale¿y ten klucz. Je¶li nie masz co do\n"
-"tego ¿adnych w±tpliwo¶ci i *naprawdê* wiesz co robisz mo¿esz\n"
-"odpowiedzieæ \"tak\" na nastêpne pytanie.\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "OSTRZE¯ENIE: u¿ywany jest klucz nie obdarzony zaufaniem!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "OSTRZE¯ENIE: Ten klucz zosta³ uniewa¿niony przez w³a¶ciciela!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " To mo¿e oznaczaæ ¿e podpis jest fa³szerstwem.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "OSTRZE¯ENIE: Ten podklucz zosta³ uniewa¿niony przez w³a¶ciciela!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Uwaga: Ten klucz zosta³ wy³±czony z u¿ytku\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Uwaga: Data wa¿no¶ci tego klucza up³ynê³a!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "OSTRZE¯ENIE: Ten klucz nie jest po¶wiadczony zaufanym podpisem!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Nie ma pewno¶ci co do to¿samo¶ci osoby która z³o¿y³a podpis.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "OSTRZE¯ENIE: NIE UFAMY temu kluczowi!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Ten podpis prawdopodobnie jest FA£SZERSTWEM.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"OSTRZE¯ENIE: Tego klucza nie po¶wiadczaj± wystarczaj±c zaufane podpisy!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr ""
-" Nie ma pewno¶ci co do to¿samo¶ci osoby która z³o¿y³a ten "
-"podpis.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: pominiêty: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: pominiêty: zosta³ ju¿ wybrany\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Nie zosta³ podany identyfikatora u¿ytkownika (np za pomoc± ,,-r'')\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Identyfikator u¿ytkownika (pusta linia oznacza koniec): "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Brak takiego identyfikatora u¿ytkownika.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "pominiêty: klucz publiczny ju¿ jest domy¶lnym adresatem\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Klucz publiczny wy³±czony z uzycia.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "pominiêty: zosta³ ju¿ wybrany\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "nieznany domy¶lny adresat '%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: pominiêty: klucz publiczny wy³±czony z u¿ycia\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "brak poprawnych adresatów\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "ustawienie %c%lu jest niepoprawne\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "ustawienie %c%lu powtarza siê\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "zbyt wiele `%c' ustawieñ\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "niew³a¶ciwy znak w tek¶cie ustawieñ\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "zapis podpisu klucza nim samym\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "zapis podpisu klucza nim samym\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "zapis podpisu wi±¿±cego klucz\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "niew³a¶ciwa d³ugo¶æ klucza; wykorzystano %u bitów\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "rozmair klucza zaokr±glony do %u bitów\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Proszê wybraæ rodzaj klucza:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) Para kluczy dla algorytmów DSA i ElGamala (domy¶lne)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (tylko do podpisywania)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowania)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (tylko do podpisywania)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (tylko do szyfrowania)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) Klucz dla algorytmu RSA (do szyfrowania i podpisywania)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Twój wybór? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "U¿ywanie tego algorytmu jest odradzane - tworzyæ mimo to? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Niew³a¶ciwy wybór.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Nast±pi generacja nowej pary kluczy dla algorytmu(ów) %s.\n"
-" minimalny rozmiar klucza wynosi 768 bitów\n"
-" domy¶lny rozmiar klucza wynosi 1024 bity\n"
-" najwiêkszy sugerowany rozmiar klucza wynosi 2048 bitów\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Jakiej d³ugo¶ci klucz wygenerowaæ? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "Klucz dla DSA musi mieæ d³ugo¶æ pomiêdzy 512 i 1024 bitow.\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr ""
-"D³ugo¶æ klucza zbyt ma³a; minimalna dopuszczalna dla RSA wynosi 1024 bity.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "D³ugo¶æ klucza zbyt ma³a; minimalna dopuszczona wynosi 768 bitów.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "zbyt du¿y rozmiar klucza, ograniczenie wynosi %d.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Klucze d³u¿sze ni¿ 2048 bitów s± odradzane, poniewa¿ obliczenia\n"
-"trwaj± wtedy BARDZO d³ugo!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Na pewno wygenerowaæ klucz takiej d³ugo¶ci? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Nale¿y tak¿e pamiêtaæ o tym, ¿e informacje mog± byæ te¿ wykradzione z\n"
-"komputera przez pods³uch emisji elektromagnetycznej klawiatury i monitora!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "¯±dana d³ugo¶æ klucza to %u bity.\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "zaokr±glono do %u bitów\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Okres wa¿no¶æi klucza.\n"
-" 0 = klucz nie ma okre¶lonego terminu wa¿no¶ci\n"
-" <n> = termin wa¿no¶ci klucza up³ywa za n dni\n"
-" <n>w = termin wa¿no¶ci klucza up³ywa za n tygodni\n"
-" <n>m = termin wa¿no¶ci klucza up³ywa za n miesiêcy\n"
-" <n>y = termin wa¿no¶ci klucza up³ywa za n lat\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Okres wa¿no¶æi podpisu.\n"
-" 0 = klucz nie ma okre¶lonego terminu wa¿no¶ci\n"
-" <n> = termin wa¿no¶ci podpisu up³ywa za n dni\n"
-" <n>w = termin wa¿no¶ci podpisu up³ywa za n tygodni\n"
-" <n>m = termin wa¿no¶ci podpisu up³ywa za n miesiêcy\n"
-" <n>y = termin wa¿no¶ci podpisu up³ywa za n lat\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Okres wa¿no¶ci klucza ? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Okres wa¿no¶ci podpisu? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "niepoprawna warto¶æ\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s nie ma daty wa¿no¶ci (nie traci wa¿no¶ci z up³ywem czasu).\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s traci wa¿no¶æ: %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Twój system nie potrafi pokazaæ daty po roku 2038.\n"
-"Niemniej daty do roku 2106 bêd± poprawnie obs³ugiwane.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Dane poprawne (t/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Musisz okre¶liæ identyfikator u¿ytkownika aby mo¿na by³o rozpoznaæ twój\n"
-"klucz; program z³o¿y go z twojego imienia i nazwiska, komentarza i adresu\n"
-"poczty elektronicznej. Bêdzie on mia³ tak± postaæ:\n"
-" \"Tadeusz ¯eleñski (Boy) <tzb@domena.pl>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Imiê i nazwisko: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Niew³a¶ciwy znak w imieniu lub nazwisku\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Imiê lub nazwisko nie mo¿e zaczynaæ siê od cyfry\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Imiê i nazwisko musz± mieæ conajmniej 5 znaków d³ugo¶ci.\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Adres poczty elektronicznej: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "To nie jest poprawny adres poczty elektronicznej\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Komentarz: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Niew³a¶ciwy znak w komentarzu\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "U¿ywasz zestawu znaków %s.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Twój identyfikator u¿ytkownika bêdzie wygl±da³ tak:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-"Nie nalezy umieszczaæ adresu poczty elektronicznej w polu nazwiska czy\n"
-"komentarza.\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "IiKkEeDdWw"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr ""
-"Zmieniæ (I)miê/nazwisko, (K)omentarz, adres (E)mail, \n"
-"czy (W)yj¶æ? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr ""
-"Zmieniæ (I)miê/nazwisko, (K)omentarz, adres (E)mail, \n"
-"przej¶æ (D)alej czy (W)yj¶æ z programu ? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Najpierw trzeba poprawiæ ten b³±d\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Musisz podaæ d³ugie, skomplikowane has³o aby ochroniæ swój klucz tajny.\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "has³o nie zosta³o poprawnie powtórzone; jeszcze jedna próba"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Nie chcesz podaæ has³a - to *z³y* pomys³!\n"
-"W ka¿dej chwili mo¿esz ustawiæ has³o u¿ywaj±c tego programu i opcji\n"
-"\"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Musimy wygenerowaæ du¿o losowych bajtów. Dobrym pomys³em podczas "
-"generowania\n"
-"liczb pierszych jest wykonanywanie w tym czasie innych dzia³añ (pisanie na\n"
-"klawiaturze, poruszanie myszk±, odwo³anie siê do dysków); dziêki temu\n"
-"generator liczb losowych ma mo¿liwo¶æ zebrania odpowiedniej ilo¶ci "
-"entropii.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "Para kluczy dla DSA bêdzie mia³a 1024 bity d³ugo¶ci.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Procedura generacji klucza zosta³a anulowana.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "zapisujê klucz publiczny w '%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "zapisujê klucz tajny w '%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "brak zapisywalnego zbioru kluczy publicznych: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "brak zapisywalnego zbioru kluczy tajnych: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "b³±d podczas zapisu zbioru kluczy publicznych `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "b³±d podczas zapisu zbioru kluczy tajnych `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "klucz publiczny i prywatny (tajny) zosta³y utworzone i podpisane.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "klucz zosta³ oznaczony jako obdarzony absolutnym zaufaniem.\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Ten klucz nie mo¿e byæ wykorzystany do szyfrowania. Komend± \"--edit-key\"\n"
-"mo¿na dodaæ do niego podklucz u¿ywany do szyfrowania.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Generacja klucza nie powiod³a siê: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"klucz zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
-"czasoprzestrzeni, lub ¼le ustawiony zegar systemowy)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"klucz zosta³ stworzony %lu sekund w przysz³o¶ci (zaburzenia\n"
-"czasoprzestrzeni, lub ¼le ustawiony zegar systemowy)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr ""
-"UWAGA: tworzenie podkluczy dla kluczy wersji 3 jest niezgodne z OpenPGP.\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Na pewno utworzyæ? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "opcja --output nie dzia³a z tym poleceniem\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: nie mo¿na otworzyæ: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "b³±d podczas tworzenia has³a: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' ju¿ jest spakowany\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: OSTRZE¯ENIE: plik jest pusty\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"w trybie --pgp2 mo¿na szyfrowaæ dla kluczy RSA krótszych od 2048 bitów\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "odczyt z '%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"nie mo¿na u¿yæ szyfru IDEA z wszystkimi kluczami dla których szyfrujesz.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "UWAGA: brak algorytmu szyfruj±cego %d w ustawieniach\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "To polecenie nie jest dostêpne w trybie %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s zaszyfrowany dla: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "klucz `%s' nie zosta³ odaleziony: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "b³±d odczytu bloku kluczy: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominiêty\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "klucz %08lX: nie jest chroniony - pominiêty\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "klucz %08lX: klucz PGP 2.x - pominiêty\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "OSTRZE¯ENIE: nic nie zosta³o wyeksportowane!\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "zbyt wiele wpisów w buforze kluczy publicznych - wy³±czony\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[brak identyfikatora u¿ytkownika]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Niepoprawny klucz %08lX uznany za poprawny przez --allow non-selfsigned-"
-"uid.\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "u¿ywany jest podklucz %08lX zamiast klucza g³ównego %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "klucz %08lX: klucz tajny bez klucza jawnego - pominiêty\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "blok typu %d zostaje pominiêty\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu kluczy przetworzonych do tej chwili\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "b³±d odczytu '%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Ogó³em przetworzonych kluczy: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " pominiêtych nowych kluczy: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " bez identyfikatora: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " do³±czono do zbioru: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " bez zmian: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nowych identyfikatorów: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nowych podkluczy: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nowych podpisów: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " nowych uniewa¿nieñ kluczy: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " tajnych kluczy wczytanych: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " tajnych kluczy dodanych: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " tajnych kluczy bez zmian: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " do³±czono do zbioru: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "klucz %08lX: brak identyfikatora u¿ytkownika\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "klucz %08lX: brak podklucza do dowi±zania\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "klucz %08lX: przyjêto identyfikator nie podpisany nim samym '%s'\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "klucz %08lX: brak poprawnych identyfikatorów u¿ytkownika\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "to mo¿e byæ spowodowane brakiem podpisu w³a¶ciciela klucza\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "klucz %08lX: brak klucza publicznego: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "klucz %08lX: nowy klucz - pominiêty\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "brak zapisywalnego zbioru kluczy: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "zapis do '%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "b³±d zapisu zbioru kluczy '%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "klucz %08lX: klucz publiczny wczytano do zbioru\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "klucz %08lX: nie zgadza siê z lokalnie posiadan± kopi±\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "klucz %08lX: brak oryginalnego bloku klucza; %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "klucz %08lX: nie mo¿na odczytaæ oryginalnego bloku klucza; %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "klucz %08lX: 1 nowy identyfikator u¿ytkownika\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "klucz %08lX: %d nowych identyfikatorów u¿ytkownika\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "klucz %08lX: 1 nowy podpis\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "klucz %08lX: %d nowych podpisów\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "klucz %08lX: 1 nowy podklucz\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "klucz %08lX: %d nowych podkluczy\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "klucz %08lX: bez zmian\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "brak domy¶lego zbioru kluczy tajnych: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "Klucz %08lX: klucz tajny wczytany do zbioru\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "Klucz %08lX: ten klucz ju¿ znajduje siê w zbiorze\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "klucz %08lX: brak klucza tajnego: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"klucz %08lX: brak klucza publicznego - wczytany certyfikat \n"
-"uniwa¿nienia nie mo¿e byæ zastosowany\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "klucz %08lX: niepoprawny certyfikat uniewa¿nienia: %s - odrzucony\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "klucz %08lX: wczytany certyfikat uniewa¿nienia\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "klucz %08lX: brak identyfikatora u¿ytkownika do podpisu\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "klucz %08lX: algorytm klucza publicznego \"%s\" nie jest obs³ugiwany\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "klucz %08lX: niepoprawny podpis na identyfikatorze \"%s\"\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "klucz %08lX: brak podklucza do dowi±zania\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr ""
-"klucz %08lX: nie obs³ugiwany algorytm szyfrowania z kluczem publicznym\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "klucz %08lX: niepoprawne dowi±zanie podklucza\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "klucz %08lX: niepoprawne dowi±zanie podklucza\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "klucz %08lX: brak podklucza do dowi±zania\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "klucz %08lX.%lu: Poprawne uniewa¿nienie podklucza\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "klucz %08lX: niepoprawne dowi±zanie podklucza\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "klucz %08lX: pominiêto identyfikator u¿ytkownika '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "klucz %08lX: podklucz pominiêty\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "klucz %08lX: podpis nieeksportowalny (klasa %02x) - pominiêty\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr ""
-"klucz %08lX: certyfikat uniewa¿nienia umieszczony w niew³a¶ciwym \n"
-"miejscu - zosta³ pominiêty\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "klucz %08lX: niepoprawny certyfikat uniewa¿nienia: %s - pominiêty\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr ""
-"klucz %08lX: certyfikat uniewa¿nienia umieszczony w niew³a¶ciwym \n"
-"miejscu - zosta³ pominiêty\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "key %08lX: powtórzony identyfikator u¿ytkownika - do³±czony\n"
-
-#: g10/import.c:1389
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"Ostrze¿enie: klucz %08lX móg³ zostaæ uniewazniony:\n"
-" zapytanie o uniewa¿niaj±cy klucz %08lX w serwerze kluczy\n"
-
-#: g10/import.c:1403
-#, fuzzy, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"Ostrze¿enie: klucz %08lX móg³ zostaæ uniewa¿niony:\n"
-" brak uniewa¿niaj±cego klucza %08lX.\n"
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "klucz %08lX: dodany certyfikat uniewa¿nienia\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "klucz %08lX: dodano bezpo¶redni podpis\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[uniewa¿nienie]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[podpis klucza nim samym]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 niepoprawny podpis\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d niepoprawnych podpisów\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 podpis nie zosta³ sprawdzony z powodu braku klucza\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d podpisów nie zosta³o sprawdzonych z powodu braku kluczy\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 podpis nie zosta³ sprawdzony z powodu b³êdu\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d podpisów nie sprawdzonych z powodu b³êdów\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "wykryto 1 identyfikator u¿ytkownika bez podpisu w³a¶ciciela klucza\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr ""
-"wykryto %d identyfikatorów u¿ytkownika bez podpisów w³a¶ciciela klucza\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Identyfikator u¿ytkownika \"%s\" zosta³ uniewa¿niony."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Czy na pewno chcesz podpisaæ? (t/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Nie da siê z³o¿yæ podpisu.\n"
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "OSTRZE¯ENIE: plik '%s' jest pusty\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"Twój podpis na \"%s\"\n"
-"jest podpisem prywatnym (lokalnym).\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-"Czy chcesz zamieniæ go na pe³ny, publiczny, eksportowalny podpis? (t/N) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"Twój podpis na \"%s\"\n"
-"jest podpisem prywatnym (lokalnym).\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-"Czy chcesz zamieniæ go na pe³ny, publiczny, eksportowalny podpis? (t/N) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" jest ju¿ lokalnie podpisany kluczem %08lX\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" jest ju¿ podpisany kluczem %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nie ma nic do podpisania kluczem %08lX.\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Data wa¿no¶ci tego klucza up³ynê³a!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Wa¿no¶æ tego klucza wygasa %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr ""
-"Czy chcesz ¿eby wa¿no¶æ Twojego podpisu wygasa³a w tej samej chwili? (T/n) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr "W trybie --pgp2 nie mo¿na podpisywaæ w formacie OpenPGP.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "To uczyni ten klucz nieuzytecznym dla PGP 2.x.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Jak dok³adnie zosta³a przez Ciebie sprawdzona to¿samo¶æ tej osoby?\n"
-"Je¶li nie wiesz co odpowiedzieæ, podaj \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Nie odpowiem na to pytanie. %s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) W ogóle nie.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Pobie¿nie.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Bardzo dok³adnie.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Czy jeste¶ naprawdê pewien ¿e chcesz podpisaæ ten klucz \n"
-"swoim kluczem: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "to mo¿e byæ spowodowane brakiem podpisu w³a¶ciciela klucza\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Podpis zostanie oznaczony jako nieeksportowalny (prywatny).\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Podpis zostanie oznaczony jako nie podlegaj±cy uniewa¿nieniu.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Podpis zostanie oznaczony jako nieeksportowalny (prywatny).\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Podpis zostanie oznaczony jako nie podlegaj±cy uniewa¿nieniu.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"To¿samo¶æ u¿ytkownika nie zosta³a w ogóle sprawdzona.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"To¿samo¶æ u¿ytkownika zosta³a sprawdzona pobie¿nie.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"To¿samo¶æ u¿ytkownika zosta³a dok³adnie sprawdzona.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Czy na pewno podpisaæ? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "z³o¿enie podpisu nie powiod³o siê: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Ten klucz nie jest chroniony.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Czê¶æ tajna g³ównego klucza jest niedostêpna.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Klucz jest chroniony.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Tego klucza nie mo¿na edytowaæ: %s.\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Wprowad¼ nowe d³ugie has³o dla tego klucza tajnego.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Nie chcesz has³a - to *z³y* pomys³!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Czy na pewno chcesz to zrobiæ? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "przenoszê podpis klucza na w³a¶ciwe miejsce\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "wyj¶cie z tego menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "w"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "zapis"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "zapis zmian i wyj¶cie"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "pomoc"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "ten tekst pomocy"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "odc"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "okazanie odcisku klucza"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "lista"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "lista kluczy i identyfikatorów u¿ytkowników"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "id"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "wybór identyfikatora u¿ytkownika N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "klucz"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "wybór podklucza N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "lista"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "lista podpisów"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "l"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "podpis"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "z³o¿enie podpisu na kluczu"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "p"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lpodpis"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "z³o¿enie lokalnego podpisu na kluczu"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nupodpis"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "z³o¿enie na kluczu podpisu nie podlegaj±cego uniewa¿nieniu"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nulpodpis"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "z³o¿enie na kluczu lokalnego podpisu nie podlegaj±cego uniewa¿nieniu"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "¶ledzenia"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "dodid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "dodanie nowego identyfikatora u¿ytkownika do klucza"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "dodfoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "dodanie zdjêcia u¿ytkownika do klucza"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "usid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "usuniêcie identyfikatora u¿ytkownika z klucza"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "usfoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "dodkl"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "dodanie podklucza"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "uskl"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "usuniêcie podklucza"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "uniewa¿niony"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "dodanie podklucza"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "uspod"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "usuniêcie podpisów"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "data"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "zmiana daty wa¿no¶ci klucza"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "g³ówny"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "oznaczenie identyfikatora u¿ytkownika jako g³ównego"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "prze³"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "prze³±czenie pomiêdzy list± kluczy publicznych i tajnych"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "p"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "opcje"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "ustawienia (zaawansowane)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "opcje"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "rozbudowana lista ustawieñ"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "ustaw"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "ustawienie opcji klucza"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "aktopc"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "aktualizacja ustawieñ klucza"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "has³o"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "zmiana has³a klucza"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "zaufanie"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "zmiana zaufania w³a¶ciciela"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "unpod"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "uniewa¿nienie podpisu"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "unpkl"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "uniewa¿nienie podklucza"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "wy³kl"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "wy³±czyæ klucz z u¿ycia"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "w³kl"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "w³±czyæ klucz do u¿ycia"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "foto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "okazanie identyfikatora - zdjêcia"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "nie dzia³a w trybie wsadowym\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "b³±d odczytu bloku klucza tajnego '%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Dostêpny jest klucz tajny.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Polecenie> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Najpierw trzeba u¿yæ polecenia \"prze³\".\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "Klucz uniewa¿niony."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Podpisaæ wszystkie identyfikatory u¿ytkownika na tym kluczu? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Podpowied¼: wybierz identyfikatory u¿ytkownika do podpisania.\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "To polecenie nie jest dostêpne w trybie %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Musisz wybraæ co najmniej jeden identyfikator u¿ytkownika.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Nie mo¿esz usun±æ ostatniego identyfikatora u¿ytkownika!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Czy na pewno usun±æ wszystkie wybrane identyfikatory u¿ytkownika? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Czy na pewno usun±æ ten identyfikator u¿ytkownika? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Musisz wybraæ co najmniej jeden klucz.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Czy na pewno chcesz usun±æ wybrane klucze? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Czy na pewno chcesz usun±æ ten klucz? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Czy na pewno chcesz uniewa¿niæ wybrane klucze? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Czy na pewno chcesz uniewa¿niæ ten klucz? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"Czy na pewno zaktualizowaæ ustawienia klucza dla wybranych identyfikatorów? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Czy na pewno usaktualniæ ustawienia? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Zapisaæ zmiany? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Wyj¶æ bez zapisania zmian? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "naniesienie poprawek nie powiod³o siê: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "naniesienie poprawek na kluczu tajnym nie powiod³o siê: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr ""
-"Klucz nie zosta³ zmieniony wiêc naniesienie poprawek nie jest konieczne.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Niepoprawna komenda (spróbuj \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Klucz mo¿e zostaæ uniewa¿niony przez klucz %s %s%s.\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (poufne)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX utworzony: %s, wa¿ny do: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " zaufanie: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Ten klucz zosta³ wy³±czony z u¿ytku"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "podklucz zosta³ uniewa¿niony: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "fa³szywy certyfikat uniewa¿nienia\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "problem przy sprawdzaniu uniewa¿nienia: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-#, fuzzy
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Pokazana warto¶æ wiarygodno¶ci klucza mo¿e byæ niepoprawna dopóki program "
-"nie\n"
-"zostanie uruchomiony ponownie.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"OSTRZE¯ENIE: To jest klucz PGP wersji 2. Dodanie zdjêcia spowoduje, ¿e "
-"niektóre \n"
-" wersje przestan± go rozumieæ.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Czy dalej chcesz je dodaæ? (t/N) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "Do klucza dla wersji 2 PGP nie mo¿na dodaæ zdjêcia.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Usun±æ ten poprawny podpis? (t/N/w) "
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Usun±æ ten niepoprawny podpis? (t/N/w) "
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Usun±æ ten nieznany podpis? (t/N/w) "
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Na pewno usun±æ ten podpis klucza nim samym? (t/N) "
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d podpis usuniêty.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d podpisów usuniêtych.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Nic nie zosta³o usuniête.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Wprowad¼ rozmiar klucza"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Proszê usun±æ znacznik wyboru z kluczy tajnych.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Proszê wybraæ tylko jeden podklucz.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Zmiana daty wa¿no¶ci podklucza.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Zmiana daty wa¿no¶ci g³ównego klucza.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Nie mo¿na zmieniæ daty wa¿no¶ci klucza w wersji 3.\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Brak odpowiadaj±cego podpisu w zbiorze kluczy tajnych\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Proszê wybraæ dok³adnie jeden identyfikator u¿ytkownika.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "klucz %08lX: niepoprawny podpis na identyfikatorze \"%s\"\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Brak identyfikatora u¿ytkownika o numerze %d.\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Brak podklucza o numerze %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "Identyfikator u¿ytkownika: "
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"podpisano Twoim kluczem %08lX w %s\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"lokalnie podpisano Twoim kluczem %08lX w %s\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Wa¿no¶æ tego klucza wygas³a %s.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Czy dalej chcesz go uniewa¿niæ? (t/N) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Stworzyæ certyfikat uniewa¿nienia tego podpisu? (t/N) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Te identyfikatory u¿ytkowników s± podpisane przez Ciebie:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr "podpisany przez %08lX w %s%s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr "uniewa¿niony przez %08lX w %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Czy na pewno chcesz uniewa¿niæ te podpisy:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr "podpisany przez %08lX w %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (podpis nieeksportowalny) "
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Na pewno utworzyæ certyfikaty uniewa¿nienia ? (t/N) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "brak klucza tajnego\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr "Zdjêcie w formacie %s, rozmiar %ld bajtów, klucz 0x%08lX (id %d).\n"
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Regulamin podpisu: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Regulamin podpisu: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "OSTRZE¯ENIE: niepoprawne dane w adnotacji\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Adnotacje podpisu: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Adnotacje podpisu: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "nieczytelne dla cz³owieka"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Zbiór kluczy"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr " [wygasa :%s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "lista kluczy i ich odcisków"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Odcisk klucza ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Odcisk klucza ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Odcisk klucza ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Odcisk klucza ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "niew³a¶ciwy algorytm skrótu ,%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "dane zaszyfrowano za pomoc± %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "dane zaszyfrowano nieznanym algorytmem numer %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "klucz publiczny %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "Zaszyfrowano %u-bitowym kluczem %s, numer %08lX, stworzonym %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "Zaszyfrowano kluczem %s, o numerze %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "b³±d odszyfrowywania kluczem publicznym: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "przyjmuj±c ¿e dane zosta³y zaszyfrowane za pomoc± %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "szyfr IDEA nie jest dostêpny, %s zostanie wykorzystany zamiast niego\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "odszyfrowanie poprawne\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "OSTRZE¯ENIE: zaszyfrowana wiadomo¶æ by³a manipulowana!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "b³±d odszyfrowywania: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "UWAGA: nadawca zaznaczy³ ¿e wiadomo¶æ nie powinna byæ zapisywana\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "pierwotna nazwa pliku='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr ""
-"osobny certyfikat uniewa¿nienia - u¿yj ,,gpg --import'' aby go przyj±æ\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Adnotacja: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Regulamin: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "wymuszono pominiêcie sprawdzenia podpisu\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "nie mo¿na obs³uzyæ tych wielokrotnych podpisów\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Podpisano w %.*s kluczem %s o numerze %08lX.\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "NIEPOPRAWNY podpis z³o¿ony przez \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Przeterminowany podpis z³o¿ony przez \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Poprawny podpis z³o¿ony przez \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[niepewne]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " alias \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Nie mo¿na sprawdziæ podpisu: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "nie jest oddzielonym podpisem.\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "oddzielony podpis klasy 0x%02x.\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "podpis starego typu (PGP 2.x).\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "wykryto niepoprawny pakiet pierwotny w proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "nie mo¿na wy³±czyæ zrzutów pamiêci: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Nie nale¿y u¿ywaæ algorytmów do¶wiadczalnych!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"u¿ywanie tego szyfru jest odradzane; nale¿y u¿ywaæ standardowych szyfrów!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "modu³ szyfru IDEA nie jest dostêpny\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr "wiêcej informacji jest tutaj: http://www.gnupg.org/why-not-idea.html\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "OSTRZE¯ENIE: '%s' jest przestarza³± opcj±.\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "OSTRZE¯ENIE: '%s' jest przestarza³± opcj±.\n"
-
-#: g10/misc.c:515
-#, fuzzy, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "nale¿y u¿yæ opcji \"--keyserver-options %s\"\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "nie mo¿na obs³u¿yæ tego algorytmu klucza publicznego: %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "podpakiet typu %d ma ustawiony krytyczny bit\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent nie jest dostêpny w tej sesji\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "nie mo¿na ustawiæ numeru procesu klienckiego agenta\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "serwer nie chce czytaæ deskryptora dla agenta\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "serwer nie chce pisaæ deskryptora dla agenta\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "z³y format zmiennej GPG_AGENT_INFO\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "wersja %d protoko³u agenta nie jest obs³ugiwana\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "nie mo¿na siê po³±czyæ z ,,%s'': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problem z porozumiewaniem siê z gpg-agentem\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problem z agentem - zostaje wy³±czony\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (podklucz %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Musisz podaæ has³o aby odbezpieczyæ klucz tajny u¿ytkownika:\n"
-"\"%.*s\".\n"
-"Klucz o d³ugo¶ci %u bitów, typ %s, numer %08lX, stworzony %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Has³o\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Powtórzone has³o\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "has³o zbyt d³ugie\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "b³êdna odpowied¼ agenta\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "anulowano przez u¿ytkownika\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problem agenta: zwróci³ 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Musisz podaæ has³o aby odbezpieczyæ klucz tajny u¿ytkownika:\n"
-"\""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "d³ugo¶æ %u bitów, typ %s, numer %08lX, stworzony %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "pytanie o has³o nie dzia³a w trybie wsadowym\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Podaj has³o: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Powtórz has³o: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr ""
-"dane nie zosta³y zapisane; aby to zrobiæ, nale¿y u¿yæ opcji \"--output\"\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "b³±d tworzenia `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Podpis oddzielony od danych.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Nazwa pliku danych: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "czytam strumieñ standardowego wej¶cia\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "brak podpisanych danych\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "nie mo¿na otworzyæ podpisanego pliku '%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "adresat anonimowy; sprawdzanie %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "OK, to my jeste¶my adresatem anonimowym.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "stary, nie obs³ugiwany algorytm szyfrowania klucza sesyjnego\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "algorytm szyfruj±cy %d%s jest nieznany, b±d¼ te¿ zosta³ wy³±czony\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "UWAGA: brak algorytmu szyfruj±cego %d w ustawieniach\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "UWAGA: wa¿no¶æ klucza tajnego %08lX wygas³a %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "klucz %08lX: klucz zosta³ uniewa¿niony!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "zapytanie o klucz %08lX w serwerze HKP %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "nie mo¿na pobraæ klucza z serwera: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "b³±d przy wysy³aniu do '%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "wysy³anie do '%s' powiod³o siê (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "wysy³anie do '%s' nie powiod³o siê (status=%u)\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "zapytanie o \"%s\" w serwerze HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "nie mo¿na przeszukaæ serwera: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "tajne czê¶ci klucza s± niedostêpne\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "algorytm ochrony %d%s nie jest obs³ugiwany\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Niepoprawne has³o; proszê spróbowaæ ponownie"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"OSTRZE¯ENIE: Wykryto klucz s³aby algorytmu - nale¿y ponownie zmieniæ has³o.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"tworzenie przestarza³ej 16-bitowej sumy kontrolnej dla ochrony klucza\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: 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:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "klucz publiczny jest o %lu sekund m³odszy od podpisu\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "klucz publiczny jest o %lu sekund m³odszy od podpisu\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"klucz zosta³ stworzony %lu sekundê w przysz³o¶ci (zaburzenia\n"
-"czasoprzestrzeni, lub ¼le ustawiony zegar systemowy)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"klucz zosta³ stworzony %lu sekund w przysz³o¶ci (zaburzenia\n"
-"czasoprzestrzeni, lub ¼le ustawiony zegar systemowy)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "UWAGA: klucz podpisuj±cy %08lX przekroczy³ datê wa¿no¶ci %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"przyjêto niewa¿no¶æ podpisu z powodu ustawienia nieznanego bitu krytycznego\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"OSTRZE¯ENIE: nie mo¿na rozkodowaæ urla regulaminu, pozostanie zakodowany.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"OSTRZE¯ENIE: nie mo¿na rozkodowaæ urla regulaminu, pozostanie zakodowany.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "sprawdzenie z³o¿onego podpisu nie powiod³o siê: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s podpis z³o¿ony przez: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "OSTRZE¯ENIE: plik '%s' jest pusty\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "w trybie --pgp2 mo¿na podpisywaæ tylko za pomoc± kluczy z wersji 2.x\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "nie mo¿na utworzyæ %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "UWAGA: brak algorytmu szyfruj±cego %d w ustawieniach\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "podpis:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "w trybie --pgp2 mo¿na podpisywaæ tylko za pomoc± kluczy z wersji 2.x\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "zostanie u¿yty szyfr %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "nie mo¿na obs³u¿yæ linii tekstu d³u¿szej ni¿ %d znaków\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "linia d³u¿sza ni¿ %d znaków\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "baza zaufania, wpis %lu: lseek() nie powiod³a siê: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "baza zaufania, wpis %lu: zapis nie powiód³ siê (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "zbyt du¿e zlecenie dla bazy zaufania\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: dostêp niemo¿liwy: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: katalog nie istnieje!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: nie mo¿na utworzyæ blokady\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: nie mo¿na utworzyæ blokady\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: nie mo¿na utworzyæ: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: stworzenie zapisu o wersji nie powiod³o siê: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: stworzony niepoprawny plik bazy zaufania\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: baza zaufania utworzona\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: niepoprawny plik bazy zaufania\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: tworzenie tablicy skrótów nie powiod³o siê: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: b³±d przy uaktualnianiu numeru wersji: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: b³±d odczytu numeru wersji: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: b³±d zapisu numeru wersji: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "baza zaufania: procedura lseek() zawiod³a: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "baza zaufania: procedura read() (n=%d) zawiod³a: %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: to nie jest plik bazy zaufania\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: wpis wersji z numerem %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: niew³a¶ciwa wersja pliku %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: b³±d odczytu pustego wpisu: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: b³±d zapisu wpisu katalogowego: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: zerowanie rekordu nie powiod³o siê: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: dopisanie rekordu nie powiod³o siê: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"Baza zaufania jest uszkodzona; proszê uruchomiæ \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' nie jest poprawnym d³ugim numerem klucza\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "klucz %08lX: zaakceptowany jako klucz zaufany\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "klucz %08lX jest wpisany wiêcej ni¿ raz w bazie zaufania\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"klucz %08lX: brak klucza publicznego dla zaufanego klucza - pominiêty\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "wpis zaufania %lu, typ zapytania %d: odczyt nie powiód³ siê: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "wpis zaufania %lu jest typu innego ni¿ poszukiwany %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "wpis zaufania %lu, typ zapytania %d: zapis nie powiód³ siê: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "baza zaufania: synchronizacja nie powiod³a siê %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "sprawdzanie bazy jest niepotrzebne\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "nastêpne sprawdzanie bazy odbêdzie siê %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "sprawdzanie bazy zaufania\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "klucz publiczny %08lX nie odnaleziony: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "klucz publiczny absolutnie zaufanego klucza %08lX nie odnaleziony\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"sprawdzanie na g³êboko¶ci %d podpisów =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%"
-"d)\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"nie mo¿na sprawdziæ podpisu.\n"
-"Nale¿y pamiêtaæ o podawaniu pliku podpisu (.sig lub .asc) jako pierwszego\n"
-"argumentu linii poleceñ.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "linia wej¶cia %u zbyt d³uga lub brak znaku LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"klucz nie jest oznaczony jako niepewny - nie mo¿na go u¿yæ z atrap± \n"
-"generatora liczb losowych!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "pominiêty '%s': duplikat\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "pominiêty '%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "pominiêty: klucz tajny ju¿ znajduje siê w bazie\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"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:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Plik '%s' ju¿ istnieje. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Nadpisaæ (t/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: nieznana koñcówka\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Nazwa pliku"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "zapisywanie na wyj¶cie standardowe\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "przyjêto obecno¶æ podpisanych danych w '%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: stworzono nowy plik ustawieñ\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: nie mo¿na utworzyæ katalogu: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: katalog utworzony\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"OSTRZE¯ENIE: wiadomo¶æ by³a szyfrowana s³abym kluczem szyfru symetrycznego.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problem podczas obróbki pakietu szyfrowego\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "wygenerowano s³aby klucz - operacja zostaje powtórzona\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"brak mo¿liwo¶ci generacji dobrego klucza dla szyfru symetrycznego;\n"
-"operacja by³a powtarzana %d razy!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-"Algorytm DSA wymaga u¿ycia algorytmu skrótu daj±cego 160-bitowy wynik.\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "bez opcji \"--yes\" nie dzia³a w trybie wsadowym\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Usun±æ ten klucz ze zbioru? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "To jest klucz tajny! - czy na pewno go usun±æ? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "usuniêcie bloku klucza nie powiod³o siê: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "informacja o zaufaniu dla w³a¶ciciela klucza zosta³a wymazana\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "dla klucza publicznegi ,,%s'' jest klucz tajny!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "aby go usun±æ nalezy najpierw u¿yæ opcji \"--delete-secret-key\".\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Te wartosci u¿ytkownik przydziela wg swojego uznania; nie bêd± nigdy\n"
-"eksportowane poza ten system. Potrzebne s± one do zbudowania sieci\n"
-"zaufania, i nie ma to nic wspólnego z tworzon± automatycznie sieci±\n"
-"certyfikatów."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Aby zbudowaæ Sieæ Zaufania, GnuPG potrzebuje znaæ klucze do których\n"
-"masz absolutne zaufanie. Zwykle s± to klucze do których masz klucze\n"
-"tajne. Odpowiedz \"tak\", je¶li chcesz okre¶liæ ten klucz jako klucz\n"
-"do którego masz absolutne zaufanie.\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr ""
-"Je¶li mimo wszystko chcesz u¿yæ tego uniewa¿nionego klucza, odpowiedz \"tak"
-"\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Je¶li mimo wszystko chcesz u¿yæ tego klucza, klucza, co do którego nie ma\n"
-"¿adnej pewno¶ci do kogo nale¿y, odpowiedz \"tak\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Podaj adresatów tej wiadomo¶ci."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Wybór algorytmu.\n"
-"\n"
-"DSA (zwany te¿ DSS) to algorytm podpisu cyfrowego i tylko do sk³adania\n"
-"podpisów mo¿e byæ u¿ywany. Jest to preferowany algorytm poniewa¿\n"
-"sk³adane nim podpisy sprawdza siê du¿o szybciej ni¿ te sk³adane\n"
-"algorytmem ElGamala.\n"
-"\n"
-"Algorytm ElGamala mo¿e byæ u¿ywany zarówno do podpisów jak i do\n"
-"szyfrowania. Standard OpenPGP rozró¿nia dwa typy tego algorytmu -\n"
-"tylko do szyfrowania, oraz do szyfrowania i podpisywania. Faktycznie\n"
-"algorytm pozostaje bez zmian ale pewne parametry musz± byæ odpowiednio\n"
-"dobrane aby stworzyæ klucz którym mo¿na sk³adaæ bezpieczne\n"
-"podpisy. Ten program obs³uguje oba typy ale inne implementacje nnie\n"
-"musz± rozumieæ kluczy do podpisów i szyfrowania\n"
-"\n"
-"G³ówny klucz musi byæ kluczem podpisuj±cym, jest to powodem dla\n"
-"którego w tym menu nie ma mo¿no¶ci wyboru klucza ElGamala do\n"
-"szyfrowania."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Ten typ klucza jest zdefiniowany w RFC2440, jednak¿e jest on odradzany\n"
-"gdy¿ nie jest obs³ugiwany przez wszystkie programy, a podpisy nim\n"
-"sk³adane s± du¿e i ich sprawdzanie trwa d³ugo."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Wprowad¼ rozmiar klucza"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Odpowied¼ \"tak\" lub \"nie\"."
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Wprowad¼ ¿±dan± warto¶æ (jak w znaku zachêty). \n"
-"Mo¿na tu podaæ datê w formacie ISO (RRRR-MM-DD) ale nie da to\n"
-"w³a¶ciwej obs³ugi b³êdów - system próbuje interpretowaæ podan± warto¶æ\n"
-"jako okres."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Nazwa w³a¶ciciela klucza."
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "proszê wprowadziæ opcjonalny ale wysoce doradzany adres e-mail"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Proszê wprowadziæ opcjonalny komentarz"
-
-# OSTRZE¯ENIE: nic nie zosta³o wyeksportowane!
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N aby zmieniæ nazwê (nazwisko).\n"
-"C aby zmieniæ komentarz.<\n"
-"E aby zmieniæ adres e-mail.\n"
-"O aby kontynuowaæ tworzenie klucza.\n"
-"Q aby zrezygnowaæ z tworzenia klucza."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Je¶li ma zostaæ wygenerowany podklucz, nale¿y odpowiedzieæ \"tak\"."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Przy podpisywaniu identyfikatora u¿ytkownika na kluczu nale¿y sprawdziæ, \n"
-"czy to¿samo¶æ u¿ytkownika odpowiada temu, co jest wpisane w "
-"identyfikatorze.\n"
-"Innym u¿ytkownikom przyda siê informacja, jak dog³êbnie zosta³o to przez\n"
-"Ciebie sprawdzone.\n"
-"\n"
-"\"0\" oznacza, ¿e nie podajesz ¿adnych informacji na temat tego jak "
-"dog³êbnie\n"
-" sprawdzi³a¶/e¶ to¿samo¶æ u¿ytkownika.\n"
-"\n"
-"\"1\" oznacza, ¿e masz przekonanie, ¿e to¿samo¶æ u¿ytkownka odpowiada\n"
-" identyfikatorowi klucza, ale nie by³o mo¿liwo¶ci sprawdzenia tego.\n"
-" Taka sytuacja wystêpuje te¿ kiedy podpisujesz identyfikator bêd±cy\n"
-" pseudonimem.\n"
-"\n"
-"\"2\" oznacza, ¿e to¿samo¶æ u¿ytkownika zosta³± przez Ciebie potwierdzona\n"
-" pobie¿nie - sprawdzili¶cie odcisk klucza, sprawdzi³a¶/e¶ to¿samo¶æ\n"
-" na okazanym dokumencie ze zdjêciem.\n"
-"\n"
-"\"3\" to dog³êbna weryfikacja to¿samo¶ci. Na przyk³ad sprawdzenie odcisku \n"
-" klucza, sprawdzenie to¿samo¶ci z okazanego oficjalnego dokumentu ze\n"
-" zdjêciem (np paszportu) i weryfikacja poprawno¶ci adresu poczty\n"
-" elektronicznej przez wymianê poczty z tym adresem.\n"
-"\n"
-"Zauwa¿, ¿e podane powy¿ej przyk³ady dla poziomów \"2\" i \"3\" to *tylko*\n"
-"przyk³ady. Do Ciebie nale¿y decyzja co oznacza \"pobie¿ny\" i \"dog³êbny\" "
-"w\n"
-"kontek¶cie po¶wiadczania i podpisywania kluczy.\n"
-"\n"
-"Je¶li nie wiesz co odpowiedzieæ, podaj \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Odpowiedz \"tak\", aby podpisaæ WSZYSTKIE identyfikatory u¿ytkownika."
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Aby skasowaæ ten identyfikator u¿ytkownika (co wi±¿e siê ze utrat±\n"
-"wszystkich jego po¶wiadczeñ!) nale¿y odpowiedzieæ \"tak\"."
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Aby skasowaæ podklucz nale¿y odpowiedzieæ \"tak\"."
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"To jest poprawny podpis na tym kluczu; normalnie nie nale¿y go usuwaæ\n"
-"poniewa¿ mo¿e byæ wa¿ny dla zestawienia po³aczenia zaufania do klucza\n"
-"którym go z³o¿ono lub do innego klucza nim po¶wiadczonego."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Ten podpis nie mo¿e zostaæ potwierdzony poniewa¿ nie ma\n"
-"odpowiadaj±cego mu klucza publicznego. Nale¿y od³o¿yæ usuniêcie tego\n"
-"podpisu do czasu, kiedy oka¿e siê który klucz zosta³ u¿yty, poniewa¿\n"
-"w momencie uzyskania tego klucza mo¿e pojawiæ siê ¶cie¿ka zaufania\n"
-"pomiêdzy tym a innym, ju¿ po¶wiadczonym kluczem."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "Ten podpis jest niepoprawny. Mo¿na usuni±æ go z bazy kluczy."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"To jest podpis wi±¿±cy identyfikator u¿ytkownika z kluczem. Nie nale¿y\n"
-"go usuwaæ - GnuPG mo¿e nie móc pos³ugiwaæ siê dalej kluczem bez\n"
-"takiego podpisu. Bezpiecznie mo¿na go usun±æ tylko je¶li ten podpis\n"
-"klucza nim samym z jakich¶ przyczyn nie jest poprawny, i klucz jest\n"
-"drugi raz podpisany w ten sam sposób."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Przestawienie wszystkich (lub tylko wybranych) identyfikatorów na aktualne\n"
-"ustawienia. Data na odpowiednich podpisach zostane przesuniêta do przodu o\n"
-"jedn± sekundê. \n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Podaj d³ugie, skomplikowane has³o, np ca³e zdanie.\n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Proszê powrótrzyæ has³o, aby upewniæ siê ¿e nie by³o pomy³ki."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Podaj nazwê pliku którego dotyczy ten podpis"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Je¶li mo¿na nadpisaæ ten plik, nale¿y odpowiedzieæ ,,tak''"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Nazwa pliku. Naci¶niêcie ENTER potwierdzi nazwê domy¶ln± (w nawiasach)."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Nalezy podaæ powód uniewa¿nienia klucza. W zale¿no¶ci od kontekstu mo¿na\n"
-"go wybraæ z listy:\n"
-" \"Klucz zosta³ skompromitowany\"\n"
-" Masz powody uwa¿aæ ¿e twój klucz tajny dosta³ siê w niepowo³ane rêce.\n"
-" \"Klucz zosta³ zast±piony\"\n"
-" Klucz zosta³ zast±piony nowym.\n"
-" \"Klucz nie jest ju¿ u¿ywany\"\n"
-" Klucz zosta³ wycofany z u¿ycia.\n"
-" \"Identyfikator u¿ytkownika przesta³ byæ poprawny\"\n"
-" Identyfikator u¿ytkownika (najczê¶ciej adres e-mail przesta³ byæ \n"
-" poprawny.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Je¶li chcesz, mo¿esz podaæ opis powodu wystawienia certyfikatu\n"
-"uniewa¿nienia. Opis powinien byc zwiêz³y. \n"
-"Pusta linia koñczy wprowadzanie tekstu.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Pomoc niedostêpna"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Brak pomocy o '%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "b³±d tworzenia zbioru kluczy `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "zbiór kluczy `%s' utworzony\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "nie powiod³a siê odbudowa bufora bazy: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "OSTRZE¯ENIE: Istniej± dwa pliki z poufnymi informacjami.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s pozosta³ bez zmian\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s zosta³ utworzony\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Proszê usun±æ to naruszenie zasad bezpieczeñstwa\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "sprawdzanie zbioru kluczy `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu kluczy do tej chwili (%lu podpisów)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu kluczy (%lu podpisów)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: zbiór kluczy utworzony\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr "aby u¿yæ nowego pliku ustawieñ, nale¿y od nowa uruchomiæ GnuPG\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "zmiana uprawnieñ do `%s' nie powiod³a siê: %s\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Odcisk klucza:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Odcisk:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NAZWA=TRE¦Æ|adnotacje"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "adnotacja musi zaczynaæ siê od podkre¶lenia lub litery\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "kropki w adnotacji musz± znajdowaæ siê pomiêdzy innymi znakami\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "OSTRZE¯ENIE: Do tego klucza dodano ju¿ zdjêcie u¿ytkownika.\n"
-#~ " Dodanie drugiego spowoduje, ¿e niektóre wersje PGP "
-#~ "przestan±\n"
-#~ " rozumieæ ten klucz.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Do klucza mo¿na do³±czyæ tylko jedno zdjêcie.\n"
-
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Czy na pewno chcesz to podpisaæ?\n"
-
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr " Czy na pewno chcesz go podpisaæ?\n"
-
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Czy na pewno podpisaæ? (t/N) "
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Czy naprawdê potrzebujesz takiego d³ugiego klucza? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "klucz %08lX: dostêpna kopia nie jest podpisana ni± sam±\n"
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr "podpisany przez %08lX w %s\n"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key nazwa u¿ytkownika"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key nazwa u¿ytkownika"
-
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key key nazwa u¿ytkownika"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Podaj identyfikator u¿ytkownika (user ID): "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "pominiêty: klucz publiczny ju¿ wybrany w --encrypt-to\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "WARNING: This is a PGP2-style key\n"
-#~ msgstr ""
-#~ "\n"
-#~ "OSTRZE¯ENIE: Klucz z PGP wersji 2.\n"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "iIpPwW"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "brak znanyk serwerów kluczy (u¿yj opcji --keyserver)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: nie jest poprawnym identyfikatorem klucza\n"
-
-#~ msgid "duplicate (short) key ID %08lX\n"
-#~ msgstr "skrócony numer klucza siê powtarza %08lX\n"
-
-#~ msgid "%lu key(s) to refresh\n"
-#~ msgstr "%lu klucz(y) do od¶wie¿enia\n"
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "¿±danie zbyt wielu losowych bitów; ograniczenie wynosi %d\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NAZWY]|sprawdzenie bazy zaufania"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "Dalsze informacje znajduj± siê na http://www.gnupg.org/"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Niemo¿liwe jest znalezienie poprawnej scie¿ki zaufania do tego klucza.\n"
-#~ "Sprawd¼my czy mo¿na przypisaæ brakuj±ce warto¶ci zaufania.\n"
-#~ "\n"
-
-#~ 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"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Brak certyfikatów o niezdefiniowanym poziomie zaufania.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Parametry zaufania nie zosta³y zmienione.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr "%08lX: brak informacji aby obliczyæ prawdopodobieñstwo zaufania\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: b³±d podczas sprawdzania klucza: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "Czy na pewno chcesz stworzyæ klucz do szyfrowania i podpisywania? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: nie znaleziono u¿ytkownika %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "b³±d przy odczycie certyfikatu: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "zbyt wiele wpisów w buforze nieznanych kluczy - wy³±czony\n"
-
-#~ msgid "no default public keyring\n"
-#~ msgstr "brak domy¶lnego zbioru kluczy publicznych\n"
-
-#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
-#~ msgstr "klucz tajny %08lX nie zosta³ wczytany (aby to zrobiæ u¿yj %s)\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: nie znaleziono u¿ytkownika\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "naniesienie poprawek bazy zaufania nie powiod³o siê: %s\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr ""
-#~ "przyjêto niepoprawno¶æ MDC z powonu ustawienia nieznanego bitu "
-#~ "krytycznego\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "b³±d odczytu wpisu katalogowego dla LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: oczekiwany wpis katalogowy, napotkano typ %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "brak klucza g³ównego dla LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "b³±d odczytu g³ównego klucza dla LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: funkcja search_record zawiod³a: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "klucz %08lX: wyszukanie zapisu nie powiod³o siê\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "klucz %08lX: ju¿ znajduje siê w tablicy kluczy zaufanych\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "UWAGA: klucz tajny %08lX NIE jest chroniony.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "klucz %08lX: klucz tajny nie pasuje do klucza jawnego\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "wyliczenie kluczy tajnych nie powiod³o siê %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "klucz %08lX.%lu Dobre dowi±zanie podklucza\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "klucz %08lX.%lu: Niepoprawne dowi±zanie podklucza %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "klucz %08lX.%lu: Poprawne uniewa¿nienie klucza\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "klucz %08lX.%lu: Niew³a¶ciwe uniewa¿nienie klucza: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Poprawny podpis klucza nim samym"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Niepoprawny podpis klucza nim samym"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Poprawne uniewa¿nienie identyfikatora u¿ytkownika pominiête z powodu\n"
-#~ "nowszego podpisu tym samym kluczem"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Poprawne uniewa¿nienie identyfikatora u¿ytkownika"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Niepoprawne uniewa¿nienie identyfikatora u¿ytkownika"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Poprawne uniewa¿nienie certyfikatu"
-
-#~ msgid "Good certificate"
-#~ msgstr "Poprawny certyfikat"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Niepoprawne uniewa¿nienie certyfikatu"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Niepoprawny certyfikat"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "zapis o podpisach %lu[%d] wskazuje na z³y wpis.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "podwójny certyfikat - usuniêty"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "Procedura tdbio_search_dir nie powiod³a siê: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: wpisanie nie powiod³o siê: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: wpisanie nie powiod³o siê: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: wpisany\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "b³±d podczas odczytu wpisu katalogowego: %s\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu kluczy wpisanych\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: wpis katalogowy bez bloku klucza - pominiêty\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr " %lu z powodu nowych podkluczy\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu kluczy pominiêtych\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu kluczy uaktualnionych\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Oops, brak kluczy\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Oops, brak identyfikatorów u¿ytkowników\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: poszukiwanie wpisu katalogowego nie powiod³o siê: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiod³o siê: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "Klucz %08lX.%lu: wprowadzony do bazy zaufania\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "Klucz %08lX.%lu: stworzony w przysz³o¶ci (zaburzenia czasoprzestrzeni,\n"
-#~ "lub ¼le ustawiony zegar systemowy)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "klucz %08lX.%lu: okres wa¿no¶ci up³yn±³ %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "klucz %08lX.%lu: b³±d przy sprawdzaniu zaufania: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "problem podczas szukania '%s' w bazie zaufania: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr "brak u¿ytkownika '%s' w bazie zaufania - dodano\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "umieszczenie '%s' w Bazie Zaufania nie powiod³o siê: %s\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr "OSTRZE¯ENIE: d³ugie wpisy ustawieñ jeszcze nie s± obs³ugiwane.\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: stworzenie zbioru kluczy jest niemo¿liwe: %s\n"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "W tej wersji nie mo¿na u¿ywaæ kluczy RSA\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Brak klucza z takim identyfikatorem u¿ytkownika.\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Brak identyfikatora u¿ytkownika dla klucza.\n"
-
-#~ msgid "invalid"
-#~ msgstr "niepoprawny"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "odszyfrowuj±cy klucz tajny do jest niedostêpny\n"
-
-#~ msgid "set debugging flags"
-#~ msgstr "ustawienie opcji ¶ledzenia wykonania programu"
-
-#~ msgid "enable full debugging"
-#~ msgstr "umo¿liwienie pe³nego ¶ledzenia programu"
-
-#~ msgid "do not write comment packets"
-#~ msgstr "nie zapisywaæ pakietów z komentarzem"
-
-#~ msgid "(default is 1)"
-#~ msgstr "(domy¶lnie 1)"
-
-#~ msgid "(default is 3)"
-#~ msgstr "(domy¶lnie 3)"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr ""
-#~ " (%d) Klucz dla algorytmu ElGamala w pakiecie w trzeciej wersji "
-#~ "formatu\n"
-
-#~ msgid "Key generation can only be used in interactive mode\n"
-#~ msgstr "Generacjê klucza mo¿na wykonywaæ tylko w trybie interaktywnym\n"
-
-#~ msgid ""
-#~ "RSA keys are deprecated; please consider creating a new key and use this "
-#~ "key in the future\n"
-#~ msgstr ""
-#~ "Odradza siê stosowanie kluczy RSA; proszê rozwa¿yæ przej¶cie na inne "
-#~ "algorytmy\n"
-#~ "po wygenerowaniu odpowiednich kluczy.\n"
-
-#~ msgid "print all message digests"
-#~ msgstr "wszystkie skróty wiadomo¶ci"
-
-#~ msgid "can't lock keyring `%': %s\n"
-#~ msgstr "nie mo¿na zablokowaæ zbioru kluczy publicznych: %s\n"
-
-#~ msgid "error writing keyring `%': %s\n"
-#~ msgstr "b³±d zapisu zbioru kluczy '%': %s\n"
-
-#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n"
-#~ msgstr ""
-#~ "UWAGA: wpis podpisu %lu[%d] znajduje siê w li¶cie domy¶lnej %lu,\n"
-#~ "ale jest zaznaczony jako sprawdzony.\n"
-
-#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n"
-#~ msgstr ""
-#~ "UWAGA: wpis podpisu %lu[%d] znajduje siê w li¶cie domy¶lnej %lu,\n"
-#~ "ale nie jest zaznaczony.\n"
-
-#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n"
-#~ msgstr ""
-#~ "wpis oi podpisie %lu[%d] w li¶cie domy¶lnej %lu nie wskazuje \n"
-#~ "na wpis katalogowy\n"
-
-#~ msgid "lid %lu: no primary key\n"
-#~ msgstr "lid %lu: brak klucza g³ównego\n"
-
-#~ msgid "lid %lu: user id not found in keyblock\n"
-#~ msgstr ""
-#~ "lid %lu: identyfikator u¿ytkownika nie zosta³ odnaleziony w bloku klucza\n"
-
-#~ msgid "lid %lu: user id without signature\n"
-#~ msgstr "lid %lu: niepodpisany identyfikator u¿ytkownika\n"
-
-#~ msgid "lid %lu: self-signature in hintlist\n"
-#~ msgstr "lid %lu: podpis klucza nim samym w li¶cie domy¶lnej\n"
-
-#~ msgid "very strange: no public key\n"
-#~ msgstr "bardzo dziwne: brak klucza publicznego\n"
-
-#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n"
-#~ msgstr "lista domy¶lna %lu[%d] z %lu nie wskazuje na wpis katalogowy\n"
-
-#~ msgid "lid %lu does not have a key\n"
-#~ msgstr "lid %lu nie ma klucza\n"
-
-#~ msgid "lid %lu: can't get keyblock: %s\n"
-#~ msgstr "lid %lu: pobranie bloku klucza niemo¿liwe: %s\n"
-
-#~ msgid "Too many preference items"
-#~ msgstr "Zbyt wiele pozycji w ustawieniach"
-
-#~ msgid "public key not anymore available"
-#~ msgstr "klucz publiczny jest ju¿ niedostêpny"
-
-#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n"
-#~ msgstr ""
-#~ "identyfikator %08lX.%lu/%02X%02X: ma zdublowany katalog %lu,\n"
-#~ "ale nie jest jeszcze zaznaczony.\n"
-
-#~ msgid "insert_trust_record: keyblock not found: %s\n"
-#~ msgstr "insert_trust_record: brak bloku klucza: %s\n"
-
-#~ msgid "lid %lu: update failed: %s\n"
-#~ msgstr "lid %lu: naniesienie poprawek nie powiod³o siê: %s\n"
-
-#~ msgid "lid %lu: updated\n"
-#~ msgstr "lid %lu: uaktualniony\n"
-
-#~ msgid "lid %lu: okay\n"
-#~ msgstr "lid %lu: OK\n"
-
-#~ msgid "%s: update failed: %s\n"
-#~ msgstr "%s: zapis zmian nie powiod³ siê: %s\n"
-
-#~ msgid "%s: updated\n"
-#~ msgstr "%s: uaktualniony\n"
-
-#~ msgid "%s: okay\n"
-#~ msgstr "%s: OK\n"
-
-#~ msgid "lid %lu: keyblock not found: %s\n"
-#~ msgstr "lid %lu: blok klucza nie zosta³ odnaleziony: %s\n"
-
-#~ msgid "edit_ownertrust.value"
-#~ msgstr ""
-#~ "Przypisanie tych warto¶ci nale¿y do Ciebie, nie bêd± one udostêpnione\n"
-#~ "nikomu innemu. S± one u¿ywane do stworzenia sieci zaufania i nie ma\n"
-#~ "to nic wspólnego z tworzon± sieci± certyfikatów."
-
-#~ msgid "revoked_key.override"
-#~ msgstr ""
-#~ "Je¶li mimo wszystko chcesz u¿yæ tego uniewa¿nionego klucza, odpowiedz "
-#~ "\"tak\"."
-
-#~ msgid "untrusted_key.override"
-#~ msgstr ""
-#~ "Je¶li mimo wszystko chcesz u¿yæ tego klucza, klucza do którego nie masz\n"
-#~ "zaufania, odpowiedz \"tak\"."
-
-#~ msgid "pklist.user_id.enter"
-#~ msgstr "Podaj identyfikator u¿ytkownika adresata tych informacji."
-
-#~ msgid "keygen.algo"
-#~ msgstr ""
-#~ "Wybór algorytmu:\n"
-#~ "DSA (znany te¿ jako DSS) to Algorytm Podpisu Cyfrowego - u¿ywaæ go mo¿na "
-#~ "tylko\n"
-#~ "do tworzenia cyfrowych podpisów. Jego wybór jest sugerowany poniewa¿\n"
-#~ "sprawdzanie podpisów z³o¿onych algorytmem DSA jest du¿o szybsze ni¿ tych\n"
-#~ "z³o¿onych algorytmem ElGamala.\n"
-#~ "Algorytm ElGamala to algorytm klucza publicznego który nadaje mo¿na "
-#~ "stosowaæ\n"
-#~ "zarówno do szyfrowania jak i do tworzenia podpisów cyfrowych\n"
-#~ "W standardzie OpenPGP algorytm ElGamala wystêpuje w dwóch wersjach:\n"
-#~ "obs³uguj±cej podpisywanie, oraz obs³uguj±cej podpisywanie i szyfrowanie; "
-#~ "z\n"
-#~ "technicznego punktu widzenia algorytm dzia³a tak samo, ale pewne "
-#~ "wspó³czynniki\n"
-#~ "musz± byæ dobrane tak aby klucz nadawa³ siê do sk³adania bezpiecznych\n"
-#~ "podpisów. Ten program obs³uguje obie wersje, ale inne implementacje "
-#~ "OpenPGP\n"
-#~ "nie musz± rozumieæ obs³ugiwaæ klucza przeznaczonego jednocze¶nie do\n"
-#~ "podpisywania i szyfrowania.\n"
-#~ "G³ówny klucz musi byæ zawsze kluczem s³u¿±cym umo¿liwiaj±cym "
-#~ "podpisywanie,\n"
-#~ "dlatego te¿ ten program nie obs³uguje osobnych kluczy ElGamala s³u¿±cych "
-#~ "tylko\n"
-#~ "do szyfrowania."
-
-#~ msgid "keygen.algo.elg_se"
-#~ msgstr ""
-#~ "Mimo ¿e ten rodzaj kluczy jest zdefiniowany w RFC 2440, wybór takiego "
-#~ "klucza\n"
-#~ "nie jest sugerowany. Nie wszystkie programy taki klucz s± w stanie "
-#~ "obs³u¿yæ,\n"
-#~ "a podpisy z³o¿one za jego pomoc± s± du¿e i ich sprawdzenie zajmuje du¿o "
-#~ "czasu."
-
-#~ msgid "keygen.size"
-#~ msgstr "Rozmiar klucza"
-
-#~ msgid "keygen.size.huge.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "keygen.size.large.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "keygen.valid"
-#~ msgstr "Podaj ¿±dan± warto¶æ"
-
-#~ msgid "keygen.valid.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "keygen.name"
-#~ msgstr "Podaj nazwê (imiê, nazwisko) w³a¶ciciela klucza"
-
-#~ msgid "keygen.email"
-#~ msgstr "Adres e-mail (opcjonalny ale warto go wpisaæ)"
-
-#~ msgid "keygen.comment"
-#~ msgstr "Komentarz (opcjonalny)"
-
-#~ msgid "keygen.userid.cmd"
-#~ msgstr ""
-#~ "I - zmiana imienia lub nazwiska.\n"
-#~ "K - zmiana komentarza.\n"
-#~ "E - zmiana adresu email.\n"
-#~ "D - przej¶cie do w³a¶ciwej generacji klucza.\n"
-#~ "W - wyj¶cie z procedury generacji i z programu."
-
-#~ msgid "keygen.sub.okay"
-#~ msgstr ""
-#~ "Odpowiedz \"tak\" (lub po prostu \"t\") je¶li zgadzasz siê na stworzenie "
-#~ "podklucza."
-
-#~ msgid "sign_uid.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "change_passwd.empty.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "keyedit.cmd"
-#~ msgstr "Podaj \"help\" aby zobaczyæ listê poleceñ."
-
-#~ msgid "keyedit.save.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "keyedit.cancel.okay"
-#~ msgstr "Odpowiedz \"tak\" lub \"nie\""
-
-#~ msgid "keyedit.sign_all.okay"
-#~ msgstr ""
-#~ "Odpowiedz \"tak\" je¶li chcesz podpisaæ wszystkie identyfikatory klucza"
-
-#~ 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!"
-
-#~ msgid "keyedit.remove.subkey.okay"
-#~ msgstr "Odpowiedz \"tak\" je¶li na pewno chcesz skasowaæ ten podklucz"
-
-#~ msgid "passphrase.enter"
-#~ msgstr ""
-#~ "Proszê wprowadziæ wyra¿enie przej¶ciowe (tajne zdanie)\n"
-#~ " Bla, bla, bla ..."
-
-#~ msgid "passphrase.repeat"
-#~ msgstr ""
-#~ "Proszê powtórzyæ podane wyra¿enie przej¶ciowe dla wyeliminowania pomy³ek."
-
-#~ msgid "detached_signature.filename"
-#~ msgstr "Nazwa pliku którego dotyczy ten podpis"
-
-#~ msgid "openfile.overwrite.okay"
-#~ msgstr "Odpowiedz \"tak\" je¶li na pewno chcesz nadpisaæ ten plik"
-
-#~ msgid "can't open file: %s\n"
-#~ msgstr "nie mo¿na otworzyæ pliku: %s\n"
-
-#~ msgid "read error: %s\n"
-#~ msgstr "b³±d odczytu: %s\n"
-
-#~ msgid "writing keyblock\n"
-#~ msgstr "zapisujê blok klucza\n"
-
-#~ msgid "can't write keyblock: %s\n"
-#~ msgstr "nie mogê zapisaæ bloku klucza: %s\n"
-
-#~ msgid "encrypted message is valid\n"
-#~ msgstr "zaszyfrowana wiadomo¶æ jest poprawna\n"
-
-#~ msgid "Can't check MDC: %s\n"
-#~ msgstr "Sprawdzenie MDC niemo¿liwe: %s\n"
-
-#~ msgid "Usage: gpgm [options] [files] (-h for help)"
-#~ msgstr "Wywo³anie: gpgm [opcje] [pliki] (-h podaje pomoc)"
-
-#~ msgid ""
-#~ "Syntax: gpgm [options] [files]\n"
-#~ "GnuPG maintenance utility\n"
-#~ msgstr ""
-#~ "Sk³adnia: gpgm [opcje] [pliki]\n"
-#~ "GnuPG program obs³uguj±cy\n"
-
-#~ msgid "usage: gpgm [options] "
-#~ msgstr "sposób u¿ycia: gpgm [opcje]"
-
-#~ msgid "chained sigrec %lu has a wrong owner\n"
-#~ msgstr "powi±zany rekord podpisu %lu ma niew³a¶ciwego w³a¶ciciela\n"
-
-#~ msgid "lid %lu: read dir record failed: %s\n"
-#~ msgstr "lid %lu: odczyt wpisu katalogowego nie powiód³ siê: %s\n"
-
-#~ msgid "lid %lu: read key record failed: %s\n"
-#~ msgstr "lid %lu: odczyt wpisu klucza nie powiód³ siê: %s\n"
-
-#~ msgid "lid %lu: read uid record failed: %s\n"
-#~ msgstr "lid %lu: odczyt wpisu z identyfikatorem nie powiód³ siê; %s\n"
-
-#~ msgid "lid %lu: read pref record failed: %s\n"
-#~ msgstr "lid %lu: odczyt wpisu ustawieñ nie powiód³ siê: %s\n"
-
-#~ msgid "user '%s' read problem: %s\n"
-#~ msgstr "u¿ytkownik '%s' b³±d przy odczycie: %s\n"
-
-#~ msgid "user '%s' list problem: %s\n"
-#~ msgstr "u¿ytkownik '%s' b³±d listy: %s\n"
-
-#~ msgid "user '%s' not in trustdb\n"
-#~ msgstr "brak u¿ytkownika '%s' w bazie zaufania\n"
-
-#~ msgid ""
-#~ "# List of assigned trustvalues, created %s\n"
-#~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n"
-#~ msgstr ""
-#~ "# Lista przypisanych warto¶ci zaufania, stworzona %s\n"
-#~ "# (u¿yj \"gpgm --import-ownertrust\" aby j± przywróciæ)\n"
-
-#~ msgid "directory record w/o primary key\n"
-#~ msgstr "wpis katalogowy bez klucza g³ównego\n"
-
-#~ msgid "error: missing colon\n"
-#~ msgstr "b³±d: brak dwukropka\n"
-
-#~ msgid "error: invalid fingerprint\n"
-#~ msgstr "b³±d: niew³a¶ciwy odcisk klucza\n"
-
-#~ msgid "error: no ownertrust value\n"
-#~ msgstr "b³±d: brak warto¶æi zaufania w³a¶ciciela\n"
-
-#~ msgid "key not in trustdb, searching ring.\n"
-#~ msgstr "brak klucza w bazie zaufania, przeszukiwany jest zbiór kluczy\n"
-
-#~ msgid "key not in ring: %s\n"
-#~ msgstr "klucza nie ma w zbiorze: %s\n"
-
-#~ msgid "Oops: key is now in trustdb???\n"
-#~ msgstr "Oops: klucz ju¿ jest w bazie zaufania???\n"
-
-#~ msgid "Hmmm, public key lost?"
-#~ msgstr "Hmmm, klucz publiczny utracony?"
-
-#~ msgid "did not use primary key for insert_trust_record()\n"
-#~ msgstr "g³owny klucz nie zosta³ u¿yty w procedurze insert_trust_record()\n"
-
-#~ msgid "second"
-#~ msgstr "sekunda"
-
-#~ msgid "seconds"
-#~ msgstr "sekund"
-
-#~ msgid "invalid clear text header: "
-#~ msgstr "niepoprawny nag³ówek tekstu jawnego:"
-
-#~ msgid "This key belongs to us (we have the secret key)\n"
-#~ msgstr "Ten klucz nale¿y do nas (mamy odpowiadaj±cy mu klucz tajny).\n"
-
-# %d niepoprawnych podpisów
-#~ msgid "You will see a list of signators etc. here\n"
-#~ msgstr "Tu uka¿e siê lista podpisów itd.\n"
diff --git a/po/pt.po b/po/pt.po
deleted file mode 100644
index ab2cab474..000000000
--- a/po/pt.po
+++ /dev/null
@@ -1,4720 +0,0 @@
-# pt messages for gnupg
-# Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-# Pedro Morais <morais@kde.org>
-#
-# Based on pt_PT work done by:
-# Thiago Jung Bauermann <jungmann@cwb.matrix.com.br>
-# Rafael Caetano dos Santos <rcaetano@linux.ime.usp.br>
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-03-05 16:05+0000\n"
-"Last-Translator: Pedro Morais <morais@kde.org>\n"
-"Language-Team: pt <morais@kde.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Aviso: a utilizar memória insegura!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr "por favor veja http://www.gnupg.org/faq.html para mais informações\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "a operação não é possível sem memória segura inicializada\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(você pode ter usado o programa errado para esta tarefa)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "sim"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "sS"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "não"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "sair"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "erro geral"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "formato de pacote desconhecido"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "versão desconhecida"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algoritmo de chave pública desconhecido"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algoritmo de \"digest\" desconhecido"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "chave pública incorrecta"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "chave secreta incorrecta"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "assinatura incorrecta"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "erro de \"checksum\""
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "frase secreta incorrecta"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "chave pública não encontrada"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algoritmo de criptografia desconhecido"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "não é possível abrir o porta-chaves"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "pacote inválido"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armadura inválida"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "identificador de utilizador inexistente"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "chave secreta não disponível"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "chave secreta incorrecta"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "não suportado"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "chave incorrecta"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "erro de leitura"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "erro de escrita"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritmo de compressão desconhecido"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "erro na abertura do ficheiro"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "erro na criação do ficheiro"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "frase-secreta inválida"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmo de chave pública não implementado"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritmo de criptografia não implementado"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "classe de assinatura desconhecida"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "erro na base de dados de confiança"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI incorreto"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "limite de recursos"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "porta-chaves inválido"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "certificado incorrecto"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "identificador de utilizador malformado"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "erro ao fechar ficheiro"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "erro na renomeação do ficheiro"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "erro na remoção do ficheiro"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "dados inesperados"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "conflito de \"timestamp\""
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritmo de chave pública inutilizável"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "o ficheiro já existe"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "chave fraca"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argumento inválido"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI incorrecto"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI não suportado"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "erro na rede"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "não cifrado"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "não processado"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "chave pública não utilizável"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "chave secreta não utilizável"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "erro do servidor de chaves"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... isto é um bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "você encontrou um bug ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "impossível 'stat' a `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' não é um ficheiro normal - ignorado\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "nota: random_seed está vazia\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr ""
-"aviso: o ficheiro random_seed tem um tamanho inválido - não utilizado\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "impossível ler `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "nota: ficheiro random_seed não actualizado\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "impossível criar `%s': %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "impossível escrever `%s': %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "impossível fechar `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "AVISO: a utilizar gerador de números aleatórios inseguro!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"O gerador de números aleatórios é apenas um \"remendo\"\n"
-"para poder funcionar - não é de modo algum um bom gerador!\n"
-"\n"
-"NÃO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Não há bytes aleatórios suficientes. Por favor, faça outro trabalho para\n"
-"que o sistema possa recolher mais entropia! (São necessários mais %d bytes)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Comandos:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[ficheiro]|fazer uma assinatura"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[ficheiro]|fazer uma assinatura em texto puro"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "fazer uma assinatura separada"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "cifrar dados"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[ficheiros]|cifrar ficheiros"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "cifrar apenas com cifra simétrica"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "apenas armazenar"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "decifrar dados (acção por omissão)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[ficheiros]|decifrar ficheiros"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verificar uma assinatura"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "listar as chaves"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "listar as chaves e as assinaturas"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "verificar as assinaturas das chaves"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "listar as chaves e as impressões digitais"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "listar as chaves secretas"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "gerar um novo par de chaves"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "remover chaves do porta-chaves público"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "remover chaves do porta-chaves secreto"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "assinar uma chave"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "assinar uma chave localmente"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "assinar uma chave de forma não revocável"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "assinar uma chave localmente e de forma não revocável"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "assinar ou editar uma chave"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "gerar um certificado de revogação"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exportar chaves"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exportar chaves para um servidor de chaves"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importar chaves de um servidor de chaves"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "procurar chaves num servidor de chaves"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "actualizar todas as chaves a partir de um servidor de chaves"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importar/fundir chaves"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "listar apenas as sequências de pacotes"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exportar os valores de confiança"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importar os valores de confiança"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "actualizar a base de dados de confiança"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "actualizar automaticamente a base de dados de confiança"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "consertar uma base de dados de confiança"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "retirar armadura de um ficheiro ou do \"stdin\""
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "criar armadura para um ficheiro ou \"stdin\""
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [ficheiros]|imprimir \"digests\" de mensagens"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opções:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "criar saída com armadura ascii"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOME|cifrar para NOME"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOME|usar NOME como destinatário por omissão"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "usar a chave por omissão como destinatário por omissão"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr ""
-"usar este identificador de utilizador para\n"
-"assinar ou decifrar"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr ""
-"|N|estabelecer nível de compressão N\n"
-"(0 desactiva)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "usar modo de texto canônico"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "usar como ficheiro de saída"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "detalhado"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "ser mais silencioso"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "nunca usar o terminal"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "forçar assinaturas v3"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "não forçar assinaturas v3"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "forçar assinaturas v4"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "não forçar assinaturas v4"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "sempre usar um MDC para cifrar"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "nunca usar um MDC para cifrar"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "não fazer alterações"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "utilizar o gpg-agent"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "modo não-interactivo: nunca perguntar"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "assumir sim para a maioria das perguntas"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "assumir não para a maioria das perguntas"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr ""
-"adicionar este porta-chaves\n"
-"à lista de porta-chaves"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "adicionar este porta-chaves secreto à lista"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "mostrar em que porta-chave a chave está"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOME|usar NOME como chave secreta por omissão"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|ENDEREÇO|usar este servidor para buscar chaves"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr ""
-"|NOME|definir mapa de caracteres do terminal como\n"
-"NOME"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "ler opções do ficheiro"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr ""
-"|DF|escrever informações de estado para o\n"
-"descritor de ficheiro DF"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[ficheiro]|escrever ifnroamções de estado para o ficheiro"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|KEYID|confiar totalmente nesta chave"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FICHEIRO|carregar módulo de extensão FICHEIRO"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emular o modo descrito no RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"configurar todas as opções de pacote, cifragem e \"digest\"\n"
-"para comportamento OpenPGP"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"configurar todas as opções de pacote, cifragem e \"digest\"\n"
-"para comportamento PGP 2.x"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|usar mode de frase secreta N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr ""
-"|NOME|usar algoritmo de \"digest\" de mensagens NOME\n"
-"para frases secretas"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr ""
-"|NOME|usar algoritmo de criptografia NOME para\n"
-"frases secretas"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOME|usar algoritmo de criptografia NOME"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOME|usar algoritmo de \"digest\" de mensagens NOME"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|usar algoritmo de compressão N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "eliminar campo keyid dos pacotes cifrados"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Mostrar IDs Fotográficos"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Não mostrar IDs Fotográficos"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Configurar linha de comandos para ver fotografias"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Veja a página man para uma lista completa de comandos e opções)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Exemplos:\n"
-"\n"
-" -se -r Bob [ficheiro] assinar e cifrar para o utilizador Bob\n"
-" --clearsign [ficheiro] criar uma assinatura em texto puro\n"
-" --detach-sign [ficheiro] criar uma assinatura separada\n"
-" --list-keys [nomes] mostrar chaves\n"
-" --fingerprint [nomes] mostrar impressões digitais\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Por favor comunique bugs para <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Uso: gpg [opções] [ficheiros] (-h para ajuda)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintaxe: gpg [opções] [ficheiros]\n"
-"assina, verifica, cifra ou decifra\n"
-"a operação por omissão depende dos dados de entrada\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritmos suportados:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "uso: gpg [opções] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "comandos em conflito\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, fuzzy, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "Aviso: dono pouco seguro em %s \"%s\"\n"
-
-#: g10/g10.c:986
-#, fuzzy, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "Aviso: permissões pouco seguras em %s \"%s\"\n"
-
-#: g10/g10.c:989
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "Aviso: dono pouco seguro em %s \"%s\"\n"
-
-#: g10/g10.c:993
-#, fuzzy, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "Aviso: permissões pouco seguras em %s \"%s\"\n"
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTA: ficheiro de opções por omissão `%s' inexistente\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTA: ficheiro de opções por omissão `%s' inexistente\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "ficheiro de opções `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "a ler opções de `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s não é um conjunto de caracteres válido\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "não consegui processar a URI do servidor de chaves\n"
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "AVISO: `%s' é um ficheiro vazio\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armadura inválida"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "AVISO: `%s' é um ficheiro vazio\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "porta-chaves inválido"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "AVISO: O programa pode criar um ficheiro core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "AVISO: %s sobrepõe %s\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTA: %s não é para uso normal!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s não é permitido com %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s não faz sentido com %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "só pode fazer assinaturas separadas ou em texto puro no modo --pgp2\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "não pode assinar e cifrar ao mesmo tempo no modo --pgp2\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-"deve utilizar ficheiros (e não um 'pipe') quando trabalho no modo --pgp2.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "cifrar uma mensagem no modo --pgp2 necessita da cifra IDEA\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, fuzzy, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "esta mensagem poderá não ser utilizável pelo PGP 2.x\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "o algoritmo de cifragem selecionado não é válido\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "o algoritmo de \"digest\" selecionado não é válido\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "o algoritmo de \"digest\" selecionado não é válido\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "o algoritmo de compressão deve estar na faixa %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed deve ser maior que 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed deve ser maior que 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth deve estar na entre 1 e 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: o modo S2K simples (0) não é recomendável\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "modo S2K inválido: deve ser 0, 1 ou 3\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "nível de verificação por omissão inválido: deve ser 0, 1, 2 ou 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "preferências inválidas\n"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "preferências inválidas\n"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "preferências inválidas\n"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "preferências inválidas\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "falha ao inicializar a base de dados de confiança: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [nome_do_ficheiro]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [nome_do_ficheiro]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [nome_do_ficheiro]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [nome_do_ficheiro]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [nome_do_ficheiro]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [nome_do_ficheiro]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [nome_do_ficheiro]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [nome_do_ficheiro]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key id-utilizador"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key id-utilizador"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key id-utilizador"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key id-utilizador"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id-utilizador [comandos]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "impossível abrir %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [id-utilizador] [porta-chaves]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "retirada de armadura falhou: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "criação de armadura falhou: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algoritmo de dispersão inválido `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nome_do_ficheiro]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Digite a sua mensagem ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "impossível abrir `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"um nome de notação deve ter apenas letras, dígitos, pontos ou sublinhados e "
-"terminar com '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "um valor de notação não deve usar caracteres de controle\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "a URL de política de certificação dada é inválida\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "a URL de política de assinatura dada é inválida\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armadura: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "cabeçalho de armadura inválido: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "cabeçalho de armadura: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "cabeçalho de assinatura em texto puro inválido\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "assinaturas em texto puro aninhadas\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "linha com hífen inválida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armadura inesperada:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "caracter radix64 inválido %02x ignorado\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "fim de ficheiro prematuro (sem CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "fim de ficheiro prematuro (no CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC malformado\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "erro de CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "fim de ficheiro prematuro (no \"Trailer\")\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "erro na última linha\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "nenhum dado OpenPGP válido encontrado.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armadura inválida: linha maior que %d caracteres\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"caracter \"quoted printable\" na armadura - provavelmente um MTA com bugs "
-"foi usado\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Nenhum motivo especificado"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "A chave foi substituída"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "A chave foi comprometida"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "A chave já não é utilizada"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "O identificador do utilizador já não é válido"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Motivo da revocação: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Comentário da revocação: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "iImMqQsS"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Nenhum valor de confiança designado para:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Por favor decida quanto confia neste utilizador para\n"
-"verificar correctamente as chaves de outros utilizadores\n"
-"(vendo passaportes, verificando impressões digitais...)?\n"
-"\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = Não sei\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = Eu NÃO confio\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Confio moderadamente\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Confio plenamente\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Confio de forma total\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " i = mostrar mais informações\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = voltar ao menu principal\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " s = saltar esta chave\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = sair\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Decisão? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Tem a certeza que quer confiar totalmente nesta chave?"
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificados que levam a uma chave confiada plenamente:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "chave %08lX: a chave foi revogada!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Usar esta chave de qualquer modo? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "chave %08lX: a subchave foi revogada!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: a chave expirou\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-"%08lx: Não há indicação de que a assinatura pertence realmente ao dono.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Nós NÃO confiamos nesta chave\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Não se tem certeza de que esta chave realmente pertence ao dono,\n"
-"mas é aceite de qualquer modo\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Esta chave provavelmente pertence ao dono\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Esta chave pertence-nos\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Não se tem certeza de que esta chave pertence ao seu dono.\n"
-"Se você *realmente* sabe o que está a fazer, pode responder\n"
-"sim à próxima pergunta\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "AVISO: A utilizar uma chave que não é de confiança!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Isto pode significar que a assinatura é falsificada.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Nota: Esta chave foi desactivada.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Nota: Esta chave expirou!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "AVISO: Esta chave não está certificada com uma assinatura confiável!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " Não há indicação de que a assinatura pertence ao dono.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "AVISO: Nós NÃO confiamos nesta chave!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " A assinatura é provavelmente uma FALSIFICAÇÃO.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"AVISO: Esta chave não está certificada com assinaturas suficientemente\n"
-" confiáveis!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Não se tem certeza de que a assinatura pertence ao dono.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ignorado: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ignorado: a chave pública já está presente\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Não especificou um identificador de utilizador. (pode usar \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Insira o identificador do utilizador. Termine com uma linha vazia: "
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Identificador de utilizador inexistente.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "ignorado: chave pública já colocada como destinatário por omissão\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "A chave pública está desativada.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "ignorado: a chave pública já está presente\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "destinatário por omissão desconhecido `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ignorado: a chave pública está desactivada\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "nenhum endereço válido\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "preferência %c%lu não é válida\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "preferência %c%lu duplicada\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "demasiadas preferências `%c'\n"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "caracter inválido na cadeia de caractéres\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "escrevendo auto-assinatura\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "escrevendo auto-assinatura\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "escrevendo assinatura ligada a uma chave\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "tamanho de chave inválido; a utilizar %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "tamanho da chave arredondado para %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Por favor selecione o tipo de chave desejado:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA e ElGamal (por omissão)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (apenas assinatura)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (apenas cifragem)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (assinatura e cifragem)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (apenas assinatura)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (apenas cifragem)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (assinatura e cifragem)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Opção? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "A utilização destes algoritmos está desactualizada - criar na mesma?"
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Opção inválida.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Prestes a gerar um novo par de chaves %s.\n"
-" tamanho mínimo é 768 bits\n"
-" tamanho por omissão é 1024 bits\n"
-" tamanho máximo sugerido é 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Qual o tamanho de chave desejado? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA permite apenas tamanhos de 512 a 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "tamanho muito pequeno; 1024 é o valor mínimo permitido para RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "tamanho muito grande; %d é o valor máximo permitido.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Tamanhos de chave maiores que 2048 não são recomendados\n"
-"porque o tempo de computação é REALMENTE longo!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Tudo bem, mas não se esqueça que a radiação do seu monitor e teclado também "
-"é extremamente vulnerável a ataques!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "O tamanho de chave pedido é %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "arredondado para %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Por favor especifique por quanto tempo a chave deve ser válida.\n"
-" 0 = chave não expira\n"
-" <n> = chave expira em n dias\n"
-" <n>w = chave expira em n semanas\n"
-" <n>m = chave expira em n meses\n"
-" <n>y = chave expira em n anos\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Por favor especifique por quanto tempo a assinatura deve ser válida.\n"
-" 0 = assinatura não expira\n"
-" <n> = assinatura expira em n dias\n"
-" <n>w = assinatura expira em n semanas\n"
-" <n>m = assinatura expira em n meses\n"
-" <n>y = assinatura expira em n anos\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "A chave é valida por? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "A assinatura é valida por? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valor inválido\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "A %s não expira nunca\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s expira em %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"O seu sistema não consegue mostrar datas para além de 2038.\n"
-"No entanto, estas vão ser tratadas correctamente até 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Está correto (s/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Você precisa de um identificador de utilizador para identificar sua chave; "
-"o\n"
-"programa constrói o identificador a partir do Nome Completo, Comentário e\n"
-"Endereço Eletrónico desta forma:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nome completo: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Caracter inválido no nome\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "O nome não pode começar com um dígito\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "O nome deve ter pelo menos 5 caracteres\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Endereço de correio eletrónico: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Endereço eletrónico inválido\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Comentário: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Caracter inválido no comentário\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Você está usando o conjunto de caracteres `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Você selecionou este identificador de utilizador:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-"Por favor não coloque o endereço de email no nome verdadeiro ou no "
-"comentário\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoSs"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Mudar (N)ome, (C)omentário, (E)mail ou (S)air? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Mudar (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Por favor corrija primeiro o erro\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Você precisa de uma frase secreta para proteger a sua chave.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr "a frase secreta não foi repetida corretamente; tente outra vez"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n"
-"Vou continuar assim mesmo. Você pode mudar sua frase secreta a\n"
-"qualquer hora, usando este programa com a opção \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Precisamos gerar muitos bytes aleatórios. É uma boa ideia realizar outra\n"
-"actividade (escrever no teclado, mover o rato, usar os discos) durante a\n"
-"geração dos números primos; isso dá ao gerador de números aleatórios\n"
-"uma hipótese maior de ganhar entropia suficiente.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "O par de chaves DSA terá 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Geração de chave cancelada.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "a escrever chave pública para `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "a escrever chave privada para `%s'\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "nenhum porta-chaves público com permissões de escrita encontrado: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "nenhum porta-chaves secreto com permissões de escrita encontrado: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "erro ao escrever no porta-chaves público `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "erro ao escrever no porta-chaves secreto `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "chaves pública e privada criadas e assinadas.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "chave marcada como de confiança absoluta\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Note que esta chave não pode ser usada para cifragem. Você pode usar\n"
-"o comando \"--edit-key\" para gerar uma chave secundária para esse fim.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "A geração de chaves falhou: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"a chave foi criada %lu segundo no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"a chave foi criada %lu segundos no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NOTA: a criação de sub-chave para chaves v3 não respeito o OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Realmente criar? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output não funciona para este comando\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: impossível abrir: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "erro na criação da frase secreta: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "%s' já comprimido\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: AVISO: ficheiro vazio\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr "no modo --pgp2 só pode cifrar com chaves RSA de 2048 bits ou menos\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "lendo de `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-"impossível utilizar a cifra IDEA para todas as chaves para que está a "
-"cifrar.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: algoritmo de cifragem %d não encontrado nas preferências\n"
-
-#: g10/encode.c:703
-#, fuzzy, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "Este comando não é permitido no modo %s.\n"
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s cifrado para: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "chave `%s' não encontrada: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "erro na leitura do bloco de chave: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "chave %08lX: não está protegida - ignorada\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "chave %08lX: tipo PGP 2.x - ignorada\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "AVISO: nada exportado\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "entradas demais no cache pk - desactivado\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Utilizador não encontrado]"
-
-#: g10/getkey.c:1438
-#, fuzzy, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr "Chave inválida %08lX tornada válida por --always-trust\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "usando chave secundária %08lX ao invés de chave primária %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "chave %08lX: chave secreta sem chave pública - ignorada\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "ignorando bloco do tipo %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu chaves processadas até agora\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "erro na leitura de `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Número total processado: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " ignorei novas chaves: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sem IDs de utilizadores: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importados: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " não modificados: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " novos IDs de utilizadores: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " novas subchaves: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " novas assinaturas: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " novas revogações de chaves: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " chaves secretas lidas: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " chaves secretas importadas: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " chaves secretas não modificadas: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importados: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "chave %08lX: sem ID de utilizador\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "chave %08lX: sem subchave para ligação de chaves\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "chave %08lX: aceite ID de utilizador sem auto-assinatura '"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "chave %08lX: sem IDs de utilizadores válidos\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "isto pode ser causado por falta de auto-assinatura\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "chave %08lX: chave pública não encontrada: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "chave %08lX: chave nova - ignorada\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "não foi encontrada nenhum porta-chaves onde escrever: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "a escrever para `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "erro na escrita do porta-chaves `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "chave %08lX: chave pública importada\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "chave %08lX: não corresponde à nossa cópia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "chave %8lX: 1 novo ID de utilizador\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "chave %08lX: %d novos IDs de utilizadores\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "chave %08lX: 1 nova assinatura\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "chave %08lX: %d novas assinaturas\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "chave %08lX: 1 nova subchave\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "chave %08lX: %d novas subchaves\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "chave %08lX: não modificada\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "sem porta-chaves público por omissão: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "chave %08lX: chave secreta importada\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "chave %08lX: já está no porta-chaves secreto\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "chave %08lX: chave secreta não encontrada: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"chave %08lX: sem chave pública - impossível aplicar certificado\n"
-"de revogação\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "chave %08lX: certificado de revogação inválido: %s - rejeitado\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "chave %08lX: certificado de revogação importado\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "chave %08lX: nenhum ID de utilizador para assinatura\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "chave %08lX: algoritmo de chave pública não suportado\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "chave %08lX: auto-assinatura inválida\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "chave %08lX: sem subchave para ligação de chaves\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "chave %08lX: algoritmo de chave pública não suportado\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "chave %08lX: sem subchave para ligação de chaves\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "chave %08lX: ignorado ID de utilizador '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "chave %08lX: subchave ignorada\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "chave %08lX: assinatura não exportável (classe %02x) - ignorada\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "chave %08lX: certificado de revogação no local errado - ignorado\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "chave %08lX: certificado de revogação inválido: %s - ignorado\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "chave %08lX: certificado de revogação no local errado - ignorado\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "chave %08lX: detectado ID de utilizador duplicado - fundido\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "chave %08lX: certificado de revogação adicionado\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "chave %08lX: assinatura directa de chave adicionada\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revogação]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[auto-assinatura]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 assinatura incorrecta\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d assinaturas incorrectas\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 assinatura não verificada por falta de chave\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d assinaturas não verificadas por falta de chaves\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 assinatura não verificada devido a um erro\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d assinaturas não verificadas devido a erros\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 ID de utilizador sem auto-assinatura válida detectado\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d IDs de utilizadores sem auto-assinaturas válidas detectados\n"
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Identificador do utilizador \"%s\" está revocado.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Você tem certeza de que quer adicioná-la de qualquer forma? (y/N) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "AVISO: `%s' é um ficheiro vazio\n"
-
-#: g10/keyedit.c:399
-#, fuzzy, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"A sua assinatura actual em \"%s\"\n"
-"é uma assinatura local.\n"
-
-#: g10/keyedit.c:408
-#, fuzzy
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Quer promovê-la a uma assinatura exportável? "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"A sua assinatura actual em \"%s\"\n"
-"é uma assinatura local.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "Quer promovê-la a uma assinatura exportável? "
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" já foi %sassinado pela chave %08lX\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" já foi %sassinado pela chave %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nada para assinar com a chave %08lX\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Esta chave expirou!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Esta chave vai expirar em %s.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Quer que a sua assinatura expire na mesma altura? (S/n) "
-
-#: g10/keyedit.c:535
-#, fuzzy
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr "só pode assinar com chaves do tipo PGP 2.x no modo --pgp2\n"
-
-#: g10/keyedit.c:537
-#, fuzzy
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "esta mensagem poderá não ser utilizável pelo PGP 2.x\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Com que cuidado é que verificou que chave que está prestes a assinar "
-"pertence\n"
-"à pessoa correcta? Se não sabe o que responder, escolha \"0\".\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Não vou responder.%s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Não verifiquei.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Verifiquei por alto.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Verifiquei com bastante cuidado.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Você tem certeza de que quer assinar esta chave com\n"
-"a sua chave: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "isto pode ser causado por falta de auto-assinatura\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"A assinatura será marcada como não-exportável.\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"A assinatura será marcada como não-revocável.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"A assinatura será marcada como não-exportável.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"A assinatura será marcada como não-revocável.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Não verifiquei esta chave.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Verifiquei por alto esta chave.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Verifiquei esta chave com muito cuidado.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Realmente assinar? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "assinatura falhou: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Esta chave não é protegida.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Componentes secretas da chave primária não disponíveis.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "A chave é protegida.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Impossível editar esta chave: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Digite a nova frase para esta chave secreta.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Você quer realmente fazer isso? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "a mover a assinatura da chave para o local correcto\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "sair deste menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "gravar e sair"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "mostra esta ajuda"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "mostra impressão digital"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "lista chave e identificadores de utilizadores"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "seleciona ID de utilizador N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "seleciona chave secundária N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "lista assinaturas"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "assina a chave"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "assina a chave localmente"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "nrsign"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "assina a chave de forma não-revogável"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "nrlsign"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "assinar a chave localmente e de forma não revogável"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "adiciona um novo ID de utilizador"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "addphoto"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "adiciona um identificador fotográfico"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "remove ID de utilizador"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "delphoto"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "adiciona nova chave secundária"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "remove uma chave secundária"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "adiciona nova chave secundária"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "remove assinaturas"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "muda a data de validade"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "primary"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "seleccionar o identificador do utilizador como primário"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "alterna entre listagem de chave secreta e pública"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "lista preferências (perito)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "lista preferências (detalhadamente)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "setpref"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "configurar lista de preferências"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "updpref"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "preferências actualizadas"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "muda a frase secreta"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "muda os valores de confiança"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revoga assinaturas"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revoga uma chave secundária"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "desactiva uma chave"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "activa uma chave"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "showphoto"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "mostrar identificador fotográfico"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "impossível fazer isso em modo não-interativo\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "erro na leitura do bloco de chave secreto `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Chave secreta disponível.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Comando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "A chave secreta é necessária para fazer isto.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Por favor utilize o comando \"toggle\" primeiro.\n"
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "A chave está revogada.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Realmente assinar todos os IDs de utilizador? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Sugestão: Selecione os IDs de utilizador para assinar\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "Este comando não é permitido no modo %s.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Você precisa selecionar pelo menos um ID de utilizador.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Você não pode remover o último ID de utilizador!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Realmente remover todos os IDs de utilizador seleccionados? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Realmente remover este ID de utilizador? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Você deve selecionar pelo menos uma chave.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Você quer realmente remover as chaves selecionadas? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Você quer realmente remover esta chave? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Você quer realmente revogar as chaves selecionadas? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Você quer realmente revogar esta chave? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"Realmente actualizar as preferências para os utilizadores seleccionados?"
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Realmente actualizar as preferências?"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Gravar alterações? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Sair sem gravar? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "actualização falhou: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "actualização da chave secreta falhou: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Chave não alterada, nenhuma actualização é necessária.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Comando inválido (tente \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Esta chave pode ser revogada pela chave %s %s%s\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (sensível)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX criada: %s expira: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " confiança: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Esta chave foi desactivada"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! subchave foi revogada: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- revogação falsa encontrada\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problema ao verificar revogação: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"AVISO: Esta chave é do tipo PGP2. Se adicionar um identificador fotográfico\n"
-" algumas versão do PGP podem rejeitá-la.\n"
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Você tem certeza de que quer adicioná-la de qualquer forma? (y/n) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-"Não pode adicionar um identificador fotográfico a uma chave tipo PGP2.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Apagar esta assinatura válida? (s/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Apagar esta assinatura inválida? (s/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Apagar esta assinatura desconhecida? (s/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Realmente remover esta auto-assinatura? (s/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d assinatura removida.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d assinaturas removidas.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Nada removido.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Insira o tamanho da chave"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Por favor remova as selecções das chaves secretas.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Por favor seleccione no máximo uma chave secundária.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "A modificar a data de validade para uma chave secundária.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Modificar a data de validade para uma chave primária.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Você não pode modificar a data de validade de uma chave v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Nenhuma assinatura correspondente no porta-chaves secreto\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Seleccione exactamente um identificador de utilizador.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "chave %08lX: auto-assinatura inválida\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Nenhum ID de utilizador com índice %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Nenhuma chave secundária com índice %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "ID de utilizador: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"assinado com sua chave %08lX em %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"assinado com sua chave %08lX em %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Esta chave vai expirar em %s.\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Você tem certeza de que quer adicioná-la de qualquer forma? (y/n) "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Assinou estes identificadores de utilizadores:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " assinado por %08lX em %s%s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revogado por %08lX em %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Está prestes a revogar estas assinaturas:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " assinado por %08lX em %s%s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Realmente gerar os certificados de revogação? (s/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "nenhuma chave secreta\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "Politica de assinatura: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "Politica de assinatura: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "AVISO: dados de notação inválidos encontrados\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notação da assinatura: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "Notação da assinatura: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "não é legível por humanos"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Porta-chaves"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr "[expira: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "listar as chaves e as impressões digitais"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Impressão da chave ="
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Impressão da chave ="
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Impressão da chave ="
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Impressão da chave ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algoritmo de dispersão inválido `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "dados cifrados com %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "cifrado com algoritmo desconhecido %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "a chave pública é %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "dados cifrados com chave pública: DEK válido\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "cifrado com chave %u-bit %s, ID %08lX, criada em %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "cifrado com chave %s, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "decifragem de chave pública falhou: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "a assumir dados cifrados %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "Cifra IDEO não disponível, a tentar utilizar %s em substituição\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "decifragem correcta\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "CUIDADO: a mensagem cifrada foi manipulada!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "decifragem falhou: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nome do ficheiro original='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "revocação solitária - utilize \"gpg --import\" para aplicar\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notação: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Política: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verificação de assinatura suprimida\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "não consigo tratar estas assinaturas múltiplas\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "Assinatura INCORRECTA de \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Assinatura expirada de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Assinatura correcta de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[incerto]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " ou \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Impossível verificar assinatura: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "não é uma assinatura separada\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "assinatura de classe 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "formato de assinatura antigo (PGP2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "pacote raiz inválido detectado em proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "impossível desactivar core dumps: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Algoritmos experimentais não devem ser usados!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"este algoritmo de criptografia está desctualizado; por favor use um "
-"algoritmo mais standard!x\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "o 'plugin' com a cifra IDEA não está presente\n"
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr "veja http://www.gnupg.org/why-not-idea.html para mais informações\n"
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "AVISO: `%s' é um ficheiro vazio\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "AVISO: `%s' é um ficheiro vazio\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "impossível manipular algoritmo de chave pública %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "subpacote do tipo %d tem bit crítico ligado\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "o gpg-agent não está disponível nesta sessão\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "não consegui colocar o pid do cliente no agente\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "não consigo obter FD de leitura no servidor para o agente\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "não consigo obter FD de escrita no servidor para o agente\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "variável de ambiente GPG_AGENT_INFO inválida\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "a versão %d do protocolo gpg-agent não é suportada\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "impossível ligar a `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "problemas na comunicação com o gpg-agent\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problema com o agente - a desactivar a utilização deste\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (ID principal da chave %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Precisa de uma frase secreta para desbloquear a chave secreta do "
-"utilizador:\n"
-"\n"
-"\"%.*s\"\n"
-"chave %u bits %s, ID %08lx, criada %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Insira a frase secreta\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Repita a frase secreta\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "frase secreta demasiado longa\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "resposta do agente inválida\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "cancelado pelo utilizador\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problema com o agente: o agente returnou 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Você precisa de uma frase secreta para desbloquear a chave secreta do\n"
-"utilizador: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "chave de %u-bit/%s, ID %08lX, criada em %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "impossível pedir senha em modo não-interactivo\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Digite a frase secreta: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Repita a frase secreta: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "dados não gravados; use a opção \"--output\" para gravá-los\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "erro ao criar `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Assinatura separada.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Por favor digite o nome do ficheiro de dados: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "lendo do \"stdin\" ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "não há dados assinados\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "impossível abrir dados assinados `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinatário anónimo; a tentar chave secreta %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "certo, nós somos o destinatário anónimo.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "codificação antiga do DEK não suportada\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "algoritmo de cifra %d%s é desconhecido ou foi desactivado\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "NOTA: algoritmo de cifragem %d não encontrado nas preferências\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTA: chave secreta %08lX expirou em %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "chave %08lX: a chave foi revogada!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "a pedir chave %08lX do servidor de chaves HKP %s\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "não consigo obter chave do servidor: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "erro ao enviar para `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "sucesso ao enviar para `%s' (estado=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "erro ao enviar para `%s': estado=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "a procurar por \"%s\" no servidor HKP %s\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "não consigo procurar no servidor de chaves: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "partes da chave secreta não disponíveis\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "algoritmo de protecção %d%s não é suportado\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Frase secreta inválida; por favor tente novamente"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"esta é uma chave ElGamal gerada pelo PGP que NÃO é segura para assinaturas!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "a chave pública é %lu segundo mais nova que a assinatura\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "a chave pública é %lu segundos mais nova que a assinatura\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"a chave foi criada %lu segundo no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"a chave foi criada %lu segundos no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTA: chave de assinatura %08lx expirou %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "assumindo assinatura incorrecta devido a um bit crítico desconhecido\n"
-
-#: g10/sign.c:103
-#, fuzzy, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"AVISO: impossível expandir-%% a url de política (demasiado grande).\n"
-"A utilizar não expandida.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"AVISO: impossível expandir-%% a url de política (demasiado grande).\n"
-"A utilizar não expandida.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "verificação da assinatura criada falhou: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "assinatura %s de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "AVISO: `%s' é um ficheiro vazio\n"
-
-#: g10/sign.c:644
-#, fuzzy
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "só pode assinar com chaves do tipo PGP 2.x no modo --pgp2\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "impossível criar %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: algoritmo de cifragem %d não encontrado nas preferências\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "a assinar:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "só pode assinar à vista com chaves do tipo PGP 2.x no modo --pgp2\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "será utilizada a cifragem %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "impossível manipular linhas de texto maiores que %d caracteres\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "linha de entrada maior que %d caracteres\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "base de dados de confiança rec %lu: lseek falhou: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "base de dados de confiança rec %lu: escrita falhou (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transação de base de dados de confiança muito grande\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: impossível aceder: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: diretoria inexistente!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: impossível criar tranca\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: impossível criar tranca\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: impossível criar: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: falha ao criar registo de versão: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: base de dados de confiança inválida criada\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: base de dados de confiança criada\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: base de dados de confiança inválida\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: falha ao criar tabela de dispersão: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: erro a actualizar registo de versão: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: erro ao ler registo de versão: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: erro ao escrever registo de versão: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "base de dados de confiança: lseek falhou: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "base de dados de confiança: leitura falhou (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: não é um base de dados de confiança\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: registo de versão com recnum %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versão de ficheiro inválida %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: erro ao ler registo livre: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: erro ao escrever registo de diretório: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: falha ao zerar um registo: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: falha ao anexar um registo: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"A base de dados de confiança está danificada; por favor execute\n"
-"\"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' não é um identificador longo de chave válido\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "chave %08lX: aceite como chave de confiança\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "chave %08lX ocrreu mais do que uma vez na base de dados de confiança\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr ""
-"chave %08lX: nenhuma chave pública para chave de confiança - ignorada\n"
-"\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "registo de confiança %lu, tipo req %d: falha na leitura: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "registo de confiança %lu não é do tipo pedido %d\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "registo de confiança %lu, tipo %d: escrita falhou: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "base de dados de confiança: sincronização falhou: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "não é necessária uma verificação da base de dados de confiança\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "proxima verificação da base de dados de confiança a %s\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "a verificar a base de dados de confiança\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "chave pública %08lX não encontrada: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-"chave pública da chave absolutamente de confiança %08lX não encontrada\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"a verificar à profundidade %d assinado=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"a assinatura não pode ser verificada.\n"
-"Não se esqueça que o ficheiro com a assinatura (.sig ou .asc)\n"
-"deve ser o primeiro a ser dado na linha de comando.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "linha de entrada %u demasiado longa ou falta o LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"a chave não está marcada insegura - impossível usá-la com o RNG falso!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "ignorado `%s': duplicada\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "ignorado `%s': %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "ignorado: a chave secreta já está presente\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"ignorado `%s': esta é uma chave ElGamal gerada pelo PGP que não é segura "
-"para assinaturas!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Arquivo `%s' já existe. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Escrever por cima (s/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: sufixo desconhecido\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Digite novo nome de ficheiro"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "a escrever em \"stdout\"\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "a assumir dados assinados em `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: novo ficheiro de opções criado\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: impossível criar directoria: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: directoria criada\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"AVISO: A mensagem foi cifrada com uma chave fraca na cifragem simétrica.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problema ao tratar pacote cifrado\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "chave fraca criada - tentando novamente\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"impossível evitar chave fraca para criptografia simétrica;\n"
-"tentei %d vezes!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "impossível fazer isso em modo não-interactivo sem utilizar \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Remover esta chave do porta-chaves?"
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Esta chave é secreta! - apagar de qualquer modo? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "remoção do bloco de chave falhou: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "há uma chave secreta para a chave pública \"%s\"!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "utilize a opção \"--delete-secret-keys\" para a apagar primeiro.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Você decide que valor usar aqui; este valor nunca será exportado para\n"
-"terceiros. Precisamos dele implementar a rede de confiança, que não tem\n"
-"nada a ver com a rede de certificados (implicitamente criada)."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Para construir a Teia-de-Confiança ('Web-of-Trust'), o GnuPG precisa de\n"
-"saber quais são as chaves em que deposita confiança absoluta - normalmente\n"
-"estas são as chaves a que tem acesso à chave privada. Responda \"sim\" "
-"para\n"
-"que esta chave seja de confiança absoluta.\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Se você quiser usar esta chave revogada assim mesmo, responda \"sim\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Se você quiser usar esta chave, não de confiança, assim mesmo, responda \"sim"
-"\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr ""
-"Digite o ID de utilizador do destinatário para quem quer enviar a\n"
-"mensagem."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Seleccione o algoritmo a ser usado.\n"
-"\n"
-"DSA (ou DSS) é o algoritmo de assinatura digital que pode ser usado apenas\n"
-"para assinaturas. Este é o algoritmo recomendado porque a verificação de\n"
-"assinaturas DSA é muito mais rápida que a verificação de ElGamal.\n"
-"\n"
-"ElGamal é um algoritmo que pode ser usado para assinatura e cifragem.\n"
-"O OpenPGP distingue dois tipos deste algoritmo: um apenas para cifragem\n"
-"e outro para assinatura+cifragem; na verdade são iguais, mas alguns\n"
-"parâmetros precisam ser escolhidos de modo especial para criar uma chave\n"
-"segura para assinatura: este programa faz isso, mas algumas outras\n"
-"implementações do OpenPGP não vão necessariamente entender o tipo\n"
-"assinatura+cifragem.\n"
-"\n"
-"A chave primária precisa sempre ser uma chave capaz de fazer assinaturas;\n"
-"este é o motivo pelo qual a chave ElGamal apenas para cifragem não está\n"
-"disponível neste menu."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Apesar de estas chaves estarem definidas no RFC2440, elas não são "
-"recomendadas\n"
-"porque não são suportadas por todos os programas e assinaturas criadas com\n"
-"elas são grandes e sua verificação é lenta."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Insira o tamanho da chave"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Responda \"sim\" ou \"não\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Digite o valor necessário conforme pedido.\n"
-"É possível digitar uma data ISO (AAAA-MM-DD) mas você não terá uma boa\n"
-"reacção a erros - o sistema tentará interpretar o valor dado como um "
-"intervalo."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Digite o nome do possuidor da chave"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "por favor digite um endereço de email (opcional mas recomendado)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Por favor digite um comentário (opcional)"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N para mudar o nome.\n"
-"C para mudar o comentário.\n"
-"E para mudar o endereço de email\n"
-"O para continuar a geração da chave.\n"
-"S para interromper a geração da chave."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Responda \"sim\" (ou apenas \"s\") se quiser gerar a subchave."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Quando assina uma chave de identificação de um utilizador, deve primeiro\n"
-"verificar que a chave pertence realmente à pessoa em questão. É útil para\n"
-"terceiros saberem com que cuidado é que efectuou esta verificação.\n"
-"\n"
-"\"0\" significa que não deseja declarar a forma com verificou a chave\n"
-"\n"
-"\"1\" significa que acredita que a chave pertence à pessoa em questão, mas\n"
-" não conseguiu ou não tentou verificar. Este grau é útil para quando\n"
-" assina a chave de uma utilizador pseudo-anónimo.\n"
-"\n"
-"\"2\" significa que efectuou uma verificação normal da chave. Por exemplo,\n"
-" isto pode significar que verificou a impressão digital da chave e\n"
-" verificou o identificador de utilizador da chave contra uma "
-"identificação\n"
-" fotográfica.\n"
-"\n"
-"\"3\" significa que efectuou uma verificação exaustiva da chave. Por "
-"exemplo,\n"
-" isto pode significar que efectuou a verificação pessoalmente, e que \n"
-" utilizou um documento, com fotografia, difícil de falsificar \n"
-" (como por exemplo um passaporte) que o nome do dono da chave é o\n"
-" mesmo do que o identificador da chave, e que, finalmente, verificou\n"
-" (através de troca de e-mail) que o endereço de email da chave pertence\n"
-" ao done da chave.\n"
-"\n"
-"Atenção: os exemplos dados para os níveis 2 e 3 são *apenas* exemplos.\n"
-"Compete-lhe a si decidir o que considera, ao assinar chaves, uma "
-"verificação\n"
-"\"normal\" e uma verificação \"exaustiva\".\n"
-"\n"
-"Se não sabe qual é a resposta correcta, responda \"0\"."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Responda \"sim\" se quiser assinar TODOS os IDs de utilizador"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Responda \"sim\" se quiser realmente remover este ID de utilizador.\n"
-"Todos os certificados também serão perdidos!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Responda \"sim\" se quiser remover a subchave"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Esta é uma assinatura válida na chave; normalmente não é desejável\n"
-"remover esta assinatura porque ela pode ser importante para estabelecer\n"
-"uma conexão de confiança à chave ou a outra chave certificada por esta."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Esta assinatura não pode ser verificada porque você não tem a chave\n"
-"correspondente. Você deve adiar sua remoção até saber que chave foi usada\n"
-"porque a chave desta assinatura pode estabelecer uma conexão de confiança\n"
-"através de outra chave já certificada."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "A assinatura não é válida. Faz sentido removê-la do seu porta-chaves."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Esta é uma assinatura que liga o ID de utilizador à chave. Geralmente\n"
-"não é uma boa idéia remover tal assinatura. É possível que o GnuPG\n"
-"não consiga mais usar esta chave. Faça isto apenas se por alguma\n"
-"razão esta auto-assinatura não for válida e há uma segunda disponível."
-
-#: g10/helptext.c:237
-#, fuzzy
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Muda as preferências de todos os identificadores de utilizadores\n"
-"(ou apenas dos seleccionados) para a lista actual de preferências.\n"
-"O 'timestamp' de todas as auto-assinaturas afectuadas será avançado\n"
-"em um segundo.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Por favor digite a frase secreta \n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Por favor repita a frase secreta, para ter certeza do que digitou."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Dê o nome para o ficheiro ao qual a assinatura se aplica"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Responda \"sim\" se quiser escrever por cima do ficheiro"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Por favor digite um novo nome de ficheiro. Se você apenas carregar em "
-"RETURN\n"
-"o ficheiro por omissão (que é mostrado entre parênteses) será utilizado."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Deve especificar uma razão para a emissão do certificado. Dependendo no\n"
-"contexto, pode escolher as seguintes opções desta lista:\n"
-" \"A chave foi comprometida\"\n"
-" Utilize esta opção se tem razões para acreditar que indivíduos não\n"
-" autorizados obtiveram acesso à sua chave secreta.\n"
-" \"A chave foi substituida\"\n"
-" Utilize esta opção se substituiu esta chave com uma mais recente.\n"
-" \"A chave já não é utilizada\"\n"
-" Utilize esta opção se já não utiliza a chave.\n"
-" \"O identificador do utilizador já não é válido\"\n"
-" Utilize esta opção para comunicar que o identificador do utilizador\n"
-" não deve ser mais utilizado; normalmente utilizada para indicar\n"
-" que um endereço de email é inválido.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Se desejar, pode inserir uma texto descrevendo a razão pela qual criou\n"
-"este certificado de revogação. Por favor mantenha este texto conciso.\n"
-"Uma linha vazia termina o texto.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Nenhuma ajuda disponível"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Nenhuma ajuda disponível para `%s'"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "erro ao criar porta-chaves `%s': %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "porta-chaves `%s' criado\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "falha ao criar 'cache' do porta-chaves: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "AVISO: existem 2 ficheiros com informações confidenciais.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s é o não modificado\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s é o novo\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Por favor conserte esta possível falha de segurança\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "a verificar o porta chaves `%s'\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu chaves verificadas até agora (%lu assinaturas)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu chave verificadas (%lu assinaturas)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: porta-chaves criado\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr "vai ter de reiniciar o GnuPG, para poder ler as novas opções\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "a mudança de permissões de `%s' falhou: %s\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Impressão digital:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Impressão digital:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOME=VALOR|usar estes dados de notação"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "o primeiro caracter de um nome de notação deve ser uma letra ou um "
-#~ "sublinhado\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "pontos num nome de notação devem estar cercados por outros caracteres\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "AVISO: Esta chave já tem um identificador fotográfico.\n"
-#~ " Se adicionar outro pode confundir algumas versão do PGP.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Só pode ter um identificador fotográfico por chave.\n"
-
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Você tem certeza de que quer assiná-la?\n"
-
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr " Você tem a certeza que quer mesmo assim assiná-la?\n"
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Realmente assinar? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "chave %08lX: a nossa cópia não tem auto-assinatura\n"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Você precisa realmente de uma chave tão grande? "
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " assinado por %08lX em %s\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
deleted file mode 100644
index a97f9018a..000000000
--- a/po/pt_BR.po
+++ /dev/null
@@ -1,5222 +0,0 @@
-# Portuguese (Brazilian) messages for gnupg
-# Copyright (C) 1999, 2002 Free Software Foundation, Inc.
-# Thiago Jung Bauermann <jungmann@cwb.matrix.com.br>, 1999.
-# Revised by Rafael Caetano dos Santos <rcaetano@linux.ime.usp.br>.
-# I tried to make this one close to es_ES by Urko Lusa
-#
-# Rafael Caetano dos Santos <rcaetano@linux.ime.usp.br> used to be
-# the last translator but he can't continue his work.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: GNU gnupg 1.0\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 1998-11-20 23:46:36-0200\n"
-"Last-Translator:\n"
-"Language-Team: ?\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Aviso: usando memória insegura!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "a operação não é possível sem memória segura inicializada\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(você pode ter usado o programa errado para esta tarefa)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "sim"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "sS"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "não"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-# INICIO MENU
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "sair"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "qQ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "erro geral"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "formato de pacote desconhecido"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "versão desconhecida"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "algoritmo de chave pública desconhecido"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "algoritmo de \"digest\" desconhecido"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "chave pública incorreta"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "chave secreta incorreta"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "assinatura incorreta"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "erro de \"checksum\""
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "frase secreta incorreta"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "chave pública não encontrada"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "algoritmo de criptografia desconhecido"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "não é possível abrir o chaveiro"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "pacote inválido"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "armadura inválida"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "identificador de usuário inexistente"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "chave secreta não disponível"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "chave secreta incorreta"
-
-# suportado ???
-#: util/errors.c:72
-msgid "not supported"
-msgstr "não suportado"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "chave incorreta"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "erro de leitura"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "erro de escrita"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "algoritmo de compressão desconhecido"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "erro na abertura de arquivo"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "erro na criação de arquivo"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "frase secreta inválida"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmo de chave pública não implementado"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "algoritmo de criptografia não implementado"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "classe de assinatura desconhecida"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "erro no banco de dados de confiabilidade"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI incorreto"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "limite de recurso"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "chaveiro inválido"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "certificado incorreto"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "identificador de usuário malformado"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "erro no fechamento de arquivo"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "erro na renomeação de arquivo"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "erro na remoção de arquivo"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "dados inesperados"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "conflito de \"timestamp\""
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "algoritmo de chave pública inutilizável"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "o arquivo já existe"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "chave fraca"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "argumento inválido"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI incorreto"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "URI não suportado"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "erro na rede"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "não criptografado"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "não processado(s)"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-#, fuzzy
-msgid "unusable public key"
-msgstr "chave pública incorreta"
-
-#: util/errors.c:106
-#, fuzzy
-msgid "unusable secret key"
-msgstr "chave secreta incorreta"
-
-#: util/errors.c:107
-#, fuzzy
-msgid "keyserver error"
-msgstr "erro geral"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... isto é um bug (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "você encontrou um bug ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: cipher/random.c:385
-#, fuzzy, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr ""
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr ""
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "AVISO: dados de notação inválidos encontrados\n"
-
-#: cipher/random.c:409
-#, fuzzy, c-format
-msgid "can't read `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr ""
-
-#: cipher/random.c:467
-#, fuzzy, c-format
-msgid "can't create `%s': %s\n"
-msgstr "impossível criar %s: %s\n"
-
-#: cipher/random.c:474
-#, fuzzy, c-format
-msgid "can't write `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: cipher/random.c:477
-#, fuzzy, c-format
-msgid "can't close `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "AVISO: usando gerador de números aleatórios inseguro!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"O gerador de números aleatórios é apenas um \"remendo\"\n"
-"para poder funcionar - não é de modo algum um bom gerador!\n"
-"\n"
-"NÃO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Não há bytes aleatórios suficientes. Por favor, faça algum outro trabalho\n"
-"para que o sistema possa coletar mais entropia!\n"
-"(São necessários mais %d bytes)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Comandos:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[arquivo]|fazer uma assinatura"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[arquivo]|fazer uma assinatura em texto puro"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "fazer uma assinatura separada"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "criptografar dados"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr ""
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr ""
-"criptografar apenas com criptografia\n"
-"simétrica"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "apenas armazenar"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "descriptografar dados (padrão)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr ""
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verificar uma assinatura"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "listar as chaves"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "listar as chaves e as assinaturas"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "verificar as assinaturas das chaves"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "listar as chaves e as impressões digitais"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "listar as chaves secretas"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "gerar um novo par de chaves"
-
-#: g10/g10.c:327
-#, fuzzy
-msgid "remove keys from the public keyring"
-msgstr "remover a chave do chaveiro público"
-
-#: g10/g10.c:329
-#, fuzzy
-msgid "remove keys from the secret keyring"
-msgstr "remover a chave do chaveiro secreto"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "assinar uma chave"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "assinar uma chave localmente"
-
-#: g10/g10.c:332
-#, fuzzy
-msgid "sign a key non-revocably"
-msgstr "assinar uma chave localmente"
-
-#: g10/g10.c:333
-#, fuzzy
-msgid "sign a key locally and non-revocably"
-msgstr "assinar uma chave localmente"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "assinar ou editar uma chave"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "gerar um certificado de revogação"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exportar chaves"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exportar chaves para um servidor"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importar chaves de um servidor"
-
-#: g10/g10.c:341
-#, fuzzy
-msgid "search for keys on a key server"
-msgstr "exportar chaves para um servidor"
-
-#: g10/g10.c:343
-#, fuzzy
-msgid "update all keys from a keyserver"
-msgstr "importar chaves de um servidor"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importar/fundir chaves"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "listar apenas as seqüências de pacotes"
-
-# ownertrust ???
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exportar os valores de confiança"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importar os valores de confiança"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "atualizar o banco de dados de confiabilidade"
-
-#: g10/g10.c:357
-#, fuzzy
-msgid "unattended trust database update"
-msgstr "atualizar o banco de dados de confiabilidade"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr ""
-"consertar um banco de dados de confiabilidade\n"
-"danificado"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "retirar a armadura de um arquivo ou de \"stdin\""
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "criar armadura para um arquivo ou \"stdin\""
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [arquivos]|imprimir \"digests\" de mensagens"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Opções:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "criar saída com armadura ascii"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NOME|criptografar para NOME"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NOME|usar NOME como destinatário padrão"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "usar a chave padrão como destinatário padrão"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr ""
-"usar este identificador de usuário para\n"
-"assinar ou descriptografar"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr ""
-"|N|estabelecer nível de compressão N\n"
-"(0 desabilita)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "usar modo de texto canônico"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "usar como arquivo de saída"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "detalhado"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "ser mais silencioso"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "nunca usar o terminal"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "forçar assinaturas v3"
-
-#: g10/g10.c:397
-#, fuzzy
-msgid "do not force v3 signatures"
-msgstr "forçar assinaturas v3"
-
-#: g10/g10.c:398
-#, fuzzy
-msgid "force v4 key signatures"
-msgstr "forçar assinaturas v3"
-
-#: g10/g10.c:399
-#, fuzzy
-msgid "do not force v4 key signatures"
-msgstr "forçar assinaturas v3"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "sempre usar um MDC para criptografar"
-
-#: g10/g10.c:402
-#, fuzzy
-msgid "never use a MDC for encryption"
-msgstr "sempre usar um MDC para criptografar"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "não fazer alterações"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr ""
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "modo não-interativo: nunca perguntar"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "assumir sim para a maioria das perguntas"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "assumir não para a maioria das perguntas"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "adicionar este chaveiro à lista de chaveiros"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "adicionar este chaveiro secreto à lista"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr ""
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NOME|usar NOME como chave secreta padrão"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|ENDEREÇO|usar este servidor para buscar chaves"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr ""
-"|NOME|definir mapa de caracteres do terminal como\n"
-"NOME"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "ler opções do arquivo"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr ""
-"|DA|escrever informações de estado para o\n"
-"descritor de arquivo DA"
-
-#: g10/g10.c:427
-#, fuzzy
-msgid "|[file]|write status info to file"
-msgstr ""
-"|DA|escrever informações de estado para o\n"
-"descritor de arquivo DA"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr ""
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|ARQUIVO|carregar módulo de extensão ARQUIVO"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "emular o modo descrito no RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr ""
-"configurar todas as opções de pacote,\n"
-"criptografia e \"digest\" para comportamento\n"
-"OpenPGP"
-
-#: g10/g10.c:443
-#, fuzzy
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr ""
-"configurar todas as opções de pacote,\n"
-"criptografia e \"digest\" para comportamento\n"
-"OpenPGP"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|usar frase secreta modo N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr ""
-"|NOME|usar algoritmo de \"digest\" de mensagens NOME\n"
-"para frases secretas"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr ""
-"|NOME|usar algoritmo de criptografia NOME para\n"
-"frases secretas"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOME|usar algoritmo de criptografia NOME"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOME|usar algoritmo de \"digest\" de mensagens NOME"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|usar algoritmo de compressão N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr ""
-"eliminar o campo keyid dos pacotes\n"
-"criptografados"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Exemplos:\n"
-"\n"
-" -se -r Bob [arquivo] assinar e criptografar para usuário Bob\n"
-" --clearsign [arquivo] criar uma assinatura em texto puro\n"
-" --detach-sign [arquivo] criar uma assinatura separada\n"
-" --list-keys [nomes] mostrar chaves\n"
-" --fingerprint [nomes] mostrar impressões digitais\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Por favor comunique bugs para <gnupg-bugs@gnu.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Uso: gpg [opções] [arquivos] (-h para ajuda)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Sintaxe: gpg [opções] [arquivos]\n"
-"assina, verifica, criptografa ou descriptografa\n"
-"a operação padrão depende dos dados de entrada\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Algoritmos suportados:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "uso: gpg [opções] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "comandos conflitantes\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "NOTA: arquivo de opções padrão `%s' inexistente\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "NOTA: arquivo de opções padrão `%s' inexistente\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "arquivo de opções `%s': %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "lendo opções de `%s'\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s não é um conjunto de caracteres válido\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr ""
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "armadura inválida"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "chaveiro inválido"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "AVISO: O programa pode criar um arquivo core!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr ""
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "NOTA: %s não é para uso normal!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s não é permitido com %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s não faz sentido com %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr ""
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "o algoritmo de criptografia selecionado não é válido\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "o algoritmo de \"digest\" selecionado não é válido\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "o algoritmo de \"digest\" selecionado não é válido\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "o algoritmo de compressão deve estar na faixa %d..%d\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed deve ser maior que 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed deve ser maior que 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "max-cert-depth deve estar na entre 1 e 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: o modo S2K simples (0) não é recomendável\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "modo S2K inválido: deve ser 0, 1 ou 3\n"
-
-#: g10/g10.c:1862
-#, fuzzy
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "modo S2K inválido: deve ser 0, 1 ou 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "lista preferências"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "lista preferências"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "lista preferências"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "lista preferências"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [nome_do_arquivo]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [nome_do_arquivo]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [nome_do_arquivo]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [nome_do_arquivo]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [nome_do_arquivo]"
-
-#: g10/g10.c:2056
-#, fuzzy
-msgid "--sign --symmetric [filename]"
-msgstr "--symmetric [nome_do_arquivo]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [nome_do_arquivo]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [nome_do_arquivo]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key id-usuário"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key id-usuário"
-
-#: g10/g10.c:2110
-#, fuzzy
-msgid "--nrsign-key user-id"
-msgstr "--sign-key id-usuário"
-
-#: g10/g10.c:2118
-#, fuzzy
-msgid "--nrlsign-key user-id"
-msgstr "--sign-key id-usuário"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key id-usuário [comandos]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "impossível abrir %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [id-usuário] [chaveiro]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "retirada de armadura falhou: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "criação de armadura falhou: %s\n"
-
-# "hash" poderia ser "espalhamento", mas não fica claro
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "algoritmo de hash inválido `%s'\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[nome_do_arquivo]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Vá em frente e digite sua mensagem ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "impossível abrir `%s'\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"um nome de notação deve ter apenas letras, dígitos, pontos ou sublinhados e "
-"terminar com '='\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "um valor de notação não deve usar caracteres de controle\n"
-
-#: g10/g10.c:2737
-#, fuzzy
-msgid "the given certification policy URL is invalid\n"
-msgstr "a URL de política dada é inválida\n"
-
-#: g10/g10.c:2739
-#, fuzzy
-msgid "the given signature policy URL is invalid\n"
-msgstr "a URL de política dada é inválida\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "armadura: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "cabeçalho de armadura inválido: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "cabeçalho de armadura: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "cabeçalho de assinatura em texto puro inválido\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "assinaturas em texto puro aninhadas\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "linha com hífen inválida: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "armadura inesperada:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "caractere radix64 inválido %02x ignorado\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "fim de arquivo prematuro (sem CRC)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "fim de arquivo prematuro (no CRC)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC malformado\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "erro de CRC; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "fim de arquivo prematuro (no \"Trailer\")\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "erro na linha \"trailer\"\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "nenhum dado OpenPGP válido encontrado.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "armadura inválida: linha maior que %d caracteres\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"caractere \"quoted printable\" na armadura - provavelmente um MTA com bugs "
-"foi usado\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr ""
-
-#: g10/pkclist.c:63
-#, fuzzy
-msgid "Key is superseded"
-msgstr "A chave é protegida.\n"
-
-#: g10/pkclist.c:65
-#, fuzzy
-msgid "Key has been compromised"
-msgstr "Esta chave foi desativada"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr ""
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr ""
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "rev- revogações de chaves incorreta\n"
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "[revogação]"
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr ""
-
-#: g10/pkclist.c:258
-#, fuzzy, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Nenhum valor de confiança designado para %lu:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-#, fuzzy
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Por favor decida quanto você confia neste usuário para\n"
-"verificar corretamente as chaves de outros usuários\n"
-"(olhando em passaportes, checando impressões digitais\n"
-"de outras fontes...)?\n"
-"\n"
-" 1 = Não sei\n"
-" 2 = Eu NÃO confio\n"
-" 3 = Eu confio moderadamente\n"
-" 4 = Eu confio completamente\n"
-" s = Mostrar mais informações\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr ""
-
-#: g10/pkclist.c:274
-#, fuzzy, c-format
-msgid " %d = I do NOT trust\n"
-msgstr "%08lX: Nós NÃO confiamos nesta chave\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr ""
-
-#: g10/pkclist.c:276
-#, fuzzy, c-format
-msgid " %d = I trust fully\n"
-msgstr "%s: não é um banco de dados de confiabilidade\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr ""
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr ""
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = voltar ao menu principal\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr ""
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = sair\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Sua decisão? "
-
-#: g10/pkclist.c:316
-#, fuzzy
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Você realmente quer remover esta chave? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certificados que levam a uma chave confiada plenamente:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "chave %08lX: a chave foi revogada!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Usa esta chave de qualquer modo? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "chave %08lX: a subchave foi revogada!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: a chave expirou\n"
-
-#: g10/pkclist.c:448
-#, fuzzy, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr " Não há indicação de que a assinatura pertence ao dono.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Nós NÃO confiamos nesta chave\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Não se tem certeza de que esta chave realmente pertence ao dono,\n"
-"mas é aceita de qualquer modo\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Esta chave provavelmente pertence ao dono\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Esta chave pertence a nós\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Não se tem certeza de que esta chave pertence a seu dono.\n"
-"Se você *realmente* sabe o que está fazendo, pode responder\n"
-"sim à próxima pergunta\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "AVISO: Usando chave não confiável!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Isto pode significar que a assinatura é falsificada.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n"
-
-#: g10/pkclist.c:580
-#, fuzzy
-msgid "Note: This key has been disabled.\n"
-msgstr "Esta chave foi desativada"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Nota: Esta chave expirou!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "AVISO: Esta chave não está certificada com uma assinatura confiável!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr " Não há indicação de que a assinatura pertence ao dono.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "AVISO: Nós NÃO confiamos nesta chave!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " A assinatura é provavelmente uma FALSIFICAÇÃO.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"AVISO: Esta chave não está certificada com assinaturas suficientemente\n"
-" confiáveis!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Não se tem certeza de que a assinatura pertence ao dono.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: ignorado: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: ignorado: a chave pública já está presente\n"
-
-#: g10/pkclist.c:811
-#, fuzzy
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr ""
-"Você não especificou um identificador de usuário. (pode-se usar \"-r\")\n"
-"\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Identificador de usuário inexistente.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "ignorado: chave pública já marcada como destinatário padrão\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "A chave pública está desativada.\n"
-
-#: g10/pkclist.c:870
-#, fuzzy
-msgid "skipped: public key already set\n"
-msgstr "%s: ignorado: a chave pública já está presente\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "destinatário padrão desconhecido `%s'\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: ignorado: a chave pública está desativada\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "nenhum endereço válido\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr ""
-
-#: g10/keygen.c:189
-#, fuzzy, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "ignorado `%s': duplicado\n"
-
-# muitas ou demais ???
-#: g10/keygen.c:194
-#, fuzzy, c-format
-msgid "too many `%c' preferences\n"
-msgstr "Preferências demais"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "Caractere inválido no nome\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "escrevendo auto-assinatura\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "escrevendo auto-assinatura\n"
-
-# key binding ???
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "escrevendo assinatura ligada a uma chave\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, fuzzy, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "O tamanho de chave pedido é %u bits\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, fuzzy, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "arredondado para %u bits\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Por favor selecione o tipo de chave desejado:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA e ElGamal (padrão)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (apenas assinatura)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (apenas criptografia)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (assinatura e criptografia)\n"
-
-#: g10/keygen.c:949
-#, fuzzy, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) DSA (apenas assinatura)\n"
-
-#: g10/keygen.c:951
-#, fuzzy, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) ElGamal (apenas criptografia)\n"
-
-#: g10/keygen.c:953
-#, fuzzy, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) ElGamal (assinatura e criptografia)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Sua opção? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr ""
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Opção inválida.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Prestes a gerar novo par de chaves %s.\n"
-" tamanho mínimo é 768 bits\n"
-" tamanho padrão é 1024 bits\n"
-" tamanho máximo sugerido é 2048 bits\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Que tamanho de chave você quer? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA permite apenas tamanhos de 512 a 1024\n"
-
-#: g10/keygen.c:1027
-#, fuzzy
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "tamanho muito pequeno; 768 é o valor mínimo permitido.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "tamanho muito grande; %d é o valor máximo permitido.\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Tamanhos de chave maiores que 2048 não são recomendados\n"
-"porque o tempo de computação é REALMENTE longo!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Tudo bem, mas tenha em mente que a radiação de seu monitor e teclado também "
-"é vulnerável a ataques!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "O tamanho de chave pedido é %u bits\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "arredondado para %u bits\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Por favor especifique por quanto tempo a chave deve ser válida.\n"
-" 0 = chave não expira\n"
-" <n> = chave expira em n dias\n"
-" <n>w = chave expira em n semanas\n"
-" <n>m = chave expira em n meses\n"
-" <n>y = chave expira em n anos\n"
-
-#: g10/keygen.c:1126
-#, fuzzy
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Por favor especifique por quanto tempo a chave deve ser válida.\n"
-" 0 = chave não expira\n"
-" <n> = chave expira em n dias\n"
-" <n>w = chave expira em n semanas\n"
-" <n>m = chave expira em n meses\n"
-" <n>y = chave expira em n anos\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "A chave é valida por? (0) "
-
-#: g10/keygen.c:1150
-#, fuzzy
-msgid "Signature is valid for? (0) "
-msgstr "A chave é valida por? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "valor inválido\n"
-
-#: g10/keygen.c:1160
-#, fuzzy, c-format
-msgid "%s does not expire at all\n"
-msgstr "A chave não expira nunca\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, fuzzy, c-format
-msgid "%s expires at %s\n"
-msgstr "A chave expira em %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Seu sistema não consegue mostrar datas além de 2038.\n"
-"Apesar disso, elas serão corretamente manipuladas até 2106.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Está correto (s/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Você precisa de um identificador de usuário para identificar sua chave; o\n"
-"programa constrói o identificador a partir do Nome Completo, Comentário e\n"
-"Endereço Eletrônico desta forma:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Nome completo: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Caractere inválido no nome\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "O nome não pode começar com um dígito\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "O nome deve ter pelo menos 5 caracteres\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Endereço de correio eletrônico: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Endereço eletrônico inválido\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Comentário: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Caractere inválido no comentário\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Você está usando o conjunto de caracteres `%s'.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Você selecionou este identificador de usuário:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr ""
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnCcEeOoSs"
-
-#: g10/keygen.c:1326
-#, fuzzy
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr ""
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Você precisa de uma frase secreta para proteger sua chave.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-#, fuzzy
-msgid "passphrase not correctly repeated; try again"
-msgstr "A frase secreta não foi repetida corretamente; tente outra vez.\n"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr ""
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n"
-"Vou continuar assim mesmo. Você pode mudar sua frase secreta a\n"
-"qualquer hora, usando este programa com a opção \"--edit-key\".\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Precisamos gerar muitos bytes aleatórios. É uma boa idéia realizar outra\n"
-"atividade (digitar no teclado, mover o mouse, usar os discos) durante a\n"
-"geração dos números primos; isso dá ao gerador de números aleatórios\n"
-"uma chance melhor de conseguir entropia suficiente.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "O par de chaves DSA terá 1024 bits.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Geração de chave cancelada.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, fuzzy, c-format
-msgid "writing public key to `%s'\n"
-msgstr "escrevendo certificado público para `%s'\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, fuzzy, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "escrevendo certificado privado para `%s'\n"
-
-#: g10/keygen.c:2205
-#, fuzzy, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "chave %08lX: chave pública não encontrada: %s\n"
-
-#: g10/keygen.c:2211
-#, fuzzy, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "impossível bloquear chaveiro secreto: %s\n"
-
-#: g10/keygen.c:2225
-#, fuzzy, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "erro na escrita do chaveiro `%s': %s\n"
-
-#: g10/keygen.c:2232
-#, fuzzy, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "erro na escrita do chaveiro `%s': %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "chaves pública e privada criadas e assinadas.\n"
-
-#: g10/keygen.c:2253
-#, fuzzy
-msgid "key marked as ultimately trusted.\n"
-msgstr "Certificados que levam a uma chave confiada plenamente:\n"
-
-#: g10/keygen.c:2264
-msgid ""
-"Note that this key cannot be used for encryption. You may want to use\n"
-"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
-msgstr ""
-"Note que esta chave não pode ser usada para criptografia. Você pode usar\n"
-"o comando \"--edit-key\" para gerar uma chave secundária para esse fim.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "A geração de chaves falhou: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"a chave foi criada %lu segundo no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"a chave foi criada %lu segundos no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr ""
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Realmente criar? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr ""
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: impossível abrir: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "erro na criação da frase secreta: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, fuzzy, c-format
-msgid "`%s' already compressed\n"
-msgstr "%lu chaves processadas\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: AVISO: arquivo vazio\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "lendo de `%s'\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: algoritmo de criptografia %d não encontrado nas preferências\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr ""
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s criptografado para: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, fuzzy, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "usuário `%s' não encontrado: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, fuzzy, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "erro na leitura de `%s': %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n"
-
-#: g10/export.c:238
-#, fuzzy, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n"
-
-#: g10/export.c:246
-#, fuzzy, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "AVISO: nada exportado\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "entradas demais no cache pk - desativado\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-#, fuzzy
-msgid "[User id not found]"
-msgstr "[usuário não encontrado]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "usando chave secundária %08lX ao invés de chave primária %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "chave %08lX: chave secreta sem chave pública - ignorada\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "ignorando bloco do tipo %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "%lu chaves processadas até agora\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "erro na leitura de `%s': %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Número total processado: %lu\n"
-
-#: g10/import.c:286
-#, fuzzy, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " novas subchaves: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " sem IDs de usuários: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importados: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " não modificados: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " novos IDs de usuários: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " novas subchaves: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " novas assinaturas: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " novas revogações de chaves: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " chaves secretas lidas: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " chaves secretas importadas: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " chaves secretas não modificadas: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importados: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "chave %08lX: sem ID de usuário\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "chave %08lX: sem subchave para ligação de chaves\n"
-
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "chave %08lX: aceito ID de usuário sem auto-assinatura '"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "chave %08lX: sem IDs de usuários válidos\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "isto pode ser causado por falta de auto-assinatura\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "chave %08lX: chave pública não encontrada: %s\n"
-
-#: g10/import.c:636
-#, fuzzy, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "chave %08lX: não é uma chave rfc2440 - ignorada\n"
-
-#: g10/import.c:646
-#, fuzzy, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "impossível escrever chaveiro: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "escrevendo para `%s'\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "erro na escrita do chaveiro `%s': %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "chave %08lX: chave pública importada\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "chave %08lX: não corresponde à nossa cópia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "chave %8lX: 1 novo ID de usuário\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "chave %08lX: %d novos IDs de usuários\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "chave %08lX: 1 nova assinatura\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "chave %08lX: %d novas assinaturas\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "chave %08lX: 1 nova subchave\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "chave %08lX: %d novas subchaves\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "chave %08lX: não modificada\n"
-
-#: g10/import.c:844
-#, fuzzy, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "impossível bloquear chaveiro secreto: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "chave %08lX: chave secreta importada\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "chave %08lX: já está no chaveiro secreto\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "chave %08lX: chave secreta não encontrada: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"chave %08lX: sem chave pública - impossível aplicar certificado\n"
-"de revogação\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "chave %08lX: certificado de revogação inválido: %s - rejeitado\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "chave %08lX: certificado de revogação importado\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "chave %08lX: nenhum ID de usuário para assinatura\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "chave %08lX: algoritmo de chave pública não suportado\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "chave %08lX: auto-assinatura inválida\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "chave %08lX: sem subchave para ligação de chaves\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "chave %08lX: algoritmo de chave pública não suportado\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "chave %08lX: sem subchave para ligação de chaves\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "chave %08lX.%lu: Revogação de subchave válida\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "chave %08lX: ligação de subchave inválida\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "chave %08lX: ignorado ID de usuário '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "chave %08lX: subchave ignorada\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "chave %08lX: assinatura não exportável (classe %02x) - ignorada\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "chave %08lX: certificado de revogação no local errado - ignorada\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "chave %08lX: certificado de revogação inválido: %s - ignorada\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "chave %08lX: certificado de revogação no local errado - ignorada\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "chave %08lX: detectado ID de usuário duplicado - unido\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "chave %08lX: certificado de revogação adicionado\n"
-
-#: g10/import.c:1491
-#, fuzzy, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "chave %08lX: %d novas assinaturas\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[revogação]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[auto-assinatura]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 assinatura incorreta\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d assinaturas incorretas\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 assinatura não verificada por falta de chave\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d assinaturas não verificadas por falta de chaves\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 assinatura não verificada devido a um erro\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d assinaturas não verificadas devido a erros\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 ID de usuário sem auto-assinatura válida detectado\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d IDs de usuários sem auto-assinaturas válidas detectados\n"
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "A chave é protegida.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "Já assinado pela chave %08lX\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "Já assinado pela chave %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Nada para assinar com a chave %08lX\n"
-
-#: g10/keyedit.c:478
-#, fuzzy
-msgid "This key has expired!"
-msgstr "Nota: Esta chave expirou!\n"
-
-#: g10/keyedit.c:498
-#, fuzzy, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Esta chave não é protegida.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr ""
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr ""
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Você tem certeza de que quer assinar esta chave com\n"
-"sua chave: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "isto pode ser causado por falta de auto-assinatura\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"A assinatura será marcada como não-exportável.\n"
-"\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"A assinatura será marcada como não-exportável.\n"
-"\n"
-
-#: g10/keyedit.c:620
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"A assinatura será marcada como não-exportável.\n"
-"\n"
-
-#: g10/keyedit.c:624
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"A assinatura será marcada como não-exportável.\n"
-"\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Realmente assinar? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "assinatura falhou: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Esta chave não é protegida.\n"
-
-#: g10/keyedit.c:748
-#, fuzzy
-msgid "Secret parts of primary key are not available.\n"
-msgstr "chave secreta não disponível"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "A chave é protegida.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Impossível editar esta chave: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Digite a nova frase para esta chave secreta.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Você não quer uma frase secreta - provavelmente isto é uma *má* idéia!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Você realmente quer fazer isso? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "movendo a assinatura da chave para o local correto\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "sair deste menu"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "gravar e sair"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "mostra esta ajuda"
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "mostra impressão digital"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "lista chave e identificadores de usuários"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "seleciona ID de usuário N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "seleciona chave secundária N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "lista assinaturas"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "assina a chave"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "assina a chave localmente"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "nrsign"
-msgstr "sign"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "sign the key non-revocably"
-msgstr "assina a chave localmente"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "nrlsign"
-msgstr "sign"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "sign the key locally and non-revocably"
-msgstr "assina a chave localmente"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "adiciona um novo ID de usuário"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr ""
-
-#: g10/keyedit.c:920
-#, fuzzy
-msgid "add a photo ID"
-msgstr "adiciona um novo ID de usuário"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "remove ID de usuário"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr ""
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "adiciona nova chave secundária"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "remove uma chave secundária"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "revkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "adiciona nova chave secundária"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "remove assinaturas"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "muda a data de validade"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr ""
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr ""
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "alterna entre listagem de chave secreta e pública"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-#, fuzzy
-msgid "list preferences (expert)"
-msgstr "lista preferências"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "list preferences (verbose)"
-msgstr "lista preferências"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "setpref"
-msgstr "pref"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "set preference list"
-msgstr "lista preferências"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updpref"
-msgstr "pref"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updated preferences"
-msgstr "lista preferências"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "muda a frase secreta"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "muda os valores de confiança"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "revoga assinaturas"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "revoga uma chave secundária"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "desativa uma chave"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "ativa uma chave"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr ""
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr ""
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "impossível fazer isso em modo não-interativo\n"
-
-#: g10/keyedit.c:1000
-#, fuzzy, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "erro na leitura de `%s': %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Chave secreta disponível.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Comando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "A chave secreta é necessária para fazer isto.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr ""
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "A chave é protegida.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Realmente assinar todos os IDs de usuário? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Sugestão: Selecione os IDs de usuário para assinar\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Você precisa selecionar pelo menos um ID de usuário.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Você não pode remover o último ID de usuário!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Realmente remover todos os IDs de usuário selecionados? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Realmente remover este ID de usuário? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Você deve selecionar pelo menos uma chave.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Você realmente quer remover as chaves selecionadas? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Você realmente quer remover esta chave? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Você realmente quer revogar as chaves selecionadas? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Você realmente quer revogar esta chave? "
-
-#: g10/keyedit.c:1354
-#, fuzzy
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Realmente remover todos os IDs de usuário selecionados? "
-
-#: g10/keyedit.c:1356
-#, fuzzy
-msgid "Really update the preferences? "
-msgstr "Realmente gerar os certificados de revogação? (s/N)"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Salvar alterações? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Sair sem salvar? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "atualização falhou: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "atualização da chave secreta falhou: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Chave não alterada, nenhuma atualização é necessária.\n"
-
-# help ou ajuda ???
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Comando inválido (tente \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr ""
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr ""
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr ""
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Esta chave foi desativada"
-
-#: g10/keyedit.c:1802
-#, fuzzy, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! a subchave foi revogada: %s\n"
-
-#: g10/keyedit.c:1805
-#, fuzzy
-msgid "rev- faked revocation found\n"
-msgstr "rev- revogações de chaves incorreta\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr ""
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Deletar esta assinatura válida? (s/N/q)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Deletar esta assinatura inválida? (s/N/q)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Deletar esta assinatura desconhecida? (s/N/q)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Realmente remover esta auto-assinatura? (s/N)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d assinatura removida.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d assinaturas removidas.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Nada removido.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Digite o tamanho da chave"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Por favor remova as seleções das chaves secretas.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Por favor selecione no máximo uma chave secundária.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Modificando a data de validade para uma chave secundária.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Modificando a data de validade para uma chave primária.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Você não pode modificar a data de validade de uma chave v3\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Nenhuma assinatura correspondente no chaveiro secreto\n"
-
-#: g10/keyedit.c:2546
-#, fuzzy
-msgid "Please select exactly one user ID.\n"
-msgstr "Você precisa selecionar pelo menos um ID de usuário.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "chave %08lX: auto-assinatura inválida\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Nenhum ID de usuário com índice %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Nenhuma chave secundária com índice %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "ID de usuário: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"assinado com sua chave %08lX em %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"assinado com sua chave %08lX em %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Esta chave não é protegida.\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Você assinou estes IDs de usuário:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " assinado por %08lX em %s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " revogado por %08lX em %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Você está prestes a revogar estas assinaturas:\n"
-
-#: g10/keyedit.c:3013
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " assinado por %08lX em %s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Realmente gerar os certificados de revogação? (s/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "nenhuma chave secreta\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "assinatura %s de: %s\n"
-
-#: g10/keylist.c:93
-#, fuzzy
-msgid "Signature policy: "
-msgstr "assinatura %s de: %s\n"
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "AVISO: dados de notação inválidos encontrados\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notação: "
-
-#: g10/keylist.c:129
-#, fuzzy
-msgid "Signature notation: "
-msgstr "Notação: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr ""
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr ""
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, fuzzy, c-format
-msgid " [expires: %s]"
-msgstr "A chave expira em %s\n"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "listar as chaves e as impressões digitais"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Impressão digital:"
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Impressão digital:"
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Impressão digital:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-#, fuzzy
-msgid " Key fingerprint ="
-msgstr " Impressão digital:"
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-# "hash" poderia ser "espalhamento", mas não fica claro
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "algoritmo de hash inválido `%s'\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "dados criptografados com %s\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "criptografado com algoritmo desconhecido %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "a chave pública é %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "dados criptografados com chave pública: DEK válido\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "criptografado com chave %u-bit %s, ID %08lX, criada em %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "criptografado com chave %s, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "descriptografia de chave pública falhou: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, fuzzy, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "dados criptografados com %s\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "descriptografia correta\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "CUIDADO: a mensagem criptografada foi manipulada!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "descriptografia falhou: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "nome de arquivo original='%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "revogação isolada - use \"gpg --import\" para aplicá-la\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notação: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Política: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "verificação de assinatura suprimida\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-#, fuzzy
-msgid "can't handle these multiple signatures\n"
-msgstr "fazer uma assinatura separada"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "Assinatura INCORRETA de \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-#, fuzzy
-msgid "Expired signature from \""
-msgstr "Assinatura correta de \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Assinatura correta de \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr ""
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " ou \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Impossível verificar assinatura: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-#, fuzzy
-msgid "not a detached signature\n"
-msgstr "fazer uma assinatura separada"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "assinatura isolada da classe 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "formato de assinatura antigo (PGP2.x)\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "pacote raiz inválido detectado em proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "impossível desativar core dumps: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Algoritmos experimentais não devem ser usados!\n"
-
-#: g10/misc.c:192
-#, fuzzy
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"este algoritmo de criptografia é depreciado; por favor use algum\n"
-"algoritmo padrão!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr ""
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "impossível manipular algoritmo de chave pública %d\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "subpacote do tipo %d tem bit crítico ligado\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr ""
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr ""
-
-#: g10/passphrase.c:511
-#, fuzzy, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "algoritmo de proteção %d não é suportado\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, fuzzy, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "impossível abrir `%s': %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr ""
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr ""
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (ID principal da chave %08lX)"
-
-#: g10/passphrase.c:641
-#, fuzzy, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"\n"
-"Você precisa de uma frase secreta para desbloquear a chave secreta do\n"
-"usuário: \"%.*s\"\n"
-"%u-bit %s chave, ID %08lX, criada %s%s\n"
-
-#: g10/passphrase.c:662
-#, fuzzy
-msgid "Enter passphrase\n"
-msgstr "Digite a frase secreta: "
-
-#: g10/passphrase.c:664
-#, fuzzy
-msgid "Repeat passphrase\n"
-msgstr "Repita a frase secreta: "
-
-#: g10/passphrase.c:705
-#, fuzzy
-msgid "passphrase too long\n"
-msgstr "linha muito longa\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr ""
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr ""
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr ""
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Você precisa de uma frase secreta para desbloquear a chave secreta do\n"
-"usuário: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "chave de %u-bit/%s, ID %08lX, criada em %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "impossível pedir senha em modo não-interativo\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Digite a frase secreta: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Repita a frase secreta: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "dados não salvos; use a opção \"--output\" para salvá-los\n"
-
-#: g10/plaintext.c:108
-#, fuzzy, c-format
-msgid "error creating `%s': %s\n"
-msgstr "erro na leitura de `%s': %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Assinatura separada.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Por favor digite o nome do arquivo de dados: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "lendo de \"stdin\" ...\n"
-
-#: g10/plaintext.c:396
-#, fuzzy
-msgid "no signed data\n"
-msgstr "no dados assinados\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "impossível abrir dados assinados `%s'\n"
-
-#: g10/pubkey-enc.c:101
-#, fuzzy, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "destinatário anônimo; tentando chave secreta %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "certo, nós somos o destinatário anônimo.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "codificação antiga do DEK não suportada\n"
-
-#: g10/pubkey-enc.c:178
-#, fuzzy, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "algoritmo de proteção %d não é suportado\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "NOTA: algoritmo de criptografia %d não encontrado nas preferências\n"
-
-#: g10/pubkey-enc.c:243
-#, fuzzy, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "NOTA: chave secreta %08lX expirou %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "chave %08lX: a chave foi revogada!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "impossível escrever para o chaveiro: %s\n"
-
-#: g10/hkp.c:96
-#, fuzzy, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "impossível escrever para o chaveiro: %s\n"
-
-#: g10/hkp.c:175
-#, fuzzy, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "erro na leitura de `%s': %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr ""
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr ""
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr ""
-
-#: g10/hkp.c:565
-#, fuzzy, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "impossível escrever para o chaveiro: %s\n"
-
-#: g10/seckey-cert.c:53
-#, fuzzy
-msgid "secret key parts are not available\n"
-msgstr "chave secreta não disponível"
-
-#: g10/seckey-cert.c:59
-#, fuzzy, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "algoritmo de proteção %d não é suportado\n"
-
-#: g10/seckey-cert.c:224
-#, fuzzy
-msgid "Invalid passphrase; please try again"
-msgstr "Frase secreta inválida; por favor tente novamente ...\n"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr ""
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"esta é uma chave ElGamal gerada pelo PGP que NÃO é segura para assinaturas!\n"
-
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "a chave pública é %lu segundo mais nova que a assinatura\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "a chave pública é %lu segundos mais nova que a assinatura\n"
-
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"a chave foi criada %lu segundo no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"a chave foi criada %lu segundos no futuro\n"
-"(viagem no tempo ou problema no relógio)\n"
-
-#: g10/sig-check.c:249
-#, fuzzy, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "NOTA: chave de assinatura %08lX expirou %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr "assumindo assinatura incorreta devido a um bit crítico desconhecido\n"
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:303
-#, fuzzy, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "leitura de registro de assinatura falhou: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "assinatura %s de: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "impossível criar %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "NOTA: algoritmo de criptografia %d não encontrado nas preferências\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "assinando:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:1029
-#, fuzzy, c-format
-msgid "%s encryption will be used\n"
-msgstr "descriptografia falhou: %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "impossível manipular linhas de texto maiores que %d caracteres\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "linha de entrada maior que %d caracteres\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "banco de dados de confiabilidade rec %lu: lseek falhou: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "banco de dados de confiabilidade rec %lu: escrita falhou (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "transação de banco de dados de confiabilidade muito grande\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: impossível acessar: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: diretório inexistente!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: impossível criar trava\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, fuzzy, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: impossível criar trava\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: impossível criar: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: falha ao criar registro de versão: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: banco de dados de confiabilidade inválido criado\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: banco de dados de confiabilidade criado\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: banco de dados de confiabilidade inválido\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: falha ao criar tabela de \"hash\": %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: erro atualizando registro de versão: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: erro lendo registro de versão: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: erro escrevendo registro de versão: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "banco de dados de confiabilidade: lseek falhou: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "banco de dados de confiabilidade: leitura falhou (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: não é um banco de dados de confiabilidade\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: registro de versão com recnum %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: versão de arquivo inválida %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: erro lendo registro livre: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: erro escrevendo registro de diretório: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: falha ao zerar um registro: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: falha ao anexar um registro: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr ""
-"O banco de dados de confiabilidade está danificado; por favor rode\n"
-"\"gpg --fix-trust-db\".\n"
-
-#: g10/trustdb.c:200
-#, fuzzy, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "%s não é um mapa de caracteres válido\n"
-
-#: g10/trustdb.c:235
-#, fuzzy, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "chave %08lX: aceita como chave confiável.\n"
-
-#: g10/trustdb.c:274
-#, fuzzy, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr ""
-"chave %08lX: impossível colocá-la no banco de dados de confiabilidade\n"
-
-#: g10/trustdb.c:290
-#, fuzzy, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "chave %08lX: chave secreta sem chave pública - ignorada\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "registro de confiança %lu, tipo req %d: falha na leitura: %s\n"
-
-#: g10/trustdb.c:338
-#, fuzzy, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "registro de confiança %lu: remoção falhou: %s\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "registro de confiança %lu, tipo %d: escrita falhou: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "banco de dados de confiabilidade: sincronização falhou: %s\n"
-
-#: g10/trustdb.c:468
-#, fuzzy
-msgid "no need for a trustdb check\n"
-msgstr "%s: não é um banco de dados de confiabilidade\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, fuzzy, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "inserção de registro de confiança falhou: %s\n"
-
-#: g10/trustdb.c:779
-#, fuzzy
-msgid "checking the trustdb\n"
-msgstr "muda os valores de confiança"
-
-#: g10/trustdb.c:933
-#, fuzzy, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "chave pública não encontrada"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"a assinatura não pôde ser verificada.\n"
-"Por favor lembre-se de que o arquivo com a assinatura (.sig ou .asc)\n"
-"deve ser o primeiro arquivo dado na linha de comando.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "linha %u muito longa ou sem LF\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"a chave não está marcada como insegura - impossível usá-la com o pseudo "
-"RNG!\n"
-
-#: g10/skclist.c:157
-#, fuzzy, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "ignorado `%s': duplicado\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "ignorado `%s': %s\n"
-
-#: g10/skclist.c:168
-#, fuzzy
-msgid "skipped: secret key already present\n"
-msgstr "ignorado: a chave secreta já está presente\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"ignorado `%s': esta é uma chave ElGamal gerada pelo PGP que não é segura "
-"para assinaturas!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Arquivo `%s' já existe. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Sobrescrever (s/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: sufixo desconhecido\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Digite novo nome de arquivo"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "escrevendo em \"stdout\"\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "assumindo dados assinados em `%s'\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: novo arquivo de opções criado\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: impossível criar diretório: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: diretório criado\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"AVISO: A mensagem foi criptografada com uma chave fraca na criptografia\n"
-"simétrica.\n"
-
-#: g10/encr-data.c:98
-#, fuzzy
-msgid "problem handling encrypted packet\n"
-msgstr "eliminar o campo keyid dos pacotes criptografados\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "chave fraca criada - tentando novamente\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"impossível evitar chave fraca para criptografia simétrica;\n"
-"%d tentativas!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "impossível fazer isso em modo não-interativo sem \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Deletar esta chave do chaveiro? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Esta é uma chave secreta! - realmente deletar? "
-
-#: g10/delkey.c:168
-#, fuzzy, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "enumeração de blocos de chaves falhou: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, fuzzy, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "há uma chave secreta para esta chave pública!\n"
-
-#: g10/delkey.c:208
-#, fuzzy
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "use a opção \"--delete-secret-key\" para deletá-la antes.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Você decide que valor usar aqui; este valor nunca será exportado para\n"
-"terceiros. Precisamos dele implementar a rede de confiança, que não tem\n"
-"nada a ver com a rede de certificados (implicitamente criada)."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Se você quiser usar esta chave revogada assim mesmo, responda \"sim\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Se você quiser usar esta chave não confiável assim mesmo, responda \"sim\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr ""
-"Digite o ID de usuário do destinatário para o qual você quer enviar a\n"
-"mensagem."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Selecione o algoritmo a ser usado.\n"
-"\n"
-"DSA (ou DSS) é o algoritmo de assinatura digital que pode ser usado apenas\n"
-"para assinaturas. Este é o algoritmo recomendado porque a verificação de\n"
-"assinaturas DSA é muito mais rápida que a verificação de ElGamal.\n"
-"\n"
-"ElGamal é um algoritmo que pode ser usado para assinatura e criptografia.\n"
-"O OpenPGP distingue dois tipos deste algoritmo: um apenas para criptografia\n"
-"e outro para assinatura+criptografia; na verdade são iguais, mas alguns\n"
-"parâmetros precisam ser escolhidos de modo especial para criar uma chave\n"
-"segura para asssinatura: este programa faz isso, mas algumas outras\n"
-"implementações do OpenPGP não vão necessariamente entender o tipo\n"
-"assinatura+criptografia.\n"
-"\n"
-"A chave primária precisa sempre ser uma chave capaz de fazer assinaturas;\n"
-"este é o motivo pelo qual a chave ElGamal apenas para criptografia não está\n"
-"disponível neste menu."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Apesar de estas chaves estarem definidas no RFC2440, elas não são "
-"recomendadas\n"
-"porque não são suportadas por todos os programas e assinaturas criadas com\n"
-"elas são grandes e sua verificação é lenta."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Digite o tamanho da chave"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Responda \"sim\" ou \"não\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Digite o valor necessário conforme pedido.\n"
-"É possível digitar uma data ISO (AAAA-MM-DD) mas você não terá uma boa\n"
-"reação a erros - o sistema tentará interpretar o valor dado como um "
-"intervalo."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Digite o nome do possuidor da chave"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "por favor digite um endereço de email (opcional mas recomendado)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Por favor digite um comentário (opcional)"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N para mudar o nome.\n"
-"C para mudar o comentário.\n"
-"E para mudar o endereço de correio eletrônico.\n"
-"O para continuar a geração da chave.\n"
-"S para interromper a geração da chave."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Responda \"sim\" (ou apenas \"s\") se quiser gerar a subchave."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Responda \"sim\" se quiser assinar TODOS os IDs de usuário"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Responda \"sim\" se quiser realmente remover este ID de usuário.\n"
-"Todos os certificados também serão perdidos!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Responda \"sim\" se quiser remover a subchave"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Esta é uma assinatura válida na chave; normalmente não é desejável\n"
-"remover esta assinatura porque ela pode ser importante para estabelecer\n"
-"uma conexão de confiança à chave ou a outra chave certificada por esta."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Esta assinatura não pode ser verificada porque você não tem a chave\n"
-"correspondente. Você deve adiar sua remoção até saber que chave foi usada\n"
-"porque a chave desta assinatura pode estabelecer uma conexão de confiança\n"
-"através de outra chave já certificada."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "A assinatura não é válida. Faz sentido removê-la de seu chaveiro."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Esta é uma assinatura que liga o ID de usuário à chave. Geralmente\n"
-"não é uma boa idéia remover tal assinatura. É possível que o GnuPG\n"
-"não consiga mais usar esta chave. Faça isto apenas se por alguma\n"
-"razão esta auto-assinatura não for válida e há uma segunda disponível."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-
-#: g10/helptext.c:244
-#, fuzzy
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Por favor digite a frase secreta"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr ""
-"Por favor repita a última frase secreta, para ter certeza do que você "
-"digitou."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Dê o nome para o arquivo ao qual a assinatura se aplica"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Responda \"sim\" se quiser sobrescrever o arquivo"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Por favor digite um novo nome de arquivo. Se você apenas apertar RETURN o\n"
-"arquivo padrão (que é mostrado em colchetes) será usado."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Nenhuma ajuda disponível"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Nenhuma ajuda disponível para `%s'"
-
-#: g10/keydb.c:178
-#, fuzzy, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "erro na escrita do chaveiro `%s': %s\n"
-
-#: g10/keydb.c:185
-#, fuzzy, c-format
-msgid "keyring `%s' created\n"
-msgstr "%s: chaveiro criado\n"
-
-#: g10/keydb.c:575
-#, fuzzy, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "%s: falha ao criar tabela de \"hash\": %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "AVISO: existem 2 arquivos com informações confidenciais.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s é o não modificado\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s é o novo\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Por favor conserte este possível furo de segurança\n"
-
-#: g10/keyring.c:1346
-#, fuzzy, c-format
-msgid "checking keyring `%s'\n"
-msgstr "erro na escrita do chaveiro `%s': %s\n"
-
-#: g10/keyring.c:1377
-#, fuzzy, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "%lu chaves processadas até agora\n"
-
-#: g10/keyring.c:1388
-#, fuzzy, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "listar as chaves e as assinaturas"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: chaveiro criado\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "você deve reiniciar o GnuPG, para que ele possa ler o novo arquivo\n"
-#~ "de opções\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Impressão digital:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Impressão digital:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NOME=VALOR|usar estes dados de notação"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "o primeiro caractere de um nome de notação deve ser uma letra ou um "
-#~ "sublinhado\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "pontos em um nome de notação devem estar cercados por outros caracteres\n"
-
-#, fuzzy
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#, fuzzy
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr "Você tem certeza de que quer este tamanho de chave? "
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Realmente assinar? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "chave %08lX: nossa cópia não tem auto-assinatura\n"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Você realmente precisa de uma chave tão grande? "
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " assinado por %08lX em %s\n"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key id-usuário"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key id-usuário"
-
-#, fuzzy
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key id-usuário"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Digite o identificador de usuário: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "ignorado: chave pública já marcada com --encrypt-to\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "\n"
-#~ "WARNING: This is a PGP2-style key\n"
-#~ msgstr "AVISO: `%s' é um arquivo vazio\n"
-
-#~ msgid "sSmMqQ"
-#~ msgstr "sSmMqQ"
-
-#, fuzzy
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s não é um mapa de caracteres válido\n"
-
-#, fuzzy
-#~ msgid "duplicate (short) key ID %08lX\n"
-#~ msgstr "a chave pública é %08lX\n"
-
-#, fuzzy
-#~ msgid "%lu key(s) to refresh\n"
-#~ msgstr "\t%lu chaves com erros\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NOMES]|verificar o banco de dados de confiabilidade"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Não foi possível encontrar uma rota de confiança válida para a chave.\n"
-#~ "Vamos ver se é possível designar alguns valores de confiança ausentes.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr "Nenhuma rota encontrada que leve a uma de nossas chaves.\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Nenhum certificado com confiança indefinida encontrado.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Nenhum valor de confiança modificado.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr "%08lX: sem informação para calcular probabilidade de confiança\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: erro na verificação da chave: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "entradas demais no cache unk - desativado\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "atualização do banco de dados de confiabilidade falhou: %s\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "assumindo MDC incorreto devido a um bit crítico desconhecido\n"
-
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "erro lendo registro de diretório para LID %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lid %lu: registro de diretório esperado, tipo %d recebido\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "nenhuma chave primária para LID %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "erro lendo chave primária para LID %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record falhou: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "chave %08lX: pedido de registro falhou\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "chave %08lX: já está na tabela de chaves confiáveis\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "NOTA: a chave secreta %08lX NÃO está protegida.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "chave %08lX: chaves secreta e pública não são correspondentes\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "enumeração de chaves secretas falhou: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "chave %08lX.%lu: Ligação de subchave válida\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "chave %08lX.%lu: Ligação de subchave inválida: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "chave %08lX.%lu: Revogação de chave válida\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "chave %08lX.%lu: Revogação de chave inválida: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Auto-assinatura válida"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Auto-assinatura inválida"
-
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Revogação válida de ID de usuário ignorada devido a nova auto-assinatura"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Revogação de ID de usuário válida"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Revogação de ID de usuário inválida"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Certificado de revogação válido"
-
-#~ msgid "Good certificate"
-#~ msgstr "Certificado correto"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Certificado de revogação inválido"
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Certificado inválido"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "registro de assinatura %lu[%d] aponta para registro errado.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "certificado duplicado - removido"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir falhou: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lid ?: inserção falhou: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lid %lu: inserção falhou: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lid %lu: inserido\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "erro lendo registro de diretório: %s\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu chaves inseridas\n"
-
-#~ msgid "enumerate keyblocks failed: %s\n"
-#~ msgstr "enumeração de blocos de chaves falhou: %s\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lid %lu: registro de diretório sem chave - ignorado\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\t%lu devido a novas chaves públicas\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu chaves ignoradas\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu chaves atualizadas\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Ooops, nenhuma chave\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Ooops, nenhum ID de usuário\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: busca de registro de diretório falhou: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "chave %08lX: inserção de registro de confiança falhou: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "chave %08lX.%lu: inserida no banco de dados de confiabilidade\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "chave %08lX.%lu: criada no futuro (viagem no tempo ou problema no "
-#~ "relogio)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "chave %08lX.%lu: expirou em %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "chave %08lX.%lu: verificação de confiança falhou: %s\n"
-
-#~ msgid "user '%s' not found: %s\n"
-#~ msgstr "usuário `%s' não encontrado: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr ""
-#~ "problemas na procura de `%s' no banco de dados de confiabilidade: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr ""
-#~ "usuário `%s' não encontrado no banco de dados de confiabilidade - "
-#~ "inserindo\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "falha ao colocar `%s' no banco de dados de confiabilidade: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr ""
-#~ "Você realmente quer criar uma chave para assinatura e criptografia? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: usuário não encontrado: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "erro de leitura do certificado: %s\n"
-
-#~ msgid "no default public keyring\n"
-#~ msgstr "sem chaveiro público padrão\n"
-
-#~ msgid "can't lock keyring `%s': %s\n"
-#~ msgstr "impossível bloquear chaveiro `%s': %s\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: usuário não encontrado\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr ""
-#~ "AVISO: ainda é impossível manipular registros de preferências longos\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: impossível criar chaveiro: %s\n"
-
-#, fuzzy
-#~ msgid "invalid"
-#~ msgstr "armadura inválida"
-
-#~ msgid "RSA key cannot be used in this version\n"
-#~ msgstr "chave RSA não pode ser usada nesta versão\n"
-
-#~ msgid "No key for user ID\n"
-#~ msgstr "Nenhuma chave para identificador de usuário\n"
-
-#~ msgid "No user ID for key\n"
-#~ msgstr "Nenhum identificador de usuário para chave\n"
-
-#~ msgid "no secret key for decryption available\n"
-#~ msgstr "nenhuma chave secreta para descriptografia disponível\n"
-
-#~ msgid ""
-#~ "RSA keys are deprecated; please consider creating a new key and use this "
-#~ "key in the future\n"
-#~ msgstr ""
-#~ "Chaves RSA não são recomendáveis; por favor considere criar uma nova "
-#~ "chave e usá-la no futuro\n"
-
-#~ msgid "set debugging flags"
-#~ msgstr "definir parâmetros de depuração"
-
-#~ msgid "enable full debugging"
-#~ msgstr "habilitar depuração completa"
-
-#~ msgid "do not write comment packets"
-#~ msgstr "não escrever pacotes de comentário"
-
-#~ msgid "(default is 1)"
-#~ msgstr "(o padrão é 1)"
-
-#~ msgid "(default is 3)"
-#~ msgstr "(o padrão é 3)"
-
-#~ msgid " (%d) ElGamal in a v3 packet\n"
-#~ msgstr " (%d) ElGamal em um pacote v3\n"
-
-#~ msgid "Key generation can only be used in interactive mode\n"
-#~ msgstr "A geração de chaves só pode ser feita em modo interativo\n"
-
-#, fuzzy
-#~ msgid "tdbio_search_sdir failed: %s\n"
-#~ msgstr "tdbio_search_dir falhou: %s\n"
-
-#~ msgid "print all message digests"
-#~ msgstr "imprime todos os \"digests\" de mensagens"
-
-#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n"
-#~ msgstr ""
-#~ "NOTA: assinatura rec %lu[%d] está na lista de sugestões de %lu mas está\n"
-#~ " marcada como verificada\n"
-
-#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n"
-#~ msgstr ""
-#~ "NOTA: assinatura rec %lu[%d] está na lista de sugestões de %lu mas não "
-#~ "está\n"
-#~ " marcada\n"
-
-#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n"
-#~ msgstr ""
-#~ "assinatura rec %lu[%d] na lista de sugestões de %lu não aponta para\n"
-#~ "um registro de diretório\n"
-
-#~ msgid "lid %lu: no primary key\n"
-#~ msgstr "lid %lu: nenhuma chave primária\n"
-
-#~ msgid "lid %lu: user id not found in keyblock\n"
-#~ msgstr "lid %lu: id de usuário não encontrado no bloco de chaves\n"
-
-#~ msgid "lid %lu: user id without signature\n"
-#~ msgstr "lid %lu: id de usuário sem assinatura\n"
-
-#~ msgid "lid %lu: self-signature in hintlist\n"
-#~ msgstr "lid %lu: auto-assinatura na lista de sugestões\n"
-
-#~ msgid "very strange: no public key\n"
-#~ msgstr "muito estranho: nenhuma chave pública\n"
-
-#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n"
-#~ msgstr ""
-#~ "lista de sugestões %lu[%d] de %lu não aponta para registro de diretório\n"
-
-#~ msgid "lid %lu does not have a key\n"
-#~ msgstr "lid %lu não tem chave\n"
-
-#~ msgid "lid %lu: can't get keyblock: %s\n"
-#~ msgstr "lid %lu: impossível pegar bloco de chaves: %s\n"
-
-#~ msgid "Too many preference items"
-#~ msgstr "Muitos itens de preferência"
-
-#~ msgid "public key not anymore available"
-#~ msgstr "a chave pública não está mais disponível"
-
-# trauzir sombra ???
-#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n"
-#~ msgstr ""
-#~ "uid %08lX.%lu/%02X%02X: tem diretório \"shadow\" %lu mas ainda não está\n"
-#~ "marcado\n"
-
-#~ msgid "insert_trust_record: keyblock not found: %s\n"
-#~ msgstr "insert_trust_record: bloco de chaves não encontrado: %s\n"
-
-#~ msgid "lid %lu: update failed: %s\n"
-#~ msgstr "lid %lu: atualização falhou %s\n"
-
-#~ msgid "lid %lu: updated\n"
-#~ msgstr "lid %lu: atualizado\n"
-
-#~ msgid "lid %lu: okay\n"
-#~ msgstr "lid %lu: correto\n"
-
-#~ msgid "%s: keyblock read problem: %s\n"
-#~ msgstr "%s: erro de leitura de bloco de chaves: %s\n"
-
-#~ msgid "%s: update failed: %s\n"
-#~ msgstr "%s: atualização falhou: %s\n"
-
-#~ msgid "%s: updated\n"
-#~ msgstr "%s: atualizado\n"
-
-#~ msgid "%s: okay\n"
-#~ msgstr "%s: correto\n"
-
-#~ msgid "lid %lu: keyblock not found: %s\n"
-#~ msgstr "lid %lu: bloco de chaves não encontrado: %s\n"
-
-#~ msgid "can't lock keyring `%': %s\n"
-#~ msgstr "impossível bloquear chaveiro `%': %s\n"
-
-#~ msgid "error writing keyring `%': %s\n"
-#~ msgstr "erro na escrita do chaveiro `%': %s\n"
-
-#~ msgid "can't open file: %s\n"
-#~ msgstr "impossível abrir arquivo: %s\n"
-
-#~ msgid "read error: %s\n"
-#~ msgstr "erro de leitura: %s\n"
-
-#~ msgid "writing keyblock\n"
-#~ msgstr "escrevendo bloco de chaves\n"
-
-#~ msgid "can't write keyblock: %s\n"
-#~ msgstr "impossível escrever bloco de chaves: %s\n"
-
-#, fuzzy
-#~ msgid "encrypted message is valid\n"
-#~ msgstr "algoritmo de \"digest\" selecionado não é válido\n"
-
-#, fuzzy
-#~ msgid "Can't check MDC: %s\n"
-#~ msgstr "Impossível verificar assinatura: %s\n"
-
-#~ msgid "Usage: gpgm [options] [files] (-h for help)"
-#~ msgstr "Uso: gpgm [opções] [arquivos] (-h para ajuda)"
-
-#~ msgid ""
-#~ "Syntax: gpgm [options] [files]\n"
-#~ "GnuPG maintenance utility\n"
-#~ msgstr ""
-#~ "Sintaxe: gpgm [opções] [arquivos]\n"
-#~ "Utilitário de manutenção do GnuPG\n"
-
-#~ msgid "usage: gpgm [options] "
-#~ msgstr "Uso: gpgm [opções] "
-
-#, fuzzy
-#~ msgid "chained sigrec %lu has a wrong owner\n"
-#~ msgstr "sigrec em cadeia %lu possui dono errado\n"
-
-#, fuzzy
-#~ msgid "lid %lu: read dir record failed: %s\n"
-#~ msgstr "lid %lu: leitura de registro de diretório falhou: %s\n"
-
-#~ msgid "lid %lu: read key record failed: %s\n"
-#~ msgstr "lid %lu: leitura de registro de chave falhou: %s\n"
-
-#~ msgid "lid %lu: read uid record failed: %s\n"
-#~ msgstr "lid %lu: leitura de registro de uid falhou: %s\n"
-
-#, fuzzy
-#~ msgid "lid %lu: read pref record failed: %s\n"
-#~ msgstr "lid %lu: leitura de registro de preferências falhou: %s\n"
-
-#, fuzzy
-#~ msgid "user '%s' read problem: %s\n"
-#~ msgstr "erro de leitura do usuário `%s': %s\n"
-
-#, fuzzy
-#~ msgid "user '%s' list problem: %s\n"
-#~ msgstr "erro de listagem do usuário `%s': %s\n"
-
-#, fuzzy
-#~ msgid "user '%s' not in trustdb\n"
-#~ msgstr "usuário `%s' não está no banco de dados de confiabilidade\n"
-
-#~ msgid ""
-#~ "# List of assigned trustvalues, created %s\n"
-#~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n"
-#~ msgstr ""
-#~ "# Lista de valores de confiança designados, criada em %s\n"
-#~ "# (Use \"gpgm --import-ownertrust\" para restaurá-los)\n"
-
-#~ msgid "directory record w/o primary key\n"
-#~ msgstr "registro de diretório sem chave primária\n"
-
-#~ msgid "error: missing colon\n"
-#~ msgstr "erro: falta dois pontos\n"
-
-#~ msgid "error: invalid fingerprint\n"
-#~ msgstr "erro: impressão digital inválida\n"
-
-#~ msgid "error: no ownertrust value\n"
-#~ msgstr "erro: nenhum valor de confiança\n"
-
-#~ msgid "key not in trustdb, searching ring.\n"
-#~ msgstr ""
-#~ "chave não encontrada no banco de dados de confiabilidade, procurando no "
-#~ "chaveiro\n"
-
-#~ msgid "key not in ring: %s\n"
-#~ msgstr "chave não encontrada no chaveiro: %s\n"
-
-#~ msgid "Oops: key is now in trustdb???\n"
-#~ msgstr "Oops: agora a chave está no banco de dados de confiabilidade???\n"
-
-#~ msgid "Hmmm, public key lost?"
-#~ msgstr "Hmmm, chave pública perdida?"
-
-#~ msgid "did not use primary key for insert_trust_record()\n"
-#~ msgstr "você usou a chave primária para insert_trust_record()\n"
-
-#~ msgid "invalid clear text header: "
-#~ msgstr "cabeçalho de texto puro inválido: "
-
-#~ msgid "LID %lu: changing trust from %u to %u\n"
-#~ msgstr "LID %lu: mudando confiança de %u para %u\n"
-
-#~ msgid "LID %lu: setting trust to %u\n"
-#~ msgstr "LID %lu: estabelecendo confiança para %u\n"
diff --git a/po/sv.po b/po/sv.po
deleted file mode 100644
index a3eb755ee..000000000
--- a/po/sv.po
+++ /dev/null
@@ -1,4987 +0,0 @@
-# Swedish messages for gnupg
-# Copyright (C) 1999 Free Software Foundation, Inc.
-# Daniel Resare <daniel@resare.com>, 1999.
-#
-# Thanks to André Dahlqvist <andre@beta.telenordia.se> for
-# many improvements
-#
-# Also many thanks to my wife Olivia <olivia@resare.com> for
-# patience, help and suggestions
-#
-# $Id$
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.0.6\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2001-08-23 10:32+02:00\n"
-"Last-Translator: Daniel Resare <daniel@resare.com>\n"
-"Language-Team: Swedish <sv@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: util/secmem.c:88
-#, fuzzy
-msgid "WARNING: using insecure memory!\n"
-msgstr "Varning: använder osäkert minne!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "operationen är ej möjlig utan tillgång till säkert minne\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(du kan ha använt fel program för denna uppgift)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "ja"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "jJ"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "nej"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "nN"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "avsluta"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "aA"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "allmänt fel"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "okänd pakettyp"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "okänd version"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "okänd algoritm för publik nyckel"
-
-# jag är inte nöjd med översättningen digest -> kontrollsumma,
-# om du har ett bättre förslag kontakta mig gärna på
-# daniel@resare.com. Andra förslag jag sågat är digest (oöversatt),
-# fingeravtryck, indatakarakteristik, sammandrag och sammanfattning
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "okänd algoritm för beräkning av kontrollsumma"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "felaktig publik nyckel"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "felaktig hemlig nyckel"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "felaktig signatur"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "fel vid beräkning av kontrollsumma"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "felaktig lösenordsfras"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "hittade inte publik nyckel"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "okänd chifferalgoritm"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "kan inte öppna nyckelringen"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "felaktigt paket"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "felaktigt skal"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "okänd användaridentitet"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "den hemliga nyckeln är inte tillgänglig"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "fel hemlig nyckel har använts"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "ej stödd"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "felaktig nyckel"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "fel vid läsning av fil"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "fel vid skrivning av fil"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "okänd komprimeringsalgoritm"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "fel vid öppnande av fil"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "fel vid skapande av fil"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "felaktig lösenordsfras"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "algoritmen för publik nyckel är ej implementerad"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "chifferalgorimten är ej implementerad"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "okänd signaturklass"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "fel i tillitsdatabasen"
-
-# MPI står för Multiple Precision Integer (tror jag)
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "felaktig MPI"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "resursbegränsning"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "felaktig nyckelring"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "felaktigt certifikat"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "felformaterad användaridentitet"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "fel vid stängning av fil"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "fel vid namnbyte av fil"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "fel vid borttagande av fil"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "oväntad data"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "konflikt mellan tidsstämplar"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "oanvändbar algoritm för publika nycklar"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "filen finns"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "svag nyckel"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "felaktigt argument"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "felaktig URI"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "ej stödd URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "nätverksfel"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "ej krypterad"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "inte behandlade"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "oanvändbar publik nyckel"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "oanvändbar hemlig nyckel"
-
-#: util/errors.c:107
-#, fuzzy
-msgid "keyserver error"
-msgstr "allmänt fel"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... detta är ett fel i programmet (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "du har hittat ett fel i programmet ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr ""
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "kan inte öppna \"%s\": %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "kan inte ta status på \"%s\": %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "\"%s\" är inte än vanlig fil - ignorerad\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "notera: filen random_seed är tom\n"
-
-#: cipher/random.c:401
-#, fuzzy
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "varning: random_seed har en felaktig storlek och används därför inte\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "kan inte läsa \"%s\": %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "notera: random_seed uppdaterades inte\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "kan inte skapa \"%s\": %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "kan inte skriva till \"%s\": %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "kan inte stänga \"%s\": %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "VARNING: använder en osäker slumptalsgenerator!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Slumptalsgeneratorn är bara ett lappverk för att\n"
-"få den att fungera - den är inte på något sätt en\n"
-"stark slumptalsgenerator!\n"
-"\n"
-"ANVÄND INGEN DATA GENERERAD AV DETTA PROGRAM!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Otillräcklig mängd slumpdata tillgängliga. Jobba med andra saker\n"
-"en stund för att ge operativsystemet en chans att samla mer entropi!\n"
-"(Behöver %d fler byte)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Kommandon:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[fil]|skapa en signatur"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[fil]|skapa en klartext-signatur"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "skapa en signatur i en separat fil"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "kryptera data"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr ""
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "endast kryptering med symmetriskt chiffer"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "endast lagring"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "dekryptera data (normalläge)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr ""
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "verifiera en signatur"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "räkna upp nycklar"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "räkna upp nycklar och signaturer"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "verifiera nyckelsignaturer"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "räkna upp nycklar och fingeravtryck"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "räkna upp hemliga nycklar"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "generera ett nytt nyckelpar"
-
-#: g10/g10.c:327
-#, fuzzy
-msgid "remove keys from the public keyring"
-msgstr "ta bort en nyckel från den publika nyckelringen"
-
-#: g10/g10.c:329
-#, fuzzy
-msgid "remove keys from the secret keyring"
-msgstr "ta bort en nyckel från den hemliga nyckelringen"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "signera en nyckel"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "signera en nyckel lokalt"
-
-#: g10/g10.c:332
-#, fuzzy
-msgid "sign a key non-revocably"
-msgstr "signera en nyckel lokalt"
-
-#: g10/g10.c:333
-#, fuzzy
-msgid "sign a key locally and non-revocably"
-msgstr "signera en nyckel lokalt"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "signera eller redigera en nyckel"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "generera ett återkallelesecertifikat"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "exportera nycklar"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "exportera nycklar till en nyckelserver"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "importera nycklar från en nyckelserver"
-
-#: g10/g10.c:341
-#, fuzzy
-msgid "search for keys on a key server"
-msgstr "exportera nycklar till en nyckelserver"
-
-#: g10/g10.c:343
-#, fuzzy
-msgid "update all keys from a keyserver"
-msgstr "importera nycklar från en nyckelserver"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "importera/slå ihop nycklar"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "skriv endast ut paketsekvensen"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "exportera de värden som representerar ägartillit"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "importera värden som representerar ägartillit"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "uppdatera tillitsdatabasen"
-
-#: g10/g10.c:357
-#, fuzzy
-msgid "unattended trust database update"
-msgstr "uppdatera tillitsdatabasen"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "reparera en korrupt tillitsdatabas"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Skala av en fil eller standard in"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Skapa ett skal för en fil eller standard in"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [filer]|skriv ut kontrollsummor"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Flaggor:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "skapa utdata med ett ascii-skal"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|NAMN|kryptera för NAMN"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|NAMN|använd NAMN som standardvärdet för mottagare"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "använd standardnyckeln som standardmottagare"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "använd denna användaridentitet för att signera eller dekryptera"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|sätt kompressionsnivån till N (0 för att slå av kompression)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "använd \"ursprunglig text\"-läget"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "använd som fil för utdata"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "utförlig"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "var något tystare"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "använd inte terminalen alls"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "använd v3-signaturer"
-
-#: g10/g10.c:397
-#, fuzzy
-msgid "do not force v3 signatures"
-msgstr "använd v3-signaturer"
-
-#: g10/g10.c:398
-#, fuzzy
-msgid "force v4 key signatures"
-msgstr "använd v3-signaturer"
-
-#: g10/g10.c:399
-#, fuzzy
-msgid "do not force v4 key signatures"
-msgstr "använd v3-signaturer"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "använd alltid en MDC för kryptering"
-
-#: g10/g10.c:402
-#, fuzzy
-msgid "never use a MDC for encryption"
-msgstr "använd alltid en MDC för kryptering"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "gör inga ändringar"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr ""
-
-# syftar på ett användargränsnitt i ett separat program, till exempel gpa
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "använd gpg-agenten"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "batch-läge: fråga aldrig"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "anta att svaret är ja på de flesta frågor"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "anta att svaret är nej på de flesta frågor"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "lägg till denna nyckelring till listan av nyckelringar"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "lägg till denna hemliga nyckelring till listan"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr ""
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|NAMN|använd NAMN som förvald hemlig nyckel"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|VÄRD|använd denna nyckelserver för att slå upp nycklar"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|NAMN|sätt teckentabellen för terminalen till NAMN"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "läs flaggor från fil"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|skriv statusinformation till denna FD"
-
-#: g10/g10.c:427
-#, fuzzy
-msgid "|[file]|write status info to file"
-msgstr "|FD|skriv statusinformation till denna FD"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|NYCKELID|lita ovillkorligen på denna nyckel"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|FIL|ladda tilläggsmodul FIL"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "imitera läget som beskrivs i RFC1991"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "ställ om alla flaggor så att gpg följer OpenPGP-standarden"
-
-#: g10/g10.c:443
-#, fuzzy
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "ställ om alla flaggor så att gpg följer OpenPGP-standarden"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|använd lösenordsläget N"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr "|NAMN|använd kontrollsummealgoritmen NAMN för lösenordsfraser"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|NAMN|använd chifferalgoritmen NAMN för lösenordsfraser"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NAMN|använd chifferalgoritmen NAMN"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NAMN|använd kontrollsummealgoritmen NAMN"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|använd komprimeringsalgoritmen N"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "släng bort nyckelidentitetsfältet från krypterade paket"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr ""
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr ""
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Se manualsidan för en komplett lista på alla kommandon och flaggor)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Exempel:\n"
-"\n"
-"-se -r Bo [fil] signera och kryptera för användaren Bo\n"
-"--clearsign [fil] skapa en klartextsignatur\n"
-"--detach-sign [fil] skapa en signatur i en separat fil\n"
-"--list-keys [namn] visa nycklar\n"
-"--fingerprint [namn] visa fingeravtryck\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr ""
-"Rapportera gärna fel till <gnupg-bugs@gnu.org>.\n"
-"Rapportera gärna fel eller synpunkter på översättningen till <sv@li.org>.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Användning: gpg [flaggor] [filer] (-h för hjälp)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Syntax: gpg [flaggor] [filer]\n"
-"signera, kontrollera, kryptera eller dekryptera\n"
-"vilken operation som utförs beror på programmets indata\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Stödda algoritmer:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "användning: gpg [flaggor] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "motstridiga kommandon\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr ""
-
-#: g10/g10.c:1168
-#, fuzzy, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "OBSERVERA: inställningsfilen \"%s\" saknas\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "OBSERVERA: inställningsfilen \"%s\" saknas\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "inställningsfil \"%s\": %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "läser flaggor från \"%s\"\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr ""
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s är ingen giltig teckentabell\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr ""
-
-#: g10/g10.c:1550
-#, fuzzy, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "VARNING: \"%s\" är en tom fil\n"
-
-#: g10/g10.c:1553
-#, fuzzy
-msgid "invalid import options\n"
-msgstr "felaktigt skal"
-
-#: g10/g10.c:1560
-#, fuzzy, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "VARNING: \"%s\" är en tom fil\n"
-
-#: g10/g10.c:1563
-#, fuzzy
-msgid "invalid export options\n"
-msgstr "felaktig nyckelring"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr ""
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "VARNING: programmet kan komma att skapa en minnesutskrift!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr ""
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "OBSERVERA: %s är inte för normal användning!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s är inte tillåten tillsammans med %s!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "det är ingen poäng att använda %s tillsammans med %s!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr ""
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr ""
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr ""
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "den valda chifferalgoritmen är ogiltig\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "den valda kontrollsummealgoritmen är ogiltig\n"
-
-#: g10/g10.c:1830
-#, fuzzy
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "den valda kontrollsummealgoritmen är ogiltig\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "kompressionsalgoritmen måste vara i intervallet %d..%d\n"
-
-# jag bedömer att detta och de följande är interna felmeddelanden
-# som det är i princip omöjligt att översätta på på ett bra sätt.
-# Sannolikheten för att användaren drabbas av felmeddelandet
-# är ändå litet. Eventuellt borde meddelandena inte alls
-# översättas för att göra eventuell felsökning lättare
-# för internationella felsökare
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "variabeln \"completes-needed\" måste ha ett värde som är större än 0\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "variabeln \"marginals-needed\" måste vara större än 1\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "variabeln \"max-cert-depth\" måste ha ett värde mellan 1 och 255\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "OBSERVERA: enkelt S2K-läge (0) rekommenderas inte\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "ogiltigt S2K-läge; måste vara 0, 1 eller 3\n"
-
-#: g10/g10.c:1862
-#, fuzzy
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "ogiltigt S2K-läge; måste vara 0, 1 eller 3\n"
-
-#: g10/g10.c:1868
-#, fuzzy
-msgid "invalid default preferences\n"
-msgstr "skriv ut inställningar"
-
-#: g10/g10.c:1876
-#, fuzzy
-msgid "invalid personal cipher preferences\n"
-msgstr "skriv ut inställningar"
-
-#: g10/g10.c:1880
-#, fuzzy
-msgid "invalid personal digest preferences\n"
-msgstr "skriv ut inställningar"
-
-#: g10/g10.c:1884
-#, fuzzy
-msgid "invalid personal compress preferences\n"
-msgstr "skriv ut inställningar"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "misslyckades med att initialisera tillitsdatabasen: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr ""
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [filnamn]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [filnamn]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [filnamn]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [filnamn]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [filnamn]"
-
-#: g10/g10.c:2056
-#, fuzzy
-msgid "--sign --symmetric [filename]"
-msgstr "--symmetric [filnamn]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [filnamn]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [filnamn]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key användaridentitet"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key användaridentitet"
-
-#: g10/g10.c:2110
-#, fuzzy
-msgid "--nrsign-key user-id"
-msgstr "--sign-key användaridentitet"
-
-#: g10/g10.c:2118
-#, fuzzy
-msgid "--nrlsign-key user-id"
-msgstr "--lsign-key användaridentitet"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key användaridentitet [kommandon]"
-
-# Filnamn både med och utan fnuttar finns. lite ologiskt. Vill någon
-# fixa en patch?
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "kan inte öppna %s: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [användaridentitet] [nyckelring]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "misslyckades med att ta bort skalet: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "misslyckades med att skapa skal: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "felaktig hash-algoritm \"%s\"\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[filnamn]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Skriv ditt meddelande här ...\n"
-
-# se förra kommentaren
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "kan inte öppna \"%s\"\n"
-
-#: g10/g10.c:2691
-#, fuzzy
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"ett notationsnamn kan bara innehålla bokstäver, siffror, punkter eller\n"
-"understrykningstecken och sluta med ett likhetstecken\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "ett notationsvärde får inte inehålla några kontrolltecken\n"
-
-#: g10/g10.c:2737
-#, fuzzy
-msgid "the given certification policy URL is invalid\n"
-msgstr "angiven URL är ogiltig\n"
-
-#: g10/g10.c:2739
-#, fuzzy
-msgid "the given signature policy URL is invalid\n"
-msgstr "angiven URL är ogiltig\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "skal: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "felaktig rubrikrad i skalet: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "rad i skalet: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "felaktig rubrikrad i klartextsignatur\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "flera klartextsignaturer går in i varandra\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "felaktig bindestreck-kodad rad: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "oväntat skal:"
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "ogiltigt radix64-tecken %02x hoppades över\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "för tidigt filslut (ingen CRC-summa)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "för tidigt filslut (i CRC-summan)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "felformaterad CRC-summa\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "CRC-fel; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "för tidigt filslut (i den avslutande raden)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "fel i avslutande rad\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "hittade ingen giltig OpenPGP-data.\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "felaktigt skal: raden är längre än %d tecken\n"
-
-#: g10/armor.c:1066
-msgid ""
-"quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"tecken kodade enligt \"quoted printable\"-standarden funna i skalet - detta\n"
-"beror sannolikt på att en felaktig epostserver eller epostklient har "
-"använts\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Ingen anledning har angivits"
-
-# tveksam översättning. funderar på "ersatt av något bättre" men det
-# känns inte heller bra
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Nyckeln är ersatt"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Nyckeln har tappat sin säkerhet"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Nyckeln används inte längre"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Användaridentiteten är inte längre giltig"
-
-#: g10/pkclist.c:73
-#, fuzzy
-msgid "reason for revocation: "
-msgstr "Anledning till återkallelsen: "
-
-#: g10/pkclist.c:90
-#, fuzzy
-msgid "revocation comment: "
-msgstr "Återkallelsekommentar: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr ""
-
-#: g10/pkclist.c:258
-#, fuzzy, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"%lu har inte tilldelats något tillitsvärde:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-#, fuzzy
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Var god bestäm hur mycket du litar på denna användare\n"
-"när det gäller att korrekt verifiera andra användares nycklar\n"
-"(genom att undersöka pass, undersöka fingeravtryck från olika\n"
-"källor...)?\n"
-"\n"
-" 1 = Vet ej\n"
-" 2 = Jag litar INTE på denna användare\n"
-" 3 = Jag litar marginellt på denna användare\n"
-" 4 = Jag litar fullständigt på denna användare\n"
-" s = visa mig mer information\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr ""
-
-#: g10/pkclist.c:274
-#, fuzzy, c-format
-msgid " %d = I do NOT trust\n"
-msgstr "%08lX: Vi litar INTE på denna nyckel\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr ""
-
-#: g10/pkclist.c:276
-#, fuzzy, c-format
-msgid " %d = I trust fully\n"
-msgstr "%s: ej en tillitsdatabasfil\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr ""
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr ""
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = gå tillbaka till huvudmenyn\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr ""
-
-# q skall bytas ut mot a såfort det kollas upp så att q också funkar.
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " q = avsluta\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Vad väljer du? "
-
-#: g10/pkclist.c:316
-#, fuzzy
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Vill du verkligen ta bort denna nyckel? "
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Certifikat som leder till en pålitlig nyckel:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "nyckeln %08lX: nyckeln har återkallats!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Vill du använda nyckeln trots det? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "nyckeln %08lX: en undernyckel har återkallats!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: nyckeln har blivit för gammal\n"
-
-#: g10/pkclist.c:448
-#, fuzzy, c-format
-msgid ""
-"%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr ""
-" Det finns inget som indikerar att signaturen tillhör ägaren.\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Vi litar INTE på denna nyckel\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Det är inte säkert att denna nyckel verkligen tillhör ägaren\n"
-"men den accepteras trots detta\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Denna nyckel tillhör sannolikt ägaren\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Denna nyckel tillhör oss\n"
-
-#: g10/pkclist.c:513
-#, fuzzy
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Det är INTE säkert att nyckeln tillhör sin ägare. Om du\n"
-"*verkligen* vet vad du gör, kan du svara ja på nästa fråga\n"
-"\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "VARNING: Använder en nyckel som inte är betrodd!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "VARNING: Denna nyckel har återkallats av sin ägare!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Detta kan betyda att signaturen är en förfalskning.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "VARNING: Denna undernyckel har återkallats av sin ägare!\n"
-
-#: g10/pkclist.c:580
-#, fuzzy
-msgid "Note: This key has been disabled.\n"
-msgstr "Denna nyckel har deaktiverats"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Notera: Denna nyckel har gått ut!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "VARNING: Denna nyckel är inte certifierad med en pålitlig signatur!\n"
-
-#: g10/pkclist.c:598
-msgid ""
-" There is no indication that the signature belongs to the owner.\n"
-msgstr ""
-" Det finns inget som indikerar att signaturen tillhör ägaren.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "VARNING: Vi litar INTE på denna nyckel!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Signaturen är sannolikt en FÖRFALSKNING.\n"
-
-#: g10/pkclist.c:615
-msgid ""
-"WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"VARNING: Denna nyckel är inte certifierad med signaturer med ett\n"
-"tillräckligt högt tillitsvärde!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Det är inte säkert att signaturen tillhör ägaren.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: %s överhoppad\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: hoppade över: publik nyckel finns redan\n"
-
-#: g10/pkclist.c:811
-#, fuzzy
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Du specificerade ingen användaridentitet. (du kan använda \"-r\")\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Hittade inte användaridentiteten.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr ""
-"hoppade över: den publika nyckeln är redan satt som förvald mottagare\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Den publika nyckeln är deaktiverad\n"
-
-#: g10/pkclist.c:870
-#, fuzzy
-msgid "skipped: public key already set\n"
-msgstr "%s: hoppade över: publik nyckel finns redan\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "den förvalda mottagaren \"%s\" är okänd\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: hoppade över: den publika nyckeln är deaktiverad\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "inga giltiga adresser\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr ""
-
-#: g10/keygen.c:189
-#, fuzzy, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "hoppade över \"%s\": kopia\n"
-
-#: g10/keygen.c:194
-#, fuzzy, c-format
-msgid "too many `%c' preferences\n"
-msgstr "skriv ut inställningar"
-
-#: g10/keygen.c:264
-#, fuzzy
-msgid "invalid character in preference string\n"
-msgstr "Ogiltigt tecken i namnet\n"
-
-#: g10/keygen.c:524
-#, fuzzy
-msgid "writing direct signature\n"
-msgstr "skriver självsignatur\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "skriver självsignatur\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "skriver signatur knuten till nyckeln\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "ogiltig nyckelstorlek; använder %u bitar\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "nyckelstorleken avrundad uppåt till %u bitar\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Välj vilken typ av nyckel du vill ha:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA och ElGamal (standardvalet)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (endast signering)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (endast kryptering)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (signering och kryptering)\n"
-
-#: g10/keygen.c:949
-#, fuzzy, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) DSA (endast signering)\n"
-
-#: g10/keygen.c:951
-#, fuzzy, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) ElGamal (endast kryptering)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (signering och kryptering)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Vad väljer du? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "Användanadet av denna algoritm är förlegat - skapa ändå? "
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Felaktigt val.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Kommer att generera ett nytt %s nyckelpar.\n"
-" den minimala nyckelstorleken är 768 bitar\n"
-" den förvalda nyckelstorleken är 1024 bitar\n"
-" den största föreslagna nyckelstorleken är 2048 bitar\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Vilken nyckelstorlek vill du ha? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA tillåter bara nyckelstorlekar från 512 till 1024\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr ""
-"nyckelstorleken är för liten; 1024 är det minsta tillåtna värdet för RSA.\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "nyckelstorleken är för liten; 768 är det minsta tillåtna värdet.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "nyckelstorleken är för stor; %d är det största tillåtna värdet\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Nyckelstorlekar större än 2048 är inte att rekommendera\n"
-"eftersom beräkningar tar MYCKET lång tid!\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Är du säker på att du vill ha denna nyckelstorlek? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Ok, men kom ihåg att din bildskärm och ditt tangentbord också sänder\n"
-"avslöjande strålning som kan avlyssnas!\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Den efterfrågade nyckelstorleken är %u bitar\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "avrundade uppåt till %u bitar\n"
-
-# borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Specificera hur länge nyckeln skall vara giltig.\n"
-" 0 = nyckeln blir aldrig ogiltig\n"
-" <n> = nyckeln blir ogiltig efter n dagar\n"
-" <n>w = nyckeln blir ogiltig efter n veckor\n"
-" <n>m = nyckeln blir ogiltig efter n månader\n"
-" <n>y = nyckeln blir ogiltig efter n år\n"
-
-# borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy
-#: g10/keygen.c:1126
-#, fuzzy
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Specificera hur länge nyckeln skall vara giltig.\n"
-" 0 = nyckeln blir aldrig ogiltig\n"
-" <n> = nyckeln blir ogiltig efter n dagar\n"
-" <n>w = nyckeln blir ogiltig efter n veckor\n"
-" <n>m = nyckeln blir ogiltig efter n månader\n"
-" <n>y = nyckeln blir ogiltig efter n år\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "För hur lång tid är nyckeln giltig? (0) "
-
-#: g10/keygen.c:1150
-#, fuzzy
-msgid "Signature is valid for? (0) "
-msgstr "För hur lång tid är nyckeln giltig? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "ogiltigt värde\n"
-
-#: g10/keygen.c:1160
-#, fuzzy, c-format
-msgid "%s does not expire at all\n"
-msgstr "Nyckeln går aldrig ut\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, fuzzy, c-format
-msgid "%s expires at %s\n"
-msgstr "Nyckeln går ut vid följande tidpunkt: %s\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Ditt system kan inte visa datum senare än år 2038.\n"
-"Datum fram till år 2106 kommer dock att hanteras korrekt.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Stämmer detta (j/n)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Du behöver en användaridentitet för att identifiera din nyckel; mjukvaran\n"
-"konstruerar en användaridentitet från namn, kommentar och epostadress\n"
-"enligt följande form: \n"
-" \"Gustav Vasa (Brutal kung) <gustav@trekronor.se>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Namn: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Ogiltigt tecken i namnet\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Namnet får inte börja med en siffra\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Namnet måste vara åtminstone 5 tecken långt\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "Epostadress: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "Epostadressen är ogiltig\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Kommentar: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Ogiltigt tecken i kommentaren\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "Du använder teckenuppsättningen \"%s\"\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Du valde följande användaridentitet:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Ange inte epostadressen som namn eller kommentar\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "NnKkEeOoAa"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "Ändra (N)amn, (K)ommentar, (E)post eller (A)vsluta? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "Ändra (N)amn, (K)ommentar, (E)post eller (O)k/(A)vsluta? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Rätta först felet\n"
-
-# fel kapitalisering i originalet?
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Du behöver en lösenordsfras för att skydda din hemliga nyckel\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-#, fuzzy
-msgid "passphrase not correctly repeated; try again"
-msgstr "lösenordsfrasen upprepades ej korrekt; försök igen.\n"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr ""
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Du vill inte ha någon lösenordsfras - det är sannolikt en *dålig* idé!\n"
-"Jag kommer att göra det ändå. Du kan ändra din lösenordsfras närsomhelst\n"
-"om du använder detta program med flaggan \"--edit-key\".\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Vi behöver generera ett stor mängd slumpmässig data. Det är en bra idé\n"
-"att göra något annat (skriva på tangentbordet, röra musen, använda\n"
-"hårddisken) under primtalsgenereringen; detta ger slumptalsgeneratorn\n"
-"en större chans att samla ihop en tillräcklig mängd entropi.\n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA-nyckelparet kommer att ha 1024 bitar.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Skapandet av nycklar avbröts.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "skriver publik nyckel till \"%s\"\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "skriver hemlig nyckel till \"%s\"\n"
-
-#: g10/keygen.c:2205
-#, fuzzy, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "nyckel %08lX: hittade ingen publik nyckel: %s\n"
-
-#: g10/keygen.c:2211
-#, fuzzy, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "nyckel %08lX: hittade inte den hemliga nyckeln: %s\n"
-
-#: g10/keygen.c:2225
-#, fuzzy, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n"
-
-#: g10/keygen.c:2232
-#, fuzzy, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "publik och hemlig nyckel skapad och signerad.\n"
-
-#: g10/keygen.c:2253
-#, fuzzy
-msgid "key marked as ultimately trusted.\n"
-msgstr "Certifikat som leder till en pålitlig nyckel:\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Notera att denna nyckel inte kan användas för kryptering. Du kommer kanske\n"
-"att vilja använda kommandot \"--edit-key\" för att generera en sekundär\n"
-"nyckel för detta syfte.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Nyckelgenereringen misslyckades: %s\n"
-
-# c-format behövs inte i singularis
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid ""
-"key has been created %lu second in future (time warp or clock problem)\n"
-msgstr ""
-"nyckeln är skapad %lu sekund in i framtiden (problemet är\n"
-"relaterat till tidsresande eller en felställd klocka)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid ""
-"key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"nyckeln är skapad %lu sekunder in i framtiden (problemet är\n"
-"relaterat till tidsresande eller en felställd klocka)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "OSERVERA: att skapa undernycklar till v3-nycklar bryter mot OpenPGP\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Vill du verkligen skapa? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr ""
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: kan inte öppna: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "fel vid skapandet av lösenordsfras: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr ""
-
-#: g10/encode.c:229 g10/encode.c:486
-#, fuzzy, c-format
-msgid "`%s' already compressed\n"
-msgstr "%lu nycklar behandlade\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: VARNING: tom fil\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "läser från \"%s\"\n"
-
-#: g10/encode.c:456
-msgid ""
-"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr ""
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr ""
-
-#: g10/encode.c:558 g10/sign.c:758
-#, fuzzy, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "OBSERVERA: chifferalgoritmen %d finns inte i inställningarna\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr ""
-
-#: g10/encode.c:735
-#, fuzzy, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s krypterad för: %s\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, fuzzy, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "användaren \"%s\" hittades inte: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, fuzzy, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "fel vid läsning av \"%s\": %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "nyckeln %08lX följer inte standarden RFC2440 - överhoppad\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "nyckeln %08lX är inte skyddad - överhoppad\n"
-
-#: g10/export.c:246
-#, fuzzy, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "nyckeln %08lX: ny nyckel - överhoppad\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "VARNING: exporterade ingenting\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "för många poster i pk-cachen - inaktiverad\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Hittade inte användaridentiteten]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "använder sekundära nyckeln %08lX istället för primärnyckeln %08lX\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "nyckel %08lX: hemlig nyckel utan publik nyckel - hoppade över\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "hoppar över block av typen %d\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "har behandlat %lu nycklar hittills\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "fel vid läsning av \"%s\": %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr " Totalt antal behandlade enheter: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " överhoppade nya nycklar: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " utan användaridentiteter: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " importerade: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " oförändrade: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " nya användaridentiteter: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " nya undernycklar: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " nya signaturer: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " nya återkallelser av nycklar: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " antal lästa hemliga nycklar: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr "antal importerade hemliga nycklar: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr "antal oförändrade hemliga nycklar: %lu\n"
-
-#: g10/import.c:313
-#, fuzzy, c-format
-msgid " not imported: %lu\n"
-msgstr " importerade: %lu"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "nyckel %08lX: ingen användaridentitet\n"
-
-#: g10/import.c:597
-#, fuzzy, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "nyckel %08lX: ingen undernyckel för nyckelbindning\n"
-
-# vad innebär fnutten i slutet?
-#: g10/import.c:612
-#, fuzzy, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "nyckel %08lX: accepterade icke självsignerad användaridentitet '"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "nyckel %08lX: inga giltiga användaridentiteter\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "detta kan bero på att det saknas en självsignatur\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "nyckel %08lX: hittade ingen publik nyckel: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "nyckeln %08lX: ny nyckel - överhoppad\n"
-
-#: g10/import.c:646
-#, fuzzy, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "skriver till \"%s\"\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n"
-
-#: g10/import.c:663
-#, fuzzy, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "nyckel %08lX: importerade publik nyckel\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "nyckel %08lX: matchar inte vår lokala kopia\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "nyckel %08lX: kan inte hitta det ursprungliga nyckelblocket: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "nyckel %08lX: kan inte läsa det ursprungliga nyckelblocket %s\n"
-
-#: g10/import.c:740
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "nyckel %08lX: 1 ny användaridentitet\n"
-
-#: g10/import.c:743
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "nyckel %08lX: %d nya användaridentiteter\n"
-
-#: g10/import.c:746
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "nyckel %08lX: 1 ny signatur\n"
-
-#: g10/import.c:749
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "nyckel %08lX: %d nya signaturer\n"
-
-#: g10/import.c:752
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "nyckel %08lX: 1 ny undernyckel\n"
-
-#: g10/import.c:755
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "nyckel %08lX: %d nya undernycklar\n"
-
-#: g10/import.c:774
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "nyckel %08lX: inte förändrad\n"
-
-#: g10/import.c:844
-#, fuzzy, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "ingen förvald publik nyckel\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "nyckel %08lX: den hemliga nyckeln är importerad\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "nyckel %08lX: finns redan i den hemliga nyckelringen\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "nyckel %08lX: hittade inte den hemliga nyckeln: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"nyckel %08lX: ingen publik nyckel - kan inte tillämpa "
-"återkallelsecertifikatet\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "nyckel %08lX: ogiltigt återkallelsecertifikat: %s - avvisat\n"
-
-#: g10/import.c:969
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "nyckel %08lX: återkallelsecertifikat importerat\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "nyckel %08lX: ingen användaridentitet för signaturen\n"
-
-#: g10/import.c:1030
-#, fuzzy, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr "nyckel %08lX: algoritmen för publik nyckel ej stödd\n"
-
-#: g10/import.c:1032
-#, fuzzy, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "nyckel %08lX: ogiltig självsignatur\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "nyckel %08lX: ingen undernyckel för nyckelbindning\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "nyckel %08lX: algoritmen för publik nyckel ej stödd\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "nyckel %08lX: ogiltig undernyckelbindning\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "nyckel %08lX: ogiltig undernyckelbindning\n"
-
-#: g10/import.c:1088
-#, fuzzy, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "nyckel %08lX: ingen undernyckel för nyckelbindning\n"
-
-#: g10/import.c:1097
-#, fuzzy, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "nyckel %08lX.%lu: Giltig återkallelse av undernyckel\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, fuzzy, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "nyckel %08lX: ogiltig undernyckelbindning\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "nyckel %08lX: hoppade över användaridentitet '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "nyckel %08lX: hoppade över undernyckel\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "nyckel %08lX: icke exporterbar signatur (klass %02x) - hoppade över\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "nyckel %08lX: återkallelsecertifikat på fel plats - hoppade över\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "nyckel %08lX: felaktigt återkallelsecertifikat: %s - hoppade över\n"
-
-#: g10/import.c:1232
-#, fuzzy, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "nyckel %08lX: återkallelsecertifikat på fel plats - hoppade över\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "nyckel %08lX: användaridentitet hittades två gånger - slog ihop\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-
-#: g10/import.c:1460
-#, fuzzy, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "nyckel %08lX: lade till återkallelsecertifikat\n"
-
-#: g10/import.c:1491
-#, fuzzy, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "nyckel %08lX: %d nya signaturer\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[återkallelse]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[självsignatur]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 felaktig signatur\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d felaktiga signaturer\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 signatur verifierades inte eftersom nyckeln saknades\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d signaturer verifierades inte eftersom nycklar saknades\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 signatur verifierades inte eftersom ett fel uppstod\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d signaturer verifierades inte eftersom fel uppstod\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 användaridentitet utan giltig självsignatur hittades\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d användaridentiteter utan giltig självsignatur hittades\n"
-
-#: g10/keyedit.c:360
-#, fuzzy, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Nyckeln är skyddad.\n"
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-#, fuzzy
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Är du säker på att du vill ha denna nyckelstorlek? "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr ""
-
-#: g10/keyedit.c:380
-#, fuzzy, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "VARNING: \"%s\" är en tom fil\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr ""
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr ""
-
-#: g10/keyedit.c:446
-#, fuzzy, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "Redan signerad av nyckeln %08lX\n"
-
-#: g10/keyedit.c:450
-#, fuzzy, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "Redan signerad av nyckeln %08lX\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "Det finns inget att signera med nyckeln %08lX\n"
-
-#: g10/keyedit.c:478
-#, fuzzy
-msgid "This key has expired!"
-msgstr "Notera: Denna nyckel har gått ut!\n"
-
-#: g10/keyedit.c:498
-#, fuzzy, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Denna nyckel är inte skyddad.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr ""
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr ""
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr ""
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Är du verkligen säker på att du vill signera denna nyckel\n"
-"med din nyckel: \""
-
-#: g10/keyedit.c:604
-#, fuzzy
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr "detta kan bero på att det saknas en självsignatur\n"
-
-#: g10/keyedit.c:608
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"Signaturen kommer att markeras som icke exporterbar.\n"
-"\n"
-
-#: g10/keyedit.c:613
-#, fuzzy
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"Signaturen kommer att markeras som icke exporterbar.\n"
-"\n"
-
-#: g10/keyedit.c:620
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"Signaturen kommer att markeras som icke exporterbar.\n"
-"\n"
-
-#: g10/keyedit.c:624
-#, fuzzy
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"Signaturen kommer att markeras som icke exporterbar.\n"
-"\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Vill du verkligen signera? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "signeringen misslyckades: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Denna nyckel är inte skyddad.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "De hemliga delarna av den primära nyckeln är inte tillgängliga.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Nyckeln är skyddad.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Kan inte redigera denna nyckel: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Skriv in den nya lösenordsfrasen för denna hemliga nyckel.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Du vill inte ha någon lösenordsfras - detta är sannolikt en dålig idé!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Vill du verkligen göra detta? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "flyttar en nyckelsignatur till den rätta platsen\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "avsluta denna meny"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "q"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "save"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "spara och avsluta"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "help"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "visa denna hjälp"
-
-# skall dessa översättas?
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "fpr"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "visa fingeravtryck"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "list"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "räkna upp nycklar och användaridentiteter"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "uid"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "välj användaridentitet N"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "key"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "välj sekundär nyckel N"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "check"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "räkna upp signaturer"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "c"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "sign"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "signera nyckeln"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "s"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "signera nyckeln lokalt"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "nrsign"
-msgstr "sign"
-
-#: g10/keyedit.c:916
-#, fuzzy
-msgid "sign the key non-revocably"
-msgstr "signera nyckeln lokalt"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "nrlsign"
-msgstr "lsign"
-
-#: g10/keyedit.c:917
-#, fuzzy
-msgid "sign the key locally and non-revocably"
-msgstr "signera nyckeln lokalt"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "debug"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "adduid"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "lägg till en användaridentitet"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr ""
-
-#: g10/keyedit.c:920
-#, fuzzy
-msgid "add a photo ID"
-msgstr "lägg till en användaridentitet"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "deluid"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "ta bort en användaridentitet"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr ""
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "addkey"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "lägg till en sekundär nyckel"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "delkey"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "ta bort en sekundär nyckel"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "addrevoker"
-msgstr "addkey"
-
-#: g10/keyedit.c:926
-#, fuzzy
-msgid "add a revocation key"
-msgstr "lägg till en sekundär nyckel"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "delsig"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "ta bort signaturer"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "expire"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "ändra utgångsdatum"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr ""
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr ""
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "toggle"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "hoppa mellan utskrift av hemliga och publika nycklar"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "t"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "pref"
-
-#: g10/keyedit.c:933
-#, fuzzy
-msgid "list preferences (expert)"
-msgstr "skriv ut inställningar"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "showpref"
-
-#: g10/keyedit.c:934
-#, fuzzy
-msgid "list preferences (verbose)"
-msgstr "skriv ut inställningar"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "setpref"
-msgstr "pref"
-
-#: g10/keyedit.c:935
-#, fuzzy
-msgid "set preference list"
-msgstr "skriv ut inställningar"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updpref"
-msgstr "pref"
-
-#: g10/keyedit.c:936
-#, fuzzy
-msgid "updated preferences"
-msgstr "skriv ut inställningar"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "passwd"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "ändra lösenordsfrasen"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "trust"
-
-# originalet borde ha ett value
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "ändra ägartillitsvärdet"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "revsig"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "återkalla signaturer"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "revkey"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "återkalla en sekundär nyckel"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "disable"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "deaktivera en nyckel"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "enable"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "aktivera en nyckel"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr ""
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr ""
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "kan ej göra detta i batch-läge\n"
-
-#: g10/keyedit.c:1000
-#, fuzzy, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "fel vid läsning av \"%s\": %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Den hemliga nyckeln finns tillgänglig.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Kommando> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Den hemliga nyckeln behövs för att göra detta.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "Använd kommandot \"toggle\" först.\n"
-
-#: g10/keyedit.c:1134
-#, fuzzy
-msgid "Key is revoked."
-msgstr "Nyckeln är skyddad.\n"
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Vill du verkligen signera alla användaridentiteter? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Tips: Välj det användarid du vill signera\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr ""
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "Du måste välja åtminstone en användaridentitet.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Du kan inte ta bort den sista användaridentiteten!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Vill du verkligen ta bort alla valda användaridentiteter? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Vill du verkligen ta bort denna användaridentitet? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "Du måste välja åtminstone en nyckel.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Vill du verkligen ta bort valda nycklar? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Vill du verkligen ta bort denna nyckel? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Vill du verkligen återkalla de valda nycklarna? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Vill du verkligen återkalla denna nyckel? "
-
-#: g10/keyedit.c:1354
-#, fuzzy
-msgid "Really update the preferences for the selected user IDs? "
-msgstr "Vill du verkligen ta bort alla valda användaridentiteter? "
-
-#: g10/keyedit.c:1356
-#, fuzzy
-msgid "Really update the preferences? "
-msgstr "Vill du verkligen skapa återkallelsecertifikaten? (j/N)"
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Spara ändringarna? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Avsluta utan att spara? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "uppdateringen misslyckades: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "misslyckades med att uppdatera hemligheten: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Nyckeln är oförändrad så det behövs ingen uppdatering.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Ogiltigt kommando (försök med \"help\")\n"
-
-#: g10/keyedit.c:1750
-#, fuzzy, c-format
-msgid "This key may be revoked by %s key "
-msgstr "VARNING: Denna nyckel har återkallats av sin ägare!\n"
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr ""
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX skapad: %s går ut: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " tillit: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Denna nyckel har deaktiverats"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "rev! en undernyckel har återkallats: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "rev- hittade felaktig återkallelse\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "rev? problem vid kontroll av återkallandet: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr ""
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2006
-#, fuzzy
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Är du säker på att du vill ha denna nyckelstorlek? "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr ""
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Vill du radera denna korrekta signatur? (j/N/a)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Vill du radera denna ogiltiga signatur? (j/N/a)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Vill du radera denna okända signatur? (j/N/a)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Vill du radera denna självsignatur? (j/N)"
-
-# skulle lika gärna kunna heta 1 signatur va?
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "Raderade %d signatur.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "Raderade %d signaturer.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Ingenting raderat.\n"
-
-#: g10/keyedit.c:2281
-#, fuzzy
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Ange storleken på nyckeln"
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr ""
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Tag bort markeringar från de hemliga nycklarna.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Välj som mest en sekundär nyckel.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Ändrar giltighetstid för en sekundär nyckel.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Ändrar giltighetstid för den primära nyckeln.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Du kan inte ändra giltighetsdatum för en v3-nyckel\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Det finns ingen motsvarande signatur i den hemliga nyckelringen\n"
-
-#: g10/keyedit.c:2546
-#, fuzzy
-msgid "Please select exactly one user ID.\n"
-msgstr "Du måste välja åtminstone en användaridentitet.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, fuzzy, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "nyckel %08lX: ogiltig självsignatur\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "Ingen användaridentitet med index %d\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "Ingen sekundär nyckel med index %d\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "användaridentitet: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"signerad med din nyckel %08lX %s\n"
-
-#: g10/keyedit.c:2918
-#, fuzzy, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"signerad med din nyckel %08lX %s\n"
-
-#: g10/keyedit.c:2923
-#, fuzzy, c-format
-msgid "This signature expired on %s.\n"
-msgstr "%s-signatur från: %s\n"
-
-#: g10/keyedit.c:2927
-#, fuzzy
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Vill du verkligen återkalla denna nyckel? "
-
-#: g10/keyedit.c:2931
-#, fuzzy
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Vill du skapa ett återkallelsecertifikat för denna signatur? (j/N)"
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Du har signerat följande användaridentiteter:\n"
-
-#: g10/keyedit.c:2975
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " signerad av %08lX %s\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " återkallad av %08lX %s\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Du står i begrepp att återkalla dessa signaturer:\n"
-
-#: g10/keyedit.c:3013
-#, fuzzy, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " signerad av %08lX %s\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr ""
-
-#: g10/keyedit.c:3022
-#, fuzzy
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Vill du verkligen skapa återkallelsecertifikaten? (j/N)"
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "ingen hemlig nyckel\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-
-#: g10/keylist.c:91
-#, fuzzy
-msgid "Critical signature policy: "
-msgstr "%s-signatur från: %s\n"
-
-#: g10/keylist.c:93
-#, fuzzy
-msgid "Signature policy: "
-msgstr "%s-signatur från: %s\n"
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "VARNING: ogiltig notationsdata hittades\n"
-
-#: g10/keylist.c:127
-#, fuzzy
-msgid "Critical signature notation: "
-msgstr "Notation: "
-
-#: g10/keylist.c:129
-#, fuzzy
-msgid "Signature notation: "
-msgstr "Notation: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr ""
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr ""
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr "[går ut: %s]"
-
-#: g10/keylist.c:1001
-#, fuzzy
-msgid "Primary key fingerprint:"
-msgstr "räkna upp nycklar och fingeravtryck"
-
-#: g10/keylist.c:1003
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingeravtryck:"
-
-#: g10/keylist.c:1010
-#, fuzzy
-msgid " Primary key fingerprint:"
-msgstr " Fingeravtryck:"
-
-#: g10/keylist.c:1012
-#, fuzzy
-msgid " Subkey fingerprint:"
-msgstr " Fingeravtryck:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-#, fuzzy
-msgid " Key fingerprint ="
-msgstr " Fingeravtryck:"
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr ""
-
-#: g10/mainproc.c:258
-#, fuzzy, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "felaktig hash-algoritm \"%s\"\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s krypterad data\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "krypterad med en okänd algoritm %d\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "den publika nyckeln är %08lX\n"
-
-# DEK betyder Data Encryption Key, Meddelandet är förvirrande
-# men efter att ha kikat i koden har jag kommit fram till att
-# meddelandet bara visas om verbose-flaggan är satt, och då
-# markerar meddelandet att get_session_key lyckades hitta
-# rätt publik nyckel att kryptera datat med. Jag tycker
-# inte att svenska översättningen är mycket obskyrare än engelska
-# originalet iallafall.
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "data krypterad med publik nyckel: korrekt krypteringsnyckel\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr "krypterad med %u-bitars %s-nyckel, ID %08lX, skapad %s\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "krypterad med %s-nyckel, ID %08lX\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "dekryptering med publik nyckel misslyckades: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, fuzzy, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "%s krypterad data\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr ""
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "dekrypteringen lyckades\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "VARNING: det krypterade meddelandet har ändrats!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "dekrypteringen misslyckades: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "OBSERVERA: avsändaren efterfrågade \"endast-för-dina-ögon\"\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "ursprungligt filnamn=\"%.*s\"\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr ""
-"fristående återkallelsecertifikat - använd \"gpg --import\" för\n"
-"att applicera\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Notation: "
-
-# finns det någon bra svensk översättning av policy?
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Policy: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "signaturen verifierades inte\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "kan inte hantera dessa multipla signaturer\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "Signerades %.*s med hjälp av %s-nyckeln med ID %08lX\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "FELAKTIG signatur från \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-#, fuzzy
-msgid "Expired signature from \""
-msgstr "Korrekt signatur från \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Korrekt signatur från \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr ""
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " även känd som \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Kan inte verifiera signaturen: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "ingen frikopplad signatur\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "fristående signatur av klassen 0x%02x\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "signatur av den gamla (PGP 2.x) typen\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "felaktigt rotpaket hittades i proc_tree()\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "kan inte deaktivera minnesutskrifter: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Experimentella algoritmer bör inte användas!\n"
-
-# XXX
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr ""
-"denna chifferalgoritm är förlegad, använd istället en mer normal algoritm!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr ""
-
-#: g10/misc.c:301
-msgid ""
-"please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-
-#: g10/misc.c:509
-#, fuzzy, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "VARNING: \"%s\" är en tom fil\n"
-
-#: g10/misc.c:513
-#, fuzzy, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "VARNING: \"%s\" är en tom fil\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr ""
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "kan inte hantera algoritm %d för publik nyckelhantering\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "underpaket av typen %d har den bit satt som markerar den som kritisk\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "kunde inte få tillgång till någon gpg-agent i denna session\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr ""
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "miljövariabeln GPG_AGENT_INFO är felformaterad\n"
-
-#: g10/passphrase.c:511
-#, fuzzy, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "skyddsalgoritmen %d stöds inte\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "kan inte ansluta till \"%s\": %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr ""
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-#, fuzzy
-msgid "problem with the agent - disabling agent use\n"
-msgstr "problem med agenten: agenten returnerar 0x%lx\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (huvudnyckelns identitet %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"Du behöver en lösenordsfras för att låsa upp den hemliga nyckeln för\n"
-"användaren: \"%.*s\"\n"
-"%u-bitars %s-nyckel, ID %08lX, skapad %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Ange lösenordsfras\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Repetera lösenordsfrasen\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "lösenordsfrasen är för lång\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "felaktigt svar från agenten\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "avbruten av användaren\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "problem med agenten: agenten returnerar 0x%lx\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Du behöver en lösenordsfras för att låsa upp den hemliga nyckeln för\n"
-"användaren: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u-bits %s-nyckel, ID %08lX, skapad %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "kan inte fråga efter lösenord i batch-läge\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Ange lösenordsfras: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Repetera lösenordsfrasen: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "data sparades inte, använd flaggan \"--output\" för att spara den\n"
-
-#: g10/plaintext.c:108
-#, fuzzy, c-format
-msgid "error creating `%s': %s\n"
-msgstr "fel vid läsning av \"%s\": %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Löskopplad signatur.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Ange namnet på datafilen: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "läser från standard in ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "ingen signerad data\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "kan inte öppna signerad data \"%s\"\n"
-
-#: g10/pubkey-enc.c:101
-#, fuzzy, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "anonym mottagare, försöker använda den hemliga nyckeln %08lX ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "ok, vi är den hemliga mottagaren.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "gammal kodning av krypteringsnyckeln stöds inte\n"
-
-#: g10/pubkey-enc.c:178
-#, fuzzy, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "chifferalgoritmen %d är okänd eller avslagen\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "OBSERVERA: chifferalgoritmen %d finns inte i inställningarna\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "OBSERVERA: den hemliga nyckeln %08lX gick ut %s\n"
-
-#: g10/pubkey-enc.c:249
-#, fuzzy
-msgid "NOTE: key has been revoked"
-msgstr "nyckeln %08lX: nyckeln har återkallats!\n"
-
-#: g10/hkp.c:71
-#, fuzzy, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "fråga efter nyckeln %08lX från %s ...\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "kan inte hämta nyckeln från en nyckelserver: %s\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "fel vid sändning till \"%s\": %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "lyckades sända till \"%s\" (status=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "misslyckades sända till \"%s\": status=%u\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr ""
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr ""
-
-#: g10/hkp.c:565
-#, fuzzy, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "kan inte hämta nyckeln från en nyckelserver: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "de hemliga nyckeldelarna är inte tillgänliga\n"
-
-#: g10/seckey-cert.c:59
-#, fuzzy, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "skyddsalgoritmen %d stöds inte\n"
-
-#: g10/seckey-cert.c:224
-#, fuzzy
-msgid "Invalid passphrase; please try again"
-msgstr "Ogiltig lösenordsfras, försök igen ...\n"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr ""
-
-# är det nyckeln som är svag, konstigt
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr "VARNING: Upptäckte en svag nyckel - byt lösenordsfras igen.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr ""
-
-#: g10/sig-check.c:215
-#, fuzzy, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr ""
-"detta är en PGP-genererad ElGamal-nyckel som INTE är säker för signaturer!\n"
-
-# behövs verkligen c-format här?
-#: g10/sig-check.c:224
-#, fuzzy, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "den publika nyckeln är %lu sekund nyare än signaturen\n"
-
-#: g10/sig-check.c:225
-#, fuzzy, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "den publika nyckeln är %lu sekunder nyare än signaturen\n"
-
-# c-format behövs inte i singularis
-#: g10/sig-check.c:234
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"nyckeln är skapad %lu sekund in i framtiden (problemet är\n"
-"relaterat till tidsresande eller en felställd klocka)\n"
-
-#: g10/sig-check.c:236
-#, fuzzy, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"nyckeln är skapad %lu sekunder in i framtiden (problemet är\n"
-"relaterat till tidsresande eller en felställd klocka)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "OBSERVERA: signaturnyckeln %08lX, gick ut vid %s\n"
-
-#: g10/sig-check.c:348
-#, fuzzy, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"antar att signaturen är felaktig eftersom en okänd kritisk bit är satt\n"
-
-#: g10/sign.c:103
-#, c-format
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:151
-#, c-format
-msgid ""
-"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "försök att verifiera signaturen misslyckades: %s\n"
-
-#: g10/sign.c:312
-#, fuzzy, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s-signatur från: %s\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "VARNING: \"%s\" är en tom fil\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "kan inte skapa %s: %s\n"
-
-#: g10/sign.c:690
-#, fuzzy, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "OBSERVERA: chifferalgoritmen %d finns inte i inställningarna\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "signerar:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr ""
-
-#: g10/sign.c:1029
-#, fuzzy, c-format
-msgid "%s encryption will be used\n"
-msgstr "dekrypteringen misslyckades: %s\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "kan inte hantera text med rader längre än %d tecken\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "indataraden är längre än %d tecken\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "tillitsdatabasposten %lu: lseek misslyckades: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "tillitsdatabasposten %lu: skrivning misslyckades (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "tillitsdatabastransaktion för stor\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: ingen åtkomst: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: katalogen finns inte!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: kan inte skapa lås\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, fuzzy, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: kan inte skapa lås\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: kan inte skapa: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: misslyckades med att skapa versionspost: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: felaktig tillitsdatabas skapad\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: tillitsdatabas skapad\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr ""
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: felaktig tillitsdatabas\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: misslyckades med att skapa hash-tabell: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: fel vid uppdatering av versionspost: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: fel vid läsning av versionspost: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: fel vid skrivning av versionspost: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "tillitsdatabas: lseek misslyckades: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "tillitsdatabas: läsning misslyckades (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: ej en tillitsdatabasfil\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: versionspost med postnummer %lu\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: ogiltig filversion %d\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: fel vid läsning av ledig post: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: fel vid läsning av katalogpost: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: misslyckades med att nollställa en post: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: misslyckades med att lägga till en post: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "tillitsdatabasen är trasig, kör \"gpg --fix-trustdb\".\n"
-
-#: g10/trustdb.c:200
-#, fuzzy, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "\"%s\" är en ogiltig lång nyckelidentitet\n"
-
-#: g10/trustdb.c:235
-#, fuzzy, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "nyckel %08lX: accepterad som en pålitlig nyckel\n"
-
-#: g10/trustdb.c:274
-#, fuzzy, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "nyckel %08lX: kan inte lägga till i tillitsdatabasen\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "nyckel %08lX: hittade ingen motsvarande publik nyckel - överhoppad\n"
-
-# req är nog felstavat i originalet då det syftar på record och inte
-# request
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "tillitspost %lu, posttyp %d: kunde inte läsa: %s\n"
-
-#: g10/trustdb.c:338
-#, fuzzy, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "tillitspost %lu: kunde inte radera: %s\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "tillitspost: %lu, typ %d: kunde inte skriva: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "tillitsdatabas: synkronisering misslyckades: %s\n"
-
-#: g10/trustdb.c:468
-#, fuzzy
-msgid "no need for a trustdb check\n"
-msgstr "%s: ej en tillitsdatabasfil\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, fuzzy, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "tillitsdatabasposten %lu: lseek misslyckades: %s\n"
-
-# originalet borde ha ett value
-#: g10/trustdb.c:779
-#, fuzzy
-msgid "checking the trustdb\n"
-msgstr "ändra ägartillitsvärdet"
-
-#: g10/trustdb.c:933
-#, fuzzy, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "hittade inte publik nyckel"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr ""
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"signaturen kunde inte verifieras.\n"
-"Kom ihåg att signaturfilen (.sig eller .asc)\n"
-"ska vara den först angivna filen på kommandoraden\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "raden %u är för lång, eller saknar nyradstecken\n"
-
-# om någon kan tala om för mig vad detta betyder skulle jag bli jätteglad!
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr ""
-"nyckeln är inte markerad osäker - går inte att använda med fejkad RNG!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "hoppade över \"%s\": kopia\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "hoppade över \"%s\": %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "hoppade över: hemlig nyckel finns redan\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"hoppade över \"%s\": detta är en nyckel av ElGamal-typ genererad av PGP\n"
-"som inte är säker för signaturer!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "Filen \"%s\" finns. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Skriv över (j/N)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: okänt suffix\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Ange nytt filnamn"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "skriver till standard ut\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "antar att signera data finns i filen \"%s\"\n"
-
-#: g10/openfile.c:326
-#, fuzzy, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "%s: ny inställningsfil skapad\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: kan inte skapa katalog: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: katalog skapad\n"
-
-#: g10/encr-data.c:91
-msgid ""
-"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr ""
-"VARNING: meddelandet krypterades med en svag nyckel i det symmetriska\n"
-"chiffret.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "problem vid hanteringen av krypterat paket\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "skapade en svag nyckel - försöker igen\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"kan inte undvika en svag nyckel för symmetriskt chiffer; försökte\n"
-"%d gånger!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr ""
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr ""
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "kan inte göra så i batch-läge utan flaggan \"--yes\"\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Vill du ta bort denna nyckel från nyckelringen? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Detta är en hemlig nyckel! - vill du verkligen ta bort den? "
-
-#: g10/delkey.c:168
-#, fuzzy, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "numrering av nyckelblock misslyckades: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr ""
-
-#: g10/delkey.c:206
-#, fuzzy, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "det finns en hemlig nyckel tillhörande denna publika nyckel!\n"
-
-#: g10/delkey.c:208
-#, fuzzy
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "använd flaggan \"--delete-secret-key\" för att ta bort den först.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Det är upp till dig att ange ett värde här. Detta värde kommer aldrig att\n"
-"exporteras till någon tredje part. Vi behöver det för att implementera\n"
-"\"nätet av tillit\". Det har inget att göra med det (implicit skapade)\n"
-"nätet av certifikat."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr "Om du vill använda denna återkallade nyckel ändå, svara \"ja\"."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr "Om du vill använda denna otillförlitliga nyckel ändå, svara \"ja\"."
-
-#: g10/helptext.c:68
-msgid ""
-"Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Ange användaridentiteten till vilken du vill skicka meddelandet."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Välj vilken algoritm du vill använda.\n"
-"\n"
-"DSA (även känd som DSS) är den algoritm för digitala signaturer som bara\n"
-"kan användas för just signaturer. Detta är den rekommenderade algoritmen\n"
-"eftersom verifiering av DSA-signaturer är mycket snabbare än\n"
-"ElGamal-signaturer.\n"
-"\n"
-"ElGamal är en algoritm som kan användas för signaturer och kryptering.\n"
-"OpenPGP-standarden skiljer på två varianter av denna algoritm: en som bara\n"
-"kan användas för kryptering och en som både kan signera och kryptera.\n"
-"Egentligen är det samma algoritm, men vissa parametrar måste väljas på\n"
-"ett speciellt sätt för att skapa en säker nyckel för signaturer: detta "
-"program\n"
-"gör detta men andra OpenPGP-implementationer behöver inte förstå\n"
-"signatur+kryptering varianten.\n"
-"\n"
-"Den första (primära) nyckeln måste alltid vara en nyckel som kan användas\n"
-"för att skapa signaturer. Detta är anledningen till att den ElGamal-variant\n"
-"som bara krypterar inte är tillgänglig i denna meny"
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Trots att dessa nycklar är definierade i RFC2440 är det inte rekommenderat\n"
-"att använda dem eftersom de inte stöds i alla program och signaturer\n"
-"skapade med dem är stora och mycket långsamma att verifiera."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Ange storleken på nyckeln"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Svara \"ja\" eller \"nej\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Ange värdet som krävs som det visas vid prompten.\n"
-"Det är möjligt att ange ett ISO-datum (ÅÅÅÅ-MM-DD) men du kommer\n"
-"inte att få något vettigt felmeddelande - istället kommer systemet\n"
-"att försöka tolka det angivna värdet som ett intervall."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Ange namnet på nyckelns ägare"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "ange en epostadress. Detta är valfritt men rekommenderas varmt"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Ange en valfri kommentar"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"N för att ändra namnet.\n"
-"C för att ändra kommentaren.\n"
-"E för att ändra epostadressen.\n"
-"O för att fortsätta med nyckelgenerering.\n"
-"Q för att avsluta nyckelgenereringen."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Svara \"ja\" (eller bara \"j\") om du vill generera denna undernyckel."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-
-# felstavat original
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Svara \"ja\" om du vill signera ALLA användaridentiteter"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Svara \"ja\" om du verkligen vill ta bort denna användaridentitet.\n"
-"Alla certifikat kommer att gå förlorade!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Svara \"ja\" om du vill ta bort denna undernyckel"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Detta är en giltig signatur på nyckeln. Normalt sett vill du inte\n"
-"ta bort denna signatur eftersom den kan vara viktig för att skapa\n"
-"en tillitskoppling till nyckeln eller en annan nyckel som är\n"
-"certifierad av denna nyckel."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Denna signatur kan inte verifieras eftersom du inte har den\n"
-"motsvarande nyckeln. Du bör vänta med att ta bort den tills du\n"
-"vet vilken nyckel som användes eftersom den nyckeln kanske upprättar\n"
-"en tillitskoppling genom en annan redan certifierad nyckel."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr ""
-"Denna signatur är inte giltig. Det är rimligt att ta bort den från\n"
-"din nyckelring."
-
-# borde inge GnuPG bytas ut mot gpg eller ännu bättre %s?
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Detta är en signatur som knyter användaridentiteten till denna nyckel.\n"
-"Det är oftast inte en bra idé att ta bort en sådan signatur. Till\n"
-"och med kan det bli så att GnuPG kanske inte kan använda denna nyckel\n"
-"mer. Så gör bara detta om denna självsignatur av någon anledning är\n"
-"ogiltig och det finns en andra signatur som tillgänglig."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-
-# ej klar, eller?
-#: g10/helptext.c:244
-#, fuzzy
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr ""
-"Ange en lösenordsfras. Detta är en hemlig mening\n"
-"[hjälptexten ej färdigställd]"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Reptera lösenordsfrasen, så du är säker på vad du skrev in."
-
-# # felstavat/ologiskt original
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Ange namnet på den fil signaturen gäller"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Svara \"ja\" om det du vill skriva över filen"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Ange ett nytt filnamn. Om du bara trycker RETUR kommer standarfilnamnet\n"
-"(som anges i hakparenteser) att användas."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Du borde ange en anledning till certifikationen. Beroende på sammanhanget\n"
-"har du möjligheten att välja från följande lista:\n"
-" \"Nyckeln har tappat sin säkerhet\"\n"
-" Använd denna om du har anledning att tro att icke auktoriserade "
-"personer\n"
-" har fått tillgång till din hemliga nyckel.\n"
-" \"Nyckeln har ersatts\"\n"
-" Använd denna om du har ersatt denna nyckel med en nyare.\n"
-" \"Nyckeln används inte längre\"\n"
-" Använd denna om du har pensionerat denna nyckel.\n"
-" \"Användaridentiteten är inte längre giltig\"\n"
-" Använd denna för att visa att denna användaridentitet inte längre\n"
-" skall användas. Detta används normalt för att visa att en epostadress\n"
-" är ogiltig.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Om du vill kan du ange en text som beskriver varför du utfärdar\n"
-"detta återkallelsecertifikat. Försök att hålla texten kort och koncis.\n"
-"En tom rad avslutar texten.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "Det finns ingen hjälp tillgänglig"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "Det finns ingen hjälp tillgänglig för \"%s\""
-
-#: g10/keydb.c:178
-#, fuzzy, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n"
-
-#: g10/keydb.c:185
-#, fuzzy, c-format
-msgid "keyring `%s' created\n"
-msgstr "%s: nyckelring skapad\n"
-
-#: g10/keydb.c:575
-#, fuzzy, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "%s: misslyckades med att skapa hash-tabell: %s\n"
-
-# märkligt felmeddelande, kolla upp
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "VARNING: det finns 2 filer med konfidentiell information.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s är den oförändrade\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s är den nya\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Lös detta potentiella säkerhetsproblem\n"
-
-#: g10/keyring.c:1346
-#, fuzzy, c-format
-msgid "checking keyring `%s'\n"
-msgstr "kan inte låsa nyckelringen \"%s\": %s\n"
-
-#: g10/keyring.c:1377
-#, fuzzy, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "har behandlat %lu nycklar hittills\n"
-
-#: g10/keyring.c:1388
-#, fuzzy, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "räkna upp nycklar och signaturer"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: nyckelring skapad\n"
-
-# GnuPG borde väl ersättas med %s?
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "du måste starta om GnuPG, så att den nya inställningsfilen kan läsas\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr "Fingeravtryck:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Fingeravtryck:"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|NAMN=VÄRDE|använd detta sätt för att beskriva data"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr ""
-#~ "det första tecknet i ett notationsnamn måste vara en bokstav eller\n"
-#~ "ett understrykningstecken (_)\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr "punkter i ett notationsnamn måste vara omgivna av andra tecken\n"
-
-#, fuzzy
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Är du säker på att du vill ha denna nyckelstorlek? "
-
-#, fuzzy
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr "Är du säker på att du vill ha denna nyckelstorlek? "
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Vill du verkligen signera? "
-
-#~ msgid "too many random bits requested; the limit is %d\n"
-#~ msgstr "för många slumpmässiga bitar efterfrågades; maximalt antal är %d\n"
-
-#~ msgid "|[NAMES]|check the trust database"
-#~ msgstr "|[NAMN]|kontrollera tillitsdatabasen"
-
-#~ msgid "--delete-secret-key user-id"
-#~ msgstr "--delete-secret-key användaridentitet"
-
-#~ msgid "--delete-key user-id"
-#~ msgstr "--delete-key användaridentitet"
-
-#~ msgid "--delete-secret-and-public-key user-id"
-#~ msgstr "--delete-secret-and-public-key användaridentitet"
-
-#~ msgid "For info see http://www.gnupg.org"
-#~ msgstr "För information se http://www.gnupg.org/"
-
-# värdena står för s = show me more info, m = back to menu, q = quit
-# hur skall sådant internationaliseras på ett bra sätt?
-#~ msgid "sSmMqQ"
-#~ msgstr "sSmMqQ"
-
-#~ msgid ""
-#~ "Could not find a valid trust path to the key. Let's see whether we\n"
-#~ "can assign some missing owner trust values.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Kunde inte hitta någon giltig tillitsväg till nyckeln. Låt oss se om vi "
-#~ "kan\n"
-#~ "tilldela några av de ägartillitsvärden som saknas\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No path leading to one of our keys found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "En av de funna nycklarna saknar tillitsväg.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No certificates with undefined trust found.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Hittade inga certifikat med odefinierat tillitvärde\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "No trust values changed.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Inga tillitsvärden ändrade.\n"
-#~ "\n"
-
-#~ msgid "%08lX: no info to calculate a trust probability\n"
-#~ msgstr ""
-#~ "%08lX: det finns ingen information för att beräkna ett tillitvärde\n"
-
-#~ msgid "Enter the user ID: "
-#~ msgstr "Ange användaridentiteten: "
-
-#~ msgid "skipped: public key already set with --encrypt-to\n"
-#~ msgstr "hoppade över: publik nyckel är redan angiven med --encrypt-to\n"
-
-#~ msgid "%s: error checking key: %s\n"
-#~ msgstr "%s: fel vid kontroll av nyckeln: %s\n"
-
-#~ msgid "Do you really want to create a sign and encrypt key? "
-#~ msgstr "Vill du verkligen skapa en nyckel för signering och kryptering? "
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Behöver du verkligen en så stor nyckelstorlek? "
-
-#~ msgid "%s: user not found: %s\n"
-#~ msgstr "%s: hittade inte användaren: %s\n"
-
-#~ msgid "certificate read problem: %s\n"
-#~ msgstr "fel vid läsning av certifikat: %s\n"
-
-#~ msgid "too many entries in unk cache - disabled\n"
-#~ msgstr "för många poster i unk-cachen - inaktiverad\n"
-
-#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
-#~ msgstr ""
-#~ "den hemliga nyckeln %08lX importerades inte (använd %s för att tillåta)\n"
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "nyckel %08lX: vår kopia har ingen självsignatur\n"
-
-#~ msgid "%s: user not found\n"
-#~ msgstr "%s: hittade inte användaren\n"
-
-#~ msgid "update of trustdb failed: %s\n"
-#~ msgstr "uppdateringen av tillitsdatabasen misslyckades: %s\n"
-
-#~ msgid "no keyserver known (use option --keyserver)\n"
-#~ msgstr "känner inte till någon nyckelserver (använd flaggan --keyserver)\n"
-
-#~ msgid "%s: not a valid key ID\n"
-#~ msgstr "%s: ogiltig nyckelidentitet\n"
-
-#~ msgid "assuming bad MDC due to an unknown critical bit\n"
-#~ msgstr "antar att MDC är felaktig eftersom en okänd kritisk bit är satt\n"
-
-# LID betyder local id och är serienumret i den lokala databasen
-# för en given nyckel
-#~ msgid "error reading dir record for LID %lu: %s\n"
-#~ msgstr "fel vid läsning av katalogpost för lokalt id %lu: %s\n"
-
-#~ msgid "lid %lu: expected dir record, got type %d\n"
-#~ msgstr "lokalt id %lu: väntade en katalogpost, fick en post av typen %d\n"
-
-#~ msgid "no primary key for LID %lu\n"
-#~ msgstr "ingen primär nyckel för lokalt id %lu\n"
-
-#~ msgid "error reading primary key for LID %lu: %s\n"
-#~ msgstr "fel vid läsning av primär nyckel för lokalt id %lu: %s\n"
-
-#~ msgid "get_dir_record: search_record failed: %s\n"
-#~ msgstr "get_dir_record: search_record misslyckades: %s\n"
-
-#~ msgid "key %08lX: query record failed\n"
-#~ msgstr "nyckel %08lX: uppslagning av post misslyckades\n"
-
-#~ msgid "key %08lX: already in trusted key table\n"
-#~ msgstr "nyckel %08lX: finns redan i tabellen över pålitliga nycklar\n"
-
-#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
-#~ msgstr "OBSERVERA: den hemliga nyckeln %08lX är INTE skyddad.\n"
-
-#~ msgid "key %08lX: secret and public key don't match\n"
-#~ msgstr "nyckel %08lX: hemlig och publik nyckel stämmer inte överens\n"
-
-#~ msgid "enumerate secret keys failed: %s\n"
-#~ msgstr "numrering av hemliga nycklar misslyckades: %s\n"
-
-#~ msgid "key %08lX.%lu: Good subkey binding\n"
-#~ msgstr "nyckel: %08lX.%lu: Korrekt bindning till undernyckel\n"
-
-#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
-#~ msgstr "nyckel %08lX.%lu: Felaktig bindning till undernyckel: %s\n"
-
-#~ msgid "key %08lX.%lu: Valid key revocation\n"
-#~ msgstr "nyckel %08lX.%lu: Giltig återkallelse av nyckel\n"
-
-#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
-#~ msgstr "nyckel %08lX.%lu: Felaktig återkallelse av nyckel: %s\n"
-
-#~ msgid "Good self-signature"
-#~ msgstr "Korrekt självsignatur"
-
-#~ msgid "Invalid self-signature"
-#~ msgstr "Felaktig självsignatur"
-
-# detta verkar mycket märkligt. Någon borde kanske få en förklaring från
-# gnupg-utvecklarna?
-#~ msgid "Valid user ID revocation skipped due to a newer self signature"
-#~ msgstr ""
-#~ "Hoppade över en giltig återkallelse av användaridentiteten på\n"
-#~ "grund av en nyare självsignatur"
-
-#~ msgid "Valid user ID revocation"
-#~ msgstr "Giltig återkallelse av användaridentitet"
-
-#~ msgid "Invalid user ID revocation"
-#~ msgstr "Ogiltig återkallelse av användaridentitet"
-
-#~ msgid "Valid certificate revocation"
-#~ msgstr "Giltig återkallelse av certifikat"
-
-#~ msgid "Good certificate"
-#~ msgstr "Korrekt certifikat"
-
-#~ msgid "Invalid certificate revocation"
-#~ msgstr "Ogiltig återkallelse av certifikat "
-
-#~ msgid "Invalid certificate"
-#~ msgstr "Ogiltigt certifikat"
-
-#~ msgid "sig record %lu[%d] points to wrong record.\n"
-#~ msgstr "signaturpost %lu[%d] pekar mot fel post.\n"
-
-#~ msgid "duplicated certificate - deleted"
-#~ msgstr "dubblett av certifikat - borttaget"
-
-#~ msgid "tdbio_search_dir failed: %s\n"
-#~ msgstr "tdbio_search_dir misslyckades: %s\n"
-
-#~ msgid "lid ?: insert failed: %s\n"
-#~ msgstr "lokalt id ?: tillägg misslyckades: %s\n"
-
-#~ msgid "lid %lu: insert failed: %s\n"
-#~ msgstr "lokalt id %lu: tillägg misslyckades: %s\n"
-
-#~ msgid "lid %lu: inserted\n"
-#~ msgstr "lokalt id %lu: lades till\n"
-
-#~ msgid "error reading dir record: %s\n"
-#~ msgstr "fel vid läsning av katalogpost: %s\n"
-
-#~ msgid "\t%lu keys with errors\n"
-#~ msgstr "\t%lu nycklar med fel\n"
-
-#~ msgid "\t%lu keys inserted\n"
-#~ msgstr "\t%lu nycklar tillagda\n"
-
-#~ msgid "lid %lu: dir record w/o key - skipped\n"
-#~ msgstr "lokalt id %lu: katalogpost utan nyckel - hoppade över\n"
-
-#~ msgid "\t%lu due to new pubkeys\n"
-#~ msgstr "\t%lu på grund av nya publika nycklar\n"
-
-#~ msgid "\t%lu keys skipped\n"
-#~ msgstr "\t%lu nycklar hoppades över\n"
-
-#~ msgid "\t%lu keys updated\n"
-#~ msgstr "\t%lu nycklar uppdaterades\n"
-
-#~ msgid "Ooops, no keys\n"
-#~ msgstr "Ooops, inga nycklar\n"
-
-#~ msgid "Ooops, no user IDs\n"
-#~ msgstr "Ooops, inga användaridentiteter\n"
-
-#~ msgid "check_trust: search dir record failed: %s\n"
-#~ msgstr "check_trust: sökning av katalogpost misslyckades: %s\n"
-
-#~ msgid "key %08lX: insert trust record failed: %s\n"
-#~ msgstr "nyckel %08lX: tillägg av tillitspost misslyckades: %s\n"
-
-#~ msgid "key %08lX.%lu: inserted into trustdb\n"
-#~ msgstr "nyckel %08lX.%lu: lades till i tillitsdatabasen\n"
-
-#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
-#~ msgstr ""
-#~ "nyckel %08lX.%lu: skapad i framtiden (problemet är relaterat till\n"
-#~ "tidsresande eller en felställd klocka)\n"
-
-#~ msgid "key %08lX.%lu: expired at %s\n"
-#~ msgstr "nyckel %08lX.%lu: gick ut %s\n"
-
-#~ msgid "key %08lX.%lu: trust check failed: %s\n"
-#~ msgstr "nyckel %08lX.%lu: tillitskontroll misslyckades: %s\n"
-
-#~ msgid "problem finding '%s' in trustdb: %s\n"
-#~ msgstr "problem att hitta \"%s\" i tillitsdatabasen: %s\n"
-
-#~ msgid "user '%s' not in trustdb - inserting\n"
-#~ msgstr "användaren \"%s\" finns inte tillitsdatabasen - lägger till\n"
-
-#~ msgid "failed to put '%s' into trustdb: %s\n"
-#~ msgstr "misslyckades med att placera \"%s\" i tillitsdatabasen: %s\n"
-
-#~ msgid "WARNING: can't yet handle long pref records\n"
-#~ msgstr "VARNING: kan ännu inte hantera långa inställningsposter\n"
-
-#~ msgid "%s: can't create keyring: %s\n"
-#~ msgstr "%s: kan inte skapa nyckelring: %s\n"
diff --git a/po/tr.po b/po/tr.po
deleted file mode 100644
index 2650f9a32..000000000
--- a/po/tr.po
+++ /dev/null
@@ -1,4658 +0,0 @@
-# Turkish translations for GnuPG messages.
-# Copyright (C) 2002 Free Software Foundation, Inc.
-# Nilgün Belma Bugüner <nilgun@users.sourceforge.net>, 2001, 2002.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gnupg 1.2.0\n"
-"POT-Creation-Date: 2002-09-11 15:11+0200\n"
-"PO-Revision-Date: 2002-09-11 22:09+0300\n"
-"Last-Translator: Nilgün Belma Bugüner <nilgun@superonline.com>\n"
-"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-9\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 0.9.6\n"
-
-#: util/secmem.c:88
-msgid "WARNING: using insecure memory!\n"
-msgstr "UYARI: kullanýlan bellek güvenli deðil!\n"
-
-#: util/secmem.c:89
-msgid "please see http://www.gnupg.org/faq.html for more information\n"
-msgstr ""
-"Daha geniþ bilgi edinmek için http://www.gnupg.org/faq.html adresine "
-"bakýnýz\n"
-
-#: util/secmem.c:326
-msgid "operation is not possible without initialized secure memory\n"
-msgstr "güvenli bellek hazýrlanmadan iþlem yapmak mümkün deðil\n"
-
-#: util/secmem.c:327
-msgid "(you may have used the wrong program for this task)\n"
-msgstr "(bu görev için yanlýþ program kullanmýþ olabilirsiniz)\n"
-
-#: util/miscutil.c:296 util/miscutil.c:331
-msgid "yes"
-msgstr "evet"
-
-#: util/miscutil.c:297 util/miscutil.c:334
-msgid "yY"
-msgstr "eE"
-
-#: util/miscutil.c:298 util/miscutil.c:332
-msgid "no"
-msgstr "hayýr"
-
-#: util/miscutil.c:299 util/miscutil.c:335
-msgid "nN"
-msgstr "hH"
-
-#: g10/keyedit.c:901 util/miscutil.c:333
-msgid "quit"
-msgstr "çýkýþ"
-
-#: util/miscutil.c:336
-msgid "qQ"
-msgstr "çÇ"
-
-#: util/errors.c:54
-msgid "general error"
-msgstr "genel hata"
-
-#: util/errors.c:55
-msgid "unknown packet type"
-msgstr "bilinmeyen paket tipi"
-
-#: util/errors.c:56
-msgid "unknown version"
-msgstr "bilinmeyen sürüm"
-
-#: util/errors.c:57
-msgid "unknown pubkey algorithm"
-msgstr "bilinmeyen genel anahtar algoritmasý"
-
-#: util/errors.c:58
-msgid "unknown digest algorithm"
-msgstr "bilinmeyen özümleme algoritmasý"
-
-#: util/errors.c:59
-msgid "bad public key"
-msgstr "genel anahtar hatalý"
-
-#: util/errors.c:60
-msgid "bad secret key"
-msgstr "gizli anahtar hatalý"
-
-#: util/errors.c:61
-msgid "bad signature"
-msgstr "imza hatalý"
-
-#: util/errors.c:62
-msgid "checksum error"
-msgstr "\"checksum\" hatasý"
-
-#: util/errors.c:63
-msgid "bad passphrase"
-msgstr "anahtar parolasý hatalý"
-
-#: util/errors.c:64
-msgid "public key not found"
-msgstr "genel anahtar bulunamadý"
-
-#: util/errors.c:65
-msgid "unknown cipher algorithm"
-msgstr "bilinmeyen þifre algoritmasý"
-
-#: util/errors.c:66
-msgid "can't open the keyring"
-msgstr "anahtar zinciri açýlamadý"
-
-#: util/errors.c:67
-msgid "invalid packet"
-msgstr "geçersiz paket"
-
-#: util/errors.c:68
-msgid "invalid armor"
-msgstr "geçersiz zýrh"
-
-#: util/errors.c:69
-msgid "no such user id"
-msgstr "böyle bir kullanýcý kimliði yok"
-
-#: util/errors.c:70
-msgid "secret key not available"
-msgstr "gizli anahtar kullanýþsýz"
-
-#: util/errors.c:71
-msgid "wrong secret key used"
-msgstr "yanlýþ gizli anahtar kullanýlmýþ"
-
-#: util/errors.c:72
-msgid "not supported"
-msgstr "desteklenmiyor"
-
-#: util/errors.c:73
-msgid "bad key"
-msgstr "anahtar hatalý"
-
-#: util/errors.c:74
-msgid "file read error"
-msgstr "dosya okuma hatasý"
-
-#: util/errors.c:75
-msgid "file write error"
-msgstr "dosya yazma hatasý"
-
-#: util/errors.c:76
-msgid "unknown compress algorithm"
-msgstr "bilinmeyen sýkýþtýrma algoritmasý"
-
-#: util/errors.c:77
-msgid "file open error"
-msgstr "dosya açma hatasý"
-
-#: util/errors.c:78
-msgid "file create error"
-msgstr "dosya oluþturma hatasý"
-
-#: util/errors.c:79
-msgid "invalid passphrase"
-msgstr "anahtar parolasý geçersiz"
-
-#: util/errors.c:80
-msgid "unimplemented pubkey algorithm"
-msgstr "tamamlanmamýþ genel anahtar algoritmasý"
-
-#: util/errors.c:81
-msgid "unimplemented cipher algorithm"
-msgstr "tamamlanmamýþ þifre algoritmasý"
-
-#: util/errors.c:82
-msgid "unknown signature class"
-msgstr "bilinmeyen imza sýnýfý"
-
-#: util/errors.c:83
-msgid "trust database error"
-msgstr "güvence veritabaný hatasý"
-
-#: util/errors.c:84
-msgid "bad MPI"
-msgstr "MPI hatalý"
-
-#: util/errors.c:85
-msgid "resource limit"
-msgstr "iç kaynak sýnýrý"
-
-#: util/errors.c:86
-msgid "invalid keyring"
-msgstr "anahtar zinciri geçersiz"
-
-#: util/errors.c:87
-msgid "bad certificate"
-msgstr "sertifika hatalý"
-
-#: util/errors.c:88
-msgid "malformed user id"
-msgstr "kullanýcý kimliði bozuk"
-
-#: util/errors.c:89
-msgid "file close error"
-msgstr "dosya kapama hatasý"
-
-#: util/errors.c:90
-msgid "file rename error"
-msgstr "dosya isim deðiþtirme hatasý"
-
-#: util/errors.c:91
-msgid "file delete error"
-msgstr "dosya silme hatasý"
-
-#: util/errors.c:92
-msgid "unexpected data"
-msgstr "beklenmeyen veri"
-
-#: util/errors.c:93
-msgid "timestamp conflict"
-msgstr "zaman damgasý çeliþkili"
-
-#: util/errors.c:94
-msgid "unusable pubkey algorithm"
-msgstr "genel anahtar algoritmasý kullanýþsýz"
-
-#: util/errors.c:95
-msgid "file exists"
-msgstr "dosya mevcut"
-
-#: util/errors.c:96
-msgid "weak key"
-msgstr "anahtar zayýf"
-
-#: util/errors.c:97
-msgid "invalid argument"
-msgstr "geçersiz argüman"
-
-#: util/errors.c:98
-msgid "bad URI"
-msgstr "URI hatalý"
-
-#: util/errors.c:99
-msgid "unsupported URI"
-msgstr "desteklenmeyen URI"
-
-#: util/errors.c:100
-msgid "network error"
-msgstr "að hatasý"
-
-#: util/errors.c:102
-msgid "not encrypted"
-msgstr "þifrelenemedi"
-
-#: util/errors.c:103
-msgid "not processed"
-msgstr "iþlenemedi"
-
-#. the key cannot be used for a specific usage
-#: util/errors.c:105
-msgid "unusable public key"
-msgstr "genel anahtar kullanýmdýþý"
-
-#: util/errors.c:106
-msgid "unusable secret key"
-msgstr "gizli anahtar kullanýmdýþý"
-
-#: util/errors.c:107
-msgid "keyserver error"
-msgstr "anahtar sunucusu hatasý"
-
-#: util/logger.c:249
-#, c-format
-msgid "... this is a bug (%s:%d:%s)\n"
-msgstr "... bu bir yazýlým hatasý (%s:%d:%s)\n"
-
-#: util/logger.c:255
-#, c-format
-msgid "you found a bug ... (%s:%d)\n"
-msgstr "bir yazýlým hatasý buldunuz ... (%s:%d)\n"
-
-#: cipher/random.c:157
-msgid "no entropy gathering module detected\n"
-msgstr "rasgele bayt elde etme modülü bulunamadý\n"
-
-#: cipher/random.c:381 g10/import.c:195 g10/keygen.c:1809
-#, c-format
-msgid "can't open `%s': %s\n"
-msgstr "`%s' açýlamýyor: %s\n"
-
-#: cipher/random.c:385
-#, c-format
-msgid "can't stat `%s': %s\n"
-msgstr "`%s' durumlanamýyor: %s\n"
-
-#: cipher/random.c:390
-#, c-format
-msgid "`%s' is not a regular file - ignored\n"
-msgstr "`%s' düzenli bir dosya deðil - görülmedi\n"
-
-#: cipher/random.c:395
-msgid "note: random_seed file is empty\n"
-msgstr "not: \"random_seed\" dosyasý boþ\n"
-
-#: cipher/random.c:401
-msgid "WARNING: invalid size of random_seed file - not used\n"
-msgstr "UYARI: random_seed dosyasýnýn boyu hatalý - kullanýlmadý\n"
-
-#: cipher/random.c:409
-#, c-format
-msgid "can't read `%s': %s\n"
-msgstr "\"%s\" okunamýyor: %s\n"
-
-#: cipher/random.c:447
-msgid "note: random_seed file not updated\n"
-msgstr "bilgi: \"random_seed\" dosyasý güncel deðil\n"
-
-#: cipher/random.c:467
-#, c-format
-msgid "can't create `%s': %s\n"
-msgstr "\"%s\" oluþturulamýyor: %s\n"
-
-#: cipher/random.c:474
-#, c-format
-msgid "can't write `%s': %s\n"
-msgstr "\"%s\" yazýlamýyor: %s\n"
-
-#: cipher/random.c:477
-#, c-format
-msgid "can't close `%s': %s\n"
-msgstr "\"%s\" kapatýlamýyor: %s\n"
-
-#: cipher/random.c:723
-msgid "WARNING: using insecure random number generator!!\n"
-msgstr "UYARI: kullanýlan rasgele sayý üreteci güvenli deðil!!\n"
-
-#: cipher/random.c:724
-msgid ""
-"The random number generator is only a kludge to let\n"
-"it run - it is in no way a strong RNG!\n"
-"\n"
-"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-"\n"
-msgstr ""
-"Rasgele sayý üreteci kendi halinde çalýþan\n"
-"bir kukla - güvenilir bir RSÜ deðil!\n"
-"\n"
-"BU PROGRAMLA ÜRETÝLMÝÞ HÝÇBÝR VERÝYÝ KULLANMAYIN!!\n"
-"\n"
-
-#: cipher/rndlinux.c:134
-#, c-format
-msgid ""
-"\n"
-"Not enough random bytes available. Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Rasgele üretilen baytlar yetersiz. Lütfen bazý iþlemler yaparak\n"
-"daha fazla rasgele bayt toplayabilmesi için iþletim sistemine\n"
-"yardýmcý olun! (%d bayt daha gerekiyor)\n"
-
-#: g10/g10.c:307
-msgid ""
-"@Commands:\n"
-" "
-msgstr ""
-"@Komutlar:\n"
-" "
-
-#: g10/g10.c:309
-msgid "|[file]|make a signature"
-msgstr "|[dosya]|bir imza yapar"
-
-#: g10/g10.c:310
-msgid "|[file]|make a clear text signature"
-msgstr "|[dosya]|açýkça okunabilen bir imza yapar"
-
-#: g10/g10.c:311
-msgid "make a detached signature"
-msgstr "baðýmsýz bir imza yapar"
-
-#: g10/g10.c:312
-msgid "encrypt data"
-msgstr "veriyi þifreler"
-
-#: g10/g10.c:313
-msgid "|[files]|encrypt files"
-msgstr "|[dosyalar]|dosyalar þifrelenir"
-
-#: g10/g10.c:314
-msgid "encryption only with symmetric cipher"
-msgstr "sadece simetrik þifre ile þifreler"
-
-#: g10/g10.c:315
-msgid "store only"
-msgstr "sadece saklar"
-
-#: g10/g10.c:316
-msgid "decrypt data (default)"
-msgstr "veri þifresini açar (öntanýmlý)"
-
-#: g10/g10.c:317
-msgid "|[files]|decrypt files"
-msgstr "|[dosyalar]|dosyalarýn þifresi açýlýr"
-
-#: g10/g10.c:318
-msgid "verify a signature"
-msgstr "bir imzayý doðrular"
-
-#: g10/g10.c:320
-msgid "list keys"
-msgstr "anahtarlarý listeler"
-
-#: g10/g10.c:322
-msgid "list keys and signatures"
-msgstr "anahtarlarý ve imzalarý listeler"
-
-#: g10/g10.c:323
-msgid "check key signatures"
-msgstr "anahtar imzalarýný kontrol eder"
-
-#: g10/g10.c:324
-msgid "list keys and fingerprints"
-msgstr "anahtarlarý ve parmak izlerini listeler"
-
-#: g10/g10.c:325
-msgid "list secret keys"
-msgstr "gizli anahtarlarý listeler"
-
-#: g10/g10.c:326
-msgid "generate a new key pair"
-msgstr "yeni bir anahtar çifti üretir"
-
-#: g10/g10.c:327
-msgid "remove keys from the public keyring"
-msgstr "anahtarlarý genel anahtar zincirinden siler"
-
-#: g10/g10.c:329
-msgid "remove keys from the secret keyring"
-msgstr "anahtarlarý gizli anahtar zincirinden siler"
-
-#: g10/g10.c:330
-msgid "sign a key"
-msgstr "bir anahtarý imzalar"
-
-#: g10/g10.c:331
-msgid "sign a key locally"
-msgstr "bir anahtarý yerel olarak imzalar"
-
-#: g10/g10.c:332
-msgid "sign a key non-revocably"
-msgstr "bir anahtarý iptal edilemez olarak imzalar"
-
-#: g10/g10.c:333
-msgid "sign a key locally and non-revocably"
-msgstr "bir anahtarý yerel ve iptal edilemez olarak imzalar"
-
-#: g10/g10.c:334
-msgid "sign or edit a key"
-msgstr "bir anahtarý düzenler ve imzalar"
-
-#: g10/g10.c:335
-msgid "generate a revocation certificate"
-msgstr "bir yürürlükten kaldýrma sertifikasý üretir"
-
-#: g10/g10.c:337
-msgid "export keys"
-msgstr "anahtarlarý gönderir"
-
-#: g10/g10.c:338
-msgid "export keys to a key server"
-msgstr "anahtarlarý bir anahtar sunucusuna gönderir"
-
-#: g10/g10.c:339
-msgid "import keys from a key server"
-msgstr "anahtarlarý bir anahtar sunucusundan indirir"
-
-#: g10/g10.c:341
-msgid "search for keys on a key server"
-msgstr "bir anahtar sunucusunda anahtarlarý arar"
-
-#: g10/g10.c:343
-msgid "update all keys from a keyserver"
-msgstr "anahtarlarý bir anahtar sunucusundan günceller"
-
-#: g10/g10.c:347
-msgid "import/merge keys"
-msgstr "anahtarlarý indirir/katýþtýrýr"
-
-#: g10/g10.c:349
-msgid "list only the sequence of packets"
-msgstr "sadece paketlerin silsilesini listeler"
-
-#: g10/g10.c:351
-msgid "export the ownertrust values"
-msgstr "sahibiningüvencesi deðerlerini gönderir"
-
-#: g10/g10.c:353
-msgid "import ownertrust values"
-msgstr "sahibiningüvencesi deðerlerini indirir"
-
-#: g10/g10.c:355
-msgid "update the trust database"
-msgstr "güvence veritabanýný günceller"
-
-#: g10/g10.c:357
-msgid "unattended trust database update"
-msgstr "bakýmsýz güvence veritabanýnýn güncellemesi"
-
-#: g10/g10.c:358
-msgid "fix a corrupted trust database"
-msgstr "bozulan güvence veritabanýný onarýr"
-
-#: g10/g10.c:359
-msgid "De-Armor a file or stdin"
-msgstr "Bir dosya veya standart girdinin zýrhýný kaldýrýr"
-
-#: g10/g10.c:361
-msgid "En-Armor a file or stdin"
-msgstr "Bir dosya veya standart girdiyi zýrhlar"
-
-#: g10/g10.c:363
-msgid "|algo [files]|print message digests"
-msgstr "|algo [dosyalar]|ileti özümlemelerini gösterir"
-
-#: g10/g10.c:367
-msgid ""
-"@\n"
-"Options:\n"
-" "
-msgstr ""
-"@\n"
-"Seçenekler:\n"
-" "
-
-#: g10/g10.c:369
-msgid "create ascii armored output"
-msgstr "ascii zýrhlý çýktý oluþturur"
-
-#: g10/g10.c:371
-msgid "|NAME|encrypt for NAME"
-msgstr "|ÝSÝM|ÝSÝM için þifreleme yapar"
-
-#: g10/g10.c:374
-msgid "|NAME|use NAME as default recipient"
-msgstr "|ÝSÝM|öntanýmlý alýcý olarak ÝSÝM kullanýlýr"
-
-#: g10/g10.c:376
-msgid "use the default key as default recipient"
-msgstr "öntanýmlý alýcý olarak öntanýmlý anahtar kullanýlýr"
-
-#: g10/g10.c:382
-msgid "use this user-id to sign or decrypt"
-msgstr "imzalamak ya da þifre çözmek için bu kullanýcý kimliði kullanýlýr"
-
-#: g10/g10.c:383
-msgid "|N|set compress level N (0 disables)"
-msgstr "|N|sýkýþtýrma seviyesi N olarak ayarlanýr (0 ise sýkýþtýrma yapýlmaz)"
-
-#: g10/g10.c:385
-msgid "use canonical text mode"
-msgstr "kurallý metin kipini kullanýr"
-
-#: g10/g10.c:392
-msgid "use as output file"
-msgstr "çýktý dosyasý olarak kullanýlýr"
-
-#: g10/g10.c:393
-msgid "verbose"
-msgstr "çok detaylý"
-
-#: g10/g10.c:394
-msgid "be somewhat more quiet"
-msgstr "daha az detaylý"
-
-#: g10/g10.c:395
-msgid "don't use the terminal at all"
-msgstr "terminali hiç kullanma"
-
-#: g10/g10.c:396
-msgid "force v3 signatures"
-msgstr "v3 imzalarýna zorlar"
-
-#: g10/g10.c:397
-msgid "do not force v3 signatures"
-msgstr "v3 imzalara zorlamaz"
-
-#: g10/g10.c:398
-msgid "force v4 key signatures"
-msgstr "v4 imzalara zorlar"
-
-#: g10/g10.c:399
-msgid "do not force v4 key signatures"
-msgstr "v4 imzalara zorlamaz"
-
-#: g10/g10.c:400
-msgid "always use a MDC for encryption"
-msgstr "þifreleme için daima bir MDC kullanýlýr"
-
-#: g10/g10.c:402
-msgid "never use a MDC for encryption"
-msgstr "þifreleme için asla bir MDC kullanýlmaz"
-
-#: g10/g10.c:404
-msgid "do not make any changes"
-msgstr "hiçbir deðiþiklik yapmaz"
-
-#: g10/g10.c:405
-msgid "prompt before overwriting"
-msgstr "üzerine yazmadan önce sorar"
-
-#: g10/g10.c:406
-msgid "use the gpg-agent"
-msgstr "gpg-agent kullan"
-
-#: g10/g10.c:409
-msgid "batch mode: never ask"
-msgstr "önceden belirlenmiþ iþlemler kipi: hiç sormaz"
-
-#: g10/g10.c:410
-msgid "assume yes on most questions"
-msgstr "sorularýn çoðunda cevap evet farzedilir"
-
-#: g10/g10.c:411
-msgid "assume no on most questions"
-msgstr "sorularýn çoðunda cevap hayýr farzedilir"
-
-#: g10/g10.c:412
-msgid "add this keyring to the list of keyrings"
-msgstr "bu anahtar zincirini anahtar zincirleri listesine ekler"
-
-#: g10/g10.c:413
-msgid "add this secret keyring to the list"
-msgstr "bu gizli anahtar zincirini listeye ekler"
-
-#: g10/g10.c:414
-msgid "show which keyring a listed key is on"
-msgstr "listedeki bir anahtarýn hangi anahtar zincirinde olduðunu gösterir"
-
-#: g10/g10.c:415
-msgid "|NAME|use NAME as default secret key"
-msgstr "|ÝSÝM|öntanýmlý gizli anahtar olarak ÝSÝM kullanýlýr"
-
-#: g10/g10.c:416
-msgid "|HOST|use this keyserver to lookup keys"
-msgstr "|MAKÝNA|anahtarlarý aramak için bu anahtar sunucusu kullanýlýr"
-
-#: g10/g10.c:420
-msgid "|NAME|set terminal charset to NAME"
-msgstr "|ÝSÝM|terminal karakter setini ÝSÝM olarak ayarlar"
-
-#: g10/g10.c:421
-msgid "read options from file"
-msgstr "seçenekleri dosyadan okur"
-
-#: g10/g10.c:425
-msgid "|FD|write status info to this FD"
-msgstr "|FD|durum bilgisini bu FD'ye yazar"
-
-#: g10/g10.c:427
-msgid "|[file]|write status info to file"
-msgstr "|[DOSYA]|durum bilgisini DOSYAya yazar"
-
-#: g10/g10.c:439
-msgid "|KEYID|ultimately trust this key"
-msgstr "|ANHKÝML|bu anahtar son derece güvenli"
-
-#: g10/g10.c:440
-msgid "|FILE|load extension module FILE"
-msgstr "|DOSYA|geniþletme modülü olarak DOSYA yüklenir"
-
-#: g10/g10.c:441
-msgid "emulate the mode described in RFC1991"
-msgstr "RFC1991 de açýklanan kipi uygular"
-
-#: g10/g10.c:442
-msgid "set all packet, cipher and digest options to OpenPGP behavior"
-msgstr "tüm paket, þifre ve özümleme seçeneklerini OpenPGP tarzýnda ayarlar"
-
-#: g10/g10.c:443
-msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-msgstr "tüm paket, þifre ve özümleme seçeneklerini PGP 2.x'e göre ayarlar"
-
-#: g10/g10.c:449
-msgid "|N|use passphrase mode N"
-msgstr "|N|anahtar parolasý kipi olarak N kullanýlýr"
-
-#: g10/g10.c:451
-msgid "|NAME|use message digest algorithm NAME for passphrases"
-msgstr ""
-"|ÝSÝM|anahtar parolalarý için ileti özümleme algoritmasý olarak ÝSÝM "
-"kullanýlýr"
-
-#: g10/g10.c:453
-msgid "|NAME|use cipher algorithm NAME for passphrases"
-msgstr "|ÝSÝM|anahtar parolalarý için þifre algoritmasý olarak ÝSÝM kullanýlýr"
-
-#: g10/g10.c:455
-msgid "|NAME|use cipher algorithm NAME"
-msgstr "|ÝSÝM|þifre algoritmasý olarak ÝSÝM kullanýlýr"
-
-#: g10/g10.c:456
-msgid "|NAME|use message digest algorithm NAME"
-msgstr "|ÝSÝM|özümleme algoritmasý olarak ÝSÝM kullanýlýr"
-
-#: g10/g10.c:458
-msgid "|N|use compress algorithm N"
-msgstr "|N|sýkýþtýrma algoritmasý olarak N kullanýlýr"
-
-#: g10/g10.c:459
-msgid "throw keyid field of encrypted packets"
-msgstr "þifreli paketlerin anahtar-kimlik alanlarýný atar"
-
-#: g10/g10.c:460
-msgid "Show Photo IDs"
-msgstr "Foto kimliklerini gösterir"
-
-#: g10/g10.c:461
-msgid "Don't show Photo IDs"
-msgstr "Foto kimliklerini göstermez"
-
-#: g10/g10.c:462
-msgid "Set command line to view Photo IDs"
-msgstr "Komut satýrýný foto kimliklerini göstermeye ayarlar"
-
-#: g10/g10.c:468
-msgid ""
-"@\n"
-"(See the man page for a complete listing of all commands and options)\n"
-msgstr ""
-"@\n"
-"(Tüm komut ve seçeneklerin komple listesi için man sayfalarýna bakýn)\n"
-
-#: g10/g10.c:471
-msgid ""
-"@\n"
-"Examples:\n"
-"\n"
-" -se -r Bob [file] sign and encrypt for user Bob\n"
-" --clearsign [file] make a clear text signature\n"
-" --detach-sign [file] make a detached signature\n"
-" --list-keys [names] show keys\n"
-" --fingerprint [names] show fingerprints\n"
-msgstr ""
-"@\n"
-"Örnekler:\n"
-"\n"
-" -se -r Ali [dosya] kullanýcý Ali için imzalar ve þifreler\n"
-" --clearsign [dosya] açýkça okunabilir bir imza yapar\n"
-" --detach-sign [dosya] baðýmsýz bir imza yapar\n"
-" --list-keys [isimler] anahtarlarý listeler\n"
-" --fingerprint [isimler] parmak izlerini gösterir\n"
-
-#: g10/g10.c:623
-msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-msgstr "Yazýlým hatalarýný lütfen <gnupg-bugs@gnu.org> adresine bildirin.\n"
-
-#: g10/g10.c:627
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Kullanýmý: gpg [seçenekler] [dosyalar] (yardým için -h)"
-
-#: g10/g10.c:630
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
-msgstr ""
-"Yazýlýþý: gpg [seçenekler] [dosyalar]\n"
-"imzalama, kontrol, þifreleme veya çözme\n"
-"öntanýmlý iþlem girilen veriye baðýmlýdýr\n"
-
-#: g10/g10.c:641
-msgid ""
-"\n"
-"Supported algorithms:\n"
-msgstr ""
-"\n"
-"Desteklenen algoritmalar:\n"
-
-#: g10/g10.c:745
-msgid "usage: gpg [options] "
-msgstr "kullanýmý: gpg [seçenekler] "
-
-#: g10/g10.c:802
-msgid "conflicting commands\n"
-msgstr "çeliþen komutlar\n"
-
-#: g10/g10.c:820
-#, c-format
-msgid "no = sign found in group definition \"%s\"\n"
-msgstr "grup tanýmý \"%s\" içinde = iþareti yok\n"
-
-#: g10/g10.c:983
-#, c-format
-msgid "WARNING: unsafe ownership on %s \"%s\"\n"
-msgstr "UYARI: %s \"%s\" de güvensiz sahiplik\n"
-
-#: g10/g10.c:986
-#, c-format
-msgid "WARNING: unsafe permissions on %s \"%s\"\n"
-msgstr "UYARI: %s \"%s\" de güvensiz izinler\n"
-
-#: g10/g10.c:989
-#, c-format
-msgid "WARNING: unsafe enclosing directory ownership on %s \"%s\"\n"
-msgstr "UYARI: %s \"%s\" de güvensiz iliþtirilen dizin sahipliði\n"
-
-#: g10/g10.c:993
-#, c-format
-msgid "WARNING: unsafe enclosing directory permissions on %s \"%s\"\n"
-msgstr "UYARI: %s \"%s\" de güvensiz iliþtirilen dizin izinleri\n"
-
-#: g10/g10.c:1168
-#, c-format
-msgid "NOTE: old default options file `%s' ignored\n"
-msgstr "BÝLGÝ: eski öntanýmlý seçenekler dosyasý `%s' yoksayýldý\n"
-
-#: g10/g10.c:1204
-#, c-format
-msgid "NOTE: no default option file `%s'\n"
-msgstr "BÝLGÝ: `%s' öntanýmlý seçenek dosyasý yok\n"
-
-#: g10/g10.c:1208
-#, c-format
-msgid "option file `%s': %s\n"
-msgstr "seçenek dosyasý \"%s\": %s\n"
-
-#: g10/g10.c:1215
-#, c-format
-msgid "reading options from `%s'\n"
-msgstr "\"%s\"den seçenekler okunuyor\n"
-
-#: g10/g10.c:1390
-#, c-format
-msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
-msgstr "þifre uzantýsý \"%s\" güvensiz izinlerden dolayý yüklenmedi\n"
-
-#: g10/g10.c:1523
-#, c-format
-msgid "%s is not a valid character set\n"
-msgstr "%s geçerli bir karakter seti deðil\n"
-
-#: g10/g10.c:1541
-msgid "could not parse keyserver URI\n"
-msgstr "anahtar sunucusunun adresi çözümlenemedi\n"
-
-#: g10/g10.c:1550
-#, c-format
-msgid "%s:%d: invalid import options\n"
-msgstr "%s:%d: geçersiz içselleþtirme seçenekleri\n"
-
-#: g10/g10.c:1553
-msgid "invalid import options\n"
-msgstr "içselleþtirme seçenekleri geçersiz\n"
-
-#: g10/g10.c:1560
-#, c-format
-msgid "%s:%d: invalid export options\n"
-msgstr "%s:%d geçersiz dýþsallaþtýrma seçenekleri\n"
-
-#: g10/g10.c:1563
-msgid "invalid export options\n"
-msgstr "dýþsallaþtýrma seçenekleri geçersiz\n"
-
-#: g10/g10.c:1569
-#, c-format
-msgid "unable to set exec-path to %s\n"
-msgstr "çalýþtýrýlabilirlerin patikasý %s yapýlamýyor\n"
-
-#: g10/g10.c:1688
-msgid "WARNING: program may create a core file!\n"
-msgstr "UYARI: program bir \"core\" dosyasý oluþturabilir!\n"
-
-#: g10/g10.c:1692
-#, c-format
-msgid "WARNING: %s overrides %s\n"
-msgstr "UYARI: %s %s'i aþýyor\n"
-
-#: g10/g10.c:1699 g10/g10.c:1710
-#, c-format
-msgid "NOTE: %s is not for normal use!\n"
-msgstr "BÝLGÝ: %s normal kullaným için deðil!\n"
-
-#: g10/g10.c:1701 g10/g10.c:1721
-#, c-format
-msgid "%s not allowed with %s!\n"
-msgstr "%s ile %s birlikte kullanýlmaz!\n"
-
-#: g10/g10.c:1704
-#, c-format
-msgid "%s makes no sense with %s!\n"
-msgstr "%s, %s ile etkisiz olur!\n"
-
-#: g10/g10.c:1731
-msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
-msgstr "--pgp2 kipinde sadece ayrýk veya sade imzalar yapabilirsiniz\n"
-
-#: g10/g10.c:1737
-msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-msgstr "--pgp2 kipinde ayný anda hem imzalama hem de þifreleme yapamazsýnýz\n"
-
-#: g10/g10.c:1743
-msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-msgstr "--pgp2 ile çalýþýrken veri yolu yerine dosyalarý kullanmalýsýnýz.\n"
-
-#: g10/g10.c:1756
-msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-msgstr "--pgp2 kipinde ileti þifrelemesi IDEA þifresi gerektirir\n"
-
-#: g10/encode.c:408 g10/encode.c:458 g10/encode.c:707 g10/g10.c:1770
-#: g10/sign.c:646 g10/sign.c:878
-#, c-format
-msgid "this message may not be usable by %s\n"
-msgstr "bu ileti %s tarafýndan kullanýlamayabilir\n"
-
-#: g10/g10.c:1818 g10/g10.c:1836
-msgid "selected cipher algorithm is invalid\n"
-msgstr "seçilen þifre algoritmasý geçersiz\n"
-
-#: g10/g10.c:1824 g10/g10.c:1842
-msgid "selected digest algorithm is invalid\n"
-msgstr "seçilen özümleme algoritmasý geçersiz\n"
-
-#: g10/g10.c:1830
-msgid "selected certification digest algorithm is invalid\n"
-msgstr "seçilen sertifikalama özümleme algoritmasý geçersiz\n"
-
-#: g10/g10.c:1845
-#, c-format
-msgid "compress algorithm must be in range %d..%d\n"
-msgstr "sýkýþtýrma algoritmasý %d..%d aralýðýnda olmalý\n"
-
-#: g10/g10.c:1847
-msgid "completes-needed must be greater than 0\n"
-msgstr "\"completes-needed\" 0 dan büyük olmalý\n"
-
-#: g10/g10.c:1849
-msgid "marginals-needed must be greater than 1\n"
-msgstr "\"marginals-needed\" 1 den büyük olmalý\n"
-
-#: g10/g10.c:1851
-msgid "max-cert-depth must be in range 1 to 255\n"
-msgstr "\"max-cert-depth\" 1 ile 255 arasýnda olmalý\n"
-
-#: g10/g10.c:1854
-msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
-msgstr "BÝLGÝ: basit S2K kipi (0) kesinlikle tavsiye edilmez\n"
-
-#: g10/g10.c:1858
-msgid "invalid S2K mode; must be 0, 1 or 3\n"
-msgstr "S2K kipi geçersiz; 0, 1 veya 3 olmalý\n"
-
-#: g10/g10.c:1862
-msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
-msgstr "öntanýmlý denetim seviyesi geçersiz; 0, 1, 2, ya da 3 olabilir\n"
-
-#: g10/g10.c:1868
-msgid "invalid default preferences\n"
-msgstr "öntanýmlý tercihler geçersiz\n"
-
-#: g10/g10.c:1876
-msgid "invalid personal cipher preferences\n"
-msgstr "kiþisel þifre tercihleri geçersiz\n"
-
-#: g10/g10.c:1880
-msgid "invalid personal digest preferences\n"
-msgstr "kiþisel özümleme tercihleri geçersiz\n"
-
-#: g10/g10.c:1884
-msgid "invalid personal compress preferences\n"
-msgstr "kiþisel sýkýþtýrma tercihleri geçersiz\n"
-
-#: g10/g10.c:1977
-#, c-format
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "\"TrustDB\" güvence veritabaný baþlangýç aþamasýnda baþarýsýz: %s\n"
-
-#: g10/g10.c:1987
-msgid "WARNING: recipients (-r) given without using public key encryption\n"
-msgstr "UYARI: alýcýlar (-r) genel anahtar þifrelemesi kullanýlmadan belirtilmiþ\n"
-
-#: g10/g10.c:1997
-msgid "--store [filename]"
-msgstr "--store [dosyaismi]"
-
-#: g10/g10.c:2004
-msgid "--symmetric [filename]"
-msgstr "--symmetric [dosyaismi]"
-
-#: g10/g10.c:2012
-msgid "--encrypt [filename]"
-msgstr "--encrypt [dosyaismi]"
-
-#: g10/g10.c:2029
-msgid "--sign [filename]"
-msgstr "--sign [dosyaismi]"
-
-#: g10/g10.c:2042
-msgid "--sign --encrypt [filename]"
-msgstr "--sign --encrypt [dosyaismi]"
-
-#: g10/g10.c:2056
-msgid "--sign --symmetric [filename]"
-msgstr "--sign --symmetric [DOSYA]"
-
-#: g10/g10.c:2065
-msgid "--clearsign [filename]"
-msgstr "--clearsign [dosyaismi]"
-
-#: g10/g10.c:2083
-msgid "--decrypt [filename]"
-msgstr "--decrypt [dosyaismi]"
-
-#: g10/g10.c:2094
-msgid "--sign-key user-id"
-msgstr "--sign-key kullanýcý-kimliði"
-
-#: g10/g10.c:2102
-msgid "--lsign-key user-id"
-msgstr "--lsign-key kullanýcý-kimliði"
-
-#: g10/g10.c:2110
-msgid "--nrsign-key user-id"
-msgstr "--nrsign-key KULL-KML"
-
-#: g10/g10.c:2118
-msgid "--nrlsign-key user-id"
-msgstr "--nrlsign-key KULL-KML"
-
-#: g10/g10.c:2126
-msgid "--edit-key user-id [commands]"
-msgstr "--edit-key kullanýcý-kimliði [komutlar]"
-
-#: g10/encode.c:416 g10/g10.c:2182 g10/sign.c:789
-#, c-format
-msgid "can't open %s: %s\n"
-msgstr "%s açýlamadý: %s\n"
-
-#: g10/g10.c:2197
-msgid "-k[v][v][v][c] [user-id] [keyring]"
-msgstr "-k[v][v][v][c] [kullanýcý-kimliði] [anahtar-zinciri]"
-
-#: g10/g10.c:2289
-#, c-format
-msgid "dearmoring failed: %s\n"
-msgstr "zýrhýn kaldýrýlmasý baþarýsýz: %s\n"
-
-#: g10/g10.c:2297
-#, c-format
-msgid "enarmoring failed: %s\n"
-msgstr "zýrhlama baþarýsýz: %s\n"
-
-#: g10/g10.c:2384
-#, c-format
-msgid "invalid hash algorithm `%s'\n"
-msgstr "`%s' hash algoritmasý geçersiz\n"
-
-#: g10/g10.c:2470
-msgid "[filename]"
-msgstr "[dosyaismi]"
-
-#: g10/g10.c:2474
-msgid "Go ahead and type your message ...\n"
-msgstr "Ýletinizi yazýn ...\n"
-
-#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2477 g10/verify.c:94
-#: g10/verify.c:139
-#, c-format
-msgid "can't open `%s'\n"
-msgstr "`%s' açýlamadý\n"
-
-#: g10/g10.c:2691
-msgid ""
-"a notation name must have only printable characters or spaces, and end with "
-"an '='\n"
-msgstr ""
-"bir niteleme ismi sadece yazýlabilir karakterler ve boþluklar içerebilir ve "
-"bir '=' ile biter.\n"
-
-#: g10/g10.c:2700
-msgid "a notation value must not use any control characters\n"
-msgstr "bir niteleme deðerinde kontrol karakterleri kullanýlamaz\n"
-
-#: g10/g10.c:2737
-msgid "the given certification policy URL is invalid\n"
-msgstr "belirtilen sertifika güvence adresi geçersiz\n"
-
-#: g10/g10.c:2739
-msgid "the given signature policy URL is invalid\n"
-msgstr "belirtilen imza güvence adresi geçersiz\n"
-
-#: g10/armor.c:314
-#, c-format
-msgid "armor: %s\n"
-msgstr "zýrh: %s\n"
-
-#: g10/armor.c:343
-msgid "invalid armor header: "
-msgstr "zýrh baþlýðý geçersiz: "
-
-#: g10/armor.c:350
-msgid "armor header: "
-msgstr "zýrh baþlýðý: "
-
-#: g10/armor.c:361
-msgid "invalid clearsig header\n"
-msgstr "açýkça okunabilen imza baþlýðý geçersiz\n"
-
-#: g10/armor.c:413
-msgid "nested clear text signatures\n"
-msgstr "açýkça okunabilen imzalar dahil edildi\n"
-
-#: g10/armor.c:537
-msgid "invalid dash escaped line: "
-msgstr "araçizgisi escape'lý satýr geçersiz: "
-
-#: g10/armor.c:549
-msgid "unexpected armor:"
-msgstr "beklenmeyen zýrh: "
-
-#: g10/armor.c:675 g10/armor.c:1242
-#, c-format
-msgid "invalid radix64 character %02x skipped\n"
-msgstr "geçersiz radix64 karakteri %02x atlandý\n"
-
-#: g10/armor.c:718
-msgid "premature eof (no CRC)\n"
-msgstr "dosya sonu belirsiz (CRC yok)\n"
-
-#: g10/armor.c:752
-msgid "premature eof (in CRC)\n"
-msgstr "dosya sonu belirsiz (CRC içinde)\n"
-
-#: g10/armor.c:756
-msgid "malformed CRC\n"
-msgstr "CRC bozulmuþ\n"
-
-#: g10/armor.c:760 g10/armor.c:1279
-#, c-format
-msgid "CRC error; %06lx - %06lx\n"
-msgstr "CRC hatasý; %06lx - %06lx\n"
-
-#: g10/armor.c:780
-msgid "premature eof (in Trailer)\n"
-msgstr "dosya sonu belirsiz (kuyruk içinde)\n"
-
-#: g10/armor.c:784
-msgid "error in trailer line\n"
-msgstr "kuyruk satýrýnda hata\n"
-
-#: g10/armor.c:1057
-msgid "no valid OpenPGP data found.\n"
-msgstr "geçerli OpenPGP verisi yok\n"
-
-#: g10/armor.c:1062
-#, c-format
-msgid "invalid armor: line longer than %d characters\n"
-msgstr "geçersiz zýrh: satýr %d karakterden uzun\n"
-
-#: g10/armor.c:1066
-msgid "quoted printable character in armor - probably a buggy MTA has been used\n"
-msgstr ""
-"zýrh içinde uluslararasý karakterler - büyük olasýlýkla hatalý bir e-posta "
-"sunucusu kullanýlmýþ\n"
-
-#: g10/pkclist.c:61
-msgid "No reason specified"
-msgstr "Belirtilmiþ bir neden yok"
-
-#: g10/pkclist.c:63
-msgid "Key is superseded"
-msgstr "Anahtarýn yerine baþkasý konulmuþ ve iptal edilmiþtir"
-
-#: g10/pkclist.c:65
-msgid "Key has been compromised"
-msgstr "Anahtar tehlikede"
-
-#: g10/pkclist.c:67
-msgid "Key is no longer used"
-msgstr "Anahtar artýk kullanýlmayacak"
-
-#: g10/pkclist.c:69
-msgid "User ID is no longer valid"
-msgstr "Kullanýcý kimliði artýk geçersiz"
-
-#: g10/pkclist.c:73
-msgid "reason for revocation: "
-msgstr "yürürlükten kaldýrma sebebi: "
-
-#: g10/pkclist.c:90
-msgid "revocation comment: "
-msgstr "yürürlükten kaldýrma açýklamasý: "
-
-#. a string with valid answers
-#: g10/pkclist.c:252
-msgid "iImMqQsS"
-msgstr "bBmMaAkK"
-
-#: g10/pkclist.c:258
-#, c-format
-msgid ""
-"No trust value assigned to:\n"
-"%4u%c/%08lX %s \""
-msgstr ""
-"Güven derecesi belirtilmemiþ:\n"
-"%4u%c/%08lX %s \""
-
-#: g10/pkclist.c:270
-msgid ""
-"Please decide how far you trust this user to correctly\n"
-"verify other users' keys (by looking at passports,\n"
-"checking fingerprints from different sources...)?\n"
-"\n"
-msgstr ""
-"Diðer kullanýcýlarý anahtarlarýn doðrulayacak\n"
-"bu kullanýcýnýn güven derecesine lütfen karar verin.\n"
-"(pasportuna mý bakarsýnýz yoksa farklý kaynaklardan\n"
-"parmakizlerini mi kontrol edersiniz...)? kararýnýzý verin\n"
-
-#: g10/pkclist.c:273
-#, c-format
-msgid " %d = Don't know\n"
-msgstr " %d = bilmiyorum\n"
-
-#: g10/pkclist.c:274
-#, c-format
-msgid " %d = I do NOT trust\n"
-msgstr " %d = güvence vermem\n"
-
-#: g10/pkclist.c:275
-#, c-format
-msgid " %d = I trust marginally\n"
-msgstr " %d = Þöyle böyle güveniyorum\n"
-
-#: g10/pkclist.c:276
-#, c-format
-msgid " %d = I trust fully\n"
-msgstr " %d = Tamamen güveniyorum\n"
-
-#: g10/pkclist.c:278
-#, c-format
-msgid " %d = I trust ultimately\n"
-msgstr " %d = Son derece güveniyorum\n"
-
-#. not yet implemented
-#: g10/pkclist.c:281
-msgid " i = please show me more information\n"
-msgstr " b = Daha fazla bilgi gerekli\n"
-
-#: g10/pkclist.c:284
-msgid " m = back to the main menu\n"
-msgstr " m = ana menüye dön\n"
-
-#: g10/pkclist.c:287
-msgid " s = skip this key\n"
-msgstr " a = bu anahtarý atla\n"
-
-#: g10/pkclist.c:288
-msgid " q = quit\n"
-msgstr " k = çýk\n"
-
-#: g10/pkclist.c:295
-msgid "Your decision? "
-msgstr "Kararýnýz? "
-
-#: g10/pkclist.c:316
-msgid "Do you really want to set this key to ultimate trust? "
-msgstr "Bu anahtara gerçekten en yüksek güven derecesini vermek istiyor musunuz?"
-
-#: g10/pkclist.c:330
-msgid "Certificates leading to an ultimately trusted key:\n"
-msgstr "Son derece güvenli bir anahtarla sonuçlanan sertifikalar:\n"
-
-#: g10/pkclist.c:405
-#, c-format
-msgid "key %08lX: key has been revoked!\n"
-msgstr "anahtar %08lX: anahtar yürürlükten kaldýrýlmýþtý!\n"
-
-#: g10/pkclist.c:412 g10/pkclist.c:424 g10/pkclist.c:518
-msgid "Use this key anyway? "
-msgstr "Bu anahtar yine de kullanýlsýn mý? "
-
-#: g10/pkclist.c:417
-#, c-format
-msgid "key %08lX: subkey has been revoked!\n"
-msgstr "anahtar %08lX: yardýmcý anahtar yürürlükten kaldýrýlmýþtý!\n"
-
-#: g10/pkclist.c:438
-#, c-format
-msgid "%08lX: key has expired\n"
-msgstr "%08lX: anahtarýn kullaným süresi dolmuþ\n"
-
-#: g10/pkclist.c:448
-#, c-format
-msgid "%08lX: There is no indication that this key really belongs to the owner\n"
-msgstr "%08lX: Bu anahtarýn gerçekten sahibine ait olduðuna dair bir belirti yok\n"
-
-#: g10/pkclist.c:454
-#, c-format
-msgid "%08lX: We do NOT trust this key\n"
-msgstr "%08lX: Bu anahtara güven-mi-yoruz\n"
-
-#: g10/pkclist.c:460
-#, c-format
-msgid ""
-"%08lX: It is not sure that this key really belongs to the owner\n"
-"but it is accepted anyway\n"
-msgstr ""
-"%08lX: Bu anahtarýn gerçekten sahibine ait olup olmadýðýndan emin\n"
-"olunamadý fakat yine de kabul edildi.\n"
-
-#: g10/pkclist.c:466
-msgid "This key probably belongs to the owner\n"
-msgstr "Bu anahtarýn sahibine ait olduðu umuluyor\n"
-
-#: g10/pkclist.c:471
-msgid "This key belongs to us\n"
-msgstr "Bu anahtar bizim\n"
-
-#: g10/pkclist.c:513
-msgid ""
-"It is NOT certain that the key belongs to the person named\n"
-"in the user ID. If you *really* know what you are doing,\n"
-"you may answer the next question with yes\n"
-"\n"
-msgstr ""
-"Bu anahtarýn kullanýcý kimliðinde ismi belirtilen þahsa ait\n"
-"olduðu kesin DEÐÝL. *Gerçekten* ne yaptýðýnýzý biliyorsanýz,\n"
-"sonraki soruya da evet cevabý verebilirsiniz.\n"
-
-#: g10/pkclist.c:527 g10/pkclist.c:549
-msgid "WARNING: Using untrusted key!\n"
-msgstr "UYARI: Güven derecesiz anahtar kullanýlýyor!\n"
-
-#: g10/pkclist.c:568
-msgid "WARNING: This key has been revoked by its owner!\n"
-msgstr "UYARI: Bu anahtar sahibi tarafýndan yürürlükten kaldýrýlmýþtý!\n"
-
-#: g10/pkclist.c:569
-msgid " This could mean that the signature is forgery.\n"
-msgstr " Bu imza sahte anlamýna gelebilir.\n"
-
-#: g10/pkclist.c:575
-msgid "WARNING: This subkey has been revoked by its owner!\n"
-msgstr "UYARI: Bu yardýmcý anahtar sahibi tarafýndan yürürlükten kaldýrýlmýþtý!\n"
-
-#: g10/pkclist.c:580
-msgid "Note: This key has been disabled.\n"
-msgstr "Bilgi: Bu anahtar iptal edildi.\n"
-
-#: g10/pkclist.c:585
-msgid "Note: This key has expired!\n"
-msgstr "Bilgi: Bu anahtarýn kullaným süresi dolmuþtu!\n"
-
-#: g10/pkclist.c:596
-msgid "WARNING: This key is not certified with a trusted signature!\n"
-msgstr "UYARI: Bu anahtar güven dereceli bir imza ile sertifikalanmamýþ!\n"
-
-#: g10/pkclist.c:598
-msgid " There is no indication that the signature belongs to the owner.\n"
-msgstr " Bu imzanýn sahibine ait olduðuna dair bir belirti yok.\n"
-
-#: g10/pkclist.c:606
-msgid "WARNING: We do NOT trust this key!\n"
-msgstr "UYARI: Bu anahtara güven-mi-yoruz!\n"
-
-#: g10/pkclist.c:607
-msgid " The signature is probably a FORGERY.\n"
-msgstr " Bu imza SAHTE olabilir.\n"
-
-#: g10/pkclist.c:615
-msgid "WARNING: This key is not certified with sufficiently trusted signatures!\n"
-msgstr ""
-"UYARI: Bu anahtar yeterli güven derecesine sahip imzalarla "
-"sertifikalanmamýþ!\n"
-
-#: g10/pkclist.c:617
-msgid " It is not certain that the signature belongs to the owner.\n"
-msgstr " Bu imzanýn sahibine ait olduðu kesin deðil.\n"
-
-#: g10/pkclist.c:770 g10/pkclist.c:794 g10/pkclist.c:946 g10/pkclist.c:1006
-#, c-format
-msgid "%s: skipped: %s\n"
-msgstr "%s: atlandý: %s\n"
-
-#: g10/pkclist.c:780 g10/pkclist.c:978
-#, c-format
-msgid "%s: skipped: public key already present\n"
-msgstr "%s: atlandý: genel anahtar zaten var\n"
-
-#: g10/pkclist.c:811
-msgid "You did not specify a user ID. (you may use \"-r\")\n"
-msgstr "Bir kullanýcý kimliði belirtmediniz. (\"-r\" kullanabilirsiniz)\n"
-
-#: g10/pkclist.c:824
-msgid ""
-"\n"
-"Enter the user ID. End with an empty line: "
-msgstr ""
-"\n"
-"Kullanýcý kimliðini girin. Boþ bir satýr iþlemi sonlandýrýr:"
-
-#: g10/pkclist.c:840
-msgid "No such user ID.\n"
-msgstr "Böyle bir kullanýcý kimliði yok.\n"
-
-#: g10/pkclist.c:845 g10/pkclist.c:921
-msgid "skipped: public key already set as default recipient\n"
-msgstr "atlandý: genel anahtar zaten öntanýmlý alýcý olarak ayarlanmýþ\n"
-
-#: g10/pkclist.c:863
-msgid "Public key is disabled.\n"
-msgstr "Genel anahtar iptal edildi.\n"
-
-#: g10/pkclist.c:870
-msgid "skipped: public key already set\n"
-msgstr "atlandý: genel anahtar zaten belirtilmiþ\n"
-
-#: g10/pkclist.c:913
-#, c-format
-msgid "unknown default recipient `%s'\n"
-msgstr "öntanýmlý alýcý `%s' bilinmiyor\n"
-
-#: g10/pkclist.c:958
-#, c-format
-msgid "%s: skipped: public key is disabled\n"
-msgstr "%s: atlandý: genel anahtar iptal edildi\n"
-
-#: g10/pkclist.c:1013
-msgid "no valid addressees\n"
-msgstr "geçerli adresler yok\n"
-
-#: g10/keygen.c:182
-#, c-format
-msgid "preference %c%lu is not valid\n"
-msgstr "%c%lu tercihi geçersiz\n"
-
-#: g10/keygen.c:189
-#, c-format
-msgid "preference %c%lu duplicated\n"
-msgstr "%c%lu tercihi yinelendi\n"
-
-#: g10/keygen.c:194
-#, c-format
-msgid "too many `%c' preferences\n"
-msgstr "`%c' tercih çok fazla\n"
-
-#: g10/keygen.c:264
-msgid "invalid character in preference string\n"
-msgstr "tercih dizgesindeki karakter geçersiz\n"
-
-#: g10/keygen.c:524
-msgid "writing direct signature\n"
-msgstr "doðrudan imza yazýlýyor\n"
-
-#: g10/keygen.c:563
-msgid "writing self signature\n"
-msgstr "öz-imza yazýlýyor\n"
-
-#: g10/keygen.c:607
-msgid "writing key binding signature\n"
-msgstr "anahtarý garantileyen imzayý yazýyor\n"
-
-#: g10/keygen.c:661 g10/keygen.c:745 g10/keygen.c:836
-#, c-format
-msgid "keysize invalid; using %u bits\n"
-msgstr "anahtar uzunluðu geçersiz; %u bit kullanýlýyor\n"
-
-#: g10/keygen.c:666 g10/keygen.c:750 g10/keygen.c:841
-#, c-format
-msgid "keysize rounded up to %u bits\n"
-msgstr "anahtar uzunluðu %u bite yuvarlandý\n"
-
-#: g10/keygen.c:941
-msgid "Please select what kind of key you want:\n"
-msgstr "Lütfen istediðiniz anahtarý seçiniz:\n"
-
-#: g10/keygen.c:943
-#, c-format
-msgid " (%d) DSA and ElGamal (default)\n"
-msgstr " (%d) DSA ve ElGamal (öntanýmlý)\n"
-
-#: g10/keygen.c:944
-#, c-format
-msgid " (%d) DSA (sign only)\n"
-msgstr " (%d) DSA (yalnýz imzalamak için)\n"
-
-#: g10/keygen.c:946
-#, c-format
-msgid " (%d) ElGamal (encrypt only)\n"
-msgstr " (%d) ElGamal (yalnýz þifrelemek için)\n"
-
-#: g10/keygen.c:948
-#, c-format
-msgid " (%d) ElGamal (sign and encrypt)\n"
-msgstr " (%d) ElGamal (imzalamak ve þifrelemek için)\n"
-
-#: g10/keygen.c:949
-#, c-format
-msgid " (%d) RSA (sign only)\n"
-msgstr " (%d) RSA (sadece imzalamak için)\n"
-
-#: g10/keygen.c:951
-#, c-format
-msgid " (%d) RSA (encrypt only)\n"
-msgstr " (%d) RSA (sadece þifrelemek için)\n"
-
-#: g10/keygen.c:953
-#, c-format
-msgid " (%d) RSA (sign and encrypt)\n"
-msgstr " (%d) RSA (imzalamak ve þifrelemek için)\n"
-
-#: g10/keyedit.c:576 g10/keygen.c:956
-msgid "Your selection? "
-msgstr "Seçiminiz? "
-
-#: g10/keygen.c:966 g10/keygen.c:984
-msgid "The use of this algorithm is deprecated - create anyway? "
-msgstr "Bu algoritmanýn kullanýmý uygun deðil - Yine de oluþturulsun mu?"
-
-#: g10/keyedit.c:589 g10/keygen.c:998
-msgid "Invalid selection.\n"
-msgstr "Seçim geçersiz.\n"
-
-#: g10/keygen.c:1011
-#, c-format
-msgid ""
-"About to generate a new %s keypair.\n"
-" minimum keysize is 768 bits\n"
-" default keysize is 1024 bits\n"
-" highest suggested keysize is 2048 bits\n"
-msgstr ""
-"Yeni bir %s anahtar çifti üretmek üzeresiniz.\n"
-" en küçük anahtar uzunluðu: 768 bit\n"
-" öntanýmlý anahtar uzunluðu: 1024 bit\n"
-" önerilebilecek en büyük anahtar uzunluðu: 2048 bit\n"
-
-#: g10/keygen.c:1020
-msgid "What keysize do you want? (1024) "
-msgstr "Ýstediðiniz anahtar uzunluðu nedir? (1024) "
-
-#: g10/keygen.c:1025
-msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr "DSA anahtarýnýn uzunluðu 512 ile 1024 bit arasýnda olabilir\n"
-
-#: g10/keygen.c:1027
-msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-msgstr "anahtar uzunluðu çok küçük; RSA anahtarý için en küçük uzunluk: 1024 bit\n"
-
-#: g10/keygen.c:1030
-msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "anahtar uzunluðu çok küçük; en küçük anahtar uzunluðu 768 bit'tir.\n"
-
-#. It is ridiculous and an annoyance to use larger key sizes!
-#. * GnuPG can handle much larger sizes; but it takes an eternity
-#. * to create such a key (but less than the time the Sirius
-#. * Computer Corporation needs to process one of the usual
-#. * complaints) and {de,en}cryption although needs some time.
-#. * So, before you complain about this limitation, I suggest that
-#. * you start a discussion with Marvin about this theme and then
-#. * do whatever you want.
-#: g10/keygen.c:1041
-#, c-format
-msgid "keysize too large; %d is largest value allowed.\n"
-msgstr "anahtar uzunluðu çok büyük; izin verilen en büyük deðer: %d bit\n"
-
-#: g10/keygen.c:1046
-msgid ""
-"Keysizes larger than 2048 are not suggested because\n"
-"computations take REALLY long!\n"
-msgstr ""
-"Hesaplama EPEYCE UZUN zaman alacaðýndan anahtar uzunluklarýnda\n"
-"2048 bitten fazlasý tavsiye edilmez.\n"
-
-#: g10/keygen.c:1049
-msgid "Are you sure that you want this keysize? "
-msgstr "Bu anahtar uzunluðunu istediðinizden emin misiniz? "
-
-#: g10/keygen.c:1050
-msgid ""
-"Okay, but keep in mind that your monitor and keyboard radiation is also very "
-"vulnerable to attacks!\n"
-msgstr ""
-"Tamam, ama saldýrýlara çok duyarlý olan monitör ve klavye ýþýnýmlarýndan "
-"kendinizi uzak tutun! (ne demekse...)\n"
-
-#: g10/keygen.c:1059
-#, c-format
-msgid "Requested keysize is %u bits\n"
-msgstr "Ýstenen anahtar uzunluðu: %u bit\n"
-
-#: g10/keygen.c:1062 g10/keygen.c:1066
-#, c-format
-msgid "rounded up to %u bits\n"
-msgstr "%u bite yuvarlandý\n"
-
-#: g10/keygen.c:1117
-msgid ""
-"Please specify how long the key should be valid.\n"
-" 0 = key does not expire\n"
-" <n> = key expires in n days\n"
-" <n>w = key expires in n weeks\n"
-" <n>m = key expires in n months\n"
-" <n>y = key expires in n years\n"
-msgstr ""
-"Lütfen anahtarýn ne kadar süreyle geçerli olacaðýný belirtin.\n"
-" 0 = anahtar süresiz geçerli\n"
-" <n> = anahtar n gün geçerli\n"
-" <n>w = anahtar n hafta geçerli\n"
-" <n>m = anahtar n ay geçerli\n"
-" <n>y = anahtar n yýl geçerli\n"
-
-#: g10/keygen.c:1126
-msgid ""
-"Please specify how long the signature should be valid.\n"
-" 0 = signature does not expire\n"
-" <n> = signature expires in n days\n"
-" <n>w = signature expires in n weeks\n"
-" <n>m = signature expires in n months\n"
-" <n>y = signature expires in n years\n"
-msgstr ""
-"Lütfen imzanýnn ne kadar süreyle geçerli olacaðýný belirtin.\n"
-" 0 = imza süresiz geçerli\n"
-" <n> = imza n gün geçerli\n"
-" <n>w = imza n hafta geçerli\n"
-" <n>m = imza n ay geçerli\n"
-" <n>y = imza n yýl geçerli\n"
-
-#: g10/keygen.c:1148
-msgid "Key is valid for? (0) "
-msgstr "Anahtar ne kadar geçerli olacak? (0) "
-
-#: g10/keygen.c:1150
-msgid "Signature is valid for? (0) "
-msgstr "Ýmza ne kadar geçerli olacak? (0) "
-
-#: g10/keygen.c:1155
-msgid "invalid value\n"
-msgstr "deðer hatalý\n"
-
-#: g10/keygen.c:1160
-#, c-format
-msgid "%s does not expire at all\n"
-msgstr "%s hep geçerli olacak\n"
-
-#. print the date when the key expires
-#: g10/keygen.c:1167
-#, c-format
-msgid "%s expires at %s\n"
-msgstr "%s %s sonra geçersiz olacak\n"
-
-#: g10/keygen.c:1173
-msgid ""
-"Your system can't display dates beyond 2038.\n"
-"However, it will be correctly handled up to 2106.\n"
-msgstr ""
-"Sisteminiz 2038 yýlýndan sonraki tarihleri gösteremiyor.\n"
-"Ama emin olun ki 2106 yýlýna kadar elde edilebilecek.\n"
-
-#: g10/keygen.c:1178
-msgid "Is this correct (y/n)? "
-msgstr "Bu doðru mu? (e/h)? "
-
-#: g10/keygen.c:1221
-msgid ""
-"\n"
-"You need a User-ID to identify your key; the software constructs the user "
-"id\n"
-"from Real Name, Comment and Email Address in this form:\n"
-" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
-"\n"
-msgstr ""
-"\n"
-"Anahtarýnýzýn size ait olduðunu belirten bir Kullanýcý-Kimliði olmalý;\n"
-"Kullanýcý-Kimliði, Gerçek Ýsminiz, Bir Önbilgi ve e-Posta Adresiniz\n"
-"alanlarýnýn bir birleþiminden oluþur. Örneðin:\n"
-"\t\"Fatih Sultan Mehmed (Padisah) <padisah@ottoman.gov>\"\n"
-"\n"
-
-#: g10/keygen.c:1233
-msgid "Real name: "
-msgstr "Adýnýz ve Soyadýnýz: "
-
-#: g10/keygen.c:1241
-msgid "Invalid character in name\n"
-msgstr "Ad ve soyadýnýzda geçersiz karakter var\n"
-
-#: g10/keygen.c:1243
-msgid "Name may not start with a digit\n"
-msgstr "Ad ve soyadýnýz bir rakamla baþlamamalý\n"
-
-#: g10/keygen.c:1245
-msgid "Name must be at least 5 characters long\n"
-msgstr "Ad ve soyadýnýz en az 5 harfli olmalý\n"
-
-#: g10/keygen.c:1253
-msgid "Email address: "
-msgstr "E-posta adresiniz: "
-
-#: g10/keygen.c:1264
-msgid "Not a valid email address\n"
-msgstr "geçerli bir E-posta adresi deðil\n"
-
-#: g10/keygen.c:1272
-msgid "Comment: "
-msgstr "Önbilgi: "
-
-#: g10/keygen.c:1278
-msgid "Invalid character in comment\n"
-msgstr "Önbilgi alanýnda geçersiz karakter var\n"
-
-#: g10/keygen.c:1301
-#, c-format
-msgid "You are using the `%s' character set.\n"
-msgstr "`%s' karakter kümesini kullanýyorsunuz.\n"
-
-#: g10/keygen.c:1307
-#, c-format
-msgid ""
-"You selected this USER-ID:\n"
-" \"%s\"\n"
-"\n"
-msgstr ""
-"Seçtiðiniz KULLANICI-KÝMLÝÐÝ:\n"
-" \"%s\"\n"
-"\n"
-
-#: g10/keygen.c:1311
-msgid "Please don't put the email address into the real name or the comment\n"
-msgstr "Lütfen E-posta adresinizi Adý ve Soyadý veya Açýklama alaný içine koymayýn\n"
-
-#: g10/keygen.c:1316
-msgid "NnCcEeOoQq"
-msgstr "AaYyEeTtKk"
-
-#: g10/keygen.c:1326
-msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
-msgstr "(A)dý ve Soyadý, (Y)orum, (E)posta alanlarýný deðiþtir ya da Çý(k)? "
-
-#: g10/keygen.c:1327
-msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
-msgstr "(A)dý ve Soyadý, (Y)orum, (E)posta alanlarýný deðiþtir ya da (T)amam/Çý(k)? "
-
-#: g10/keygen.c:1346
-msgid "Please correct the error first\n"
-msgstr "Lütfen önce hatayý düzeltin\n"
-
-#: g10/keygen.c:1385
-msgid ""
-"You need a Passphrase to protect your secret key.\n"
-"\n"
-msgstr ""
-"Gizli anahtarýnýzý korumak için bir Anahtar Parolanýz olmalý.\n"
-"\n"
-
-#: g10/keyedit.c:787 g10/keygen.c:1393
-msgid "passphrase not correctly repeated; try again"
-msgstr ""
-"ikinci kez yazdýðýnýz anahtar parolasý ilkiyle ayný deðil; iþlem "
-"tekrarlanacak"
-
-#: g10/keygen.c:1394
-#, c-format
-msgid "%s.\n"
-msgstr "%s.\n"
-
-#: g10/keygen.c:1400
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"I will do it anyway. You can change your passphrase at any time,\n"
-"using this program with the option \"--edit-key\".\n"
-"\n"
-msgstr ""
-"Bir anahtar parolasý istemediniz - bu *kötü* bir fikir!\n"
-"Nasýl isterseniz. Anahtar parolanýzý bu programý \"--edit-key\"\n"
-"seçeneði ile kullanarak her zaman deðiþtirebilirsiniz.\n"
-"\n"
-
-#: g10/keygen.c:1421
-msgid ""
-"We need to generate a lot of random bytes. It is a good idea to perform\n"
-"some other action (type on the keyboard, move the mouse, utilize the\n"
-"disks) during the prime generation; this gives the random number\n"
-"generator a better chance to gain enough entropy.\n"
-msgstr ""
-"Bir miktar rasgele bayt üretilmesi gerekiyor. Ýlk üretim sýrasýnda biraz\n"
-"hareket (klavyeyi kullanmak, fareyi hareket ettirmek, disklerden "
-"yararlanmak)\n"
-"iyi olacaktýr; bu yeterli rasgele bayt kazanmak için rasgele sayý\n"
-"üretecine yardýmcý olur. \n"
-
-#: g10/keygen.c:1985
-msgid "DSA keypair will have 1024 bits.\n"
-msgstr "DSA anahtar çifti 1024 bit olacak.\n"
-
-#: g10/keygen.c:2039
-msgid "Key generation canceled.\n"
-msgstr "Anahtar üretimi durduruldu.\n"
-
-#: g10/keygen.c:2128 g10/keygen.c:2216
-#, c-format
-msgid "writing public key to `%s'\n"
-msgstr "genel anahtarý `%s'e yazýyor\n"
-
-#: g10/keygen.c:2129 g10/keygen.c:2218
-#, c-format
-msgid "writing secret key to `%s'\n"
-msgstr "gizli anahtarý `%s'e yazýyor\n"
-
-#: g10/keygen.c:2205
-#, c-format
-msgid "no writable public keyring found: %s\n"
-msgstr "yazýlabilir bir genel anahtar zinciri yok: %s\n"
-
-#: g10/keygen.c:2211
-#, c-format
-msgid "no writable secret keyring found: %s\n"
-msgstr "yazýlabilir bir gizli anahtar zinciri yok: %s\n"
-
-#: g10/keygen.c:2225
-#, c-format
-msgid "error writing public keyring `%s': %s\n"
-msgstr "`%s' genel anahtar zincirine yazýlýrken hata oluþtu: %s\n"
-
-#: g10/keygen.c:2232
-#, c-format
-msgid "error writing secret keyring `%s': %s\n"
-msgstr "`%s' gixli anahtar zincirine yazýlýrken hata oluþtu: %s\n"
-
-#: g10/keygen.c:2252
-msgid "public and secret key created and signed.\n"
-msgstr "genel ve gizli anahtar üretildi ve imzalandý.\n"
-
-#: g10/keygen.c:2253
-msgid "key marked as ultimately trusted.\n"
-msgstr "anahtar son derece güvenli olarak imlendi.\n"
-
-#: g10/keygen.c:2264
-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 ""
-"Bu anahtar þifreleme için kullanýlamaz. Þifreleme için ikinci bir anahtarý\n"
-"\"--edit-key\" seçeneðini kullanarak üretebilirsiniz.\n"
-
-#: g10/keygen.c:2276 g10/keygen.c:2384
-#, c-format
-msgid "Key generation failed: %s\n"
-msgstr "Anahtar üretimi baþarýsýzlýða uðradý: %s\n"
-
-#: g10/keygen.c:2320 g10/sign.c:257
-#, c-format
-msgid "key has been created %lu second in future (time warp or clock problem)\n"
-msgstr "anahtar %lu saniye sonra üretilmiþ (zaman sapmasý veya saat problemi)\n"
-
-#: g10/keygen.c:2322 g10/sign.c:259
-#, c-format
-msgid "key has been created %lu seconds in future (time warp or clock problem)\n"
-msgstr ""
-"anahtar bundan %lu saniye sonra üretilmiþ (zaman sapmasý veya saat "
-"problemi)\n"
-
-#: g10/keygen.c:2331
-msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "BÝLGÝ: v3 anahtarlarý için yardýmcý anahtar üretimi OpenPGP uyumlu deðildir\n"
-
-#: g10/keygen.c:2360
-msgid "Really create? "
-msgstr "Gerçekten oluþturulsun mu? "
-
-#: g10/decrypt.c:92 g10/encode.c:762
-msgid "--output doesn't work for this command\n"
-msgstr "--output seçeneði bu komutla çalýþmaz\n"
-
-#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
-#: g10/tdbio.c:557
-#, c-format
-msgid "%s: can't open: %s\n"
-msgstr "%s: açýlamýyor: %s\n"
-
-#: g10/encode.c:205 g10/sign.c:1035
-#, c-format
-msgid "error creating passphrase: %s\n"
-msgstr "anahtar parolasý oluþturulurken hata: %s\n"
-
-#: g10/encode.c:210
-msgid "can't use a symmetric ESK packet due to the S2K mode\n"
-msgstr "S2K kipi sayesinde bir simetrik ESK paketi kullanýlamýyor\n"
-
-#: g10/encode.c:229 g10/encode.c:486
-#, c-format
-msgid "`%s' already compressed\n"
-msgstr "`%s' zaten sýkýþtýrýlmýþ\n"
-
-#: g10/encode.c:295 g10/encode.c:520
-#, c-format
-msgid "%s: WARNING: empty file\n"
-msgstr "%s: UYARI: dosya boþ\n"
-
-#: g10/encode.c:406
-msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-msgstr ""
-"--pgp2 kipinde sadece 2048 bitlik RSA anahtarlarý ile þifreleme "
-"yapabilirsiniz\n"
-
-#: g10/encode.c:422
-#, c-format
-msgid "reading from `%s'\n"
-msgstr "`%s'den okunuyor\n"
-
-#: g10/encode.c:456
-msgid "unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-msgstr "tüm anahtarlarý þifrelemek için IDEA þifresi kullanýlamaz.\n"
-
-#: g10/encode.c:467 g10/encode.c:644
-#, c-format
-msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
-msgstr "alýcýnýn tercihleriyle çeliþen %s (%d) simetrik þifre kullanýmý zorlanýyor\n"
-
-#: g10/encode.c:558 g10/sign.c:758
-#, c-format
-msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
-msgstr "alýcýnýn tercihleriyle çeliþen %s (%d) sýkýþtýrma algoritmasý kullanýmý zorlanýyor\n"
-
-#: g10/encode.c:703
-#, c-format
-msgid "you may not use %s while in %s mode\n"
-msgstr "%2$s kipindeyken %1$s kullanýlamaz.\n"
-
-#: g10/encode.c:735
-#, c-format
-msgid "%s/%s encrypted for: \"%s\"\n"
-msgstr "%s/%s \"%s\" için þifrelendi\n"
-
-#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2289
-#, c-format
-msgid "key `%s' not found: %s\n"
-msgstr "anahtar `%s' yok: %s\n"
-
-#: g10/delkey.c:81 g10/export.c:213
-#, c-format
-msgid "error reading keyblock: %s\n"
-msgstr "anahtar bloðu okunurken hata: %s\n"
-
-#: g10/export.c:222
-#, c-format
-msgid "key %08lX: not a rfc2440 key - skipped\n"
-msgstr "%08lX anahtarý: bir RFC2440 anahtarý deðil - atlandý\n"
-
-#: g10/export.c:238
-#, c-format
-msgid "key %08lX: not protected - skipped\n"
-msgstr "%08lX anahtarý: korunmamýþ - atlandý\n"
-
-#: g10/export.c:246
-#, c-format
-msgid "key %08lX: PGP 2.x style key - skipped\n"
-msgstr "%08lX anahtarý: PGP 2.x tarzý bir anahtar - atlandý\n"
-
-#: g10/export.c:347
-msgid "WARNING: nothing exported\n"
-msgstr "UYARI: hiçbir þey dýþarý aktarýlmadý\n"
-
-#: g10/getkey.c:151
-msgid "too many entries in pk cache - disabled\n"
-msgstr "pk belleðinde çok fazla girdi - iptal edildi\n"
-
-#. fixme: returning translatable constants instead of a user ID is
-#. * not good because they are probably not utf-8 encoded.
-#: g10/getkey.c:187 g10/getkey.c:2393
-msgid "[User id not found]"
-msgstr "[Kullanýcý kimliði bulunamadý]"
-
-#: g10/getkey.c:1438
-#, c-format
-msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
-msgstr ""
-"Geçersiz %08lX anahtarý --allow-non-selfsigned-uid kullanýlarak geçerli "
-"oldu\n"
-
-#: g10/getkey.c:2109
-#, c-format
-msgid "using secondary key %08lX instead of primary key %08lX\n"
-msgstr "yardýmcý anahtar %08lX, asýl anahtar %08lX yerine kullanýlýyor\n"
-
-#: g10/getkey.c:2156
-#, c-format
-msgid "key %08lX: secret key without public key - skipped\n"
-msgstr "%08lX anahtarý: genel anahtarsýz gizli anahtar - atlandý\n"
-
-#: g10/import.c:258
-#, c-format
-msgid "skipping block of type %d\n"
-msgstr "%d. tür blok atlandý\n"
-
-#: g10/import.c:267
-#, c-format
-msgid "%lu keys so far processed\n"
-msgstr "þu ana kadar herþey yolunda giderek %lu anahtar iþlenmiþ\n"
-
-#: g10/import.c:272
-#, c-format
-msgid "error reading `%s': %s\n"
-msgstr "\"%s\" okunurken hata: %s\n"
-
-#: g10/import.c:284
-#, c-format
-msgid "Total number processed: %lu\n"
-msgstr "Ýþlenmiþ toplam miktar: %lu\n"
-
-#: g10/import.c:286
-#, c-format
-msgid " skipped new keys: %lu\n"
-msgstr " yeni anahtarlar atlandý: %lu\n"
-
-#: g10/import.c:289
-#, c-format
-msgid " w/o user IDs: %lu\n"
-msgstr " kullanýcý kimliksiz: %lu\n"
-
-#: g10/import.c:291
-#, c-format
-msgid " imported: %lu"
-msgstr " indirildi: %lu"
-
-#: g10/import.c:297
-#, c-format
-msgid " unchanged: %lu\n"
-msgstr " deðiþmedi: %lu\n"
-
-#: g10/import.c:299
-#, c-format
-msgid " new user IDs: %lu\n"
-msgstr " yeni kullanýcý kimliði: %lu\n"
-
-#: g10/import.c:301
-#, c-format
-msgid " new subkeys: %lu\n"
-msgstr " yeni yardýmcý anahtarlar: %lu\n"
-
-#: g10/import.c:303
-#, c-format
-msgid " new signatures: %lu\n"
-msgstr " yeni imzalar: %lu\n"
-
-#: g10/import.c:305
-#, c-format
-msgid " new key revocations: %lu\n"
-msgstr " yeni anahtar iptalleri: %lu\n"
-
-#: g10/import.c:307
-#, c-format
-msgid " secret keys read: %lu\n"
-msgstr " gizli anahtarlar okundu: %lu\n"
-
-#: g10/import.c:309
-#, c-format
-msgid " secret keys imported: %lu\n"
-msgstr " gizli anahtarlar indirildi: %lu\n"
-
-#: g10/import.c:311
-#, c-format
-msgid " secret keys unchanged: %lu\n"
-msgstr " gizli anahtarlar deðiþmedi: %lu\n"
-
-#: g10/import.c:313
-#, c-format
-msgid " not imported: %lu\n"
-msgstr " alýnamadý: %lu\n"
-
-#: g10/import.c:581 g10/import.c:830
-#, c-format
-msgid "key %08lX: no user ID\n"
-msgstr "anahtar %08lX: kullanýcý kimliði yok\n"
-
-#: g10/import.c:597
-#, c-format
-msgid "key %08lX: HKP subkey corruption repaired\n"
-msgstr "anahtar %08lX: HKP yardýmcý anahtar bozulmasý giderildi\n"
-
-#: g10/import.c:612
-#, c-format
-msgid "key %08lX: accepted non self-signed user ID '%s'\n"
-msgstr "anahtar %08lX: öz-imzalý olmayan kullanýcý kimliði '%s' kabul edildi\n"
-
-#: g10/import.c:619
-#, c-format
-msgid "key %08lX: no valid user IDs\n"
-msgstr "anahtar %08lX: kullanýcý kimliði geçersiz\n"
-
-#: g10/import.c:621
-msgid "this may be caused by a missing self-signature\n"
-msgstr "bu kayýp bir öz-imza yüzünden meydana gelebilir\n"
-
-#: g10/import.c:631 g10/import.c:903
-#, c-format
-msgid "key %08lX: public key not found: %s\n"
-msgstr "anahtar %08lX: genel anahtar bulunamadý: %s\n"
-
-#: g10/import.c:636
-#, c-format
-msgid "key %08lX: new key - skipped\n"
-msgstr "anahtar %08lX: yeni anahtar - atlandý\n"
-
-#: g10/import.c:646
-#, c-format
-msgid "no writable keyring found: %s\n"
-msgstr "yazýlabilir bir anahtar zinciri yok: %s\n"
-
-#: g10/import.c:651 g10/openfile.c:244 g10/sign.c:670 g10/sign.c:897
-#, c-format
-msgid "writing to `%s'\n"
-msgstr "\"%s\"e yazýyor\n"
-
-#: g10/import.c:654 g10/import.c:731 g10/import.c:850 g10/import.c:963
-#, c-format
-msgid "error writing keyring `%s': %s\n"
-msgstr "\"%s\" anahtar zincirine yazarken hata oluþtu: %s\n"
-
-#: g10/import.c:663
-#, c-format
-msgid "key %08lX: public key \"%s\" imported\n"
-msgstr "anahtar %08lX: genel anahtar \"%s\" alýndý\n"
-
-#: g10/import.c:685
-#, c-format
-msgid "key %08lX: doesn't match our copy\n"
-msgstr "anahtar %08lX: bizim kopyamýzla eþleþmiyor\n"
-
-#: g10/import.c:702 g10/import.c:920
-#, c-format
-msgid "key %08lX: can't locate original keyblock: %s\n"
-msgstr "anahtar %08lX: özgün anahtar bloku bulunamadý: %s\n"
-
-#: g10/import.c:709 g10/import.c:926
-#, c-format
-msgid "key %08lX: can't read original keyblock: %s\n"
-msgstr "anahtar %08lX: özgün anahtar bloku okunamadý: %s\n"
-
-#: g10/import.c:740
-#, c-format
-msgid "key %08lX: \"%s\" 1 new user ID\n"
-msgstr "anahtar %08lX: \"%s\" 1 yeni kullanýcý kimliði\n"
-
-#: g10/import.c:743
-#, c-format
-msgid "key %08lX: \"%s\" %d new user IDs\n"
-msgstr "anahtar %08lX: \"%s\" %d yeni kullanýcý kimliði\n"
-
-#: g10/import.c:746
-#, c-format
-msgid "key %08lX: \"%s\" 1 new signature\n"
-msgstr "anahtar %08lX: \"%s\" 1 yeni imza\n"
-
-#: g10/import.c:749
-#, c-format
-msgid "key %08lX: \"%s\" %d new signatures\n"
-msgstr "anahtar %08lX: \"%s\" %d yeni imza\n"
-
-#: g10/import.c:752
-#, c-format
-msgid "key %08lX: \"%s\" 1 new subkey\n"
-msgstr "anahtar %08lX: %s 1 yeni yardýmcý anahtar\n"
-
-#: g10/import.c:755
-#, c-format
-msgid "key %08lX: \"%s\" %d new subkeys\n"
-msgstr "anahtar %08lX: \"%s\" %d yeni yardýmcý anahtar\n"
-
-#: g10/import.c:774
-#, c-format
-msgid "key %08lX: \"%s\" not changed\n"
-msgstr "anahtar %08lX: \"%s\" deðiþmedi\n"
-
-#: g10/import.c:844
-#, c-format
-msgid "no default secret keyring: %s\n"
-msgstr "öntanýmlý gizli anahtar zinciri yok: %s\n"
-
-#: g10/import.c:855
-#, c-format
-msgid "key %08lX: secret key imported\n"
-msgstr "anahtar %08lX: gizli anahtar indirildi\n"
-
-#. we can't merge secret keys
-#: g10/import.c:861
-#, c-format
-msgid "key %08lX: already in secret keyring\n"
-msgstr "anahtar %08lX: zaten gizli anahtar zincirinde\n"
-
-#: g10/import.c:868
-#, c-format
-msgid "key %08lX: secret key not found: %s\n"
-msgstr "anahtar %08lX: gizli anahtar bulunamadý: %s\n"
-
-#: g10/import.c:897
-#, c-format
-msgid "key %08lX: no public key - can't apply revocation certificate\n"
-msgstr ""
-"anahtar %08lX: genel anahtar deðil - yürürlükten kaldýrma sertifikasý "
-"uygulanamaz\n"
-
-#: g10/import.c:937
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
-msgstr "anahtar %08lX: yürürlükten kaldýrma sertifikasý geçersiz: %s - reddedildi\n"
-
-#: g10/import.c:969
-#, c-format
-msgid "key %08lX: \"%s\" revocation certificate imported\n"
-msgstr "anahtar %08lX: \"%s\" yürürlükten kaldýrma sertifikasý alýndý\n"
-
-#: g10/import.c:1017
-#, c-format
-msgid "key %08lX: no user ID for signature\n"
-msgstr "anahtar %08lX: imza için kullanýcý kimliði yok\n"
-
-#: g10/import.c:1030
-#, c-format
-msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
-msgstr ""
-"anahtar %08lX: genel anahtar algoritmasý, kullanýcý kimliði \"%s\" için "
-"desteklenmiyor\n"
-
-#: g10/import.c:1032
-#, c-format
-msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
-msgstr "anahtar %08lX: kullanýcý kimliði \"%s\" için öz-imza geçersiz\n"
-
-#: g10/import.c:1047
-#, c-format
-msgid "key %08lX: no subkey for key binding\n"
-msgstr "anahtar %08lX: anahtarý garantilemek için yardýmcý anahtar yok\n"
-
-#: g10/import.c:1055 g10/import.c:1096
-#, c-format
-msgid "key %08lX: unsupported public key algorithm\n"
-msgstr "anahtar %08lX: genel anahtar algoritmasý desteklenmiyor\n"
-
-#: g10/import.c:1056
-#, c-format
-msgid "key %08lX: invalid subkey binding\n"
-msgstr "anahtar %08lX: yardýmcý anahtar garantileme geçersiz\n"
-
-#. Delete the last binding
-#. sig since this one is
-#. newer
-#: g10/import.c:1068
-#, c-format
-msgid "key %08lX: removed multiple subkey binding\n"
-msgstr "anahtar %08lX: çok sayýda yardýmcý anahtar baðlantýsý silindi\n"
-
-#: g10/import.c:1088
-#, c-format
-msgid "key %08lX: no subkey for key revocation\n"
-msgstr "anahtar %08lX: anahtarý yürürlükten kaldýrmak için yardýmcý anahtar yok\n"
-
-#: g10/import.c:1097
-#, c-format
-msgid "key %08lX: invalid subkey revocation\n"
-msgstr "anahtar %08lX: yardýmcý anahtar yürürlükten kaldýrmasý geçersiz\n"
-
-#. Delete the last revocation
-#. sig since this one is
-#. newer
-#: g10/import.c:1108
-#, c-format
-msgid "key %08lX: removed multiple subkey revocation\n"
-msgstr "anahtar %08lX: çok sayýda yardýmcý anahtar yürürlükten kaldýrmasý silindi\n"
-
-#: g10/import.c:1145
-#, c-format
-msgid "key %08lX: skipped user ID '"
-msgstr "anahtar %08lX: kullanýcý kimliði atlandý: '"
-
-#: g10/import.c:1168
-#, c-format
-msgid "key %08lX: skipped subkey\n"
-msgstr "anahtar %08lX: yardýmcý anahtar atlandý\n"
-
-#. here we violate the rfc a bit by still allowing
-#. * to import non-exportable signature when we have the
-#. * the secret key used to create this signature - it
-#. * seems that this makes sense
-#: g10/import.c:1194
-#, c-format
-msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
-msgstr "anahtar %08lX: imza gönderilebilir deðil (%02x sýnýfý) - atlandý\n"
-
-#: g10/import.c:1203
-#, c-format
-msgid "key %08lX: revocation certificate at wrong place - skipped\n"
-msgstr "anahtar %08lX: yürürlükten kaldýrma sertifikasý yanlýþ yerde - atlandý\n"
-
-#: g10/import.c:1220
-#, c-format
-msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
-msgstr "anahtar %08lX: yürürlükten kaldýrma sertifikasý geçersiz: %s - atlandý\n"
-
-#: g10/import.c:1232
-#, c-format
-msgid "key %08lX: subkey signature in wrong place - skipped\n"
-msgstr "anahtar %08lX: yardýmcý anahtar imzasý yanlýþ yerde - atlandý\n"
-
-#: g10/import.c:1330
-#, c-format
-msgid "key %08lX: duplicated user ID detected - merged\n"
-msgstr "anahtar %08lX: çift kullanýcý kimliði saptandý - katýþtýrýldý\n"
-
-#: g10/import.c:1389
-#, c-format
-msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
-msgstr ""
-"UYARI: anahtar %08lX yürürlükten kaldýrýlmýþ olmalý: yürürlükten kaldýrma "
-"anahtarý %08lX alýnýyor\n"
-
-#: g10/import.c:1403
-#, c-format
-msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
-msgstr ""
-"UYARI: anahtar %08lX yürürlükten kaldýrýlmýþ olabilir: yürürlükten kaldýrma "
-"anahtarý %08lX mevcut deðil.\n"
-
-#: g10/import.c:1460
-#, c-format
-msgid "key %08lX: \"%s\" revocation certificate added\n"
-msgstr "anahtar %08lX: \"%s\" yürürlükten kaldýrma sertifikasý eklendi\n"
-
-#: g10/import.c:1491
-#, c-format
-msgid "key %08lX: direct key signature added\n"
-msgstr "anahtar %08lX: doðrudan anahtar imzasý eklendi\n"
-
-#: g10/keyedit.c:147
-msgid "[revocation]"
-msgstr "[yürürlükten kaldýrma]"
-
-#: g10/keyedit.c:148
-msgid "[self-signature]"
-msgstr "[öz-imza]"
-
-#: g10/keyedit.c:219 g10/keylist.c:148
-msgid "1 bad signature\n"
-msgstr "1 kötü imza\n"
-
-#: g10/keyedit.c:221 g10/keylist.c:150
-#, c-format
-msgid "%d bad signatures\n"
-msgstr "%d kötü imza\n"
-
-#: g10/keyedit.c:223 g10/keylist.c:152
-msgid "1 signature not checked due to a missing key\n"
-msgstr "1 imza kayýp bir anahtar yüzünden kontrol edilmedi\n"
-
-#: g10/keyedit.c:225 g10/keylist.c:154
-#, c-format
-msgid "%d signatures not checked due to missing keys\n"
-msgstr "%d imza kayýp bir anahtar yüzünden kontrol edilmedi\n"
-
-#: g10/keyedit.c:227 g10/keylist.c:156
-msgid "1 signature not checked due to an error\n"
-msgstr "1 imza bir hata yüzünden kontrol edilmedi\n"
-
-#: g10/keyedit.c:229 g10/keylist.c:158
-#, c-format
-msgid "%d signatures not checked due to errors\n"
-msgstr "%d imza hatalardan dolayý kontrol edilmedi\n"
-
-#: g10/keyedit.c:231
-msgid "1 user ID without valid self-signature detected\n"
-msgstr "1 öz-imzasý geçersiz kullanýcý kimliði saptandý\n"
-
-#: g10/keyedit.c:233
-#, c-format
-msgid "%d user IDs without valid self-signatures detected\n"
-msgstr "%d öz-imzasý geçersiz kullanýcý kimliði saptandý\n"
-
-#: g10/keyedit.c:360
-#, c-format
-msgid "User ID \"%s\" is revoked."
-msgstr "Kullanýcý kimliði \"%s\" yürürlükten kaldýrýldý."
-
-#: g10/keyedit.c:367 g10/keyedit.c:484 g10/keyedit.c:542 g10/keyedit.c:1140
-msgid "Are you sure you still want to sign it? (y/N) "
-msgstr "Onu yine de imzalamak istiyor musunuz? (e/H) "
-
-#: g10/keyedit.c:375 g10/keyedit.c:490 g10/keyedit.c:1146
-msgid " Unable to sign.\n"
-msgstr " Ýmzalanamýyor.\n"
-
-#: g10/keyedit.c:380
-#, c-format
-msgid "WARNING: user ID \"%s\" is not self-signed.\n"
-msgstr "UYARI: kullanýcý kimliði \"%s\" öz-imzalý deðil.\n"
-
-#: g10/keyedit.c:399
-#, c-format
-msgid ""
-"The self-signature on \"%s\"\n"
-"is a PGP 2.x-style signature.\n"
-msgstr ""
-"\"%s\" üzerindeki öz-imza\n"
-"bir PGP 2.x tarzý imza.\n"
-
-#: g10/keyedit.c:408
-msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-msgstr "Bir OpenPGP öz-imzasý haline getirilmesini istiyor musunuz? (e/H) "
-
-#. It's a local sig, and we want to make a
-#. exportable sig.
-#: g10/keyedit.c:422
-#, c-format
-msgid ""
-"Your current signature on \"%s\"\n"
-"is a local signature.\n"
-msgstr ""
-"\"%s\" üzerindeki imzanýz\n"
-"dahili bir imza.\n"
-
-#: g10/keyedit.c:426
-msgid "Do you want to promote it to a full exportable signature? (y/N) "
-msgstr "Bu imzanýn dýþarda da geçerli hale getirilmesini istiyor musunuz? (e/H) "
-
-#: g10/keyedit.c:446
-#, c-format
-msgid "\"%s\" was already locally signed by key %08lX\n"
-msgstr "\"%s\" zaten %08lX anahtarýyla yerel olarak imzalanmýþ\n"
-
-#: g10/keyedit.c:450
-#, c-format
-msgid "\"%s\" was already signed by key %08lX\n"
-msgstr "\"%s\" zaten %08lX anahtarýyla imzalanmýþ\n"
-
-#: g10/keyedit.c:463
-#, c-format
-msgid "Nothing to sign with key %08lX\n"
-msgstr "%08lX anahtarý ile imzalanacak hiçbir þey yok\n"
-
-#: g10/keyedit.c:478
-msgid "This key has expired!"
-msgstr "Bu anahtarýn kullaným süresi dolmuþ!"
-
-#: g10/keyedit.c:498
-#, c-format
-msgid "This key is due to expire on %s.\n"
-msgstr "Bu anahtarýn geçerliliði %s de bitiyor.\n"
-
-#: g10/keyedit.c:502
-msgid "Do you want your signature to expire at the same time? (Y/n) "
-msgstr "Ýmzanýzýn da bu kadar süre geçerli olmasýný ister misiniz? (E/h) "
-
-#: g10/keyedit.c:535
-msgid ""
-"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-"mode.\n"
-msgstr ""
-"--pgp2 kipinde bir PGP 2.x anahtarlara bir OpenPGP imzasý "
-"uygulanamayabilir.\n"
-
-#: g10/keyedit.c:537
-msgid "This would make the key unusable in PGP 2.x.\n"
-msgstr "Bu, anahtarý PGP 2.x için kullanýþsýz yapacak.\n"
-
-#: g10/keyedit.c:560
-msgid ""
-"How carefully have you verified the key you are about to sign actually "
-"belongs\n"
-"to the person named above? If you don't know what to answer, enter \"0\".\n"
-msgstr ""
-"Bu anahtarýn ismi yukarda yazýlý kiþiye ait olduðunu ne kadar dikkatli\n"
-"doðruladýnýz? Bu sorunun cevabýný bilmiyorsanýz \"0\" yazýn.\n"
-
-#: g10/keyedit.c:564
-#, c-format
-msgid " (0) I will not answer.%s\n"
-msgstr " (0) Cevabý bilmiyorum. %s\n"
-
-#: g10/keyedit.c:566
-#, c-format
-msgid " (1) I have not checked at all.%s\n"
-msgstr " (1) Tamamen kontrol edildi.%s\n"
-
-#: g10/keyedit.c:568
-#, c-format
-msgid " (2) I have done casual checking.%s\n"
-msgstr " (2) Ýliþkisel denetim yaptým.%s\n"
-
-#: g10/keyedit.c:570
-#, c-format
-msgid " (3) I have done very careful checking.%s\n"
-msgstr " (3) Çok dikkatli bir denetim yaptým.%s\n"
-
-#: g10/keyedit.c:595
-msgid ""
-"Are you really sure that you want to sign this key\n"
-"with your key: \""
-msgstr ""
-"Bu anahtarý kendi anahtarýnýzla imzalamak istediðinize gerçekten\n"
-"emin misiniz?: \""
-
-#: g10/keyedit.c:604
-msgid ""
-"\n"
-"This will be a self-signature.\n"
-msgstr ""
-"\n"
-"Bu bir öz-imza olacak.\n"
-
-#: g10/keyedit.c:608
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"UYARI: imza dýþarý gönderilemez olarak imlenmeyecek.\n"
-
-#: g10/keyedit.c:613
-msgid ""
-"\n"
-"WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"UYARI: imza yürürlükten kaldýrýlamaz olarak imlenmeyecek.\n"
-
-#: g10/keyedit.c:620
-msgid ""
-"\n"
-"The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"Ýmza dýþarý gönderilemez olarak imlenecek.\n"
-
-#: g10/keyedit.c:624
-msgid ""
-"\n"
-"The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"Ýmza yürürlükten kaldýrýlamaz olarak imlenecek.\n"
-
-#: g10/keyedit.c:629
-msgid ""
-"\n"
-"I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Her þeyiyle bu anahtarý kontol edemedim.\n"
-
-#: g10/keyedit.c:633
-msgid ""
-"\n"
-"I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Bu anahtarý karþýlaþtýrmalý kontrol ettim.\n"
-
-#: g10/keyedit.c:637
-msgid ""
-"\n"
-"I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Bu anahtarý çok dikkatli kontrol ettim.\n"
-
-#: g10/keyedit.c:646
-msgid "Really sign? "
-msgstr "Gerçekten imzalayacak mýsýnýz? "
-
-#: g10/keyedit.c:688 g10/keyedit.c:3064 g10/keyedit.c:3126 g10/sign.c:308
-#, c-format
-msgid "signing failed: %s\n"
-msgstr "imzalama baþarýsýz: %s\n"
-
-#: g10/keyedit.c:744
-msgid "This key is not protected.\n"
-msgstr "Bu anahtar korunmamýþ.\n"
-
-#: g10/keyedit.c:748
-msgid "Secret parts of primary key are not available.\n"
-msgstr "Asýl anahtarýn gizli parçalarý kullanýlamaz.\n"
-
-#: g10/keyedit.c:752
-msgid "Key is protected.\n"
-msgstr "Anahtar korunmuþ.\n"
-
-#: g10/keyedit.c:772
-#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Bu anahtar üzerinde düzenleme yapýlamaz: %s\n"
-
-#: g10/keyedit.c:778
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Bu gizli anahtar için yeni anahtar parolasýný giriniz.\n"
-"\n"
-
-#: g10/keyedit.c:792
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Bir anahtar parolasý vermediniz - bu çok *kötü* bir fikir!\n"
-"\n"
-
-#: g10/keyedit.c:795
-msgid "Do you really want to do this? "
-msgstr "Gerçekten bunu yapmak istiyor musunuz? "
-
-#: g10/keyedit.c:859
-msgid "moving a key signature to the correct place\n"
-msgstr "bir anahtar imzasý doðru yere taþýnýyor\n"
-
-#: g10/keyedit.c:901
-msgid "quit this menu"
-msgstr "bu menüden çýk"
-
-#: g10/keyedit.c:902
-msgid "q"
-msgstr "k"
-
-#: g10/keyedit.c:903
-msgid "save"
-msgstr "kaydet"
-
-#: g10/keyedit.c:903
-msgid "save and quit"
-msgstr "kaydet ve çýk"
-
-#: g10/keyedit.c:904
-msgid "help"
-msgstr "yardým"
-
-#: g10/keyedit.c:904
-msgid "show this help"
-msgstr "bunu gösterir "
-
-#: g10/keyedit.c:906
-msgid "fpr"
-msgstr "piz"
-
-#: g10/keyedit.c:906
-msgid "show fingerprint"
-msgstr "parmak izini göster"
-
-#: g10/keyedit.c:907
-msgid "list"
-msgstr "listele"
-
-#: g10/keyedit.c:907
-msgid "list key and user IDs"
-msgstr "anahtarý ve kullanýcý kimliðini göster"
-
-#: g10/keyedit.c:908
-msgid "l"
-msgstr "l"
-
-#: g10/keyedit.c:909
-msgid "uid"
-msgstr "kullkim"
-
-#: g10/keyedit.c:909
-msgid "select user ID N"
-msgstr "N kullanýcý kimliðini seçer"
-
-#: g10/keyedit.c:910
-msgid "key"
-msgstr "anahtar"
-
-#: g10/keyedit.c:910
-msgid "select secondary key N"
-msgstr "N yardýmcý anahtarýný seçer"
-
-#: g10/keyedit.c:911
-msgid "check"
-msgstr "kontrol"
-
-#: g10/keyedit.c:911
-msgid "list signatures"
-msgstr "imzalarý listele"
-
-#: g10/keyedit.c:912
-msgid "c"
-msgstr "k"
-
-#: g10/keyedit.c:913
-msgid "sign"
-msgstr "imzala"
-
-#: g10/keyedit.c:913
-msgid "sign the key"
-msgstr "anahtarý imzalar"
-
-#: g10/keyedit.c:914
-msgid "s"
-msgstr "i"
-
-#: g10/keyedit.c:915
-msgid "lsign"
-msgstr "yimza"
-
-#: g10/keyedit.c:915
-msgid "sign the key locally"
-msgstr "anahtarý yerel olarak imzala"
-
-#: g10/keyedit.c:916
-msgid "nrsign"
-msgstr "yksýzimza"
-
-#: g10/keyedit.c:916
-msgid "sign the key non-revocably"
-msgstr "yürürlükten kaldýrýlamayan imza"
-
-#: g10/keyedit.c:917
-msgid "nrlsign"
-msgstr "içyksýzimza"
-
-#: g10/keyedit.c:917
-msgid "sign the key locally and non-revocably"
-msgstr "yürürlükten kaldýrýlamayan yerel imza"
-
-#: g10/keyedit.c:918
-msgid "debug"
-msgstr "hata ayýklama"
-
-#: g10/keyedit.c:919
-msgid "adduid"
-msgstr "kullkimEkle"
-
-#: g10/keyedit.c:919
-msgid "add a user ID"
-msgstr "bir kullanýcý kimliði ekler"
-
-#: g10/keyedit.c:920
-msgid "addphoto"
-msgstr "fotoekle"
-
-#: g10/keyedit.c:920
-msgid "add a photo ID"
-msgstr "bir foto kimliði ekler"
-
-#: g10/keyedit.c:921
-msgid "deluid"
-msgstr "kullkimSil"
-
-#: g10/keyedit.c:921
-msgid "delete user ID"
-msgstr "kullanýcý kimliðini siler"
-
-#. delphoto is really deluid in disguise
-#: g10/keyedit.c:923
-msgid "delphoto"
-msgstr "fotosil"
-
-#: g10/keyedit.c:924
-msgid "addkey"
-msgstr "anhEkle"
-
-#: g10/keyedit.c:924
-msgid "add a secondary key"
-msgstr "bir yardýmcý anahtar ekler"
-
-#: g10/keyedit.c:925
-msgid "delkey"
-msgstr "anhSil"
-
-#: g10/keyedit.c:925
-msgid "delete a secondary key"
-msgstr "bir yardýmcý anahtar siler"
-
-#: g10/keyedit.c:926
-msgid "addrevoker"
-msgstr "iptalEkle"
-
-#: g10/keyedit.c:926
-msgid "add a revocation key"
-msgstr "bir yürürlükten kaldýrma anahtarý ekler"
-
-#: g10/keyedit.c:927
-msgid "delsig"
-msgstr "imzaSil"
-
-#: g10/keyedit.c:927
-msgid "delete signatures"
-msgstr "imzalarý siler"
-
-#: g10/keyedit.c:928
-msgid "expire"
-msgstr "sontarih"
-
-#: g10/keyedit.c:928
-msgid "change the expire date"
-msgstr "son kullaným tarihini deðiþtirir"
-
-#: g10/keyedit.c:929
-msgid "primary"
-msgstr "asýl"
-
-#: g10/keyedit.c:929
-msgid "flag user ID as primary"
-msgstr "kullanýcý kimliðini asýl olarak imler"
-
-#: g10/keyedit.c:930
-msgid "toggle"
-msgstr "seçmece"
-
-#: g10/keyedit.c:930
-msgid "toggle between secret and public key listing"
-msgstr "genel ve gizli anahtar listeleri arasýnda yer deðiþtirir"
-
-#: g10/keyedit.c:932
-msgid "t"
-msgstr "b"
-
-#: g10/keyedit.c:933
-msgid "pref"
-msgstr "önayar"
-
-#: g10/keyedit.c:933
-msgid "list preferences (expert)"
-msgstr "tercihleri listeler (uzman)"
-
-#: g10/keyedit.c:934
-msgid "showpref"
-msgstr "tercihgöst"
-
-#: g10/keyedit.c:934
-msgid "list preferences (verbose)"
-msgstr "tercihleri listeler (ayrýntýlý)"
-
-#: g10/keyedit.c:935
-msgid "setpref"
-msgstr "tercihyap"
-
-#: g10/keyedit.c:935
-msgid "set preference list"
-msgstr "tercih listesi oluþturmak için"
-
-#: g10/keyedit.c:936
-msgid "updpref"
-msgstr "tercgüncel"
-
-#: g10/keyedit.c:936
-msgid "updated preferences"
-msgstr "güncelenmiþ tercihler"
-
-#: g10/keyedit.c:937
-msgid "passwd"
-msgstr "aparola"
-
-#: g10/keyedit.c:937
-msgid "change the passphrase"
-msgstr "anahtar parolasýný deðiþtirir"
-
-#: g10/keyedit.c:938
-msgid "trust"
-msgstr "güvence"
-
-#: g10/keyedit.c:938
-msgid "change the ownertrust"
-msgstr "sahibiningüvencesini deðiþtirir"
-
-#: g10/keyedit.c:939
-msgid "revsig"
-msgstr "imzayürkal"
-
-#: g10/keyedit.c:939
-msgid "revoke signatures"
-msgstr "imzalarý yürürlükten kaldýrýr"
-
-#: g10/keyedit.c:940
-msgid "revkey"
-msgstr "yürkalanh"
-
-#: g10/keyedit.c:940
-msgid "revoke a secondary key"
-msgstr "bir yardýmcý anahtarý yürürlükten kaldýrýr"
-
-#: g10/keyedit.c:941
-msgid "disable"
-msgstr "iptal"
-
-#: g10/keyedit.c:941
-msgid "disable a key"
-msgstr "bir anahtarý iptal eder"
-
-#: g10/keyedit.c:942
-msgid "enable"
-msgstr "kullan"
-
-#: g10/keyedit.c:942
-msgid "enable a key"
-msgstr "bir anahtarý kullanýma sokar"
-
-#: g10/keyedit.c:943
-msgid "showphoto"
-msgstr "fotogöst"
-
-#: g10/keyedit.c:943
-msgid "show photo ID"
-msgstr "foto kimliðini gösterir"
-
-#: g10/delkey.c:119 g10/keyedit.c:963
-msgid "can't do that in batchmode\n"
-msgstr "bu önceden belirlenmiþ iþlemler kipinde (in batchmode) yapýlamaz\n"
-
-#: g10/keyedit.c:1000
-#, c-format
-msgid "error reading secret keyblock `%s': %s\n"
-msgstr "gizli anahtar bloðu `%s' okunurken hata oluþtu: %s\n"
-
-#: g10/keyedit.c:1018
-msgid "Secret key is available.\n"
-msgstr "Gizli anahtar mevcut.\n"
-
-#: g10/keyedit.c:1049
-msgid "Command> "
-msgstr "Komut> "
-
-#: g10/keyedit.c:1081
-msgid "Need the secret key to do this.\n"
-msgstr "Bunu yapmak için gizli anahtar gerekli.\n"
-
-#: g10/keyedit.c:1085
-msgid "Please use the command \"toggle\" first.\n"
-msgstr "lütfen önce \"seçmece\" komutunu kullanýn.\n"
-
-#: g10/keyedit.c:1134
-msgid "Key is revoked."
-msgstr "Anahtar yürürlükten kaldýrýldý."
-
-#: g10/keyedit.c:1153
-msgid "Really sign all user IDs? "
-msgstr "Tüm kullanýcý kimlikleri gerçekten imzalanacak mý? "
-
-#: g10/keyedit.c:1154
-msgid "Hint: Select the user IDs to sign\n"
-msgstr "Ýpucu: Ýmzalamak için bir kullanýcý kimliði seçiniz\n"
-
-#: g10/keyedit.c:1179
-#, c-format
-msgid "This command is not allowed while in %s mode.\n"
-msgstr "%s kipindeyken bu komut kullanýlamaz.\n"
-
-#: g10/keyedit.c:1199 g10/keyedit.c:1220
-msgid "You must select at least one user ID.\n"
-msgstr "En az bir kullanýcý kimliði seçmelisiniz.\n"
-
-#: g10/keyedit.c:1201
-msgid "You can't delete the last user ID!\n"
-msgstr "Son kullanýcý kimliðini silemezsiniz!\n"
-
-#: g10/keyedit.c:1204
-msgid "Really remove all selected user IDs? "
-msgstr "Seçilen tüm kullanýcý kimlikleri gerçekten silinecek mi? "
-
-#: g10/keyedit.c:1205
-msgid "Really remove this user ID? "
-msgstr "Bu kullanýcý kimliði gerçekten silinecek mi? "
-
-#: g10/keyedit.c:1243 g10/keyedit.c:1280
-msgid "You must select at least one key.\n"
-msgstr "En az bir anahtar seçmelisiniz.\n"
-
-#: g10/keyedit.c:1247
-msgid "Do you really want to delete the selected keys? "
-msgstr "Seçilen anahtarlarý gerçekten silmek istiyor musunuz? "
-
-#: g10/keyedit.c:1248
-msgid "Do you really want to delete this key? "
-msgstr "Bu anahtarý gerçekten silmek istiyor musunuz? "
-
-#: g10/keyedit.c:1284
-msgid "Do you really want to revoke the selected keys? "
-msgstr "Seçilen anahtarlarý gerçekten yürürlükten kaldýrmak istiyor musunuz? "
-
-#: g10/keyedit.c:1285
-msgid "Do you really want to revoke this key? "
-msgstr "Bu anahtarý gerçekten yürürlükten kaldýrmak istiyor musunuz? "
-
-#: g10/keyedit.c:1354
-msgid "Really update the preferences for the selected user IDs? "
-msgstr ""
-"Seçilen kullanýcý kimlik için tercihleri gerçekten güncellemek istiyor "
-"musunuz? "
-
-#: g10/keyedit.c:1356
-msgid "Really update the preferences? "
-msgstr "Tercihleri gerçekten güncellemek istiyor musunuz? "
-
-#: g10/keyedit.c:1394
-msgid "Save changes? "
-msgstr "Deðiþiklikler kaydedilecek mi? "
-
-#: g10/keyedit.c:1397
-msgid "Quit without saving? "
-msgstr "Kaydetmeden çýkýlsýn mý? "
-
-#: g10/keyedit.c:1408
-#, c-format
-msgid "update failed: %s\n"
-msgstr "güncelleme baþarýsýz: %s\n"
-
-#: g10/keyedit.c:1415
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "gizliyi güncelleme baþarýsýz: %s\n"
-
-#: g10/keyedit.c:1422
-msgid "Key not changed so no update needed.\n"
-msgstr "Güncelleme gereði olmadýðýndan anahtar deðiþmedi.\n"
-
-#: g10/keyedit.c:1434
-msgid "Invalid command (try \"help\")\n"
-msgstr "Komut geçersiz (\"yardým\" komutunu deneyin)\n"
-
-#: g10/keyedit.c:1750
-#, c-format
-msgid "This key may be revoked by %s key "
-msgstr "Bu anahtar %s tarafýndan bu anahtarla yürürlükten kaldýrýlmýþ olabilir: "
-
-#: g10/keyedit.c:1754
-msgid " (sensitive)"
-msgstr " (duyarlý)"
-
-#. Note, we use the same format string as in other show
-#. functions to make the translation job easier.
-#: g10/keyedit.c:1760 g10/keyedit.c:1786 g10/keyedit.c:1871 g10/keyedit.c:1886
-#, c-format
-msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-msgstr "%s%c %4u%c/%08lX üretildi: %s son kullanma tarihi: %s"
-
-#: g10/keyedit.c:1769
-#, c-format
-msgid " trust: %c/%c"
-msgstr " güven derecesi: %c/%c"
-
-#: g10/keyedit.c:1773
-msgid "This key has been disabled"
-msgstr "Bu anahtar iptal edilmiþti"
-
-#: g10/keyedit.c:1802
-#, c-format
-msgid "rev! subkey has been revoked: %s\n"
-msgstr "yürkal! yardýmcý anahtar yürürlülükten kaldýrýldý: %s\n"
-
-#: g10/keyedit.c:1805
-msgid "rev- faked revocation found\n"
-msgstr "yürkal- sahte yürürlükten kaldýrma sertifikasý bulundu\n"
-
-#: g10/keyedit.c:1807
-#, c-format
-msgid "rev? problem checking revocation: %s\n"
-msgstr "yürkal? Yürürlükten kaldýrma denetlenirken problem: %s\n"
-
-#: g10/keyedit.c:1837
-msgid "There are no preferences on a PGP 2.x-style user ID.\n"
-msgstr "Bir PGP 2.x tarzý kullanýcý kimliðine uygun tercih yok.\n"
-
-#: g10/keyedit.c:1845
-msgid ""
-"Please note that the shown key validity is not necessarily correct\n"
-"unless you restart the program.\n"
-msgstr ""
-"Gösterilen anahtarýn, uygulamayý yeniden baþlatýncaya kadar, gerekli\n"
-"doðrulukta olmayacaðýný lütfen gözönüne alýnýz.\n"
-
-#: g10/keyedit.c:2001
-msgid ""
-"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
-"versions\n"
-" of PGP to reject this key.\n"
-msgstr ""
-"UYARI: Bu PGP-2 tarzý bir anahtar. Bir foto kimliði eklenmesi bu anahtarýn\n"
-" bazý PGP sürümleri tarafýndan reddedilmesi ile sonuçlanabilir.\n"
-
-#: g10/keyedit.c:2006
-msgid "Are you sure you still want to add it? (y/N) "
-msgstr "Onu yine de eklemek istiyor musunuz? (e/H) "
-
-#: g10/keyedit.c:2012
-msgid "You may not add a photo ID to a PGP2-style key.\n"
-msgstr "PGP2 tarzý bir anahtara bir foto kimliði ekleyemeyebilirsiniz.\n"
-
-#: g10/keyedit.c:2147
-msgid "Delete this good signature? (y/N/q)"
-msgstr "Bu doðru imza silinsin mi? (e/H/k)"
-
-#: g10/keyedit.c:2157
-msgid "Delete this invalid signature? (y/N/q)"
-msgstr "Bu geçersiz imza silinsin mi? (e/H/k)"
-
-#: g10/keyedit.c:2161
-msgid "Delete this unknown signature? (y/N/q)"
-msgstr "Bu bilinmeyen imza silinsin mi? (e/H/k)"
-
-#: g10/keyedit.c:2167
-msgid "Really delete this self-signature? (y/N)"
-msgstr "Bu öz-imza gerçekten silinecek mi? (e/H)"
-
-#: g10/keyedit.c:2181
-#, c-format
-msgid "Deleted %d signature.\n"
-msgstr "%d imza silindi.\n"
-
-#: g10/keyedit.c:2182
-#, c-format
-msgid "Deleted %d signatures.\n"
-msgstr "%d imza silindi.\n"
-
-#: g10/keyedit.c:2185
-msgid "Nothing deleted.\n"
-msgstr "Hiçbir þey silinmedi.\n"
-
-#: g10/keyedit.c:2281
-msgid "Enter the user ID of the designated revoker: "
-msgstr "Tasarlanan yürürlükten kaldýrma anahtarýnýn kullanýcý kimliðini giriniz: "
-
-#: g10/keyedit.c:2296
-msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-msgstr ""
-"bir PGP 2.x tarzý anahtar bir tasarlanmýþ yürürlükten kaldýrma anahtarý olarak "
-"atanamaz\n"
-
-#. This actually causes no harm (after all, a key that
-#. designates itself as a revoker is the same as a
-#. regular key), but it's easy enough to check.
-#: g10/keyedit.c:2306
-msgid "you cannot appoint a key as its own designated revoker\n"
-msgstr "bir anahtarý kendisini yürürlükten kaldýracak anahtar olarak kullanamazsýnýz\n"
-
-#: g10/keyedit.c:2393
-msgid "Please remove selections from the secret keys.\n"
-msgstr "Lütfen gizli anahtarlardan seçilenleri silin.\n"
-
-#: g10/keyedit.c:2399
-msgid "Please select at most one secondary key.\n"
-msgstr "Lütfen en fazla bir yardýmcý anahtar seçin.\n"
-
-#: g10/keyedit.c:2403
-msgid "Changing expiration time for a secondary key.\n"
-msgstr "Bir yardýmcý anahtar için son kullanma tarihi deðiþtiriliyor.\n"
-
-#: g10/keyedit.c:2405
-msgid "Changing expiration time for the primary key.\n"
-msgstr "Asýl anahtar için son kullanma tarihi deðiþtiriliyor.\n"
-
-#: g10/keyedit.c:2447
-msgid "You can't change the expiration date of a v3 key\n"
-msgstr "Bir v3 anahtarýnýn son kullanma tarihini deðiþtiremezsiniz\n"
-
-#: g10/keyedit.c:2463
-msgid "No corresponding signature in secret ring\n"
-msgstr "Gizli anahtar demetinde uygun/benzer imza yok\n"
-
-#: g10/keyedit.c:2546
-msgid "Please select exactly one user ID.\n"
-msgstr "Lütfen sadece ve sadece bir kullanýcý kimlik seçiniz.\n"
-
-#: g10/keyedit.c:2583 g10/keyedit.c:2690
-#, c-format
-msgid "skipping v3 self-signature on user id \"%s\"\n"
-msgstr "kullanýcý kimliði \"%s\" için v3 öz-imzasý atlanýyor\n"
-
-#: g10/keyedit.c:2750
-#, c-format
-msgid "No user ID with index %d\n"
-msgstr "%d endeksine sahip kullanýcý kimliði yok\n"
-
-#: g10/keyedit.c:2796
-#, c-format
-msgid "No secondary key with index %d\n"
-msgstr "%d endeksine sahip yardýmcý anahtar yok\n"
-
-#: g10/keyedit.c:2910
-msgid "user ID: \""
-msgstr "Kullanýcý kimliði: \""
-
-#: g10/keyedit.c:2915
-#, c-format
-msgid ""
-"\"\n"
-"signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-" %08lX anahtarýnýzla %s de imzalandý\n"
-
-#: g10/keyedit.c:2918
-#, c-format
-msgid ""
-"\"\n"
-"locally signed with your key %08lX at %s\n"
-msgstr ""
-"\"\n"
-"%08lX anahtarýnýzla %s de yerel olarak imzalý\n"
-
-#: g10/keyedit.c:2923
-#, c-format
-msgid "This signature expired on %s.\n"
-msgstr "Bu anahtarýn geçerliliði %s de bitti.\n"
-
-#: g10/keyedit.c:2927
-msgid "Are you sure you still want to revoke it? (y/N) "
-msgstr "Onu yine de yürürlükten kaldýrmak istiyor musunuz? (e/H) "
-
-#: g10/keyedit.c:2931
-msgid "Create a revocation certificate for this signature? (y/N) "
-msgstr "Bu imza için bir yürürlükten kaldýrma sertifikasý oluþturulsun mu? (e/H) "
-
-#. FIXME: detect duplicates here
-#: g10/keyedit.c:2956
-msgid "You have signed these user IDs:\n"
-msgstr "Bu kullanýcý kimliklerini imzalamýþsýnýz:\n"
-
-#: g10/keyedit.c:2975
-#, c-format
-msgid " signed by %08lX at %s%s%s\n"
-msgstr " %08lX ile %s%s%s de imzalanmýþ\n"
-
-#: g10/keyedit.c:2983
-#, c-format
-msgid " revoked by %08lX at %s\n"
-msgstr " %08lX tarafýndan %s de yürürlükten kaldýrýlmýþ\n"
-
-#: g10/keyedit.c:3003
-msgid "You are about to revoke these signatures:\n"
-msgstr "Bu imzalarý yürürlükten kaldýrmak üzeresiniz:\n"
-
-#: g10/keyedit.c:3013
-#, c-format
-msgid " signed by %08lX at %s%s\n"
-msgstr " %08lX ile %s%s de imzalanmýþ\n"
-
-#: g10/keyedit.c:3015
-msgid " (non-exportable)"
-msgstr " (dýþarda geçersiz)"
-
-#: g10/keyedit.c:3022
-msgid "Really create the revocation certificates? (y/N) "
-msgstr "Bu yürürlükten kaldýrma sertifikalarýný gerçekten oluþturacak mýsýnýz? (e/H) "
-
-#: g10/keyedit.c:3052
-msgid "no secret key\n"
-msgstr "gizli anahtar yok\n"
-
-#: g10/keyedit.c:3207
-#, c-format
-msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
-msgstr ""
-"Anahtar 0x%3$08lX (kull-kiml %4$d) için %2$ld uzunluktaki %1$s foto kimliði "
-"gösteriliyor\n"
-
-#: g10/keylist.c:91
-msgid "Critical signature policy: "
-msgstr "Kritik imza guvencesi: "
-
-#: g10/keylist.c:93
-msgid "Signature policy: "
-msgstr "imza guvencesi: "
-
-#: g10/keylist.c:118 g10/keylist.c:141 g10/mainproc.c:768 g10/mainproc.c:777
-msgid "WARNING: invalid notation data found\n"
-msgstr "UYARI: geçersiz niteleme verisi bulundu\n"
-
-#: g10/keylist.c:127
-msgid "Critical signature notation: "
-msgstr "Kritik imza niteleyici: "
-
-#: g10/keylist.c:129
-msgid "Signature notation: "
-msgstr "imza niteleyici: "
-
-#: g10/keylist.c:136
-msgid "not human readable"
-msgstr "insan okuyabilir deðil"
-
-#: g10/keylist.c:225
-msgid "Keyring"
-msgstr "Anahtar Zinciri"
-
-#. of subkey
-#: g10/keylist.c:478 g10/mainproc.c:904
-#, c-format
-msgid " [expires: %s]"
-msgstr "[son kullanma tarihi: %s]"
-
-#: g10/keylist.c:1001
-msgid "Primary key fingerprint:"
-msgstr "Birincil anahtar parmak izi:"
-
-#: g10/keylist.c:1003
-msgid " Subkey fingerprint:"
-msgstr "Yardýmcý anahtar parmak izi:"
-
-#: g10/keylist.c:1010
-msgid " Primary key fingerprint:"
-msgstr "Birincil anahtar parmak izi:"
-
-#: g10/keylist.c:1012
-msgid " Subkey fingerprint:"
-msgstr "Yardýmcý anahtar parmak izi:"
-
-#. use tty
-#: g10/keylist.c:1016 g10/keylist.c:1020
-msgid " Key fingerprint ="
-msgstr " Anahtar parmak izi ="
-
-#: g10/mainproc.c:248
-#, c-format
-msgid "weird size for an encrypted session key (%d)\n"
-msgstr "bir þifreli oturum anahtarý (%d) için tuhaf uzunluk\n"
-
-#: g10/mainproc.c:258
-#, c-format
-msgid "invalid symkey algorithm detected (%d)\n"
-msgstr "geçersiz symkey algoritmasý saptandý (%d)\n"
-
-#: g10/encr-data.c:66 g10/mainproc.c:287
-#, c-format
-msgid "%s encrypted data\n"
-msgstr "%s þifreli veri\n"
-
-#: g10/encr-data.c:68 g10/mainproc.c:289
-#, c-format
-msgid "encrypted with unknown algorithm %d\n"
-msgstr "bilinmeyen algoritma %d ile þifrelenmiþ\n"
-
-#: g10/mainproc.c:317
-#, c-format
-msgid "public key is %08lX\n"
-msgstr "genel anahtar: %08lX\n"
-
-#: g10/mainproc.c:363
-msgid "public key encrypted data: good DEK\n"
-msgstr "genel anahtarla þifreli veri: doðru DEK\n"
-
-#: g10/mainproc.c:415
-#, c-format
-msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
-msgstr ""
-"%u bitlik %s anahtarý ve kullanýcý kimliði\n"
-"%08lX ile þifrelendi, %s oluþturuldu\n"
-
-#: g10/mainproc.c:425
-#, c-format
-msgid "encrypted with %s key, ID %08lX\n"
-msgstr "%s anahtarý ve %08lX kullanýcý kimliði ile þifrelendi\n"
-
-#: g10/mainproc.c:439
-#, c-format
-msgid "public key decryption failed: %s\n"
-msgstr "genel anahtar þifre çözümü baþarýsýz: %s\n"
-
-#: g10/mainproc.c:466 g10/mainproc.c:485
-#, c-format
-msgid "assuming %s encrypted data\n"
-msgstr "%s þifreli veri varsayýlýyor\n"
-
-#: g10/mainproc.c:473
-#, c-format
-msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
-msgstr "IDEA þifre kullanýþsýz, iyimserlikle yerine %s kullanýlmaya çalýþýlýyor\n"
-
-#: g10/mainproc.c:503
-msgid "decryption okay\n"
-msgstr "Þifre çözme tamam\n"
-
-#: g10/mainproc.c:510
-msgid "WARNING: encrypted message has been manipulated!\n"
-msgstr "UYARI: þifreli ileti tahrip edilmiþ!\n"
-
-#: g10/mainproc.c:516
-#, c-format
-msgid "decryption failed: %s\n"
-msgstr "þifre çözme baþarýsýz: %s\n"
-
-#: g10/mainproc.c:535
-msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
-msgstr "BÝLGÝ: gönderen \"yalnýz-gözleriniz-için\" ricasýnda bulundu\n"
-
-#: g10/mainproc.c:537
-#, c-format
-msgid "original file name='%.*s'\n"
-msgstr "özgün dosya adý = '%.*s'\n"
-
-#: g10/mainproc.c:712
-msgid "standalone revocation - use \"gpg --import\" to apply\n"
-msgstr "tek baþýna yürürlükten kaldýrma - uygulamak için \"gpg --import\" kullanýn\n"
-
-#: g10/mainproc.c:780
-msgid "Notation: "
-msgstr "Niteleme: "
-
-#: g10/mainproc.c:792
-msgid "Policy: "
-msgstr "Güvence: "
-
-#: g10/mainproc.c:1247
-msgid "signature verification suppressed\n"
-msgstr "imza doðrulama engellendi\n"
-
-#. plaintext before signatures but no one-pass packets
-#: g10/mainproc.c:1289 g10/mainproc.c:1299
-msgid "can't handle these multiple signatures\n"
-msgstr "bu çoklu imzalar elde edilemiyor\n"
-
-#: g10/mainproc.c:1310
-#, c-format
-msgid "Signature made %.*s using %s key ID %08lX\n"
-msgstr "%.*s imzasý, %s anahtarý ve %08lX kullanýcý kimliði ile yapýldý\n"
-
-#: g10/mainproc.c:1359 g10/mainproc.c:1392
-msgid "BAD signature from \""
-msgstr "KÖTÜ imza: \""
-
-#: g10/mainproc.c:1360 g10/mainproc.c:1393
-msgid "Expired signature from \""
-msgstr "Kullaným tarihi geçmiþ imza: \""
-
-#: g10/mainproc.c:1361 g10/mainproc.c:1394
-msgid "Good signature from \""
-msgstr "Doðru imza: \""
-
-#: g10/mainproc.c:1396
-msgid "[uncertain]"
-msgstr "[þüpheli]"
-
-#: g10/mainproc.c:1427
-msgid " aka \""
-msgstr " den \""
-
-#: g10/mainproc.c:1488
-#, c-format
-msgid "Can't check signature: %s\n"
-msgstr "Ýmza kontrol edilemedi: %s\n"
-
-#: g10/mainproc.c:1557 g10/mainproc.c:1573 g10/mainproc.c:1635
-msgid "not a detached signature\n"
-msgstr "bir baðýmsýz imza deðil\n"
-
-#: g10/mainproc.c:1584
-#, c-format
-msgid "standalone signature of class 0x%02x\n"
-msgstr "0x%02x sýnýfý tek baþýna imza\n"
-
-#: g10/mainproc.c:1641
-msgid "old style (PGP 2.x) signature\n"
-msgstr "eski stil (PGP 2.x) imza\n"
-
-#: g10/mainproc.c:1648
-msgid "invalid root packet detected in proc_tree()\n"
-msgstr "proc_tree() içinde geçersiz kök paket saptandý\n"
-
-#: g10/misc.c:98
-#, c-format
-msgid "can't disable core dumps: %s\n"
-msgstr "\"core\" oluþumu iptal edilemedi: %s\n"
-
-#: g10/misc.c:162
-msgid "Experimental algorithms should not be used!\n"
-msgstr "Deneysel algoritmalar kullanýlmamalý!\n"
-
-#: g10/misc.c:192
-msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
-msgstr "bu þifre algoritmasý standart dýþý; lütfen daha standart birini kullanýn!\n"
-
-#: g10/misc.c:300
-msgid "the IDEA cipher plugin is not present\n"
-msgstr "IDEA þifre eklentisi yok\n"
-
-#: g10/misc.c:301
-msgid "please see http://www.gnupg.org/why-not-idea.html for more information\n"
-msgstr ""
-"Daha fazla bilgi için lütfen http://www.gnupg.org/why-not-idea.html "
-"adresine\n"
-"bakýnýz.\n"
-
-#: g10/misc.c:509
-#, c-format
-msgid "%s:%d: deprecated option \"%s\"\n"
-msgstr "%s:%d: \"%s\" seçeneði kullanýmdan kaldýrýlmak üzere.\n"
-
-#: g10/misc.c:513
-#, c-format
-msgid "WARNING: \"%s\" is a deprecated option\n"
-msgstr "UYARI: %s seçeneði kullanýmdan kaldýrýlmak üzere.\n"
-
-#: g10/misc.c:515
-#, c-format
-msgid "please use \"%s%s\" instead\n"
-msgstr "lütfen yerine \"%s%s\" kullanýnýz\n"
-
-#: g10/parse-packet.c:120
-#, c-format
-msgid "can't handle public key algorithm %d\n"
-msgstr "%d genel anahtar algoritmasý kullanýlamadý\n"
-
-#: g10/parse-packet.c:1065
-#, c-format
-msgid "subpacket of type %d has critical bit set\n"
-msgstr "%d tipi alt paket kritik bit kümesine sahip\n"
-
-#: g10/passphrase.c:442 g10/passphrase.c:489
-msgid "gpg-agent is not available in this session\n"
-msgstr "gpg-agent bu oturumda kullanýlamaz\n"
-
-#: g10/passphrase.c:450
-msgid "can't set client pid for the agent\n"
-msgstr "istemci pid'i belirlenemiyor\n"
-
-#: g10/passphrase.c:458
-msgid "can't get server read FD for the agent\n"
-msgstr "sunucu okuma dosya tanýtýcýsý alýnamadý\n"
-
-#: g10/passphrase.c:465
-msgid "can't get server write FD for the agent\n"
-msgstr "sunucu yazma dosya tanýtýcýsý alýnamadý\n"
-
-#: g10/passphrase.c:498
-msgid "malformed GPG_AGENT_INFO environment variable\n"
-msgstr "GPG_AGENT_INFO çevre deðiþkeni hatalý\n"
-
-#: g10/passphrase.c:511
-#, c-format
-msgid "gpg-agent protocol version %d is not supported\n"
-msgstr "gpg-agent protokolü sürüm %d desteklenmiyor\n"
-
-#: g10/hkp.c:151 g10/passphrase.c:532
-#, c-format
-msgid "can't connect to `%s': %s\n"
-msgstr "\"%s\" sunucusuna baðlanýlamadý: %s\n"
-
-#: g10/passphrase.c:554
-msgid "communication problem with gpg-agent\n"
-msgstr "gpg-agent ile haberleþme problemi\n"
-
-#: g10/passphrase.c:561 g10/passphrase.c:811 g10/passphrase.c:919
-msgid "problem with the agent - disabling agent use\n"
-msgstr "vekil ile problem - vekil kullanýmý iptal ediliyor\n"
-
-#: g10/passphrase.c:631 g10/passphrase.c:1017
-#, c-format
-msgid " (main key ID %08lX)"
-msgstr " (asýl anahtar kimliði %08lX)"
-
-#: g10/passphrase.c:641
-#, c-format
-msgid ""
-"You need a passphrase to unlock the secret key for user:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
-msgstr ""
-"\"%.*s\"\n"
-"kullanýcýsýnýn gizli anahtarýný açacak bir anahtar parolasýna ihtiyaç var.\n"
-"%u bitlik %s anahtarý, kimlik %08lX, oluþturulan %s%s\n"
-
-#: g10/passphrase.c:662
-msgid "Enter passphrase\n"
-msgstr "Anahtar parolasýný giriniz\n"
-
-#: g10/passphrase.c:664
-msgid "Repeat passphrase\n"
-msgstr "Parolayý tekrar yazýnýz\n"
-
-#: g10/passphrase.c:705
-msgid "passphrase too long\n"
-msgstr "Parola çok uzun\n"
-
-#: g10/passphrase.c:718
-msgid "invalid response from agent\n"
-msgstr "yanýt geçersiz\n"
-
-#: g10/passphrase.c:727 g10/passphrase.c:808
-msgid "cancelled by user\n"
-msgstr "kullanýcý tarafýndan durduruldu\n"
-
-#: g10/passphrase.c:729 g10/passphrase.c:890
-#, c-format
-msgid "problem with the agent: agent returns 0x%lx\n"
-msgstr "vekil ile sorun var: vekil 0x%lx ile sonuçlandý\n"
-
-#: g10/passphrase.c:1003
-msgid ""
-"\n"
-"You need a passphrase to unlock the secret key for\n"
-"user: \""
-msgstr ""
-"\n"
-"Gizli anahtarýn kilidini açmak için bir anahtar parolasýna ihtiyacýnýz var.\n"
-"Anahtarýn sahibi: \""
-
-#: g10/passphrase.c:1012
-#, c-format
-msgid "%u-bit %s key, ID %08lX, created %s"
-msgstr "%u bitlik %s anahtarý, kimlik: %08lX, oluþturuldu %s"
-
-#: g10/passphrase.c:1063
-msgid "can't query password in batchmode\n"
-msgstr "önceden tanýmlanmýþ iþlemler kipinde (batchmode) parola sorgulanamaz\n"
-
-#: g10/passphrase.c:1067
-msgid "Enter passphrase: "
-msgstr "Anahtar parolasýný girin: "
-
-#: g10/passphrase.c:1071
-msgid "Repeat passphrase: "
-msgstr "Tekrar: "
-
-#: g10/plaintext.c:67
-msgid "data not saved; use option \"--output\" to save it\n"
-msgstr "veri kaydedilmedi; kaydetmek için \"--output\" seçeneðini kullanýn\n"
-
-#: g10/plaintext.c:108
-#, c-format
-msgid "error creating `%s': %s\n"
-msgstr "`%s' oluþturulurken hata: %s\n"
-
-#: g10/plaintext.c:337
-msgid "Detached signature.\n"
-msgstr "Baðýmsýz imza.\n"
-
-#: g10/plaintext.c:341
-msgid "Please enter name of data file: "
-msgstr "Lütfen veri dosyasýnýn ismini girin: "
-
-#: g10/plaintext.c:362
-msgid "reading stdin ...\n"
-msgstr "standart girdiden okuyor ...\n"
-
-#: g10/plaintext.c:396
-msgid "no signed data\n"
-msgstr "imzalý veri yok\n"
-
-#: g10/plaintext.c:404
-#, c-format
-msgid "can't open signed data `%s'\n"
-msgstr "imzalý veri '%s' açýlamadý\n"
-
-#: g10/pubkey-enc.c:101
-#, c-format
-msgid "anonymous recipient; trying secret key %08lX ...\n"
-msgstr "anonim alýcý: %08lX gizli anahtarý deneniyor ...\n"
-
-#: g10/pubkey-enc.c:107
-msgid "okay, we are the anonymous recipient.\n"
-msgstr "tamam, biz anonim alýcýyýz.\n"
-
-#: g10/pubkey-enc.c:159
-msgid "old encoding of the DEK is not supported\n"
-msgstr "DEK'in eski kodlamasý desteklenmiyor\n"
-
-#: g10/pubkey-enc.c:178
-#, c-format
-msgid "cipher algorithm %d%s is unknown or disabled\n"
-msgstr "þifre algoritmasý %d%s bilinmiyor ya da iptal edilmiþ\n"
-
-#: g10/pubkey-enc.c:221
-#, c-format
-msgid "NOTE: cipher algorithm %d not found in preferences\n"
-msgstr "BÝLGÝ: %d þifre algoritmasý tercihlerde bulunamadý\n"
-
-#: g10/pubkey-enc.c:243
-#, c-format
-msgid "NOTE: secret key %08lX expired at %s\n"
-msgstr "BÝLGÝ: %08lX gizli anahtarýnýn %s tarihinde kullaným süresi doldu\n"
-
-#: g10/pubkey-enc.c:249
-msgid "NOTE: key has been revoked"
-msgstr "BÝLGÝ: anahtar yürürlükten kaldýrýlmýþtý"
-
-#: g10/hkp.c:71
-#, c-format
-msgid "requesting key %08lX from %s\n"
-msgstr "%08lX anahtarý %s adresinden isteniyor\n"
-
-#: g10/hkp.c:96
-#, c-format
-msgid "can't get key from keyserver: %s\n"
-msgstr "anahtar sunucusunun %s adresinden anahtar alýnamadý\n"
-
-#: g10/hkp.c:175
-#, c-format
-msgid "error sending to `%s': %s\n"
-msgstr "\"%s\" adresine gönderme hatasý: %s\n"
-
-#: g10/hkp.c:190
-#, c-format
-msgid "success sending to `%s' (status=%u)\n"
-msgstr "\"%s\" adresine gönderme iþlemi baþarýlý (durum=%u)\n"
-
-#: g10/hkp.c:193
-#, c-format
-msgid "failed sending to `%s': status=%u\n"
-msgstr "\"%s\" adresine gönderme iþlemi baþarýsýz (durum=%u)\n"
-
-#: g10/hkp.c:363
-msgid "this keyserver is not fully HKP compatible\n"
-msgstr "bu anahtar sunucusu tamamen HKP uyumlu deðil\n"
-
-#: g10/hkp.c:515
-#, c-format
-msgid "searching for \"%s\" from HKP server %s\n"
-msgstr "HKP sunucusunun %2$s adresinde \"%1$s\" aranýyor\n"
-
-#: g10/hkp.c:565
-#, c-format
-msgid "can't search keyserver: %s\n"
-msgstr "anahtar sunucusu aranamýyor: %s\n"
-
-#: g10/seckey-cert.c:53
-msgid "secret key parts are not available\n"
-msgstr "gizli anahtar parçalarý kullaným dýþý\n"
-
-#: g10/seckey-cert.c:59
-#, c-format
-msgid "protection algorithm %d%s is not supported\n"
-msgstr "koruma algoritmasý %d%s desteklenmiyor\n"
-
-#: g10/seckey-cert.c:224
-msgid "Invalid passphrase; please try again"
-msgstr "Anahtar parolasý geçersiz; lütfen tekrar deneyin"
-
-#: g10/seckey-cert.c:225
-#, c-format
-msgid "%s ...\n"
-msgstr "%s ...\n"
-
-#: g10/seckey-cert.c:282
-msgid "WARNING: Weak key detected - please change passphrase again.\n"
-msgstr ""
-"UYARI: Zayýf anahtar saptandý - lütfen anahtar parolasýný tekrar "
-"deðiþtirin.\n"
-
-#: g10/seckey-cert.c:320
-msgid "generating the deprecated 16-bit checksum for secret key protection\n"
-msgstr ""
-"gizli anahtarýn güvenliði için eski tarz 16 bitlik saðlama toplamý "
-"üretiliyor\n"
-
-#: g10/sig-check.c:73
-msgid "WARNING: signature digest conflict in message\n"
-msgstr "UYARI: iletideki imza özümlemesi çeliþkili\n"
-
-#: g10/sig-check.c:215
-#, c-format
-msgid ""
-"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-"signatures!\n"
-msgstr "key %08lX: bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal anahtarý!\n"
-
-#: g10/sig-check.c:224
-#, c-format
-msgid "public key %08lX is %lu second newer than the signature\n"
-msgstr "genel anahtar %08lX imzadan %lu saniye daha yeni\n"
-
-#: g10/sig-check.c:225
-#, c-format
-msgid "public key %08lX is %lu seconds newer than the signature\n"
-msgstr "genel anahtar %08lX imzadan %lu saniye daha yeni.\n"
-
-#: g10/sig-check.c:234
-#, c-format
-msgid ""
-"key %08lX has been created %lu second in future (time warp or clock "
-"problem)\n"
-msgstr "anahtar %08lX %lu saniye sonra üretilmiþ (zaman sapmasý veya saat problemi)\n"
-
-#: g10/sig-check.c:236
-#, c-format
-msgid ""
-"key %08lX has been created %lu seconds in future (time warp or clock "
-"problem)\n"
-msgstr ""
-"anahtar %08lX bundan %lu saniye sonra üretilmiþ (zaman sapmasý veya saat "
-"problemi)\n"
-
-#: g10/sig-check.c:249
-#, c-format
-msgid "NOTE: signature key %08lX expired %s\n"
-msgstr "BÝLGÝ: %08lX imza anahtarýnýn kullaným süresi %s tarihinde dolmuþ\n"
-
-#: g10/sig-check.c:348
-#, c-format
-msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
-msgstr ""
-"Hatalý imzanýn bilinmeyen bir kritik bitten dolayý %08lX anahtarýndan "
-"kaynaklandýðý sanýlýyor\n"
-
-#: g10/sign.c:103
-
-msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
-msgstr ""
-"UYARI: %%-geniþletmesi imkansýz (çok büyük).\n"
-"Uzatýlmadan kullanýlýyor.\n"
-
-#: g10/sign.c:151
-#, c-format
-msgid "WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
-msgstr ""
-"UYARI: güvence adresinin uzatýlmasý imkansýz (çok büyük).\n"
-"Uzatýlmadan kullanýlýyor.\n"
-
-#: g10/sign.c:303
-#, c-format
-msgid "checking created signature failed: %s\n"
-msgstr "oluþturulan imzanýn denetimi baþarýsýz: %s\n"
-
-#: g10/sign.c:312
-#, c-format
-msgid "%s signature from: \"%s\"\n"
-msgstr "%s imza: \"%s\"den\n"
-
-#: g10/sign.c:461
-#, c-format
-msgid "WARNING: `%s' is an empty file\n"
-msgstr "UYARI: \"%s\" dosyasý boþ\n"
-
-#: g10/sign.c:644
-msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "--pgp2 kipinde sadece PGP 2.x tarzý anahtarlarla ayýrma imzalamasý yapabilirsiniz\n"
-
-#: g10/sign.c:665 g10/sign.c:892
-#, c-format
-msgid "can't create %s: %s\n"
-msgstr "%s oluþturulamýyor: %s\n"
-
-#: g10/sign.c:690
-#, c-format
-msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
-msgstr "alýcýnýn tercihleriyle çeliþen %s (%d) özümleme algoritmasý kullanýmý zorlanýyor\n"
-
-#: g10/sign.c:784
-msgid "signing:"
-msgstr "imzalanýyor:"
-
-#: g10/sign.c:876
-msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-msgstr "--pgp2 kipinde sadece PGP 2.x tarzý anahtarlarla temiz imzalama yapabilirsiniz\n"
-
-#: g10/sign.c:1029
-#, c-format
-msgid "%s encryption will be used\n"
-msgstr "%s þifrelemesi kullanýlmayacak\n"
-
-#: g10/textfilter.c:134
-#, c-format
-msgid "can't handle text lines longer than %d characters\n"
-msgstr "%d karakterden daha uzun metin satýrlarý okunamýyor\n"
-
-#: g10/textfilter.c:231
-#, c-format
-msgid "input line longer than %d characters\n"
-msgstr "girdi satýrý %d karakterden daha uzun\n"
-
-#: g10/tdbio.c:128 g10/tdbio.c:1387
-#, c-format
-msgid "trustdb rec %lu: lseek failed: %s\n"
-msgstr "güvence veritabaný %lu kaydý: eriþim baþarýsýz: %s\n"
-
-#: g10/tdbio.c:134 g10/tdbio.c:1394
-#, c-format
-msgid "trustdb rec %lu: write failed (n=%d): %s\n"
-msgstr "güvence veritabaný %lu kaydý: yazma baþarýsýz (n=%d): %s\n"
-
-#: g10/tdbio.c:244
-msgid "trustdb transaction too large\n"
-msgstr "güvence veritabaný iþlemi çok uzun\n"
-
-#: g10/tdbio.c:459
-#, c-format
-msgid "%s: can't access: %s\n"
-msgstr "%s: eriþilemedi: %s\n"
-
-#: g10/tdbio.c:474
-#, c-format
-msgid "%s: directory does not exist!\n"
-msgstr "%s: dizin yok!\n"
-
-#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
-#, c-format
-msgid "%s: can't create lock\n"
-msgstr "%s: kilit oluþturulamadý\n"
-
-#: g10/tdbio.c:486 g10/tdbio.c:548
-#, c-format
-msgid "%s: can't make lock\n"
-msgstr "%s: kilitleme yapýlamadý\n"
-
-#: g10/keyring.c:1448 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
-#, c-format
-msgid "%s: can't create: %s\n"
-msgstr "%s: oluþturulamadý: %s\n"
-
-#: g10/tdbio.c:507
-#, c-format
-msgid "%s: failed to create version record: %s"
-msgstr "%s: sürüm kaydý oluþturmada baþarýsýz: %s"
-
-#: g10/tdbio.c:511
-#, c-format
-msgid "%s: invalid trustdb created\n"
-msgstr "%s: geçersiz güvence veritabaný oluþturuldu\n"
-
-#: g10/tdbio.c:514
-#, c-format
-msgid "%s: trustdb created\n"
-msgstr "%s: güvence veritabaný oluþturuldu\n"
-
-#: g10/tdbio.c:554
-msgid "NOTE: trustdb not writable\n"
-msgstr "BÝLGÝ: güvence veritabanýna yazýlamýyor\n"
-
-#: g10/tdbio.c:570
-#, c-format
-msgid "%s: invalid trustdb\n"
-msgstr "%s: güvence veritabaný geçersiz\n"
-
-#: g10/tdbio.c:602
-#, c-format
-msgid "%s: failed to create hashtable: %s\n"
-msgstr "%s: nitelemeli tablo oluþturulamadý: %s\n"
-
-#: g10/tdbio.c:610
-#, c-format
-msgid "%s: error updating version record: %s\n"
-msgstr "%s: sürüm kaydýnýn güncellenmesinde hata: %s\n"
-
-#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
-#: g10/tdbio.c:1320 g10/tdbio.c:1347
-#, c-format
-msgid "%s: error reading version record: %s\n"
-msgstr "%s: sürüm kaydýnýn okunmasýnda hata: %s\n"
-
-#: g10/tdbio.c:639 g10/tdbio.c:685
-#, c-format
-msgid "%s: error writing version record: %s\n"
-msgstr "%s: sürüm kaydýnýn yazýlmasýnda hata: %s\n"
-
-#: g10/tdbio.c:1124
-#, c-format
-msgid "trustdb: lseek failed: %s\n"
-msgstr "güvence veritabaný: eriþim baþarýsýz: %s\n"
-
-#: g10/tdbio.c:1132
-#, c-format
-msgid "trustdb: read failed (n=%d): %s\n"
-msgstr "güvence veritabaný: okuma baþarýsýz (n=%d): %s\n"
-
-#: g10/tdbio.c:1153
-#, c-format
-msgid "%s: not a trustdb file\n"
-msgstr "%s: bir güvence veritabaný dosyasý deðil\n"
-
-#: g10/tdbio.c:1170
-#, c-format
-msgid "%s: version record with recnum %lu\n"
-msgstr "%s: %lu kayýt numarasý ile sürüm kaydý\n"
-
-#: g10/tdbio.c:1175
-#, c-format
-msgid "%s: invalid file version %d\n"
-msgstr "%s: dosya sürümü %d geçersiz\n"
-
-#: g10/tdbio.c:1353
-#, c-format
-msgid "%s: error reading free record: %s\n"
-msgstr "%s: serbest kaydý okuma hatasý: %s\n"
-
-#: g10/tdbio.c:1361
-#, c-format
-msgid "%s: error writing dir record: %s\n"
-msgstr "%s: dizin kaydýný yazma hatasý: %s\n"
-
-#: g10/tdbio.c:1371
-#, c-format
-msgid "%s: failed to zero a record: %s\n"
-msgstr "%s: kayýt sýfýrlama baþarýsýz: %s\n"
-
-#: g10/tdbio.c:1401
-#, c-format
-msgid "%s: failed to append a record: %s\n"
-msgstr "%s: kayýt ekleme baþarýsýz: %s\n"
-
-#: g10/tdbio.c:1446
-msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-msgstr "güvence veritabaný bozulmuþ; lütfen \"gpg --fix-trustdb\" çalýþtýrýn.\n"
-
-#: g10/trustdb.c:200
-#, c-format
-msgid "`%s' is not a valid long keyID\n"
-msgstr "`%s' geçerli bir anahtar kimliði deðil\n"
-
-#: g10/trustdb.c:235
-#, c-format
-msgid "key %08lX: accepted as trusted key\n"
-msgstr "%08lX anahtarý: güvenli anahtar olarak kabul edildi\n"
-
-#: g10/trustdb.c:274
-#, c-format
-msgid "key %08lX occurs more than once in the trustdb\n"
-msgstr "%08lX anahtarý güvence veritabanýnda birden fazla kayýtta bulundu\n"
-
-#: g10/trustdb.c:290
-#, c-format
-msgid "key %08lX: no public key for trusted key - skipped\n"
-msgstr "%08lX anahtarý: güvenli anahtar için genel anahtar yok - atlandý\n"
-
-#: g10/trustdb.c:332
-#, c-format
-msgid "trust record %lu, req type %d: read failed: %s\n"
-msgstr "güvence veritabaný kaydý %lu, istek tipi %d: okuma baþarýsýz: %s\n"
-
-#: g10/trustdb.c:338
-#, c-format
-msgid "trust record %lu is not of requested type %d\n"
-msgstr "güvence veritabanýnýn %lu. kaydý %d istek türünde deðil\n"
-
-#: g10/trustdb.c:353
-#, c-format
-msgid "trust record %lu, type %d: write failed: %s\n"
-msgstr "güvence veritabanýnýn %lu. kaydý, %d türünde: yazma baþarýsýz: %s\n"
-
-#: g10/trustdb.c:368
-#, c-format
-msgid "trustdb: sync failed: %s\n"
-msgstr "güvence veritabaný: eþzamanlama baþarýsýz: %s\n"
-
-#: g10/trustdb.c:468
-msgid "no need for a trustdb check\n"
-msgstr "bir güvence veritabaný denetimi gereksiz\n"
-
-#: g10/trustdb.c:474 g10/trustdb.c:1641
-#, c-format
-msgid "next trustdb check due at %s\n"
-msgstr "sonraki güvence veritabaný denetimi %s de\n"
-
-#: g10/trustdb.c:779
-msgid "checking the trustdb\n"
-msgstr "güvence veritabaný denetleniyor\n"
-
-#: g10/trustdb.c:933
-#, c-format
-msgid "public key %08lX not found: %s\n"
-msgstr "%08lX genel anahtarý yok: %s\n"
-
-#: g10/trustdb.c:1515
-#, c-format
-msgid "public key of ultimately trusted key %08lX not found\n"
-msgstr "son derece güvenli %08lX genel anahtarý yok\n"
-
-#: g10/trustdb.c:1593
-#, c-format
-msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-msgstr ""
-"denetim %d derinlikte yapýlýyor: signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%"
-"d\n"
-
-#: g10/verify.c:108
-msgid ""
-"the signature could not be verified.\n"
-"Please remember that the signature file (.sig or .asc)\n"
-"should be the first file given on the command line.\n"
-msgstr ""
-"imza doðrulanamadý.\n"
-"Ýmza dosyasýnýn (.sig veya .asc) komut satýrýnda verilecek\n"
-"ilk dosya olmasý gerektiðini lütfen hatýrlayýn.\n"
-
-#: g10/verify.c:173
-#, c-format
-msgid "input line %u too long or missing LF\n"
-msgstr "girdi satýrý %u ya çok uzun ya da sonunda satýrsonu karakteri yok\n"
-
-#: g10/skclist.c:129 g10/skclist.c:185
-msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
-msgstr "anahtar güvenli olarak imlenmemiþ - onu sahte RSÜ ile kullanmayýn!\n"
-
-#: g10/skclist.c:157
-#, c-format
-msgid "skipped `%s': duplicated\n"
-msgstr "`%s' atlandý: tekrarlanmýþ\n"
-
-#: g10/skclist.c:164 g10/skclist.c:172
-#, c-format
-msgid "skipped `%s': %s\n"
-msgstr "\"%s\" atlandý: %s\n"
-
-#: g10/skclist.c:168
-msgid "skipped: secret key already present\n"
-msgstr "atlandý: gizli anahtar zaten var\n"
-
-#: g10/skclist.c:179
-#, c-format
-msgid ""
-"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
-"signatures!\n"
-msgstr ""
-"`%s' atlandý:\n"
-"Bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal anahtarý!\n"
-
-#. do not overwrite
-#: g10/openfile.c:84
-#, c-format
-msgid "File `%s' exists. "
-msgstr "\"%s\" dosyasý var. "
-
-#: g10/openfile.c:86
-msgid "Overwrite (y/N)? "
-msgstr "Üzerine yazýlsýn mý? (e/H)? "
-
-#: g10/openfile.c:119
-#, c-format
-msgid "%s: unknown suffix\n"
-msgstr "%s: bilinmeyen sonek\n"
-
-#: g10/openfile.c:141
-msgid "Enter new filename"
-msgstr "Yeni dosya ismini giriniz"
-
-#: g10/openfile.c:184
-msgid "writing to stdout\n"
-msgstr "standart çýktýya yazýyor\n"
-
-#: g10/openfile.c:273
-#, c-format
-msgid "assuming signed data in `%s'\n"
-msgstr "\"%s\" içindeki veri imzalý kabul ediliyor\n"
-
-#: g10/openfile.c:326
-#, c-format
-msgid "new configuration file `%s' created\n"
-msgstr "yeni yapýlandýrma dosyasý `%s' oluþturuldu\n"
-
-#: g10/openfile.c:353
-#, c-format
-msgid "%s: can't create directory: %s\n"
-msgstr "%s: dizin oluþturulamýyor: %s\n"
-
-#: g10/openfile.c:356
-#, c-format
-msgid "%s: directory created\n"
-msgstr "%s: dizin oluþturuldu\n"
-
-#: g10/encr-data.c:91
-msgid "WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
-msgstr "UYARI: ileti simetrik þifre içindeki zayýf bir anahtarla þifrelendi.\n"
-
-#: g10/encr-data.c:98
-msgid "problem handling encrypted packet\n"
-msgstr "þifreli paketin elde edilmesinde sorun var\n"
-
-#: g10/seskey.c:52
-msgid "weak key created - retrying\n"
-msgstr "zayýf anahtar oluþturuldu - yeniden deneniyor\n"
-
-#: g10/seskey.c:57
-#, c-format
-msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
-msgstr ""
-"simetrik þifre için zayýf anahtarýn önlenmesi mümkün olamadý: %d kere "
-"denendi!\n"
-
-#: g10/seskey.c:200
-msgid "DSA requires the use of a 160 bit hash algorithm\n"
-msgstr "DSA, 160 bitlik bir hash algoritmasý kullanýlmasýný gerektiriyor\n"
-
-#: g10/delkey.c:120 g10/delkey.c:127
-msgid "(unless you specify the key by fingerprint)\n"
-msgstr "(anahtarý parmak izi ile belirtmedikçe)\n"
-
-#: g10/delkey.c:126
-msgid "can't do that in batchmode without \"--yes\"\n"
-msgstr "önceden belirlenmiþ iþlemler kipinde \"--yes\" olmaksýzýn yapýlamaz\n"
-
-#: g10/delkey.c:150
-msgid "Delete this key from the keyring? "
-msgstr "Bu anahtar, anahtar zincirinden silinsin mi? "
-
-#: g10/delkey.c:158
-msgid "This is a secret key! - really delete? "
-msgstr "Bu bir gizli anahtar! - gerçekten silinecek mi? "
-
-#: g10/delkey.c:168
-#, c-format
-msgid "deleting keyblock failed: %s\n"
-msgstr "anahtar bloðu silinemedi: %s\n"
-
-#: g10/delkey.c:178
-msgid "ownertrust information cleared\n"
-msgstr "sahibinin güvencesi bilgisi temizlendi\n"
-
-#: g10/delkey.c:206
-#, c-format
-msgid "there is a secret key for public key \"%s\"!\n"
-msgstr "genel anahtar \"%s\" için bir gizli anahtar var!\n"
-
-#: g10/delkey.c:208
-msgid "use option \"--delete-secret-keys\" to delete it first.\n"
-msgstr "onu önce \"--delete-secret-keys\" ile silmelisiniz.\n"
-
-#: g10/helptext.c:47
-msgid ""
-"It's up to you to assign a value here; this value will never be exported\n"
-"to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
-"to do with the (implicitly created) web-of-certificates."
-msgstr ""
-"Bir deðeri buraya iþaretlemek size kalmýþ; bu deðer herhangi bir 3. þahsa\n"
-"gönderilmeyecek. Bir güvence aðý saðlamak için bizim buna ihtiyacýmýz var;\n"
-"bunun (açýkça belirtilmeden oluþturulmuþ) sertifikalar aðýyla\n"
-"hiçbir alakasý yok."
-
-#: g10/helptext.c:53
-msgid ""
-"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-"ultimately trusted - those are usually the keys for which you have\n"
-"access to the secret key. Answer \"yes\" to set this key to\n"
-"ultimately trusted\n"
-msgstr ""
-"Web-of-Trust oluþturulabilmesi için GnuPG'ye hangi anahtarlarýn son derece\n"
-"güvenli (bunlar gizli anahtarlarýna eriþiminiz olan anahtarlardýr) "
-"olduðunun\n"
-"bildirilmesi gerekir. \"evet\" yanýtý bu anahtarýn son derece güvenli\n"
-"olduðunun belirtilmesi için yeterlidir.\n"
-
-#: g10/helptext.c:60
-msgid "If you want to use this revoked key anyway, answer \"yes\"."
-msgstr ""
-"Bu yürürlükten kaldýrýlmýþ anahtarý yine de kullanmak istiyorsanýz\n"
-"cevap olarak \"evet\" yazýn."
-
-#: g10/helptext.c:64
-msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-msgstr ""
-"Bu güvencesiz anahtarý yine de kullanmak istiyorsanýz cevap olarak\n"
-" \"evet\" yazýn."
-
-#: g10/helptext.c:68
-msgid "Enter the user ID of the addressee to whom you want to send the message."
-msgstr "Bu iletiyi göndereceðiniz adresin kullanýcý kimliðini giriniz."
-
-#: g10/helptext.c:72
-msgid ""
-"Select the algorithm to use.\n"
-"\n"
-"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-"for signatures. This is the suggested algorithm because verification of\n"
-"DSA signatures are much faster than those of ElGamal.\n"
-"\n"
-"ElGamal is an algorithm which can be used for signatures and encryption.\n"
-"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-"only\n"
-"and a sign+encrypt; actually it is the same, but some parameters must be\n"
-"selected in a special way to create a safe key for signatures: this program\n"
-"does this but other OpenPGP implementations are not required to understand\n"
-"the signature+encryption flavor.\n"
-"\n"
-"The first (primary) key must always be a key which is capable of signing;\n"
-"this is the reason why the encryption only ElGamal key is not available in\n"
-"this menu."
-msgstr ""
-"Kullanýlacak algoritmayý seçiniz.\n"
-"\n"
-"DSA (DSS olarak da bilinir) sadece imzalar için kullanýlan bir sayýsal\n"
-"imza algoritmasýdýr. Bu algoritma ElGamal algoritmasýndan çok daha hýzlý\n"
-"doðrulandýðý için önerilmektedir.\n"
-"\n"
-"ElGamal imzalar ve þifreleme için kullanýlan bir algoritmadýr.\n"
-"OpenPGP bu algoritmanýn bu iki kullanýmýný birbirinden ayýrýr:\n"
-"sadece þifreleme ve imza+þifreleme; esas olarak ayný gibi görünmekle "
-"beraber\n"
-"imzalar için kullanýlacak anahtarý oluþturacak bazý özel parametrelerin\n"
-"seçilmesini gerektirir: bu program bunu yapar ama diðer OpenPGP\n"
-"gerçeklemelerinin imza+þifreleme olayýný anlamasý gerekmiyorsa kullanmak\n"
-"anlamlý olur.\n"
-"\n"
-"Ýlk (asýl) anahtar imzalama yeteneðine sahip bir anahtar olmalýdýr;\n"
-"bu durum, sadece þifreleme yapabilen ElGamal anahtarlarýnýn neden menüde\n"
-"bulunmadýðýný açýklar."
-
-#: g10/helptext.c:92
-msgid ""
-"Although these keys are defined in RFC2440 they are not suggested\n"
-"because they are not supported by all programs and signatures created\n"
-"with them are quite large and very slow to verify."
-msgstr ""
-"Bu anahtarlar tüm programlar tarafýndan desteklenmediði için ve\n"
-"onlarla oluþturulan imzalar gereðinden büyük ve doðrulanmasý çok yavaþ\n"
-"olduðundan RFC2440 standardýnda tanýmlý olmalarýna raðmen tavsiye\n"
-"edilmezler."
-
-#: g10/helptext.c:98
-msgid ""
-"In general it is not a good idea to use the same key for signing and\n"
-"encryption. This algorithm should only be used in certain domains.\n"
-"Please consult your security expert first."
-msgstr ""
-"Genelde imzalama ve þifreleme için ayný anahtarý kullanmak iyi bir fikir\n"
-"deðildir. Bu algoritma sadece belli alanlarda kullanýlabilir.\n"
-"Lütfen güvenlik uzmanýnýza danýþýn."
-
-#: g10/helptext.c:105
-msgid "Enter the size of the key"
-msgstr "Anahtar uzunluðunu giriniz"
-
-#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
-#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
-msgid "Answer \"yes\" or \"no\""
-msgstr "Cevap \"evet\" ya da \"hayýr\""
-
-#: g10/helptext.c:119
-msgid ""
-"Enter the required value as shown in the prompt.\n"
-"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-"get a good error response - instead the system tries to interpret\n"
-"the given value as an interval."
-msgstr ""
-"Ýstenen deðeri girin. ISO tarihi (YYYY-AA-GG) girmeniz mümkündür fakat\n"
-"iyi bir hata cevabý alamazsýnýz -- onun yerine sistem verilen deðeri\n"
-"bir zaman aralýðý olarak çözümlemeyi dener."
-
-#: g10/helptext.c:131
-msgid "Enter the name of the key holder"
-msgstr "Anahtar tutucunun ismini giriniz"
-
-#: g10/helptext.c:136
-msgid "please enter an optional but highly suggested email address"
-msgstr "lütfen bir E-posta adresi girin (isteðe baðlý ancak kuvvetle tavsiye edilir)"
-
-#: g10/helptext.c:140
-msgid "Please enter an optional comment"
-msgstr "Lütfen önbilgi girin (isteðe baðlý)"
-
-#: g10/helptext.c:145
-msgid ""
-"N to change the name.\n"
-"C to change the comment.\n"
-"E to change the email address.\n"
-"O to continue with key generation.\n"
-"Q to to quit the key generation."
-msgstr ""
-"S iSim deðiþtirmek için.\n"
-"B önBilgiyi deðiþtirmek için.\n"
-"P e-Posta adresini deðiþtirmek için.\n"
-"D anahtar üretimine Devam etmek için.\n"
-"K anahtar üretiminden çýKmak için."
-
-#: g10/helptext.c:154
-msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-msgstr "Yardýmcý anahtarý üretmek istiyorsanýz \"evet\" ya da \"e\" girin."
-
-#: g10/helptext.c:162
-msgid ""
-"When you sign a user ID on a key, you should first verify that the key\n"
-"belongs to the person named in the user ID. It is useful for others to\n"
-"know how carefully you verified this.\n"
-"\n"
-"\"0\" means you make no particular claim as to how carefully you verified "
-"the\n"
-" key.\n"
-"\n"
-"\"1\" means you believe the key is owned by the person who claims to own it\n"
-" but you could not, or did not verify the key at all. This is useful "
-"for\n"
-" a \"persona\" verification, where you sign the key of a pseudonymous "
-"user.\n"
-"\n"
-"\"2\" means you did casual verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint and checked the user ID on "
-"the\n"
-" key against a photo ID.\n"
-"\n"
-"\"3\" means you did extensive verification of the key. For example, this "
-"could\n"
-" mean that you verified the key fingerprint with the owner of the key in\n"
-" person, and that you checked, by means of a hard to forge document with "
-"a\n"
-" photo ID (such as a passport) that the name of the key owner matches "
-"the\n"
-" name in the user ID on the key, and finally that you verified (by "
-"exchange\n"
-" of email) that the email address on the key belongs to the key owner.\n"
-"\n"
-"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
-"In the end, it is up to you to decide just what \"casual\" and \"extensive"
-"\"\n"
-"mean to you when you sign other keys.\n"
-"\n"
-"If you don't know what the right answer is, answer \"0\"."
-msgstr ""
-"Bir anahtarý bir kullanýcý kimlikle imzalamadan önce kullanýcý kimliðin\n"
-"içindeki ismin, anahtarýn sahibine ait olup olmadýðýný kontrol etmelisiniz.\n"
-"\n"
-"\"0\" bu kontrolu yapmadýðýnýz ve yapmayý da bilmediðiniz anlamýndadýr.\n"
-"\"1\" anahtar size sahibi tarafýndan gönderildi ama siz bu anahtarý baþka\n"
-" kaynaklardan doðrulamadýnýz anlamýndadýr. Bu kiþisel doðrulama için\n"
-" yeterlidir. En azýnda yarý anonim bir anahtar imzalamasý yapmýþ\n"
-" olursunuz.\n"
-"\"2\" ayrýntýlý bir inceleme yapýldýðý anlamýndadýr. Örneðin parmakizi ve\n"
-" bir anahtarýn foto kimliðiyle kullanýcý kimliðini karþýlaþtýrmak\n"
-" gibi denetimleri yapmýþsýnýzdýr.\n"
-"\"3\" inceden inceye bir doðrulama anlatýr. Örneðin, þahýstaki anahtarýn\n"
-" sahibi ile anahtar parmak izini karþýlaþtýrmýþsýnýzdýr ve anahtardaki\n"
-" kullanýcý kimlikte belirtilen isme ait bir basýlý kimlik belgesindeki\n"
-" bir fotoðrafla þahsý karþýlaþtýrmýþsýnýzdýr ve son olarak anahtar\n"
-" sahibinin e-posta adresini kendisinin kullanmakta olduðunu da\n"
-" denetlemiþsinizdir.\n"
-"Burada 2 ve 3 için verilen örnekler *sadece* örnektir.\n"
-"Eninde sonunda bir anahtarý imzalarken \"ayrýntýlý\" ve \"inceden inceye\" "
-"kontroller arasýndaki ayrýma siz karar vereceksiniz.\n"
-"Bu kararý verebilecek durumda deðilseniz \"0\" cevabýný verin."
-
-#: g10/helptext.c:200
-msgid "Answer \"yes\" is you want to sign ALL the user IDs"
-msgstr "Kullanýcý kimliklerinin TÜMünü imzalamak istiyorsanýz \"evet\" girin"
-
-#: g10/helptext.c:204
-msgid ""
-"Answer \"yes\" if you really want to delete this user ID.\n"
-"All certificates are then also lost!"
-msgstr ""
-"Bu kullanýcý kimliðini gerçekten silmek istiyorsanýz \"evet\" girin.\n"
-"Böylece bütün sertifikalarý kaybedeceksiniz!"
-
-#: g10/helptext.c:209
-msgid "Answer \"yes\" if it is okay to delete the subkey"
-msgstr "Bu yardýmcý anahtarý silme izni vermek istiyorsanýz \"evet\" girin"
-
-#: g10/helptext.c:214
-msgid ""
-"This is a valid signature on the key; you normally don't want\n"
-"to delete this signature because it may be important to establish a\n"
-"trust connection to the key or another key certified by this key."
-msgstr ""
-"Bu, anahtar üzerinde geçerli bir imzadýr; anahtara ya da bu anahtarla\n"
-"sertifikalanmýþ bir diðer anahtara bir güvence baðlantýsý saðlamakta\n"
-"önemli olabileceðinden normalde bu imzayý silmek istemezsiniz."
-
-#: g10/helptext.c:219
-msgid ""
-"This signature can't be checked because you don't have the\n"
-"corresponding key. You should postpone its deletion until you\n"
-"know which key was used because this signing key might establish\n"
-"a trust connection through another already certified key."
-msgstr ""
-"Bu imza, anahtarýna sahip olmadýðýnýzdan, kontrol edilemez. Bu imzanýn\n"
-"silinmesini hangi anahtarýn kullanýldýðýný bilene kadar\n"
-"ertelemelisiniz çünkü bu imzalama anahtarý baþka bir sertifikalý\n"
-"anahtar vasýtasý ile bir güvence baðlantýsý saðlayabilir."
-
-#: g10/helptext.c:225
-msgid ""
-"The signature is not valid. It does make sense to remove it from\n"
-"your keyring."
-msgstr "Ýmza geçersiz. Onu anahtar zincirinizden kaldýrmak uygun olacak."
-
-#: g10/helptext.c:229
-msgid ""
-"This is a signature which binds the user ID to the key. It is\n"
-"usually not a good idea to remove such a signature. Actually\n"
-"GnuPG might not be able to use this key anymore. So do this\n"
-"only if this self-signature is for some reason not valid and\n"
-"a second one is available."
-msgstr ""
-"Bu imza kullanýcý kimliðini anahtara baðlar. Öz-imzayý silmek hiç iyi\n"
-"bir fikir deðil. GnuPG bu anahtarý bir daha hiç kullanamayabilir.\n"
-"Bunu sadece, eðer bu öz-imza bazý durumlarda geçerli deðilse ya da\n"
-"kullanýlabilir bir ikincisi var ise yapýn."
-
-#: g10/helptext.c:237
-msgid ""
-"Change the preferences of all user IDs (or just of the selected ones)\n"
-"to the current list of preferences. The timestamp of all affected\n"
-"self-signatures will be advanced by one second.\n"
-msgstr ""
-"Tüm kullanýcý kimlik tercihlerini (ya da seçilen birini) mevcut tercihler\n"
-"listesine çevirir. Tüm etkilenen öz-imzalarýn zaman damgalarý bir sonraki\n"
-"tarafýndan öne alýnacaktýr.\n"
-
-#: g10/helptext.c:244
-msgid "Please enter the passhrase; this is a secret sentence \n"
-msgstr "Lütfen bir anahtar parolasý giriniz; yazdýklarýnýz görünmeyecek\n"
-
-#: g10/helptext.c:250
-msgid "Please repeat the last passphrase, so you are sure what you typed in."
-msgstr "Lütfen son parolayý tekrarlayarak ne yazdýðýnýzdan emin olun."
-
-#: g10/helptext.c:254
-msgid "Give the name of the file to which the signature applies"
-msgstr "Ýmzanýn uygulanacaðý dosyanýn ismini verin"
-
-#: g10/helptext.c:259
-msgid "Answer \"yes\" if it is okay to overwrite the file"
-msgstr "Dosyanýn üzerine yazýlacaksa lütfen \"evet\" yazýn"
-
-#: g10/helptext.c:264
-msgid ""
-"Please enter a new filename. If you just hit RETURN the default\n"
-"file (which is shown in brackets) will be used."
-msgstr ""
-"Lütfen yeni dosya ismini girin. Dosya ismini yazmadan RETURN tuþlarsanýz\n"
-"parantez içinde gösterilen öntanýmlý dosya kullanýlacak."
-
-#: g10/helptext.c:270
-msgid ""
-"You should specify a reason for the certification. Depending on the\n"
-"context you have the ability to choose from this list:\n"
-" \"Key has been compromised\"\n"
-" Use this if you have a reason to believe that unauthorized persons\n"
-" got access to your secret key.\n"
-" \"Key is superseded\"\n"
-" Use this if you have replaced this key with a newer one.\n"
-" \"Key is no longer used\"\n"
-" Use this if you have retired this key.\n"
-" \"User ID is no longer valid\"\n"
-" Use this to state that the user ID should not longer be used;\n"
-" this is normally used to mark an email address invalid.\n"
-msgstr ""
-"Sertifikalama için bir sebep belirtmelisiniz. Ýçeriðine baðlý olarak\n"
-"bu listeden seçebilirsiniz:\n"
-" \"Anahtar tehlikede\"\n"
-"\tYetkisiz kiþilerin gizli anahtarýnýza eriþebildiðine inanýyorsanýz\n"
-"\tbunu seçin.\n"
-" \"Anahtar geçici\"\n"
-"\tMevcut anahtarý daha yeni bir anahtar ile deðiþtirmiþseniz bunu seçin.\n"
-" \"Anahtar artýk kullanýlmayacak\"\n"
-"\tAnahtarý emekliye ayýracaksanýz bunu seçin.\n"
-" \"Kullanýcý kimliði artýk geçersiz\"\n"
-"\tKullanýcý kimliði artýk kullanýlamayacak durumdaysa bunu\n"
-"\tseçin; genelde Eposta adresi geçersiz olduðunda kullanýlýr.\n"
-
-#: g10/helptext.c:286
-msgid ""
-"If you like, you can enter a text describing why you issue this\n"
-"revocation certificate. Please keep this text concise.\n"
-"An empty line ends the text.\n"
-msgstr ""
-"Ýsterseniz, neden bu yürürlükten kaldýrma sertifikasýný\n"
-"verdiðinizi açýklayan bir metin girebilirsiniz.\n"
-"Lütfen bu metin kýsa olsun. Bir boþ satýr metni bitirir.\n"
-
-#: g10/helptext.c:301
-msgid "No help available"
-msgstr "yardým mevcut deðil"
-
-#: g10/helptext.c:309
-#, c-format
-msgid "No help available for `%s'"
-msgstr "\"%s\" için yardým mevcut deðil"
-
-#: g10/keydb.c:178
-#, c-format
-msgid "error creating keyring `%s': %s\n"
-msgstr "`%s' anahtar zinciri oluþturulurken hata: %s\n"
-
-#: g10/keydb.c:185
-#, c-format
-msgid "keyring `%s' created\n"
-msgstr "`%s' anahtar zinciri oluþturuldu\n"
-
-#: g10/keydb.c:575
-#, c-format
-msgid "failed to rebuild keyring cache: %s\n"
-msgstr "anahtar zinciri belleði yeniden oluþturulurken hata: %s\n"
-
-#: g10/keyring.c:1226
-msgid "WARNING: 2 files with confidential information exists.\n"
-msgstr "UYARI: gizli bilgi içeren 2 dosya mevcut.\n"
-
-#: g10/keyring.c:1228
-#, c-format
-msgid "%s is the unchanged one\n"
-msgstr "%s deðiþmeyenlerden\n"
-
-#: g10/keyring.c:1229
-#, c-format
-msgid "%s is the new one\n"
-msgstr "%s yenilerden\n"
-
-#: g10/keyring.c:1230
-msgid "Please fix this possible security flaw\n"
-msgstr "Lütfen bu güvenlik çatlaðýný giderin\n"
-
-#: g10/keyring.c:1346
-#, c-format
-msgid "checking keyring `%s'\n"
-msgstr "`%s' anahtar zinciri denetleniyor\n"
-
-#: g10/keyring.c:1377
-#, c-format
-msgid "%lu keys so far checked (%lu signatures)\n"
-msgstr "þimdiye dek %lu anahtar denetlendi (%lu imza)\n"
-
-#: g10/keyring.c:1388
-#, c-format
-msgid "%lu keys checked (%lu signatures)\n"
-msgstr "%lu anahtar denetlendi (%lu imza)\n"
-
-#: g10/keyring.c:1453
-#, c-format
-msgid "%s: keyring created\n"
-msgstr "%s: anahtar zinciri oluþturuldu\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "you have to start GnuPG again, so it can read the new configuration file\n"
-#~ msgstr ""
-#~ "Yeni seçenekler dosyasýnýn okunabilmesi için GnuPG yeniden "
-#~ "baþlatýlmalýdýr\n"
-
-#~ msgid "changing permission of `%s' failed: %s\n"
-#~ msgstr "`%s' izinleri deðiþtirilemedi: %s\n"
-
-#~ msgid "|NAME=VALUE|use this notation data"
-#~ msgstr "|ÝSÝM=DEÐER|veri bu nitelemeyle kullanýlýr"
-
-#~ msgid ""
-#~ "the first character of a notation name must be a letter or an underscore\n"
-#~ msgstr "bir niteleme isminin ilk karakteri bir harf ya da altçizgi olmalý\n"
-
-#~ msgid "dots in a notation name must be surrounded by other characters\n"
-#~ msgstr ""
-#~ "bir niteleme isminde noktalar diðer karakterler tarafýndan kuþatýlmýþ "
-#~ "olmalýdýr\n"
-
-#~ msgid ""
-#~ "WARNING: This key already has a photo ID.\n"
-#~ " Adding another photo ID may confuse some versions of PGP.\n"
-#~ msgstr ""
-#~ "UYARI: Bu anahtarýn zaten bir foto kimliði var.\n"
-#~ " Baþka bir foto kimliði eklemek PGP'in bazý sürümleriyle uyumsuz "
-#~ "olabilir.\n"
-
-#~ msgid "You may only have one photo ID on a key.\n"
-#~ msgstr "Bir anahtarýn sadece bir foto kimliði olabilir.\n"
-
-#~ msgid "Fingerprint:"
-#~ msgstr " Parmak izi:"
-
-#~ msgid " Fingerprint:"
-#~ msgstr " Parmak izi:"
-
-#~ msgid "Are you sure you still want to sign it?\n"
-#~ msgstr "Onu yine de imzalamak istiyor musunuz?\n"
-
-#~ msgid " Are you sure you still want to sign it?\n"
-#~ msgstr " Onu yine de imzalamak istiyor musunuz?\n"
-
-#, fuzzy
-#~ msgid "Really sign? (y/N) "
-#~ msgstr "Gerçekten imzalayacak mýsýnýz? "
-
-#~ msgid "key %08lX: our copy has no self-signature\n"
-#~ msgstr "anahtar %08lX: bizim kopyanýn öz-imzasý yok\n"
-
-#~ msgid "Do you really need such a large keysize? "
-#~ msgstr "Bu kadar büyük anahtar uzunluðuna gerçekten ihtiyacýnýz var mý?"
-
-#~ msgid " signed by %08lX at %s\n"
-#~ msgstr " %08lX tarafýndan %s de imzalanmýþ\n"
-
diff --git a/scd/ChangeLog b/scd/ChangeLog
deleted file mode 100644
index a55c51d53..000000000
--- a/scd/ChangeLog
+++ /dev/null
@@ -1,91 +0,0 @@
-2002-08-21 Werner Koch <wk@gnupg.org>
-
- * scdaemon.c (main): New option --daemon so that the program is
- not accidently started in the background.
-
-2002-08-16 Werner Koch <wk@gnupg.org>
-
- * scdaemon.c: Include i18n.h.
-
- * card-common.h (struct p15_private_s): Forward declaration. Add
- it to card_ctx_s.
- * card.c (card_close): Make sure private data is released.
- (card_enum_certs): New.
- * card-p15.c (p15_release_private_data): New.
- (init_private_data): New to work around an OpenSC weirdness.
- (p15_enum_keypairs): Do an OpenSC get_objects only once.
- (p15_enum_certs): New.
- (card_p15_bind): Bind new function.
- * command.c (cmd_learn): Return information about the certificates.
-
-2002-08-09 Werner Koch <wk@gnupg.org>
-
- * card.c (card_get_serial_and_stamp): Use the tokeinfo serial
- number as a fallback. Add a special prefix for serial numbers.
-
-2002-07-30 Werner Koch <wk@gnupg.org>
-
- Changes to cope with OpenSC 0.7.0:
-
- * card.c: Removed the check for the packed opensc version.
- Changed include file names of opensc.
- (map_sc_err): Adjusted error codes for new opensc version.
- * card-p15.c: Changed include filename of opensc.
- * card-dinsig.c: Ditto.
-
- * card-p15.c (p15_decipher): Add flags argument to OpenSC call.
-
-2002-07-24 Werner Koch <wk@gnupg.org>
-
- * card.c (find_simple_tlv, find_iccsn): New.
- (card_get_serial_and_stamp): Improved serial number parser.
-
-2002-06-27 Werner Koch <wk@gnupg.org>
-
- * scdaemon.c (main): Use GNUPG_DEFAULT_HOMEDIR constant.
-
-2002-06-15 Werner Koch <wk@gnupg.org>
-
- * card-dinsig.c: Documented some stuff from the DIN norm.
-
-2002-04-15 Werner Koch <wk@gnupg.org>
-
- * command.c (cmd_pksign, cmd_pkdecrypt): Use a copy of the key ID.
-
-2002-04-12 Werner Koch <wk@gnupg.org>
-
- * scdaemon.c: New option --debug-sc N.
- * card.c (card_open): set it here.
-
- * card-p15.c (p15_prepare_key): Factored out common code from ...
- (p15_sign, p15_decipher): here and made the decryption work the
- regular way.
-
-2002-04-10 Werner Koch <wk@gnupg.org>
-
- * card.c (card_open): Return immediately when no reader is available.
-
-2002-03-27 Werner Koch <wk@gnupg.org>
-
- * card.c (card_open, card_close): Adjusted for changes in OpenSC.
-
-2002-03-10 Werner Koch <wk@gnupg.org>
-
- * card-p15.c, card-dinsig.c, card-common.h: New.
- * card.c: Factored most code out to the new modules, so that we
- can better support different types of card applications.
-
-2002-01-26 Werner Koch <wk@gnupg.org>
-
- * scdaemon.c scdaemon.h, command.c: New. Based on the code from
- the gpg-agent.
-
- Copyright 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/scd/Makefile.am b/scd/Makefile.am
deleted file mode 100644
index 8812d1b9a..000000000
--- a/scd/Makefile.am
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-localedir = $(datadir)/locale
-INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
-
-bin_PROGRAMS = scdaemon
-
-AM_CPPFLAGS = -I$(top_srcdir)/common $(OPENSC_CFLAGS) $(LIBGCRYPT_CFLAGS) \
- $(KSBA_CFLAGS)
-LDFLAGS = @LDFLAGS@
-
-scdaemon_SOURCES = \
- scdaemon.c scdaemon.h \
- command.c card.c \
- card-common.h \
- card-p15.c card-dinsig.c
-
-scdaemon_LDADD = ../jnlib/libjnlib.a ../assuan/libassuan.a \
- ../common/libcommon.a \
- $(OPENSC_LIBS) $(LIBGCRYPT_LIBS) $(KSBA_LIBS)
-
-
-
-
diff --git a/scd/card-common.h b/scd/card-common.h
deleted file mode 100644
index 50014cead..000000000
--- a/scd/card-common.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* card-common.h - Common declarations for all card types
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 CARD_COMMON_H
-#define CARD_COMMON_H
-
-/* Declaration of private data structure used by card-p15.c */
-struct p15private_s;
-
-
-struct card_ctx_s {
- int reader; /* used reader */
- struct sc_context *ctx;
- struct sc_card *scard;
- struct sc_pkcs15_card *p15card; /* only if there is a pkcs15 application */
- struct p15private_s *p15priv; /* private data used by card-p15.c */
-
- struct {
- int initialized; /* the card has been initialied and the function
- pointers may be used. However for
- unsupported operations the particular
- function pointer is set to NULL */
-
- int (*enum_keypairs) (CARD card, int idx,
- unsigned char *keygrip, char **keyid);
- int (*enum_certs) (CARD card, int idx, char **certid, int *certtype);
- int (*read_cert) (CARD card, const char *certidstr,
- unsigned char **cert, size_t *ncert);
- int (*sign) (CARD card,
- const char *keyidstr, int hashalgo,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen );
- int (*decipher) (CARD card, const char *keyidstr,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen);
- } fnc;
-
-};
-
-/*-- card.c --*/
-int map_sc_err (int rc);
-int card_help_get_keygrip (KsbaCert cert, unsigned char *array);
-
-/*-- card-15.c --*/
-void p15_release_private_data (CARD card);
-
-/* constructors */
-void card_p15_bind (CARD card);
-void card_dinsig_bind (CARD card);
-
-
-#endif /*CARD_COMMON_H*/
diff --git a/scd/card-dinsig.c b/scd/card-dinsig.c
deleted file mode 100644
index 161d5dbfc..000000000
--- a/scd/card-dinsig.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/* card-dinsig.c - German signature law (DINSIG) functions
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/* The German signature law and its bylaw (SigG and SigV) is currently
- used with an interface specification described in DIN V 66291-1.
- The AID to be used is: 'D27600006601'.
-
- The file IDs for certificates utilize the generic format:
- Cxyz
- C being the hex digit 'C' (12).
- x being the service indicator:
- '0' := SigG conform digital signature.
- '1' := entity authentication.
- '2' := key encipherment.
- '3' := data encipherment.
- '4' := key agreement.
- other values are reserved for future use.
- y being the security environment number using '0' for cards
- not supporting a SE number.
- z being the certificate type:
- '0' := C.CH (base certificate of ard holder) or C.ICC.
- '1' .. '7' := C.CH (business or professional certificate
- of card holder.
- '8' .. 'D' := C.CA (certificate of a CA issue by the Root-CA).
- 'E' := C.RCA (self certified certificate of the Root-CA).
- 'F' := reserved.
-
- The file IDs used by default are:
- '1F00' EF.SSD (security service descriptor). [o,o]
- '2F02' EF.GDO (global data objects) [m,m]
- 'A000' EF.PROT (signature log). Cyclic file with 20 records of 53 byte.
- Read and update after user authentication. [o,o]
- 'B000' EF.PK.RCA.DS (public keys of Root-CA). Size is 512b or size
- of keys. [m (unless a 'C00E' is present),m]
- 'B001' EF.PK.CA.DS (public keys of CAs). Size is 512b or size
- of keys. [o,o]
- 'C00n' EF.C.CH.DS (digital signature certificate of card holder)
- with n := 0 .. 7. Size is 2k or size of cert. Read and
- update allowed after user authentication. [m,m]
- 'C00m' EF.C.CA.DS (digital signature certificate of CA)
- with m := 8 .. E. Size is 1k or size of cert. Read always
- allowed, update after uder authentication. [o,o]
- 'C100' EF.C.ICC.AUT (AUT certificate of ICC) [o,m]
- 'C108' EF.C.CA.AUT (AUT certificate of CA) [o,m]
- 'D000' EF.DM (display message) [-,m]
-
- The letters in brackets indicate optional or mandatory files: The
- first for card terminals under full control and the second for
- "business" card terminals.
-
- FIXME: Needs a lot more explanation.
-
-*/
-
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include <opensc/pkcs15.h>
-#include <ksba.h>
-
-#include "scdaemon.h"
-#include "card-common.h"
-
-static int dinsig_read_cert (CARD card, const char *certidstr,
- unsigned char **cert, size_t *ncert);
-
-
-
-/* See card.c for interface description. Frankly we don't do any real
- enumeration but just check whether the well know files are
- available. */
-static int
-dinsig_enum_keypairs (CARD card, int idx,
- unsigned char *keygrip, char **keyid)
-{
- int rc;
- unsigned char *buf;
- size_t buflen;
- KsbaError krc;
- KsbaCert cert;
-
- /* fixme: We should locate the application via the EF(DIR) and not
- assume a Netkey card */
- if (!idx)
- rc = dinsig_read_cert (card, "DINSIG-DF01.C000", &buf, &buflen);
- else if (idx == 1)
- rc = dinsig_read_cert (card, "DINSIG-DF01.C200", &buf, &buflen);
- else
- rc = -1;
- if (rc)
- return rc;
-
- cert = ksba_cert_new ();
- if (!cert)
- {
- xfree (buf);
- return GNUPG_Out_Of_Core;
- }
-
- krc = ksba_cert_init_from_mem (cert, buf, buflen);
- xfree (buf);
- if (krc)
- {
- log_error ("failed to parse the certificate at idx %d: %s\n",
- idx, ksba_strerror (krc));
- ksba_cert_release (cert);
- return GNUPG_Card_Error;
- }
- if (card_help_get_keygrip (cert, keygrip))
- {
- log_error ("failed to calculate the keygrip at index %d\n", idx);
- ksba_cert_release (cert);
- return GNUPG_Card_Error;
- }
- ksba_cert_release (cert);
-
- /* return the iD */
- if (keyid)
- {
- *keyid = xtrymalloc (17);
- if (!*keyid)
- return GNUPG_Out_Of_Core;
- if (!idx)
- strcpy (*keyid, "DINSIG-DF01.C000");
- else
- strcpy (*keyid, "DINSIG-DF01.C200");
- }
-
- return 0;
-}
-
-
-
-/* See card.c for interface description */
-static int
-dinsig_read_cert (CARD card, const char *certidstr,
- unsigned char **cert, size_t *ncert)
-{
- int rc;
- struct sc_path path;
- struct sc_file *file;
- unsigned char *buf;
- int buflen;
-
- if (!strcmp (certidstr, "DINSIG-DF01.C000"))
- sc_format_path ("3F00DF01C000", &path);
- else if (!strcmp (certidstr, "DINSIG-DF01.C200"))
- sc_format_path ("3F00DF01C200", &path);
- else
- return GNUPG_Invalid_Id;
-
- rc = sc_select_file (card->scard, &path, &file);
- if (rc)
- {
- log_error ("sc_select_file failed: %s\n", sc_strerror (rc));
- return map_sc_err (rc);
- }
- if (file->type != SC_FILE_TYPE_WORKING_EF
- || file->ef_structure != SC_FILE_EF_TRANSPARENT)
- {
- log_error ("wrong type or structure of certificate EF\n");
- sc_file_free (file);
- return GNUPG_Card_Error;
- }
- if (file->size < 20) /* check against a somewhat arbitrary length */
- {
- log_error ("certificate EF too short\n");
- sc_file_free (file);
- return GNUPG_Card_Error;
- }
- buf = xtrymalloc (file->size);
- if (!buf)
- {
- sc_file_free (file);
- return GNUPG_Out_Of_Core;
- }
-
- rc = sc_read_binary (card->scard, 0, buf, file->size, 0);
- if (rc >= 0 && rc != file->size)
- {
- log_error ("short read on certificate EF\n");
- sc_file_free (file);
- xfree (buf);
- return GNUPG_Card_Error;
- }
- sc_file_free (file);
- if (rc < 0)
- {
- log_error ("error reading certificate EF: %s\n", sc_strerror (rc));
- xfree (buf);
- return map_sc_err (rc);
- }
- buflen = rc;
-
- /* The object is not a plain certificate but wrapped into id-at
- userCertificate - fixme: we should check the specs and decided
- whether libksba should support it */
- if (buflen > 9 && buf[0] == 0x30 && buf[4] == 6 && buf[5] == 3
- && buf[6] == 0x55 && buf[7] == 4 && buf[8] == 0x24)
- {
- /* We have to strip the padding. Although this is a good idea
- anyway, we have to do it due to a KSBA problem; KSBA does not
- work correct when the buffer is larger than the ASN.1
- structure and the certificates here are padded with FF. So
- as a workaround we look at the outer structure to get the
- size of the entire thing and adjust the buflen. We can only
- do this when there is a 2 byte length field */
- size_t seqlen;
- if (buf[1] == 0x82)
- {
- seqlen = ((buf[2] << 8) | buf[3]) + 4;
- if (seqlen < buflen)
- buflen = seqlen;
- }
- memmove (buf, buf+9, buflen-9);
- buflen -= 9;
- }
-
- *cert = buf;
- *ncert = buflen;
- return 0;
-}
-
-
-
-
-/* Bind our operations to the card */
-void
-card_dinsig_bind (CARD card)
-{
- card->fnc.enum_keypairs = dinsig_enum_keypairs;
- card->fnc.read_cert = dinsig_read_cert;
-
-}
diff --git a/scd/card-p15.c b/scd/card-p15.c
deleted file mode 100644
index 25502a610..000000000
--- a/scd/card-p15.c
+++ /dev/null
@@ -1,498 +0,0 @@
-/* card-p15.c - PKCS-15 based card access
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include <opensc/pkcs15.h>
-#include <ksba.h>
-
-#include "scdaemon.h"
-#include "card-common.h"
-
-
-struct p15private_s {
- int n_prkey_rsa_objs;
- struct sc_pkcs15_object *prkey_rsa_objs[32];
- int n_cert_objs;
- struct sc_pkcs15_object *cert_objs[32];
-};
-
-
-/* Allocate private data. */
-static int
-init_private_data (CARD card)
-{
- struct p15private_s *priv;
- int rc;
-
- if (card->p15priv)
- return 0; /* already done. */
-
- priv = xtrycalloc (1, sizeof *priv);
- if (!priv)
- return GNUPG_Out_Of_Core;
-
- /* OpenSC (0.7.0) is a bit strange in that the get_objects functions
- tries to be a bit too clever and implicitly does an enumeration
- which eventually leads to the fact that every call to this
- fucntion returns one more macthing object. The old code in
- p15_enum_keypairs assume that it would alwyas return the same
- numer of objects and used this to figure out what the last object
- enumerated is. We now do an enum_objects just once and keep it
- in the private data. */
- rc = sc_pkcs15_get_objects (card->p15card, SC_PKCS15_TYPE_PRKEY_RSA,
- priv->prkey_rsa_objs,
- DIM (priv->prkey_rsa_objs));
- if (rc < 0)
- {
- log_error ("private keys enumeration failed: %s\n", sc_strerror (rc));
- xfree (priv);
- return GNUPG_Card_Error;
- }
- priv->n_prkey_rsa_objs = rc;
-
- /* Read all certificate objects. */
- rc = sc_pkcs15_get_objects (card->p15card, SC_PKCS15_TYPE_CERT_X509,
- priv->cert_objs,
- DIM (priv->cert_objs));
- if (rc < 0)
- {
- log_error ("private keys enumeration failed: %s\n", sc_strerror (rc));
- xfree (priv);
- return GNUPG_Card_Error;
- }
- priv->n_cert_objs = rc;
-
- card->p15priv = priv;
- return 0;
-}
-
-
-/* Release private data used in this module. */
-void
-p15_release_private_data (CARD card)
-{
- if (!card->p15priv)
- return;
- xfree (card->p15priv);
- card->p15priv = NULL;
-}
-
-
-
-/* See card.c for interface description */
-static int
-p15_enum_keypairs (CARD card, int idx,
- unsigned char *keygrip, char **keyid)
-{
- int rc;
- KsbaError krc;
- struct p15private_s *priv;
- struct sc_pkcs15_object *tmpobj;
- int nobjs;
- struct sc_pkcs15_prkey_info *pinfo;
- struct sc_pkcs15_cert_info *certinfo;
- struct sc_pkcs15_cert *certder;
- KsbaCert cert;
-
- rc = init_private_data (card);
- if (rc)
- return rc;
- priv = card->p15priv;
- nobjs = priv->n_prkey_rsa_objs;
- rc = 0;
- if (idx >= nobjs)
- return -1;
- pinfo = priv->prkey_rsa_objs[idx]->data;
-
- /* now we need to read the certificate so that we can calculate the
- keygrip */
- rc = sc_pkcs15_find_cert_by_id (card->p15card, &pinfo->id, &tmpobj);
- if (rc)
- {
- log_info ("certificate for private key %d not found: %s\n",
- idx, sc_strerror (rc));
- /* note, that we return the ID anyway */
- rc = GNUPG_Missing_Certificate;
- goto return_keyid;
- }
- certinfo = tmpobj->data;
- rc = sc_pkcs15_read_certificate (card->p15card, certinfo, &certder);
- if (rc)
- {
- log_info ("failed to read certificate for private key %d: %s\n",
- idx, sc_strerror (rc));
- return GNUPG_Card_Error;
- }
-
- cert = ksba_cert_new ();
- if (!cert)
- {
- sc_pkcs15_free_certificate (certder);
- return GNUPG_Out_Of_Core;
- }
- krc = ksba_cert_init_from_mem (cert, certder->data, certder->data_len);
- sc_pkcs15_free_certificate (certder);
- if (krc)
- {
- log_error ("failed to parse the certificate for private key %d: %s\n",
- idx, ksba_strerror (krc));
- ksba_cert_release (cert);
- return GNUPG_Card_Error;
- }
- if (card_help_get_keygrip (cert, keygrip))
- {
- log_error ("failed to calculate the keygrip of private key %d\n", idx);
- ksba_cert_release (cert);
- return GNUPG_Card_Error;
- }
- ksba_cert_release (cert);
-
- rc = 0;
- return_keyid:
- if (keyid)
- {
- char *p;
- int i;
-
- *keyid = p = xtrymalloc (9+pinfo->id.len*2+1);
- if (!*keyid)
- return GNUPG_Out_Of_Core;
- p = stpcpy (p, "P15-5015.");
- for (i=0; i < pinfo->id.len; i++, p += 2)
- sprintf (p, "%02X", pinfo->id.value[i]);
- *p = 0;
- }
-
- return rc;
-}
-
-/* See card.c for interface description */
-static int
-p15_enum_certs (CARD card, int idx, char **certid, int *type)
-{
- int rc;
- struct p15private_s *priv;
- struct sc_pkcs15_object *obj;
- struct sc_pkcs15_cert_info *cinfo;
- int nobjs;
-
- rc = init_private_data (card);
- if (rc)
- return rc;
- priv = card->p15priv;
- nobjs = priv->n_cert_objs;
- rc = 0;
- if (idx >= nobjs)
- return -1;
- obj = priv->cert_objs[idx];
- cinfo = obj->data;
-
- if (certid)
- {
- char *p;
- int i;
-
- *certid = p = xtrymalloc (9+cinfo->id.len*2+1);
- if (!*certid)
- return GNUPG_Out_Of_Core;
- p = stpcpy (p, "P15-5015.");
- for (i=0; i < cinfo->id.len; i++, p += 2)
- sprintf (p, "%02X", cinfo->id.value[i]);
- *p = 0;
- }
- if (type)
- {
- if (!obj->df)
- *type = 0; /* unknown */
- else if (obj->df->type == SC_PKCS15_CDF)
- *type = 100;
- else if (obj->df->type == SC_PKCS15_CDF_TRUSTED)
- *type = 101;
- else if (obj->df->type == SC_PKCS15_CDF_USEFUL)
- *type = 102;
- else
- *type = 0; /* error -> unknown */
- }
-
- return rc;
-}
-
-
-
-static int
-idstr_to_id (const char *idstr, struct sc_pkcs15_id *id)
-{
- const char *s;
- int n;
-
- /* For now we only support the standard DF */
- if (strncmp (idstr, "P15-5015.", 9) )
- return GNUPG_Invalid_Id;
- for (s=idstr+9, n=0; hexdigitp (s); s++, n++)
- ;
- if (*s || (n&1))
- return GNUPG_Invalid_Id; /* invalid or odd number of digits */
- n /= 2;
- if (!n || n > SC_PKCS15_MAX_ID_SIZE)
- return GNUPG_Invalid_Id; /* empty or too large */
- for (s=idstr+9, n=0; *s; s += 2, n++)
- id->value[n] = xtoi_2 (s);
- id->len = n;
- return 0;
-}
-
-
-/* See card.c for interface description */
-static int
-p15_read_cert (CARD card, const char *certidstr,
- unsigned char **cert, size_t *ncert)
-{
- struct sc_pkcs15_object *tmpobj;
- struct sc_pkcs15_id certid;
- struct sc_pkcs15_cert_info *certinfo;
- struct sc_pkcs15_cert *certder;
- int rc;
-
- if (!card || !certidstr || !cert || !ncert)
- return GNUPG_Invalid_Value;
- if (!card->p15card)
- return GNUPG_No_PKCS15_App;
-
- rc = idstr_to_id (certidstr, &certid);
- if (rc)
- return rc;
-
- rc = sc_pkcs15_find_cert_by_id (card->p15card, &certid, &tmpobj);
- if (rc)
- {
- log_info ("certificate '%s' not found: %s\n",
- certidstr, sc_strerror (rc));
- return -1;
- }
- certinfo = tmpobj->data;
- rc = sc_pkcs15_read_certificate (card->p15card, certinfo, &certder);
- if (rc)
- {
- log_info ("failed to read certificate '%s': %s\n",
- certidstr, sc_strerror (rc));
- return GNUPG_Card_Error;
- }
-
- *cert = xtrymalloc (certder->data_len);
- if (!*cert)
- {
- sc_pkcs15_free_certificate (certder);
- return GNUPG_Out_Of_Core;
- }
- memcpy (*cert, certder->data, certder->data_len);
- *ncert = certder->data_len;
- sc_pkcs15_free_certificate (certder);
- return 0;
-}
-
-
-
-
-
-static int
-p15_prepare_key (CARD card, const char *keyidstr,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg, struct sc_pkcs15_object **r_keyobj)
-{
- struct sc_pkcs15_id keyid;
- struct sc_pkcs15_pin_info *pin;
- struct sc_pkcs15_object *keyobj, *pinobj;
- char *pinvalue;
- int rc;
-
- rc = idstr_to_id (keyidstr, &keyid);
- if (rc)
- return rc;
-
- rc = sc_pkcs15_find_prkey_by_id (card->p15card, &keyid, &keyobj);
- if (rc < 0)
- {
- log_error ("private key not found: %s\n", sc_strerror(rc));
- return GNUPG_No_Secret_Key;
- }
-
- rc = sc_pkcs15_find_pin_by_auth_id (card->p15card,
- &keyobj->auth_id, &pinobj);
- if (rc)
- {
- log_error ("failed to find PIN by auth ID: %s\n", sc_strerror (rc));
- return GNUPG_Bad_PIN_Method;
- }
- pin = pinobj->data;
-
- /* Fixme: pack this into a verification loop */
- /* Fixme: we might want to pass pin->min_length and
- pin->stored_length */
- rc = pincb (pincb_arg, pinobj->label, &pinvalue);
- if (rc)
- {
- log_info ("PIN callback returned error: %s\n", gnupg_strerror (rc));
- return rc;
- }
-
- rc = sc_pkcs15_verify_pin (card->p15card, pin,
- pinvalue, strlen (pinvalue));
- xfree (pinvalue);
- if (rc)
- {
- log_info ("PIN verification failed: %s\n", sc_strerror (rc));
- return GNUPG_Bad_PIN;
- }
-
- /* fixme: check wheter we need to release KEYOBJ in case of an error */
- *r_keyobj = keyobj;
- return 0;
-}
-
-
-/* See card.c for interface description */
-static int
-p15_sign (CARD card, const char *keyidstr, int hashalgo,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen )
-{
- unsigned int cryptflags;
- struct sc_pkcs15_object *keyobj;
- int rc;
- unsigned char *outbuf = NULL;
- size_t outbuflen;
-
- if (hashalgo != GCRY_MD_SHA1)
- return GNUPG_Unsupported_Algorithm;
-
- rc = p15_prepare_key (card, keyidstr, pincb, pincb_arg, &keyobj);
- if (rc)
- return rc;
-
- cryptflags = SC_ALGORITHM_RSA_PAD_PKCS1;
-
- outbuflen = 1024;
- outbuf = xtrymalloc (outbuflen);
- if (!outbuf)
- return GNUPG_Out_Of_Core;
-
- rc = sc_pkcs15_compute_signature (card->p15card, keyobj,
- cryptflags,
- indata, indatalen,
- outbuf, outbuflen );
- if (rc < 0)
- {
- log_error ("failed to create signature: %s\n", sc_strerror (rc));
- rc = GNUPG_Card_Error;
- }
- else
- {
- *outdatalen = rc;
- *outdata = outbuf;
- outbuf = NULL;
- rc = 0;
- }
-
- xfree (outbuf);
- return rc;
-}
-
-
-/* See card.c for description */
-static int
-p15_decipher (CARD card, const char *keyidstr,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen )
-{
- struct sc_pkcs15_object *keyobj;
- int rc;
- unsigned char *outbuf = NULL;
- size_t outbuflen;
-
- rc = p15_prepare_key (card, keyidstr, pincb, pincb_arg, &keyobj);
- if (rc)
- return rc;
-
- if (card && card->scard && card->scard->driver
- && !strcasecmp (card->scard->driver->short_name, "tcos"))
- {
- /* very ugly hack to force the use of a local key. We need this
- until we have fixed the initialization code for TCOS cards */
- struct sc_pkcs15_prkey_info *prkey = keyobj->data;
- if ( !(prkey->key_reference & 0x80))
- {
- prkey->key_reference |= 0x80;
- log_debug ("using TCOS hack to force the use of local keys\n");
- }
- if (*keyidstr && keyidstr[strlen(keyidstr)-1] == '6')
- {
- prkey->key_reference |= 1;
- log_debug ("warning: using even more TCOS hacks\n");
- }
- }
-
- outbuflen = indatalen < 256? 256 : indatalen;
- outbuf = xtrymalloc (outbuflen);
- if (!outbuf)
- return GNUPG_Out_Of_Core;
-
- rc = sc_pkcs15_decipher (card->p15card, keyobj,
- 0,
- indata, indatalen,
- outbuf, outbuflen);
- if (rc < 0)
- {
- log_error ("failed to decipher the data: %s\n", sc_strerror (rc));
- rc = GNUPG_Card_Error;
- }
- else
- {
- *outdatalen = rc;
- *outdata = outbuf;
- outbuf = NULL;
- rc = 0;
- }
-
- xfree (outbuf);
- return rc;
-}
-
-
-
-/* Bind our operations to the card */
-void
-card_p15_bind (CARD card)
-{
- card->fnc.enum_keypairs = p15_enum_keypairs;
- card->fnc.enum_certs = p15_enum_certs;
- card->fnc.read_cert = p15_read_cert;
- card->fnc.sign = p15_sign;
- card->fnc.decipher = p15_decipher;
-}
diff --git a/scd/card.c b/scd/card.c
deleted file mode 100644
index 9e0f060e5..000000000
--- a/scd/card.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/* card.c - SCdaemon card functions
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include <opensc/pkcs15.h>
-#include <ksba.h>
-
-#include "scdaemon.h"
-#include "card-common.h"
-
-/* Map the SC error codes to the GNUPG ones */
-int
-map_sc_err (int rc)
-{
- switch (rc)
- {
- case 0: rc = 0; break;
- case SC_ERROR_NOT_SUPPORTED: rc = GNUPG_Not_Supported; break;
- case SC_ERROR_PKCS15_APP_NOT_FOUND: rc = GNUPG_No_PKCS15_App; break;
- case SC_ERROR_OUT_OF_MEMORY: rc = GNUPG_Out_Of_Core; break;
- case SC_ERROR_CARD_NOT_PRESENT: rc = GNUPG_Card_Not_Present; break;
- case SC_ERROR_CARD_REMOVED: rc = GNUPG_Card_Removed; break;
- case SC_ERROR_INVALID_CARD: rc = GNUPG_Invalid_Card; break;
- default: rc = GNUPG_Card_Error; break;
- }
- return rc;
-}
-
-/* Get the keygrip from CERT, return 0 on success */
-int
-card_help_get_keygrip (KsbaCert cert, unsigned char *array)
-{
- GCRY_SEXP s_pkey;
- int rc;
- KsbaSexp p;
- size_t n;
-
- p = ksba_cert_get_public_key (cert);
- if (!p)
- return -1; /* oops */
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- if (!n)
- return -1; /* libksba did not return a proper S-expression */
- rc = gcry_sexp_sscan ( &s_pkey, NULL, p, n);
- xfree (p);
- if (rc)
- return -1; /* can't parse that S-expression */
- array = gcry_pk_get_keygrip (s_pkey, array);
- gcry_sexp_release (s_pkey);
- if (!array)
- return -1; /* failed to calculate the keygrip */
- return 0;
-}
-
-
-
-
-
-
-
-/* Create a new context for the card and figures out some basic
- information of the card. Detects whgether a PKCS_15 application is
- stored.
-
- Common errors: GNUPG_Card_Not_Present */
-int
-card_open (CARD *rcard)
-{
- CARD card;
- int rc;
-
- card = xtrycalloc (1, sizeof *card);
- if (!card)
- return GNUPG_Out_Of_Core;
- card->reader = 0;
-
- rc = sc_establish_context (&card->ctx, "scdaemon");
- if (rc)
- {
- log_error ("failed to establish SC context: %s\n", sc_strerror (rc));
- rc = map_sc_err (rc);
- goto leave;
- }
- if (card->reader >= card->ctx->reader_count)
- {
- log_error ("no card reader available\n");
- rc = GNUPG_Card_Error;
- goto leave;
- }
- card->ctx->error_file = log_get_stream ();
- card->ctx->debug = opt.debug_sc;
- card->ctx->debug_file = log_get_stream ();
-
- if (sc_detect_card_presence (card->ctx->reader[card->reader], 0) != 1)
- {
- rc = GNUPG_Card_Not_Present;
- goto leave;
- }
-
- rc = sc_connect_card (card->ctx->reader[card->reader], 0, &card->scard);
- if (rc)
- {
- log_error ("failed to connect card in reader %d: %s\n",
- card->reader, sc_strerror (rc));
- rc = map_sc_err (rc);
- goto leave;
- }
- if (opt.verbose)
- log_info ("connected to card in reader %d using driver `%s'\n",
- card->reader, card->scard->driver->name);
-
- rc = sc_lock (card->scard);
- if (rc)
- {
- log_error ("can't lock card in reader %d: %s\n",
- card->reader, sc_strerror (rc));
- rc = map_sc_err (rc);
- goto leave;
- }
-
-
- leave:
- if (rc)
- card_close (card);
- else
- *rcard = card;
- return rc;
-}
-
-
-/* Close a card and release all resources */
-void
-card_close (CARD card)
-{
- if (card)
- {
- if (card->p15card)
- {
- sc_pkcs15_unbind (card->p15card);
- card->p15card = NULL;
- }
- if (card->p15priv)
- p15_release_private_data (card);
- if (card->scard)
- {
- sc_unlock (card->scard);
- sc_disconnect_card (card->scard, 0);
- card->scard = NULL;
- }
- if (card->ctx)
- {
- sc_release_context (card->ctx);
- card->ctx = NULL;
- }
- xfree (card);
- }
-}
-
-/* Locate a simple TLV encoded data object in BUFFER of LENGTH and
- return a pointer to value as well as its length in NBYTES. Return
- NULL if it was not found. Note, that the function does not check
- whether the value fits into the provided buffer. */
-static const char *
-find_simple_tlv (const unsigned char *buffer, size_t length,
- int tag, size_t *nbytes)
-{
- const char *s = buffer;
- size_t n = length;
- size_t len;
-
- for (;;)
- {
- buffer = s;
- if (n < 2)
- return NULL; /* buffer too short for tag and length. */
- len = s[1];
- s += 2; n -= 2;
- if (len == 255)
- {
- if (n < 2)
- return NULL; /* we expected 2 more bytes with the length. */
- len = (s[0] << 8) | s[1];
- s += 2; n -= 2;
- }
- if (*buffer == tag)
- {
- *nbytes = len;
- return s;
- }
- if (len > n)
- return NULL; /* buffer too short to skip to the next tag. */
- s += len; n -= len;
- }
-}
-
-/* Find the ICC Serial Number within the provided BUFFER of LENGTH
- (which should contain the GDO file) and return it as a hex encoded
- string and allocated string in SERIAL. Return an error code when
- the ICCSN was not found. */
-static int
-find_iccsn (const unsigned char *buffer, size_t length, char **serial)
-{
- size_t n;
- const unsigned char *s;
- char *p;
-
- s = find_simple_tlv (buffer, length, 0x5A, &n);
- if (!s)
- return GNUPG_Card_Error;
- length -= s - buffer;
- if (n > length)
- {
- /* Oops, it does not fit into the buffer. This is an invalid
- encoding (or the buffer is too short. However, I have some
- test cards with such an invalid encoding and therefore I use
- this ugly workaround to return something I can further
- experiment with. */
- if (n == 0x0D && length+1 == n)
- {
- log_debug ("enabling BMI testcard workaround\n");
- n--;
- }
- else
- return GNUPG_Card_Error; /* Bad encoding; does not fit into buffer. */
- }
- if (!n)
- return GNUPG_Card_Error; /* Well, that is too short. */
-
- *serial = p = xtrymalloc (2*n+1);
- if (!*serial)
- return GNUPG_Out_Of_Core;
- for (; n; n--, p += 2, s++)
- sprintf (p, "%02X", *s);
- *p = 0;
- return 0;
-}
-
-
-/* Retrieve the serial number and the time of the last update of the
- card. The serial number is returned as a malloced string (hex
- encoded) in SERIAL and the time of update is returned in STAMP.
- If no update time is available the returned value is 0. The serial
- is mandatory for a PKCS_15 application and an error will be
- returned if this value is not availbale. For non-PKCS-15 cards a
- serial number is constructed by other means. Caller must free
- SERIAL unless the function returns an error. */
-int
-card_get_serial_and_stamp (CARD card, char **serial, time_t *stamp)
-{
- int rc;
- struct sc_path path;
- struct sc_file *file;
- unsigned char buf[256];
- int buflen;
-
- if (!card || !serial || !stamp)
- return GNUPG_Invalid_Value;
-
- *serial = NULL;
- *stamp = 0; /* not available */
-
- if (!card->fnc.initialized)
- {
- card->fnc.initialized = 1;
- /* The first use of this card tries to figure out the type of the card
- and sets up the function pointers. */
- rc = sc_pkcs15_bind (card->scard, &card->p15card);
- if (rc)
- {
- if (rc != SC_ERROR_PKCS15_APP_NOT_FOUND)
- log_error ("binding of existing PKCS-15 failed in reader %d: %s\n",
- card->reader, sc_strerror (rc));
- card->p15card = NULL;
- rc = 0;
- }
- if (card->p15card)
- card_p15_bind (card);
- else
- card_dinsig_bind (card);
- card->fnc.initialized = 1;
- }
-
-
- /* We should lookup the iso 7812-1 and 8583-3 - argh ISO
- practice is suppressing innovation - IETF rules! So we
- always get the serialnumber from the 2F02 GDO file. */
- /* FIXME: in case we can't parse the 2F02 EF and we have a P15 card,
- we should get the serial number from the respective P15 file */
- sc_format_path ("3F002F02", &path);
- rc = sc_select_file (card->scard, &path, &file);
- if (rc)
- {
- log_error ("sc_select_file failed: %s\n", sc_strerror (rc));
- return GNUPG_Card_Error;
- }
- if (file->type != SC_FILE_TYPE_WORKING_EF
- || file->ef_structure != SC_FILE_EF_TRANSPARENT)
- {
- log_error ("wrong type or structure of GDO file\n");
- sc_file_free (file);
- return GNUPG_Card_Error;
- }
-
- if (!file->size || file->size >= DIM(buf) )
- { /* FIXME: Use a real parser */
- log_error ("unsupported size of GDO file (%d)\n", file->size);
- sc_file_free (file);
- return GNUPG_Card_Error;
- }
- buflen = file->size;
-
- rc = sc_read_binary (card->scard, 0, buf, buflen, 0);
- sc_file_free (file);
- if (rc < 0)
- {
- log_error ("error reading GDO file: %s\n", sc_strerror (rc));
- return GNUPG_Card_Error;
- }
- if (rc != buflen)
- {
- log_error ("short read on GDO file\n");
- return GNUPG_Card_Error;
- }
-
- rc = find_iccsn (buf, buflen, serial);
- if (rc == GNUPG_Card_Error)
- log_error ("invalid structure of GDO file\n");
- if (!rc && card->p15card && !strcmp (*serial, "D27600000000000000000000"))
- { /* This is a German card with a silly serial number. Try to get
- the serial number from the EF(TokenInfo). We indicate such a
- serial number by the using the prefix: "FF0100". */
- const char *efser = card->p15card->serial_number;
- char *p;
-
- if (!efser)
- efser = "";
-
- xfree (*serial);
- *serial = NULL;
- p = xtrymalloc (strlen (efser) + 7);
- if (!p)
- rc = GNUPG_Out_Of_Core;
- else
- {
- strcpy (p, "FF0100");
- strcpy (p+6, efser);
- *serial = p;
- }
- }
- else if (!rc && **serial == 'F' && (*serial)[1] == 'F')
- { /* The serial number starts with our special prefix. This
- requires that we put our default prefix "FF0000" in front. */
- char *p = xtrymalloc (strlen (*serial) + 7);
- if (!p)
- {
- xfree (*serial);
- *serial = NULL;
- rc = GNUPG_Out_Of_Core;
- }
- else
- {
- strcpy (p, "FF0000");
- strcpy (p+6, *serial);
- xfree (*serial);
- *serial = p;
- }
- }
- return rc;
-}
-
-
-/* Enumerate all keypairs on the card and return the Keygrip as well
- as the internal identification of the key. KEYGRIP must be a
- caller provided buffer with a size of 20 bytes which will receive
- the KEYGRIP of the keypair. If KEYID is not NULL, it returns the
- ID field of the key in allocated memory; this is a string without
- spaces. The function returns -1 when all keys have been
- enumerated. Note that the error GNUPG_Missing_Certificate may be
- returned if there is just the private key but no public key (ie.e a
- certificate) available. Applications might want to continue
- enumerating after this error.*/
-int
-card_enum_keypairs (CARD card, int idx,
- unsigned char *keygrip,
- char **keyid)
-{
- int rc;
-
- if (keyid)
- *keyid = NULL;
-
- if (!card || !keygrip)
- return GNUPG_Invalid_Value;
- if (idx < 0)
- return GNUPG_Invalid_Index;
- if (!card->fnc.initialized)
- return GNUPG_Card_Not_Initialized;
- if (!card->fnc.enum_keypairs)
- return GNUPG_Unsupported_Operation;
- rc = card->fnc.enum_keypairs (card, idx, keygrip, keyid);
- if (opt.verbose)
- log_info ("card operation enum_keypairs result: %s\n",
- gnupg_strerror (rc));
- return rc;
-}
-
-
-/* Enumerate all trusted certificates available on the card, return
- their ID in CERT and the type in CERTTYPE. Types of certificates
- are:
- 0 := Unknown
- 100 := Regular X.509 cert
- 101 := Trusted X.509 cert
- 102 := Useful X.509 cert
- */
-int
-card_enum_certs (CARD card, int idx, char **certid, int *certtype)
-{
- int rc;
-
- if (certid)
- *certid = NULL;
-
- if (!card)
- return GNUPG_Invalid_Value;
- if (idx < 0)
- return GNUPG_Invalid_Index;
- if (!card->fnc.initialized)
- return GNUPG_Card_Not_Initialized;
- if (!card->fnc.enum_certs)
- return GNUPG_Unsupported_Operation;
- rc = card->fnc.enum_certs (card, idx, certid, certtype);
- if (opt.verbose)
- log_info ("card operation enum_certs result: %s\n",
- gnupg_strerror (rc));
- return rc;
-}
-
-
-
-/* Read the certificate identified by CERTIDSTR which is the
- hexadecimal encoded ID of the certificate, prefixed with the string
- "3F005015.". The certificate is return in DER encoded form in CERT
- and NCERT. */
-int
-card_read_cert (CARD card, const char *certidstr,
- unsigned char **cert, size_t *ncert)
-{
- int rc;
-
- if (!card || !certidstr || !cert || !ncert)
- return GNUPG_Invalid_Value;
- if (!card->fnc.initialized)
- return GNUPG_Card_Not_Initialized;
- if (!card->fnc.read_cert)
- return GNUPG_Unsupported_Operation;
- rc = card->fnc.read_cert (card, certidstr, cert, ncert);
- if (opt.verbose)
- log_info ("card operation read_cert result: %s\n", gnupg_strerror (rc));
- return rc;
-}
-
-
-/* Create the signature and return the allocated result in OUTDATA.
- If a PIN is required the PINCB will be used to ask for the PIN; it
- should return the PIN in an allocated buffer and put it into PIN. */
-int
-card_sign (CARD card, const char *keyidstr, int hashalgo,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen )
-{
- int rc;
-
- if (!card || !indata || !indatalen || !outdata || !outdatalen || !pincb)
- return GNUPG_Invalid_Value;
- if (!card->fnc.initialized)
- return GNUPG_Card_Not_Initialized;
- if (!card->fnc.sign)
- return GNUPG_Unsupported_Operation;
- rc = card->fnc.sign (card, keyidstr, hashalgo,
- pincb, pincb_arg,
- indata, indatalen,
- outdata, outdatalen);
- if (opt.verbose)
- log_info ("card operation sign result: %s\n", gnupg_strerror (rc));
- return rc;
-}
-
-
-/* Create the signature and return the allocated result in OUTDATA.
- If a PIN is required the PINCB will be used to ask for the PIN; it
- should return the PIN in an allocated buffer and put it into PIN. */
-int
-card_decipher (CARD card, const char *keyidstr,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen )
-{
- int rc;
-
- if (!card || !indata || !indatalen || !outdata || !outdatalen || !pincb)
- return GNUPG_Invalid_Value;
- if (!card->fnc.initialized)
- return GNUPG_Card_Not_Initialized;
- if (!card->fnc.decipher)
- return GNUPG_Unsupported_Operation;
- rc = card->fnc.decipher (card, keyidstr,
- pincb, pincb_arg,
- indata, indatalen,
- outdata, outdatalen);
- if (opt.verbose)
- log_info ("card operation decipher result: %s\n", gnupg_strerror (rc));
- return rc;
-}
diff --git a/scd/command.c b/scd/command.c
deleted file mode 100644
index aa410a6ee..000000000
--- a/scd/command.c
+++ /dev/null
@@ -1,651 +0,0 @@
-/* command.c - SCdaemon command handler
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <ksba.h>
-
-#include "scdaemon.h"
-#include "../assuan/assuan.h"
-
-/* maximum length aloowed as a PIN; used for INQUIRE NEEDPIN */
-#define MAXLEN_PIN 100
-
-#define set_error(e,t) assuan_set_error (ctx, ASSUAN_ ## e, (t))
-
-/* Data used to associate an Assuan context with local server data */
-struct server_local_s {
- ASSUAN_CONTEXT assuan_ctx;
-};
-
-
-/* Check whether the option NAME appears in LINE */
-static int
-has_option (const char *line, const char *name)
-{
- const char *s;
- int n = strlen (name);
-
- s = strstr (line, name);
- return (s && (s == line || spacep (s-1)) && (!s[n] || spacep (s+n)));
-}
-
-
-
-
-/* Note, that this reset_notify is also used for cleanup purposes. */
-static void
-reset_notify (ASSUAN_CONTEXT ctx)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- if (ctrl->card_ctx)
- {
- card_close (ctrl->card_ctx);
- ctrl->card_ctx = NULL;
- xfree (ctrl->in_data.value);
- ctrl->in_data.value = NULL;
- }
-}
-
-
-static int
-option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
-{
- return 0;
-}
-
-
-/* If the card has not yet been opened, do it. Note that this
- function returns an Assuan error, so don't map the error a second
- time */
-static AssuanError
-open_card (CTRL ctrl)
-{
- if (!ctrl->card_ctx)
- {
- int rc = card_open (&ctrl->card_ctx);
- if (rc)
- return map_to_assuan_status (rc);
- }
- return 0;
-}
-
-
-/* SERIALNO
-
- Return the serial number of the card using a status reponse. This
- functon should be used to check for the presence of a card.
-
- This function is special in that it can be used to reset the card.
- Most other functions will return an error when a card change has
- been detected and the use of this function is therefore required.
-
- Background: We want to keep the client clear of handling card
- changes between operations; i.e. the client can assume that all
- operations are doneon the same card unless he call this function.
- */
-static int
-cmd_serialno (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc = 0;
- char *serial_and_stamp;
- char *serial;
- time_t stamp;
-
- if ((rc = open_card (ctrl)))
- return rc;
-
- rc = card_get_serial_and_stamp (ctrl->card_ctx, &serial, &stamp);
- if (rc)
- return map_to_assuan_status (rc);
- rc = asprintf (&serial_and_stamp, "%s %lu", serial, (unsigned long)stamp);
- xfree (serial);
- if (rc < 0)
- return ASSUAN_Out_Of_Core;
- rc = 0;
- assuan_write_status (ctx, "SERIALNO", serial_and_stamp);
- free (serial_and_stamp);
- return 0;
-}
-
-
-
-
-/* LEARN [--force]
-
- Learn all useful information of the currently inserted card. When
- used without the force options, the command might do an INQUIRE
- like this:
-
- INQUIRE KNOWNCARDP <hexstring_with_serialNumber> <timestamp>
-
- The client should just send an "END" if the processing should go on
- or a "CANCEL" to force the function to terminate with a Cancel
- error message. The response of this command is a list of status
- lines formatted as this:
-
- S KEYPAIRINFO <hexstring_with_keygrip> <hexstring_with_id>
-
- If there is no certificate yet stored on the card a single "X" is
- returned as the keygrip. In addition to the keypair info, information
- about all certificates stored on the card is also returned:
-
- S CERTINFO <certtype> <hexstring_with_id>
-
- Where CERTINFO is a number indicating the type of certificate:
- 0 := Unknown
- 100 := Regular X.509 cert
- 101 := Trusted X.509 cert
- 102 := Useful X.509 cert
-
-
-*/
-static int
-cmd_learn (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc = 0;
- int idx;
-
- if ((rc = open_card (ctrl)))
- return rc;
-
- /* Unless the force option is used we try a shortcut by identifying
- the card using a serial number and inquiring the client with
- that. The client may choose to cancel the operation if he already
- knows about this card */
- {
- char *serial_and_stamp;
- char *serial;
- time_t stamp;
-
- rc = card_get_serial_and_stamp (ctrl->card_ctx, &serial, &stamp);
- if (rc)
- return map_to_assuan_status (rc);
- rc = asprintf (&serial_and_stamp, "%s %lu", serial, (unsigned long)stamp);
- xfree (serial);
- if (rc < 0)
- return ASSUAN_Out_Of_Core;
- rc = 0;
- assuan_write_status (ctx, "SERIALNO", serial_and_stamp);
-
- if (!has_option (line, "--force"))
- {
- char *command;
-
- rc = asprintf (&command, "KNOWNCARDP %s", serial_and_stamp);
- if (rc < 0)
- {
- free (serial_and_stamp);
- return ASSUAN_Out_Of_Core;
- }
- rc = 0;
- rc = assuan_inquire (ctx, command, NULL, NULL, 0);
- free (command); /* (must use standard free here) */
- if (rc)
- {
- if (rc != ASSUAN_Canceled)
- log_error ("inquire KNOWNCARDP failed: %s\n",
- assuan_strerror (rc));
- free (serial_and_stamp);
- return rc;
- }
- /* not canceled, so we have to proceeed */
- }
- free (serial_and_stamp);
- }
-
- /* Return information about the certificates. */
- for (idx=0; !rc; idx++)
- {
- char *certid;
- int certtype;
-
- rc = card_enum_certs (ctrl->card_ctx, idx, &certid, &certtype);
- if (!rc)
- {
- char *buf;
-
- buf = xtrymalloc (40 + 1 + strlen (certid) + 1);
- if (!buf)
- rc = GNUPG_Out_Of_Core;
- else
- {
- sprintf (buf, "%d %s", certtype, certid);
- assuan_write_status (ctx, "CERTINFO", buf);
- xfree (buf);
- }
- }
- xfree (certid);
- }
- if (rc == -1)
- rc = 0;
-
-
- /* Return information about the keys. */
- for (idx=0; !rc; idx++)
- {
- unsigned char keygrip[20];
- char *keyid;
- int no_cert = 0;
-
- rc = card_enum_keypairs (ctrl->card_ctx, idx, keygrip, &keyid);
- if (rc == GNUPG_Missing_Certificate && keyid)
- {
- /* this does happen with an incomplete personalized
- card; i.e. during the time we have stored the key on the
- card but not stored the certificate; probably becuase it
- has not yet been received back from the CA. Note that we
- must release KEYID in this case. */
- rc = 0;
- no_cert = 1;
- }
- if (!rc)
- {
- char *buf, *p;
-
- buf = p = xtrymalloc (40 + 1 + strlen (keyid) + 1);
- if (!buf)
- rc = GNUPG_Out_Of_Core;
- else
- {
- int i;
-
- if (no_cert)
- *p++ = 'X';
- else
- {
- for (i=0; i < 20; i++, p += 2)
- sprintf (p, "%02X", keygrip[i]);
- }
- *p++ = ' ';
- strcpy (p, keyid);
- assuan_write_status (ctx, "KEYPAIRINFO", buf);
- xfree (buf);
- }
- }
- xfree (keyid);
- }
- if (rc == -1)
- rc = 0;
-
-
- return map_to_assuan_status (rc);
-}
-
-
-
-/* READCERT <hexified_certid>
-
- */
-static int
-cmd_readcert (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
- unsigned char *cert;
- size_t ncert;
-
- if ((rc = open_card (ctrl)))
- return rc;
-
- rc = card_read_cert (ctrl->card_ctx, line, &cert, &ncert);
- if (rc)
- {
- log_error ("card_read_cert failed: %s\n", gnupg_strerror (rc));
- }
- if (!rc)
- {
- rc = assuan_send_data (ctx, cert, ncert);
- xfree (cert);
- if (rc)
- return rc;
- }
-
- return map_to_assuan_status (rc);
-}
-
-
-/* READKEY <hexified_certid>
-
- Return the public key for the given cert or key ID as an standard
- S-Expression. */
-static int
-cmd_readkey (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
- unsigned char *cert = NULL;
- size_t ncert, n;
- KsbaCert kc = NULL;
- KsbaSexp p;
-
- if ((rc = open_card (ctrl)))
- return rc;
-
- rc = card_read_cert (ctrl->card_ctx, line, &cert, &ncert);
- if (rc)
- {
- log_error ("card_read_cert failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- kc = ksba_cert_new ();
- if (!kc)
- {
- xfree (cert);
- rc = GNUPG_Out_Of_Core;
- goto leave;
- }
- rc = ksba_cert_init_from_mem (kc, cert, ncert);
- if (rc)
- {
- log_error ("failed to parse the certificate: %s\n", ksba_strerror (rc));
- rc = map_ksba_err (rc);
- goto leave;
- }
-
- p = ksba_cert_get_public_key (kc);
- if (!p)
- {
- rc = GNUPG_No_Public_Key;
- goto leave;
- }
-
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- rc = assuan_send_data (ctx, p, n);
- rc = map_assuan_err (rc);
- xfree (p);
-
-
- leave:
- ksba_cert_release (kc);
- xfree (cert);
- return map_to_assuan_status (rc);
-}
-
-
-
-
-/* SETDATA <hexstring>
-
- The client should use this command to tell us the data he want to
- sign. */
-static int
-cmd_setdata (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int n;
- char *p;
- unsigned char *buf;
-
- /* parse the hexstring */
- for (p=line,n=0; hexdigitp (p); p++, n++)
- ;
- if (*p)
- return set_error (Parameter_Error, "invalid hexstring");
- if ((n&1))
- return set_error (Parameter_Error, "odd number of digits");
- n /= 2;
- buf = xtrymalloc (n);
- if (!buf)
- return ASSUAN_Out_Of_Core;
-
- ctrl->in_data.value = buf;
- ctrl->in_data.valuelen = n;
- for (p=line, n=0; n < ctrl->in_data.valuelen; p += 2, n++)
- buf[n] = xtoi_2 (p);
- return 0;
-}
-
-
-
-static int
-pin_cb (void *opaque, const char *info, char **retstr)
-{
- ASSUAN_CONTEXT ctx = opaque;
- char *command;
- int rc;
- char *value;
- size_t valuelen;
-
- *retstr = NULL;
- log_debug ("asking for PIN '%s'\n", info);
-
- rc = asprintf (&command, "NEEDPIN %s", info);
- if (rc < 0)
- return GNUPG_Out_Of_Core;
-
- /* FIXME: Write an inquire function which returns the result in
- secure memory */
- rc = assuan_inquire (ctx, command, &value, &valuelen, MAXLEN_PIN);
- free (command);
- if (rc)
- return map_assuan_err (rc);
-
- if (!valuelen || value[valuelen-1])
- {
- /* We require that the returned value is an UTF-8 string */
- xfree (value);
- return GNUPG_Invalid_Response;
- }
- *retstr = value;
- return 0;
-}
-
-
-/* PKSIGN <hexified_id>
-
- */
-static int
-cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
- void *outdata;
- size_t outdatalen;
- char *keyidstr;
-
- if ((rc = open_card (ctrl)))
- return rc;
-
- /* We have to use a copy of the key ID because the function may use
- the pin_cb which in turn uses the assuan line buffer and thus
- overwriting the original line with the keyid */
- keyidstr = strdup (line);
- if (!keyidstr)
- return ASSUAN_Out_Of_Core;
- rc = card_sign (ctrl->card_ctx,
- keyidstr, GCRY_MD_SHA1,
- pin_cb, ctx,
- ctrl->in_data.value, ctrl->in_data.valuelen,
- &outdata, &outdatalen);
- free (keyidstr);
- if (rc)
- {
- log_error ("card_sign failed: %s\n", gnupg_strerror (rc));
- }
- else
- {
- rc = assuan_send_data (ctx, outdata, outdatalen);
- xfree (outdata);
- if (rc)
- return rc; /* that is already an assuan error code */
- }
-
- return map_to_assuan_status (rc);
-}
-
-/* PKDECRYPT <hexified_id>
-
- */
-static int
-cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
- void *outdata;
- size_t outdatalen;
- char *keyidstr;
-
- if ((rc = open_card (ctrl)))
- return rc;
-
- keyidstr = strdup (line);
- if (!keyidstr)
- return ASSUAN_Out_Of_Core;
- rc = card_decipher (ctrl->card_ctx,
- keyidstr,
- pin_cb, ctx,
- ctrl->in_data.value, ctrl->in_data.valuelen,
- &outdata, &outdatalen);
- free (keyidstr);
- if (rc)
- {
- log_error ("card_create_signature failed: %s\n", gnupg_strerror (rc));
- }
- else
- {
- rc = assuan_send_data (ctx, outdata, outdatalen);
- xfree (outdata);
- if (rc)
- return rc; /* that is already an assuan error code */
- }
-
- return map_to_assuan_status (rc);
-}
-
-
-
-
-/* Tell the assuan library about our commands */
-static int
-register_commands (ASSUAN_CONTEXT ctx)
-{
- static struct {
- const char *name;
- int cmd_id;
- int (*handler)(ASSUAN_CONTEXT, char *line);
- } table[] = {
- { "SERIALNO", 0, cmd_serialno },
- { "LEARN", 0, cmd_learn },
- { "READCERT", 0, cmd_readcert },
- { "READKEY", 0, cmd_readkey },
- { "SETDATA", 0, cmd_setdata },
- { "PKSIGN", 0, cmd_pksign },
- { "PKDECRYPT", 0,cmd_pkdecrypt },
- { "", ASSUAN_CMD_INPUT, NULL },
- { "", ASSUAN_CMD_OUTPUT, NULL },
- { NULL }
- };
- int i, j, rc;
-
- for (i=j=0; table[i].name; i++)
- {
- rc = assuan_register_command (ctx,
- table[i].cmd_id? table[i].cmd_id
- : (ASSUAN_CMD_USER + j++),
- table[i].name, table[i].handler);
- if (rc)
- return rc;
- }
- assuan_set_hello_line (ctx, "GNU Privacy Guard's Smartcard server ready");
-
- assuan_register_reset_notify (ctx, reset_notify);
- assuan_register_option_handler (ctx, option_handler);
- return 0;
-}
-
-
-/* Startup the server. If LISTEN_FD is given as -1, this is simple
- piper server, otherwise it is a regular server */
-void
-scd_command_handler (int listen_fd)
-{
- int rc;
- ASSUAN_CONTEXT ctx;
- struct server_control_s ctrl;
-
- memset (&ctrl, 0, sizeof ctrl);
- scd_init_default_ctrl (&ctrl);
-
- if (listen_fd == -1)
- {
- int filedes[2];
-
- filedes[0] = 0;
- filedes[1] = 1;
- rc = assuan_init_pipe_server (&ctx, filedes);
- }
- else
- {
- rc = assuan_init_socket_server (&ctx, listen_fd);
- }
- if (rc)
- {
- log_error ("failed to initialize the server: %s\n",
- assuan_strerror(rc));
- scd_exit (2);
- }
- rc = register_commands (ctx);
- if (rc)
- {
- log_error ("failed to register commands with Assuan: %s\n",
- assuan_strerror(rc));
- scd_exit (2);
- }
- assuan_set_pointer (ctx, &ctrl);
- ctrl.server_local = xcalloc (1, sizeof *ctrl.server_local);
- ctrl.server_local->assuan_ctx = ctx;
-
- if (DBG_ASSUAN)
- assuan_set_log_stream (ctx, log_get_stream ());
-
- for (;;)
- {
- rc = assuan_accept (ctx);
- if (rc == -1)
- {
- break;
- }
- else if (rc)
- {
- log_info ("Assuan accept problem: %s\n", assuan_strerror (rc));
- break;
- }
-
- rc = assuan_process (ctx);
- if (rc)
- {
- log_info ("Assuan processing failed: %s\n", assuan_strerror (rc));
- continue;
- }
- }
- reset_notify (ctx); /* used for cleanup */
-
- assuan_deinit_server (ctx);
-}
diff --git a/scd/scdaemon.c b/scd/scdaemon.c
deleted file mode 100644
index b63b59c5b..000000000
--- a/scd/scdaemon.c
+++ /dev/null
@@ -1,633 +0,0 @@
-/* scdaemon.c - The GnuPG Smartcard Daemon
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include <ksba.h>
-#include <gcrypt.h>
-
-#define JNLIB_NEED_LOG_LOGV
-#include "scdaemon.h"
-#include "../assuan/assuan.h" /* malloc hooks */
-
-#include "i18n.h"
-#include "sysutils.h"
-
-
-
-enum cmd_and_opt_values
-{ aNull = 0,
- oCsh = 'c',
- oQuiet = 'q',
- oSh = 's',
- oVerbose = 'v',
-
- oNoVerbose = 500,
- oOptions,
- oDebug,
- oDebugAll,
- oDebugWait,
- oDebugSC,
- oNoGreeting,
- oNoOptions,
- oHomedir,
- oNoDetach,
- oNoGrab,
- oLogFile,
- oServer,
- oDaemon,
- oBatch,
-
-aTest };
-
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 301, NULL, 0, N_("@Options:\n ") },
-
- { oServer, "server", 0, N_("run in server mode (foreground)") },
- { oDaemon, "daemon", 0, N_("run in daemon mode (background)") },
- { oVerbose, "verbose", 0, N_("verbose") },
- { oQuiet, "quiet", 0, N_("be somewhat more quiet") },
- { oSh, "sh", 0, N_("sh-style command output") },
- { oCsh, "csh", 0, N_("csh-style command output") },
- { oOptions, "options" , 2, N_("read options from file")},
- { oDebug, "debug" ,4|16, N_("set debugging flags")},
- { oDebugAll, "debug-all" ,0, N_("enable full debugging")},
- { oDebugWait,"debug-wait",1, "@"},
- { oDebugSC, "debug-sc", 1, N_("|N|set OpenSC debug level to N")},
- { oNoDetach, "no-detach" ,0, N_("do not detach from the console")},
- { oLogFile, "log-file" ,2, N_("use a log file for the server")},
-
-
- {0}
-};
-
-
-static volatile int caught_fatal_sig = 0;
-
-/* It is possible that we are currently running under setuid permissions */
-static int maybe_setuid = 1;
-
-/* Name of the communication socket */
-static char socket_name[128];
-
-static const char *
-my_strusage (int level)
-{
- const char *p;
- switch (level)
- {
- case 11: p = "scdaemon (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p = _("Please report bugs to <" PACKAGE_BUGREPORT ">.\n");
- break;
- case 1:
- case 40: p = _("Usage: scdaemon [options] (-h for help)");
- break;
- case 41: p = _("Syntax: scdaemon [options] [command [args]]\n"
- "Smartcard daemon for GnuPG\n");
- break;
-
- default: p = NULL;
- }
- return p;
-}
-
-
-
-static void
-i18n_init (void)
-{
-#ifdef USE_SIMPLE_GETTEXT
- set_gettext_file( PACKAGE );
-#else
-#ifdef ENABLE_NLS
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-#endif
-#endif
-}
-
-
-
-/* Used by gcry for logging */
-static void
-my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
-{
- /* translate the log levels */
- switch (level)
- {
- case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
- case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
- case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
- case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
- case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
- case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
- case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
- default: level = JNLIB_LOG_ERROR; break;
- }
- log_logv (level, fmt, arg_ptr);
-}
-
-
-static void
-cleanup (void)
-{
- if (*socket_name)
- {
- char *p;
-
- remove (socket_name);
- p = strrchr (socket_name, '/');
- if (p)
- {
- *p = 0;
- rmdir (socket_name);
- *p = '/';
- }
- *socket_name = 0;
- }
-}
-
-
-static RETSIGTYPE
-cleanup_sh (int sig)
-{
- if (caught_fatal_sig)
- raise (sig);
- caught_fatal_sig = 1;
-
- /* gcry_control( GCRYCTL_TERM_SECMEM );*/
- cleanup ();
-
-#ifndef HAVE_DOSISH_SYSTEM
- { /* reset action to default action and raise signal again */
- struct sigaction nact;
- nact.sa_handler = SIG_DFL;
- sigemptyset( &nact.sa_mask );
- nact.sa_flags = 0;
- sigaction( sig, &nact, NULL);
- }
-#endif
- raise( sig );
-}
-
-int
-main (int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
- int orig_argc;
- int may_coredump;
- char **orig_argv;
- FILE *configfp = NULL;
- char *configname = NULL;
- const char *shell;
- unsigned configlineno;
- int parse_debug = 0;
- int default_config =1;
- int greeting = 0;
- int nogreeting = 0;
- int pipe_server = 0;
- int is_daemon = 0;
- int nodetach = 0;
- int csh_style = 0;
- char *logfile = NULL;
- int debug_wait = 0;
-
- set_strusage (my_strusage);
- gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
- /* Please note that we may running SUID(ROOT), so be very CAREFUL
- when adding any stuff between here and the call to INIT_SECMEM()
- somewhere after the option parsing */
- log_set_prefix ("scdaemon", 1|4);
- i18n_init ();
-
- /* check that the libraries are suitable. Do it here because
- the option parsing may need services of the library */
- if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
- {
- log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
- NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
- }
-
- ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
- assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
- gcry_set_log_handler (my_gcry_logger, NULL);
- gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
-
- may_coredump = disable_core_dumps ();
-
- shell = getenv ("SHELL");
- if (shell && strlen (shell) >= 3 && !strcmp (shell+strlen (shell)-3, "csh") )
- csh_style = 1;
-
- /* FIXME: Using this homedir option does only make sense when not
- running as a system service. We might want to check for this by
- looking at the uid or ebtter use an explict option for this */
- opt.homedir = getenv("GNUPGHOME");
- if (!opt.homedir || !*opt.homedir)
- opt.homedir = GNUPG_DEFAULT_HOMEDIR;
-
- /* check whether we have a config file on the commandline */
- orig_argc = argc;
- orig_argv = argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1|(1<<6); /* do not remove the args, ignore version */
- while (arg_parse( &pargs, opts))
- {
- if (pargs.r_opt == oDebug || pargs.r_opt == oDebugAll)
- parse_debug++;
- else if (pargs.r_opt == oOptions)
- { /* yes there is one, so we do not try the default one, but
- read the option file when it is encountered at the
- commandline */
- default_config = 0;
- }
- else if (pargs.r_opt == oNoOptions)
- default_config = 0; /* --no-options */
- else if (pargs.r_opt == oHomedir)
- opt.homedir = pargs.r.ret_str;
- }
-
- /* initialize the secure memory. */
- gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
- maybe_setuid = 0;
-
- /*
- Now we are working under our real uid
- */
-
-
- if (default_config)
- configname = make_filename (opt.homedir, "scdaemon.conf", NULL );
-
- argc = orig_argc;
- argv = orig_argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
- next_pass:
- if (configname)
- {
- configlineno = 0;
- configfp = fopen (configname, "r");
- if (!configfp)
- {
- if (default_config)
- {
- if( parse_debug )
- log_info (_("NOTE: no default option file `%s'\n"),
- configname );
- }
- else
- {
- log_error (_("option file `%s': %s\n"),
- configname, strerror(errno) );
- exit(2);
- }
- xfree (configname);
- configname = NULL;
- }
- if (parse_debug && configname )
- log_info (_("reading options from `%s'\n"), configname );
- default_config = 0;
- }
-
- while (optfile_parse( configfp, configname, &configlineno, &pargs, opts) )
- {
- switch (pargs.r_opt)
- {
- case oQuiet: opt.quiet = 1; break;
- case oVerbose: opt.verbose++; break;
- case oBatch: opt.batch=1; break;
-
- case oDebug: opt.debug |= pargs.r.ret_ulong; break;
- case oDebugAll: opt.debug = ~0; break;
- case oDebugWait: debug_wait = pargs.r.ret_int; break;
- case oDebugSC: opt.debug_sc = pargs.r.ret_int; break;
-
- case oOptions:
- /* config files may not be nested (silently ignore them) */
- if (!configfp)
- {
- xfree(configname);
- configname = xstrdup(pargs.r.ret_str);
- goto next_pass;
- }
- break;
- case oNoGreeting: nogreeting = 1; break;
- case oNoVerbose: opt.verbose = 0; break;
- case oNoOptions: break; /* no-options */
- case oHomedir: opt.homedir = pargs.r.ret_str; break;
- case oNoDetach: nodetach = 1; break;
- case oLogFile: logfile = pargs.r.ret_str; break;
- case oCsh: csh_style = 1; break;
- case oSh: csh_style = 0; break;
- case oServer: pipe_server = 1; break;
- case oDaemon: is_daemon = 1; break;
-
- default : pargs.err = configfp? 1:2; break;
- }
- }
- if (configfp)
- {
- fclose( configfp );
- configfp = NULL;
- xfree(configname);
- configname = NULL;
- goto next_pass;
- }
- xfree (configname);
- configname = NULL;
- if (log_get_errorcount(0))
- exit(2);
- if (nogreeting )
- greeting = 0;
-
- if (greeting)
- {
- fprintf (stderr, "%s %s; %s\n",
- strusage(11), strusage(13), strusage(14) );
- fprintf (stderr, "%s\n", strusage(15) );
- }
-#ifdef IS_DEVELOPMENT_VERSION
- log_info ("NOTE: this is a development version!\n");
-#endif
-
-
- if (atexit (cleanup))
- {
- log_error ("atexit failed\n");
- cleanup ();
- exit (1);
- }
-
- if (debug_wait && pipe_server)
- {
- log_debug ("waiting for debugger - my pid is %u .....\n",
- (unsigned int)getpid());
- sleep (debug_wait);
- log_debug ("... okay\n");
- }
-
- /* now start with logging to a file if this is desired */
- if (logfile)
- {
- log_set_file (logfile);
- log_set_prefix (NULL, 1|2|4);
- }
-
-
- if (pipe_server)
- { /* this is the simple pipe based server */
- scd_command_handler (-1);
- }
- else if (!is_daemon)
- {
- log_info (_("please use the option `--daemon'"
- " to run the program in the background\n"));
- }
- else
- { /* regular server mode */
- int fd;
- pid_t pid;
- int i;
- int len;
- struct sockaddr_un serv_addr;
- char *p;
-
- /* fixme: if there is already a running gpg-agent we should
- share the same directory - and vice versa */
- *socket_name = 0;
- snprintf (socket_name, DIM(socket_name)-1,
- "/tmp/gpg-XXXXXX/S.scdaemon");
- socket_name[DIM(socket_name)-1] = 0;
- p = strrchr (socket_name, '/');
- if (!p)
- BUG ();
- *p = 0;;
- if (!mkdtemp(socket_name))
- {
- log_error ("can't create directory `%s': %s\n",
- socket_name, strerror(errno) );
- exit (1);
- }
- *p = '/';
-
- if (strchr (socket_name, ':') )
- {
- log_error ("colons are not allowed in the socket name\n");
- exit (1);
- }
- if (strlen (socket_name)+1 >= sizeof serv_addr.sun_path )
- {
- log_error ("name of socket to long\n");
- exit (1);
- }
-
-
- fd = socket (AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- {
- log_error ("can't create socket: %s\n", strerror(errno) );
- exit (1);
- }
-
- memset (&serv_addr, 0, sizeof serv_addr);
- serv_addr.sun_family = AF_UNIX;
- strcpy (serv_addr.sun_path, socket_name);
- len = (offsetof (struct sockaddr_un, sun_path)
- + strlen(serv_addr.sun_path) + 1);
-
- if (bind (fd, (struct sockaddr*)&serv_addr, len) == -1)
- {
- log_error ("error binding socket to `%s': %s\n",
- serv_addr.sun_path, strerror (errno) );
- close (fd);
- exit (1);
- }
-
- if (listen (fd, 5 ) == -1)
- {
- log_error ("listen() failed: %s\n", strerror (errno));
- close (fd);
- exit (1);
- }
-
- if (opt.verbose)
- log_info ("listening on socket `%s'\n", socket_name );
-
-
- fflush (NULL);
- pid = fork ();
- if (pid == (pid_t)-1)
- {
- log_fatal ("fork failed: %s\n", strerror (errno) );
- exit (1);
- }
- else if (pid)
- { /* we are the parent */
- char *infostr;
-
- close (fd);
-
- /* create the info string: <name>:<pid>:<protocol_version> */
- if (asprintf (&infostr, "SCDAEMON_INFO=%s:%lu:1",
- socket_name, (ulong)pid ) < 0)
- {
- log_error ("out of core\n");
- kill (pid, SIGTERM);
- exit (1);
- }
- *socket_name = 0; /* don't let cleanup() remove the socket -
- the child should do this from now on */
- if (argc)
- { /* run the program given on the commandline */
- if (putenv (infostr))
- {
- log_error ("failed to set environment: %s\n",
- strerror (errno) );
- kill (pid, SIGTERM );
- exit (1);
- }
- execvp (argv[0], argv);
- log_error ("failed to run the command: %s\n", strerror (errno));
- kill (pid, SIGTERM);
- exit (1);
- }
- else
- {
- /* print the environment string, so that the caller can use
- shell's eval to set it */
- if (csh_style)
- {
- *strchr (infostr, '=') = ' ';
- printf ( "setenv %s\n", infostr);
- }
- else
- {
- printf ( "%s; export SCDAEMON_INFO;\n", infostr);
- }
- free (infostr);
- exit (0);
- }
- /* NOTREACHED */
- } /* end parent */
-
- /* this is the child */
-
- /* detach from tty and put process into a new session */
- if (!nodetach )
- { /* close stdin, stdout and stderr unless it is the log stream */
- for (i=0; i <= 2; i++)
- {
- if ( log_get_fd () != i)
- close (i);
- }
- if (setsid() == -1)
- {
- log_error ("setsid() failed: %s\n", strerror(errno) );
- cleanup ();
- exit (1);
- }
- }
-
- /* setup signals */
- {
- struct sigaction oact, nact;
-
- nact.sa_handler = cleanup_sh;
- sigemptyset (&nact.sa_mask);
- nact.sa_flags = 0;
-
- sigaction (SIGHUP, NULL, &oact);
- if (oact.sa_handler != SIG_IGN)
- sigaction (SIGHUP, &nact, NULL);
- sigaction( SIGTERM, NULL, &oact );
- if (oact.sa_handler != SIG_IGN)
- sigaction (SIGTERM, &nact, NULL);
- nact.sa_handler = SIG_IGN;
- sigaction (SIGPIPE, &nact, NULL);
- sigaction (SIGINT, &nact, NULL);
- }
-
- if (chdir("/"))
- {
- log_error ("chdir to / failed: %s\n", strerror (errno));
- exit (1);
- }
-
- scd_command_handler (fd);
-
- close (fd);
- }
-
- return 0;
-}
-
-void
-scd_exit (int rc)
-{
- #if 0
-#warning no update_random_seed_file
- update_random_seed_file();
- #endif
-#if 0
- /* at this time a bit annoying */
- if (opt.debug & DBG_MEMSTAT_VALUE)
- {
- gcry_control( GCRYCTL_DUMP_MEMORY_STATS );
- gcry_control( GCRYCTL_DUMP_RANDOM_STATS );
- }
- if (opt.debug)
- gcry_control (GCRYCTL_DUMP_SECMEM_STATS );
-#endif
- gcry_control (GCRYCTL_TERM_SECMEM );
- rc = rc? rc : log_get_errorcount(0)? 2 : 0;
- exit (rc);
-}
-
-
-void
-scd_init_default_ctrl (CTRL ctrl)
-{
-
-}
-
diff --git a/scd/scdaemon.h b/scd/scdaemon.h
deleted file mode 100644
index 9fbf891bb..000000000
--- a/scd/scdaemon.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* scdaemon.h - Global definitions for the SCdaemon
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 SCDAEMON_H
-#define SCDAEMON_H
-
-#include <time.h>
-#include <gcrypt.h>
-#include "../common/util.h"
-#include "../common/errors.h"
-
-#define MAX_DIGEST_LEN 24
-
-/* A large struct name "opt" to keep global flags */
-struct {
- unsigned int debug; /* debug flags (DBG_foo_VALUE) */
- int debug_sc; /* OpenSC debug level */
- int verbose; /* verbosity level */
- int quiet; /* be as quiet as possible */
- int dry_run; /* don't change any persistent data */
- int batch; /* batch mode */
- const char *homedir; /* configuration directory name */
-} opt;
-
-
-#define DBG_COMMAND_VALUE 1 /* debug commands i/o */
-#define DBG_MPI_VALUE 2 /* debug mpi details */
-#define DBG_CRYPTO_VALUE 4 /* debug low level crypto */
-#define DBG_MEMORY_VALUE 32 /* debug memory allocation stuff */
-#define DBG_CACHE_VALUE 64 /* debug the caching */
-#define DBG_MEMSTAT_VALUE 128 /* show memory statistics */
-#define DBG_HASHING_VALUE 512 /* debug hashing operations */
-#define DBG_ASSUAN_VALUE 1024
-
-#define DBG_COMMAND (opt.debug & DBG_COMMAND_VALUE)
-#define DBG_CRYPTO (opt.debug & DBG_CRYPTO_VALUE)
-#define DBG_MEMORY (opt.debug & DBG_MEMORY_VALUE)
-#define DBG_CACHE (opt.debug & DBG_CACHE_VALUE)
-#define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
-#define DBG_ASSUAN (opt.debug & DBG_ASSUAN_VALUE)
-
-struct server_local_s;
-struct card_ctx_s;
-
-struct server_control_s {
- struct server_local_s *server_local;
- struct card_ctx_s *card_ctx;
- struct {
- unsigned char *value;
- int valuelen;
- } in_data; /* helper to store the value we are going to sign */
-
-};
-typedef struct server_control_s *CTRL;
-typedef struct card_ctx_s *CARD;
-
-/*-- scdaemon.c --*/
-void scd_exit (int rc);
-void scd_init_default_ctrl (CTRL ctrl);
-
-/*-- command.c --*/
-void scd_command_handler (int);
-
-/*-- card.c --*/
-int card_open (CARD *rcard);
-void card_close (CARD card);
-int card_get_serial_and_stamp (CARD card, char **serial, time_t *stamp);
-int card_enum_keypairs (CARD card, int idx,
- unsigned char *keygrip,
- char **keyid);
-int card_enum_certs (CARD card, int idx, char **certid, int *certtype);
-int card_read_cert (CARD card, const char *certidstr,
- unsigned char **cert, size_t *ncert);
-int card_sign (CARD card,
- const char *keyidstr, int hashalgo,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen );
-int card_decipher (CARD card, const char *keyidstr,
- int (pincb)(void*, const char *, char **),
- void *pincb_arg,
- const void *indata, size_t indatalen,
- void **outdata, size_t *outdatalen);
-
-
-#endif /*SCDAEMON_H*/
diff --git a/scripts/ChangeLog b/scripts/ChangeLog
deleted file mode 100644
index 1a6ec032b..000000000
--- a/scripts/ChangeLog
+++ /dev/null
@@ -1,285 +0,0 @@
-2002-10-17 Werner Koch <wk@gnupg.org>
-
- * autogen.sh: Allow env variables to override the auto* tool
- names. Suggested by Simon Josefsson.
-
-2002-09-11 Werner Koch <wk@gnupg.org>
-
- * distfiles: Include mk-w32-dist.
-
- * mk-w32-dist: Convert the character sets on a per language base.
-
-2002-09-02 Werner Koch <wk@gnupg.org>
-
- * mk-w32-dist: Include more man pages and gpg split. Changed name
- of ZIP file to better indicate that this is a command line version.
-
-2002-08-23 Werner Koch <wk@gnupg.org>
-
- * autogen.sh : Don't run gettextize.
-
-2002-08-06 Stefan Bellon <sbellon@sbellon.de>
-
- * conf-riscos/include/config.h: Changed #define FOO to
- #define FOO 1.
- * conf-riscos/include/g10defs.h: Likewise.
-
-2002-08-03 Stefan Bellon <sbellon@sbellon.de>
-
- * conf-riscos/include/g10defs.h: Added GNUPG_LIBEXECDIR.
- * conf-riscos/include/config.h: Changes due to dynload removal and
- minor changes to avoid some warnings.
- * conf-riscos/Makefile: Changes due to dynload removal.
- * conf-riscos/cipher/*: Not needed anymore due to dynload removal.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * gnupgbug: "Warning" -> "WARNING"
-
-2002-07-01 Werner Koch <wk@gnupg.org>
-
- * mk-gpg-texi: New.
-
-2002-06-30 Werner Koch <wk@gnupg.org>
-
- * mk-w32-dist (bindir): Fixes vor VPATH builds in a subdir,
- include gpgv.
-
-2002-06-21 Stefan Bellon <sbellon@sbellon.de>
-
- * conf-riscos/Makefile: Changes due to moving around RISC OS
- specific stuff in the code.
-
-2002-06-07 Stefan Bellon <sbellon@sbellon.de>
-
- * conf-riscos/include/config.h [__riscos__]: Fixed macro bug.
-
-2002-05-10 Stefan Bellon <sbellon@sbellon.de>
-
- * conf-riscos/include/config.h [__riscos__]: Changes for later
- Norcroft compilers.
-
- * conf-riscos/Makefile [__riscos__]: Updated.
-
-2002-04-22 Stefan Bellon <sbellon@sbellon.de>
-
- * conf-riscos/include/config.h [__riscos__]: Development
- versions automatically define DEBUG from now on.
-
- * conf-riscos/Makefile [__riscos__]: Updated for LDAP keyserver
- code.
-
-2002-04-19 David Shaw <dshaw@jabberwocky.com>
-
- * gnupg.spec.in: Removed pubring.asc and OPTIONS. Added
- samplekeys.asc.
-
-2002-03-31 David Shaw <dshaw@jabberwocky.com>
-
- * gnupg.spec.in: Added the gpgkeys_xxx keyserver helpers. Added a
- * to catch variations on the basic gpg man page (gpg, gpgv). Mark
- options.skel as a config file. Do not include the FAQ/faq.html
- twice (in /doc/ and /share/).
-
-2002-01-02 Stefan Bellon <sbellon@sbellon.de>
-
- * build-riscos [__riscos__]: Set filetype of Makefile correctly.
-
- * conf-riscos/include/g10defs.h [__riscos__]: Added GNU GPL
- header and exec code defines.
-
- * conf-riscos/include/config.h [__riscos__]: Moved parts to
- include/util.h where they really belong to.
-
- * conf-riscos/Makefile [__riscos__]: Updated for new keyserver,
- exec and photo id code.
-
-2001-12-22 Werner Koch <wk@gnupg.org>
-
- * autogen.sh: Fixed last change.
-
-2001-12-21 Werner Koch <wk@gnupg.org>
-
- * distfiles: Removed those files which which automake installs by
- default.
-
- * autogen.sh: Replaced $() by backticks for system without a posix
- shell. Removed gawk specific quoting. By David Champion.
-
-2001-10-22 Werner Koch <wk@gnupg.org>
-
- * autogen.sh (aclocal_vers): Require automalke 1.5.
-
-2001-08-21 Stefan Bellon <sbellon@sbellon.de>
-
- * build-riscos [__riscos__]: New.
- * conf-riscos [__riscos__]: Ditto.
-
-2001-08-13 Werner Koch <wk@gnupg.org>
-
- * autogen.sh: Test on gettext 0.10.38. By Michael Engels.
-
-2001-08-07 Werner Koch <wk@gnupg.org>
-
- * autogen.sh: Adjusted --build-w32 for autoconf 2.52
-
-2001-07-09 Werner Koch <wk@gnupg.org>
-
- * autogen.sh (autoconf_vers): Require autoconf 2.50
-
-2001-05-06 Werner Koch <wk@gnupg.org>
-
- * config.guess, config.sub: Add updates from subversions.gnu.org.
-
-2001-04-19 Werner Koch <wk@gnupg.org>
-
- * autogen.sh: Add VPATH build support for option --build-w32.
-
-2001-03-12 Werner Koch <wk@gnupg.org>
-
- * config.guess, config.sub: Replaced with the current GNU CVS ones.
-
-2001-01-18 Werner Koch <wk@gnupg.org>
-
- * autogen.sh: New options --build-w32
- * build-w32: Does now call autogen.sh
-
-2000-11-24 Werner Koch <wk@gnupg.org>
-
- * build-w32: New script to build the W32 version.
- * distfiles: And put it into the distribution
-
-Thu Sep 14 17:45:11 CEST 2000 Werner Koch <wk@openit.de>
-
- * gnupg.spec.in: Updated.
-
-Wed Sep 6 17:55:47 CEST 2000 Werner Koch <wk@openit.de>
-
- * config.guess, config.sub: Replaced with the latest version from the
- CVS archive. Hope that does not break too much.
-
-Fri May 12 14:01:20 CEST 2000 Werner Koch <wk@openit.de>
-
- * gnupg.spec.in: New version from Fabio with some updated descriptions.
-
-Mon May 1 15:38:04 CEST 2000 Werner Koch <wk@openit.de>
-
- * gnupg.spec.in: New version from Fabio.
-
-Fri Mar 17 16:26:05 CET 2000 Werner Koch <wk@openit.de>
-
- * config.gues, config.sub: Support for s390-ibm-linux-gnu. Thanks
- to Holger Smolinski.
-
-Thu Mar 2 15:37:46 CET 2000 Werner Koch <wk@gnupg.de>
-
- * config.guess: Add support for QNX. By Sam Roberts.
- * config.sub: Ditto.
-
-Thu Sep 23 09:49:25 1999 Werner Koch (wk@gnupg.org)
-
- * commit: Remove leading and trailing empty lines when copying
- Changes to Changelog
-
-Wed Sep 15 16:22:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec: Add Portuguese description
-
-Thu Sep 2 16:40:55 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mkdiff: changed format of diff file name and made script more
- general.
-
-Wed Aug 4 10:34:18 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.guess: Updated from gnu/common and applied my emx patch again.
- * config.sub: Updated from gnu/common.
-
-Wed Jul 14 19:42:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * ltmain.sh, ltconfig.sh : Updated to libtool 1.3.3
-
-Mon Jul 12 14:55:34 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Run libtoolize
-
-Sat May 22 22:47:26 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Fixed the error message for a missing libtool.
-
-Sat May 8 19:28:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mkinstalldirs, install-sh: New from GNU repository
- * config.sub, config.guess: Merged with rep version.
-
-Sun Mar 14 19:34:36 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Add a check for libtool because some autoconf macros
- are needed.
-
-Mon Feb 22 20:04:00 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Enhanced the version testing code (Philippe Laliberte)
-
- * mkwebpage: Edits the buglist.
-
-Sat Feb 13 12:04:43 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * autogen.sh: Now uses gettextize
-
-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
-
-Sat Jan 16 09:27:30 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * config.guess (m68k-atari-mint): New.
- * config.sub: Add support for atarist-MiNT
-
-Wed Jan 13 12:49:36 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec.in: New
- * gnupg.spec: Removed
-
-Wed Dec 23 13:18:14 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec: Updated version by Fabio Coatti
-
-Thu Dec 17 18:31:15 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * gnupg.spec: New version by Reuben Sumner and did some more
- changes.
-
-Fri Nov 27 12:39:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * commit: New
-
-
-Fri Nov 20 12:01:57 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mkdiff: signs the patch file
-
-Sat Oct 17 16:10:16 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * autogen.sh: New.
-
-Wed Oct 14 09:55:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * config.guess (FreeBSD): Changes from Jun Kuriyama to support ELF
- * config.sub: (freebsd): Add to maybe_os
-
-
- Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/scripts/autogen.sh b/scripts/autogen.sh
deleted file mode 100755
index 07ce852ef..000000000
--- a/scripts/autogen.sh
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-#
-# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-PGM=GnuPG
-lib_config_files=""
-autoconf_vers=2.52
-automake_vers=1.6
-aclocal_vers=1.6
-
-ACLOCAL=${ACLOCAL:-aclocal}
-AUTOCONF=${AUTOCONF:-autoconf}
-AUTOMAKE=${AUTOMAKE:-automake}
-AUTOHEADER=${AUTOHEADER:-autoheader}
-DIE=no
-if test "$1" = "--build-w32"; then
- tmp=`dirname $0`
- tsdir=`cd "$tmp"; cd ..; pwd`
- shift
- host=i386--mingw32
- if [ ! -f $tsdir/scripts/config.guess ]; then
- echo "$tsdir/scripts/config.guess not found" >&2
- exit 1
- fi
- build=`$tsdir/scripts/config.guess`
-
- if ! mingw32 --version >/dev/null; then
- echo "We need at least version 0.3 of MingW32/CPD" >&2
- exit 1
- fi
-
- if [ -f "$tsdir/config.log" ]; then
- if ! head $tsdir/config.log | grep i386--mingw32 >/dev/null; then
- echo "Pease run a 'make distclean' first" >&2
- exit 1
- fi
- fi
-
- crossbindir=`mingw32 --install-dir`/bin
- CC=`mingw32 --get-path gcc`
- CPP=`mingw32 --get-path cpp`
- AR=`mingw32 --get-path ar`
- RANLIB=`mingw32 --get-path ranlib`
- export CC CPP AR RANLIB
-
- disable_foo_tests=""
- if [ -n "$lib_config_files" ]; then
- for i in $lib_config_files; do
- j=`echo $i | tr '[a-z-]' '[A-Z_]'`
- eval "$j=${crossbindir}/$i"
- export $j
- disable_foo_tests="$disable_foo_tests --disable-`echo $i| \
- sed 's,-config$,,'`-test"
- if [ ! -f "${crossbindir}/$i" ]; then
- echo "$i not installed for MingW32" >&2
- DIE=yes
- fi
- done
- fi
- [ $DIE = yes ] && exit 1
-
- $tsdir/configure --build=${build} --host=${host} \
- ${disable_foo_tests} $*
- exit $?
-fi
-
-
-
-if ($AUTOCONF --version) < /dev/null > /dev/null 2>&1 ; then
- if ($AUTOCONF --version | awk 'NR==1 { if( $3 >= '$autoconf_vers') \
- exit 1; exit 0; }');
- then
- echo "**Error**: "\`autoconf\'" is too old."
- echo ' (version ' $autoconf_vers ' or newer is required)'
- DIE="yes"
- fi
-else
- echo
- echo "**Error**: You must have "\`autoconf\'" installed to compile $PGM."
- echo ' (version ' $autoconf_vers ' or newer is required)'
- DIE="yes"
-fi
-
-if ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 ; then
- if ($AUTOMAKE --version | awk 'NR==1 { if( $4 >= '$automake_vers') \
- exit 1; exit 0; }');
- then
- echo "**Error**: "\`automake\'" is too old."
- echo ' (version ' $automake_vers ' or newer is required)'
- DIE="yes"
- fi
- if ($ACLOCAL --version) < /dev/null > /dev/null 2>&1; then
- if ($ACLOCAL --version | awk 'NR==1 { if( $4 >= '$aclocal_vers' ) \
- exit 1; exit 0; }' );
- then
- echo "**Error**: "\`aclocal\'" is too old."
- echo ' (version ' $aclocal_vers ' or newer is required)'
- DIE="yes"
- fi
- else
- echo
- echo "**Error**: Missing "\`aclocal\'". The version of "\`automake\'
- echo " installed doesn't appear recent enough."
- DIE="yes"
- fi
-else
- echo
- echo "**Error**: You must have "\`automake\'" installed to compile $PGM."
- echo ' (version ' $automake_vers ' or newer is required)'
- DIE="yes"
-fi
-
-
-if (gettext --version </dev/null 2>/dev/null | awk 'NR==1 { split($4,A,"."); \
- X=10000*A[1]+100*A[2]+A[3]; echo X; if( X >= 1038 ) exit 1; exit 0}')
- then
- echo "**Error**: You must have "\`gettext\'" installed to compile $PGM."
- echo ' (version 0.10.38 or newer is required; get'
- echo ' ftp://alpha.gnu.org/gnu/gettext/gettext-0.10.38.tar.gz'
- echo ' or install the latest Debian package)'
- DIE="yes"
-fi
-
-
-if test "$DIE" = "yes"; then
- exit 1
-fi
-
-echo "Running aclocal..."
-$ACLOCAL
-echo "Running autoheader..."
-$AUTOHEADER
-echo "Running automake --gnu ..."
-$AUTOMAKE --gnu;
-echo "Running autoconf..."
-$AUTOCONF
-
-echo "You can now run \"./configure --enable-maintainer-mode\" and then \"make\"."
-
diff --git a/scripts/build-riscos b/scripts/build-riscos
deleted file mode 100644
index c255a7827..000000000
--- a/scripts/build-riscos
+++ /dev/null
@@ -1,11 +0,0 @@
-| This is an RISC OS Obey file (filetype &feb) that copies handcrafted files
-| for the RISC OS version into the correct places.
-| It won't run on anything other than RISC OS -- I think ;-)
-
-copy <obey$dir>.conf-riscos.cipher.c.construct <obey$dir>.^.cipher.c.construct ~cf~v
-copy <obey$dir>.conf-riscos.cipher.c.constructv <obey$dir>.^.cipher.c.constructv ~cf~v
-copy <obey$dir>.conf-riscos.include.h.config <obey$dir>.^.include.h.config ~cf~v
-copy <obey$dir>.conf-riscos.include.h.g10defs <obey$dir>.^.include.h.g10defs ~cf~v
-copy <obey$dir>.conf-riscos.Makefile <obey$dir>.^.Makefile ~cf~v
-settype <obey$dir>.^.Makefile &fe1
-echo Done.
diff --git a/scripts/build-w32 b/scripts/build-w32
deleted file mode 100755
index 9995a4865..000000000
--- a/scripts/build-w32
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-exec scripts/autogen.sh --build-w32
-
-
-
diff --git a/scripts/commit b/scripts/commit
deleted file mode 100755
index 6bfa0a615..000000000
--- a/scripts/commit
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-# need a Posix shell, so we simply use bash
-
-set -e
-
-uid=`id -u`
-date=`date`
-name=$(awk -F: "\$3==$uid { print \$5 }" /etc/passwd )
-addr="<`id -un`@`hostname -d`>"
-
-for i in `find . -name Changes -print`; do
- dir=`dirname $i`
- if [ -s $dir/Changes ]; then
- awk '
- state == 0 && /^[ \t]*$/ { next }
- state == 0 { state = 1 }
- /^[ \t]*$/ { empty++; next }
- { while ( empty > 0 ) { print ""; empty--; }; print }
- ' < $dir/Changes > $dir/Changes.tmp
- if [ -s $dir/Changes.tmp ]; then
- lines=`wc -l <$dir/Changes.tmp`
- echo "$date $name $addr" >$dir/ChangeLog.new
- echo >>$dir/ChangeLog.new
- cat $dir/Changes.tmp >>$dir/ChangeLog.new
- echo >>$dir/ChangeLog.new
- [ -f $dir/ChangeLog ] && cat $dir/ChangeLog >>$dir/ChangeLog.new
- echo -n > $dir/Changes
- [ -f $dir/ChangeLog ] && rm $dir/ChangeLog
- mv $dir/ChangeLog.new $dir/ChangeLog
- echo "$lines new lines in $dir/ChangeLog"
- fi
- rm $dir/Changes.tmp || true
- fi
-done
-
-# Execute canned cvs remove commands
-for i in `find . -name cvs-remove -print`; do
- dir=`dirname $i`
- if [ -s $dir/cvs-remove ]; then
- here=`pwd`
- cd $dir
- if cvs remove -f `cat cvs-remove`; then
- rm cvs-remove
- fi
- cd $here
- fi
-done
-
-# Execute canned cvs add commands
-for i in `find . -name cvs-add -print`; do
- dir=`dirname $i`
- if [ -s $dir/cvs-add ]; then
- here=`pwd`
- cd $dir
- if cvs add `cat cvs-add`; then
- rm cvs-add
- fi
- cd $here
- fi
-done
-
-cvs -z3 commit -m "See ChangeLog: $date $name" $*
-
diff --git a/scripts/conf-riscos/Makefile b/scripts/conf-riscos/Makefile
deleted file mode 100644
index eeb6206c6..000000000
--- a/scripts/conf-riscos/Makefile
+++ /dev/null
@@ -1,466 +0,0 @@
-# Makefile for the RISC OS version of GnuPG
-CC=cc
-LINK=link
-AS=objasm
-MAKE=amu
-DEPEND=-depend !Depend
-LIBLDAP=^.^.openldap-2/0/18
-CC_FLAGS=-Wpc -apcs 3/26bit/fpe2 -throwback -Otime -IUnix:,include,mpi,intl,zlib,$(LIBLDAP).include -JUnix: -D__riscos__ -DHAVE_CONFIG_H -DNO_ASM -UIS_MODULE -DVERSION="\"$(GnuPG$Version)\"" $(GnuPG$DevDefine)
-AS_FLAGS=-apcs 3/26bit -throwback -predefine "ARMv4 SETA 0"
-LD_FLAGS=Unix:o.unixlib
-CIPHER_OBJS=cipher.o.blowfish \
- cipher.o.cast5 \
- cipher.o.cipher \
- cipher.o.des \
- cipher.o.dsa \
- cipher.o.dynload \
- cipher.o.elgamal \
- cipher.o.g10c \
- cipher.o.md \
- cipher.o.md5 \
- cipher.o.primegen \
- cipher.o.pubkey \
- cipher.o.random \
- cipher.o.rijndael \
- cipher.o.rmd160 \
- cipher.o.rndriscos \
- cipher.o.rsa \
- cipher.o.sha1 \
- cipher.o.smallprime \
- cipher.o.tiger32 \
- cipher.o.twofish
-GETTEXT_OBJS=intl.o.bindtextdom \
- intl.o.dcgettext \
- intl.o.dgettext \
- intl.o.explodename \
- intl.o.finddomain \
- intl.o.gettext \
- intl.o.intl-compat \
- intl.o.l10nflist \
- intl.o.loadmsgcat \
- intl.o.localealias \
- intl.o.textdomain
-MPI_OBJS=mpi.o.mpi-add \
- mpi.o.mpi-bit \
- mpi.o.mpi-cmp \
- mpi.o.mpi-div \
- mpi.o.mpi-gcd \
- mpi.o.mpi-inline \
- mpi.o.mpi-inv \
- mpi.o.mpi-mul \
- mpi.o.mpi-pow \
- mpi.o.mpi-mpow \
- mpi.o.mpi-scan \
- mpi.o.mpicoder \
- mpi.o.mpih-div \
- mpi.o.mpih-mul \
- mpi.o.mpiutil \
- mpi.o.g10m \
- mpi.arm.o.mpih
-UTIL_OBJS=util.o.argparse \
- util.o.dotlock \
- util.o.errors \
- util.o.fileutil \
- util.o.g10u \
- util.o.http \
- util.o.iobuf \
- util.o.logger \
- util.o.memory \
- util.o.miscutil \
- util.o.secmem \
- util.o.strgutil \
- util.o.ttyio \
- util.o.riscos
-ZLIB_OBJS=zlib.o.adler32 \
- zlib.o.compress \
- zlib.o.crc32 \
- zlib.o.deflate \
- zlib.o.infblock \
- zlib.o.infcodes \
- zlib.o.inffast \
- zlib.o.inflate \
- zlib.o.inftrees \
- zlib.o.infutil \
- zlib.o.trees \
- zlib.o.uncompr \
- zlib.o.zutil
-G10_OBJS=g10.o.armor \
- g10.o.build-packet \
- g10.o.cipher \
- g10.o.comment \
- g10.o.compress \
- g10.o.dearmor \
- g10.o.decrypt \
- g10.o.delkey \
- g10.o.encode \
- g10.o.encr-data \
- g10.o.exec \
- g10.o.export \
- g10.o.free-packet \
- g10.o.g10 \
- g10.o.getkey \
- g10.o.helptext \
- g10.o.hkp \
- g10.o.import \
- g10.o.kbnode \
- g10.o.keydb \
- g10.o.keyedit \
- g10.o.keygen \
- g10.o.keyid \
- g10.o.keylist \
- g10.o.keyring \
- g10.o.keyserver \
- g10.o.mainproc \
- g10.o.mdfilter \
- g10.o.misc \
- g10.o.mkdtemp \
- g10.o.openfile \
- g10.o.parse-packet \
- g10.o.passphrase \
- g10.o.photoid \
- g10.o.pipemode \
- g10.o.pkclist \
- g10.o.plaintext \
- g10.o.pubkey-enc \
- g10.o.revoke \
- g10.o.seckey-cert \
- g10.o.seskey \
- g10.o.sig-check \
- g10.o.sign \
- g10.o.signal \
- g10.o.skclist \
- g10.o.status \
- g10.o.tdbdump \
- g10.o.tdbio \
- g10.o.textfilter \
- g10.o.trustdb \
- g10.o.verify
-GPGV_OBJS=g10.o.armor \
- g10.o.build-packet \
- g10.o.compress \
- g10.o.free-packet \
- g10.o.getkey \
- g10.o.gpgv \
- g10.o.keydb \
- g10.o.keylist \
- g10.o.kbnode \
- g10.o.keyid \
- g10.o.keyring \
- g10.o.mainproc \
- g10.o.mdfilter \
- g10.o.misc \
- g10.o.openfile \
- g10.o.parse-packet \
- g10.o.plaintext \
- g10.o.seskey \
- g10.o.sig-check \
- g10.o.signal \
- g10.o.status \
- g10.o.textfilter \
- g10.o.verify \
- util.o.argparse \
- util.o.errors \
- util.o.fileutil \
- util.o.g10u \
- util.o.iobuf \
- util.o.logger \
- util.o.memory \
- util.o.miscutil \
- util.o.secmem \
- util.o.strgutil \
- util.o.riscos \
- cipher.o.dsa \
- cipher.o.dynload \
- cipher.o.elgamal \
- cipher.o.g10c \
- cipher.o.md \
- cipher.o.md5 \
- cipher.o.pubkey \
- cipher.o.rmd160 \
- cipher.o.rsa \
- cipher.o.sha1 \
- cipher.o.tiger32 \
- mpi.mpi \
- zlib.zlib
-GPGKEYS_OBJS=util.o.riscos \
- util.o.strgutil \
- util.o.memory \
- util.o.logger \
- util.o.secmem \
- intl.gettext
-
-## Rule Patterns ##
-
-.SUFFIXES: .c .o .s
-
-.c.o:
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o $@ $<
-
-.s.o:
- $(AS) $(AS_FLAGS) $(DEPEND) $< $@
-
-# Static dependencies:
-
-all:
- @echo Use one of the following as target:
- @echo | dev to build the development version
- @echo | dist to build the distribution with all archives
- @echo All other targets are internal and shouldn't be used!
-
-cipher.cipher: $(CIPHER_OBJS)
- $(LINK) -aof $(CIPHER_OBJS) -o cipher.cipher
-
-intl.gettext: $(GETTEXT_OBJS)
- $(LINK) -aof $(GETTEXT_OBJS) -o intl.gettext
-
-mpi.mpi: $(MPI_OBJS)
- $(LINK) -aof $(MPI_OBJS) -o mpi.mpi
-
-tools.gpgsplit: tools.o.gpgsplit util.util intl.gettext zlib.zlib
- $(LINK) $(LD_FLAGS) tools.o.gpgsplit util.util intl.gettext zlib.zlib -o tools.gpgsplit
- -squeeze tools.gpgsplit
- -copy tools.gpgsplit ADFS::A5.$.tmp.!GnuPG.gpgsplit ~CF~V
-
-keyserver.gpgkeys_ldap: keyserver.o.gpgkeys_ldap $(GPGKEYS_OBJS) $(LIBLDAP).libraries.libldap.libldap
- $(LINK) $(LD_FLAGS) keyserver.o.gpgkeys_ldap $(GPGKEYS_OBJS) $(LIBLDAP).libraries.libldap.libldap -o keyserver.gpgkeys_ldap
- -squeeze keyserver.gpgkeys_ldap
- -copy keyserver.gpgkeys_ldap ADFS::A5.$.tmp.!GnuPG.gpgkeys_ldap ~CF~V
-
-riscos.jpegview.jpegview:
- -dir riscos.jpegview
- -$(MAKE)
- -back
-
-util.util: $(UTIL_OBJS)
- $(LINK) -aof $(UTIL_OBJS) -o util.util
-
-zlib.zlib: $(ZLIB_OBJS)
- $(LINK) -aof zlib.o.* -o zlib.zlib
-
-g10.gpg: $(G10_OBJS) cipher.o.idea cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib BUILD
- $(LINK) $(G10_OBJS) $(LD_FLAGS) cipher.o.idea cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib -o g10.gpg
- -copy g10.gpg ADFS::A5.$.tmp.!GnuPG.gpg ~CFR~V
-
-g10.gpgv: $(GPGV_OBJS) intl.gettext BUILD
- $(LINK) $(GPGV_OBJS) intl.gettext $(LD_FLAGS) -o g10.gpgv
- -copy g10.gpgv ADFS::A5.$.tmp.!GnuPG.gpgv ~CFR~V
-
-g10.gpgpart: $(G10_OBJS) cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib BUILD
- drlink034 -aof $(G10_OBJS) $(LD_FLAGS) cipher.cipher intl.gettext mpi.mpi util.util zlib.zlib -o g10.gpgpart
-
-select-idea-src:
- -copy distrib.idea-addon.cipher.c.idea cipher.c.idea ~CF~NR~V
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o cipher.o.idea cipher.c.idea
-
-select-gpl-src:
- -copy distrib.non-idea.cipher.c.idea cipher.c.idea ~CF~NR~V
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o cipher.o.idea cipher.c.idea
-
-distrib.gnupgsrc/zip: select-gpl-src
- -zip -9@ distrib.gnupgsrc/zip < distrib.resources.distfiles
-
-distrib.gnupg/zip: distrib.gpl-bin.!GnuPG.JPEGview distrib.gpl-bin.!GnuPG.gpgsplit distrib.gpl-bin.!GnuPG.gpg distrib.gpl-bin.!GnuPG.gpgv select-gpl-src
- -copy distrib.resources.History distrib.gpl-bin.History ~CFR~V
- -copy distrib.resources.Upgrading distrib.gpl-bin.Upgrading ~CFR~V
- -copy distrib.resources.ReadMe_bin distrib.gpl-bin.!ReadMe1st ~CFR~V
- -copy distrib.resources.!GnuPG distrib.gpl-bin.!GnuPG ~CFR~V
- -copy distrib.resources.!GnuPGUser distrib.gpl-bin.!GnuPGUser ~CFR~V
- -copy distrib.resources.!System distrib.gpl-bin.!System ~CFR~V
- -copy distrib.resources.orig_docs distrib.gpl-bin.orig_docs ~CFR~V
- -dir distrib.gpl-bin
- -zip -r9 ^.gnupg/zip *
- -back
-
-distrib.gnupgdev/zip: distrib.private.!GnuPG.JPEGview distrib.private.!GnuPG.gpgsplit distrib.private.!GnuPG.gpgkeys_ldap distrib.private.!GnuPG.gpg distrib.private.!GnuPG.gpgv select-idea-src
- -ifthere distrib.private.!GnuPG.locale then wipe distrib.private.!GnuPG.locale ~CFR~V
- -copy distrib.intl.!GnuPG.locale distrib.private.!GnuPG.locale ~CFR~V
- -copy distrib.resources.History distrib.private.History ~CFR~V
- -copy distrib.resources.Upgrading distrib.private.Upgrading ~CFR~V
- -copy distrib.resources.ReadMe_bin distrib.private.!ReadMe1st ~CFR~V
- -copy distrib.resources.!GnuPG distrib.private.!GnuPG ~CFR~V
- -copy distrib.resources.!GnuPGUser distrib.private.!GnuPGUser ~CFR~V
- -copy distrib.resources.!System distrib.private.!System ~CFR~V
- -copy distrib.resources.orig_docs distrib.private.orig_docs ~CFR~V
- -dir distrib.private
- -zip -r9 ^.gnupgdev/zip *
- -back
-
-distrib.gnupgidea/zip: cipher.o.idea select-idea-src
- -copy distrib.resources.ReadMe_idea distrib.idea-addon.!ReadMe ~CFR~V
- -copy cipher.o.idea distrib.idea-addon.cipher.o.idea ~CFR~V
- -dir distrib.idea-addon
- -zip -r9 ^.gnupgidea/zip *
- -back
-
-distrib.gnupgpart/zip: g10.gpgpart select-idea-src
- -copy distrib.resources.ReadMe_part distrib.part.!ReadMe1st ~CFR~V
- -copy g10.gpgpart distrib.part.g10.gpgpart ~CFR~V
- -dir distrib.part
- -zip -r9 ^.gnupgpart/zip *
- -back
-
-distrib.gnupgldap/zip: keyserver.gpgkeys_ldap
- -copy distrib.resources.ReadMe_ldap distrib.ldap.!ReadMe ~CFR~V
- -copy keyserver.gpgkeys_ldap distrib.ldap.!GnuPG.gpgkeys_ldap ~CFR~V
- -dir distrib.ldap
- -zip -r9 ^.gnupgldap/zip *
- -back
-
-distrib.gnupgintl/zip:
- -dir distrib.intl
- -zip -r9 ^.gnupgintl/zip *
- -back
-
-distrib.gpl-bin.!GnuPG.gpg: g10.gpg
- -copy g10.gpg distrib.gpl-bin.!GnuPG.gpg ~CFR~V
- -squeeze distrib.gpl-bin.!GnuPG.gpg
-
-distrib.gpl-bin.!GnuPG.gpgv: g10.gpgv
- -copy g10.gpgv distrib.gpl-bin.!GnuPG.gpgv ~CFR~V
- -squeeze distrib.gpl-bin.!GnuPG.gpgv
-
-distrib.gpl-bin.!GnuPG.gpgsplit: tools.gpgsplit
- -copy tools.gpgsplit distrib.gpl-bin.!GnuPG.gpgsplit ~CFR~V
- -squeeze distrib.gpl-bin.!GnuPG.gpgsplit
-
-distrib.gpl-bin.!GnuPG.JPEGview: riscos.jpegview.jpegview
- -copy riscos.jpegview.jpegview distrib.gpl-bin.!GnuPG.JPEGview ~CFR~V
-
-distrib.private.!GnuPG.gpg: g10.gpg
- -copy g10.gpg distrib.private.!GnuPG.gpg ~CFR~V
- -squeeze distrib.private.!GnuPG.gpg
-
-distrib.private.!GnuPG.gpgv: g10.gpgv
- -copy g10.gpgv distrib.private.!GnuPG.gpgv ~CFR~V
- -squeeze distrib.private.!GnuPG.gpgv
-
-distrib.private.!GnuPG.gpgsplit: tools.gpgsplit
- -copy tools.gpgsplit distrib.private.!GnuPG.gpgsplit ~CFR~V
- -squeeze distrib.private.!GnuPG.gpgsplit
-
-distrib.private.!GnuPG.gpgkeys_ldap: keyserver.gpgkeys_ldap
- -copy keyserver.gpgkeys_ldap distrib.private.!GnuPG.gpgkeys_ldap ~CFR~V
- -squeeze distrib.private.!GnuPG.gpgkeys_ldap
-
-distrib.private.!GnuPG.JPEGview: riscos.jpegview.jpegview
- -copy riscos.jpegview.jpegview distrib.private.!GnuPG.JPEGview ~CFR~V
-
-clean-cipher:
- -ifthere cipher.o.* then wipe cipher.o.* ~CFR~V
- -ifthere cipher.cipher then wipe cipher.cipher ~CFR~V
-
-clean-intl:
- -ifthere intl.o.* then wipe intl.o.* ~CFR~V
- -ifthere intl.gettext then wipe intl.gettext ~CFR~V
-
-clean-mpi:
- -ifthere mpi.o.* then wipe mpi.o.* ~CFR~V
- -ifthere mpi.arm.o.* then wipe mpi.arm.o.* ~CFR~V
- -ifthere mpi.mpi then wipe mpi.mpi ~CFR~V
-
-clean-util:
- -ifthere util.o.* then wipe util.o.* ~CFR~V
- -ifthere util.util then wipe util.util ~CFR~V
-
-clean-zlib:
- -ifthere zlib.o.* then wipe zlib.o.* ~CFR~V
- -ifthere zlib.zlib then wipe zlib.zlib ~CFR~V
-
-clean-dist:
- -ifthere distrib.*/zip then wipe distrib.*/zip ~CFR~V
-
-clean-g10:
- -ifthere g10.gpg then wipe g10.gpg ~CFR~V
- -ifthere g10.gpgv then wipe g10.gpgv ~CFR~V
- -ifthere g10.gpgpart then wipe g10.gpgpart ~CFR~V
- -ifthere g10.o.* then wipe g10.o.* ~CFR~V
-
-clean-keyserver:
- -ifthere keyserver.gpgkeys_ldap then wipe keyserver.gpgkeys_ldap ~CFR~V
- -ifthere keyserver.o.* then wipe keyserver.o.* ~CFR~V
-
-clean-tools:
- -ifthere tools.gpgsplit then wipe tools.gpgsplit ~CFR~V
- -ifthere tools.o.* then wipe tools.o.* ~CFR~V
-
-clean-riscos:
- -ifthere riscos.jpegview.jpegview then wipe riscos.jpegview.jpegview ~CFR~V
-
-clean-version:
- -ifthere g10.o.armor then wipe g10.o.armor ~CFR~V
- -ifthere g10.o.encode then wipe g10.o.encode ~CFR~V
- -ifthere g10.o.g10 then wipe g10.o.g10 ~CFR~V
- -ifthere g10.o.gpgv then wipe g10.o.gpgv ~CFR~V
- -ifthere g10.o.keygen then wipe g10.o.keygen ~CFR~V
- -ifthere g10.o.sign then wipe g10.o.sign ~CFR~V
- -ifthere g10.gpg then wipe g10.gpg ~CFR~V
- -ifthere g10.gpgv then wipe g10.gpgv ~CFR~V
- -ifthere g10.gpgpart then wipe g10.gpgpart ~CFR~V
-
-clean: clean-dist clean-cipher clean-intl clean-mpi clean-util clean-zlib clean-g10 clean-keyserver clean-tools clean-riscos
-
-g10.o.armor: BUILD
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.armor g10.c.armor
-
-g10.o.encode: BUILD
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.encode g10.c.encode
-
-g10.o.g10: BUILD
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.g10 g10.c.g10
-
-g10.o.gpgv: BUILD
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.gpgv g10.c.gpgv
-
-g10.o.keygen: BUILD
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.keygen g10.c.keygen
-
-g10.o.sign: BUILD
- $(CC) $(CC_FLAGS) $(DEPEND) -c -o g10.o.sign g10.c.sign
-
-dev: clean-version
- $(MAKE) fast-dev
-
-fast-dev: BUILD
- setver configure/ac AC_INIT(gnupg, , dev
- wipe distrib.private.!GnuPG.gpg* ~CFR~V
- -$(MAKE) keyserver.gpgkeys_ldap
- $(MAKE) tools.gpgsplit
- $(MAKE) distrib.gnupgdev/zip
- ifthere <WebServe$ServeRoot>.private.gnupgdev/zip then wipe <WebServe$ServeRoot>.private.gnupgdev/zip ~CFR~V
- rename distrib.gnupgdev/zip <WebServe$ServeRoot>.private.gnupgdev/zip
-
-dist: BUILD clean-version tools.gpgsplit
- setver configure/ac AC_INIT(gnupg, , dist
- wipe distrib.gpl-bin.!GnuPG.gpg* ~CFR~V
- $(MAKE) distrib.gnupg/zip
- $(MAKE) distrib.gnupgidea/zip
- $(MAKE) distrib.gnupgpart/zip
- wipe distrib.private.!GnuPG.gpg* ~CFR~V
- $(MAKE) distrib.gnupgdev/zip
- $(MAKE) distrib.gnupgsrc/zip
- $(MAKE) distrib.gnupgintl/zip
- $(MAKE) distrib.gnupgldap/zip
- $(MAKE) select-idea-src
- ifthere <WebServe$ServeRoot>.archives.gnupg/zip then wipe <WebServe$ServeRoot>.archives.gnupg/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.private.gnupgdev/zip then wipe <WebServe$ServeRoot>.private.gnupgdev/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.archives.gnupgidea/zip then wipe <WebServe$ServeRoot>.archives.gnupgidea/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.archives.gnupgpart/zip then wipe <WebServe$ServeRoot>.archives.gnupgpart/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.archives.gnupgsrc/zip then wipe <WebServe$ServeRoot>.archives.gnupgsrc/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.archives.gnupgintl/zip then wipe <WebServe$ServeRoot>.archives.gnupgintl/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.archives.gnupgldap/zip then wipe <WebServe$ServeRoot>.archives.gnupgldap/zip ~CFR~V
- ifthere <WebServe$ServeRoot>.gnupg_history/txt then wipe <WebServe$ServeRoot>.gnupg_history/txt ~CFR~V
- ifthere <WebServe$ServeRoot>.gnupg_news/txt then wipe <WebServe$ServeRoot>.gnupg_news/txt ~CFR~V
- rename distrib.gnupgdev/zip <WebServe$ServeRoot>.private.gnupgdev/zip
- rename distrib.gnupg/zip <WebServe$ServeRoot>.archives.gnupg/zip
- rename distrib.gnupgidea/zip <WebServe$ServeRoot>.archives.gnupgidea/zip
- rename distrib.gnupgpart/zip <WebServe$ServeRoot>.archives.gnupgpart/zip
- rename distrib.gnupgsrc/zip <WebServe$ServeRoot>.archives.gnupgsrc/zip
- rename distrib.gnupgintl/zip <WebServe$ServeRoot>.archives.gnupgintl/zip
- rename distrib.gnupgldap/zip <WebServe$ServeRoot>.archives.gnupgldap/zip
- copy distrib.resources.History <WebServe$ServeRoot>.gnupg_history/txt ~CFR~V
- copy distrib.resources.orig_docs.NEWS <WebServe$ServeRoot>.gnupg_news/txt ~CFR~V
- unset GnuPG$DevDefine
- unset GnuPG$Version
- updatesigs <WebServe$ServeRoot>.archives --secring adfs::ap.$.secring/gpg
-
-# Dynamic dependencies:
diff --git a/scripts/conf-riscos/include/config.h b/scripts/conf-riscos/include/config.h
deleted file mode 100644
index b95bef608..000000000
--- a/scripts/conf-riscos/include/config.h
+++ /dev/null
@@ -1,390 +0,0 @@
-/* config.h - hand edited by Stefan Bellon to suit RISC OS needs
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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_CONFIG_H
-#define G10_CONFIG_H
-
-/* need this, because some autoconf tests rely on this (e.g. stpcpy)
- * and it should be used for new programs
- */
-#define _GNU_SOURCE 1
-
-
-/* Define if using alloca.c. */
-#undef C_ALLOCA
-
-/* Define to empty if the keyword does not work. */
-/* #undef const */
-
-/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
- This function is required for alloca.c support on those systems. */
-#undef CRAY_STACKSEG_END
-
-/* Define if you have alloca, as a function or macro. */
-/* #undef HAVE_ALLOCA */
-#define HAVE_ALLOCA 1
-
-/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
-/* #undef HAVE_ALLOCA_H */
-#define HAVE_ALLOCA_H 1
-
-/* #undef _LIBC */
-
-/* Define if you don't have vprintf but do have _doprnt. */
-#undef HAVE_DOPRNT
-
-/* Define if you have the vprintf function. */
-#define HAVE_VPRINTF 1
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
-
-/* Define if you need to in order for stat and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define as the return type of signal handlers (int or void). */
-#define RETSIGTYPE void
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#define size_t unsigned int
-
-/* If using the C implementation of alloca, define if you know the
- direction of stack growth for your system; otherwise it will be
- automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown
- */
-#undef STACK_DIRECTION
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define if `sys_siglist' is declared by <signal.h>. */
-#define SYS_SIGLIST_DECLARED 1
-
-#undef M_DEBUG
-#undef M_GUARD
-#define PRINTABLE_OS_NAME "RISC OS"
-
-/* Define if your locale.h file contains LC_MESSAGES. */
-#define HAVE_LC_MESSAGES 1
-
-/* Define to 1 if NLS is requested. */
-#define ENABLE_NLS 1
-
-/* Define as 1 if you have catgets and don't want to use GNU gettext. */
-#undef HAVE_CATGETS
-
-/* Define as 1 if you have gettext and don't want to use GNU gettext. */
-#undef HAVE_GETTEXT
-
-#undef BIG_ENDIAN_HOST
-#define LITTLE_ENDIAN_HOST 1
-
-#undef HAVE_BYTE_TYPEDEF
-#undef HAVE_USHORT_TYPEDEF
-#undef HAVE_ULONG_TYPEDEF
-#undef HAVE_U16_TYPEDEF
-#undef HAVE_U32_TYPEDEF
-
-#undef HAVE_BROKEN_MLOCK
-
-/* defined if we have a /dev/random and /dev/urandom */
-#undef HAVE_DEV_RANDOM
-/* and the real names of the random devices */
-#undef NAME_OF_DEV_RANDOM
-#undef NAME_OF_DEV_URANDOM
-/* Linux has an ioctl */
-#undef HAVE_DEV_RANDOM_IOCTL
-
-/* see cipher/rndegd.c */
-#undef EGD_SOCKET_NAME
-
-#undef USE_DYNAMIC_LINKING
-#undef HAVE_DL_DLOPEN
-#undef HAVE_DL_SHL_LOAD
-#undef HAVE_DLD_DLD_LINK
-
-#undef USE_SHM_COPROCESSING
-
-#undef IPC_HAVE_SHM_LOCK
-#undef IPC_RMID_DEFERRED_RELEASE
-
-/* set this to limit filenames to the 8.3 format */
-#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
-/* because the Unix gettext has to much overhead on MingW32 systems
- * and these systems lack Posix functions, we use a simplified version
- * of gettext */
-#undef USE_SIMPLE_GETTEXT
-/* At some point in the system we need to know that we use the Windows
- * random module. */
-#undef USE_STATIC_RNDW32
-
-#undef USE_CAPABILITIES
-
-/* Some systems have mkdir that takes a single argument. */
-#undef MKDIR_TAKES_ONE_ARG
-
-/* The number of bytes in a unsigned int. */
-#define SIZEOF_UNSIGNED_INT 4
-
-/* The number of bytes in a unsigned long. */
-#define SIZEOF_UNSIGNED_LONG 4
-
-/* The number of bytes in a unsigned long long. */
-#define SIZEOF_UNSIGNED_LONG_LONG 0
-
-/* The number of bytes in a unsigned short. */
-#define SIZEOF_UNSIGNED_SHORT 2
-
-/* Define if you have the __argz_count function. */
-#undef HAVE___ARGZ_COUNT
-
-/* Define if you have the __argz_next function. */
-#undef HAVE___ARGZ_NEXT
-
-/* Define if you have the __argz_stringify function. */
-#undef HAVE___ARGZ_STRINGIFY
-
-/* Define if you have the atexit function. */
-#define HAVE_ATEXIT 1
-
-/* Define if you have the clock_gettime function. */
-#undef HAVE_CLOCK_GETTIME
-
-/* Define if you have the dcgettext function. */
-#undef HAVE_DCGETTEXT
-
-/* Define if you have the dlopen function. */
-#undef HAVE_DLOPEN
-
-/* Define if you have the fopen64 function. */
-#undef HAVE_FOPEN64
-
-/* Define if you have the fstat64 function. */
-#undef HAVE_FSTAT64
-
-/* Define if you have the getcwd function. */
-#define HAVE_GETCWD 1
-
-/* Define if you have the gethrtime function. */
-#undef HAVE_GETHRTIME
-
-/* Define if you have the getpagesize function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define if you have the getrusage function. */
-#define HAVE_GETRUSAGE 1
-
-/* Define if you have the gettimeofday function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define if you have the memicmp function. */
-#undef HAVE_MEMICMP
-
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE 1
-
-/* Define if you have the mlock function. */
-#undef HAVE_MLOCK
-
-/* Define if you have the mmap function. */
-#undef HAVE_MMAP
-
-/* Define if you have the munmap function. */
-#undef HAVE_MUNMAP
-
-/* Define if you have the nl_langinfo function. */
-#undef HAVE_NL_LANGINFO
-
-/* Define if you have the putenv function. */
-#define HAVE_PUTENV 1
-
-/* Define if you have the raise function. */
-#define HAVE_RAISE 1
-
-/* Define if you have the rand function. */
-#define HAVE_RAND 1
-
-/* Define if you have the setenv function. */
-#define HAVE_SETENV 1
-
-/* Define if you have the setlocale function. */
-#define HAVE_SETLOCALE 1
-
-/* Define if you have the setrlimit function. */
-#define HAVE_SETRLIMIT 1
-
-/* Define if you have the sigaction function. */
-#define HAVE_SIGACTION 1
-
-/* Define if you have the sigprocmask function. */
-#define HAVE_SIGPROCMASK 1
-
-/* Define if you have the stpcpy function. */
-#define HAVE_STPCPY 1
-
-/* Define if you have the strcasecmp function. */
-#define HAVE_STRCASECMP 1
-
-/* Define if you have the strchr function. */
-#define HAVE_STRCHR 1
-
-/* Define if you have the strdup function. */
-#define HAVE_STRDUP 1
-
-/* Define if you have the strerror function. */
-#define HAVE_STRERROR 1
-
-/* Define if you have the strftime function. */
-#define HAVE_STRFTIME 1
-
-/* Define if you have the stricmp function. */
-#define HAVE_STRICMP 1
-
-/* Define if you have the strlwr function. */
-#undef HAVE_STRLWR
-
-/* Define if you have the strtoul function. */
-#define HAVE_STRTOUL 1
-
-/* Define if you have the tcgetattr function. */
-#undef HAVE_TCGETATTR
-
-/* Define if you have the wait4 function. */
-#define HAVE_WAIT4 1
-
-/* Define if you have the waitpid function. */
-#define HAVE_WAITPID 1
-
-/* Define if you have the <argz.h> header file. */
-#undef HAVE_ARGZ_H
-
-/* Define if you have the <direct.h> header file. */
-#undef HAVE_DIRECT_H
-
-/* Define if you have the <gdbm.h> header file. */
-#undef HAVE_GDBM_H
-
-/* Define if you have the <langinfo.h> header file. */
-#undef HAVE_LANGINFO_H
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if you have the <linux/random.h> header file. */
-#undef HAVE_LINUX_RANDOM_H
-
-/* Define if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define if you have the <nl_types.h> header file. */
-#undef HAVE_NL_TYPES_H
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <sys/capability.h> header file. */
-#undef HAVE_SYS_CAPABILITY_H
-
-/* Define if you have the <sys/ipc.h> header file. */
-#undef HAVE_SYS_IPC_H
-
-/* Define if you have the <sys/mman.h> header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define if you have the <sys/shm.h> header file. */
-#undef HAVE_SYS_SHM_H
-
-/* Define if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define if you have the <termio.h> header file. */
-#undef HAVE_TERMIO_H
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define if you have the <zlib.h> header file. */
-#define HAVE_ZLIB_H 1
-
-/* Define if you have the dl library (-ldl). */
-#undef HAVE_LIBDL
-
-/* Define if you have the dld library (-ldld). */
-#undef HAVE_LIBDLD
-
-/* Define if you have the gdbm library (-lgdbm). */
-#undef HAVE_LIBGDBM
-
-/* Define if you have the i library (-li). */
-#undef HAVE_LIBI
-
-/* Define if you have the nsl library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the rt library (-lrt). */
-#undef HAVE_LIBRT
-
-/* Name of package */
-#define PACKAGE "GnuPG"
-
-
-/* define if compiled symbols have a leading underscore */
-#define WITH_SYMBOL_UNDERSCORE 1
-
-#ifdef IS_DEVELOPMENT_VERSION
- #define DEBUG 1
-/* #define M_DEBUG */
- #define M_GUARD 1
-#endif
-
-#define USE_RNDRISCOS 1
-
-/* RISC OS specifica */
-#if (__CC_NORCROFT == 1) /* Norcroft */
-# undef __GNUC__
-# define __GNUC_MINOR__ 0
-# define __GLIBC__ 0
-# define __attribute__(x)
-# if (__CC_NORCROFT_VERSION < 544) /* old version of Norcroft */
-# define inline __inline
-# define STR(a) #a
-# define __func__ "[" __FILE__ ":" STR(__LINE__) "]"
-# endif
-#else /* gcc */
-#endif
-
-/* #define USE_EXTERNAL_HKP */
-
-#include "g10defs.h"
-
-#endif /*G10_CONFIG_H*/
diff --git a/scripts/conf-riscos/include/g10defs.h b/scripts/conf-riscos/include/g10defs.h
deleted file mode 100644
index 6b47a6b38..000000000
--- a/scripts/conf-riscos/include/g10defs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* g10defs.h - hand edited by Stefan Bellon to suit RISC OS needs
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GNUPG.
- *
- * GNUPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/* Path variables and filing system constants for RISC OS */
-#define G10_LOCALEDIR "<GnuPG$Dir>.locale"
-#define GNUPG_LIBDIR "<GnuPG$Dir>"
-#define GNUPG_LIBEXECDIR "<GnuPG$Dir>"
-#define GNUPG_DATADIR "<GnuPG$Dir>"
-#define GNUPG_HOMEDIR "<GnuPGUser$Dir>"
-#define LOCALE_ALIAS_PATH "<GnuPG$Dir>.locale"
-#define GNULOCALEDIR "<GnuPG$Dir>.locale"
-#define DIRSEP_C '.'
-#define EXTSEP_C '/'
-#define DIRSEP_S "."
-#define EXTSEP_S "/"
-
-/* This file defines some basic constants for the MPI machinery. We
- * need to define the types on a per-CPU basis, so it is done with
- * this file here. */
-#define BYTES_PER_MPI_LIMB (SIZEOF_UNSIGNED_LONG)
-
-/* External process spawning mechanism */
-#if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID))
-#define EXEC_TEMPFILE_ONLY 1
-#endif
diff --git a/scripts/config.guess b/scripts/config.guess
deleted file mode 100755
index dff9e481b..000000000
--- a/scripts/config.guess
+++ /dev/null
@@ -1,1317 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-09-04'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# Please send patches to <config-patches@gnu.org>.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script.
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int dummy(){}" > $dummy.c ;
- for c in cc gcc c89 ; do
- ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
- if test $? = 0 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- rm -f $dummy.c $dummy.o $dummy.rel ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # Netbsd (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- # Determine the machine/vendor (is the vendor relevant).
- case "${UNAME_MACHINE}" in
- amiga) machine=m68k-unknown ;;
- arm32) machine=arm-unknown ;;
- atari*) machine=m68k-atari ;;
- sun3*) machine=m68k-sun ;;
- mac68k) machine=m68k-apple ;;
- macppc) machine=powerpc-apple ;;
- hp3[0-9][05]) machine=m68k-hp ;;
- ibmrt|romp-ibm) machine=romp-ibm ;;
- *) machine=${UNAME_MACHINE}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE}" in
- i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- eval $set_cc_for_build
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- 2-1307)
- UNAME_MACHINE="alphaev68"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- sparc*:NetBSD:*)
- echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy \
- && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- case "${HPUX_REV}" in
- 11.[0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- esac ;;
- esac
- fi ;;
- esac
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
- if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
- rm -f $dummy.c $dummy
- fi ;;
- esac
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- hppa*:OpenBSD:*:*)
- echo hppa-unknown-openbsd
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3D:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
- big) echo mips-unknown-linux-gnu && exit 0 ;;
- little) echo mipsel-unknown-linux-gnu && exit 0 ;;
- esac
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- ld_supported_targets=`cd /; ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-# if __GLIBC__ >= 2
- printf ("%s-pc-linux-gnu\n", argv[1]);
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-#else
- printf ("%s-pc-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- if test "${UNAME_MACHINE}" = "x86pc"; then
- UNAME_MACHINE=pc
- fi
- echo `uname -p`-${UNAME_MACHINE}-nto-qnx
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[KW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/scripts/config.sub b/scripts/config.sub
deleted file mode 100755
index 393f13d37..000000000
--- a/scripts/config.sub
+++ /dev/null
@@ -1,1411 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-09-07'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
- | d10v | d30v | dsp16xx \
- | fr30 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | m32r | m68000 | m68k | m88k | mcore \
- | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el | mips64vr4300 \
- | mips64vr4300el | mips64vr5000 | mips64vr5000el \
- | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
- | mipsisa32 \
- | mn10200 | mn10300 \
- | ns16k | ns32k \
- | openrisc \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | s390 | s390x \
- | sh | sh[34] | sh[34]eb | shbe | shle \
- | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
- | stormy16 | strongarm \
- | tahoe | thumb | tic80 | tron \
- | v850 \
- | we32k \
- | x86 | xscale \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alphapca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armv*-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c54x-* \
- | clipper-* | cray2-* | cydra-* \
- | d10v-* | d30v-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | m32r-* \
- | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
- | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
- | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | s390-* | s390x-* \
- | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
- | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
- | v850-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [cjt]90)
- basic_machine=${basic_machine}-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux-gnu
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux-gnu
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2)
- basic_machine=i686-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sparclite-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=t3e-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- windows32)
- basic_machine=i386-pc
- os=-windows32-msvcrt
- ;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- mips)
- if [ x$os = x-linux-gnu ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh3eb | sh4eb)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- c4x*)
- basic_machine=c4x-none
- os=-coff
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto*)
- os=-nto-qnx
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/scripts/distfiles b/scripts/distfiles
deleted file mode 100644
index 0e3d55801..000000000
--- a/scripts/distfiles
+++ /dev/null
@@ -1,6 +0,0 @@
-mkdiff
-build-w32
-gnupg.spec.in
-autogen.sh
-mk-gpg-texi
-mk-w32-dist
\ No newline at end of file
diff --git a/scripts/gnupg.spec.in b/scripts/gnupg.spec.in
deleted file mode 100644
index 357f540a3..000000000
--- a/scripts/gnupg.spec.in
+++ /dev/null
@@ -1,177 +0,0 @@
-#
-# gnupg -- gnu privacy guard
-# This is a template. The dist target uses it to create the real file.
-#
-%define version @pkg_version@
-%define name gnupg
-Summary: GNU Utility for data encryption and digital signatures
-Summary(it): Utility GNU per la sicurezza nelle comunicazioni e nell'archiviazione dei dati.
-Summary(cs): GNU nástroj pro ¹ifrovanou komunikaci a bezpeèné ukládání dat
-Summary(fr): Utilitaire GNU de chiffrement et d'authentification des communications et des données
-Summary(pl): Narzedzie GNU do szyfrowania i podpisywania danych
-Vendor: GNU Privacy Guard Project
-Name: %{name}
-Version: %{version}
-Release: 1
-Copyright: GPL
-Group: Applications/Cryptography
-Group(cs): Aplikace/©ifrování
-Group(fr): Applications/Cryptographie
-Group(it): Applicazioni/Crittografia
-Source: ftp://ftp.gnupg.org/pub/gcrypt/%{name}-%{version}.tar.gz
-URL: http://www.gnupg.org
-Provides: gpg openpgp
-BuildRoot: /tmp/rpmbuild_%{name}
-
-%changelog
-* Fri Apr 19 2002 David Shaw <dshaw@jabberwocky.com>
-- Removed OPTIONS and pubring.asc - no longer used
-- Added doc/samplekeys.asc
-* Sun Mar 31 2002 David Shaw <dshaw@jabberwocky.com>
-- Added the gpgkeys_xxx keyserver helpers.
-- Added a * to catch variations on the basic gpg man page (gpg, gpgv).
-- Mark options.skel as a config file.
-- Do not include the FAQ/faq.html twice (in /doc/ and /share/).
-
-* Wed Sep 06 2000 Fabio Coatti <cova@ferrara.linux.it>
-- Added Polish description and summary (Kindly provided by
- Lukasz Stelmach <stelmacl@ee.pw.edu.pl>)
-
-* Thu Jul 13 2000 Fabio Coatti <cova@ferrara.linux.it>
-- Added a * to catch all formats for man pages (plain, gz, bz2...)
-
-* Mon May 01 2000 Fabio Coatti <cova@ferrara.linux.it>
-- Some corrections in French description, thanks to Gaël Quéri
- <gqueri@mail.dotcom.fr>; Some corrections to Italian descriptions.
-
-* Tue Apr 25 2000 Fabio Coatti <cova@ferrara.linux.it>
-- Removed the no longer needed patch for man page by Keith Owens
-
-* Wed Mar 1 2000 Petr Kri¹tof <Petr@Kristof.CZ>
-- Czech descriptions added; some fixes and updates.
-
-* Sat Jan 15 2000 Keith Owens <kaos@ocs.com.au>
-- Add missing man page as separate patch instead of updating the tar file.
-
-* Mon Dec 27 1999 Fabio Coatti <cova@ferrara.linux.it>
-- Upgraded for 1.0.1 (added missing gpg.1 man page)
-
-* Sat May 29 1999 Fabio Coatti <cova@ferrara.linux.it>
-- Some corrections in French description, thanks to Gaël Quéri <gqueri@mail.dotcom.fr>
-
-* Mon May 17 1999 Fabio Coatti <cova@felix.unife.it>
-- Added French description, provided by
- Christophe Labouisse <labouiss@cybercable.fr>
-
-* Thu May 06 1999 Fabio Coatti <cova@felix.unife.it>
-- Upgraded for 0.9.6 (removed gpgm)
-
-* Tue Jan 12 1999 Fabio Coatti <cova@felix.unife.it>
-- LINGUAS variable is now unset in configure to ensure that all languages will be built. (Thanks to Luca Olivetti <luca@luca.ddns.org>)
-
-* Sat Jan 02 1999 Fabio Coatti <cova@felix.unife.it>
-- Added pl language file.
-- Included g10/pubring.asc in documentation files.
-
-* Sat Dec 19 1998 Fabio Coatti <cova@felix.unife.it>
-- Modified the spec file provided by Caskey L. Dickson <caskey-at-technocage.com>
-- Now it can be built also by non-root. Installation has to be done as
- root, gpg is suid.
-- Added some changes by Ross Golder <rossigee@bigfoot.com>
-- Updates for version 0.4.5 of GnuPG (.mo files)
-
-%description
-GnuPG (GNU Privacy Guard) is a GNU utility for encrypting data and
-creating digital signatures. GnuPG has advanced key management
-capabilities and is compliant with the proposed OpenPGP Internet
-standard described in RFC2440. Since GnuPG doesn't use any patented
-algorithm, it is not compatible with any version of PGP2 (PGP2.x uses
-only IDEA, patented worldwide, and RSA, which is patented in the US
-until 9/20/00).
-
-%description -l it
-GnuPG (GNU Privacy Guard) è una utility GNU per la cifratura di dati e
-la creazione di firme digitali. Possiede una gestione avanzata delle
-chiavi ed è conforme allo standard Internet OpenPGP, descritto nella
-RFC 2440. Non utilizzando algoritmi brevettati, non è compatibile con
-PGP2 (PGP2.x usa solo IDEA, coperto da brevetto mondiale, ed RSA,
-brevettato negli USA con scadenza 20/09/2000). Questi algoritmi sono
-utilizzabili da GnuPG tramite moduli esterni.
-
-%description -l fr
-GnuPG est un utilitaire GNU destiné à chiffrer des données et à créer
-des signatures électroniques. Il a des capacités avancées de gestion de
-clés et il est conforme à la norme proposée OpenPGP décrite dans la
-RFC2440. Comme GnuPG n'utilise pas d'algorithme breveté, il n'est
-compatible avec aucune version de PGP2 (PGP2.x ne sait utiliser que
-l'IDEA breveté dans le monde entier et RSA, breveté aux États-Unis
-jusqu'au 20 septembre 2000).
-
-%description -l cs
-GnuPG je GNU nástroj pro bezpeènou komunikaci a ukládání dat. Mù¾e být
-pou¾it na ¹ifrování dat a vytváøení digitálních podpisù. Obsahuje
-funkce pro pokroèilou správu klíèù a vyhovuje navrhovanému OpenPGP
-Internet standardu podle RFC2440. Byl vytvoøen jako kompletní
-náhrada za PGP. Proto¾e neobsahuje ¹ifrovací algoritmy IDEA nebo RSA,
-mù¾e být pou¾íván bez omezení.
-Proto¾e GnuPG nepou¾ívá ¾ádný patentovaný algoritmus, nemù¾e být úplnì
-kompatibilní s PGP verze 2. PGP 2.x pou¾ívá algoritmy IDEA (patentováno
-celosvìtovì) a RSA (patentováno ve Spojených státech do 20. záøí
-2000). Tyto algoritmy lze zavést do GnuPG pomocí externích modulù.
-
-%description -l pl
-GnuPG (GNU Privacy Guard) jest nazedziem do szfrowania danych i tworzenia
-cyfrowych podpisów. GnuPG posiada zaawansowane mozliwosci obslugi kluczy
-i jest zgodne z OpenPGP, proponowanym standardem internetowym opisanym
-w RFC2440. Poniewaz GnuPG nie uzywa zadnych opatentowanych algorytmów
-nie jest wiec zgodne z jaka kolwiek wersja PGP2 (PGP2.x kozysta jedynie
-z algorytmów: IDEA, opatentowanego na calym swiecie, oraz RSA, którego
-patent na terenie Stanów Zjednoczonych wygasa 20 wrzesnia 2000).
-
-%prep
-rm -rf $RPM_BUILD_ROOT
-rm -rf $RPM_BUILD_DIR/%{name}-%{version}
-
-%setup
-
-%build
-if test -n "$LINGUAS"; then
- unset LINGUAS
-fi
-CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --enable-shared
-make
-
-%install
-make install-strip prefix=$RPM_BUILD_ROOT/usr
-
-%files
-
-%doc %attr (-,root,root) INSTALL
-%doc %attr (-,root,root) AUTHORS
-%doc %attr (-,root,root) COPYING
-%doc %attr (-,root,root) ChangeLog
-%doc %attr (-,root,root) NEWS
-%doc %attr (-,root,root) README
-%doc %attr (-,root,root) THANKS
-%doc %attr (-,root,root) TODO
-%doc %attr (-,root,root) PROJECTS
-%doc %attr (-,root,root) doc/DETAILS
-%doc %attr (-,root,root) doc/FAQ
-%doc %attr (-,root,root) doc/faq.html
-%doc %attr (-,root,root) doc/HACKING
-%doc %attr (-,root,root) doc/OpenPGP
-%doc %attr (-,root,root) doc/samplekeys.asc
-
-%attr (-,root,root) /usr/man/man1/gpg*.1*
-%attr (4755,root,root) /usr/bin/gpg
-%attr (-,root,root) /usr/bin/gpgkeys_*
-
-%attr (-,root,root) /usr/share/locale/*/*/%{name}.mo
-
-%attr (-,root,root) /usr/lib/%{name}
-
-%config %attr (-,root,root) /usr/share/%{name}/options.skel
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-rm -rf $RPM_BUILD_DIR/%{name}-%{version}
diff --git a/scripts/gnupgbug b/scripts/gnupgbug
deleted file mode 100644
index 52efc2ab4..000000000
--- a/scripts/gnupgbug
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/bin/sh
-
-#
-# File a bug against the GNU Privacy Guard.
-#
-
-#
-# Copyright (c) 2000 Thomas Roessler <roessler@guug.de>
-#
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-SUBMIT="submit@bugs.guug.de"
-DEBIAN_SUBMIT="submit@bugs.debian.org"
-
-
-include_file ()
-{
- echo
- echo "--- Begin $1"
- sed -e 's/^-/- -/' $1 | egrep -v '^[ ]*(#|$)'
- echo "--- End $1"
- echo
-}
-
-case `echo -n` in
-"") n=-n; c= ;;
- *) n=; c='\c' ;;
-esac
-
-
-exec > /dev/tty
-exec < /dev/tty
-
-SCRATCH=${TMPDIR-/tmp}/`basename $0`.`hostname`.$$
-
-mkdir ${SCRATCH} || \
-{
- echo "`basename $0`: Can't create temporary directory." >& 2 ;
- exit 1 ;
-}
-
-trap "rm -r -f ${SCRATCH} ; trap '' 0 ; exit" 0 1 2
-
-TEMPLATE=${SCRATCH}/template.txt
-
-echo "Please enter a one-line description of the problem you experience:"
-echo $n "> $c"
-read SUBJECT
-
-echo $n "Do you want to include your personal GnuPG configuration files? [Y|n]$c"
-read personal
-case "$personal" in
-[nN]*) personal=no ;;
- *) personal=yes ;;
-esac
-
-if test -f /etc/debian_version ; then
- DEBIAN=yes
- echo $n "Checking whether GnuPG has been installed as a package... $c"
- GNUPGVERSION="`dpkg -l gnupg | grep ^i | awk '{print $3}'`" 2> /dev/null
- if test "$GNUPGVERSION" ; then
- DPKG=yes
- else
- DPKG=no
- fi
- echo "$DPKG"
- if test "$DPKG" = "no" ; then
- echo $n "File this bug with Debian? [Y|n]$c"
- read $DPKG
- case "$DPKG" in
- [nN]) DPKG=no ;;
- *) DPKG=yes ;;
- esac
- fi
-else
- DEBIAN=no
- DPKG=no
-fi
-
-test "$MUTTVERSION" || MUTTVERSION="`mutt -v | head -1 | awk '{print $2}' | tr -d i`"
-test "$DPKG" = "yes" && SUBMIT="$SUBMIT, $DEBIAN_SUBMIT"
-
-
-exec > ${TEMPLATE}
-
-echo "Subject: mutt-$MUTTVERSION: $SUBJECT"
-echo "To: $SUBMIT"
-echo "Cc: $LOGNAME"
-echo
-echo "Package: mutt"
-echo "Version: $MUTTVERSION"
-echo
-echo "-- Please type your report below this line"
-echo
-echo
-echo
-
-if test "$DEBIAN" = "yes" ; then
- echo "Obtaining Debian-specific information..." > /dev/tty
- bug -p -s dummy mutt | \
- sed -n -e "/^-- System Information/,/^---/p" | \
- grep -v '^---'
-fi
-
-echo
-echo "-- Mutt Version Information"
-echo
-mutt -v
-
-if test "$personal" = "yes" ; then
- CANDIDATES=".muttrc-${MUTTVERSION} .muttrc .mutt/muttrc-${MUTTVERSION} .mutt/muttrc"
- MATCHED="none"
- for f in $CANDIDATES; do
- if test -f "${HOME}/$f" ; then
- MATCHED="${HOME}/$f"
- break
- fi
- done
-
- if test "$MATCHED" = "none" ; then
- echo "WARNING: Can't find your personal .muttrc." >&2
- else
- include_file $MATCHED
- fi
-fi
-
-if test "$global" = "yes" ; then
- CANDIDATES="Muttrc-${MUTTVERSION} Muttrc"
- DIRECTORIES="/etc /usr/local/share/mutt"
- MATCHED="none"
- for d in $DIRECTORIES ; do
- for f in $CANDIDATES; do
- if test -f $d/$f ; then
- MATCHED="$d/$f"
- break
- fi
- done
- test "$MATCHED" = "none" || break
- done
-
- if test "$MATCHED" = "none" ; then
- echo "WARNING: Can't find global Muttrc." >&2
- else
- include_file $MATCHED
- fi
-fi
-
-exec > /dev/tty
-
-cp $TEMPLATE $SCRATCH/mutt-bug.txt
-
-input="e"
-while : ; do
- if test "$input" = "e" ; then
- ${VISUAL-vi} $SCRATCH/mutt-bug.txt
- if cmp $SCRATCH/mutt-bug.txt ${TEMPLATE} > /dev/null ; then
- echo "WARNING: Bug report was not modified!"
- fi
- fi
-
- echo $n "Submit, Edit, Print, Quit? [S|e|p|q]$c"
- read _input
- input="`echo $_input | tr EPSQ epsq`"
- case $input in
- e*) ;;
- p*) ${PAGER-more} $SCRATCH/mutt-bug.txt ;;
- s*|"") /usr/sbin/sendmail -t < $SCRATCH/mutt-bug.txt ; exit ;;
- q*) exit
- esac
-done
-
diff --git a/scripts/log_accum b/scripts/log_accum
deleted file mode 100755
index 0629abb48..000000000
--- a/scripts/log_accum
+++ /dev/null
@@ -1,595 +0,0 @@
-#! /usr/bin/perl
-# -*-Perl-*-
-#
-# Perl filter to handle the log messages from the checkin of files in
-# a directory. This script will group the lists of files by log
-# message, and mail a single consolidated log message at the end of
-# the commit.
-#
-# This file assumes a pre-commit checking program that leaves the
-# names of the first and last commit directories in a temporary file.
-#
-# Contributed by David Hampton <hampton@cisco.com>
-#
-# hacked greatly by Greg A. Woods <woods@planix.com>
-#
-# Modified by werner.koch@guug.de to add support for
-# automagically extraction of ChangeLog entries 1998-12-29
-
-# Usage: log_accum.pl [-d] [-s] [-M module] [[-m mailto] ...] [[-R replyto] ...] [-f logfile]
-# -d - turn on debugging
-# -m mailto - send mail to "mailto" (multiple)
-# -R replyto - set the "Reply-To:" to "replyto" (multiple)
-# -M modulename - set module name to "modulename"
-# -f logfile - write commit messages to logfile too
-# -s - *don't* run "cvs status -v" for each file
-# -w - show working directory with log message
-
-#
-# Configurable options
-#
-
-# set this to something that takes a whole message on stdin
-$MAILER = "/usr/lib/sendmail -t";
-
-#
-# End user configurable options.
-#
-
-# Constants (don't change these!)
-#
-$STATE_NONE = 0;
-$STATE_CHANGED = 1;
-$STATE_ADDED = 2;
-$STATE_REMOVED = 3;
-$STATE_LOG = 4;
-
-$LAST_FILE = "/tmp/#cvs.lastdir";
-
-$CHANGED_FILE = "/tmp/#cvs.files.changed";
-$ADDED_FILE = "/tmp/#cvs.files.added";
-$REMOVED_FILE = "/tmp/#cvs.files.removed";
-$LOG_FILE = "/tmp/#cvs.files.log";
-
-$FILE_PREFIX = "#cvs.files";
-
-#
-# Subroutines
-#
-
-sub cleanup_tmpfiles {
- local($wd, @files);
-
- $wd = `pwd`;
- chdir("/tmp") || die("Can't chdir('/tmp')\n");
- opendir(DIR, ".");
- push(@files, grep(/^$FILE_PREFIX\..*\.$id$/, readdir(DIR)));
- closedir(DIR);
- foreach (@files) {
- unlink $_;
- }
- unlink $LAST_FILE . "." . $id;
-
- chdir($wd);
-}
-
-sub write_logfile {
- local($filename, @lines) = @_;
-
- open(FILE, ">$filename") || die("Cannot open log file $filename.\n");
- print FILE join("\n", @lines), "\n";
- close(FILE);
-}
-
-sub append_to_logfile {
- local($filename, @lines) = @_;
-
- open(FILE, ">$filename") || die("Cannot open log file $filename.\n");
- print FILE join("\n", @lines), "\n";
- close(FILE);
-}
-
-sub format_names {
- local($dir, @files) = @_;
- local(@lines);
-
- $format = "\t%-" . sprintf("%d", length($dir)) . "s%s ";
-
- $lines[0] = sprintf($format, $dir, ":");
-
- if ($debug) {
- print STDERR "format_names(): dir = ", $dir, "; files = ", join(":", @files), ".\n";
- }
- foreach $file (@files) {
- if (length($lines[$#lines]) + length($file) > 65) {
- $lines[++$#lines] = sprintf($format, " ", " ");
- }
- $lines[$#lines] .= $file . " ";
- }
-
- @lines;
-}
-
-sub format_lists {
- local(@lines) = @_;
- local(@text, @files, $lastdir);
-
- if ($debug) {
- print STDERR "format_lists(): ", join(":", @lines), "\n";
- }
- @text = ();
- @files = ();
- $lastdir = shift @lines; # first thing is always a directory
- if ($lastdir !~ /.*\/$/) {
- die("Damn, $lastdir doesn't look like a directory!\n");
- }
- foreach $line (@lines) {
- if ($line =~ /.*\/$/) {
- push(@text, &format_names($lastdir, @files));
- $lastdir = $line;
- @files = ();
- } else {
- push(@files, $line);
- }
- }
- push(@text, &format_names($lastdir, @files));
-
- @text;
-}
-
-sub append_names_to_file {
- local($filename, $dir, @files) = @_;
-
- if (@files) {
- open(FILE, ">>$filename") || die("Cannot open file $filename.\n");
- print FILE $dir, "\n";
- print FILE join("\n", @files), "\n";
- close(FILE);
- }
-}
-
-sub read_line {
- local($line);
- local($filename) = @_;
-
- open(FILE, "<$filename") || die("Cannot open file $filename.\n");
- $line = <FILE>;
- close(FILE);
- chop($line);
- $line;
-}
-
-sub read_logfile {
- local(@text);
- local($filename, $leader) = @_;
-
- open(FILE, "<$filename");
- while (<FILE>) {
- chop;
- push(@text, $leader.$_);
- }
- close(FILE);
- @text;
-}
-
-sub build_header {
- local($header);
- local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
- $header = sprintf("CVSROOT:\t%s\nModule name:\t%s\nRepository:\t%s\nChanges by:\t%s@%s\t%02d/%02d/%02d %02d:%02d:%02d",
- $cvsroot,
- $modulename,
- $dir,
- $login, $hostdomain,
- $year%100, $mon+1, $mday,
- $hour, $min, $sec);
-}
-
-sub mail_notification {
- local(@text) = @_;
-
- # if only we had strftime()... stuff stolen from perl's ctime.pl:
- local($[) = 0;
-
- @DoW = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
- @MoY = ('Jan','Feb','Mar','Apr','May','Jun',
- 'Jul','Aug','Sep','Oct','Nov','Dec');
-
- # Determine what time zone is in effect.
- # Use GMT if TZ is defined as null, local time if TZ undefined.
- # There's no portable way to find the system default timezone.
- #
- $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : '';
-
- # Hack to deal with 'PST8PDT' format of TZ
- # Note that this can't deal with all the esoteric forms, but it
- # does recognize the most common: [:]STDoff[DST[off][,rule]]
- #
- if ($TZ =~ /^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/) {
- $TZ = $isdst ? $4 : $1;
- $tzoff = sprintf("%05d", -($2) * 100);
- }
-
- # perl-4.036 doesn't have the $zone or $gmtoff...
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst, $zone, $gmtoff) =
- ($TZ eq 'GMT') ? gmtime(time) : localtime(time);
-
- $year += ($year < 70) ? 2000 : 1900;
-
- if ($gmtoff != 0) {
- $tzoff = sprintf("%05d", ($gmtoff / 60) * 100);
- }
- if ($zone ne '') {
- $TZ = $zone;
- }
-
- # ok, let's try....
- $rfc822date = sprintf("%s, %2d %s %4d %2d:%02d:%02d %s (%s)",
- $DoW[$wday], $mday, $MoY[$mon], $year,
- $hour, $min, $sec, $tzoff, $TZ);
-
- open(MAIL, "| $MAILER");
- print MAIL "Date: " . $rfc822date . "\n";
- print MAIL "Subject: CVS Update: " . $modulename . "\n";
- print MAIL "To: " . $mailto . "\n";
- print MAIL "Reply-To: " . $replyto . "\n";
- print MAIL "\n";
- print MAIL join("\n", @text), "\n";
- close(MAIL);
-}
-
-sub write_commitlog {
- local($logfile, @text) = @_;
-
- open(FILE, ">>$logfile");
- print FILE join("\n", @text), "\n";
- close(FILE);
-}
-
-#
-# Main Body
-#
-
-# Initialize basic variables
-#
-$debug = 0;
-$id = getpgrp(); # note, you *must* use a shell which does setpgrp()
-$state = $STATE_NONE;
-$login = getlogin || (getpwuid($<))[0] || "nobody";
-chop($hostname = `hostname`);
-chop($domainname = `domainname`);
-if ($domainname !~ '^\..*') {
- $domainname = '.' . $domainname;
-}
-$hostdomain = $hostname . $domainname;
-$cvsroot = $ENV{'CVSROOT'};
-$do_status = 1; # moderately useful
-$show_wd = 0; # useless in client/server
-$modulename = "";
-
-# parse command line arguments (file list is seen as one arg)
-#
-while (@ARGV) {
- $arg = shift @ARGV;
-
- if ($arg eq '-d') {
- $debug = 1;
- print STDERR "Debug turned on...\n";
- } elsif ($arg eq '-m') {
- if ($mailto eq '') {
- $mailto = shift @ARGV;
- } else {
- $mailto = $mailto . ", " . shift @ARGV;
- }
- } elsif ($arg eq '-R') {
- if ($replyto eq '') {
- $replyto = shift @ARGV;
- } else {
- $replyto = $replyto . ", " . shift @ARGV;
- }
- } elsif ($arg eq '-M') {
- $modulename = shift @ARGV;
- } elsif ($arg eq '-s') {
- $do_status = 0;
- } elsif ($arg eq '-w') {
- $show_wd = 1;
- } elsif ($arg eq '-f') {
- ($commitlog) && die("Too many '-f' args\n");
- $commitlog = shift @ARGV;
- } else {
- ($donefiles) && die("Too many arguments! Check usage.\n");
- $donefiles = 1;
- @files = split(/ /, $arg);
- }
-}
-($mailto) || die("No mail recipient specified (use -m)\n");
-if ($replyto eq '') {
- $replyto = $login;
-}
-
-# for now, the first "file" is the repository directory being committed,
-# relative to the $CVSROOT location
-#
-@path = split('/', $files[0]);
-
-# XXX There are some ugly assumptions in here about module names and
-# XXX directories relative to the $CVSROOT location -- really should
-# XXX read $CVSROOT/CVSROOT/modules, but that's not so easy to do, since
-# XXX we have to parse it backwards.
-# XXX
-# XXX Fortunately it's relatively easy for the user to specify the
-# XXX module name as appropriate with a '-M' via the directory
-# XXX matching in loginfo.
-#
-if ($modulename eq "") {
- $modulename = $path[0]; # I.e. the module name == top-level dir
-}
-if ($#path == 0) {
- $dir = ".";
-} else {
- $dir = join('/', @path);
-}
-$dir = $dir . "/";
-
-if ($debug) {
- print STDERR "module - ", $modulename, "\n";
- print STDERR "dir - ", $dir, "\n";
- print STDERR "path - ", join(":", @path), "\n";
- print STDERR "files - ", join(":", @files), "\n";
- print STDERR "id - ", $id, "\n";
-}
-
-# Check for a new directory first. This appears with files set as follows:
-#
-# files[0] - "path/name/newdir"
-# files[1] - "-"
-# files[2] - "New"
-# files[3] - "directory"
-#
-if ($files[2] =~ /New/ && $files[3] =~ /directory/) {
- local(@text);
-
- @text = ();
- push(@text, &build_header());
- push(@text, "");
- push(@text, $files[0]);
- push(@text, "");
-
- while (<STDIN>) {
- chop; # Drop the newline
- push(@text, $_);
- }
-
- &mail_notification($mailto, @text);
-
- exit 0;
-}
-
-# Check for an import command. This appears with files set as follows:
-#
-# files[0] - "path/name"
-# files[1] - "-"
-# files[2] - "Imported"
-# files[3] - "sources"
-#
-if ($files[2] =~ /Imported/ && $files[3] =~ /sources/) {
- local(@text);
-
- @text = ();
- push(@text, &build_header());
- push(@text, "");
- push(@text, $files[0]);
- push(@text, "");
-
- while (<STDIN>) {
- chop; # Drop the newline
- push(@text, $_);
- }
-
- &mail_notification(@text);
-
- exit 0;
-}
-
-# Iterate over the body of the message collecting information.
-#
-while (<STDIN>) {
- chop; # Drop the newline
-
- if (/^In directory/) {
- if ($show_wd) { # useless in client/server mode
- push(@log_lines, $_);
- push(@log_lines, "");
- }
- next;
- }
-
- if (/^Modified Files/) { $state = $STATE_CHANGED; next; }
- if (/^Added Files/) { $state = $STATE_ADDED; next; }
- if (/^Removed Files/) { $state = $STATE_REMOVED; next; }
- if (/^Log Message/) { $state = $STATE_LOG; next; }
-
- s/^[ \t\n]+//; # delete leading whitespace
- s/[ \t\n]+$//; # delete trailing whitespace
-
- if ($state == $STATE_CHANGED) { push(@changed_files, split); }
- if ($state == $STATE_ADDED) { push(@added_files, split); }
- if ($state == $STATE_REMOVED) { push(@removed_files, split); }
- if ($state == $STATE_LOG) {
- if( /^See[ ]ChangeLog:[ ](.*)/ ) {
- $changelog = $1;
- $okay = false;
- open(RCS, "-|") || exec 'cvs', '-Qn', 'update', '-p', 'ChangeLog';
- while (<RCS>) {
- if( /^$changelog .*/ ) {
- $okay = true;
- push(@log_lines, $_);
- }
- elsif( $okay ) {
- last if( /^[A-Z]+.*/ );
- push(@log_lines, $_);
- }
- }
- while (<RCS>) { ; }
- close(RCS);
- }
- else {
- push(@log_lines, $_);
- }
- }
-}
-
-# Strip leading and trailing blank lines from the log message. Also
-# compress multiple blank lines in the body of the message down to a
-# single blank line.
-#
-while ($#log_lines > -1) {
- last if ($log_lines[0] ne "");
- shift(@log_lines);
-}
-while ($#log_lines > -1) {
- last if ($log_lines[$#log_lines] ne "");
- pop(@log_lines);
-}
-for ($i = $#log_lines; $i > 0; $i--) {
- if (($log_lines[$i - 1] eq "") && ($log_lines[$i] eq "")) {
- splice(@log_lines, $i, 1);
- }
-}
-
-if ($debug) {
- print STDERR "Searching for log file index...";
-}
-# Find an index to a log file that matches this log message
-#
-for ($i = 0; ; $i++) {
- local(@text);
-
- last if (! -e "$LOG_FILE.$i.$id"); # the next available one
- @text = &read_logfile("$LOG_FILE.$i.$id", "");
- last if ($#text == -1); # nothing in this file, use it
- last if (join(" ", @log_lines) eq join(" ", @text)); # it's the same log message as another
-}
-if ($debug) {
- print STDERR " found log file at $i.$id, now writing tmp files.\n";
-}
-
-# Spit out the information gathered in this pass.
-#
-&append_names_to_file("$CHANGED_FILE.$i.$id", $dir, @changed_files);
-&append_names_to_file("$ADDED_FILE.$i.$id", $dir, @added_files);
-&append_names_to_file("$REMOVED_FILE.$i.$id", $dir, @removed_files);
-&write_logfile("$LOG_FILE.$i.$id", @log_lines);
-
-# Check whether this is the last directory. If not, quit.
-#
-if ($debug) {
- print STDERR "Checking current dir against last dir.\n";
-}
-$_ = &read_line("$LAST_FILE.$id");
-
-if ($_ ne $cvsroot . "/" . $files[0]) {
- if ($debug) {
- print STDERR sprintf("Current directory %s is not last directory %s.\n", $cvsroot . "/" .$files[0], $_);
- }
- exit 0;
-}
-if ($debug) {
- print STDERR sprintf("Current directory %s is last directory %s -- all commits done.\n", $files[0], $_);
-}
-
-#
-# End Of Commits!
-#
-
-# This is it. The commits are all finished. Lump everything together
-# into a single message, fire a copy off to the mailing list, and drop
-# it on the end of the Changes file.
-#
-
-#
-# Produce the final compilation of the log messages
-#
-@text = ();
-@status_txt = ();
-push(@text, &build_header());
-push(@text, "");
-
-for ($i = 0; ; $i++) {
- last if (! -e "$LOG_FILE.$i.$id"); # we're done them all!
- @lines = &read_logfile("$CHANGED_FILE.$i.$id", "");
- if ($#lines >= 0) {
- push(@text, "Modified files:");
- push(@text, &format_lists(@lines));
- }
- @lines = &read_logfile("$ADDED_FILE.$i.$id", "");
- if ($#lines >= 0) {
- push(@text, "Added files:");
- push(@text, &format_lists(@lines));
- }
- @lines = &read_logfile("$REMOVED_FILE.$i.$id", "");
- if ($#lines >= 0) {
- push(@text, "Removed files:");
- push(@text, &format_lists(@lines));
- }
- if ($#text >= 0) {
- push(@text, "");
- }
- @lines = &read_logfile("$LOG_FILE.$i.$id", "\t");
- if ($#lines >= 0) {
- push(@text, "Log message:");
- push(@text, @lines);
- push(@text, "");
- }
- if ($do_status) {
- local(@changed_files);
-
- @changed_files = ();
- push(@changed_files, &read_logfile("$CHANGED_FILE.$i.$id", ""));
- push(@changed_files, &read_logfile("$ADDED_FILE.$i.$id", ""));
- push(@changed_files, &read_logfile("$REMOVED_FILE.$i.$id", ""));
-
- if ($debug) {
- print STDERR "main: pre-sort changed_files = ", join(":", @changed_files), ".\n";
- }
- sort(@changed_files);
- if ($debug) {
- print STDERR "main: post-sort changed_files = ", join(":", @changed_files), ".\n";
- }
-
- foreach $dofile (@changed_files) {
- if ($dofile =~ /\/$/) {
- next; # ignore the silly "dir" entries
- }
- if ($debug) {
- print STDERR "main(): doing 'cvs -nQq status -v $dofile'\n";
- }
- open(STATUS, "-|") || exec 'cvs', '-nQq', 'status', '-v', $dofile;
- while (<STATUS>) {
- chop;
- push(@status_txt, $_);
- }
- }
- }
-}
-
-# Write to the commitlog file
-#
-if ($commitlog) {
- &write_commitlog($commitlog, @text);
-}
-
-if ($#status_txt >= 0) {
- push(@text, @status_txt);
-}
-
-# Mailout the notification.
-#
-&mail_notification(@text);
-
-# cleanup
-#
-if (! $debug) {
- &cleanup_tmpfiles();
-}
-
-exit 0;
diff --git a/scripts/mail-to-translators b/scripts/mail-to-translators
deleted file mode 100755
index 10210a73f..000000000
--- a/scripts/mail-to-translators
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-# mail a compressed version of the current translation to the Last-Translator
-#
-
-# remove the colon to armor this script.
-SENDMAIL=": /usr/sbin/sendmail"
-
-for file in *.po; do
- addr=$(awk '/Last-Translator:/ { printf "%s", $0; exit 0}' $file | sed 's/.*\(<.*>\).*/\1/')
- ll=$(basename $file .po)
-
- if ! msgfmt -vc $file 2>&1| egrep -q 'fuzzy|untranslated|error'; then
- echo "$file: okay" >&2
- continue;
- fi
-
- if ! echo "$addr" | grep -q @ ; then
- echo "$file: no translator known" >&2
- continue;
- fi
-
- echo "$file: sending to $addr"
- ( cat <<EOF
-From: translations@gnupg.org
-To: $addr
-Subject: GnuPG translation ($ll)
-Mime-Version: 1.0
-Content-Type: multipart/mixed; boundary="=-=-="
-
---=-=-=
-
-Hi!
-
-Please find attached the latest version of the PO file for your GnuPG
-translation ($file). I would appreciate if you can fix any remaining
-fuzzy or untranslated entries. If you need access to the code
-please use http://cvs.gnupg.org or get the latest snapshot at
-ftp://ftp.gnupg.org/gcrypt/alpha/gnupg/gnupg-1.1.92.tar.gz
-
-IMHO it is important to have a basic understanding of GnuPG's
-functionality to do a correct translation. A false translation might
-need to security problems. This is the reason why I prefer to contact
-you directly and not to work only with the TP Robot.
-
-Output of msgfmt is:
-$(msgfmt --check --statistics $file 2>&1 | head)
-
-If you are not able to continue the translation work, I suggest to
-pass this message on to another translator and drop me a short note.
-
-Thanks,
-
- Werner
-
-
---=-=-=
-Content-Type: application/octet-stream
-Content-Disposition: attachment; filename=gnupg-${file}.gz
-Content-Transfer-Encoding: base64
-
-EOF
-
-gzip <$file | mimencode
-
-echo ""
-echo "--=-=-=--"
-echo ""
- ) | $SENDMAIL -oi "$addr"
-
-done
diff --git a/scripts/mk-gpg-texi b/scripts/mk-gpg-texi
deleted file mode 100755
index 45a811742..000000000
--- a/scripts/mk-gpg-texi
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-# Helper to create the texinfo versions from gpg.sgml
-#
-# Copyright (C) 2002 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-set -e
-
-for file in gpg gpgv; do
- sgml2xml -x lower ${file}.sgml >${file}.xml
- docbook2texi ${file}.xml | sed 's,--,---,' | (
- case "$file" in
- *gpgv)
- sed '/@setfilename/a \
-@dircategory GnuPG\
-@direntry\
-* gpgv: (gpgv). GnuPG signature verification tool.\
-@end direntry
-'
- ;;
-
- gpg)
- sed '/@setfilename/a \
-@dircategory GnuPG\
-@direntry\
-* gpg: (gpg). GnuPG encryption and signing tool.\
-@end direntry
-'
- ;;
-
- *)
- cat
- ;;
- esac
- ) >${file}.texi
-done
-
-
-
diff --git a/scripts/mk-w32-dist b/scripts/mk-w32-dist
deleted file mode 100755
index 378278a99..000000000
--- a/scripts/mk-w32-dist
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
-set -e
-
-cd dist-w32
-
-bindir=..
-
-if [ -f ../README ]; then
- srcdir=..
-elif [ -f ../../README ]; then
- srcdir=../..
- bindir=..
-elif [ -f ../../gnupg-stable/README ]; then
- srcdir=../../gnupg-stable
-elif [ -f ../../../gnupg-stable/README ]; then
- srcdir=../../../gnupg-stable
-else
- echo "cannot figure out the source dir" >&2
- exit 1
-fi
-
-version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.]*\)\"/\1/p' $bindir/config.h)
-echo "building version $version"
-
-rm * || true
-
-cp ${bindir}/g10/gpg.exe gpg.exe
-mingw32 strip gpg.exe
-cp ${bindir}/g10/gpgv.exe gpgv.exe
-mingw32 strip gpgv.exe
-cp ${bindir}/tools/gpgsplit.exe gpgsplit.exe
-mingw32 strip gpgsplit.exe
-
-for i in FAQ; do
- cp ${bindir}/doc/$i .
- todos $i
-done
-man -Tlatin1 -l ${srcdir}/doc/gpg.1 | sed `printf "s/\b.//g"` >gpg.man
-todos gpg.man
-man -Tlatin1 -l ${srcdir}/doc/gpgv.1 | sed `printf "s/\b.//g"` >gpgv.man
-todos gpgv.man
-man -Tlatin1 -l ${srcdir}/doc/gnupg.7 | sed `printf "s/\b.//g"` >gnupg.man
-todos gnupg.man
-for i in README COPYING; do
- cp ${srcdir}/$i .
- todos $i
-done
-for i in README.W32 gnupg-w32.reg; do
- cp ${srcdir}/doc/$i .
- todos $i
-done
-
-
-for i in ${srcdir}/po/*.po; do
- lang=$(basename $i .po)
- fromset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $i`
- case $lang in
- cs|pl) toset="CP1250" ;;
- tr) toset="CP1254" ;; # DOS: CP857
- el) toset="CP1253" ;; # same as latin-7?
- el|eo|et|ja) toset="" ;;
- *) toset="CP850" ;;
- esac
- if [ -n "$toset" ]; then
- echo "$lang: converting from $fromset to $toset" >&2
- iconv --silent --from-code=$fromset --to-code=$toset < $i | \
- sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=$toset/" | \
- msgfmt --output-file=$lang.mo -
- else
- echo "$lang: keeping $fromset" >&2
- msgfmt --output-file=$lang.mo $i
- fi
-done
-zip -9 "gnupg-w32cli-${version}.zip" *
-
-
-
-
diff --git a/scripts/mkdiff b/scripts/mkdiff
deleted file mode 100755
index f17979383..000000000
--- a/scripts/mkdiff
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-# Please note that this script is now maintained outside of GNUPG.
-# To get the most up to date version use
-# cvs -d :pserver:anoncvs@cvs.gnupg.org:/cvs/wk checkout misc-scripts/mkdiff
-
-if [ $# != 1 ] ; then
- echo "usage: mkdiff package-name" >&2
- exit 1
-fi
-
-pack="$1"
-
-set -e
-
-curr_ver=$(ls $pack-*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\
- | sort -r -t '.' -n +0 -1 +1 -2 +2 | head -1 )
-if [ ! -f $pack-$curr_ver.tar.gz ]; then
- echo "mkdiff: no current version of package $pack found" >&2
- exit 1
-fi
-prev_ver=$(ls $pack-*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\
- | sort -r -t '.' -n +0 -1 +1 -2 +2 | head -2 | tail -1 )
-if [ "$prev_ver" = "$curr_ver" ]; then
- echo "mkdiff: no previous version of package $pack found" >&2
- exit 1
-fi
-
-echo "Current is: $pack-$curr_ver"
-echo "Previous is: $pack-$prev_ver"
-
-
-echo "Removing old directories"
-[ -d "$pack-$curr_ver" ] && rm -rf "$pack-$curr_ver"
-[ -d "$pack-$prev_ver" ] && rm -rf "$pack-$prev_ver"
-
-echo "Unpacking previous and current tar"
-tar xzf "$pack-$curr_ver.tar.gz"
-rm -f $pack-${curr_ver}/po/*.gmo
-tar xzf "$pack-$prev_ver.tar.gz"
-rm -f $pack-${prev_ver}/po/*.gmo
-
-
-echo "Diffing"
-tmp_name="$pack-$prev_ver-$curr_ver.diff.tmp"
-diff_name="$pack-$prev_ver-$curr_ver.diff"
-
-diff -urN "$pack-$prev_ver/" "$pack-$curr_ver/" > $tmp_name || true
-
-echo "Making patch file"
-
-cat <<EOF > $diff_name
-
-This is a patch file to create version $curr_ver from $prev_ver.
-
-Please check the signature of this patch file:
-
- zcat somepath/$pack-$prev_ver-$curr_ver.diff.gz | gpg --verify
-
-Change to directory $pack-$prev_ver (or however you renamed it)
-and give this command:
-
- zcat somepath/$pack-$prev_ver-$curr_ver.diff.gz | patch -p1
-
-It is a good idea to rename your current directory to $pack-$curr_ver now.
-
-
-
-Prereq: $prev_ver
-
-EOF
-
-sed -ne '/^diff.*VERSION/,/^+[0-9][0-9]*/ p' $tmp_name >> $diff_name
-echo >> $diff_name
-sed -e '/^diff.*VERSION/,/^+[0-9][0-9]*/ d' $tmp_name >> $diff_name
-
-rm $tmp_name
-
-echo "Signing and compressing patch file"
-gpg --clearsign --not-dash-escaped -u 57548DCD \
- < $diff_name | gzip --best > $diff_name.gz
-rm $diff_name
-
-echo "Checking patch file"
-cd $pack-$prev_ver
-zcat ../$diff_name.gz | patch -s -p1
-rm $(find . -name "*.orig") 2>/dev/null || true
-cd ..
-
-if ! diff -urN "$pack-$prev_ver/" "$pack-$curr_ver/" >/dev/null ; then
- echo "compare failed"
- exit 1
-fi
-
-if ! zcat $diff_name.gz | gpg --batch --verify ; then
- exit 1
-fi
-
-
-echo "cleaning up"
-
-rm -rf "$pack-$curr_ver"
-rm -rf "$pack-$prev_ver"
-
-echo "Patch file $diff_name.gz is good."
-
diff --git a/scripts/mkinstalldirs b/scripts/mkinstalldirs
deleted file mode 100755
index 994d71ce7..000000000
--- a/scripts/mkinstalldirs
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-# $Id$
-
-errstatus=0
-dirmode=""
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case "${1}" in
- -h | --help | --h* ) # -h for help
- echo "${usage}" 1>&2; exit 0 ;;
- -m ) # -m PERM arg
- shift
- test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
- dirmode="${1}"
- shift ;;
- -- ) shift; break ;; # stop option processing
- -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option
- * ) break ;; # first non-opt arg
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
-0) exit 0 ;;
-esac
-
-case $dirmode in
-'')
- if mkdir -p -- . 2>/dev/null; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- fi ;;
-*)
- if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- fi ;;
-esac
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
-
- lasterr=""
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 3
-# End:
-# mkinstalldirs ends here
diff --git a/scripts/mksnapshot b/scripts/mksnapshot
deleted file mode 100755
index cca19d98d..000000000
--- a/scripts/mksnapshot
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-# Make a snapshot of the CVS head revision
-
-exec >>/home/koch/mksnapshot.log 2>&1
-
-echo "Started at `date`."
-set -e
-
-ftp_dir=$1
-
-cd $HOME/pub
-PATH="$HOME/bin:$PATH"
-
-fix_version () {
- version=$(cat $1/VERSION)
- echo "$version-snap$(date +%Y-%m-%d)" >$1/VERSION
- cat <<EOF >$1/SNAPSHOT
- WARNING!
-
-This is a snapshot of the current CVS head branch!
-
-It may not compile or not work. Please don't report
-bugs about this snapshot release it is just for your
-convenience and to reduce the load of out CVS server.
-
-Thanks,
-
- Werner
-EOF
-}
-
-build_dist () {
- set +e
- nice scripts/autogen.sh && nice ./configure && nice make dist
- if ! awk '
-/^diff gnupg-snapshot\/VERSION/ { getline; getline; getline; getline; next }
-/^Common subdirectories:/ { next }
-/~$/ { next }
-{ exit 1 }
-' ; then
- # Okay, we have some changes and it is not only the version number
- rm $ftp_dir/gnupg-*snap*-*-*.tar.gz
- mv gnupg-*.tar.gz $ftp_dir/
- fi
- make distclean
- set -e
-}
-
-
-
-do_export () {
- pgm=$1
- mod=$2
-
- rm -rf $pgm.new || true
- rm -rf $pgm.old || true
- cvs -Q export -r HEAD -d $pgm.new $mod
- fix_version $pgm.new
- if [ -n "$ftp_dir" ]; then
- here=$(pwd)
- cd $pgm.new
- build_dist
- cd $here
- fi
- [ -d $pgm ] && mv $pgm $pgm.old
- if ! mv $pgm.new $pgm ; then
- echo "rename failed - restoring" >&2
- mv $pgm.old $pgm
- exit 1
- fi
- rm -rf $pgm.old || true
-}
-
-
-do_export gnupg-snapshot gnupg
-
-echo "Ended at `date`."
-exit 0
-
diff --git a/scripts/mkwebpage b/scripts/mkwebpage
deleted file mode 100755
index b39feb176..000000000
--- a/scripts/mkwebpage
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-# Make a snapshot of the CVS head revision for the gnupg webpages
-
-
-set -e
-
-cd $HOME/pub
-
-extract_date () {
- # This strange construct is to speed up things. Grouping a "s" and a "q"
- # does not work. Anyway we should use awk instead.
- # Have to quote the I from $Id so that CVS does not expand it
- sed '/^.*\$[I]d:.*\$.*$/q' $1 |
- sed -n 's!^.*\$[I]d: [^ ]\+ [^ ]\+ \([0-9]*\)/\([0-9]*\)/\([0-9]*\) [^ ]\+ \([^ ]\+\).*$!\1-\2-\3 \4!p'
-}
-
-# We have to edit most files
-sed_it () {
- src=$1
- dst=$2
-
- for srcdir in `find $src -type d -print` ; do
- dstdir=`echo "$srcdir" | sed "s/^$src/$dst/g"`
- mkdir $dstdir || true
- for sf in `find $srcdir -type f -maxdepth 1 -print`; do
- updated=`extract_date $sf`
- df="$dstdir/`basename $sf`"
- case "$df" in
- *.html)
- sed "/@FOOTER@/ {
- r $src/footer.html.inc
- d
- }
- /^<body>$/ {
- r $src/body-tag.html.inc
- d
- }
- /@UPDATED@/c\\
-Updated: $updated \\
-<hr>
- /@INSERT_BUGLIST_HERE@/ {
- r $src/BUGS
- d
- }
- /@HOSTEDBY@/ {
- r $src/hostedby.html.inc
- d
- }
- " $sf > $df
- ;;
- *.html.inc | *~ | *.tmp | */BUGS )
- :
- ;;
- *)
- cat $sf > $df
- ;;
- esac
- done
- done
-}
-
-
-do_export () {
- pgm=$1
- mod=$2
-
- rm -rf $pgm.tmp 2>/dev/null || true
- rm -rf $pgm.new || true
- rm -rf $pgm.old || true
- cvs -Q export -r HEAD -d $pgm.tmp $mod
- cat <<EOF >$pgm.tmp/NEWS
-[ This is a snapshot of the NEWS file from the CVS head revision.
- You will find the NEWS for the latest revision below the line
- "Noteworthy changes in version 0.x.y".
- (wk $(date +%Y-%m-%d)) ]
-
-
-EOF
- cvs -Q checkout -p gnupg/NEWS >>$pgm.tmp/NEWS
- cvs -Q checkout -p gnupg/BUGS | sed '1,/^~~~~~~~~~~~/ d' > $pgm.tmp/BUGS
- echo "(List generated from CVS: " $(date +%Y-%m-%d) ")" >> $pgm.tmp/BUGS
- sed_it $pgm.tmp $pgm.new
- rm -rf $pgm.tmp || true
- ln -sf gnupg.html $pgm.new/index.html
-
- rm -rf $pgm.old || true
- [ -d $pgm ] && mv $pgm $pgm.old
- if ! mv $pgm.new $pgm ; then
- echo "rename failed - restoring" >&2
- mv $pgm.old $pgm
- exit 1
- fi
- rm -rf $pgm.old || true
-}
-
-
-do_export gnupg-www gnupg-www
-
-#cd gnupg-www
-#tar czf /home/ftp/pub/gcrypt/.old/webpages.tmp *
-#mv /home/ftp/pub/gcrypt/old/webpages.tmp /home/ftp/pub/gcrypt/old/webpages.tar.gz
-
-
-exit 0
-
diff --git a/sm/ChangeLog b/sm/ChangeLog
deleted file mode 100644
index 8e11e0ddf..000000000
--- a/sm/ChangeLog
+++ /dev/null
@@ -1,741 +0,0 @@
-2002-09-19 Werner Koch <wk@gnupg.org>
-
- * certcheck.c (gpgsm_check_cert_sig): Add cert hash debugging.
-
- * certchain.c (find_up): Print info when the cert was not found
- by the autorithyKeyIdentifier.
-
-2002-09-03 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): Disable the internal libgcrypt locking.
-
-2002-08-21 Werner Koch <wk@gnupg.org>
-
- * import.c (print_imported_summary): Cleaned up. Print new
- not_imported value.
- (check_and_store): Update non_imported counter.
- (print_import_problem): New.
- (check_and_store): Print error status message.
- * server.c (get_status_string): Added STATUS_IMPORT_PROBLEM.
-
-2002-08-20 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): Use the log file only in server mode.
-
- * import.c (print_imported_summary): New.
- (check_and_store): Update the counters, take new argument.
- (import_one): Factored out core of gpgsm_import.
- (gpgsm_import): Print counters.
- (gpgsm_import_files): New.
- * gpgsm.c (main): Use the new function for import.
-
-2002-08-19 Werner Koch <wk@gnupg.org>
-
- * decrypt.c (gpgsm_decrypt): Return a better error status token.
- * verify.c (gpgsm_verify): Don't error on messages with no signing
- time or no message digest. This is only the case for messages
- without any signed attributes.
-
-2002-08-16 Werner Koch <wk@gnupg.org>
-
- * certpath.c: Renamed to ..
- * certchain.c: this. Renamed all all other usages of "path" in the
- context of certificates to "chain".
-
- * call-agent.c (learn_cb): Special treatment when the issuer
- certificate is missing.
-
-2002-08-10 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (INCLUDES): Add definition for localedir.
-
- * keylist.c (list_cert_colon): Print the short fingerprint in the
- key ID field.
- * fingerprint.c (gpgsm_get_short_fingerprint): New.
- * verify.c (gpgsm_verify): Print more verbose info for a good
- signature.
-
-2002-08-09 Werner Koch <wk@gnupg.org>
-
- * decrypt.c (prepare_decryption): Hack to detected already
- unpkcsedone keys.
-
- * gpgsm.c (emergency_cleanup): New.
- (main): Initialize the signal handler.
-
- * sign.c (gpgsm_sign): Reset the hash context for subsequent
- signers and release it at the end.
-
-2002-08-05 Werner Koch <wk@gnupg.org>
-
- * server.c (cmd_signer): New command "SIGNER"
- (register_commands): Register it.
- (cmd_sign): Pass the signer list to gpgsm_sign.
- * certlist.c (gpgsm_add_to_certlist): Add SECRET argument, check
- for secret key if set and changed all callers.
- * sign.c (gpgsm_sign): New argument SIGNERLIST and implemt
- multiple signers.
- * gpgsm.c (main): Support more than one -u.
-
- * server.c (cmd_recipient): Return reason code 1 for No_Public_Key
- which is actually what gets returned from add_to_certlist.
-
-2002-07-26 Werner Koch <wk@gnupg.org>
-
- * certcheck.c (gpgsm_check_cert_sig): Implement proper cleanup.
- (gpgsm_check_cms_signature): Ditto.
-
-2002-07-22 Werner Koch <wk@gnupg.org>
-
- * keydb.c (keydb_add_resource): Register a lock file.
- (lock_all, unlock_all): Implemented.
-
- * delete.c: New.
- * gpgsm.c: Made --delete-key work.
- * server.c (cmd_delkeys): New.
- (register_commands): New command DELKEYS.
-
- * decrypt.c (gpgsm_decrypt): Print a convenience note when RC2 is
- used and a STATUS_ERROR with the algorithm oid.
-
-2002-07-03 Werner Koch <wk@gnupg.org>
-
- * server.c (gpgsm_status2): Insert a blank between all optional
- arguments when using assuan.
- * server.c (cmd_recipient): No more need for extra blank in constants.
- * import.c (print_imported_status): Ditto.
- * gpgsm.c (main): Ditto.
-
-2002-07-02 Werner Koch <wk@gnupg.org>
-
- * verify.c (gpgsm_verify): Extend the STATUS_BADSIG line with
- the fingerprint.
-
- * certpath.c (check_cert_policy): Don't use log_error to print a
- warning.
-
- * keydb.c (keydb_store_cert): Add optional ar EXISTED and changed
- all callers.
- * call-agent.c (learn_cb): Print info message only for real imports.
-
- * import.c (gpgsm_import): Moved duplicated code to ...
- (check_and_store): new function. Added magic to import the entire
- chain. Print status only for real imports and moved printing code
- to ..
- (print_imported_status): New.
-
- * call-dirmngr.c (gpgsm_dirmngr_isvalid): print status of dirmngr
- call in very verbose mode.
-
- * gpgsm.c (main): Use the same error codes for STATUS_INV_RECP as
- with the server mode.
-
-2002-06-29 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c: New option --auto-issuer-key-retrieve.
- * certpath.c (find_up): Try to retrieve an issuer key from an
- external source and from the ephemeral key DB.
- (find_up_store_certs_cb): New.
-
- * keydb.c (keydb_set_ephemeral): Does now return the old
- state. Call the backend only when required.
-
- * call-dirmngr.c (start_dirmngr): Use GNUPG_DEFAULT_DIRMNGR.
- (lookup_status_cb): Issue status only when CTRL is not NULL.
- (gpgsm_dirmngr_lookup): Document that CTRL is optional.
-
- * call-agent.c (start_agent): Use GNUPG_DEFAULT_AGENT.
-
-2002-06-28 Werner Koch <wk@gnupg.org>
-
- * server.c (cmd_recipient): Add more reason codes.
-
-2002-06-27 Werner Koch <wk@gnupg.org>
-
- * certpath.c (gpgsm_basic_cert_check): Use
- --debug-no-path-validation to also bypass this basic check.
-
- * gpgsm.c (main): Use GNUPG_DEFAULT_HOMEDIR constant.
-
- * call-agent.c (start_agent): Create and pass the list of FD to
- keep in the child to assuan.
- * call-dirmngr.c (start_dirmngr): Ditto.
-
-2002-06-26 Werner Koch <wk@gnupg.org>
-
- * import.c (gpgsm_import): Print an STATUS_IMPORTED.
-
- * gpgsm.c: --debug-no-path-validation does not take an argument.
-
-2002-06-25 Werner Koch <wk@gnupg.org>
-
- * certdump.c (print_dn_part): Always print a leading slash,
- removed NEED_DELIM arg and changed caller.
-
- * export.c (gpgsm_export): Print LFs to FP and not stdout.
- (print_short_info): Ditto. Make use of gpgsm_print_name.
-
- * server.c (cmd_export): Use output-fd instead of data lines; this
- was actually the specified way.
-
-2002-06-24 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c: Removed duped help entry for --list-keys.
-
- * gpgsm.c, gpgsm.h: New option --debug-no-path-validation.
-
- * certpath.c (gpgsm_validate_path): Use it here instead of the
- debug flag hack.
-
- * certpath.c (check_cert_policy): Return No_Policy_Match if the
- policy file could not be opened.
-
-2002-06-20 Werner Koch <wk@gnupg.org>
-
- * certlist.c (gpgsm_add_to_certlist): Fixed locating of a
- certificate with the required key usage.
-
- * gpgsm.c (main): Fixed a segv when using --outfile without an
- argument.
-
- * keylist.c (print_capabilities): Also check for non-repudiation
- and data encipherment.
- * certlist.c (cert_usage_p): Test for signing and encryption was
- swapped. Add a case for certification usage, handle
- non-repudiation and data encipherment.
- (gpgsm_cert_use_cert_p): New.
- (gpgsm_add_to_certlist): Added a CTRL argument and changed all
- callers to pass it.
- * certpath.c (gpgsm_validate_path): Use it here to print a status
- message. Added a CTRL argument and changed all callers to pass it.
- * decrypt.c (gpgsm_decrypt): Print a status message for wrong key
- usage.
- * verify.c (gpgsm_verify): Ditto.
- * keydb.c (classify_user_id): Allow a colon delimited fingerprint.
-
-2002-06-19 Werner Koch <wk@gnupg.org>
-
- * call-agent.c (learn_cb): Use log_info instead of log_error on
- successful import.
-
- * keydb.c (keydb_set_ephemeral): New.
- (keydb_store_cert): New are ephemeral, changed all callers.
- * keylist.c (list_external_cb): Store cert as ephemeral.
- * export.c (gpgsm_export): Kludge to export epehmeral certificates.
-
- * gpgsm.c (main): New command --list-external-keys.
-
-2002-06-17 Werner Koch <wk@gnupg.org>
-
- * certreqgen.c (read_parameters): Improved error handling.
- (gpgsm_genkey): Print error message.
-
-2002-06-13 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): New option --log-file.
-
-2002-06-12 Werner Koch <wk@gnupg.org>
-
- * call-dirmngr.c (lookup_status_cb): New.
- (gpgsm_dirmngr_lookup): Use the status CB. Add new arg CTRL and
- changed caller to pass it.
-
- * gpgsm.c (open_fwrite): New.
- (main): Allow --output for --verify.
-
- * sign.c (hash_and_copy_data): New.
- (gpgsm_sign): Implemented normal (non-detached) signatures.
- * gpgsm.c (main): Ditto.
-
- * certpath.c (gpgsm_validate_path): Special error handling for
- no policy match.
-
-2002-06-10 Werner Koch <wk@gnupg.org>
-
- * server.c (get_status_string): Add STATUS_ERROR.
-
- * certpath.c (gpgsm_validate_path): Tweaked the error checking to
- return error codes in a more sensitive way.
- * verify.c (gpgsm_verify): Send status TRUST_NEVER also for a bad
- CA certificate and when the certificate has been revoked. Issue
- TRUST_FULLY even when the cert has expired. Append an error token
- to these status lines. Issue the new generic error status when a
- cert was not found and when leaving the function.
-
-2002-06-04 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): New command --list-sigs
- * keylist.c (list_cert_std): New. Use it whenever colon mode is
- not used.
- (list_cert_chain): New.
-
-2002-05-31 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): Don't print the "go ahead" message for an
- invalid command.
-
-2002-05-23 Werner Koch <wk@gnupg.org>
-
- * import.c (gpgsm_import): Add error messages.
-
-2002-05-21 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_internal_keys): Renamed from gpgsm_list_keys.
- (list_external_keys): New.
- (gpgsm_list_keys): Dispatcher for above.
- * call-dirmngr.c (lookup_cb,pattern_from_strlist)
- (gpgsm_dirmngr_lookup): New.
- * server.c (option_handler): Handle new option --list-mode.
- (do_listkeys): Handle options and actually use the mode argument.
- (get_status_string): New code TRUNCATED.
-
- * import.c (gpgsm_import): Try to identify the type of input and
- handle certs-only messages.
-
-2002-05-14 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c: New option --faked-system-time
- * sign.c (gpgsm_sign): And use it here.
- * certpath.c (gpgsm_validate_path): Ditto.
-
-2002-05-03 Werner Koch <wk@gnupg.org>
-
- * certpath.c (gpgsm_validate_path): Added EXPTIME arg and changed
- all callers.
- * verify.c (gpgsm_verify): Tweaked usage of log_debug and
- log_error. Return EXPSIG status and add expiretime to VALIDSIG.
-
-2002-04-26 Werner Koch <wk@gnupg.org>
-
- * gpgsm.h (DBG_AGENT,DBG_AGENT_VALUE): Replaced by DBG_ASSUAN_*.
- Changed all users.
-
- * call-agent.c (start_agent): Be more silent without -v.
- * call-dirmngr.c (start_dirmngr): Ditto.
-
-2002-04-25 Werner Koch <wk@gnupg.org>
-
- * call-agent.c (start_agent): Make copies of old locales and check
- for setlocale.
-
-2002-04-25 Marcus Brinkmann <marcus@g10code.de>
-
- * call-agent.c (start_agent): Fix error handling logic so the
- locale is always correctly reset.
-
-2002-04-25 Marcus Brinkmann <marcus@g10code.de>
-
- * server.c (option_handler): Accept display, ttyname, ttytype,
- lc_ctype and lc_messages options.
- * gpgsm.c (main): Allocate memory for these options.
- * gpgsm.h (struct opt): Make corresponding members non-const.
-
-2002-04-24 Marcus Brinkmann <marcus@g10code.de>
-
- * gpgsm.h (struct opt): New members display, ttyname, ttytype,
- lc_ctype, lc_messages.
- * gpgsm.c (enum cmd_and_opt_values): New members oDisplay,
- oTTYname, oTTYtype, oLCctype, oLCmessages.
- (opts): New entries for these options.
- (main): Handle these new options.
- * call-agent.c (start_agent): Set the various display and tty
- parameter after resetting.
-
-2002-04-18 Werner Koch <wk@gnupg.org>
-
- * certreqgen.c (gpgsm_genkey): Write status output on success.
-
-2002-04-15 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): Check ksba version.
-
- * certpath.c (find_up): New to use the authorithKeyIdentifier.
- Use it in all other functions to locate the signing cert..
-
-2002-04-11 Werner Koch <wk@gnupg.org>
-
- * certlist.c (cert_usable_p): New.
- (gpgsm_cert_use_sign_p,gpgsm_cert_use_encrypt_p): New.
- (gpgsm_cert_use_verify_p,gpgsm_cert_use_decrypt_p): New.
- (gpgsm_add_to_certlist): Check the key usage.
- * sign.c (gpgsm_sign): Ditto.
- * verify.c (gpgsm_verify): Print a message wehn an unsuitable
- certificate was used.
- * decrypt.c (gpgsm_decrypt): Ditto
- * keylist.c (print_capabilities): Determine values from the cert.
-
-2002-03-28 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_cert_colon): Fixed listing of crt record; the
- issuer is not at the right place. Print a chainingID.
- * certpath.c (gpgsm_walk_cert_chain): Be a bit more silent on
- common errors.
-
-2002-03-21 Werner Koch <wk@gnupg.org>
-
- * export.c: New.
- * gpgsm.c: Add command --export.
- * server.c (cmd_export): New.
-
-2002-03-13 Werner Koch <wk@gnupg.org>
-
- * decrypt.c (gpgsm_decrypt): Allow multiple recipients.
-
-2002-03-12 Werner Koch <wk@gnupg.org>
-
- * certpath.c (check_cert_policy): Print the policy list.
-
- * verify.c (gpgsm_verify): Detect certs-only message.
-
-2002-03-11 Werner Koch <wk@gnupg.org>
-
- * import.c (gpgsm_import): Print a notice about imported certificates
- when in verbose mode.
-
- * gpgsm.c (main): Print INV_RECP status.
- * server.c (cmd_recipient): Ditto.
-
- * server.c (gpgsm_status2): New. Allows for a list of strings.
- (gpgsm_status): Divert to gpgsm_status2.
-
- * encrypt.c (gpgsm_encrypt): Don't use a default key when no
- recipients are given. Print a NO_RECP status.
-
-2002-03-06 Werner Koch <wk@gnupg.org>
-
- * server.c (cmd_listkeys, cmd_listsecretkeys): Divert to
- (do_listkeys): new. Add pattern parsing.
-
- * keylist.c (gpgsm_list_keys): Handle selection pattern.
-
- * gpgsm.c: New command --learn-card
- * call-agent.c (learn_cb,gpgsm_agent_learn): New.
-
- * gpgsm.c (main): Print error messages for non-implemented commands.
-
- * base64.c (base64_reader_cb): Use case insensitive compare of the
- Content-Type string to detect plain base-64.
-
-2002-03-05 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c, gpgsm.h: Add local_user.
- * sign.c (gpgsm_get_default_cert): New.
- (get_default_signer): Use the new function if local_user is not
- set otherwise used that value.
- * encrypt.c (get_default_recipient): Removed.
- (gpgsm_encrypt): Use gpgsm_get_default_cert.
-
- * verify.c (gpgsm_verify): Better error text for a bad signature
- found by comparing the hashs.
-
-2002-02-27 Werner Koch <wk@gnupg.org>
-
- * call-dirmngr.c, call-agent.c: Add 2 more arguments to all uses
- of assuan_transact.
-
-2002-02-25 Werner Koch <wk@gnupg.org>
-
- * server.c (option_handler): Allow to use -2 for "send all certs
- except the root cert".
- * sign.c (add_certificate_list): Implement it here.
- * certpath.c (gpgsm_is_root_cert): New.
-
-2002-02-19 Werner Koch <wk@gnupg.org>
-
- * certpath.c (check_cert_policy): New.
- (gpgsm_validate_path): And call it from here.
- * gpgsm.c (main): New options --policy-file,
- --disable-policy-checks and --enable-policy-checks.
- * gpgsm.h (opt): Added policy_file, no_policy_checks.
-
-2002-02-18 Werner Koch <wk@gnupg.org>
-
- * certpath.c (gpgsm_validate_path): Ask the agent to add the
- certificate into the trusted list.
- * call-agent.c (gpgsm_agent_marktrusted): New.
-
-2002-02-07 Werner Koch <wk@gnupg.org>
-
- * certlist.c (gpgsm_add_to_certlist): Check that the specified
- name identifies a certificate unambiguously.
- (gpgsm_find_cert): Ditto.
-
- * server.c (cmd_listkeys): Check that the data stream is available.
- (cmd_listsecretkeys): Ditto.
- (has_option): New.
- (cmd_sign): Fix ambiguousity in option recognition.
-
- * gpgsm.c (main): Enable --logger-fd.
-
- * encrypt.c (gpgsm_encrypt): Increased buffer size for better
- performance.
-
- * call-agent.c (gpgsm_agent_pksign): Check the S-Exp received from
- the agent.
-
- * keylist.c (list_cert_colon): Filter out control characters.
-
-2002-02-06 Werner Koch <wk@gnupg.org>
-
- * decrypt.c (gpgsm_decrypt): Bail out after an decryption error.
-
- * server.c (reset_notify): Close input and output FDs.
- (cmd_encrypt,cmd_decrypt,cmd_verify,cmd_sign.cmd_import)
- (cmd_genkey): Close the FDs and release the recipient list even in
- the error case.
-
-2002-02-01 Marcus Brinkmann <marcus@g10code.de>
-
- * sign.c (gpgsm_sign): Do not release certificate twice.
-
-2002-01-29 Werner Koch <wk@gnupg.org>
-
- * call-agent.c (gpgsm_agent_havekey): New.
- * keylist.c (list_cert_colon): New arg HAVE_SECRET, print "crs"
- when we know that the secret key is available.
- (gpgsm_list_keys): New arg MODE, check whether a secret key is
- available. Changed all callers.
- * gpgsm.c (main): New command --list-secret-keys.
- * server.c (cmd_listsecretkeys): New.
- (cmd_listkeys): Return secret keys with "crs" record.
-
-2002-01-28 Werner Koch <wk@gnupg.org>
-
- * certreqgen.c (create_request): Store the email address in the req.
-
-2002-01-25 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): Disable core dumps.
-
- * sign.c (add_certificate_list): New.
- (gpgsm_sign): Add the certificates to the CMS object.
- * certpath.c (gpgsm_walk_cert_chain): New.
- * gpgsm.h (server_control_s): Add included_certs.
- * gpgsm.c: Add option --include-certs.
- (gpgsm_init_default_ctrl): New.
- (main): Call it.
- * server.c (gpgsm_server): Ditto.
- (option_handler): Support --include-certs.
-
-2002-01-23 Werner Koch <wk@gnupg.org>
-
- * certpath.c (gpgsm_validate_path): Print the DN of a missing issuer.
- * certdump.c (gpgsm_dump_string): New.
- (print_dn): Replaced by above.
-
-2002-01-22 Werner Koch <wk@gnupg.org>
-
- * certpath.c (unknown_criticals): New.
- (allowed_ca): New.
- (gpgsm_validate_path): Check validity, CA attribute, path length
- and unknown critical extensions.
-
-2002-01-21 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c: Add option --enable-crl-checks.
-
- * call-agent.c (start_agent): Implemented socket based access.
- * call-dirmngr.c (start_dirmngr): Ditto.
-
-2002-01-20 Werner Koch <wk@gnupg.org>
-
- * server.c (option_handler): New.
- (gpgsm_server): Register it with assuan.
-
-2002-01-19 Werner Koch <wk@gnupg.org>
-
- * server.c (gpgsm_server): Use assuan_deinit_server and setup
- assuan logging if enabled.
- * call-agent.c (inq_ciphertext_cb): Don't show the session key in
- an Assuan log file.
-
- * gpgsm.c (my_strusage): Take bugreport address from configure.ac
-
-2002-01-15 Werner Koch <wk@gnupg.org>
-
- * import.c (gpgsm_import): Just do a basic cert check before
- storing it.
- * certpath.c (gpgsm_basic_cert_check): New.
-
- * keydb.c (keydb_store_cert): New.
- * import.c (store_cert): Removed and change all caller to use
- the new function.
- * verify.c (store_cert): Ditto.
-
- * certlist.c (gpgsm_add_to_certlist): Validate the path
-
- * certpath.c (gpgsm_validate_path): Check the trust list.
- * call-agent.c (gpgsm_agent_istrusted): New.
-
-2002-01-14 Werner Koch <wk@gnupg.org>
-
- * call-dirmngr.c (inq_certificate): Changed for new interface semantic.
- * certlist.c (gpgsm_find_cert): New.
-
-2002-01-13 Werner Koch <wk@gnupg.org>
-
- * fingerprint.c (gpgsm_get_certid): Print the serial and not the
- hash after the dot.
-
-2002-01-11 Werner Koch <wk@gnupg.org>
-
- * call-dirmngr.c: New.
- * certpath.c (gpgsm_validate_path): Check the CRL here.
- * fingerprint.c (gpgsm_get_certid): New.
- * gpgsm.c: New options --dirmngr-program and --disable-crl-checks.
-
-2002-01-10 Werner Koch <wk@gnupg.org>
-
- * base64.c (gpgsm_create_writer): Allow to set the object name
-
-2002-01-08 Werner Koch <wk@gnupg.org>
-
- * keydb.c (spacep): Removed because it is now in util.c
-
- * server.c (cmd_genkey): New.
- * certreqgen.c: New. The parameter handling code has been taken
- from gnupg/g10/keygen.c version 1.0.6.
- * call-agent.c (gpgsm_agent_genkey): New.
-
-2002-01-02 Werner Koch <wk@gnupg.org>
-
- * server.c (rc_to_assuan_status): Removed and changed all callers
- to use map_to_assuan_status.
-
-2001-12-20 Werner Koch <wk@gnupg.org>
-
- * verify.c (gpgsm_verify): Implemented non-detached signature
- verification. Add OUT_FP arg, initialize a writer and changed all
- callers.
- * server.c (cmd_verify): Pass an out_fp if one has been set.
-
- * base64.c (base64_reader_cb): Try to detect an S/MIME body part.
-
- * certdump.c (print_sexp): Renamed to gpgsm_dump_serial, made
- global.
- (print_time): Renamed to gpgsm_dump_time, made global.
- (gpgsm_dump_serial): Take a real S-Expression as argument and
- print the first item.
- * keylist.c (list_cert_colon): Ditto.
- * keydb.c (keydb_search_issuer_sn): Ditto.
- * decrypt.c (print_integer_sexp): Removed and made callers
- use gpgsm_dump_serial.
- * verify.c (print_time): Removed, made callers use gpgsm_dump_time.
-
-2001-12-19 Marcus Brinkmann <marcus@g10code.de>
-
- * call-agent.c (start_agent): Add new argument to assuan_pipe_connect.
-
-2001-12-18 Werner Koch <wk@gnupg.org>
-
- * verify.c (print_integer_sexp): Renamed from print_integer and
- print the serial number according to the S-Exp rules.
- * decrypt.c (print_integer_sexp): Ditto.
-
-2001-12-17 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_cert_colon): Changed for new return value of
- get_serial.
- * keydb.c (keydb_search_issuer_sn): Ditto.
- * certcheck.c (gpgsm_check_cert_sig): Likewise for other S-Exp
- returingin functions.
- * fingerprint.c (gpgsm_get_keygrip): Ditto.
- * encrypt.c (encrypt_dek): Ditto
- * certcheck.c (gpgsm_check_cms_signature): Ditto
- * decrypt.c (prepare_decryption): Ditto.
- * call-agent.c (gpgsm_agent_pkdecrypt): Removed arg ciphertextlen,
- use KsbaSexp type and calculate the length.
-
- * certdump.c (print_sexp): Remaned from print_integer, changed caller.
-
- * Makefile.am: Use the LIBGCRYPT and LIBKSBA variables.
-
- * fingerprint.c (gpgsm_get_keygrip): Use the new
- gcry_pk_get_keygrip to calculate the grip - note the algorithm and
- therefore the grip values changed.
-
-2001-12-15 Werner Koch <wk@gnupg.org>
-
- * certcheck.c (gpgsm_check_cms_signature): Removed the faked-key
- kludge.
- (gpgsm_create_cms_signature): Removed the commented fake key
- code. This makes the function pretty simple.
-
- * gpgsm.c (main): Renamed the default key database to "keyring.kbx".
-
- * decrypt.c (gpgsm_decrypt): Write STATUS_DECRYPTION_*.
- * sign.c (gpgsm_sign): Write a STATUS_SIG_CREATED.
-
-2001-12-14 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_cert_colon): Kludge to show an email address
- encoded in the subject's DN.
-
- * verify.c (gpgsm_verify): Add hash debug helpers
- * sign.c (gpgsm_sign): Ditto.
-
- * base64.c (base64_reader_cb): Reset the linelen when we need to
- skip the line and adjusted test; I somehow forgot about DeMorgan.
-
- * server.c (cmd_encrypt,cmd_decrypt,cmd_sign,cmd_verify)
- (cmd_import): Close the FDs on success.
- (close_message_fd): New.
- (input_notify): Setting autodetect_encoding to 0 after initializing
- it to 0 is pretty pointless. Easy to fix.
-
- * gpgsm.c (main): New option --debug-wait n, so that it is
- possible to attach gdb when used in server mode.
-
- * sign.c (get_default_signer): Use keydb_classify_name here.
-
-2001-12-14 Marcus Brinkmann <marcus@g10code.de>
-
- * call-agent.c (LINELENGTH): Removed.
- (gpgsm_agent_pksign): Use ASSUAN_LINELENGTH, not LINELENGTH.
- (gpgsm_agent_pkdecrypt): Likewise.
-
-2001-12-13 Werner Koch <wk@gnupg.org>
-
- * keylist.c (list_cert_colon): Print alternative names of subject
- and a few other values.
-
-2001-12-12 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c (main): New options --assume-{armor,base64,binary}.
- * base64.c (base64_reader_cb): Fixed non-autodetection mode.
-
-2001-12-04 Werner Koch <wk@gnupg.org>
-
- * call-agent.c (read_from_agent): Check for inquire responses.
- (request_reply): Handle them using a new callback arg, changed all
- callers.
- (gpgsm_agent_pkdecrypt): New.
-
-2001-11-27 Werner Koch <wk@gnupg.org>
-
- * base64.c: New. Changed all other functions to use this instead
- of direct creation of ksba_reader/writer.
- * gpgsm.c (main): Set ctrl.auto_encoding unless --no-armor is used.
-
-2001-11-26 Werner Koch <wk@gnupg.org>
-
- * gpgsm.c: New option --agent-program
- * call-agent.c (start_agent): Allow to override the default path
- to the agent.
-
- * keydb.c (keydb_add_resource): Create keybox
-
- * keylist.c (gpgsm_list_keys): Fixed non-server keylisting.
-
- * server.c (rc_to_assuan_status): New. Use it for all commands.
-
-
- Copyright 2001, 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/sm/Makefile.am b/sm/Makefile.am
deleted file mode 100644
index 5c137fbb8..000000000
--- a/sm/Makefile.am
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-localedir = $(datadir)/locale
-INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
-
-bin_PROGRAMS = gpgsm
-
-AM_CPPFLAGS = -I$(top_srcdir)/common -I$(top_srcdir)/intl \
- $(LIBGCRYPT_CFLAGS) $(KSBA_CFLAGS)
-LDFLAGS = @LDFLAGS@
-
-gpgsm_SOURCES = \
- gpgsm.c gpgsm.h \
- misc.c \
- keydb.c keydb.h \
- server.c \
- call-agent.c \
- call-dirmngr.c \
- fingerprint.c \
- base64.c \
- certlist.c \
- certdump.c \
- certcheck.c \
- certchain.c \
- keylist.c \
- verify.c \
- sign.c \
- encrypt.c \
- decrypt.c \
- import.c \
- export.c \
- delete.c \
- certreqgen.c
-
-
-gpgsm_LDADD = ../jnlib/libjnlib.a ../assuan/libassuan.a ../kbx/libkeybox.a \
- ../common/libcommon.a $(LIBGCRYPT_LIBS) $(KSBA_LIBS)
-
-
diff --git a/sm/base64.c b/sm/base64.c
deleted file mode 100644
index f70615e97..000000000
--- a/sm/base64.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/* base64.c
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "i18n.h"
-
-#ifdef HAVE_DOSISH_SYSTEM
- #define LF "\r\n"
-#else
- #define LF "\n"
-#endif
-
-/* data used by the reader callbacks */
-struct reader_cb_parm_s {
- FILE *fp;
- unsigned char line[1024];
- int linelen;
- int readpos;
- int have_lf;
- unsigned long line_counter;
-
- int autodetect; /* try to detect the input encoding */
- int assume_pem; /* assume input encoding is PEM */
- int assume_base64; /* assume input is base64 encoded */
-
- int identified;
- int is_pem;
- int is_base64;
- int stop_seen;
- int might_be_smime;
-
- struct {
- int idx;
- unsigned char val;
- int stop_seen;
- } base64;
-};
-
-/* data used by the writer callbacks */
-struct writer_cb_parm_s {
- FILE *fp;
- const char *pem_name;
-
- int wrote_begin;
- int did_finish;
-
- struct {
- int idx;
- int quad_count;
- unsigned char radbuf[4];
- } base64;
-
-};
-
-
-/* context for this module's functions */
-struct base64_context_s {
- union {
- struct reader_cb_parm_s rparm;
- struct writer_cb_parm_s wparm;
- } u;
-};
-
-
-/* The base-64 character list */
-static unsigned char bintoasc[64] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789+/";
-/* The reverse base-64 list */
-static unsigned char asctobin[256] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, 0xff, 0x3f,
- 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
- 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
- 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24,
- 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
- 0x31, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff
-};
-
-
-static int
-has_only_base64 (const unsigned char *line, int linelen)
-{
- if (linelen < 20)
- return 0;
- for (; linelen; line++, linelen--)
- {
- if (*line == '\n' || (linelen > 1 && *line == '\r' && line[1] == '\n'))
- break;
- if ( !strchr (bintoasc, *line) )
- return 0;
- }
- return 1; /* yes */
-}
-
-static int
-is_empty_line (const unsigned char *line, int linelen)
-{
- if (linelen >= 2 && *line == '\r' && line[1] == '\n')
- return 1;
- if (linelen >= 1 && *line == '\n')
- return 1;
- return 0;
-}
-
-
-static int
-base64_reader_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
-{
- struct reader_cb_parm_s *parm = cb_value;
- size_t n;
- int c, c2;
-
- *nread = 0;
- if (!buffer)
- return -1; /* not supported */
-
- next:
- if (!parm->linelen)
- {
- /* read an entire line or up to the size of the buffer */
- parm->line_counter++;
- parm->have_lf = 0;
- for (n=0; n < DIM(parm->line);)
- {
- c = getc (parm->fp);
- if (c == EOF)
- {
- if (ferror (parm->fp))
- return -1;
- break;
- }
- parm->line[n++] = c;
- if (c == '\n')
- {
- parm->have_lf = 1;
- /* Fixme: we need to skip overlong lines while detecting
- the dashed lines */
- break;
- }
- }
- parm->linelen = n;
- if (!n)
- return -1; /* eof */
- parm->readpos = 0;
- }
-
- if (!parm->identified)
- {
- if (!parm->autodetect)
- {
- if (parm->assume_pem)
- {
- /* wait for the header line */
- parm->linelen = parm->readpos = 0;
- if (!parm->have_lf || strncmp (parm->line, "-----BEGIN ", 11)
- || !strncmp (parm->line+11, "PGP ", 4))
- goto next;
- parm->is_pem = 1;
- }
- else if (parm->assume_base64)
- parm->is_base64 = 1;
- }
- else if (parm->line_counter == 1 && !parm->have_lf)
- {
- /* first line too long - assume DER encoding */
- parm->is_pem = 0;
- }
- else if (parm->line_counter == 1 && parm->linelen && *parm->line == 0x30)
- {
- /* the very first byte does pretty much look like a SEQUENCE tag*/
- parm->is_pem = 0;
- }
- else if ( parm->have_lf && !strncmp (parm->line, "-----BEGIN ", 11)
- && strncmp (parm->line+11, "PGP ", 4) )
- {
- /* Fixme: we must only compare if the line really starts at
- the beginning */
- parm->is_pem = 1;
- parm->linelen = parm->readpos = 0;
- }
- else if ( parm->have_lf && parm->line_counter == 1
- && parm->linelen >= 13
- && !ascii_memcasecmp (parm->line, "Content-Type:", 13))
- { /* might be a S/MIME body */
- parm->might_be_smime = 1;
- parm->linelen = parm->readpos = 0;
- goto next;
- }
- else if (parm->might_be_smime == 1
- && is_empty_line (parm->line, parm->linelen))
- {
- parm->might_be_smime = 2;
- parm->linelen = parm->readpos = 0;
- goto next;
- }
- else if (parm->might_be_smime == 2)
- {
- parm->might_be_smime = 0;
- if ( !has_only_base64 (parm->line, parm->linelen))
- {
- parm->linelen = parm->readpos = 0;
- goto next;
- }
- parm->is_pem = 1;
- }
- else
- {
- parm->linelen = parm->readpos = 0;
- goto next;
- }
- parm->identified = 1;
- parm->base64.stop_seen = 0;
- parm->base64.idx = 0;
- }
-
-
- n = 0;
- if (parm->is_pem || parm->is_base64)
- {
- if (parm->is_pem && parm->have_lf
- && !strncmp (parm->line, "-----END ", 9))
- {
- parm->identified = 0;
- parm->linelen = parm->readpos = 0;
- /* let us return 0 */
- }
- else if (parm->stop_seen)
- { /* skip the rest of the line */
- parm->linelen = parm->readpos = 0;
- }
- else
- {
- int idx = parm->base64.idx;
- unsigned char val = parm->base64.val;
-
- while (n < count && parm->readpos < parm->linelen )
- {
- c = parm->line[parm->readpos++];
- if (c == '\n' || c == ' ' || c == '\r' || c == '\t')
- continue;
- if (c == '=')
- { /* pad character: stop */
- if (idx == 1)
- buffer[n++] = val;
- parm->stop_seen = 1;
- break;
- }
- if( (c = asctobin[(c2=c)]) == 255 )
- {
- log_error (_("invalid radix64 character %02x skipped\n"),
- c2);
- continue;
- }
- switch (idx)
- {
- case 0:
- val = c << 2;
- break;
- case 1:
- val |= (c>>4)&3;
- buffer[n++] = val;
- val = (c<<4)&0xf0;
- break;
- case 2:
- val |= (c>>2)&15;
- buffer[n++] = val;
- val = (c<<6)&0xc0;
- break;
- case 3:
- val |= c&0x3f;
- buffer[n++] = val;
- break;
- }
- idx = (idx+1) % 4;
- }
- if (parm->readpos == parm->linelen)
- parm->linelen = parm->readpos = 0;
-
- parm->base64.idx = idx;
- parm->base64.val = val;
- }
- }
- else
- { /* DER encoded */
- while (n < count && parm->readpos < parm->linelen)
- buffer[n++] = parm->line[parm->readpos++];
- if (parm->readpos == parm->linelen)
- parm->linelen = parm->readpos = 0;
- }
-
- *nread = n;
- return 0;
-}
-
-
-
-static int
-simple_reader_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
-{
- struct reader_cb_parm_s *parm = cb_value;
- size_t n;
- int c = 0;
-
- *nread = 0;
- if (!buffer)
- return -1; /* not supported */
-
- for (n=0; n < count; n++)
- {
- c = getc (parm->fp);
- if (c == EOF)
- {
- if ( ferror (parm->fp) )
- return -1;
- if (n)
- break; /* return what we have before an EOF */
- return -1;
- }
- *(byte *)buffer++ = c;
- }
-
- *nread = n;
- return 0;
-}
-
-
-
-
-static int
-base64_writer_cb (void *cb_value, const void *buffer, size_t count)
-{
- struct writer_cb_parm_s *parm = cb_value;
- unsigned char radbuf[4];
- int i, c, idx, quad_count;
- const unsigned char *p;
- FILE *fp = parm->fp;
-
- if (!count)
- return 0;
-
- if (!parm->wrote_begin)
- {
- if (parm->pem_name)
- {
- fputs ("-----BEGIN ", fp);
- fputs (parm->pem_name, fp);
- fputs ("-----\n", fp);
- }
- parm->wrote_begin = 1;
- parm->base64.idx = 0;
- parm->base64.quad_count = 0;
- }
-
- idx = parm->base64.idx;
- quad_count = parm->base64.quad_count;
- for (i=0; i < idx; i++)
- radbuf[i] = parm->base64.radbuf[i];
-
- for (p=buffer; count; p++, count--)
- {
- radbuf[idx++] = *p;
- if (idx > 2)
- {
- idx = 0;
- c = bintoasc[(*radbuf >> 2) & 077];
- putc (c, fp);
- c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1] >> 4)&017))&077];
- putc (c, fp);
- c = bintoasc[(((radbuf[1]<<2)&074)|((radbuf[2]>>6)&03))&077];
- putc (c, fp);
- c = bintoasc[radbuf[2]&077];
- putc (c, fp);
- if (++quad_count >= (64/4))
- {
- fputs (LF, fp);
- quad_count = 0;
- }
- }
- }
- for (i=0; i < idx; i++)
- parm->base64.radbuf[i] = radbuf[i];
- parm->base64.idx = idx;
- parm->base64.quad_count = quad_count;
-
- return ferror (fp) ? KSBA_Write_Error:0;
-}
-
-static int
-base64_finish_write (struct writer_cb_parm_s *parm)
-{
- unsigned char radbuf[4];
- int i, c, idx, quad_count;
- FILE *fp = parm->fp;
-
- if (!parm->wrote_begin)
- return 0; /* nothing written */
-
- /* flush the base64 encoding */
- idx = parm->base64.idx;
- quad_count = parm->base64.quad_count;
- for (i=0; i < idx; i++)
- radbuf[i] = parm->base64.radbuf[i];
-
- if (idx)
- {
- c = bintoasc[(*radbuf>>2)&077];
- putc (c, fp);
- if (idx == 1)
- {
- c = bintoasc[((*radbuf << 4) & 060) & 077];
- putc (c, fp);
- putc ('=', fp);
- putc ('=', fp);
- }
- else
- {
- c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1]>>4)&017))&077];
- putc (c, fp);
- c = bintoasc[((radbuf[1] << 2) & 074) & 077];
- putc (c, fp);
- putc ('=', fp);
-
- }
- if (++quad_count >= (64/4))
- {
- fputs (LF, fp);
- quad_count = 0;
- }
- }
-
- if (quad_count)
- fputs (LF, fp);
-
- if (parm->pem_name)
- {
- fputs ("-----END ", fp);
- fputs (parm->pem_name, fp);
- fputs ("-----\n", fp);
- }
- return ferror (fp)? GNUPG_Write_Error : 0;
-}
-
-
-
-
-/* Create a reader for the given file descriptor. Depending on the
- control information an input decoding is automagically choosen.
- The function returns a Base64Context object which must be passed to
- the gpgme_destroy_reader function. The created KsbaReader object
- is also returned, but the caller must not call the
- ksba_reader_release function on. */
-int
-gpgsm_create_reader (Base64Context *ctx,
- CTRL ctrl, FILE *fp, KsbaReader *r_reader)
-{
- int rc;
- KsbaReader r;
-
- *r_reader = NULL;
- *ctx = xtrycalloc (1, sizeof **ctx);
- if (!*ctx)
- return seterr (Out_Of_Core);
-
- r = ksba_reader_new ();
- if (!r)
- {
- xfree (*ctx); *ctx = NULL;
- return seterr (Out_Of_Core);
- }
-
- (*ctx)->u.rparm.fp = fp;
- if (ctrl->is_pem)
- {
- (*ctx)->u.rparm.assume_pem = 1;
- (*ctx)->u.rparm.assume_base64 = 1;
- rc = ksba_reader_set_cb (r, base64_reader_cb, &(*ctx)->u.rparm);
- }
- else if (ctrl->is_base64)
- {
- (*ctx)->u.rparm.assume_base64 = 1;
- rc = ksba_reader_set_cb (r, base64_reader_cb, &(*ctx)->u.rparm);
- }
- else if (ctrl->autodetect_encoding)
- {
- (*ctx)->u.rparm.autodetect = 1;
- rc = ksba_reader_set_cb (r, base64_reader_cb, &(*ctx)->u.rparm);
- }
- else
- rc = ksba_reader_set_cb (r, simple_reader_cb, &(*ctx)->u.rparm);
-
- if (rc)
- {
- ksba_reader_release (r);
- xfree (*ctx); *ctx = NULL;
- return map_ksba_err (rc);
- }
-
- *r_reader = r;
- return 0;
-}
-
-
-void
-gpgsm_destroy_reader (Base64Context ctx)
-{
- xfree (ctx);
-}
-
-
-
-/* Create a writer for the given stream. Depending on the control
- information an output encoding is automagically choosen. The
- function returns a Base64Context object which must be passed to the
- gpgme_destroy_writer function. The created KsbaWriter object is
- also returned, but the caller must not call the ksba_reader_release
- function on. */
-int
-gpgsm_create_writer (Base64Context *ctx,
- CTRL ctrl, FILE *fp, KsbaWriter *r_writer)
-{
- int rc;
- KsbaWriter w;
-
- *r_writer = NULL;
- *ctx = xtrycalloc (1, sizeof **ctx);
- if (!*ctx)
- return seterr (Out_Of_Core);
-
- w = ksba_writer_new ();
- if (!w)
- {
- xfree (*ctx); *ctx = NULL;
- return seterr (Out_Of_Core);
- }
-
- if (ctrl->create_pem || ctrl->create_base64)
- {
- (*ctx)->u.wparm.fp = fp;
- if (ctrl->create_pem)
- (*ctx)->u.wparm.pem_name = ctrl->pem_name? ctrl->pem_name
- : "CMS OBJECT";
- rc = ksba_writer_set_cb (w, base64_writer_cb, &(*ctx)->u.wparm);
- }
- else
- rc = ksba_writer_set_file (w, fp);
-
- if (rc)
- {
- ksba_writer_release (w);
- xfree (*ctx); *ctx = NULL;
- return map_ksba_err (rc);
- }
-
- *r_writer = w;
- return 0;
-}
-
-
-int
-gpgsm_finish_writer (Base64Context ctx)
-{
- struct writer_cb_parm_s *parm;
-
- if (!ctx)
- return GNUPG_Invalid_Value;
- parm = &ctx->u.wparm;
- if (parm->did_finish)
- return 0; /* already done */
- parm->did_finish = 1;
- if (!parm->fp)
- return 0; /* callback was not used */
- return base64_finish_write (parm);
-}
-
-void
-gpgsm_destroy_writer (Base64Context ctx)
-{
- xfree (ctx);
-}
diff --git a/sm/call-agent.c b/sm/call-agent.c
deleted file mode 100644
index 6cb2fb505..000000000
--- a/sm/call-agent.c
+++ /dev/null
@@ -1,751 +0,0 @@
-/* call-agent.c - divert operations to the agent
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-#include <gcrypt.h>
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#include "gpgsm.h"
-#include "../assuan/assuan.h"
-#include "i18n.h"
-#include "keydb.h" /* fixme: Move this to import.c */
-
-static ASSUAN_CONTEXT agent_ctx = NULL;
-static int force_pipe_server = 0;
-
-struct cipher_parm_s {
- ASSUAN_CONTEXT ctx;
- const char *ciphertext;
- size_t ciphertextlen;
-};
-
-struct genkey_parm_s {
- ASSUAN_CONTEXT ctx;
- const char *sexp;
- size_t sexplen;
-};
-
-struct learn_parm_s {
- int error;
- ASSUAN_CONTEXT ctx;
- struct membuf *data;
-};
-
-struct membuf {
- size_t len;
- size_t size;
- char *buf;
- int out_of_core;
-};
-
-
-
-/* A simple implemnation of a dynamic buffer. Use init_membuf() to
- create a buffer, put_membuf to append bytes and get_membuf to
- release and return the buffer. Allocation errors are detected but
- only returned at the final get_membuf(), this helps not to clutter
- the code with out of core checks. */
-
-static void
-init_membuf (struct membuf *mb, int initiallen)
-{
- mb->len = 0;
- mb->size = initiallen;
- mb->out_of_core = 0;
- mb->buf = xtrymalloc (initiallen);
- if (!mb->buf)
- mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
- if (mb->out_of_core)
- return;
-
- if (mb->len + len >= mb->size)
- {
- char *p;
-
- mb->size += len + 1024;
- p = xtryrealloc (mb->buf, mb->size);
- if (!p)
- {
- mb->out_of_core = 1;
- return;
- }
- mb->buf = p;
- }
- memcpy (mb->buf + mb->len, buf, len);
- mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
- char *p;
-
- if (mb->out_of_core)
- {
- xfree (mb->buf);
- mb->buf = NULL;
- return NULL;
- }
-
- p = mb->buf;
- *len = mb->len;
- mb->buf = NULL;
- mb->out_of_core = 1; /* don't allow a reuse */
- return p;
-}
-
-
-
-/* Try to connect to the agent via socket or fork it off and work by
- pipes. Handle the server's initial greeting */
-static int
-start_agent (void)
-{
- int rc = 0;
- char *infostr, *p;
- ASSUAN_CONTEXT ctx;
- char *dft_display = NULL;
- char *dft_ttyname = NULL;
- char *dft_ttytype = NULL;
- char *old_lc = NULL;
- char *dft_lc = NULL;
-
- if (agent_ctx)
- return 0; /* fixme: We need a context for each thread or serialize
- the access to the agent (which is suitable given that
- the agent is not MT */
-
- infostr = force_pipe_server? NULL : getenv ("GPG_AGENT_INFO");
- if (!infostr)
- {
- const char *pgmname;
- const char *argv[3];
- int no_close_list[3];
- int i;
-
- if (opt.verbose)
- log_info (_("no running gpg-agent - starting one\n"));
-
- if (fflush (NULL))
- {
- log_error ("error flushing pending output: %s\n", strerror (errno));
- return seterr (Write_Error);
- }
-
- if (!opt.agent_program || !*opt.agent_program)
- opt.agent_program = GNUPG_DEFAULT_AGENT;
- if ( !(pgmname = strrchr (opt.agent_program, '/')))
- pgmname = opt.agent_program;
- else
- pgmname++;
-
- argv[0] = pgmname;
- argv[1] = "--server";
- argv[2] = NULL;
-
- i=0;
- if (log_get_fd () != -1)
- no_close_list[i++] = log_get_fd ();
- no_close_list[i++] = fileno (stderr);
- no_close_list[i] = -1;
-
- /* connect to the agent and perform initial handshaking */
- rc = assuan_pipe_connect (&ctx, opt.agent_program, (char**)argv,
- no_close_list);
- }
- else
- {
- int prot;
- int pid;
-
- infostr = xstrdup (infostr);
- if ( !(p = strchr (infostr, ':')) || p == infostr)
- {
- log_error (_("malformed GPG_AGENT_INFO environment variable\n"));
- xfree (infostr);
- force_pipe_server = 1;
- return start_agent ();
- }
- *p++ = 0;
- pid = atoi (p);
- while (*p && *p != ':')
- p++;
- prot = *p? atoi (p+1) : 0;
- if (prot != 1)
- {
- log_error (_("gpg-agent protocol version %d is not supported\n"),
- prot);
- xfree (infostr);
- force_pipe_server = 1;
- return start_agent ();
- }
-
- rc = assuan_socket_connect (&ctx, infostr, pid);
- xfree (infostr);
- if (rc == ASSUAN_Connect_Failed)
- {
- log_error (_("can't connect to the agent - trying fall back\n"));
- force_pipe_server = 1;
- return start_agent ();
- }
- }
-
- if (rc)
- {
- log_error ("can't connect to the agent: %s\n", assuan_strerror (rc));
- return seterr (No_Agent);
- }
- agent_ctx = ctx;
-
- if (DBG_ASSUAN)
- log_debug ("connection to agent established\n");
-
- rc = assuan_transact (agent_ctx, "RESET", NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- dft_display = getenv ("DISPLAY");
- if (opt.display || dft_display)
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION display=%s",
- opt.display ? opt.display : dft_display) < 0)
- return GNUPG_Out_Of_Core;
- rc = assuan_transact (agent_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free (optstr);
- if (rc)
- return map_assuan_err (rc);
- }
- if (!opt.ttyname && ttyname (1))
- dft_ttyname = ttyname (1);
- if (opt.ttyname || dft_ttyname)
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION ttyname=%s",
- opt.ttyname ? opt.ttyname : dft_ttyname) < 0)
- return GNUPG_Out_Of_Core;
- rc = assuan_transact (agent_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free (optstr);
- if (rc)
- return map_assuan_err (rc);
- }
- dft_ttytype = getenv ("TERM");
- if (opt.ttytype || (dft_ttyname && dft_ttytype))
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION ttytype=%s",
- opt.ttyname ? opt.ttytype : dft_ttytype) < 0)
- return GNUPG_Out_Of_Core;
- rc = assuan_transact (agent_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free (optstr);
- if (rc)
- return map_assuan_err (rc);
- }
-#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
- old_lc = setlocale (LC_CTYPE, NULL);
- if (old_lc)
- {
- old_lc = strdup (old_lc);
- if (!old_lc)
- return GNUPG_Out_Of_Core;
- }
- dft_lc = setlocale (LC_CTYPE, "");
-#endif
- if (opt.lc_ctype || (dft_ttyname && dft_lc))
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION lc-ctype=%s",
- opt.lc_ctype ? opt.lc_ctype : dft_lc) < 0)
- rc = GNUPG_Out_Of_Core;
- else
- {
- rc = assuan_transact (agent_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free (optstr);
- if (rc)
- rc = map_assuan_err (rc);
- }
- }
-#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
- if (old_lc)
- {
- setlocale (LC_CTYPE, old_lc);
- free (old_lc);
- }
-#endif
- if (rc)
- return rc;
-#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
- old_lc = setlocale (LC_MESSAGES, NULL);
- if (old_lc)
- {
- old_lc = strdup (old_lc);
- if (!old_lc)
- return GNUPG_Out_Of_Core;
- }
- dft_lc = setlocale (LC_MESSAGES, "");
-#endif
- if (opt.lc_messages || (dft_ttyname && dft_lc))
- {
- char *optstr;
- if (asprintf (&optstr, "OPTION lc-messages=%s",
- opt.lc_messages ? opt.lc_messages : dft_lc) < 0)
- rc = GNUPG_Out_Of_Core;
- else
- {
- rc = assuan_transact (agent_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
- NULL);
- free (optstr);
- if (rc)
- rc = map_assuan_err (rc);
- }
- }
-#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
- if (old_lc)
- {
- setlocale (LC_MESSAGES, old_lc);
- free (old_lc);
- }
-#endif
-
- return rc;
-}
-
-
-static AssuanError
-membuf_data_cb (void *opaque, const void *buffer, size_t length)
-{
- struct membuf *data = opaque;
-
- if (buffer)
- put_membuf (data, buffer, length);
- return 0;
-}
-
-
-
-
-/* Call the agent to do a sign operation using the key identified by
- the hex string KEYGRIP. */
-int
-gpgsm_agent_pksign (const char *keygrip,
- unsigned char *digest, size_t digestlen, int digestalgo,
- char **r_buf, size_t *r_buflen )
-{
- int rc, i;
- char *p, line[ASSUAN_LINELENGTH];
- struct membuf data;
- size_t len;
-
- *r_buf = NULL;
- rc = start_agent ();
- if (rc)
- return rc;
-
- if (digestlen*2 + 50 > DIM(line))
- return seterr (General_Error);
-
- rc = assuan_transact (agent_ctx, "RESET", NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- snprintf (line, DIM(line)-1, "SIGKEY %s", keygrip);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- sprintf (line, "SETHASH %d ", digestalgo);
- p = line + strlen (line);
- for (i=0; i < digestlen ; i++, p += 2 )
- sprintf (p, "%02X", digest[i]);
- rc = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- init_membuf (&data, 1024);
- rc = assuan_transact (agent_ctx, "PKSIGN",
- membuf_data_cb, &data, NULL, NULL, NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return map_assuan_err (rc);
- }
- *r_buf = get_membuf (&data, r_buflen);
-
- if (!gcry_sexp_canon_len (*r_buf, *r_buflen, NULL, NULL))
- {
- xfree (*r_buf); *r_buf = NULL;
- return GNUPG_Invalid_Value;
- }
-
- return *r_buf? 0 : GNUPG_Out_Of_Core;
-}
-
-
-
-
-/* Handle a CIPHERTEXT inquiry. Note, we only send the data,
- assuan_transact talkes care of flushing and writing the end */
-static AssuanError
-inq_ciphertext_cb (void *opaque, const char *keyword)
-{
- struct cipher_parm_s *parm = opaque;
- AssuanError rc;
-
- assuan_begin_confidential (parm->ctx);
- rc = assuan_send_data (parm->ctx, parm->ciphertext, parm->ciphertextlen);
- assuan_end_confidential (parm->ctx);
- return rc;
-}
-
-
-/* Call the agent to do a decrypt operation using the key identified by
- the hex string KEYGRIP. */
-int
-gpgsm_agent_pkdecrypt (const char *keygrip,
- KsbaConstSexp ciphertext,
- char **r_buf, size_t *r_buflen )
-{
- int rc;
- char line[ASSUAN_LINELENGTH];
- struct membuf data;
- struct cipher_parm_s cipher_parm;
- size_t n, len;
- char *buf, *endp;
- size_t ciphertextlen;
-
- if (!keygrip || strlen(keygrip) != 40 || !ciphertext || !r_buf || !r_buflen)
- return GNUPG_Invalid_Value;
- *r_buf = NULL;
-
- ciphertextlen = gcry_sexp_canon_len (ciphertext, 0, NULL, NULL);
- if (!ciphertextlen)
- return GNUPG_Invalid_Value;
-
- rc = start_agent ();
- if (rc)
- return rc;
-
- rc = assuan_transact (agent_ctx, "RESET", NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- assert ( DIM(line) >= 50 );
- snprintf (line, DIM(line)-1, "SETKEY %s", keygrip);
- line[DIM(line)-1] = 0;
- rc = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- init_membuf (&data, 1024);
- cipher_parm.ctx = agent_ctx;
- cipher_parm.ciphertext = ciphertext;
- cipher_parm.ciphertextlen = ciphertextlen;
- rc = assuan_transact (agent_ctx, "PKDECRYPT",
- membuf_data_cb, &data,
- inq_ciphertext_cb, &cipher_parm, NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return map_assuan_err (rc);
- }
-
- put_membuf (&data, "", 1); /* make sure it is 0 terminated */
- buf = get_membuf (&data, &len);
- if (!buf)
- return seterr (Out_Of_Core);
- /* FIXME: We would better a return a full S-exp and not just a part */
- assert (len);
- len--; /* remove the terminating 0 */
- n = strtoul (buf, &endp, 10);
- if (!n || *endp != ':')
- return seterr (Invalid_Sexp);
- endp++;
- if (endp-buf+n > len)
- return seterr (Invalid_Sexp); /* oops len does not match internal len*/
- memmove (buf, endp, n);
- *r_buflen = n;
- *r_buf = buf;
- return 0;
-}
-
-
-
-
-
-/* Handle a KEYPARMS inquiry. Note, we only send the data,
- assuan_transact takes care of flushing and writing the end */
-static AssuanError
-inq_genkey_parms (void *opaque, const char *keyword)
-{
- struct genkey_parm_s *parm = opaque;
- AssuanError rc;
-
- rc = assuan_send_data (parm->ctx, parm->sexp, parm->sexplen);
- return rc;
-}
-
-
-
-/* Call the agent to generate a newkey */
-int
-gpgsm_agent_genkey (KsbaConstSexp keyparms, KsbaSexp *r_pubkey)
-{
- int rc;
- struct genkey_parm_s gk_parm;
- struct membuf data;
- size_t len;
- char *buf;
-
- *r_pubkey = NULL;
- rc = start_agent ();
- if (rc)
- return rc;
-
- rc = assuan_transact (agent_ctx, "RESET", NULL, NULL, NULL, NULL, NULL, NULL);
- if (rc)
- return map_assuan_err (rc);
-
- init_membuf (&data, 1024);
- gk_parm.ctx = agent_ctx;
- gk_parm.sexp = keyparms;
- gk_parm.sexplen = gcry_sexp_canon_len (keyparms, 0, NULL, NULL);
- if (!gk_parm.sexplen)
- return GNUPG_Invalid_Value;
- rc = assuan_transact (agent_ctx, "GENKEY",
- membuf_data_cb, &data,
- inq_genkey_parms, &gk_parm, NULL, NULL);
- if (rc)
- {
- xfree (get_membuf (&data, &len));
- return map_assuan_err (rc);
- }
- buf = get_membuf (&data, &len);
- if (!buf)
- return GNUPG_Out_Of_Core;
- if (!gcry_sexp_canon_len (buf, len, NULL, NULL))
- {
- xfree (buf);
- return GNUPG_Invalid_Sexp;
- }
- *r_pubkey = buf;
- return 0;
-}
-
-
-/* Ask the agent whether the certificate is in the list of trusted
- keys */
-int
-gpgsm_agent_istrusted (KsbaCert cert)
-{
- int rc;
- char *fpr;
- char line[ASSUAN_LINELENGTH];
-
- rc = start_agent ();
- if (rc)
- return rc;
-
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- if (!fpr)
- {
- log_error ("error getting the fingerprint\n");
- return seterr (General_Error);
- }
-
- snprintf (line, DIM(line)-1, "ISTRUSTED %s", fpr);
- line[DIM(line)-1] = 0;
- xfree (fpr);
-
- rc = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- return map_assuan_err (rc);
-}
-
-/* Ask the agent to mark CERT as a trusted Root-CA one */
-int
-gpgsm_agent_marktrusted (KsbaCert cert)
-{
- int rc;
- char *fpr, *dn;
- char line[ASSUAN_LINELENGTH];
-
- rc = start_agent ();
- if (rc)
- return rc;
-
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- if (!fpr)
- {
- log_error ("error getting the fingerprint\n");
- return seterr (General_Error);
- }
-
- dn = ksba_cert_get_issuer (cert, 0);
- if (!dn)
- {
- xfree (fpr);
- return seterr (General_Error);
- }
- snprintf (line, DIM(line)-1, "MARKTRUSTED %s S %s", fpr, dn);
- line[DIM(line)-1] = 0;
- ksba_free (dn);
- xfree (fpr);
-
- rc = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- return map_assuan_err (rc);
-}
-
-
-
-/* Ask the agent whether the a corresponding secret key is available
- for the given keygrip */
-int
-gpgsm_agent_havekey (const char *hexkeygrip)
-{
- int rc;
- char line[ASSUAN_LINELENGTH];
-
- rc = start_agent ();
- if (rc)
- return rc;
-
- if (!hexkeygrip || strlen (hexkeygrip) != 40)
- return GNUPG_Invalid_Value;
-
- snprintf (line, DIM(line)-1, "HAVEKEY %s", hexkeygrip);
- line[DIM(line)-1] = 0;
-
- rc = assuan_transact (agent_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
- return map_assuan_err (rc);
-}
-
-
-static AssuanError
-learn_cb (void *opaque, const void *buffer, size_t length)
-{
- struct learn_parm_s *parm = opaque;
- size_t len;
- char *buf;
- KsbaCert cert;
- int rc;
-
- if (parm->error)
- return 0;
-
- if (buffer)
- {
- put_membuf (parm->data, buffer, length);
- return 0;
- }
- /* END encountered - process what we have */
- buf = get_membuf (parm->data, &len);
- if (!buf)
- {
- parm->error = GNUPG_Out_Of_Core;
- return 0;
- }
-
-
- /* FIXME: this should go into import.c */
- cert = ksba_cert_new ();
- if (!cert)
- {
- parm->error = GNUPG_Out_Of_Core;
- return 0;
- }
- rc = ksba_cert_init_from_mem (cert, buf, len);
- if (rc)
- {
- log_error ("failed to parse a certificate: %s\n", ksba_strerror (rc));
- ksba_cert_release (cert);
- parm->error = map_ksba_err (rc);
- return 0;
- }
-
- rc = gpgsm_basic_cert_check (cert);
- if (rc == GNUPG_Missing_Certificate)
- { /* For later use we store it in the ephemeral database. */
- log_info ("issuer certificate missing - storing as ephemeral\n");
- keydb_store_cert (cert, 1, NULL);
- }
- else if (rc)
- log_error ("invalid certificate: %s\n", gnupg_strerror (rc));
- else
- {
- int existed;
-
- if (!keydb_store_cert (cert, 0, &existed))
- {
- if (opt.verbose > 1 && existed)
- log_info ("certificate already in DB\n");
- else if (opt.verbose && !existed)
- log_info ("certificate imported\n");
- }
- }
-
- ksba_cert_release (cert);
- init_membuf (parm->data, 4096);
- return 0;
-}
-
-/* Call the agent to learn about a smartcard */
-int
-gpgsm_agent_learn ()
-{
- int rc;
- struct learn_parm_s learn_parm;
- struct membuf data;
- size_t len;
-
- rc = start_agent ();
- if (rc)
- return rc;
-
- init_membuf (&data, 4096);
- learn_parm.error = 0;
- learn_parm.ctx = agent_ctx;
- learn_parm.data = &data;
- rc = assuan_transact (agent_ctx, "LEARN --send",
- learn_cb, &learn_parm,
- NULL, NULL, NULL, NULL);
- xfree (get_membuf (&data, &len));
- if (rc)
- return map_assuan_err (rc);
- return learn_parm.error;
-}
-
diff --git a/sm/call-dirmngr.c b/sm/call-dirmngr.c
deleted file mode 100644
index a1d94e25b..000000000
--- a/sm/call-dirmngr.c
+++ /dev/null
@@ -1,495 +0,0 @@
-/* call-dirmngr.c - communication with the dromngr
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-
-#include "gpgsm.h"
-#include "../assuan/assuan.h"
-#include "i18n.h"
-
-struct membuf {
- size_t len;
- size_t size;
- char *buf;
- int out_of_core;
-};
-
-
-
-static ASSUAN_CONTEXT dirmngr_ctx = NULL;
-static int force_pipe_server = 0;
-
-struct inq_certificate_parm_s {
- ASSUAN_CONTEXT ctx;
- KsbaCert cert;
-};
-
-struct lookup_parm_s {
- CTRL ctrl;
- ASSUAN_CONTEXT ctx;
- void (*cb)(void *, KsbaCert);
- void *cb_value;
- struct membuf data;
- int error;
-};
-
-
-
-
-/* A simple implementation of a dynamic buffer. Use init_membuf() to
- create a buffer, put_membuf to append bytes and get_membuf to
- release and return the buffer. Allocation errors are detected but
- only returned at the final get_membuf(), this helps not to clutter
- the code with out of core checks. */
-
-static void
-init_membuf (struct membuf *mb, int initiallen)
-{
- mb->len = 0;
- mb->size = initiallen;
- mb->out_of_core = 0;
- mb->buf = xtrymalloc (initiallen);
- if (!mb->buf)
- mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
- if (mb->out_of_core)
- return;
-
- if (mb->len + len >= mb->size)
- {
- char *p;
-
- mb->size += len + 1024;
- p = xtryrealloc (mb->buf, mb->size);
- if (!p)
- {
- mb->out_of_core = 1;
- return;
- }
- mb->buf = p;
- }
- memcpy (mb->buf + mb->len, buf, len);
- mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
- char *p;
-
- if (mb->out_of_core)
- {
- xfree (mb->buf);
- mb->buf = NULL;
- return NULL;
- }
-
- p = mb->buf;
- *len = mb->len;
- mb->buf = NULL;
- mb->out_of_core = 1; /* don't allow a reuse */
- return p;
-}
-
-
-
-
-
-/* Try to connect to the agent via socket or fork it off and work by
- pipes. Handle the server's initial greeting */
-static int
-start_dirmngr (void)
-{
- int rc;
- char *infostr, *p;
- ASSUAN_CONTEXT ctx;
-
- if (dirmngr_ctx)
- return 0; /* fixme: We need a context for each thread or serialize
- the access to the dirmngr */
-
- infostr = force_pipe_server? NULL : getenv ("DIRMNGR_INFO");
- if (!infostr)
- {
- const char *pgmname;
- const char *argv[3];
- int no_close_list[3];
- int i;
-
- if (opt.verbose)
- log_info (_("no running dirmngr - starting one\n"));
-
- if (fflush (NULL))
- {
- log_error ("error flushing pending output: %s\n", strerror (errno));
- return seterr (Write_Error);
- }
-
- if (!opt.dirmngr_program || !*opt.dirmngr_program)
- opt.dirmngr_program = GNUPG_DEFAULT_DIRMNGR;
- if ( !(pgmname = strrchr (opt.dirmngr_program, '/')))
- pgmname = opt.dirmngr_program;
- else
- pgmname++;
-
- argv[0] = pgmname;
- argv[1] = "--server";
- argv[2] = NULL;
-
- i=0;
- if (log_get_fd () != -1)
- no_close_list[i++] = log_get_fd ();
- no_close_list[i++] = fileno (stderr);
- no_close_list[i] = -1;
-
- /* connect to the agent and perform initial handshaking */
- rc = assuan_pipe_connect (&ctx, opt.dirmngr_program, (char**)argv,
- no_close_list);
- }
- else
- {
- int prot;
- int pid;
-
- infostr = xstrdup (infostr);
- if ( !(p = strchr (infostr, ':')) || p == infostr)
- {
- log_error (_("malformed DIRMNGR_INFO environment variable\n"));
- xfree (infostr);
- force_pipe_server = 1;
- return start_dirmngr ();
- }
- *p++ = 0;
- pid = atoi (p);
- while (*p && *p != ':')
- p++;
- prot = *p? atoi (p+1) : 0;
- if (prot != 1)
- {
- log_error (_("dirmngr protocol version %d is not supported\n"),
- prot);
- xfree (infostr);
- force_pipe_server = 1;
- return start_dirmngr ();
- }
-
- rc = assuan_socket_connect (&ctx, infostr, pid);
- xfree (infostr);
- if (rc == ASSUAN_Connect_Failed)
- {
- log_error (_("can't connect to the dirmngr - trying fall back\n"));
- force_pipe_server = 1;
- return start_dirmngr ();
- }
- }
-
- if (rc)
- {
- log_error ("can't connect to the dirmngr: %s\n", assuan_strerror (rc));
- return seterr (No_Dirmngr);
- }
- dirmngr_ctx = ctx;
-
- if (DBG_ASSUAN)
- log_debug ("connection to dirmngr established\n");
- return 0;
-}
-
-
-
-/* Handle a SENDCERT inquiry. */
-static AssuanError
-inq_certificate (void *opaque, const char *line)
-{
- struct inq_certificate_parm_s *parm = opaque;
- AssuanError rc;
- const unsigned char *der;
- size_t derlen;
-
- if (!(!strncmp (line, "SENDCERT", 8) && (line[8] == ' ' || !line[8])))
- {
- log_error ("unsupported inquiry `%s'\n", line);
- return ASSUAN_Inquire_Unknown;
- }
- line += 8;
-
- if (!*line)
- { /* send the current certificate */
- der = ksba_cert_get_image (parm->cert, &derlen);
- if (!der)
- rc = ASSUAN_Inquire_Error;
- else
- rc = assuan_send_data (parm->ctx, der, derlen);
- }
- else
- { /* send the given certificate */
- int err;
- KsbaCert cert;
-
- err = gpgsm_find_cert (line, &cert);
- if (err)
- {
- log_error ("certificate not found: %s\n", gnupg_strerror (err));
- rc = ASSUAN_Inquire_Error;
- }
- else
- {
- der = ksba_cert_get_image (cert, &derlen);
- if (!der)
- rc = ASSUAN_Inquire_Error;
- else
- rc = assuan_send_data (parm->ctx, der, derlen);
- ksba_cert_release (cert);
- }
- }
-
- return rc;
-}
-
-
-
-/* Call the directory manager to check whether the certificate is valid
- Returns 0 for valid or usually one of the errors:
-
- GNUPG_Certificate_Revoked
- GNUPG_No_CRL_Known
- GNUPG_CRL_Too_Old
- */
-int
-gpgsm_dirmngr_isvalid (KsbaCert cert)
-{
- int rc;
- char *certid;
- char line[ASSUAN_LINELENGTH];
- struct inq_certificate_parm_s parm;
-
- rc = start_dirmngr ();
- if (rc)
- return rc;
-
- certid = gpgsm_get_certid (cert);
- if (!certid)
- {
- log_error ("error getting the certificate ID\n");
- return seterr (General_Error);
- }
-
- if (opt.verbose > 1)
- {
- char *fpr = gpgsm_get_fingerprint_string (cert, GCRY_MD_SHA1);
- log_info ("asking dirmngr about %s\n", fpr);
- xfree (fpr);
- }
-
- parm.ctx = dirmngr_ctx;
- parm.cert = cert;
-
- snprintf (line, DIM(line)-1, "ISVALID %s", certid);
- line[DIM(line)-1] = 0;
- xfree (certid);
-
- rc = assuan_transact (dirmngr_ctx, line, NULL, NULL,
- inq_certificate, &parm, NULL, NULL);
- if (opt.verbose > 1)
- log_info ("response of dirmngr: %s\n", rc? assuan_strerror (rc): "okay");
- return map_assuan_err (rc);
-}
-
-
-
-/* Lookup helpers*/
-static AssuanError
-lookup_cb (void *opaque, const void *buffer, size_t length)
-{
- struct lookup_parm_s *parm = opaque;
- size_t len;
- char *buf;
- KsbaCert cert;
- int rc;
-
- if (parm->error)
- return 0;
-
- if (buffer)
- {
- put_membuf (&parm->data, buffer, length);
- return 0;
- }
- /* END encountered - process what we have */
- buf = get_membuf (&parm->data, &len);
- if (!buf)
- {
- parm->error = GNUPG_Out_Of_Core;
- return 0;
- }
-
- cert = ksba_cert_new ();
- if (!cert)
- {
- parm->error = GNUPG_Out_Of_Core;
- return 0;
- }
- rc = ksba_cert_init_from_mem (cert, buf, len);
- if (rc)
- {
- log_error ("failed to parse a certificate: %s\n", ksba_strerror (rc));
- }
- else
- {
- parm->cb (parm->cb_value, cert);
- }
-
- ksba_cert_release (cert);
- init_membuf (&parm->data, 4096);
- return 0;
-}
-
-/* Return a properly escaped pattern from NAMES. The only error
- return is NULL to indicate a malloc failure. */
-static char *
-pattern_from_strlist (STRLIST names)
-{
- STRLIST sl;
- int n;
- const char *s;
- char *pattern, *p;
-
- for (n=0, sl=names; sl; sl = sl->next)
- {
- for (s=sl->d; *s; s++, n++)
- {
- if (*s == '%' || *s == ' ' || *s == '+')
- n += 2;
- }
- n++;
- }
-
- p = pattern = xtrymalloc (n+1);
- if (!pattern)
- return NULL;
-
- for (n=0, sl=names; sl; sl = sl->next)
- {
- for (s=sl->d; *s; s++)
- {
- switch (*s)
- {
- case '%':
- *p++ = '%';
- *p++ = '2';
- *p++ = '5';
- break;
- case ' ':
- *p++ = '%';
- *p++ = '2';
- *p++ = '0';
- break;
- case '+':
- *p++ = '%';
- *p++ = '2';
- *p++ = 'B';
- break;
- default:
- *p++ = *s;
- break;
- }
- }
- *p++ = ' ';
- }
- if (p == pattern)
- *pattern = 0; /* is empty */
- else
- p[-1] = '\0'; /* remove trailing blank */
-
- return pattern;
-}
-
-static AssuanError
-lookup_status_cb (void *opaque, const char *line)
-{
- struct lookup_parm_s *parm = opaque;
-
- if (!strncmp (line, "TRUNCATED", 9) && (line[9]==' ' || !line[9]))
- {
- if (parm->ctrl)
- {
- for (line +=9; *line == ' '; line++)
- ;
- gpgsm_status (parm->ctrl, STATUS_TRUNCATED, line);
- }
- }
- return 0;
-}
-
-
-/* Run the Directroy Managers lookup command using the apptern
- compiled from the strings given in NAMES. The caller must provide
- the callback CB which will be passed cert by cert. Note that CTRL
- is optional. */
-int
-gpgsm_dirmngr_lookup (CTRL ctrl, STRLIST names,
- void (*cb)(void*, KsbaCert), void *cb_value)
-{
- int rc;
- char *pattern;
- char line[ASSUAN_LINELENGTH];
- struct lookup_parm_s parm;
- size_t len;
-
- rc = start_dirmngr ();
- if (rc)
- return rc;
-
- pattern = pattern_from_strlist (names);
- if (!pattern)
- return GNUPG_Out_Of_Core;
- snprintf (line, DIM(line)-1, "LOOKUP %s", pattern);
- line[DIM(line)-1] = 0;
- xfree (pattern);
-
- parm.ctrl = ctrl;
- parm.ctx = dirmngr_ctx;
- parm.cb = cb;
- parm.cb_value = cb_value;
- parm.error = 0;
- init_membuf (&parm.data, 4096);
-
- rc = assuan_transact (dirmngr_ctx, line, lookup_cb, &parm,
- NULL, NULL, lookup_status_cb, &parm);
- xfree (get_membuf (&parm.data, &len));
- if (rc)
- return map_assuan_err (rc);
- return parm.error;
-}
-
-
diff --git a/sm/certchain.c b/sm/certchain.c
deleted file mode 100644
index b01398f18..000000000
--- a/sm/certchain.c
+++ /dev/null
@@ -1,786 +0,0 @@
-/* certchain.c - certificate chain validation
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-static int
-unknown_criticals (KsbaCert cert)
-{
- static const char *known[] = {
- "2.5.29.15", /* keyUsage */
- "2.5.29.19", /* basic Constraints */
- "2.5.29.32", /* certificatePolicies */
- NULL
- };
- int rc = 0, i, idx, crit;
- const char *oid;
- KsbaError err;
-
- for (idx=0; !(err=ksba_cert_get_extension (cert, idx,
- &oid, &crit, NULL, NULL));idx++)
- {
- if (!crit)
- continue;
- for (i=0; known[i] && strcmp (known[i],oid); i++)
- ;
- if (!known[i])
- {
- log_error (_("critical certificate extension %s is not supported\n"),
- oid);
- rc = GNUPG_Unsupported_Certificate;
- }
- }
- if (err && err != -1)
- rc = map_ksba_err (err);
-
- return rc;
-}
-
-static int
-allowed_ca (KsbaCert cert, int *chainlen)
-{
- KsbaError err;
- int flag;
-
- err = ksba_cert_is_ca (cert, &flag, chainlen);
- if (err)
- return map_ksba_err (err);
- if (!flag)
- {
- log_error (_("issuer certificate is not marked as a CA\n"));
- return GNUPG_Bad_CA_Certificate;
- }
- return 0;
-}
-
-
-static int
-check_cert_policy (KsbaCert cert)
-{
- KsbaError err;
- char *policies;
- FILE *fp;
- int any_critical;
-
- err = ksba_cert_get_cert_policies (cert, &policies);
- if (err == KSBA_No_Data)
- return 0; /* no policy given */
- if (err)
- return map_ksba_err (err);
-
- /* STRING is a line delimited list of certifiate policies as stored
- in the certificate. The line itself is colon delimited where the
- first field is the OID of the policy and the second field either
- N or C for normal or critical extension */
-
- if (opt.verbose > 1)
- log_info ("certificate's policy list: %s\n", policies);
-
- /* The check is very minimal but won't give false positives */
- any_critical = !!strstr (policies, ":C");
-
- if (!opt.policy_file)
- {
- xfree (policies);
- if (any_critical)
- {
- log_error ("critical marked policy without configured policies\n");
- return GNUPG_No_Policy_Match;
- }
- return 0;
- }
-
- fp = fopen (opt.policy_file, "r");
- if (!fp)
- {
- log_error ("failed to open `%s': %s\n",
- opt.policy_file, strerror (errno));
- xfree (policies);
- return GNUPG_No_Policy_Match;
- }
-
- for (;;)
- {
- int c;
- char *p, line[256];
- char *haystack, *allowed;
-
- /* read line */
- do
- {
- if (!fgets (line, DIM(line)-1, fp) )
- {
- xfree (policies);
- if (feof (fp))
- {
- fclose (fp);
- /* with no critical policies this is only a warning */
- if (!any_critical)
- {
- log_info (_("note: certificate policy not allowed\n"));
- return 0;
- }
- log_error (_("certificate policy not allowed\n"));
- return GNUPG_No_Policy_Match;
- }
- fclose (fp);
- return GNUPG_Read_Error;
- }
-
- if (!*line || line[strlen(line)-1] != '\n')
- {
- /* eat until end of line */
- while ( (c=getc (fp)) != EOF && c != '\n')
- ;
- fclose (fp);
- xfree (policies);
- return *line? GNUPG_Line_Too_Long: GNUPG_Incomplete_Line;
- }
-
- /* Allow for empty lines and spaces */
- for (p=line; spacep (p); p++)
- ;
- }
- while (!*p || *p == '\n' || *p == '#');
-
- /* parse line */
- for (allowed=line; spacep (allowed); allowed++)
- ;
- p = strpbrk (allowed, " :\n");
- if (!*p || p == allowed)
- {
- fclose (fp);
- xfree (policies);
- return GNUPG_Configuration_Error;
- }
- *p = 0; /* strip the rest of the line */
- /* See whether we find ALLOWED (which is an OID) in POLICIES */
- for (haystack=policies; (p=strstr (haystack, allowed)); haystack = p+1)
- {
- if ( !(p == policies || p[-1] == '\n') )
- continue; /* does not match the begin of a line */
- if (p[strlen (allowed)] != ':')
- continue; /* the length does not match */
- /* Yep - it does match so return okay */
- fclose (fp);
- xfree (policies);
- return 0;
- }
- }
-}
-
-
-static void
-find_up_store_certs_cb (void *cb_value, KsbaCert cert)
-{
- if (keydb_store_cert (cert, 1, NULL))
- log_error ("error storing issuer certificate as ephemeral\n");
- ++*(int*)cb_value;
-}
-
-
-static int
-find_up (KEYDB_HANDLE kh, KsbaCert cert, const char *issuer)
-{
- KsbaName authid;
- KsbaSexp authidno;
- int rc = -1;
-
- if (!ksba_cert_get_auth_key_id (cert, NULL, &authid, &authidno))
- {
- const char *s = ksba_name_enum (authid, 0);
- if (s && *authidno)
- {
- rc = keydb_search_issuer_sn (kh, s, authidno);
- if (rc)
- keydb_search_reset (kh);
- if (rc == -1)
- { /* And try the ephemeral DB. */
- int old = keydb_set_ephemeral (kh, 1);
- if (!old)
- {
- rc = keydb_search_issuer_sn (kh, s, authidno);
- if (rc)
- keydb_search_reset (kh);
- }
- keydb_set_ephemeral (kh, old);
- }
- }
- /* print a note so that the user does not feel too helpless when
- an issuer certificate was found and gpgsm prints BAD
- signature becuase it is not the correct one. */
- if (rc == -1)
- {
- log_info ("issuer certificate (#");
- gpgsm_dump_serial (authidno);
- log_printf ("/");
- gpgsm_dump_string (s);
- log_printf (") not found\n");
- }
- else if (rc)
- log_error ("failed to find authorityKeyIdentifier: rc=%d\n", rc);
- ksba_name_release (authid);
- xfree (authidno);
- /* Fixme: don't know how to do dirmngr lookup with serial+issuer. */
- }
-
- if (rc) /* not found via authorithyKeyIdentifier, try regular issuer name */
- rc = keydb_search_subject (kh, issuer);
- if (rc == -1)
- {
- /* Not found, lets see whether we have one in the ephemeral key DB. */
- int old = keydb_set_ephemeral (kh, 1);
- if (!old)
- {
- keydb_search_reset (kh);
- rc = keydb_search_subject (kh, issuer);
- }
- keydb_set_ephemeral (kh, old);
- }
-
- if (rc == -1 && opt.auto_issuer_key_retrieve)
- {
- STRLIST names = NULL;
- int count = 0;
- char *pattern;
- const char *s;
-
- if (opt.verbose)
- log_info (_("looking up issuer at external location\n"));
- /* dirmngr is confused about unknown attributes so has a quick
- and ugly hack we locate the CN and use this and the
- following. Fixme: we should have far better parsing in the
- dirmngr. */
- s = strstr (issuer, "CN=");
- if (!s || s == issuer || s[-1] != ',')
- s = issuer;
-
- pattern = xtrymalloc (strlen (s)+2);
- if (!pattern)
- return GNUPG_Out_Of_Core;
- strcpy (stpcpy (pattern, "/"), s);
- add_to_strlist (&names, pattern);
- xfree (pattern);
- rc = gpgsm_dirmngr_lookup (NULL, names, find_up_store_certs_cb, &count);
- free_strlist (names);
- if (opt.verbose)
- log_info (_("number of issuers matching: %d\n"), count);
- if (rc)
- {
- log_error ("external key lookup failed: %s\n", gnupg_strerror (rc));
- rc = -1;
- }
- else if (!count)
- rc = -1;
- else
- {
- int old;
- /* The issuers are currently stored in the ephemeral key
- DB, so we temporary switch to ephemeral mode. */
- old = keydb_set_ephemeral (kh, 1);
- keydb_search_reset (kh);
- rc = keydb_search_subject (kh, issuer);
- keydb_set_ephemeral (kh, old);
- }
- }
- return rc;
-}
-
-
-/* Return the next certificate up in the chain starting at START.
- Returns -1 when there are no more certificates. */
-int
-gpgsm_walk_cert_chain (KsbaCert start, KsbaCert *r_next)
-{
- int rc = 0;
- char *issuer = NULL;
- char *subject = NULL;
- KEYDB_HANDLE kh = keydb_new (0);
-
- *r_next = NULL;
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- issuer = ksba_cert_get_issuer (start, 0);
- subject = ksba_cert_get_subject (start, 0);
- if (!issuer)
- {
- log_error ("no issuer found in certificate\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
- if (!subject)
- {
- log_error ("no subject found in certificate\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
-
- if (!strcmp (issuer, subject))
- {
- rc = -1; /* we are at the root */
- goto leave;
- }
-
- rc = find_up (kh, start, issuer);
- if (rc)
- {
- /* it is quite common not to have a certificate, so better don't
- print an error here */
- if (rc != -1 && opt.verbose > 1)
- log_error ("failed to find issuer's certificate: rc=%d\n", rc);
- rc = GNUPG_Missing_Certificate;
- goto leave;
- }
-
- rc = keydb_get_cert (kh, r_next);
- if (rc)
- {
- log_error ("failed to get cert: rc=%d\n", rc);
- rc = GNUPG_General_Error;
- }
-
- leave:
- xfree (issuer);
- xfree (subject);
- keydb_release (kh);
- return rc;
-}
-
-
-/* Check whether the CERT is a root certificate. Returns True if this
- is the case. */
-int
-gpgsm_is_root_cert (KsbaCert cert)
-{
- char *issuer;
- char *subject;
- int yes;
-
- issuer = ksba_cert_get_issuer (cert, 0);
- subject = ksba_cert_get_subject (cert, 0);
- yes = (issuer && subject && !strcmp (issuer, subject));
- xfree (issuer);
- xfree (subject);
- return yes;
-}
-
-
-/* Validate a chain and optionally return the nearest expiration time
- in R_EXPTIME */
-int
-gpgsm_validate_chain (CTRL ctrl, KsbaCert cert, time_t *r_exptime)
-{
- int rc = 0, depth = 0, maxdepth;
- char *issuer = NULL;
- char *subject = NULL;
- KEYDB_HANDLE kh = keydb_new (0);
- KsbaCert subject_cert = NULL, issuer_cert = NULL;
- time_t current_time = gnupg_get_time ();
- time_t exptime = 0;
- int any_expired = 0;
- int any_revoked = 0;
- int any_no_crl = 0;
- int any_crl_too_old = 0;
- int any_no_policy_match = 0;
-
- if (r_exptime)
- *r_exptime = 0;
-
- if (opt.no_chain_validation)
- {
- log_info ("WARNING: bypassing certificate chain validation\n");
- return 0;
- }
-
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- if (DBG_X509)
- gpgsm_dump_cert ("subject", cert);
-
- subject_cert = cert;
- maxdepth = 50;
-
- for (;;)
- {
- xfree (issuer);
- xfree (subject);
- issuer = ksba_cert_get_issuer (subject_cert, 0);
- subject = ksba_cert_get_subject (subject_cert, 0);
-
- if (!issuer)
- {
- log_error ("no issuer found in certificate\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
-
- {
- time_t not_before, not_after;
-
- not_before = ksba_cert_get_validity (subject_cert, 0);
- not_after = ksba_cert_get_validity (subject_cert, 1);
- if (not_before == (time_t)(-1) || not_after == (time_t)(-1))
- {
- log_error ("certificate with invalid validity\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
-
- if (not_after)
- {
- if (!exptime)
- exptime = not_after;
- else if (not_after < exptime)
- exptime = not_after;
- }
-
- if (not_before && current_time < not_before)
- {
- log_error ("certificate too young; valid from ");
- gpgsm_dump_time (not_before);
- log_printf ("\n");
- rc = GNUPG_Certificate_Too_Young;
- goto leave;
- }
- if (not_after && current_time > not_after)
- {
- log_error ("certificate has expired at ");
- gpgsm_dump_time (not_after);
- log_printf ("\n");
- any_expired = 1;
- }
- }
-
- rc = unknown_criticals (subject_cert);
- if (rc)
- goto leave;
-
- if (!opt.no_policy_check)
- {
- rc = check_cert_policy (subject_cert);
- if (rc == GNUPG_No_Policy_Match)
- {
- any_no_policy_match = 1;
- rc = 1;
- }
- else if (rc)
- goto leave;
- }
-
- if (!opt.no_crl_check)
- {
- rc = gpgsm_dirmngr_isvalid (subject_cert);
- if (rc)
- {
- switch (rc)
- {
- case GNUPG_Certificate_Revoked:
- log_error (_("the certificate has been revoked\n"));
- any_revoked = 1;
- break;
- case GNUPG_No_CRL_Known:
- log_error (_("no CRL found for certificate\n"));
- any_no_crl = 1;
- break;
- case GNUPG_CRL_Too_Old:
- log_error (_("the available CRL is too old\n"));
- log_info (_("please make sure that the "
- "\"dirmngr\" is properly installed\n"));
- any_crl_too_old = 1;
- break;
- default:
- log_error (_("checking the CRL failed: %s\n"),
- gnupg_strerror (rc));
- goto leave;
- }
- rc = 0;
- }
- }
-
- if (subject && !strcmp (issuer, subject))
- {
- if (gpgsm_check_cert_sig (subject_cert, subject_cert) )
- {
- log_error ("selfsigned certificate has a BAD signatures\n");
- rc = depth? GNUPG_Bad_Certificate_Chain : GNUPG_Bad_Certificate;
- goto leave;
- }
- rc = allowed_ca (subject_cert, NULL);
- if (rc)
- goto leave;
-
- rc = gpgsm_agent_istrusted (subject_cert);
- if (!rc)
- ;
- else if (rc == GNUPG_Not_Trusted)
- {
- int rc2;
-
- char *fpr = gpgsm_get_fingerprint_string (subject_cert,
- GCRY_MD_SHA1);
- log_info (_("root certificate is not marked trusted\n"));
- log_info (_("fingerprint=%s\n"), fpr? fpr : "?");
- xfree (fpr);
- rc2 = gpgsm_agent_marktrusted (subject_cert);
- if (!rc2)
- {
- log_info (_("root certificate has now"
- " been marked as trusted\n"));
- rc = 0;
- }
- else
- {
- gpgsm_dump_cert ("issuer", subject_cert);
- log_info ("after checking the fingerprint, you may want "
- "to enter it manually into "
- "\"~/.gnupg-test/trustlist.txt\"\n");
- }
- }
- else
- {
- log_error (_("checking the trust list failed: %s\n"),
- gnupg_strerror (rc));
- }
-
- break; /* okay, a self-signed certicate is an end-point */
- }
-
- depth++;
- if (depth > maxdepth)
- {
- log_error (_("certificate chain too long\n"));
- rc = GNUPG_Bad_Certificate_Chain;
- goto leave;
- }
-
- /* find the next cert up the tree */
- keydb_search_reset (kh);
- rc = find_up (kh, subject_cert, issuer);
- if (rc)
- {
- if (rc == -1)
- {
- log_info ("issuer certificate (#/");
- gpgsm_dump_string (issuer);
- log_printf (") not found\n");
- }
- else
- log_error ("failed to find issuer's certificate: rc=%d\n", rc);
- rc = GNUPG_Missing_Certificate;
- goto leave;
- }
-
- ksba_cert_release (issuer_cert); issuer_cert = NULL;
- rc = keydb_get_cert (kh, &issuer_cert);
- if (rc)
- {
- log_error ("failed to get cert: rc=%d\n", rc);
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- if (DBG_X509)
- {
- log_debug ("got issuer's certificate:\n");
- gpgsm_dump_cert ("issuer", issuer_cert);
- }
-
- if (gpgsm_check_cert_sig (issuer_cert, subject_cert) )
- {
- log_error ("certificate has a BAD signatures\n");
- rc = GNUPG_Bad_Certificate_Chain;
- goto leave;
- }
-
- {
- int chainlen;
- rc = allowed_ca (issuer_cert, &chainlen);
- if (rc)
- goto leave;
- if (chainlen >= 0 && (depth - 1) > chainlen)
- {
- log_error (_("certificate chain longer than allowed by CA (%d)\n"),
- chainlen);
- rc = GNUPG_Bad_Certificate_Chain;
- goto leave;
- }
- }
-
- rc = gpgsm_cert_use_cert_p (issuer_cert);
- if (rc)
- {
- gpgsm_status2 (ctrl, STATUS_ERROR, "certcert.issuer.keyusage",
- gnupg_error_token (rc), NULL);
- rc = 0;
- }
-
- if (opt.verbose)
- log_info ("certificate is good\n");
-
- keydb_search_reset (kh);
- subject_cert = issuer_cert;
- issuer_cert = NULL;
- }
-
- if (opt.no_policy_check)
- log_info ("policies not checked due to --disable-policy-checks option\n");
- if (opt.no_crl_check)
- log_info ("CRLs not checked due to --disable-crl-checks option\n");
-
- if (!rc)
- { /* If we encountered an error somewhere during the checks, set
- the error code to the most critical one */
- if (any_revoked)
- rc = GNUPG_Certificate_Revoked;
- else if (any_no_crl)
- rc = GNUPG_No_CRL_Known;
- else if (any_crl_too_old)
- rc = GNUPG_CRL_Too_Old;
- else if (any_no_policy_match)
- rc = GNUPG_No_Policy_Match;
- else if (any_expired)
- rc = GNUPG_Certificate_Expired;
- }
-
- leave:
- if (r_exptime)
- *r_exptime = exptime;
- xfree (issuer);
- keydb_release (kh);
- ksba_cert_release (issuer_cert);
- if (subject_cert != cert)
- ksba_cert_release (subject_cert);
- return rc;
-}
-
-
-/* Check that the given certificate is valid but DO NOT check any
- constraints. We assume that the issuers certificate is already in
- the DB and that this one is valid; which it should be because it
- has been checked using this function. */
-int
-gpgsm_basic_cert_check (KsbaCert cert)
-{
- int rc = 0;
- char *issuer = NULL;
- char *subject = NULL;
- KEYDB_HANDLE kh = keydb_new (0);
- KsbaCert issuer_cert = NULL;
-
- if (opt.no_chain_validation)
- {
- log_info ("WARNING: bypassing basic certificate checks\n");
- return 0;
- }
-
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- issuer = ksba_cert_get_issuer (cert, 0);
- subject = ksba_cert_get_subject (cert, 0);
- if (!issuer)
- {
- log_error ("no issuer found in certificate\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
-
- if (subject && !strcmp (issuer, subject))
- {
- if (gpgsm_check_cert_sig (cert, cert) )
- {
- log_error ("selfsigned certificate has a BAD signatures\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
- }
- else
- {
- /* find the next cert up the tree */
- keydb_search_reset (kh);
- rc = find_up (kh, cert, issuer);
- if (rc)
- {
- if (rc == -1)
- {
- log_info ("issuer certificate (#/");
- gpgsm_dump_string (issuer);
- log_printf (") not found\n");
- }
- else
- log_error ("failed to find issuer's certificate: rc=%d\n", rc);
- rc = GNUPG_Missing_Certificate;
- goto leave;
- }
-
- ksba_cert_release (issuer_cert); issuer_cert = NULL;
- rc = keydb_get_cert (kh, &issuer_cert);
- if (rc)
- {
- log_error ("failed to get cert: rc=%d\n", rc);
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- if (gpgsm_check_cert_sig (issuer_cert, cert) )
- {
- log_error ("certificate has a BAD signatures\n");
- rc = GNUPG_Bad_Certificate;
- goto leave;
- }
- if (opt.verbose)
- log_info ("certificate is good\n");
- }
-
- leave:
- xfree (issuer);
- keydb_release (kh);
- ksba_cert_release (issuer_cert);
- return rc;
-}
-
diff --git a/sm/certcheck.c b/sm/certcheck.c
deleted file mode 100644
index 37d2b00df..000000000
--- a/sm/certcheck.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/* certcheck.c - check one certificate
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-
-static int
-do_encode_md (GCRY_MD_HD md, int algo, unsigned int nbits,
- GCRY_MPI *r_val)
-{
- int nframe = (nbits+7) / 8;
- byte *frame;
- int i, n;
- byte asn[100];
- size_t asnlen;
- size_t len;
-
- asnlen = DIM(asn);
- if (gcry_md_algo_info (algo, GCRYCTL_GET_ASNOID, asn, &asnlen))
- {
- log_error ("No object identifier for algo %d\n", algo);
- return GNUPG_Internal_Error;
- }
-
- len = gcry_md_get_algo_dlen (algo);
-
- if ( len + asnlen + 4 > nframe )
- {
- log_error ("can't encode a %d bit MD into a %d bits frame\n",
- (int)(len*8), (int)nbits);
- return GNUPG_Internal_Error;
- }
-
- /* We encode the MD in this way:
- *
- * 0 A PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes)
- *
- * PAD consists of FF bytes.
- */
- frame = xtrymalloc (nframe);
- if (!frame)
- return GNUPG_Out_Of_Core;
- n = 0;
- frame[n++] = 0;
- frame[n++] = 1; /* block type */
- i = nframe - len - asnlen -3 ;
- assert ( i > 1 );
- memset ( frame+n, 0xff, i ); n += i;
- frame[n++] = 0;
- memcpy ( frame+n, asn, asnlen ); n += asnlen;
- memcpy ( frame+n, gcry_md_read(md, algo), len ); n += len;
- assert ( n == nframe );
- if (DBG_X509)
- {
- int j;
- log_debug ("encoded hash:");
- for (j=0; j < nframe; j++)
- log_printf (" %02X", frame[j]);
- log_printf ("\n");
- }
-
- gcry_mpi_scan (r_val, GCRYMPI_FMT_USG, frame, &nframe);
- xfree (frame);
- return 0;
-}
-
-
-/*
- Check the signature on CERT using the ISSUER-CERT. This function
- does only test the cryptographic signature and nothing else. It is
- assumed that the ISSUER_CERT is valid. */
-int
-gpgsm_check_cert_sig (KsbaCert issuer_cert, KsbaCert cert)
-{
- const char *algoid;
- GCRY_MD_HD md;
- int rc, algo;
- GCRY_MPI frame;
- KsbaSexp p;
- size_t n;
- GCRY_SEXP s_sig, s_hash, s_pkey;
-
- algo = gcry_md_map_name ( (algoid=ksba_cert_get_digest_algo (cert)));
- if (!algo)
- {
- log_error ("unknown hash algorithm `%s'\n", algoid? algoid:"?");
- return GNUPG_General_Error;
- }
- md = gcry_md_open (algo, 0);
- if (!md)
- {
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- return GNUPG_General_Error;
- }
- if (DBG_HASHING)
- gcry_md_start_debug (md, "hash.cert");
-
- rc = ksba_cert_hash (cert, 1, HASH_FNC, md);
- if (rc)
- {
- log_error ("ksba_cert_hash failed: %s\n", ksba_strerror (rc));
- gcry_md_close (md);
- return map_ksba_err (rc);
- }
- gcry_md_final (md);
-
- p = ksba_cert_get_sig_val (cert);
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- if (!n)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- gcry_md_close (md);
- ksba_free (p);
- return GNUPG_Bug;
- }
- if (DBG_X509)
- {
- int j;
- log_debug ("signature value:");
- for (j=0; j < n; j++)
- log_printf (" %02X", p[j]);
- log_printf ("\n");
- }
-
- rc = gcry_sexp_sscan ( &s_sig, NULL, p, n);
- ksba_free (p);
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- gcry_md_close (md);
- return map_gcry_err (rc);
- }
-
- p = ksba_cert_get_public_key (issuer_cert);
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- if (!n)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- gcry_md_close (md);
- ksba_free (p);
- gcry_sexp_release (s_sig);
- return GNUPG_Bug;
- }
- rc = gcry_sexp_sscan ( &s_pkey, NULL, p, n);
- ksba_free (p);
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- gcry_md_close (md);
- gcry_sexp_release (s_sig);
- return map_gcry_err (rc);
- }
-
- rc = do_encode_md (md, algo, gcry_pk_get_nbits (s_pkey), &frame);
- if (rc)
- {
- gcry_md_close (md);
- gcry_sexp_release (s_sig);
- gcry_sexp_release (s_pkey);
- return rc;
- }
-
- /* put hash into the S-Exp s_hash */
- if ( gcry_sexp_build (&s_hash, NULL, "%m", frame) )
- BUG ();
- gcry_mpi_release (frame);
-
-
- rc = gcry_pk_verify (s_sig, s_hash, s_pkey);
- if (DBG_CRYPTO)
- log_debug ("gcry_pk_verify: %s\n", gcry_strerror (rc));
- gcry_md_close (md);
- gcry_sexp_release (s_sig);
- gcry_sexp_release (s_hash);
- gcry_sexp_release (s_pkey);
- return map_gcry_err (rc);
-}
-
-
-
-int
-gpgsm_check_cms_signature (KsbaCert cert, KsbaConstSexp sigval,
- GCRY_MD_HD md, int algo)
-{
- int rc;
- KsbaSexp p;
- GCRY_MPI frame;
- GCRY_SEXP s_sig, s_hash, s_pkey;
- size_t n;
-
- n = gcry_sexp_canon_len (sigval, 0, NULL, NULL);
- if (!n)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- return GNUPG_Bug;
- }
- rc = gcry_sexp_sscan (&s_sig, NULL, sigval, n);
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- return map_gcry_err (rc);
- }
-
- p = ksba_cert_get_public_key (cert);
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- if (!n)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- ksba_free (p);
- gcry_sexp_release (s_sig);
- return GNUPG_Bug;
- }
- if (DBG_X509)
- log_printhex ("public key: ", p, n);
-
- rc = gcry_sexp_sscan ( &s_pkey, NULL, p, n);
- ksba_free (p);
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- gcry_sexp_release (s_sig);
- return map_gcry_err (rc);
- }
-
-
- rc = do_encode_md (md, algo, gcry_pk_get_nbits (s_pkey), &frame);
- if (rc)
- {
- gcry_sexp_release (s_sig);
- gcry_sexp_release (s_pkey);
- return rc;
- }
- /* put hash into the S-Exp s_hash */
- if ( gcry_sexp_build (&s_hash, NULL, "%m", frame) )
- BUG ();
- gcry_mpi_release (frame);
-
-
- rc = gcry_pk_verify (s_sig, s_hash, s_pkey);
- if (DBG_CRYPTO)
- log_debug ("gcry_pk_verify: %s\n", gcry_strerror (rc));
- gcry_sexp_release (s_sig);
- gcry_sexp_release (s_hash);
- gcry_sexp_release (s_sig);
- return map_gcry_err (rc);
-}
-
-
-
-int
-gpgsm_create_cms_signature (KsbaCert cert, GCRY_MD_HD md, int mdalgo,
- char **r_sigval)
-{
- int rc;
- char *grip;
- size_t siglen;
-
- grip = gpgsm_get_keygrip_hexstring (cert);
- if (!grip)
- return seterr (Bad_Certificate);
-
- rc = gpgsm_agent_pksign (grip, gcry_md_read(md, mdalgo),
- gcry_md_get_algo_dlen (mdalgo), mdalgo,
- r_sigval, &siglen);
- xfree (grip);
- return rc;
-}
-
-
-
diff --git a/sm/certdump.c b/sm/certdump.c
deleted file mode 100644
index 9afb1154d..000000000
--- a/sm/certdump.c
+++ /dev/null
@@ -1,457 +0,0 @@
-/* certdump.c - Dump a certificate for debugging
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-struct dn_array_s {
- char *key;
- char *value;
-};
-
-
-/* print the first element of an S-Expression */
-void
-gpgsm_print_serial (FILE *fp, KsbaConstSexp p)
-{
- unsigned long n;
- KsbaConstSexp endp;
-
- if (!p)
- fputs (_("none"), fp);
- else if (*p != '(')
- fputs ("[Internal error - not an S-expression]", fp);
- else
- {
- p++;
- n = strtoul (p, (char**)&endp, 10);
- p = endp;
- if (*p!=':')
- fputs ("[Internal Error - invalid S-expression]", fp);
- else
- {
- for (p++; n; n--, p++)
- fprintf (fp, "%02X", *p);
- }
- }
-}
-
-
-void
-gpgsm_dump_serial (KsbaConstSexp p)
-{
- unsigned long n;
- KsbaConstSexp endp;
-
- if (!p)
- log_printf ("none");
- else if (*p != '(')
- log_printf ("ERROR - not an S-expression");
- else
- {
- p++;
- n = strtoul (p, (char**)&endp, 10);
- p = endp;
- if (*p!=':')
- log_printf ("ERROR - invalid S-expression");
- else
- {
- for (p++; n; n--, p++)
- log_printf ("%02X", *p);
- }
- }
-}
-
-void
-gpgsm_print_time (FILE *fp, time_t t)
-{
- if (!t)
- fputs (_("none"), fp);
- else if ( t == (time_t)(-1) )
- fputs ("[Error - Invalid time]", fp);
- else
- {
- struct tm *tp;
-
- tp = gmtime (&t);
- fprintf (fp, "%04d-%02d-%02d %02d:%02d:%02d Z",
- 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday,
- tp->tm_hour, tp->tm_min, tp->tm_sec);
- assert (!tp->tm_isdst);
- }
-}
-
-void
-gpgsm_dump_time (time_t t)
-{
-
- if (!t)
- log_printf (_("[none]"));
- else if ( t == (time_t)(-1) )
- log_printf (_("[error]"));
- else
- {
- struct tm *tp;
-
- tp = gmtime (&t);
- log_printf ("%04d-%02d-%02d %02d:%02d:%02d",
- 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday,
- tp->tm_hour, tp->tm_min, tp->tm_sec);
- assert (!tp->tm_isdst);
- }
-}
-
-
-
-
-void
-gpgsm_dump_string (const char *string)
-{
-
- if (!string)
- log_printf ("[error]");
- else
- {
- const unsigned char *s;
-
- for (s=string; *s; s++)
- {
- if (*s < ' ' || (*s >= 0x7f && *s <= 0xa0))
- break;
- }
- if (!*s && *string != '[')
- log_printf ("%s", string);
- else
- {
- log_printf ( "[ ");
- log_printhex (NULL, string, strlen (string));
- log_printf ( " ]");
- }
- }
-}
-
-
-void
-gpgsm_dump_cert (const char *text, KsbaCert cert)
-{
- KsbaSexp sexp;
- unsigned char *p;
- char *dn;
- time_t t;
-
- log_debug ("BEGIN Certificate `%s':\n", text? text:"");
- if (cert)
- {
- sexp = ksba_cert_get_serial (cert);
- log_debug (" serial: ");
- gpgsm_dump_serial (sexp);
- ksba_free (sexp);
- log_printf ("\n");
-
- t = ksba_cert_get_validity (cert, 0);
- log_debug (" notBefore: ");
- gpgsm_dump_time (t);
- log_printf ("\n");
- t = ksba_cert_get_validity (cert, 1);
- log_debug (" notAfter: ");
- gpgsm_dump_time (t);
- log_printf ("\n");
-
- dn = ksba_cert_get_issuer (cert, 0);
- log_debug (" issuer: ");
- gpgsm_dump_string (dn);
- ksba_free (dn);
- log_printf ("\n");
-
- dn = ksba_cert_get_subject (cert, 0);
- log_debug (" subject: ");
- gpgsm_dump_string (dn);
- ksba_free (dn);
- log_printf ("\n");
-
- log_debug (" hash algo: %s\n", ksba_cert_get_digest_algo (cert));
-
- p = gpgsm_get_fingerprint_string (cert, 0);
- log_debug (" SHA1 Fingerprint: %s\n", p);
- xfree (p);
- }
- log_debug ("END Certificate\n");
-}
-
-
-
-/* helper for the rfc2253 string parser */
-static const unsigned char *
-parse_dn_part (struct dn_array_s *array, const unsigned char *string)
-{
- const unsigned char *s, *s1;
- size_t n;
- unsigned char *p;
-
- /* parse attributeType */
- for (s = string+1; *s && *s != '='; s++)
- ;
- if (!*s)
- return NULL; /* error */
- n = s - string;
- if (!n)
- return NULL; /* empty key */
- array->key = p = xtrymalloc (n+1);
- if (!array->key)
- return NULL;
- memcpy (p, string, n);
- p[n] = 0;
- trim_trailing_spaces (p);
- if ( !strcmp (p, "1.2.840.113549.1.9.1") )
- strcpy (p, "EMail");
- string = s + 1;
-
- if (*string == '#')
- { /* hexstring */
- string++;
- for (s=string; hexdigitp (s); s++)
- s++;
- n = s - string;
- if (!n || (n & 1))
- return NULL; /* empty or odd number of digits */
- n /= 2;
- array->value = p = xtrymalloc (n+1);
- if (!p)
- return NULL;
- for (s1=string; n; s1 += 2, n--)
- *p++ = xtoi_2 (s1);
- *p = 0;
- }
- else
- { /* regular v3 quoted string */
- for (n=0, s=string; *s; s++)
- {
- if (*s == '\\')
- { /* pair */
- s++;
- if (*s == ',' || *s == '=' || *s == '+'
- || *s == '<' || *s == '>' || *s == '#' || *s == ';'
- || *s == '\\' || *s == '\"' || *s == ' ')
- n++;
- else if (hexdigitp (s) && hexdigitp (s+1))
- {
- s++;
- n++;
- }
- else
- return NULL; /* invalid escape sequence */
- }
- else if (*s == '\"')
- return NULL; /* invalid encoding */
- else if (*s == ',' || *s == '=' || *s == '+'
- || *s == '<' || *s == '>' || *s == '#' || *s == ';' )
- break;
- else
- n++;
- }
-
- array->value = p = xtrymalloc (n+1);
- if (!p)
- return NULL;
- for (s=string; n; s++, n--)
- {
- if (*s == '\\')
- {
- s++;
- if (hexdigitp (s))
- {
- *p++ = xtoi_2 (s);
- s++;
- }
- else
- *p++ = *s;
- }
- else
- *p++ = *s;
- }
- *p = 0;
- }
- return s;
-}
-
-
-/* Parse a DN and return an array-ized one. This is not a validating
- parser and it does not support any old-stylish syntax; KSBA is
- expected to return only rfc2253 compatible strings. */
-static struct dn_array_s *
-parse_dn (const unsigned char *string)
-{
- struct dn_array_s *array;
- size_t arrayidx, arraysize;
- int i;
-
- arraysize = 7; /* C,ST,L,O,OU,CN,email */
- arrayidx = 0;
- array = xtrymalloc ((arraysize+1) * sizeof *array);
- if (!array)
- return NULL;
- while (*string)
- {
- while (*string == ' ')
- string++;
- if (!*string)
- break; /* ready */
- if (arrayidx >= arraysize)
- {
- struct dn_array_s *a2;
-
- arraysize += 5;
- a2 = xtryrealloc (array, (arraysize+1) * sizeof *array);
- if (!a2)
- goto failure;
- array = a2;
- }
- array[arrayidx].key = NULL;
- array[arrayidx].value = NULL;
- string = parse_dn_part (array+arrayidx, string);
- arrayidx++;
- if (!string)
- goto failure;
- while (*string == ' ')
- string++;
- if (*string && *string != ',' && *string != ';' && *string != '+')
- goto failure; /* invalid delimiter */
- if (*string)
- string++;
- }
- array[arrayidx].key = NULL;
- array[arrayidx].value = NULL;
- return array;
-
- failure:
- for (i=0; i < arrayidx; i++)
- {
- xfree (array[i].key);
- xfree (array[i].value);
- }
- xfree (array);
- return NULL;
-}
-
-
-static void
-print_dn_part (FILE *fp, struct dn_array_s *dn, const char *key)
-{
- int any = 0;
-
- for (; dn->key; dn++)
- {
- if (!strcmp (dn->key, key) && dn->value && *dn->value)
- {
- putc ('/', fp);
- if (any)
- fputs (" + ", fp);
- else
- fprintf (fp, "%s=", key);
- print_sanitized_utf8_string (fp, dn->value, '/');
- any = 1;
- }
- }
-}
-
-/* Print all parts of a DN in a "standard" sequence. We first print
- all the known parts, followed by the uncommon ones */
-static void
-print_dn_parts (FILE *fp, struct dn_array_s *dn)
-{
- const char *stdpart[] = {
- "CN", "OU", "O", "STREET", "L", "ST", "C", "EMail", NULL
- };
- int i;
-
- for (i=0; stdpart[i]; i++)
- print_dn_part (fp, dn, stdpart[i]);
-
- /* now print the rest without any specific ordering */
- for (; dn->key; dn++)
- {
- for (i=0; stdpart[i]; i++)
- {
- if (!strcmp (dn->key, stdpart[i]))
- break;
- }
- if (!stdpart[i])
- print_dn_part (fp, dn, dn->key);
- }
-}
-
-
-
-void
-gpgsm_print_name (FILE *fp, const char *name)
-{
- const unsigned char *s;
- int i;
-
- s = name;
- if (!s)
- {
- fputs (_("[Error - No name]"), fp);
- }
- else if (*s == '<')
- {
- const unsigned char *s2 = strchr (s+1, '>');
- if (s2)
- print_sanitized_utf8_buffer (fp, s + 1, s2 - s - 1, 0);
- }
- else if (*s == '(')
- fputs (_("[Error - unknown encoding]"), fp);
- else if (!((*s >= '0' && *s < '9')
- || (*s >= 'A' && *s <= 'Z')
- || (*s >= 'a' && *s <= 'z')))
- fputs (_("[Error - invalid encoding]"), fp);
- else
- {
- struct dn_array_s *dn = parse_dn (s);
- if (!dn)
- fputs (_("[Error - invalid DN]"), fp);
- else
- {
- print_dn_parts (fp, dn);
- for (i=0; dn[i].key; i++)
- {
- xfree (dn[i].key);
- xfree (dn[i].value);
- }
- xfree (dn);
- }
- }
-}
-
-
-
diff --git a/sm/certlist.c b/sm/certlist.c
deleted file mode 100644
index f31e6ee2b..000000000
--- a/sm/certlist.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/* certlist.c - build list of certificates
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-/* Return 0 if the cert is usable for encryption. A MODE of 0 checks
- for signing a MODE of 1 checks for encryption, a MODE of 2 checks
- for verification and a MODE of 3 for decryption (just for
- debugging) */
-static int
-cert_usage_p (KsbaCert cert, int mode)
-{
- KsbaError err;
- unsigned int use;
-
- err = ksba_cert_get_key_usage (cert, &use);
- if (err == KSBA_No_Data)
- {
- if (opt.verbose && mode < 2)
- log_info (mode?
- _("no key usage specified - accepted for encryption\n"):
- _("no key usage specified - accepted for signing\n"));
- return 0;
- }
- if (err)
- {
- log_error (_("error getting key usage information: %s\n"),
- ksba_strerror (err));
- return map_ksba_err (err);
- }
-
- if (mode == 4)
- {
- if ((use & (KSBA_KEYUSAGE_KEY_CERT_SIGN)))
- return 0;
- log_info ( _("certificate should have not been used certification\n"));
- return GNUPG_Wrong_Key_Usage;
- }
-
- if ((use & ((mode&1)?
- (KSBA_KEYUSAGE_KEY_ENCIPHERMENT|KSBA_KEYUSAGE_DATA_ENCIPHERMENT):
- (KSBA_KEYUSAGE_DIGITAL_SIGNATURE|KSBA_KEYUSAGE_NON_REPUDIATION)))
- )
- return 0;
- log_info (mode==3? _("certificate should have not been used for encryption\n"):
- mode==2? _("certificate should have not been used for signing\n"):
- mode==1? _("certificate is not usable for encryption\n"):
- _("certificate is not usable for signing\n"));
- return GNUPG_Wrong_Key_Usage;
-}
-
-
-/* Return 0 if the cert is usable for signing */
-int
-gpgsm_cert_use_sign_p (KsbaCert cert)
-{
- return cert_usage_p (cert, 0);
-}
-
-
-/* Return 0 if the cert is usable for encryption */
-int
-gpgsm_cert_use_encrypt_p (KsbaCert cert)
-{
- return cert_usage_p (cert, 1);
-}
-
-int
-gpgsm_cert_use_verify_p (KsbaCert cert)
-{
- return cert_usage_p (cert, 2);
-}
-
-int
-gpgsm_cert_use_decrypt_p (KsbaCert cert)
-{
- return cert_usage_p (cert, 3);
-}
-
-int
-gpgsm_cert_use_cert_p (KsbaCert cert)
-{
- return cert_usage_p (cert, 4);
-}
-
-
-static int
-same_subject_issuer (const char *subject, const char *issuer, KsbaCert cert)
-{
- char *subject2 = ksba_cert_get_subject (cert, 0);
- char *issuer2 = ksba_cert_get_subject (cert, 0);
- int tmp;
-
- tmp = (subject && subject2
- && !strcmp (subject, subject2)
- && issuer && issuer2
- && !strcmp (issuer, issuer2));
- xfree (subject2);
- xfree (issuer2);
- return tmp;
-}
-
-
-
-/* Add a certificate to a list of certificate and make sure that it is
- a valid certificate. With SECRET set to true a secret key must be
- avaibale for the certificate. */
-int
-gpgsm_add_to_certlist (CTRL ctrl, const char *name, int secret,
- CERTLIST *listaddr)
-{
- int rc;
- KEYDB_SEARCH_DESC desc;
- KEYDB_HANDLE kh = NULL;
- KsbaCert cert = NULL;
-
- rc = keydb_classify_name (name, &desc);
- if (!rc)
- {
- kh = keydb_new (0);
- if (!kh)
- rc = GNUPG_Out_Of_Core;
- else
- {
- int wrong_usage = 0;
- char *subject = NULL;
- char *issuer = NULL;
-
- get_next:
- rc = keydb_search (kh, &desc, 1);
- if (!rc)
- rc = keydb_get_cert (kh, &cert);
- if (!rc)
- {
- rc = secret? gpgsm_cert_use_sign_p (cert)
- : gpgsm_cert_use_encrypt_p (cert);
- if (rc == GNUPG_Wrong_Key_Usage)
- {
- /* There might be another certificate with the
- correct usage, so we try again */
- if (!wrong_usage)
- { /* save the first match */
- wrong_usage = rc;
- subject = ksba_cert_get_subject (cert, 0);
- issuer = ksba_cert_get_subject (cert, 0);
- ksba_cert_release (cert);
- cert = NULL;
- goto get_next;
- }
- else if (same_subject_issuer (subject, issuer, cert))
- {
- wrong_usage = rc;
- ksba_cert_release (cert);
- cert = NULL;
- goto get_next;
- }
- else
- wrong_usage = rc;
-
- }
- }
- /* we want the error code from the first match in this case */
- if (rc && wrong_usage)
- rc = wrong_usage;
-
- if (!rc)
- {
- next_ambigious:
- rc = keydb_search (kh, &desc, 1);
- if (rc == -1)
- rc = 0;
- else if (!rc)
- {
- KsbaCert cert2 = NULL;
-
- /* We have to ignore ambigious names as long as
- there only fault is a bad key usage */
- if (!keydb_get_cert (kh, &cert2))
- {
- int tmp = (same_subject_issuer (subject, issuer, cert2)
- && ((secret? gpgsm_cert_use_sign_p (cert2):
- gpgsm_cert_use_encrypt_p (cert2))
- == GNUPG_Wrong_Key_Usage));
- ksba_cert_release (cert2);
- if (tmp)
- goto next_ambigious;
- }
- rc = GNUPG_Ambiguous_Name;
- }
- }
- xfree (subject);
- xfree (issuer);
-
- if (!rc && secret)
- {
- char *p;
-
- rc = GNUPG_No_Secret_Key;
- p = gpgsm_get_keygrip_hexstring (cert);
- if (p)
- {
- if (!gpgsm_agent_havekey (p))
- rc = 0;
- xfree (p);
- }
- }
- if (!rc)
- rc = gpgsm_validate_chain (ctrl, cert, NULL);
- if (!rc)
- {
- CERTLIST cl = xtrycalloc (1, sizeof *cl);
- if (!cl)
- rc = GNUPG_Out_Of_Core;
- else
- {
- cl->cert = cert; cert = NULL;
- cl->next = *listaddr;
- *listaddr = cl;
- }
- }
- }
- }
-
- keydb_release (kh);
- ksba_cert_release (cert);
- return rc == -1? GNUPG_No_Public_Key: rc;
-}
-
-void
-gpgsm_release_certlist (CERTLIST list)
-{
- while (list)
- {
- CERTLIST cl = list->next;
- ksba_cert_release (list->cert);
- xfree (list);
- list = cl;
- }
-}
-
-
-/* Like gpgsm_add_to_certlist, but look only for one certificate. No
- chain validation is done */
-int
-gpgsm_find_cert (const char *name, KsbaCert *r_cert)
-{
- int rc;
- KEYDB_SEARCH_DESC desc;
- KEYDB_HANDLE kh = NULL;
-
- *r_cert = NULL;
- rc = keydb_classify_name (name, &desc);
- if (!rc)
- {
- kh = keydb_new (0);
- if (!kh)
- rc = GNUPG_Out_Of_Core;
- else
- {
- rc = keydb_search (kh, &desc, 1);
- if (!rc)
- rc = keydb_get_cert (kh, r_cert);
- if (!rc)
- {
- rc = keydb_search (kh, &desc, 1);
- if (rc == -1)
- rc = 0;
- else
- {
- if (!rc)
- rc = GNUPG_Ambiguous_Name;
- ksba_cert_release (*r_cert);
- *r_cert = NULL;
- }
- }
- }
- }
-
- keydb_release (kh);
- return rc == -1? GNUPG_No_Public_Key: rc;
-}
-
diff --git a/sm/certreqgen.c b/sm/certreqgen.c
deleted file mode 100644
index 600a278bc..000000000
--- a/sm/certreqgen.c
+++ /dev/null
@@ -1,699 +0,0 @@
-/* certreqgen.c - Generate a key and a certification request
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/*
-The format of the native parameter file is follows:
- o Text only, line length is limited to about 1000 chars.
- o You must use UTF-8 encoding to specify non-ascii characters.
- o Empty lines are ignored.
- o Leading and trailing spaces are ignored.
- o A hash sign as the first non white space character is a comment line.
- o Control statements are indicated by a leading percent sign, the
- arguments are separated by white space from the keyword.
- o Parameters are specified by a keyword, followed by a colon. Arguments
- are separated by white space.
- o The first parameter must be "Key-Type", control statements
- may be placed anywhere.
- o Key generation takes place when either the end of the parameter file
- is reached, the next "Key-Type" parameter is encountered or at the
- controlstatement "%commit"
- o Control statements:
- %echo <text>
- Print <text>.
- %dry-run
- Suppress actual key generation (useful for syntax checking).
- %commit
- Perform the key generation. Note that an implicit commit is done
- at the next "Key-Type" parameter.
- %certfile <filename>
- Do not write the certificate to the keyDB but to <filename>.
- This must be given before the first
- commit to take place, duplicate specification of the same filename
- is ignored, the last filename before a commit is used.
- The filename is used until a new filename is used (at commit points)
- and all keys are written to that file. If a new filename is given,
- this file is created (and overwrites an existing one).
- Both control statements must be given.
- o The order of the parameters does not matter except for "Key-Type"
- which must be the first parameter. The parameters are only for the
- generated keyblock and parameters from previous key generations are not
- used. Some syntactically checks may be performed.
- The currently defined parameters are:
- Key-Type: <algo>
- Starts a new parameter block by giving the type of the
- primary key. The algorithm must be capable of signing.
- This is a required parameter. For now the only supported
- algorithm is "rsa".
- Key-Length: <length-in-bits>
- Length of the key in bits. Default is 1024.
- Key-Usage: <usage-list>
- Space or comma delimited list of key usage, allowed values are
- "encrypt" and "sign". This is used to generate the KeyUsage extension.
- Please make sure that the algorithm is capable of this usage. Default
- is to allow encrypt and sign.
- Name-DN: subject name
- This is the DN name of the subject in rfc2253 format.
- Name-Email: <string>
- The ist the email address
-
-Here is an example:
-$ cat >foo <<EOF
-%echo Generating a standard key
-Key-Type: RSA
-Key-Length: 1024
-Name-DN: CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=Düsseldorf,C=DE
-Name-Email: joe@foo.bar
-# Do a commit here, so that we can later print "done" :-)
-%commit
-%echo done
-EOF
-*/
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-
-enum para_name {
- pKEYTYPE,
- pKEYLENGTH,
- pKEYUSAGE,
- pNAMEDN,
- pNAMEEMAIL
-};
-
-struct para_data_s {
- struct para_data_s *next;
- int lnr;
- enum para_name key;
- union {
- unsigned int usage;
- char value[1];
- } u;
-};
-
-struct reqgen_ctrl_s {
- int lnr;
- int dryrun;
- KsbaWriter writer;
-};
-
-
-static int proc_parameters (struct para_data_s *para,
- struct reqgen_ctrl_s *outctrl);
-static int create_request (struct para_data_s *para,
- KsbaConstSexp public,
- struct reqgen_ctrl_s *outctrl);
-
-
-
-static void
-release_parameter_list (struct para_data_s *r)
-{
- struct para_data_s *r2;
-
- for (; r ; r = r2)
- {
- r2 = r->next;
- xfree(r);
- }
-}
-
-static struct para_data_s *
-get_parameter (struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r;
-
- for (r = para; r && r->key != key; r = r->next)
- ;
- return r;
-}
-
-static const char *
-get_parameter_value (struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r = get_parameter (para, key);
- return (r && *r->u.value)? r->u.value : NULL;
-}
-
-static int
-get_parameter_algo (struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r = get_parameter (para, key);
- if (!r)
- return -1;
- if (digitp (r->u.value))
- return atoi( r->u.value );
- return gcry_pk_map_name (r->u.value);
-}
-
-/* parse the usage parameter. Returns 0 on success. Note that we
- only care about sign and encrypt and don't (yet) allow all the
- other X.509 usage to be specified; instead we will use a fixed
- mapping to the X.509 usage flags */
-static int
-parse_parameter_usage (struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r = get_parameter (para, key);
- char *p, *pn;
- unsigned int use;
-
- if (!r)
- return 0; /* none (this is an optional parameter)*/
-
- use = 0;
- pn = r->u.value;
- while ( (p = strsep (&pn, " \t,")) )
- {
- if (!*p)
- ;
- else if ( !ascii_strcasecmp (p, "sign") )
- use |= GCRY_PK_USAGE_SIGN;
- else if ( !ascii_strcasecmp (p, "encrypt") )
- use |= GCRY_PK_USAGE_ENCR;
- else
- {
- log_error ("line %d: invalid usage list\n", r->lnr);
- return -1; /* error */
- }
- }
- r->u.usage = use;
- return 0;
-}
-
-
-static unsigned int
-get_parameter_uint (struct para_data_s *para, enum para_name key)
-{
- struct para_data_s *r = get_parameter (para, key);
-
- if (!r)
- return 0;
-
- return (unsigned int)strtoul (r->u.value, NULL, 10);
-}
-
-
-
-/* Read the certificate generation parameters from FP and generate
- (all) certificate requests. */
-static int
-read_parameters (FILE *fp, KsbaWriter writer)
-{
- static struct {
- const char *name;
- enum para_name key;
- } keywords[] = {
- { "Key-Type", pKEYTYPE},
- { "Key-Length", pKEYLENGTH },
- { "Key-Usage", pKEYUSAGE },
- { "Name-DN", pNAMEDN },
- { "Name-Email", pNAMEEMAIL },
- { NULL, 0 }
- };
- char line[1024], *p;
- const char *err = NULL;
- struct para_data_s *para, *r;
- int i, rc = 0, any = 0;
- struct reqgen_ctrl_s outctrl;
-
- memset (&outctrl, 0, sizeof (outctrl));
- outctrl.writer = writer;
-
- err = NULL;
- para = NULL;
- while (fgets (line, DIM(line)-1, fp) )
- {
- char *keyword, *value;
-
- outctrl.lnr++;
- if (*line && line[strlen(line)-1] != '\n')
- {
- err = "line too long";
- break;
- }
- for (p=line; spacep (p); p++)
- ;
- if (!*p || *p == '#')
- continue;
-
- keyword = p;
- if (*keyword == '%')
- {
- for (; !spacep (p); p++)
- ;
- if (*p)
- *p++ = 0;
- for (; spacep (p); p++)
- ;
- value = p;
- trim_trailing_spaces (value);
-
- if (!ascii_strcasecmp (keyword, "%echo"))
- log_info ("%s\n", value);
- else if (!ascii_strcasecmp (keyword, "%dry-run"))
- outctrl.dryrun = 1;
- else if (!ascii_strcasecmp( keyword, "%commit"))
- {
- rc = proc_parameters (para, &outctrl);
- if (rc)
- goto leave;
- any = 1;
- release_parameter_list (para);
- para = NULL;
- }
- else
- log_info ("skipping control `%s' (%s)\n", keyword, value);
-
- continue;
- }
-
-
- if (!(p = strchr (p, ':')) || p == keyword)
- {
- err = "missing colon";
- break;
- }
- if (*p)
- *p++ = 0;
- for (; spacep (p); p++)
- ;
- if (!*p)
- {
- err = "missing argument";
- break;
- }
- value = p;
- trim_trailing_spaces (value);
-
- for (i=0; (keywords[i].name
- && ascii_strcasecmp (keywords[i].name, keyword)); i++)
- ;
- if (!keywords[i].name)
- {
- err = "unknown keyword";
- break;
- }
- if (keywords[i].key != pKEYTYPE && !para)
- {
- err = "parameter block does not start with \"Key-Type\"";
- break;
- }
-
- if (keywords[i].key == pKEYTYPE && para)
- {
- rc = proc_parameters (para, &outctrl);
- if (rc)
- goto leave;
- any = 1;
- release_parameter_list (para);
- para = NULL;
- }
- else
- {
- for (r = para; r && r->key != keywords[i].key; r = r->next)
- ;
- if (r)
- {
- err = "duplicate keyword";
- break;
- }
- }
-
- r = xtrycalloc (1, sizeof *r + strlen( value ));
- if (!r)
- {
- err = "out of core";
- break;
- }
- r->lnr = outctrl.lnr;
- r->key = keywords[i].key;
- strcpy (r->u.value, value);
- r->next = para;
- para = r;
- }
-
- if (err)
- {
- log_error ("line %d: %s\n", outctrl.lnr, err);
- rc = GNUPG_General_Error;
- }
- else if (ferror(fp))
- {
- log_error ("line %d: read error: %s\n", outctrl.lnr, strerror(errno) );
- rc = GNUPG_General_Error;
- }
- else if (para)
- {
- rc = proc_parameters (para, &outctrl);
- if (rc)
- goto leave;
- any = 1;
- }
-
- if (!rc && !any)
- rc = GNUPG_No_Data;
-
- leave:
- release_parameter_list (para);
- return rc;
-}
-
-/* check whether there are invalid characters in the email address S */
-static int
-has_invalid_email_chars (const char *s)
-{
- int at_seen=0;
- static char valid_chars[] = "01234567890_-."
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- for (; *s; s++)
- {
- if (*s & 0x80)
- return 1;
- if (*s == '@')
- at_seen++;
- else if (!at_seen && !( !!strchr (valid_chars, *s) || *s == '+'))
- return 1;
- else if (at_seen && !strchr (valid_chars, *s))
- return 1;
- }
- return at_seen != 1;
-}
-
-
-/* Check that all required parameters are given and perform the action */
-static int
-proc_parameters (struct para_data_s *para, struct reqgen_ctrl_s *outctrl)
-{
- struct para_data_s *r;
- const char *s;
- int i;
- unsigned int nbits;
- char numbuf[20];
- unsigned char keyparms[100];
- int rc;
- KsbaSexp public;
-
- /* check that we have all required parameters */
- assert (get_parameter (para, pKEYTYPE));
-
- /* We can only use RSA for now. There is a with pkcs-10 on how to
- use ElGamal becuase it is expected that a PK algorithm can always
- be used for signing. */
- i = get_parameter_algo (para, pKEYTYPE);
- if (i < 1 || i != GCRY_PK_RSA )
- {
- r = get_parameter (para, pKEYTYPE);
- log_error ("line %d: invalid algorithm\n", r->lnr);
- return GNUPG_Invalid_Parameter;
- }
-
- /* check the keylength */
- if (!get_parameter (para, pKEYLENGTH))
- nbits = 1024;
- else
- nbits = get_parameter_uint (para, pKEYLENGTH);
- if (nbits < 512 || nbits > 4096)
- {
- r = get_parameter (para, pKEYTYPE);
- log_error ("line %d: invalid key length %u (valid are 512 to 4096)\n",
- r->lnr, nbits);
- return GNUPG_Invalid_Parameter;
- }
-
- /* check the usage */
- if (parse_parameter_usage (para, pKEYUSAGE))
- return GNUPG_Invalid_Parameter;
-
- /* check that there is a subject name and that this DN fits our
- requirements */
- if (!(s=get_parameter_value (para, pNAMEDN)))
- {
- r = get_parameter (para, pKEYTYPE);
- log_error ("line %d: no subject name given\n", r->lnr);
- return GNUPG_Invalid_Parameter;
- }
- /* fixme check s */
-
- /* check that the optional email address is okay */
- if ((s=get_parameter_value (para, pNAMEEMAIL)))
- {
- if (has_invalid_email_chars (s)
- || *s == '@'
- || s[strlen(s)-1] == '@'
- || s[strlen(s)-1] == '.'
- || strstr(s, ".."))
- {
- r = get_parameter (para, pKEYTYPE);
- log_error ("line %d: not a valid email address\n", r->lnr);
- return GNUPG_Invalid_Parameter;
- }
- }
-
- sprintf (numbuf, "%u", nbits);
- snprintf (keyparms, DIM (keyparms)-1,
- "(6:genkey(3:rsa(5:nbits%d:%s)))", strlen (numbuf), numbuf);
- rc = gpgsm_agent_genkey (keyparms, &public);
- if (rc)
- {
- r = get_parameter (para, pKEYTYPE);
- log_error ("line %d: key generation failed: %s\n",
- r->lnr, gnupg_strerror (rc));
- return rc;
- }
-
- rc = create_request (para, public, outctrl);
- xfree (public);
-
- return rc;
-}
-
-
-/* Parameters are checked, the key pair has been created. Now
- generate the request and write it out */
-static int
-create_request (struct para_data_s *para, KsbaConstSexp public,
- struct reqgen_ctrl_s *outctrl)
-{
- KsbaCertreq cr;
- KsbaError err;
- GCRY_MD_HD md;
- KsbaStopReason stopreason;
- int rc = 0;
- const char *s;
-
- cr = ksba_certreq_new ();
- if (!cr)
- return seterr (Out_Of_Core);
-
- md = gcry_md_open (GCRY_MD_SHA1, 0);
- if (!md)
- {
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- rc = map_gcry_err (gcry_errno ());
- goto leave;
- }
- if (DBG_HASHING)
- gcry_md_start_debug (md, "cr.cri");
-
- ksba_certreq_set_hash_function (cr, HASH_FNC, md);
- ksba_certreq_set_writer (cr, outctrl->writer);
-
- err = ksba_certreq_add_subject (cr, get_parameter_value (para, pNAMEDN));
- if (err)
- {
- log_error ("error setting the subject's name: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- s = get_parameter_value (para, pNAMEEMAIL);
- if (s)
- {
- char *buf = xtrymalloc (strlen (s) + 3);
-
- if (!buf)
- {
- rc = GNUPG_Out_Of_Core;
- goto leave;
- }
- *buf = '<';
- strcpy (buf+1, s);
- strcat (buf+1, ">");
- err = ksba_certreq_add_subject (cr, buf);
- xfree (buf);
- if (err)
- {
- log_error ("error setting the subject's alternate name: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
-
-
- err = ksba_certreq_set_public_key (cr, public);
- if (err)
- {
- log_error ("error setting the public key: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- do
- {
- err = ksba_certreq_build (cr, &stopreason);
- if (err)
- {
- log_error ("ksba_certreq_build failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- if (stopreason == KSBA_SR_NEED_SIG)
- {
- GCRY_SEXP s_pkey;
- size_t n;
- unsigned char grip[20], hexgrip[41];
- char *sigval;
- size_t siglen;
-
- n = gcry_sexp_canon_len (public, 0, NULL, NULL);
- if (!n)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- err = GNUPG_Bug;
- goto leave;
- }
- rc = gcry_sexp_sscan (&s_pkey, NULL, public, n);
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- rc = map_gcry_err (rc);
- goto leave;
- }
- if ( !gcry_pk_get_keygrip (s_pkey, grip) )
- {
- rc = seterr (General_Error);
- log_error ("can't figure out the keygrip\n");
- gcry_sexp_release (s_pkey);
- goto leave;
- }
- gcry_sexp_release (s_pkey);
- for (n=0; n < 20; n++)
- sprintf (hexgrip+n*2, "%02X", grip[n]);
-
- rc = gpgsm_agent_pksign (hexgrip,
- gcry_md_read(md, GCRY_MD_SHA1),
- gcry_md_get_algo_dlen (GCRY_MD_SHA1),
- GCRY_MD_SHA1,
- &sigval, &siglen);
- if (rc)
- {
- log_error ("signing failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- err = ksba_certreq_set_sig_val (cr, sigval);
- xfree (sigval);
- if (err)
- {
- log_error ("failed to store the sig_val: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
- }
- while (stopreason != KSBA_SR_READY);
-
-
- leave:
- gcry_md_close (md);
- ksba_certreq_release (cr);
- return rc;
-}
-
-
-
-/* Create a new key by reading the parameters from in_fd. Multiple
- keys may be created */
-int
-gpgsm_genkey (CTRL ctrl, int in_fd, FILE *out_fp)
-{
- int rc;
- FILE *in_fp;
- Base64Context b64writer = NULL;
- KsbaWriter writer;
-
- in_fp = fdopen (dup (in_fd), "rb");
- if (!in_fp)
- {
- log_error ("fdopen() failed: %s\n", strerror (errno));
- return seterr (IO_Error);
- }
-
- ctrl->pem_name = "NEW CERTIFICATE REQUEST";
- rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, &writer);
- if (rc)
- {
- log_error ("can't create writer: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- rc = read_parameters (in_fp, writer);
- if (rc)
- {
- log_error ("error creating certificate request: %s\n",
- gnupg_strerror (rc));
- goto leave;
- }
-
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- gpgsm_status (ctrl, STATUS_KEY_CREATED, "P");
- log_info ("certificate request created\n");
-
- leave:
- gpgsm_destroy_writer (b64writer);
- fclose (in_fp);
- return rc;
-}
-
diff --git a/sm/decrypt.c b/sm/decrypt.c
deleted file mode 100644
index 012254e22..000000000
--- a/sm/decrypt.c
+++ /dev/null
@@ -1,502 +0,0 @@
-/* decrypt.c - Decrypt a message
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-struct decrypt_filter_parm_s {
- int algo;
- int mode;
- int blklen;
- GCRY_CIPHER_HD hd;
- char iv[16];
- size_t ivlen;
- int any_data; /* dod we push anything through the filter at all? */
- unsigned char lastblock[16]; /* to strip the padding we have to
- keep this one */
- char helpblock[16]; /* needed because there is no block buffering in
- libgcrypt (yet) */
- int helpblocklen;
-};
-
-
-
-/* decrypt the session key and fill in the parm structure. The
- algo and the IV is expected to be already in PARM. */
-static int
-prepare_decryption (const char *hexkeygrip, KsbaConstSexp enc_val,
- struct decrypt_filter_parm_s *parm)
-{
- char *seskey = NULL;
- size_t n, seskeylen;
- int rc;
-
- rc = gpgsm_agent_pkdecrypt (hexkeygrip, enc_val,
- &seskey, &seskeylen);
- if (rc)
- {
- log_error ("error decrypting session key: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- if (DBG_CRYPTO)
- log_printhex ("pkcs1 encoded session key:", seskey, seskeylen);
-
- n=0;
- if (seskeylen == 24)
- {
- /* Smells like a 3-des key. This might happen because a SC has
- already done the unpacking. fixme! */
- }
- else
- {
- if (n + 7 > seskeylen )
- {
- rc = seterr (Invalid_Session_Key);
- goto leave;
- }
-
- /* FIXME: Actually the leading zero is required but due to the way
- we encode the output in libgcrypt as an MPI we are not able to
- encode that leading zero. However, when using a Smartcard we are
- doing it the rightway and therefore we have to skip the zero. This
- should be fixed in gpg-agent of course. */
- if (!seskey[n])
- n++;
-
- if (seskey[n] != 2 ) /* wrong block type version */
- {
- rc = seterr (Invalid_Session_Key);
- goto leave;
- }
-
- for (n++; n < seskeylen && seskey[n]; n++) /* skip the random bytes */
- ;
- n++; /* and the zero byte */
- if (n >= seskeylen )
- {
- rc = seterr (Invalid_Session_Key);
- goto leave;
- }
- }
-
- if (DBG_CRYPTO)
- log_printhex ("session key:", seskey+n, seskeylen-n);
-
- parm->hd = gcry_cipher_open (parm->algo, parm->mode, 0);
- if (!parm->hd)
- {
- rc = gcry_errno ();
- log_error ("error creating decryptor: %s\n", gcry_strerror (rc));
- rc = map_gcry_err (rc);
- goto leave;
- }
-
- rc = gcry_cipher_setkey (parm->hd, seskey+n, seskeylen-n);
- if (rc == GCRYERR_WEAK_KEY)
- {
- log_info (_("WARNING: message was encrypted with "
- "a weak key in the symmetric cipher.\n"));
- rc = 0;
- }
- if (rc)
- {
- log_error("key setup failed: %s\n", gcry_strerror(rc) );
- rc = map_gcry_err (rc);
- goto leave;
- }
-
- gcry_cipher_setiv (parm->hd, parm->iv, parm->ivlen);
-
- leave:
- xfree (seskey);
- return rc;
-}
-
-
-/* This function is called by the KSBA writer just before the actual
- write is done. The function must take INLEN bytes from INBUF,
- decrypt it and store it inoutbuf which has a maximum size of
- maxoutlen. The valid bytes in outbuf should be return in outlen.
- Due to different buffer sizes or different length of input and
- output, it may happen that fewer bytes are process or fewer bytes
- are written. */
-static KsbaError
-decrypt_filter (void *arg,
- const void *inbuf, size_t inlen, size_t *inused,
- void *outbuf, size_t maxoutlen, size_t *outlen)
-{
- struct decrypt_filter_parm_s *parm = arg;
- int blklen = parm->blklen;
- size_t orig_inlen = inlen;
-
- /* fixme: Should we issue an error when we have not seen one full block? */
- if (!inlen)
- return KSBA_Bug;
-
- if (maxoutlen < 2*parm->blklen)
- return KSBA_Bug;
- /* make some space becuase we will later need an extra block at the end */
- maxoutlen -= blklen;
-
- if (parm->helpblocklen)
- {
- int i, j;
-
- for (i=parm->helpblocklen,j=0; i < blklen && j < inlen; i++, j++)
- parm->helpblock[i] = ((const char*)inbuf)[j];
- inlen -= j;
- if (blklen > maxoutlen)
- return KSBA_Bug;
- if (i < blklen)
- {
- parm->helpblocklen = i;
- *outlen = 0;
- }
- else
- {
- parm->helpblocklen = 0;
- if (parm->any_data)
- {
- memcpy (outbuf, parm->lastblock, blklen);
- *outlen =blklen;
- }
- else
- *outlen = 0;
- gcry_cipher_decrypt (parm->hd, parm->lastblock, blklen,
- parm->helpblock, blklen);
- parm->any_data = 1;
- }
- *inused = orig_inlen - inlen;
- return 0;
- }
-
-
- if (inlen > maxoutlen)
- inlen = maxoutlen;
- if (inlen % blklen)
- { /* store the remainder away */
- parm->helpblocklen = inlen%blklen;
- inlen = inlen/blklen*blklen;
- memcpy (parm->helpblock, (const char*)inbuf+inlen, parm->helpblocklen);
- }
-
- *inused = inlen + parm->helpblocklen;
- if (inlen)
- {
- assert (inlen >= blklen);
- if (parm->any_data)
- {
- gcry_cipher_decrypt (parm->hd, (char*)outbuf+blklen, inlen,
- inbuf, inlen);
- memcpy (outbuf, parm->lastblock, blklen);
- memcpy (parm->lastblock,(char*)outbuf+inlen, blklen);
- *outlen = inlen;
- }
- else
- {
- gcry_cipher_decrypt (parm->hd, outbuf, inlen, inbuf, inlen);
- memcpy (parm->lastblock, (char*)outbuf+inlen-blklen, blklen);
- *outlen = inlen - blklen;
- parm->any_data = 1;
- }
- }
- else
- *outlen = 0;
- return 0;
-}
-
-
-
-/* Perform a decrypt operation. */
-int
-gpgsm_decrypt (CTRL ctrl, int in_fd, FILE *out_fp)
-{
- int rc;
- KsbaError err;
- Base64Context b64reader = NULL;
- Base64Context b64writer = NULL;
- KsbaReader reader;
- KsbaWriter writer;
- KsbaCMS cms = NULL;
- KsbaStopReason stopreason;
- KEYDB_HANDLE kh;
- int recp;
- FILE *in_fp = NULL;
- struct decrypt_filter_parm_s dfparm;
-
- memset (&dfparm, 0, sizeof dfparm);
-
- kh = keydb_new (0);
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
-
- in_fp = fdopen ( dup (in_fd), "rb");
- if (!in_fp)
- {
- log_error ("fdopen() failed: %s\n", strerror (errno));
- rc = seterr (IO_Error);
- goto leave;
- }
-
- rc = gpgsm_create_reader (&b64reader, ctrl, in_fp, &reader);
- if (rc)
- {
- log_error ("can't create reader: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, &writer);
- if (rc)
- {
- log_error ("can't create writer: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- cms = ksba_cms_new ();
- if (!cms)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- err = ksba_cms_set_reader_writer (cms, reader, writer);
- if (err)
- {
- log_debug ("ksba_cms_set_reader_writer failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- /* parser loop */
- do
- {
- err = ksba_cms_parse (cms, &stopreason);
- if (err)
- {
- log_debug ("ksba_cms_parse failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- if (stopreason == KSBA_SR_BEGIN_DATA
- || stopreason == KSBA_SR_DETACHED_DATA)
- {
- int algo, mode;
- const char *algoid;
- int any_key = 0;
-
- algoid = ksba_cms_get_content_oid (cms, 2/* encryption algo*/);
- algo = gcry_cipher_map_name (algoid);
- mode = gcry_cipher_mode_from_oid (algoid);
- if (!algo || !mode)
- {
- rc = GNUPG_Unsupported_Algorithm;
- log_error ("unsupported algorithm `%s'\n", algoid? algoid:"?");
- if (algoid && !strcmp (algoid, "1.2.840.113549.3.2"))
- log_info (_("(this is the RC2 algorithm)\n"));
- else if (!algoid)
- log_info (_("(this does not seem to be an encrypted"
- " message)\n"));
- gpgsm_status2 (ctrl, STATUS_ERROR, "decrypt.algorithm",
- gnupg_error_token (rc), algoid?algoid:"?", NULL);
- goto leave;
- }
- dfparm.algo = algo;
- dfparm.mode = mode;
- dfparm.blklen = gcry_cipher_get_algo_blklen (algo);
- if (dfparm.blklen > sizeof (dfparm.helpblock))
- return GNUPG_Bug;
-
- rc = ksba_cms_get_content_enc_iv (cms,
- dfparm.iv,
- sizeof (dfparm.iv),
- &dfparm.ivlen);
- if (rc)
- {
- log_error ("error getting IV: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- for (recp=0; !any_key; recp++)
- {
- char *issuer;
- KsbaSexp serial;
- KsbaSexp enc_val;
- char *hexkeygrip = NULL;
-
- err = ksba_cms_get_issuer_serial (cms, recp, &issuer, &serial);
- if (err == -1 && recp)
- break; /* no more recipients */
- if (err)
- log_error ("recp %d - error getting info: %s\n",
- recp, ksba_strerror (err));
- else
- {
- KsbaCert cert = NULL;
-
- log_debug ("recp %d - issuer: `%s'\n",
- recp, issuer? issuer:"[NONE]");
- log_debug ("recp %d - serial: ", recp);
- gpgsm_dump_serial (serial);
- log_printf ("\n");
-
- keydb_search_reset (kh);
- rc = keydb_search_issuer_sn (kh, issuer, serial);
- if (rc)
- {
- log_error ("failed to find the certificate: %s\n",
- gnupg_strerror(rc));
- goto oops;
- }
-
- rc = keydb_get_cert (kh, &cert);
- if (rc)
- {
- log_error ("failed to get cert: %s\n", gnupg_strerror (rc));
- goto oops;
- }
- /* Just in case there is a problem with the own
- certificate we print this message - should never
- happen of course */
- rc = gpgsm_cert_use_decrypt_p (cert);
- if (rc)
- {
- gpgsm_status2 (ctrl, STATUS_ERROR, "decrypt.keyusage",
- gnupg_error_token (rc), NULL);
- rc = 0;
- }
-
- hexkeygrip = gpgsm_get_keygrip_hexstring (cert);
-
- oops:
- xfree (issuer);
- xfree (serial);
- ksba_cert_release (cert);
- }
-
- if (!hexkeygrip)
- ;
- else if (!(enc_val = ksba_cms_get_enc_val (cms, recp)))
- log_error ("recp %d - error getting encrypted session key\n",
- recp);
- else
- {
- rc = prepare_decryption (hexkeygrip, enc_val, &dfparm);
- xfree (enc_val);
- if (rc)
- {
- log_debug ("decrypting session key failed: %s\n",
- gnupg_strerror (rc));
- }
- else
- { /* setup the bulk decrypter */
- any_key = 1;
- ksba_writer_set_filter (writer,
- decrypt_filter,
- &dfparm);
- }
- }
- }
- if (!any_key)
- {
- rc = GNUPG_No_Secret_Key;
- goto leave;
- }
- }
- else if (stopreason == KSBA_SR_END_DATA)
- {
- ksba_writer_set_filter (writer, NULL, NULL);
- if (dfparm.any_data)
- { /* write the last block with padding removed */
- int i, npadding = dfparm.lastblock[dfparm.blklen-1];
- if (!npadding || npadding > dfparm.blklen)
- {
- log_error ("invalid padding with value %d\n", npadding);
- rc = seterr (Invalid_Data);
- goto leave;
- }
- rc = ksba_writer_write (writer,
- dfparm.lastblock,
- dfparm.blklen - npadding);
- if (rc)
- {
- rc = map_ksba_err (rc);
- goto leave;
- }
- for (i=dfparm.blklen - npadding; i < dfparm.blklen; i++)
- {
- if (dfparm.lastblock[i] != npadding)
- {
- log_error ("inconsistent padding\n");
- rc = seterr (Invalid_Data);
- goto leave;
- }
- }
- }
- }
-
- }
- while (stopreason != KSBA_SR_READY);
-
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- gpgsm_status (ctrl, STATUS_DECRYPTION_OKAY, NULL);
-
-
- leave:
- if (rc)
- gpgsm_status (ctrl, STATUS_DECRYPTION_FAILED, NULL);
- ksba_cms_release (cms);
- gpgsm_destroy_reader (b64reader);
- gpgsm_destroy_writer (b64writer);
- keydb_release (kh);
- if (in_fp)
- fclose (in_fp);
- if (dfparm.hd)
- gcry_cipher_close (dfparm.hd);
- return rc;
-}
-
-
diff --git a/sm/delete.c b/sm/delete.c
deleted file mode 100644
index cd1491a86..000000000
--- a/sm/delete.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* delete.c
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-
-/* Delete a certificate or an secret key from a key database. */
-static int
-delete_one (CTRL ctrl, const char *username)
-{
- int rc = 0;
- KEYDB_SEARCH_DESC desc;
- KEYDB_HANDLE kh = NULL;
- KsbaCert cert = NULL;
- int duplicates = 0;
-
- rc = keydb_classify_name (username, &desc);
- if (rc)
- {
- log_error (_("certificate `%s' not found: %s\n"),
- username, gnupg_strerror (rc));
- gpgsm_status2 (ctrl, STATUS_DELETE_PROBLEM, "1", NULL);
- goto leave;
- }
-
- kh = keydb_new (0);
- if (!kh)
- {
- log_error ("keydb_new failed\n");
- goto leave;
- }
-
-
- rc = keydb_search (kh, &desc, 1);
- if (!rc)
- rc = keydb_get_cert (kh, &cert);
- if (!rc)
- {
- char fpr[20];
-
- gpgsm_get_fingerprint (cert, 0, fpr, NULL);
-
- next_ambigious:
- rc = keydb_search (kh, &desc, 1);
- if (rc == -1)
- rc = 0;
- else if (!rc)
- {
- KsbaCert cert2 = NULL;
- char fpr2[20];
-
- /* We ignore all duplicated certificates which might have
- been inserted due to program bugs. */
- if (!keydb_get_cert (kh, &cert2))
- {
- gpgsm_get_fingerprint (cert2, 0, fpr2, NULL);
- ksba_cert_release (cert2);
- if (!memcmp (fpr, fpr2, 20))
- {
- duplicates++;
- goto next_ambigious;
- }
- }
- rc = GNUPG_Ambiguous_Name;
- }
- }
- if (rc)
- {
- if (rc == -1)
- rc = GNUPG_No_Public_Key;
- log_error (_("certificate `%s' not found: %s\n"),
- username, gnupg_strerror (rc));
- gpgsm_status2 (ctrl, STATUS_DELETE_PROBLEM, "3", NULL);
- goto leave;
- }
-
- /* we need to search again to get back to the right position. */
- do
- {
- keydb_search_reset (kh);
- rc = keydb_search (kh, &desc, 1);
- if (rc)
- {
- log_error ("problem re-searching certificate: %s\n",
- gnupg_strerror (rc));
- goto leave;
- }
-
- rc = keydb_delete (kh);
- if (rc)
- goto leave;
- if (opt.verbose)
- {
- if (duplicates)
- log_info (_("duplicated certificate `%s' deleted\n"), username);
- else
- log_info (_("certificate `%s' deleted\n"), username);
- }
- }
- while (duplicates--);
-
- leave:
- keydb_release (kh);
- ksba_cert_release (cert);
- return rc;
-}
-
-
-
-/* Delete the certificates specified by NAMES. */
-int
-gpgsm_delete (CTRL ctrl, STRLIST names)
-{
- int rc;
-
- if (!names)
- {
- log_error ("nothing to delete\n");
- return GNUPG_No_Data;
- }
-
- for (; names; names=names->next )
- {
- rc = delete_one (ctrl, names->d);
- if (rc)
- {
- log_error (_("deleting certificate \"%s\" failed: %s\n"),
- names->d, gnupg_strerror (rc) );
- return rc;
- }
- }
-
- return 0;
-}
diff --git a/sm/encrypt.c b/sm/encrypt.c
deleted file mode 100644
index 40e12582f..000000000
--- a/sm/encrypt.c
+++ /dev/null
@@ -1,549 +0,0 @@
-/* encrypt.c - Encrypt a message
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-
-struct dek_s {
- const char *algoid;
- int algo;
- GCRY_CIPHER_HD chd;
- char key[32];
- int keylen;
- char iv[32];
- int ivlen;
-};
-typedef struct dek_s *DEK;
-
-struct encrypt_cb_parm_s {
- FILE *fp;
- DEK dek;
- int eof_seen;
- int ready;
- int readerror;
- int bufsize;
- unsigned char *buffer;
- int buflen;
-};
-
-
-
-
-
-/* initialize the data encryptionkey (session key) */
-static int
-init_dek (DEK dek)
-{
- int rc=0, mode, i;
-
- dek->algo = gcry_cipher_map_name (dek->algoid);
- mode = gcry_cipher_mode_from_oid (dek->algoid);
- if (!dek->algo || !mode)
- {
- log_error ("unsupported algorithm `%s'\n", dek->algoid);
- return GNUPG_Unsupported_Algorithm;
- }
-
- dek->keylen = gcry_cipher_get_algo_keylen (dek->algo);
- if (!dek->keylen || dek->keylen > sizeof (dek->key))
- return GNUPG_Bug;
-
- dek->ivlen = gcry_cipher_get_algo_blklen (dek->algo);
- if (!dek->ivlen || dek->ivlen > sizeof (dek->iv))
- return GNUPG_Bug;
-
- if (dek->keylen < 100/8)
- { /* make sure we don't use weak keys */
- log_error ("key length of `%s' too small\n", dek->algoid);
- return GNUPG_Unsupported_Algorithm;
- }
-
- dek->chd = gcry_cipher_open (dek->algo, mode, GCRY_CIPHER_SECURE);
- if (!dek->chd)
- {
- log_error ("failed to create cipher context: %s\n", gcry_strerror (-1));
- return GNUPG_General_Error;
- }
-
- for (i=0; i < 8; i++)
- {
- gcry_randomize (dek->key, dek->keylen, GCRY_STRONG_RANDOM );
- rc = gcry_cipher_setkey (dek->chd, dek->key, dek->keylen);
- if (rc != GCRYERR_WEAK_KEY)
- break;
- log_info(_("weak key created - retrying\n") );
- }
- if (rc)
- {
- log_error ("failed to set the key: %s\n", gcry_strerror (rc));
- gcry_cipher_close (dek->chd);
- dek->chd = NULL;
- return map_gcry_err (rc);
- }
-
- gcry_randomize (dek->iv, dek->ivlen, GCRY_STRONG_RANDOM);
- rc = gcry_cipher_setiv (dek->chd, dek->iv, dek->ivlen);
- if (rc)
- {
- log_error ("failed to set the IV: %s\n", gcry_strerror (rc));
- gcry_cipher_close (dek->chd);
- dek->chd = NULL;
- return map_gcry_err (rc);
- }
-
- return 0;
-}
-
-
-/* Encode the session key. NBITS is the number of bits which should be
- used for packing the session key. returns: An mpi with the session
- key (caller must free) */
-static GCRY_MPI
-encode_session_key (DEK dek, unsigned int nbits)
-{
- int nframe = (nbits+7) / 8;
- byte *p;
- byte *frame;
- int i,n;
- MPI a;
-
- if (dek->keylen + 7 > nframe || !nframe)
- log_bug ("can't encode a %d bit key in a %d bits frame\n",
- dek->keylen*8, nbits );
-
- /* We encode the session key in this way:
- *
- * 0 2 RND(n bytes) 0 KEY(k bytes)
- *
- * (But how can we store the leading 0 - the external representaion
- * of MPIs doesn't allow leading zeroes =:-)
- *
- * RND are non-zero random bytes.
- * KEY is the encryption key (session key)
- */
-
- frame = gcry_xmalloc_secure (nframe);
- n = 0;
- frame[n++] = 0;
- frame[n++] = 2;
- i = nframe - 3 - dek->keylen;
- assert (i > 0);
- p = gcry_random_bytes_secure (i, GCRY_STRONG_RANDOM);
- /* replace zero bytes by new values */
- for (;;)
- {
- int j, k;
- byte *pp;
-
- /* count the zero bytes */
- for(j=k=0; j < i; j++ )
- {
- if( !p[j] )
- k++;
- }
- if( !k )
- break; /* okay: no zero bytes */
-
- k += k/128; /* better get some more */
- pp = gcry_random_bytes_secure (k, GCRY_STRONG_RANDOM);
- for (j=0; j < i && k; j++)
- {
- if( !p[j] )
- p[j] = pp[--k];
- }
- xfree (pp);
- }
- memcpy (frame+n, p, i);
- xfree (p);
-
- n += i;
- frame[n++] = 0;
- memcpy (frame+n, dek->key, dek->keylen);
- n += dek->keylen;
- assert (n == nframe);
- if (gcry_mpi_scan (&a, GCRYMPI_FMT_USG, frame, &nframe) )
- BUG ();
- gcry_free(frame);
-
- return a;
-}
-
-
-
-/* encrypt the DEK under the key contained in CERT and return it as a
- canonical S-Exp in encval */
-static int
-encrypt_dek (const DEK dek, KsbaCert cert, char **encval)
-{
- GCRY_SEXP s_ciph, s_data, s_pkey;
- int rc;
- KsbaSexp buf;
- size_t len;
-
- *encval = NULL;
-
- /* get the key from the cert */
- buf = ksba_cert_get_public_key (cert);
- if (!buf)
- {
- log_error ("no public key for recipient\n");
- return GNUPG_No_Public_Key;
- }
- len = gcry_sexp_canon_len (buf, 0, NULL, NULL);
- if (!len)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- return GNUPG_Bug;
- }
- rc = gcry_sexp_sscan (&s_pkey, NULL, buf, len);
- xfree (buf); buf = NULL;
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- return map_gcry_err (rc);
- }
-
- /* put the encoded cleartext into a simple list */
- {
- /* fixme: actually the pkcs-1 encoding should go into libgcrypt */
- GCRY_MPI data = encode_session_key (dek, gcry_pk_get_nbits (s_pkey));
- if (!data)
- {
- gcry_mpi_release (data);
- return GNUPG_General_Error;
- }
- if (gcry_sexp_build (&s_data, NULL, "%m", data))
- BUG ();
- gcry_mpi_release (data);
- }
-
- /* pass it to libgcrypt */
- rc = gcry_pk_encrypt (&s_ciph, s_data, s_pkey);
- gcry_sexp_release (s_data);
- gcry_sexp_release (s_pkey);
-
- /* reformat it */
- len = gcry_sexp_sprint (s_ciph, GCRYSEXP_FMT_CANON, NULL, 0);
- assert (len);
- buf = xtrymalloc (len);
- if (!buf)
- {
- gcry_sexp_release (s_ciph);
- return GNUPG_Out_Of_Core;
- }
- len = gcry_sexp_sprint (s_ciph, GCRYSEXP_FMT_CANON, buf, len);
- assert (len);
-
- *encval = buf;
- return 0;
-}
-
-
-
-/* do the actual encryption */
-static int
-encrypt_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
-{
- struct encrypt_cb_parm_s *parm = cb_value;
- int blklen = parm->dek->ivlen;
- unsigned char *p;
- size_t n;
-
- *nread = 0;
- if (!buffer)
- return -1; /* not supported */
-
- if (parm->ready)
- return -1;
-
- if (count < blklen)
- BUG ();
-
- if (!parm->eof_seen)
- { /* fillup the buffer */
- p = parm->buffer;
- for (n=parm->buflen; n < parm->bufsize; n++)
- {
- int c = getc (parm->fp);
- if (c == EOF)
- {
- if (ferror (parm->fp))
- {
- parm->readerror = errno;
- return -1;
- }
- parm->eof_seen = 1;
- break;
- }
- p[n] = c;
- }
- parm->buflen = n;
- }
-
- n = parm->buflen < count? parm->buflen : count;
- n = n/blklen * blklen;
- if (n)
- { /* encrypt the stuff */
- gcry_cipher_encrypt (parm->dek->chd, buffer, n, parm->buffer, n);
- *nread = n;
- /* Who cares about cycles, take the easy way and shift the buffer */
- parm->buflen -= n;
- memmove (parm->buffer, parm->buffer+n, parm->buflen);
- }
- else if (parm->eof_seen)
- { /* no complete block but eof: add padding */
- /* fixme: we should try to do this also in the above code path */
- int i, npad = blklen - (parm->buflen % blklen);
- p = parm->buffer;
- for (n=parm->buflen, i=0; n < parm->bufsize && i < npad; n++, i++)
- p[n] = npad;
- gcry_cipher_encrypt (parm->dek->chd, buffer, n, parm->buffer, n);
- *nread = n;
- parm->ready = 1;
- }
-
- return 0;
-}
-
-
-
-
-/* Perform an encrypt operation.
-
- Encrypt the data received on DATA-FD and write it to OUT_FP. The
- recipients are take from the certificate given in recplist; if this
- is NULL it will be encrypted for a default recipient */
-int
-gpgsm_encrypt (CTRL ctrl, CERTLIST recplist, int data_fd, FILE *out_fp)
-{
- int rc = 0;
- Base64Context b64writer = NULL;
- KsbaError err;
- KsbaWriter writer;
- KsbaReader reader = NULL;
- KsbaCMS cms = NULL;
- KsbaStopReason stopreason;
- KEYDB_HANDLE kh = NULL;
- struct encrypt_cb_parm_s encparm;
- DEK dek = NULL;
- int recpno;
- FILE *data_fp = NULL;
- CERTLIST cl;
-
- memset (&encparm, 0, sizeof encparm);
-
- if (!recplist)
- {
- log_error(_("no valid recipients given\n"));
- gpgsm_status (ctrl, STATUS_NO_RECP, "0");
- rc = GNUPG_No_Public_Key;
- goto leave;
- }
-
- kh = keydb_new (0);
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- data_fp = fdopen ( dup (data_fd), "rb");
- if (!data_fp)
- {
- log_error ("fdopen() failed: %s\n", strerror (errno));
- rc = seterr (IO_Error);
- goto leave;
- }
-
- reader = ksba_reader_new ();
- if (!reader)
- rc = KSBA_Out_Of_Core;
- if (!rc)
- rc = ksba_reader_set_cb (reader, encrypt_cb, &encparm);
- if (rc)
- {
- rc = map_ksba_err (rc);
- goto leave;
- }
- encparm.fp = data_fp;
-
- ctrl->pem_name = "ENCRYPTED MESSAGE";
- rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, &writer);
- if (rc)
- {
- log_error ("can't create writer: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- cms = ksba_cms_new ();
- if (!cms)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- err = ksba_cms_set_reader_writer (cms, reader, writer);
- if (err)
- {
- log_debug ("ksba_cms_set_reader_writer failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- /* We are going to create enveloped data with uninterpreted data as
- inner content */
- err = ksba_cms_set_content_type (cms, 0, KSBA_CT_ENVELOPED_DATA);
- if (!err)
- err = ksba_cms_set_content_type (cms, 1, KSBA_CT_DATA);
- if (err)
- {
- log_debug ("ksba_cms_set_content_type failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- /* create a session key */
- dek = xtrycalloc (1, sizeof *dek); /* hmmm: should we put it into secmem?*/
- if (!dek)
- rc = GNUPG_Out_Of_Core;
- else
- {
- dek->algoid = opt.def_cipher_algoid;
- rc = init_dek (dek);
- }
- if (rc)
- {
- log_error ("failed to create the session key: %s\n",
- gnupg_strerror (rc));
- goto leave;
- }
-
- err = ksba_cms_set_content_enc_algo (cms, dek->algoid, dek->iv, dek->ivlen);
- if (err)
- {
- log_error ("ksba_cms_set_content_enc_algo failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- encparm.dek = dek;
- /* Use a ~8k (AES) or ~4k (3DES) buffer */
- encparm.bufsize = 500 * dek->ivlen;
- encparm.buffer = xtrymalloc (encparm.bufsize);
- if (!encparm.buffer)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- /* gather certificates of recipients, encrypt the session key for
- each and store them in the CMS object */
- for (recpno = 0, cl = recplist; cl; recpno++, cl = cl->next)
- {
- char *encval;
-
- rc = encrypt_dek (dek, cl->cert, &encval);
- if (rc)
- {
- log_error ("encryption failed for recipient no. %d: %s\n",
- recpno, gnupg_strerror (rc));
- goto leave;
- }
-
- err = ksba_cms_add_recipient (cms, cl->cert);
- if (err)
- {
- log_error ("ksba_cms_add_recipient failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- xfree (encval);
- goto leave;
- }
-
- err = ksba_cms_set_enc_val (cms, recpno, encval);
- xfree (encval);
- if (err)
- {
- log_error ("ksba_cms_set_enc_val failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
-
- /* main control loop for encryption */
- recpno = 0;
- do
- {
- err = ksba_cms_build (cms, &stopreason);
- if (err)
- {
- log_debug ("ksba_cms_build failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
- while (stopreason != KSBA_SR_READY);
-
- if (encparm.readerror)
- {
- log_error ("error reading input: %s\n", strerror (encparm.readerror));
- rc = seterr (Read_Error);
- goto leave;
- }
-
-
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- log_info ("encrypted data created\n");
-
- leave:
- ksba_cms_release (cms);
- gpgsm_destroy_writer (b64writer);
- ksba_reader_release (reader);
- keydb_release (kh);
- xfree (dek);
- if (data_fp)
- fclose (data_fp);
- xfree (encparm.buffer);
- return rc;
-}
diff --git a/sm/export.c b/sm/export.c
deleted file mode 100644
index 042850752..000000000
--- a/sm/export.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/* export.c
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-
-static void print_short_info (KsbaCert cert, FILE *fp);
-
-
-
-/* Export all certificates or just those given in NAMES. */
-void
-gpgsm_export (CTRL ctrl, STRLIST names, FILE *fp)
-{
- KEYDB_HANDLE hd;
- KEYDB_SEARCH_DESC *desc = NULL;
- int ndesc;
- Base64Context b64writer = NULL;
- KsbaWriter writer;
- STRLIST sl;
- KsbaCert cert = NULL;
- int rc=0;
- int count = 0;
- int i;
-
- hd = keydb_new (0);
- if (!hd)
- {
- log_error ("keydb_new failed\n");
- goto leave;
- }
-
- if (!names)
- ndesc = 1;
- else
- {
- for (sl=names, ndesc=0; sl; sl = sl->next, ndesc++)
- ;
- }
-
- desc = xtrycalloc (ndesc, sizeof *desc);
- if (!ndesc)
- {
- log_error ("%s\n", gnupg_strerror (GNUPG_Out_Of_Core));
- goto leave;
- }
-
- if (!names)
- desc[0].mode = KEYDB_SEARCH_MODE_FIRST;
- else
- {
- for (ndesc=0, sl=names; sl; sl = sl->next)
- {
- rc = keydb_classify_name (sl->d, desc+ndesc);
- if (rc)
- {
- log_error ("key `%s' not found: %s\n",
- sl->d, gnupg_strerror (rc));
- rc = 0;
- }
- else
- ndesc++;
- }
- }
-
- /* If all specifications are done by fingerprint, we switch to
- ephemeral mode so that _all_ currently available and matching
- certificates are exported.
-
- fixme: we should in this case keep a list of certificates to
- avoid accidential export of duplicate certificates. */
- if (names && ndesc)
- {
- for (i=0; (i < ndesc
- && (desc[i].mode == KEYDB_SEARCH_MODE_FPR
- || desc[i].mode == KEYDB_SEARCH_MODE_FPR20
- || desc[i].mode == KEYDB_SEARCH_MODE_FPR16)); i++)
- ;
- if (i == ndesc)
- keydb_set_ephemeral (hd, 1);
- }
-
- while (!(rc = keydb_search (hd, desc, ndesc)))
- {
- const unsigned char *image;
- size_t imagelen;
-
- if (!names)
- desc[0].mode = KEYDB_SEARCH_MODE_NEXT;
-
- rc = keydb_get_cert (hd, &cert);
- if (rc)
- {
- log_error ("keydb_get_cert failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- image = ksba_cert_get_image (cert, &imagelen);
- if (!image)
- {
- log_error ("ksba_cert_get_image failed\n");
- goto leave;
- }
-
- if (ctrl->create_pem)
- {
- if (count)
- putc ('\n', fp);
- print_short_info (cert, fp);
- putc ('\n', fp);
- }
- count++;
-
- if (!b64writer)
- {
- ctrl->pem_name = "CERTIFICATE";
- rc = gpgsm_create_writer (&b64writer, ctrl, fp, &writer);
- if (rc)
- {
- log_error ("can't create writer: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- }
-
- rc = ksba_writer_write (writer, image, imagelen);
- if (rc)
- {
- log_error ("write error: %s\n", ksba_strerror (rc));
- goto leave;
- }
-
- if (ctrl->create_pem)
- {
- /* We want one certificate per PEM block */
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- gpgsm_destroy_writer (b64writer);
- b64writer = NULL;
- }
-
- ksba_cert_release (cert);
- cert = NULL;
- }
- if (rc && rc != -1)
- log_error ("keydb_search failed: %s\n", gnupg_strerror (rc));
- else if (b64writer)
- {
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- }
-
- leave:
- gpgsm_destroy_writer (b64writer);
- ksba_cert_release (cert);
- xfree (desc);
- keydb_release (hd);
-}
-
-
-/* Print some info about the certifciate CERT to FP */
-static void
-print_short_info (KsbaCert cert, FILE *fp)
-{
- char *p;
- KsbaSexp sexp;
- int idx;
-
- for (idx=0; (p = ksba_cert_get_issuer (cert, idx)); idx++)
- {
- fputs (!idx? "Issuer ...: "
- : "\n aka ...: ", fp);
- gpgsm_print_name (fp, p);
- xfree (p);
- }
- putc ('\n', fp);
-
- fputs ("Serial ...: ", fp);
- sexp = ksba_cert_get_serial (cert);
- if (sexp)
- {
- int len;
- const unsigned char *s = sexp;
-
- if (*s == '(')
- {
- s++;
- for (len=0; *s && *s != ':' && digitp (s); s++)
- len = len*10 + atoi_1 (s);
- if (*s == ':')
- for (s++; len; len--, s++)
- fprintf (fp, "%02X", *s);
- }
- xfree (sexp);
- }
- putc ('\n', fp);
-
- for (idx=0; (p = ksba_cert_get_subject (cert, idx)); idx++)
- {
- fputs (!idx? "Subject ..: "
- : "\n aka ..: ", fp);
- gpgsm_print_name (fp, p);
- xfree (p);
- }
- putc ('\n', fp);
-}
-
-
-
-
-
-
diff --git a/sm/fingerprint.c b/sm/fingerprint.c
deleted file mode 100644
index 6a84966db..000000000
--- a/sm/fingerprint.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* fingerprint.c - Get the fingerprint
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-
-/* Return the fingerprint of the certificate (we can't put this into
- libksba because we need libgcrypt support). The caller must
- provide an array of sufficient length or NULL so that the function
- allocates the array. If r_len is not NULL, the length of the
- digest is returned; well, this can also be done by using
- gcry_md_get_algo_dlen(). If algo is 0, a SHA-1 will be used.
-
- If there is a problem , the function does never return NULL but a
- digest of all 0xff.
- */
-char *
-gpgsm_get_fingerprint (KsbaCert cert, int algo, char *array, int *r_len)
-{
- GCRY_MD_HD md;
- int rc, len;
-
- if (!algo)
- algo = GCRY_MD_SHA1;
-
- len = gcry_md_get_algo_dlen (algo);
- assert (len);
- if (!array)
- array = xmalloc (len);
-
- if (r_len)
- *r_len = len;
-
- md = gcry_md_open (algo, 0);
- if (!md)
- {
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- memset (array, 0xff, len); /* better return an invalid fpr than NULL */
- return array;
- }
-
- rc = ksba_cert_hash (cert, 0, HASH_FNC, md);
- if (rc)
- {
- log_error ("ksba_cert_hash failed: %s\n", ksba_strerror (rc));
- gcry_md_close (md);
- memset (array, 0xff, len); /* better return an invalid fpr than NULL */
- return array;
- }
- gcry_md_final (md);
- memcpy (array, gcry_md_read(md, algo), len );
- return array;
-}
-
-
-/* Return an allocated buffer with the formatted fingerprint */
-char *
-gpgsm_get_fingerprint_string (KsbaCert cert, int algo)
-{
- unsigned char digest[MAX_DIGEST_LEN];
- char *buf;
- int len, i;
-
- if (!algo)
- algo = GCRY_MD_SHA1;
-
- len = gcry_md_get_algo_dlen (algo);
- assert (len <= MAX_DIGEST_LEN );
- gpgsm_get_fingerprint (cert, algo, digest, NULL);
- buf = xmalloc (len*3+1);
- *buf = 0;
- for (i=0; i < len; i++ )
- sprintf (buf+strlen(buf), i? ":%02X":"%02X", digest[i]);
- return buf;
-}
-
-/* Return an allocated buffer with the formatted fingerprint as one
- large hexnumber */
-char *
-gpgsm_get_fingerprint_hexstring (KsbaCert cert, int algo)
-{
- unsigned char digest[MAX_DIGEST_LEN];
- char *buf;
- int len, i;
-
- if (!algo)
- algo = GCRY_MD_SHA1;
-
- len = gcry_md_get_algo_dlen (algo);
- assert (len <= MAX_DIGEST_LEN );
- gpgsm_get_fingerprint (cert, algo, digest, NULL);
- buf = xmalloc (len*3+1);
- *buf = 0;
- for (i=0; i < len; i++ )
- sprintf (buf+strlen(buf), "%02X", digest[i]);
- return buf;
-}
-
-/* Return a certificate ID. These are the last 4 bytes of the SHA-1
- fingerprint. */
-unsigned long
-gpgsm_get_short_fingerprint (KsbaCert cert)
-{
- unsigned char digest[20];
-
- gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL);
- return ((digest[16]<<24)|(digest[17]<<16)|(digest[18]<< 8)|digest[19]);
-}
-
-
-/* Return the so called KEYGRIP which is the SHA-1 hash of the public
- key parameters expressed as an canoncial encoded S-Exp. array must
- be 20 bytes long. returns the array or a newly allocated one if the
- passed one was NULL */
-char *
-gpgsm_get_keygrip (KsbaCert cert, char *array)
-{
- GCRY_SEXP s_pkey;
- int rc;
- KsbaSexp p;
- size_t n;
-
- p = ksba_cert_get_public_key (cert);
- if (!p)
- return NULL; /* oops */
-
- if (DBG_X509)
- log_debug ("get_keygrip for public key: %s\n", p);
- n = gcry_sexp_canon_len (p, 0, NULL, NULL);
- if (!n)
- {
- log_error ("libksba did not return a proper S-Exp\n");
- return NULL;
- }
- rc = gcry_sexp_sscan ( &s_pkey, NULL, p, n);
- xfree (p);
- if (rc)
- {
- log_error ("gcry_sexp_scan failed: %s\n", gcry_strerror (rc));
- return NULL;
- }
- array = gcry_pk_get_keygrip (s_pkey, array);
- gcry_sexp_release (s_pkey);
- if (!array)
- {
- rc = seterr (General_Error);
- log_error ("can't calculate keygrip\n");
- return NULL;
- }
- if (DBG_X509)
- log_printhex ("keygrip=", array, 20);
-
- return array;
-}
-
-/* Return an allocated buffer with the keygrip of CERT in from of an
- hexstring. NULL is returned in case of error */
-char *
-gpgsm_get_keygrip_hexstring (KsbaCert cert)
-{
- unsigned char grip[20];
- char *buf, *p;
- int i;
-
- gpgsm_get_keygrip (cert, grip);
- buf = p = xmalloc (20*2+1);
- for (i=0; i < 20; i++, p += 2 )
- sprintf (p, "%02X", grip[i]);
- return buf;
-}
-
-
-
-/* For certain purposes we need a certificate id which has an upper
- limit of the size. We use the hash of the issuer name and the
- serial number for this. In most cases the serial number is not
- that large and the resulting string can be passed on an assuan
- command line. Everything is hexencoded with the serialnumber
- delimted from the has by a dot.
-
- The caller must free the string.
-*/
-char *
-gpgsm_get_certid (KsbaCert cert)
-{
- KsbaSexp serial;
- unsigned char *p;
- char *endp;
- unsigned char hash[20];
- unsigned long n;
- char *certid;
- int i;
-
- p = ksba_cert_get_issuer (cert, 0);
- if (!p)
- return NULL; /* Ooops: No issuer */
- gcry_md_hash_buffer (GCRY_MD_SHA1, hash, p, strlen (p));
- xfree (p);
-
- serial = ksba_cert_get_serial (cert);
- if (!serial)
- return NULL; /* oops: no serial number */
- p = serial;
- if (*p != '(')
- {
- log_error ("Ooops: invalid serial number\n");
- xfree (serial);
- return NULL;
- }
- p++;
- n = strtoul (p, &endp, 10);
- p = endp;
- if (*p != ':')
- {
- log_error ("Ooops: invalid serial number (no colon)\n");
- xfree (serial);
- return NULL;
- }
- p++;
-
- certid = xtrymalloc ( 40 + 1 + n*2 + 1);
- if (!certid)
- {
- xfree (serial);
- return NULL; /* out of core */
- }
-
- for (i=0, endp = certid; i < 20; i++, endp += 2 )
- sprintf (endp, "%02X", hash[i]);
- *endp++ = '.';
- for (i=0; i < n; i++, endp += 2)
- sprintf (endp, "%02X", p[i]);
- *endp = 0;
-
- xfree (serial);
- return certid;
-}
-
-
-
-
-
-
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
deleted file mode 100644
index bfcdeb741..000000000
--- a/sm/gpgsm.c
+++ /dev/null
@@ -1,1388 +0,0 @@
-/* gpgsm.c - GnuPG for S/MIME
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include <gcrypt.h>
-#include "gpgsm.h"
-#include "../assuan/assuan.h" /* malloc hooks */
-#include "../kbx/keybox.h" /* malloc hooks */
-#include "i18n.h"
-#include "keydb.h"
-#include "sysutils.h"
-
-enum cmd_and_opt_values {
- aNull = 0,
- oArmor = 'a',
- aDetachedSign = 'b',
- aSym = 'c',
- aDecrypt = 'd',
- aEncr = 'e',
- oInteractive = 'i',
- oKOption = 'k',
- oDryRun = 'n',
- oOutput = 'o',
- oQuiet = 'q',
- oRecipient = 'r',
- aSign = 's',
- oTextmodeShort= 't',
- oUser = 'u',
- oVerbose = 'v',
- oCompress = 'z',
- oNotation = 'N',
- oBatch = 500,
- aClearsign,
- aStore,
- aKeygen,
- aSignEncr,
- aSignKey,
- aLSignKey,
- aListPackets,
- aEditKey,
- aDeleteKey,
- aImport,
- aVerify,
- aVerifyFiles,
- aListKeys,
- aListExternalKeys,
- aListSigs,
- aListSecretKeys,
- aSendKeys,
- aRecvKeys,
- aExport,
- aCheckKeys, /* nyi */
- aServer,
- aLearnCard,
-
- oOptions,
- oDebug,
- oDebugAll,
- oDebugWait,
- oDebugNoChainValidation,
- oLogFile,
-
- oEnableSpecialFilenames,
-
- oAgentProgram,
- oDisplay,
- oTTYname,
- oTTYtype,
- oLCctype,
- oLCmessages,
-
- oDirmngrProgram,
- oFakedSystemTime,
-
-
- oAssumeArmor,
- oAssumeBase64,
- oAssumeBinary,
-
- oBase64,
- oNoArmor,
-
- oDisableCRLChecks,
- oEnableCRLChecks,
-
- oIncludeCerts,
- oPolicyFile,
- oDisablePolicyChecks,
- oEnablePolicyChecks,
- oAutoIssuerKeyRetrieve,
-
-
- oTextmode,
- oFingerprint,
- oWithFingerprint,
- oAnswerYes,
- oAnswerNo,
- oKeyring,
- oSecretKeyring,
- oDefaultKey,
- oDefRecipient,
- oDefRecipientSelf,
- oNoDefRecipient,
- oStatusFD,
- oNoComment,
- oNoVersion,
- oEmitVersion,
- oCompletesNeeded,
- oMarginalsNeeded,
- oMaxCertDepth,
- oLoadExtension,
- oRFC1991,
- oOpenPGP,
- oCipherAlgo,
- oDigestAlgo,
- oCompressAlgo,
- oPasswdFD,
- oCommandFD,
- oNoVerbose,
- oTrustDBName,
- oNoSecmemWarn,
- oNoDefKeyring,
- oNoGreeting,
- oNoTTY,
- oNoOptions,
- oNoBatch,
- oHomedir,
- oWithColons,
- oWithKeyData,
- oSkipVerify,
- oCompressKeys,
- oCompressSigs,
- oAlwaysTrust,
- oRunAsShmCP,
- oSetFilename,
- oSetPolicyURL,
- oUseEmbeddedFilename,
- oComment,
- oDefaultComment,
- oThrowKeyid,
- oForceV3Sigs,
- oForceMDC,
- oS2KMode,
- oS2KDigest,
- oS2KCipher,
- oCharset,
- oNotDashEscaped,
- oEscapeFrom,
- oLockOnce,
- oLockMultiple,
- oLockNever,
- oKeyServer,
- oEncryptTo,
- oNoEncryptTo,
- oLoggerFD,
- oUtf8Strings,
- oNoUtf8Strings,
- oDisableCipherAlgo,
- oDisablePubkeyAlgo,
- oAllowNonSelfsignedUID,
- oAllowFreeformUID,
- oNoLiteral,
- oSetFilesize,
- oHonorHttpProxy,
- oFastListMode,
- oListOnly,
- oIgnoreTimeConflict,
- oNoRandomSeedFile,
- oNoAutoKeyRetrieve,
- oUseAgent,
- oMergeOnly,
- oTryAllSecrets,
- oTrustedKey,
- oEmuMDEncodeBug,
- aDummy
- };
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 300, NULL, 0, N_("@Commands:\n ") },
-
- { aSign, "sign", 256, N_("|[file]|make a signature")},
- { aClearsign, "clearsign", 256, N_("|[file]|make a clear text signature") },
- { aDetachedSign, "detach-sign", 256, N_("make a detached signature")},
- { aEncr, "encrypt", 256, N_("encrypt data")},
- { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")},
- { aDecrypt, "decrypt", 256, N_("decrypt data (default)")},
- { aVerify, "verify" , 256, N_("verify a signature")},
- { aVerifyFiles, "verify-files" , 256, "@" },
- { aListKeys, "list-keys", 256, N_("list keys")},
- { aListExternalKeys, "list-external-keys", 256, N_("list external keys")},
- { aListSecretKeys, "list-secret-keys", 256, N_("list secret keys")},
- { aListSigs, "list-sigs", 256, N_("list certificate chain")},
- { aListSigs, "check-sigs",256, "@"},
- { oFingerprint, "fingerprint", 256, N_("list keys and fingerprints")},
- { aListSecretKeys, "list-secret-keys", 256, N_("list secret keys")},
- { aKeygen, "gen-key", 256, N_("generate a new key pair")},
- { aDeleteKey, "delete-key",256, N_("remove key from the public keyring")},
- { aSendKeys, "send-keys" , 256, N_("export keys to a key server") },
- { aRecvKeys, "recv-keys" , 256, N_("import keys from a key server") },
- { aImport, "import", 256 , N_("import certificates")},
- { aExport, "export", 256 , N_("export certificates")},
- { aLearnCard, "learn-card", 256 ,N_("register a smartcard")},
- { aServer, "server", 256, N_("run in server mode")},
- { oLogFile, "log-file" ,2, N_("use a log file for the server")},
-
- { 301, NULL, 0, N_("@\nOptions:\n ") },
-
- { oArmor, "armor", 0, N_("create ascii armored output")},
- { oArmor, "armour", 0, "@" },
- { oBase64, "base64", 0, N_("create base-64 encoded output")},
-
- { oAssumeArmor, "assume-armor", 0, N_("assume input is in PEM format")},
- { oAssumeBase64, "assume-base64", 0,
- N_("assume input is in base-64 format")},
- { oAssumeBinary, "assume-binary", 0,
- N_("assume input is in binary format")},
-
- { oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")},
-
-
- { oDisableCRLChecks, "disable-crl-checks", 0, N_("never consult a CRL")},
- { oEnableCRLChecks, "enable-crl-checks", 0, "@"},
-
- { oIncludeCerts, "include-certs", 1,
- N_("|N|number of certificates to include") },
-
- { oPolicyFile, "policy-file", 2,
- N_("|FILE|take policy information from FILE") },
-
- { oDisablePolicyChecks, "disable-policy-checks", 0,
- N_("do not check certificate policies")},
- { oEnablePolicyChecks, "enable-policy-checks", 0, "@"},
-
- { oAutoIssuerKeyRetrieve, "auto-issuer-key-retrieve", 0,
- N_("fetch missing issuer certificates")},
-
-#if 0
- { oDefRecipient, "default-recipient" ,2,
- N_("|NAME|use NAME as default recipient")},
- { oDefRecipientSelf, "default-recipient-self" ,0,
- N_("use the default key as default recipient")},
- { oNoDefRecipient, "no-default-recipient", 0, "@" },
- { oEncryptTo, "encrypt-to", 2, "@" },
- { oNoEncryptTo, "no-encrypt-to", 0, "@" },
-
-#endif
- { oUser, "local-user",2, N_("use this user-id to sign or decrypt")},
-
-#if 0
- { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") },
- { oTextmodeShort, NULL, 0, "@"},
- { oTextmode, "textmode", 0, N_("use canonical text mode")},
-#endif
-
- { oOutput, "output", 2, N_("use as output file")},
- { oVerbose, "verbose", 0, N_("verbose") },
- { oQuiet, "quiet", 0, N_("be somewhat more quiet") },
- { oNoTTY, "no-tty", 0, N_("don't use the terminal at all") },
-#if 0
- { oForceV3Sigs, "force-v3-sigs", 0, N_("force v3 signatures") },
- { oForceMDC, "force-mdc", 0, N_("always use a MDC for encryption") },
-#endif
- { oDryRun, "dry-run", 0, N_("do not make any changes") },
- /*{ oInteractive, "interactive", 0, N_("prompt before overwriting") }, */
- /*{ oUseAgent, "use-agent",0, N_("use the gpg-agent")},*/
- { oBatch, "batch", 0, N_("batch mode: never ask")},
- { oAnswerYes, "yes", 0, N_("assume yes on most questions")},
- { oAnswerNo, "no", 0, N_("assume no on most questions")},
-
- { oKeyring, "keyring" ,2, N_("add this keyring to the list of keyrings")},
- { oSecretKeyring, "secret-keyring" ,2, N_("add this secret keyring to the list")},
- { oDefaultKey, "default-key" ,2, N_("|NAME|use NAME as default secret key")},
- { oKeyServer, "keyserver",2, N_("|HOST|use this keyserver to lookup keys")},
- { oCharset, "charset" , 2, N_("|NAME|set terminal charset to NAME") },
- { oOptions, "options" , 2, N_("read options from file")},
-
- { oDebug, "debug" ,4|16, "@"},
- { oDebugAll, "debug-all" ,0, "@"},
- { oDebugWait, "debug-wait" ,1, "@"},
- { oDebugNoChainValidation, "debug-no-chain-validation" ,0, "@"},
- { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") },
- { aDummy, "no-comment", 0, "@"},
- { aDummy, "completes-needed", 1, "@"},
- { aDummy, "marginals-needed", 1, "@"},
- { oMaxCertDepth, "max-cert-depth", 1, "@" },
- { aDummy, "trusted-key", 2, "@"},
- { oLoadExtension, "load-extension" ,2,
- N_("|FILE|load extension module FILE")},
- { aDummy, "rfc1991", 0, "@"},
- { aDummy, "openpgp", 0, "@"},
- { aDummy, "s2k-mode", 1, "@"},
- { aDummy, "s2k-digest-algo",2, "@"},
- { aDummy, "s2k-cipher-algo",2, "@"},
- { oCipherAlgo, "cipher-algo", 2 , N_("|NAME|use cipher algorithm NAME")},
- { oDigestAlgo, "digest-algo", 2 ,
- N_("|NAME|use message digest algorithm NAME")},
-#if 0
- { oCompressAlgo, "compress-algo", 1 , N_("|N|use compress algorithm N")},
-#endif
- { aDummy, "throw-keyid", 0, "@"},
- { aDummy, "notation-data", 2, "@"},
-
- { 302, NULL, 0, N_(
- "@\n(See the man page for a complete listing of all commands and options)\n"
- )},
-
- { 303, NULL, 0, N_("@\nExamples:\n\n"
- " -se -r Bob [file] sign and encrypt for user Bob\n"
- " --clearsign [file] make a clear text signature\n"
- " --detach-sign [file] make a detached signature\n"
- " --list-keys [names] show keys\n"
- " --fingerprint [names] show fingerprints\n" ) },
-
- /* hidden options */
- { oNoVerbose, "no-verbose", 0, "@"},
-
- { oEnableSpecialFilenames, "enable-special-filenames", 0, "@" },
-
-
- { oTrustDBName, "trustdb-name", 2, "@" },
- { oNoSecmemWarn, "no-secmem-warning", 0, "@" },
- { oNoArmor, "no-armor", 0, "@"},
- { oNoArmor, "no-armour", 0, "@"},
- { oNoDefKeyring, "no-default-keyring", 0, "@" },
- { oNoGreeting, "no-greeting", 0, "@" },
- { oNoOptions, "no-options", 0, "@" }, /* shortcut for --options /dev/null */
- { oHomedir, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */
- { oAgentProgram, "agent-program", 2 , "@" },
- { oDisplay, "display", 2, "@" },
- { oTTYname, "ttyname", 2, "@" },
- { oTTYtype, "ttytype", 2, "@" },
- { oLCctype, "lc-ctype", 2, "@" },
- { oLCmessages, "lc-messages", 2, "@" },
- { oDirmngrProgram, "dirmngr-program", 2 , "@" },
- { oFakedSystemTime, "faked-system-time", 4, "@" }, /* (epoch time) */
-
-
- { oNoBatch, "no-batch", 0, "@" },
- { oWithColons, "with-colons", 0, "@"},
- { oWithKeyData,"with-key-data", 0, "@"},
- { aListKeys, "list-key", 0, "@" }, /* alias */
- { aListSigs, "list-sig", 0, "@" }, /* alias */
- { aListSigs, "check-sig",0, "@" }, /* alias */
- { oSkipVerify, "skip-verify",0, "@" },
- { oCompressKeys, "compress-keys",0, "@"},
- { oCompressSigs, "compress-sigs",0, "@"},
- { oAlwaysTrust, "always-trust", 0, "@"},
- { oNoVersion, "no-version", 0, "@"},
- { oLockOnce, "lock-once", 0, "@" },
- { oLockMultiple, "lock-multiple", 0, "@" },
- { oLockNever, "lock-never", 0, "@" },
- { oLoggerFD, "logger-fd",1, "@" },
- { oWithFingerprint, "with-fingerprint", 0, "@" },
- { oDisableCipherAlgo, "disable-cipher-algo", 2, "@" },
- { oDisablePubkeyAlgo, "disable-pubkey-algo", 2, "@" },
- { oHonorHttpProxy,"honor-http-proxy", 0, "@" },
- { oListOnly, "list-only", 0, "@"},
- { oIgnoreTimeConflict, "ignore-time-conflict", 0, "@" },
- { oNoRandomSeedFile, "no-random-seed-file", 0, "@" },
-{0} };
-
-
-
-int gpgsm_errors_seen = 0;
-
-/* It is possible that we are currentlu running under setuid permissions */
-static int maybe_setuid = 1;
-
-/* Option --enable-special-filenames */
-static int allow_special_filenames;
-
-
-static char *build_list (const char *text,
- const char *(*mapf)(int), int (*chkf)(int));
-static void set_cmd (enum cmd_and_opt_values *ret_cmd,
- enum cmd_and_opt_values new_cmd );
-
-static void emergency_cleanup (void);
-static int check_special_filename (const char *fname);
-static int open_read (const char *filename);
-static FILE *open_fwrite (const char *filename);
-
-
-static int
-our_pk_test_algo (int algo)
-{
- return 1;
-}
-
-static int
-our_cipher_test_algo (int algo)
-{
- return 1;
-}
-
-static int
-our_md_test_algo (int algo)
-{
- return 1;
-}
-
-static const char *
-my_strusage( int level )
-{
- static char *digests, *pubkeys, *ciphers;
- const char *p;
-
- switch (level)
- {
- case 11: p = "gpgsm (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p = _("Please report bugs to <" PACKAGE_BUGREPORT ">.\n");
- break;
- case 1:
- case 40: p = _("Usage: gpgsm [options] [files] (-h for help)");
- break;
- case 41:
- p = _("Syntax: gpgsm [options] [files]\n"
- "sign, check, encrypt or decrypt using the S/MIME protocol\n"
- "default operation depends on the input data\n");
- break;
-
- case 31: p = "\nHome: "; break;
- case 32: p = opt.homedir; break;
- case 33: p = _("\nSupported algorithms:\n"); break;
- case 34:
- if (!ciphers)
- ciphers = build_list ("Cipher: ", gcry_cipher_algo_name,
- our_cipher_test_algo );
- p = ciphers;
- break;
- case 35:
- if (!pubkeys)
- pubkeys = build_list ("Pubkey: ", gcry_pk_algo_name,
- our_pk_test_algo );
- p = pubkeys;
- break;
- case 36:
- if (!digests)
- digests = build_list("Hash: ", gcry_md_algo_name, our_md_test_algo );
- p = digests;
- break;
-
- default: p = NULL; break;
- }
- return p;
-}
-
-
-static char *
-build_list (const char *text, const char * (*mapf)(int), int (*chkf)(int))
-{
- int i;
- size_t n=strlen(text)+2;
- char *list, *p;
-
- if (maybe_setuid) {
- gcry_control (GCRYCTL_DROP_PRIVS); /* drop setuid */
- }
-
- for (i=1; i < 110; i++ )
- if (!chkf(i))
- n += strlen(mapf(i)) + 2;
- list = xmalloc (21 + n);
- *list = 0;
- for (p=NULL, i=1; i < 110; i++)
- {
- if (!chkf(i))
- {
- if( !p )
- p = stpcpy (list, text );
- else
- p = stpcpy (p, ", ");
- p = stpcpy (p, mapf(i) );
- }
- }
- if (p)
- p = stpcpy(p, "\n" );
- return list;
-}
-
-
-static void
-i18n_init(void)
-{
-#ifdef USE_SIMPLE_GETTEXT
- set_gettext_file (PACKAGE);
-#else
-# ifdef ENABLE_NLS
-# ifdef HAVE_LC_MESSAGES
- setlocale (LC_TIME, "");
- setlocale (LC_MESSAGES, "");
-# else
- setlocale (LC_ALL, "" );
-# endif
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-# endif
-#endif
-}
-
-
-static void
-wrong_args (const char *text)
-{
- fputs (_("usage: gpgsm [options] "), stderr);
- fputs (text, stderr);
- putc ('\n', stderr);
- gpgsm_exit (2);
-}
-
-
-static void
-set_debug(void)
-{
- if (opt.debug & DBG_MPI_VALUE)
- gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 2);
- if (opt.debug & DBG_CRYPTO_VALUE )
- gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
-}
-
-
-static void
-set_cmd (enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd)
-{
- enum cmd_and_opt_values cmd = *ret_cmd;
-
- if (!cmd || cmd == new_cmd)
- cmd = new_cmd;
- else if ( cmd == aSign && new_cmd == aEncr )
- cmd = aSignEncr;
- else if ( cmd == aEncr && new_cmd == aSign )
- cmd = aSignEncr;
- else if ( (cmd == aSign && new_cmd == aClearsign)
- || (cmd == aClearsign && new_cmd == aSign) )
- cmd = aClearsign;
- else
- {
- log_error(_("conflicting commands\n"));
- gpgsm_exit(2);
- }
-
- *ret_cmd = cmd;
-}
-
-
-int
-main ( int argc, char **argv)
-{
- ARGPARSE_ARGS pargs;
- int orig_argc;
- char **orig_argv;
- const char *fname;
- /* char *username;*/
- int may_coredump;
- STRLIST sl, remusr= NULL, locusr=NULL;
- STRLIST nrings=NULL;
- int detached_sig = 0;
- FILE *configfp = NULL;
- char *configname = NULL;
- unsigned configlineno;
- int parse_debug = 0;
- int default_config =1;
- int default_keyring = 1;
- char *logfile = NULL;
- int greeting = 0;
- int nogreeting = 0;
- int debug_wait = 0;
- int use_random_seed = 1;
- int with_fpr = 0;
- char *def_digest_string = NULL;
- enum cmd_and_opt_values cmd = 0;
- struct server_control_s ctrl;
- CERTLIST recplist = NULL;
- CERTLIST signerlist = NULL;
-
- /* trap_unaligned ();*/
- set_strusage (my_strusage);
- gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
- /* We don't need any locking in libgcrypt unless we use any kind of
- threading. */
- gcry_control (GCRYCTL_DISABLE_INTERNAL_LOCKING);
-
- /* Please note that we may running SUID(ROOT), so be very CAREFUL
- when adding any stuff between here and the call to secmem_init()
- somewhere after the option parsing */
- log_set_prefix ("gpgsm", 1);
- /* check that the libraries are suitable. Do it here because the
- option parse may need services of the library */
- if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
- {
- log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
- NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
- }
- if (!ksba_check_version (NEED_KSBA_VERSION) )
- {
- log_fatal( _("libksba is too old (need %s, have %s)\n"),
- NEED_KSBA_VERSION, ksba_check_version (NULL) );
- }
-
- gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
-
- may_coredump = disable_core_dumps ();
-
- gnupg_init_signals (0, emergency_cleanup);
-
- create_dotlock (NULL); /* register locking cleanup */
- i18n_init();
-
- opt.def_cipher_algoid = "1.2.840.113549.3.7"; /*des-EDE3-CBC*/
-#ifdef __MINGW32__
- opt.homedir = read_w32_registry_string ( NULL,
- "Software\\GNU\\GnuPG", "HomeDir" );
-#else
- opt.homedir = getenv ("GNUPGHOME");
-#endif
- if (!opt.homedir || !*opt.homedir )
- opt.homedir = GNUPG_DEFAULT_HOMEDIR;
-
- /* first check whether we have a config file on the commandline */
- orig_argc = argc;
- orig_argv = argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1|(1<<6); /* do not remove the args, ignore version */
- while (arg_parse( &pargs, opts))
- {
- if (pargs.r_opt == oDebug || pargs.r_opt == oDebugAll)
- parse_debug++;
- else if (pargs.r_opt == oOptions)
- { /* yes there is one, so we do not try the default one but
- read the config file when it is encountered at the
- commandline */
- default_config = 0;
- }
- else if (pargs.r_opt == oNoOptions)
- default_config = 0; /* --no-options */
- else if (pargs.r_opt == oHomedir)
- opt.homedir = pargs.r.ret_str;
- }
-
-
- /* initialize the secure memory. */
- gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
- maybe_setuid = 0;
-
- /*
- Now we are now working under our real uid
- */
-
- ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free );
- assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
- keybox_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
-
- /* Setup a default control structure for command line mode */
- memset (&ctrl, 0, sizeof ctrl);
- gpgsm_init_default_ctrl (&ctrl);
- ctrl.no_server = 1;
- ctrl.status_fd = -1; /* not status output */
- ctrl.autodetect_encoding = 1;
-
- /* set the default option file */
- if (default_config )
- configname = make_filename (opt.homedir, "gpgsm.conf", NULL);
- /* cet the default policy file */
- opt.policy_file = make_filename (opt.homedir, "policies.txt", NULL);
-
- argc = orig_argc;
- argv = orig_argv;
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags = 1; /* do not remove the args */
-
- next_pass:
- if (configname) {
- configlineno = 0;
- configfp = fopen (configname, "r");
- if (!configfp)
- {
- if (default_config)
- {
- if (parse_debug)
- log_info (_("NOTE: no default option file `%s'\n"), configname);
- }
- else
- {
- log_error (_("option file `%s': %s\n"), configname, strerror(errno));
- gpgsm_exit(2);
- }
- xfree(configname);
- configname = NULL;
- }
- if (parse_debug && configname)
- log_info (_("reading options from `%s'\n"), configname);
- default_config = 0;
- }
-
- while (optfile_parse (configfp, configname, &configlineno, &pargs, opts))
- {
- switch (pargs.r_opt)
- {
- case aServer:
- opt.batch = 1;
- set_cmd (&cmd, aServer);
- break;
-
- case aCheckKeys: set_cmd (&cmd, aCheckKeys); break;
- case aImport: set_cmd (&cmd, aImport); break;
- case aSendKeys: set_cmd (&cmd, aSendKeys); break;
- case aRecvKeys: set_cmd (&cmd, aRecvKeys); break;
- case aExport: set_cmd (&cmd, aExport); break;
- case aListKeys: set_cmd (&cmd, aListKeys); break;
- case aListExternalKeys: set_cmd (&cmd, aListExternalKeys); break;
- case aListSecretKeys: set_cmd (&cmd, aListSecretKeys); break;
- case aListSigs: set_cmd (&cmd, aListSigs); break;
-
- case aLearnCard: set_cmd (&cmd, aLearnCard); break;
-
- case aDeleteKey:
- set_cmd (&cmd, aDeleteKey);
- /*greeting=1;*/
- break;
-
- case aDetachedSign:
- detached_sig = 1;
- set_cmd (&cmd, aSign );
- break;
-
- case aSym: set_cmd (&cmd, aSym); break;
- case aDecrypt: set_cmd (&cmd, aDecrypt); break;
- case aEncr: set_cmd (&cmd, aEncr); break;
- case aSign: set_cmd (&cmd, aSign ); break;
- case aKeygen: set_cmd (&cmd, aKeygen); greeting=1; break;
- case aClearsign: set_cmd (&cmd, aClearsign); break;
- case aVerify: set_cmd (&cmd, aVerify); break;
-
-
- /* output encoding selection */
- case oArmor:
- ctrl.create_pem = 1;
- break;
- case oBase64:
- ctrl.create_pem = 0;
- ctrl.create_base64 = 1;
- break;
- case oNoArmor:
- ctrl.create_pem = 0;
- ctrl.create_base64 = 0;
- break;
-
- /* Input encoding selection */
- case oAssumeArmor:
- ctrl.autodetect_encoding = 0;
- ctrl.is_pem = 1;
- ctrl.is_base64 = 0;
- break;
- case oAssumeBase64:
- ctrl.autodetect_encoding = 0;
- ctrl.is_pem = 0;
- ctrl.is_base64 = 1;
- break;
- case oAssumeBinary:
- ctrl.autodetect_encoding = 0;
- ctrl.is_pem = 0;
- ctrl.is_base64 = 0;
- break;
-
- case oDisableCRLChecks:
- opt.no_crl_check = 1;
- break;
- case oEnableCRLChecks:
- opt.no_crl_check = 0;
- break;
-
- case oIncludeCerts: ctrl.include_certs = pargs.r.ret_int; break;
-
- case oPolicyFile:
- xfree (opt.policy_file);
- if (*pargs.r.ret_str)
- opt.policy_file = xstrdup (pargs.r.ret_str);
- else
- opt.policy_file = NULL;
- break;
-
- case oDisablePolicyChecks:
- opt.no_policy_check = 1;
- break;
- case oEnablePolicyChecks:
- opt.no_policy_check = 0;
- break;
-
- case oAutoIssuerKeyRetrieve:
- opt.auto_issuer_key_retrieve = 1;
- break;
-
- case oOutput: opt.outfile = pargs.r.ret_str; break;
-
-
- case oQuiet: opt.quiet = 1; break;
- case oNoTTY: /* fixme:tty_no_terminal(1);*/ break;
- case oDryRun: opt.dry_run = 1; break;
-
- case oVerbose:
- opt.verbose++;
- gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
- break;
- case oNoVerbose:
- opt.verbose = 0;
- gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
- break;
-
- case oLogFile: logfile = pargs.r.ret_str; break;
-
- case oBatch:
- opt.batch = 1;
- greeting = 0;
- break;
- case oNoBatch: opt.batch = 0; break;
-
- case oAnswerYes: opt.answer_yes = 1; break;
- case oAnswerNo: opt.answer_no = 1; break;
-
- case oKeyring: append_to_strlist (&nrings, pargs.r.ret_str); break;
-
- case oDebug: opt.debug |= pargs.r.ret_ulong; break;
- case oDebugAll: opt.debug = ~0; break;
- case oDebugWait: debug_wait = pargs.r.ret_int; break;
- case oDebugNoChainValidation: opt.no_chain_validation = 1; break;
-
- case oStatusFD: ctrl.status_fd = pargs.r.ret_int; break;
- case oLoggerFD: log_set_fd (pargs.r.ret_int ); break;
- case oWithFingerprint:
- with_fpr=1; /*fall thru*/
- case oFingerprint:
- opt.fingerprint++;
- break;
-
- case oOptions:
- /* config files may not be nested (silently ignore them) */
- if (!configfp)
- {
- xfree(configname);
- configname = xstrdup (pargs.r.ret_str);
- goto next_pass;
- }
- break;
- case oNoOptions: break; /* no-options */
- case oHomedir: opt.homedir = pargs.r.ret_str; break;
- case oAgentProgram: opt.agent_program = pargs.r.ret_str; break;
- case oDisplay: opt.display = xstrdup (pargs.r.ret_str); break;
- case oTTYname: opt.ttyname = xstrdup (pargs.r.ret_str); break;
- case oTTYtype: opt.ttytype = xstrdup (pargs.r.ret_str); break;
- case oLCctype: opt.lc_ctype = xstrdup (pargs.r.ret_str); break;
- case oLCmessages: opt.lc_messages = xstrdup (pargs.r.ret_str); break;
- case oDirmngrProgram: opt.dirmngr_program = pargs.r.ret_str; break;
-
- case oFakedSystemTime:
- gnupg_set_time ( (time_t)pargs.r.ret_ulong, 0);
- break;
-
- case oNoDefKeyring: default_keyring = 0; break;
- case oNoGreeting: nogreeting = 1; break;
-
- case oDefaultKey:
- /* fixme:opt.def_secret_key = pargs.r.ret_str;*/
- break;
- case oDefRecipient:
- if (*pargs.r.ret_str)
- opt.def_recipient = xstrdup (pargs.r.ret_str);
- break;
- case oDefRecipientSelf:
- xfree (opt.def_recipient);
- opt.def_recipient = NULL;
- opt.def_recipient_self = 1;
- break;
- case oNoDefRecipient:
- xfree (opt.def_recipient);
- opt.def_recipient = NULL;
- opt.def_recipient_self = 0;
- break;
-
- case oWithKeyData: opt.with_key_data=1; /* fall thru */
- case oWithColons: ctrl.with_colons = 1; break;
-
- case oSkipVerify: opt.skip_verify=1; break;
-
- case oNoEncryptTo: /*fixme: opt.no_encrypt_to = 1;*/ break;
- case oEncryptTo: /* store the recipient in the second list */
- sl = add_to_strlist (&remusr, pargs.r.ret_str);
- sl->flags = 1;
- break;
-
- case oRecipient: /* store the recipient */
- add_to_strlist ( &remusr, pargs.r.ret_str);
- break;
-
- case oTextmodeShort: /*fixme:opt.textmode = 2;*/ break;
- case oTextmode: /*fixme:opt.textmode=1;*/ break;
-
- case oUser: /* store the local users, the first one is the default */
- if (!opt.local_user)
- opt.local_user = pargs.r.ret_str;
- add_to_strlist (&locusr, pargs.r.ret_str);
- break;
-
- case oNoSecmemWarn:
- gcry_control (GCRYCTL_DISABLE_SECMEM_WARN);
- break;
-
- case oCipherAlgo:
- opt.def_cipher_algoid = pargs.r.ret_str;
- break;
-
- case oDisableCipherAlgo:
- {
- int algo = gcry_cipher_map_name (pargs.r.ret_str);
- gcry_cipher_ctl (NULL, GCRYCTL_DISABLE_ALGO, &algo, sizeof algo);
- }
- break;
- case oDisablePubkeyAlgo:
- {
- int algo = gcry_pk_map_name (pargs.r.ret_str);
- gcry_pk_ctl (GCRYCTL_DISABLE_ALGO,&algo, sizeof algo );
- }
- break;
-
- case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break;
- case oNoRandomSeedFile: use_random_seed = 0; break;
-
- case oEnableSpecialFilenames: allow_special_filenames =1; break;
-
-
- case aDummy:
- break;
- default:
- pargs.err = configfp? 1:2;
- break;
- }
- }
-
- if (configfp)
- {
- fclose (configfp);
- configfp = NULL;
- xfree (configname);
- configname = NULL;
- goto next_pass;
- }
-
- xfree (configname);
- configname = NULL;
-
- if (log_get_errorcount(0))
- gpgsm_exit(2);
-
- if (nogreeting)
- greeting = 0;
-
- if (greeting)
- {
- fprintf(stderr, "%s %s; %s\n",
- strusage(11), strusage(13), strusage(14) );
- fprintf(stderr, "%s\n", strusage(15) );
- }
-# ifdef IS_DEVELOPMENT_VERSION
- if (!opt.batch)
- {
- log_info ("NOTE: THIS IS A DEVELOPMENT VERSION!\n");
- log_info ("It is only intended for test purposes and should NOT be\n");
- log_info ("used in a production environment or with production keys!\n");
- }
-# endif
-
- if (may_coredump && !opt.quiet)
- log_info (_("WARNING: program may create a core file!\n"));
-
- if (logfile && cmd == aServer)
- {
- log_set_file (logfile);
- log_set_prefix (NULL, 1|2|4);
- }
-
- if (gnupg_faked_time_p ())
- {
- log_info (_("WARNING: running with faked system time: "));
- gpgsm_dump_time (gnupg_get_time ());
- log_printf ("\n");
- }
-
-/*FIXME if (opt.batch) */
-/* tty_batchmode (1); */
-
- gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
-
- set_debug ();
-
- /* FIXME: should set filenames of libgcrypt explicitly
- * gpg_opt_homedir = opt.homedir; */
-
- /* must do this after dropping setuid, because the mapping functions
- may try to load an module and we may have disabled an algorithm */
- if ( !gcry_cipher_map_name (opt.def_cipher_algoid)
- || !gcry_cipher_mode_from_oid (opt.def_cipher_algoid))
- log_error (_("selected cipher algorithm is invalid\n"));
-
- if (def_digest_string)
- {
- opt.def_digest_algo = gcry_md_map_name (def_digest_string);
- xfree (def_digest_string);
- def_digest_string = NULL;
- if (our_md_test_algo(opt.def_digest_algo) )
- log_error (_("selected digest algorithm is invalid\n"));
- }
-
- if (log_get_errorcount(0))
- gpgsm_exit(2);
-
- /* set the random seed file */
- if (use_random_seed) {
- char *p = make_filename (opt.homedir, "random_seed", NULL);
-#if 0
-#warning set_random_seed_file not yet available in Libgcrypt
- set_random_seed_file(p);
-#endif
- xfree(p);
- }
-
-
- if (!cmd && opt.fingerprint && !with_fpr)
- set_cmd (&cmd, aListKeys);
-
- if (!nrings && default_keyring) /* add default keybox */
- keydb_add_resource ("pubring.kbx", 0, 0);
- for (sl = nrings; sl; sl = sl->next)
- keydb_add_resource (sl->d, 0, 0);
- FREE_STRLIST(nrings);
-
-
- for (sl = locusr; sl; sl = sl->next)
- {
- int rc = gpgsm_add_to_certlist (&ctrl, sl->d, 1, &signerlist);
- if (rc)
- {
- log_error (_("can't sign using `%s': %s\n"),
- sl->d, gnupg_strerror (rc));
- gpgsm_status2 (&ctrl, STATUS_INV_RECP,
- rc == -1? "1":
- rc == GNUPG_No_Public_Key? "1":
- rc == GNUPG_Ambiguous_Name? "2":
- rc == GNUPG_Wrong_Key_Usage? "3":
- rc == GNUPG_Certificate_Revoked? "4":
- rc == GNUPG_Certificate_Expired? "5":
- rc == GNUPG_No_CRL_Known? "6":
- rc == GNUPG_CRL_Too_Old? "7":
- rc == GNUPG_No_Policy_Match? "8":
- rc == GNUPG_No_Secret_Key? "9":
- "0",
- sl->d, NULL);
- }
- }
- for (sl = remusr; sl; sl = sl->next)
- {
- int rc = gpgsm_add_to_certlist (&ctrl, sl->d, 0, &recplist);
- if (rc)
- {
- log_error (_("can't encrypt to `%s': %s\n"),
- sl->d, gnupg_strerror (rc));
- gpgsm_status2 (&ctrl, STATUS_INV_RECP,
- rc == -1? "1":
- rc == GNUPG_No_Public_Key? "1":
- rc == GNUPG_Ambiguous_Name? "2":
- rc == GNUPG_Wrong_Key_Usage? "3":
- rc == GNUPG_Certificate_Revoked? "4":
- rc == GNUPG_Certificate_Expired? "5":
- rc == GNUPG_No_CRL_Known? "6":
- rc == GNUPG_CRL_Too_Old? "7":
- rc == GNUPG_No_Policy_Match? "8":
- "0",
- sl->d, NULL);
- }
- }
- if (log_get_errorcount(0))
- gpgsm_exit(1); /* must stop for invalid recipients */
-
-
-
- fname = argc? *argv : NULL;
-
- switch (cmd)
- {
- case aServer:
- if (debug_wait)
- {
- log_debug ("waiting for debugger - my pid is %u .....\n",
- (unsigned int)getpid());
- sleep (debug_wait);
- log_debug ("... okay\n");
- }
- gpgsm_server ();
- break;
-
- case aEncr: /* encrypt the given file */
- if (!argc)
- gpgsm_encrypt (&ctrl, recplist, 0, stdout); /* from stdin */
- else if (argc == 1)
- gpgsm_encrypt (&ctrl, recplist, open_read (*argv), stdout); /* from file */
- else
- wrong_args (_("--encrypt [datafile]"));
- break;
-
- case aSign: /* sign the given file */
- /* FIXME: We don't handle --output yet. We should also allow
- to concatenate multiple files for signing because that is
- what gpg does.*/
- if (!argc)
- gpgsm_sign (&ctrl, signerlist,
- 0, detached_sig, stdout); /* create from stdin */
- else if (argc == 1)
- gpgsm_sign (&ctrl, signerlist,
- open_read (*argv), detached_sig, stdout); /* from file */
- else
- wrong_args (_("--sign [datafile]"));
- break;
-
- case aSignEncr: /* sign and encrypt the given file */
- log_error ("this command has not yet been implemented\n");
- break;
-
- case aClearsign: /* make a clearsig */
- log_error ("this command has not yet been implemented\n");
- break;
-
- case aVerify:
- {
- FILE *fp = NULL;
-
- if (argc == 2 && opt.outfile)
- log_info ("option --output ignored for a detached signature\n");
- else if (opt.outfile)
- fp = open_fwrite (opt.outfile);
-
- if (!argc)
- gpgsm_verify (&ctrl, 0, -1, fp); /* normal signature from stdin */
- else if (argc == 1)
- gpgsm_verify (&ctrl, open_read (*argv), -1, fp); /* std signature */
- else if (argc == 2) /* detached signature (sig, detached) */
- gpgsm_verify (&ctrl, open_read (*argv), open_read (argv[1]), NULL);
- else
- wrong_args (_("--verify [signature [detached_data]]"));
-
- if (fp && fp != stdout)
- fclose (fp);
- }
- break;
-
- case aVerifyFiles:
- log_error ("this command has not yet been implemented\n");
- break;
-
- case aDecrypt:
- if (!argc)
- gpgsm_decrypt (&ctrl, 0, stdout); /* from stdin */
- else if (argc == 1)
- gpgsm_decrypt (&ctrl, open_read (*argv), stdout); /* from file */
- else
- wrong_args (_("--decrypt [filename]"));
- break;
-
- case aDeleteKey:
- for (sl=NULL; argc; argc--, argv++)
- add_to_strlist (&sl, *argv);
- gpgsm_delete (&ctrl, sl);
- free_strlist(sl);
- break;
-
- case aListSigs:
- ctrl.with_chain = 1;
- case aListKeys:
- for (sl=NULL; argc; argc--, argv++)
- add_to_strlist (&sl, *argv);
- gpgsm_list_keys (&ctrl, sl, stdout, (0 | (1<<6)));
- free_strlist(sl);
- break;
-
- case aListExternalKeys:
- for (sl=NULL; argc; argc--, argv++)
- add_to_strlist (&sl, *argv);
- gpgsm_list_keys (&ctrl, sl, stdout, (0 | (1<<7)));
- free_strlist(sl);
- break;
-
- case aListSecretKeys:
- for (sl=NULL; argc; argc--, argv++)
- add_to_strlist (&sl, *argv);
- gpgsm_list_keys (&ctrl, sl, stdout, (2 | (1<<6)));
- free_strlist(sl);
- break;
-
- case aKeygen: /* generate a key */
- log_error ("this function is not yet available from the commandline\n");
- break;
-
- case aImport:
- gpgsm_import_files (&ctrl, argc, argv, open_read);
- break;
-
- case aExport:
- for (sl=NULL; argc; argc--, argv++)
- add_to_strlist (&sl, *argv);
- gpgsm_export (&ctrl, sl, stdout);
- free_strlist(sl);
- break;
-
-
- case aSendKeys:
- case aRecvKeys:
- log_error ("this command has not yet been implemented\n");
- break;
-
-
- case aLearnCard:
- if (argc)
- wrong_args ("--learn-card");
- else
- {
- int rc = gpgsm_agent_learn ();
- if (rc)
- log_error ("error learning card: %s\n", gnupg_strerror (rc));
- }
- break;
-
-
- default:
- log_error ("invalid command (there is no implicit command)\n");
- break;
- }
-
- /* cleanup */
- gpgsm_release_certlist (recplist);
- gpgsm_release_certlist (signerlist);
- FREE_STRLIST(remusr);
- FREE_STRLIST(locusr);
- gpgsm_exit(0);
- return 8; /*NEVER REACHED*/
-}
-
-/* Note: This function is used by signal handlers!. */
-static void
-emergency_cleanup (void)
-{
- gcry_control (GCRYCTL_TERM_SECMEM );
-}
-
-
-void
-gpgsm_exit (int rc)
-{
- #if 0
-#warning no update_random_seed_file
- update_random_seed_file();
- #endif
-#if 0
- /* at this time a bit annoying */
- if (opt.debug & DBG_MEMSTAT_VALUE)
- {
- gcry_control( GCRYCTL_DUMP_MEMORY_STATS );
- gcry_control( GCRYCTL_DUMP_RANDOM_STATS );
- }
- if (opt.debug)
- gcry_control (GCRYCTL_DUMP_SECMEM_STATS );
-#endif
- emergency_cleanup ();
- rc = rc? rc : log_get_errorcount(0)? 2 : gpgsm_errors_seen? 1 : 0;
- exit (rc);
-}
-
-
-void
-gpgsm_init_default_ctrl (struct server_control_s *ctrl)
-{
- ctrl->include_certs = 1; /* only include the signer's cert */
-}
-
-
-
-/* Check whether the filename has the form "-&nnnn", where n is a
- non-zero number. Returns this number or -1 if it is not the case. */
-static int
-check_special_filename (const char *fname)
-{
- if (allow_special_filenames
- && fname && *fname == '-' && fname[1] == '&' ) {
- int i;
-
- fname += 2;
- for (i=0; isdigit (fname[i]); i++ )
- ;
- if ( !fname[i] )
- return atoi (fname);
- }
- return -1;
-}
-
-
-
-/* Open the FILENAME for read and return the filedescriptor. Stop
- with an error message in case of problems. "-" denotes stdin and
- if special filenames are allowed the given fd is opened instead. */
-static int
-open_read (const char *filename)
-{
- int fd;
-
- if (filename[0] == '-' && !filename[1])
- return 0; /* stdin */
- fd = check_special_filename (filename);
- if (fd != -1)
- return fd;
- fd = open (filename, O_RDONLY);
- if (fd == -1)
- {
- log_error (_("can't open `%s': %s\n"), filename, strerror (errno));
- gpgsm_exit (2);
- }
- return fd;
-}
-
-/* Open FILENAME for fwrite and return the stream. Stop with an error
- message in case of problems. "-" denotes stdout and if special
- filenames are allowed the given fd is opened instead. Caller must
- close the returned stream unless it is stdout. */
-static FILE *
-open_fwrite (const char *filename)
-{
- int fd;
- FILE *fp;
-
- if (filename[0] == '-' && !filename[1])
- return stdout;
-
- fd = check_special_filename (filename);
- if (fd != -1)
- {
- fp = fdopen (dup (fd), "wb");
- if (!fp)
- {
- log_error ("fdopen(%d) failed: %s\n", fd, strerror (errno));
- gpgsm_exit (2);
- }
- return fp;
- }
- fp = fopen (filename, "wb");
- if (!fp)
- {
- log_error (_("can't open `%s': %s\n"), filename, strerror (errno));
- gpgsm_exit (2);
- }
- return fp;
-}
diff --git a/sm/gpgsm.h b/sm/gpgsm.h
deleted file mode 100644
index 50590206e..000000000
--- a/sm/gpgsm.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/* gpgsm.h - Global definitions for GpgSM
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 GPGSM_H
-#define GPGSM_H
-
-#include <ksba.h>
-#include "../common/util.h"
-#include "../common/errors.h"
-
-#define MAX_DIGEST_LEN 24
-
-/* A large struct name "opt" to keep global flags */
-struct {
- unsigned int debug; /* debug flags (DBG_foo_VALUE) */
- int verbose; /* verbosity level */
- int quiet; /* be as quiet as possible */
- int batch; /* run in batch mode, i.e w/o any user interaction */
- int answer_yes; /* assume yes on most questions */
- int answer_no; /* assume no on most questions */
- int dry_run; /* don't change any persistent data */
-
- const char *homedir; /* configuration directory name */
- const char *agent_program;
- char *display;
- char *ttyname;
- char *ttytype;
- char *lc_ctype;
- char *lc_messages;
-
- const char *dirmngr_program;
- char *outfile; /* name of output file */
-
- int with_key_data;/* include raw key in the column delimted output */
-
- int fingerprint; /* list fingerprints in all key listings */
-
- int armor; /* force base64 armoring (see also ctrl.with_base64) */
- int no_armor; /* don't try to figure out whether data is base64 armored*/
-
- const char *def_cipher_algoid; /* cipher algorithm to use if
- nothing else is specified */
-
- int def_digest_algo; /* Ditto for hash algorithm */
- int def_compress_algo; /* Ditto for compress algorithm */
-
- char *def_recipient; /* userID of the default recipient */
- int def_recipient_self; /* The default recipient is the default key */
-
- char *local_user; /* NULL or argument to -u */
-
- int always_trust; /* Trust the given keys even if there is no
- valid certification chain */
- int skip_verify; /* do not check signatures on data */
-
- int lock_once; /* Keep lock once they are set */
-
- int ignore_time_conflict; /* Ignore certain time conflicts */
-
- int no_crl_check; /* Don't do a CRL check */
-
- char *policy_file; /* full pathname of policy file */
- int no_policy_check; /* ignore certificate policies */
- int no_chain_validation; /* Bypass all cert chain validity tests */
-
- int auto_issuer_key_retrieve; /* try to retrieve a missing issuer key. */
-} opt;
-
-
-#define DBG_X509_VALUE 1 /* debug x.509 data reading/writing */
-#define DBG_MPI_VALUE 2 /* debug mpi details */
-#define DBG_CRYPTO_VALUE 4 /* debug low level crypto */
-#define DBG_MEMORY_VALUE 32 /* debug memory allocation stuff */
-#define DBG_CACHE_VALUE 64 /* debug the caching */
-#define DBG_MEMSTAT_VALUE 128 /* show memory statistics */
-#define DBG_HASHING_VALUE 512 /* debug hashing operations */
-#define DBG_ASSUAN_VALUE 1024 /* debug assuan communication */
-
-#define DBG_X509 (opt.debug & DBG_X509_VALUE)
-#define DBG_CRYPTO (opt.debug & DBG_CRYPTO_VALUE)
-#define DBG_MEMORY (opt.debug & DBG_MEMORY_VALUE)
-#define DBG_CACHE (opt.debug & DBG_CACHE_VALUE)
-#define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
-#define DBG_ASSUAN (opt.debug & DBG_ASSUAN_VALUE)
-
-struct server_local_s;
-
-/* Note that the default values for this are set by
- gpgsm_init_default_ctrl() */
-struct server_control_s {
- int no_server; /* we are not running under server control */
- int status_fd; /* only for non-server mode */
- struct server_local_s *server_local;
- int with_colons; /* use column delimited output format */
- int with_chain; /* include the certifying certs in a listing */
-
- int autodetect_encoding; /* try to detect the input encoding */
- int is_pem; /* Is in PEM format */
- int is_base64; /* is in plain base-64 format */
-
- int create_base64; /* Create base64 encoded output */
- int create_pem; /* create PEM output */
- const char *pem_name; /* PEM name to use */
-
- int include_certs; /* -1 to send all certificates in the chain
- along with a signature or the number of
- certificates up the chain (0 = none, 1 = only
- signer) */
-};
-typedef struct server_control_s *CTRL;
-
-/* data structure used in base64.c */
-typedef struct base64_context_s *Base64Context;
-
-
-struct certlist_s {
- struct certlist_s *next;
- KsbaCert cert;
-};
-typedef struct certlist_s *CERTLIST;
-
-/*-- gpgsm.c --*/
-void gpgsm_exit (int rc);
-void gpgsm_init_default_ctrl (struct server_control_s *ctrl);
-
-/*-- server.c --*/
-void gpgsm_server (void);
-void gpgsm_status (CTRL ctrl, int no, const char *text);
-void gpgsm_status2 (CTRL ctrl, int no, ...);
-
-/*-- fingerprint --*/
-char *gpgsm_get_fingerprint (KsbaCert cert, int algo, char *array, int *r_len);
-char *gpgsm_get_fingerprint_string (KsbaCert cert, int algo);
-char *gpgsm_get_fingerprint_hexstring (KsbaCert cert, int algo);
-unsigned long gpgsm_get_short_fingerprint (KsbaCert cert);
-char *gpgsm_get_keygrip (KsbaCert cert, char *array);
-char *gpgsm_get_keygrip_hexstring (KsbaCert cert);
-char *gpgsm_get_certid (KsbaCert cert);
-
-
-/*-- base64.c --*/
-int gpgsm_create_reader (Base64Context *ctx,
- CTRL ctrl, FILE *fp, KsbaReader *r_reader);
-void gpgsm_destroy_reader (Base64Context ctx);
-int gpgsm_create_writer (Base64Context *ctx,
- CTRL ctrl, FILE *fp, KsbaWriter *r_writer);
-int gpgsm_finish_writer (Base64Context ctx);
-void gpgsm_destroy_writer (Base64Context ctx);
-
-
-/*-- certdump.c --*/
-void gpgsm_print_serial (FILE *fp, KsbaConstSexp p);
-void gpgsm_print_time (FILE *fp, time_t t);
-void gpgsm_print_name (FILE *fp, const char *string);
-
-void gpgsm_dump_cert (const char *text, KsbaCert cert);
-void gpgsm_dump_serial (KsbaConstSexp p);
-void gpgsm_dump_time (time_t t);
-void gpgsm_dump_string (const char *string);
-
-
-
-/*-- certcheck.c --*/
-int gpgsm_check_cert_sig (KsbaCert issuer_cert, KsbaCert cert);
-int gpgsm_check_cms_signature (KsbaCert cert, KsbaConstSexp sigval,
- GCRY_MD_HD md, int hash_algo);
-/* fixme: move create functions to another file */
-int gpgsm_create_cms_signature (KsbaCert cert, GCRY_MD_HD md, int mdalgo,
- char **r_sigval);
-
-
-/*-- certchain.c --*/
-int gpgsm_walk_cert_chain (KsbaCert start, KsbaCert *r_next);
-int gpgsm_is_root_cert (KsbaCert cert);
-int gpgsm_validate_chain (CTRL ctrl, KsbaCert cert, time_t *r_exptime);
-int gpgsm_basic_cert_check (KsbaCert cert);
-
-/*-- certlist.c --*/
-int gpgsm_cert_use_sign_p (KsbaCert cert);
-int gpgsm_cert_use_encrypt_p (KsbaCert cert);
-int gpgsm_cert_use_verify_p (KsbaCert cert);
-int gpgsm_cert_use_decrypt_p (KsbaCert cert);
-int gpgsm_cert_use_cert_p (KsbaCert cert);
-int gpgsm_add_to_certlist (CTRL ctrl, const char *name, int secret,
- CERTLIST *listaddr);
-void gpgsm_release_certlist (CERTLIST list);
-int gpgsm_find_cert (const char *name, KsbaCert *r_cert);
-
-/*-- keylist.c --*/
-void gpgsm_list_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode);
-
-/*-- import.c --*/
-int gpgsm_import (CTRL ctrl, int in_fd);
-int gpgsm_import_files (CTRL ctrl, int nfiles, char **files,
- int (*of)(const char *fname));
-
-/*-- export.c --*/
-void gpgsm_export (CTRL ctrl, STRLIST names, FILE *fp);
-
-/*-- delete.c --*/
-int gpgsm_delete (CTRL ctrl, STRLIST names);
-
-/*-- verify.c --*/
-int gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp);
-
-/*-- sign.c --*/
-int gpgsm_get_default_cert (KsbaCert *r_cert);
-int gpgsm_sign (CTRL ctrl, CERTLIST signerlist,
- int data_fd, int detached, FILE *out_fp);
-
-/*-- encrypt.c --*/
-int gpgsm_encrypt (CTRL ctrl, CERTLIST recplist, int in_fd, FILE *out_fp);
-
-/*-- decrypt.c --*/
-int gpgsm_decrypt (CTRL ctrl, int in_fd, FILE *out_fp);
-
-/*-- certreqgen.c --*/
-int gpgsm_genkey (CTRL ctrl, int in_fd, FILE *out_fp);
-
-/*-- call-agent.c --*/
-int gpgsm_agent_pksign (const char *keygrip,
- unsigned char *digest,
- size_t digestlen,
- int digestalgo,
- char **r_buf, size_t *r_buflen);
-int gpgsm_agent_pkdecrypt (const char *keygrip,
- KsbaConstSexp ciphertext,
- char **r_buf, size_t *r_buflen);
-int gpgsm_agent_genkey (KsbaConstSexp keyparms, KsbaSexp *r_pubkey);
-int gpgsm_agent_istrusted (KsbaCert cert);
-int gpgsm_agent_havekey (const char *hexkeygrip);
-int gpgsm_agent_marktrusted (KsbaCert cert);
-int gpgsm_agent_learn (void);
-
-/*-- call-dirmngr.c --*/
-int gpgsm_dirmngr_isvalid (KsbaCert cert);
-int gpgsm_dirmngr_lookup (CTRL ctrl, STRLIST names,
- void (*cb)(void*, KsbaCert), void *cb_value);
-
-
-
-
-
-#endif /*GPGSM_H*/
diff --git a/sm/import.c b/sm/import.c
deleted file mode 100644
index 2fc6b1a79..000000000
--- a/sm/import.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* import.c - Import certificates
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-struct stats_s {
- unsigned long count;
- unsigned long imported;
- unsigned long unchanged;
- unsigned long not_imported;
-};
-
-
-
-static void
-print_imported_status (CTRL ctrl, KsbaCert cert)
-{
- char *fpr;
-
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- gpgsm_status2 (ctrl, STATUS_IMPORTED, fpr, "[X.509]", NULL);
- xfree (fpr);
-}
-
-
-/* Print an IMPORT_PROBLEM status. REASON is one of:
- 0 := "No specific reason given".
- 1 := "Invalid Certificate".
- 2 := "Issuer Certificate missing".
- 3 := "Certificate Chain too long".
- 4 := "Error storing certificate".
-*/
-static void
-print_import_problem (CTRL ctrl, KsbaCert cert, int reason)
-{
- char *fpr = NULL;
- char buf[25];
- int i;
-
- sprintf (buf, "%d", reason);
- if (cert)
- {
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- /* detetect an error (all high) value */
- for (i=0; fpr[i] == 'F'; i++)
- ;
- if (!fpr[i])
- {
- xfree (fpr);
- fpr = NULL;
- }
- }
- gpgsm_status2 (ctrl, STATUS_IMPORT_PROBLEM, buf, fpr, NULL);
- xfree (fpr);
-}
-
-
-void
-print_imported_summary (CTRL ctrl, struct stats_s *stats)
-{
- char buf[14*25];
-
- if (!opt.quiet)
- {
- log_info (_("total number processed: %lu\n"), stats->count);
- if (stats->imported)
- {
- log_info (_(" imported: %lu"), stats->imported );
- log_printf ("\n");
- }
- if (stats->unchanged)
- log_info (_(" unchanged: %lu\n"), stats->unchanged);
- if (stats->not_imported)
- log_info (_(" not imported: %lu\n"), stats->not_imported);
- }
-
- sprintf (buf, "%lu 0 %lu 0 %lu 0 0 0 0 0 0 0 0 %lu",
- stats->count,
- stats->imported,
- stats->unchanged,
- stats->not_imported
- );
- gpgsm_status (ctrl, STATUS_IMPORT_RES, buf);
-}
-
-
-
-static void
-check_and_store (CTRL ctrl, struct stats_s *stats, KsbaCert cert, int depth)
-{
- int rc;
-
- stats->count++;
- if ( depth >= 50 )
- {
- log_error (_("certificate chain too long\n"));
- stats->not_imported++;
- print_import_problem (ctrl, cert, 3);
- return;
- }
-
- rc = gpgsm_basic_cert_check (cert);
- if (!rc)
- {
- int existed;
-
- if (!keydb_store_cert (cert, 0, &existed))
- {
- KsbaCert next = NULL;
-
- if (!existed)
- {
- print_imported_status (ctrl, cert);
- stats->imported++;
- }
- else
- stats->unchanged++;
-
- if (opt.verbose > 1 && existed)
- {
- if (depth)
- log_info ("issuer certificate already in DB\n");
- else
- log_info ("certificate already in DB\n");
- }
- else if (opt.verbose && !existed)
- {
- if (depth)
- log_info ("issuer certificate imported\n");
- else
- log_info ("certificate imported\n");
- }
- /* Now lets walk up the chain and import all certificates up
- the chain.*/
- else if (!gpgsm_walk_cert_chain (cert, &next))
- {
- check_and_store (ctrl, stats, next, depth+1);
- ksba_cert_release (next);
- }
- }
- else
- {
- log_error (_("error storing certificate\n"));
- stats->not_imported++;
- print_import_problem (ctrl, cert, 4);
- }
- }
- else
- {
- log_error (_("basic certificate checks failed - not imported\n"));
- stats->not_imported++;
- print_import_problem (ctrl, cert,
- rc == GNUPG_Missing_Certificate? 2 :
- rc == GNUPG_Bad_Certificate? 1 : 0);
- }
-}
-
-
-
-
-static int
-import_one (CTRL ctrl, struct stats_s *stats, int in_fd)
-{
- int rc;
- Base64Context b64reader = NULL;
- KsbaReader reader;
- KsbaCert cert = NULL;
- KsbaCMS cms = NULL;
- FILE *fp = NULL;
- KsbaContentType ct;
-
- fp = fdopen ( dup (in_fd), "rb");
- if (!fp)
- {
- log_error ("fdopen() failed: %s\n", strerror (errno));
- rc = seterr (IO_Error);
- goto leave;
- }
-
- rc = gpgsm_create_reader (&b64reader, ctrl, fp, &reader);
- if (rc)
- {
- log_error ("can't create reader: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- ct = ksba_cms_identify (reader);
- if (ct == KSBA_CT_SIGNED_DATA)
- { /* This is probably a signed-only message - import the certs */
- KsbaStopReason stopreason;
- int i;
-
- cms = ksba_cms_new ();
- if (!cms)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- rc = ksba_cms_set_reader_writer (cms, reader, NULL);
- if (rc)
- {
- log_error ("ksba_cms_set_reader_writer failed: %s\n",
- ksba_strerror (rc));
- rc = map_ksba_err (rc);
- goto leave;
- }
-
-
- do
- {
- rc = ksba_cms_parse (cms, &stopreason);
- if (rc)
- {
- log_error ("ksba_cms_parse failed: %s\n", ksba_strerror (rc));
- rc = map_ksba_err (rc);
- goto leave;
- }
-
- if (stopreason == KSBA_SR_BEGIN_DATA)
- log_info ("not a certs-only message\n");
- }
- while (stopreason != KSBA_SR_READY);
-
- for (i=0; (cert=ksba_cms_get_cert (cms, i)); i++)
- {
- check_and_store (ctrl, stats, cert, 0);
- ksba_cert_release (cert);
- cert = NULL;
- }
- if (!i)
- log_error ("no certificate found\n");
- }
- else if (ct == KSBA_CT_NONE)
- { /* Failed to identify this message - assume a certificate */
-
- cert = ksba_cert_new ();
- if (!cert)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- rc = ksba_cert_read_der (cert, reader);
- if (rc)
- {
- rc = map_ksba_err (rc);
- goto leave;
- }
-
- check_and_store (ctrl, stats, cert, 0);
- }
- else
- {
- log_error ("can't extract certificates from input\n");
- rc = GNUPG_No_Data;
- }
-
- leave:
- ksba_cms_release (cms);
- ksba_cert_release (cert);
- gpgsm_destroy_reader (b64reader);
- if (fp)
- fclose (fp);
- return rc;
-}
-
-
-int
-gpgsm_import (CTRL ctrl, int in_fd)
-{
- int rc;
- struct stats_s stats;
-
- memset (&stats, 0, sizeof stats);
- rc = import_one (ctrl, &stats, in_fd);
- print_imported_summary (ctrl, &stats);
- /* If we never printed an error message do it now so that a command
- line invocation will return with an error (log_error keeps a
- global errorcount) */
- if (rc && !log_get_errorcount (0))
- log_error (_("error importing certificate: %s\n"), gnupg_strerror (rc));
- return rc;
-}
-
-
-int
-gpgsm_import_files (CTRL ctrl, int nfiles, char **files,
- int (*of)(const char *fname))
-{
- int rc = 0;
- struct stats_s stats;
-
- memset (&stats, 0, sizeof stats);
-
- if (!nfiles)
- rc = import_one (ctrl, &stats, 0);
- else
- {
- for (; nfiles && !rc ; nfiles--, files++)
- {
- int fd = of (*files);
- rc = import_one (ctrl, &stats, fd);
- close (fd);
- if (rc == -1)
- rc = 0;
- }
- }
- print_imported_summary (ctrl, &stats);
- /* If we never printed an error message do it now so that a command
- line invocation will return with an error (log_error keeps a
- global errorcount) */
- if (rc && !log_get_errorcount (0))
- log_error (_("error importing certificate: %s\n"), gnupg_strerror (rc));
- return rc;
-}
-
-
diff --git a/sm/keydb.c b/sm/keydb.c
deleted file mode 100644
index 5b5722d3e..000000000
--- a/sm/keydb.c
+++ /dev/null
@@ -1,1282 +0,0 @@
-/* keydb.c - key database dispatcher
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include "gpgsm.h"
-#include "../kbx/keybox.h"
-#include "keydb.h"
-#include "i18n.h"
-
-#define DIRSEP_C '/'
-
-static int active_handles;
-
-typedef enum {
- KEYDB_RESOURCE_TYPE_NONE = 0,
- KEYDB_RESOURCE_TYPE_KEYBOX
-} KeydbResourceType;
-#define MAX_KEYDB_RESOURCES 20
-
-struct resource_item {
- KeydbResourceType type;
- union {
- KEYBOX_HANDLE kr;
- } u;
- void *token;
- int secret;
- DOTLOCK lockhandle;
-};
-
-static struct resource_item all_resources[MAX_KEYDB_RESOURCES];
-static int used_resources;
-
-struct keydb_handle {
- int locked;
- int found;
- int current;
- int is_ephemeral;
- int used; /* items in active */
- struct resource_item active[MAX_KEYDB_RESOURCES];
-};
-
-
-static int lock_all (KEYDB_HANDLE hd);
-static void unlock_all (KEYDB_HANDLE hd);
-
-
-/*
- * Register a resource (which currently may only be a keybox file).
- * The first keybox which is added by this function is
- * created if it does not exist.
- * Note: this function may be called before secure memory is
- * available.
- */
-int
-keydb_add_resource (const char *url, int force, int secret)
-{
- static int any_secret, any_public;
- const char *resname = url;
- char *filename = NULL;
- int rc = 0;
- FILE *fp;
- KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE;
- const char *created_fname = NULL;
-
- /* Do we have an URL?
- gnupg-kbx:filename := this is a plain keybox
- filename := See what is is, but create as plain keybox.
- */
- if (strlen (resname) > 10)
- {
- if (!strncmp (resname, "gnupg-kbx:", 10) )
- {
- rt = KEYDB_RESOURCE_TYPE_KEYBOX;
- resname += 10;
- }
-#if !defined(HAVE_DRIVE_LETTERS) && !defined(__riscos__)
- else if (strchr (resname, ':'))
- {
- log_error ("invalid key resource URL `%s'\n", url );
- rc = GNUPG_General_Error;
- goto leave;
- }
-#endif /* !HAVE_DRIVE_LETTERS && !__riscos__ */
- }
-
- if (*resname != DIRSEP_C )
- { /* do tilde expansion etc */
- if (strchr(resname, DIRSEP_C) )
- filename = make_filename (resname, NULL);
- else
- filename = make_filename (opt.homedir, resname, NULL);
- }
- else
- filename = xstrdup (resname);
-
- if (!force)
- force = secret? !any_secret : !any_public;
-
- /* see whether we can determine the filetype */
- if (rt == KEYDB_RESOURCE_TYPE_NONE)
- {
- FILE *fp2 = fopen( filename, "rb" );
-
- if (fp2) {
- u32 magic;
-
- /* FIXME: check for the keybox magic */
- if (fread( &magic, 4, 1, fp2) == 1 )
- {
- if (magic == 0x13579ace || magic == 0xce9a5713)
- ; /* GDBM magic - no more support */
- else
- rt = KEYDB_RESOURCE_TYPE_KEYBOX;
- }
- else /* maybe empty: assume ring */
- rt = KEYDB_RESOURCE_TYPE_KEYBOX;
- fclose (fp2);
- }
- else /* no file yet: create ring */
- rt = KEYDB_RESOURCE_TYPE_KEYBOX;
- }
-
- switch (rt)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- log_error ("unknown type of key resource `%s'\n", url );
- rc = GNUPG_General_Error;
- goto leave;
-
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- fp = fopen (filename, "rb");
- if (!fp && !force)
- {
- rc = GNUPG_File_Open_Error;
- goto leave;
- }
-
- if (!fp)
- { /* no file */
-#if 0 /* no autocreate of the homedirectory yet */
- {
- char *last_slash_in_filename;
-
- last_slash_in_filename = strrchr (filename, DIRSEP_C);
- *last_slash_in_filename = 0;
- if (access (filename, F_OK))
- { /* on the first time we try to create the default
- homedir and in this case the process will be
- terminated, so that on the next invocation can
- read the options file in on startup */
- try_make_homedir (filename);
- rc = GNUPG_File_Open_Error;
- *last_slash_in_filename = DIRSEP_C;
- goto leave;
- }
- *last_slash_in_filename = DIRSEP_C;
- }
-#endif
- fp = fopen (filename, "w");
- if (!fp)
- {
- log_error (_("error creating keybox `%s': %s\n"),
- filename, strerror(errno));
- rc = GNUPG_File_Create_Error;
- goto leave;
- }
-
- if (!opt.quiet)
- log_info (_("keybox `%s' created\n"), filename);
- created_fname = filename;
- }
- fclose (fp);
- fp = NULL;
- /* now register the file */
- {
-
- void *token = keybox_register_file (filename, secret);
- if (!token)
- ; /* already registered - ignore it */
- else if (used_resources >= MAX_KEYDB_RESOURCES)
- rc = GNUPG_Resource_Limit;
- else
- {
- all_resources[used_resources].type = rt;
- all_resources[used_resources].u.kr = NULL; /* Not used here */
- all_resources[used_resources].token = token;
- all_resources[used_resources].secret = secret;
-
- all_resources[used_resources].lockhandle
- = create_dotlock (filename);
- if (!all_resources[used_resources].lockhandle)
- log_fatal ( _("can't create lock for `%s'\n"), filename);
-
- used_resources++;
- }
- }
- break;
- default:
- log_error ("resource type of `%s' not supported\n", url);
- rc = GNUPG_Not_Supported;
- goto leave;
- }
-
- /* fixme: check directory permissions and print a warning */
-
- leave:
- if (rc)
- log_error ("keyblock resource `%s': %s\n", filename, gnupg_strerror(rc));
- else if (secret)
- any_secret = 1;
- else
- any_public = 1;
- xfree (filename);
- return rc;
-}
-
-
-KEYDB_HANDLE
-keydb_new (int secret)
-{
- KEYDB_HANDLE hd;
- int i, j;
-
- hd = xcalloc (1, sizeof *hd);
- hd->found = -1;
-
- assert (used_resources <= MAX_KEYDB_RESOURCES);
- for (i=j=0; i < used_resources; i++)
- {
- if (!all_resources[i].secret != !secret)
- continue;
- switch (all_resources[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE: /* ignore */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- hd->active[j].type = all_resources[i].type;
- hd->active[j].token = all_resources[i].token;
- hd->active[j].secret = all_resources[i].secret;
- hd->active[j].lockhandle = all_resources[i].lockhandle;
- hd->active[j].u.kr = keybox_new (all_resources[i].token, secret);
- if (!hd->active[j].u.kr)
- {
- xfree (hd);
- return NULL; /* fixme: release all previously allocated handles*/
- }
- j++;
- break;
- }
- }
- hd->used = j;
-
- active_handles++;
- return hd;
-}
-
-void
-keydb_release (KEYDB_HANDLE hd)
-{
- int i;
-
- if (!hd)
- return;
- assert (active_handles > 0);
- active_handles--;
-
- unlock_all (hd);
- for (i=0; i < hd->used; i++)
- {
- switch (hd->active[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- keybox_release (hd->active[i].u.kr);
- break;
- }
- }
-
- xfree (hd);
-}
-
-
-/* Return the name of the current resource. This is function first
- looks for the last found found, then for the current search
- position, and last returns the first available resource. The
- returned string is only valid as long as the handle exists. This
- function does only return NULL if no handle is specified, in all
- other error cases an empty string is returned. */
-const char *
-keydb_get_resource_name (KEYDB_HANDLE hd)
-{
- int idx;
- const char *s = NULL;
-
- if (!hd)
- return NULL;
-
- if ( hd->found >= 0 && hd->found < hd->used)
- idx = hd->found;
- else if ( hd->current >= 0 && hd->current < hd->used)
- idx = hd->current;
- else
- idx = 0;
-
- switch (hd->active[idx].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- s = NULL;
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- s = keybox_get_resource_name (hd->active[idx].u.kr);
- break;
- }
-
- return s? s: "";
-}
-
-/* Switch the handle into ephemeral mode and return the orginal value. */
-int
-keydb_set_ephemeral (KEYDB_HANDLE hd, int yes)
-{
- int i;
-
- if (!hd)
- return 0;
-
- yes = !!yes;
- if (hd->is_ephemeral != yes)
- {
- for (i=0; i < hd->used; i++)
- {
- switch (hd->active[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- keybox_set_ephemeral (hd->active[i].u.kr, yes);
- break;
- }
- }
- }
-
- i = hd->is_ephemeral;
- hd->is_ephemeral = yes;
- return i;
-}
-
-
-
-static int
-lock_all (KEYDB_HANDLE hd)
-{
- int i, rc = 0;
-
- /* Fixme: This locking scheme may lead to deadlock if the resources
- are not added in the same sequence by all processes. We are
- cuurently only allowing one resource so it is not a problem. */
- for (i=0; i < hd->used; i++)
- {
- switch (hd->active[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- if (hd->active[i].lockhandle)
- rc = make_dotlock (hd->active[i].lockhandle, -1);
- break;
- }
- if (rc)
- break;
- }
-
- if (rc)
- {
- /* revert the already set locks */
- for (i--; i >= 0; i--)
- {
- switch (hd->active[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- if (hd->active[i].lockhandle)
- release_dotlock (hd->active[i].lockhandle);
- break;
- }
- }
- }
- else
- hd->locked = 1;
-
- return rc;
-}
-
-static void
-unlock_all (KEYDB_HANDLE hd)
-{
- int i;
-
- if (!hd->locked)
- return;
-
- for (i=hd->used-1; i >= 0; i--)
- {
- switch (hd->active[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- if (hd->active[i].lockhandle)
- release_dotlock (hd->active[i].lockhandle);
- break;
- }
- }
- hd->locked = 0;
-}
-
-
-#if 0
-/*
- * Return the last found keybox. Caller must free it.
- * The returned keyblock has the kbode flag bit 0 set for the node with
- * the public key used to locate the keyblock or flag bit 1 set for
- * the user ID node.
- */
-int
-keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb)
-{
- int rc = 0;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- switch (hd->active[hd->found].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_get_keyblock (hd->active[hd->found].u.kr, ret_kb);
- break;
- }
-
- return rc;
-}
-
-/*
- * update the current keyblock with KB
- */
-int
-keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb)
-{
- int rc = 0;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- if( opt.dry_run )
- return 0;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- switch (hd->active[hd->found].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_update_keyblock (hd->active[hd->found].u.kr, kb);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-/*
- * Insert a new KB into one of the resources.
- */
-int
-keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb)
-{
- int rc = -1;
- int idx;
-
- if (!hd)
- return G10ERR_INV_ARG;
-
- if( opt.dry_run )
- return 0;
-
- if ( hd->found >= 0 && hd->found < hd->used)
- idx = hd->found;
- else if ( hd->current >= 0 && hd->current < hd->used)
- idx = hd->current;
- else
- return G10ERR_GENERAL;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- switch (hd->active[idx].type) {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = G10ERR_GENERAL; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_insert_keyblock (hd->active[idx].u.kr, kb);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-#endif /*disabled code*/
-
-
-
-/*
- Return the last found keybox. Caller must free it. The returned
- keyblock has the kbode flag bit 0 set for the node with the public
- key used to locate the keyblock or flag bit 1 set for the user ID
- node. */
-int
-keydb_get_cert (KEYDB_HANDLE hd, KsbaCert *r_cert)
-{
- int rc = 0;
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- switch (hd->active[hd->found].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = GNUPG_General_Error; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_get_cert (hd->active[hd->found].u.kr, r_cert);
- break;
- }
-
- return rc;
-}
-
-/*
- * Insert a new Certificate into one of the resources.
- */
-int
-keydb_insert_cert (KEYDB_HANDLE hd, KsbaCert cert)
-{
- int rc = -1;
- int idx;
- char digest[20];
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- if (opt.dry_run)
- return 0;
-
- if ( hd->found >= 0 && hd->found < hd->used)
- idx = hd->found;
- else if ( hd->current >= 0 && hd->current < hd->used)
- idx = hd->current;
- else
- return GNUPG_General_Error;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL); /* kludge*/
-
- switch (hd->active[idx].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = GNUPG_General_Error;
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_insert_cert (hd->active[idx].u.kr, cert, digest);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-
-/* update the current keyblock with KB */
-int
-keydb_update_cert (KEYDB_HANDLE hd, KsbaCert cert)
-{
- int rc = 0;
- char digest[20];
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- if (opt.dry_run)
- return 0;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL); /* kludge*/
-
- switch (hd->active[hd->found].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = GNUPG_General_Error; /* oops */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_update_cert (hd->active[hd->found].u.kr, cert, digest);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-/*
- * The current keyblock or cert will be deleted.
- */
-int
-keydb_delete (KEYDB_HANDLE hd)
-{
- int rc = -1;
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- if ( hd->found < 0 || hd->found >= hd->used)
- return -1; /* nothing found */
-
- if( opt.dry_run )
- return 0;
-
- rc = lock_all (hd);
- if (rc)
- return rc;
-
- switch (hd->active[hd->found].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- rc = GNUPG_General_Error;
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_delete (hd->active[hd->found].u.kr);
- break;
- }
-
- unlock_all (hd);
- return rc;
-}
-
-
-
-/*
- * Locate the default writable key resource, so that the next
- * operation (which is only relevant for inserts) will be done on this
- * resource.
- */
-int
-keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved)
-{
- int rc;
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- rc = keydb_search_reset (hd); /* this does reset hd->current */
- if (rc)
- return rc;
-
- for ( ; hd->current >= 0 && hd->current < hd->used; hd->current++)
- {
- switch (hd->active[hd->current].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- BUG();
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- if (keybox_is_writable (hd->active[hd->current].token))
- return 0; /* found (hd->current is set to it) */
- break;
- }
- }
-
- return -1;
-}
-
-/*
- * Rebuild the caches of all key resources.
- */
-void
-keydb_rebuild_caches (void)
-{
- int i;
-
- for (i=0; i < used_resources; i++)
- {
- if (all_resources[i].secret)
- continue;
- switch (all_resources[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE: /* ignore */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
-/* rc = keybox_rebuild_cache (all_resources[i].token); */
-/* if (rc) */
-/* log_error (_("failed to rebuild keybox cache: %s\n"), */
-/* g10_errstr (rc)); */
- break;
- }
- }
-}
-
-
-
-/*
- * Start the next search on this handle right at the beginning
- */
-int
-keydb_search_reset (KEYDB_HANDLE hd)
-{
- int i, rc = 0;
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- hd->current = 0;
- hd->found = -1;
- /* and reset all resources */
- for (i=0; !rc && i < hd->used; i++)
- {
- switch (hd->active[i].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_search_reset (hd->active[i].u.kr);
- break;
- }
- }
- return rc; /* fixme: we need to map error codes or share them with
- all modules*/
-}
-
-/*
- * Search through all keydb resources, starting at the current position,
- * for a keyblock which contains one of the keys described in the DESC array.
- */
-int
-keydb_search (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc)
-{
- int rc = -1;
-
- if (!hd)
- return GNUPG_Invalid_Value;
-
- while (rc == -1 && hd->current >= 0 && hd->current < hd->used)
- {
- switch (hd->active[hd->current].type)
- {
- case KEYDB_RESOURCE_TYPE_NONE:
- BUG(); /* we should never see it here */
- break;
- case KEYDB_RESOURCE_TYPE_KEYBOX:
- rc = keybox_search (hd->active[hd->current].u.kr, desc, ndesc);
- break;
- }
- if (rc == -1) /* EOF -> switch to next resource */
- hd->current++;
- else if (!rc)
- hd->found = hd->current;
- }
-
- return rc;
-}
-
-
-int
-keydb_search_first (KEYDB_HANDLE hd)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FIRST;
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_next (KEYDB_HANDLE hd)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_NEXT;
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_kid (KEYDB_HANDLE hd, u32 *kid)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_LONG_KID;
-/* desc.u.kid[0] = kid[0]; */
-/* desc.u.kid[1] = kid[1]; */
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr)
-{
- KEYDB_SEARCH_DESC desc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_FPR;
- memcpy (desc.u.fpr, fpr, 20);
- return keydb_search (hd, &desc, 1);
-}
-
-int
-keydb_search_issuer (KEYDB_HANDLE hd, const char *issuer)
-{
- KEYDB_SEARCH_DESC desc;
- int rc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_ISSUER;
- desc.u.name = issuer;
- rc = keydb_search (hd, &desc, 1);
- return rc;
-}
-
-int
-keydb_search_issuer_sn (KEYDB_HANDLE hd,
- const char *issuer, KsbaConstSexp serial)
-{
- KEYDB_SEARCH_DESC desc;
- int rc;
- const unsigned char *s;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_ISSUER_SN;
- s = serial;
- if (*s !='(')
- return GNUPG_Invalid_Value;
- s++;
- for (desc.snlen = 0; digitp (s); s++)
- desc.snlen = 10*desc.snlen + atoi_1 (s);
- if (*s !=':')
- return GNUPG_Invalid_Value;
- desc.sn = s+1;
- desc.u.name = issuer;
- rc = keydb_search (hd, &desc, 1);
- return rc;
-}
-
-int
-keydb_search_subject (KEYDB_HANDLE hd, const char *name)
-{
- KEYDB_SEARCH_DESC desc;
- int rc;
-
- memset (&desc, 0, sizeof desc);
- desc.mode = KEYDB_SEARCH_MODE_SUBJECT;
- desc.u.name = name;
- rc = keydb_search (hd, &desc, 1);
- return rc;
-}
-
-
-static int
-hextobyte (const unsigned char *s)
-{
- int c;
-
- if( *s >= '0' && *s <= '9' )
- c = 16 * (*s - '0');
- else if ( *s >= 'A' && *s <= 'F' )
- c = 16 * (10 + *s - 'A');
- else if ( *s >= 'a' && *s <= 'f' )
- c = 16 * (10 + *s - 'a');
- else
- return -1;
- s++;
- if ( *s >= '0' && *s <= '9' )
- c += *s - '0';
- else if ( *s >= 'A' && *s <= 'F' )
- c += 10 + *s - 'A';
- else if ( *s >= 'a' && *s <= 'f' )
- c += 10 + *s - 'a';
- else
- return -1;
- return c;
-}
-
-
-static int
-classify_user_id (const char *name,
- KEYDB_SEARCH_DESC *desc,
- int *force_exact )
-{
- const char *s;
- int hexprefix = 0;
- int hexlength;
- int mode = 0;
-
- /* clear the structure so that the mode field is set to zero unless
- * we set it to the correct value right at the end of this function */
- memset (desc, 0, sizeof *desc);
- *force_exact = 0;
- /* skip leading spaces. Fixme: what about trailing white space? */
- for(s = name; *s && spacep (s); s++ )
- ;
-
- switch (*s)
- {
- case 0: /* empty string is an error */
- return 0;
-
- case '.': /* an email address, compare from end */
- mode = KEYDB_SEARCH_MODE_MAILEND;
- s++;
- desc->u.name = s;
- break;
-
- case '<': /* an email address */
- mode = KEYDB_SEARCH_MODE_MAIL;
- s++;
- desc->u.name = s;
- break;
-
- case '@': /* part of an email address */
- mode = KEYDB_SEARCH_MODE_MAILSUB;
- s++;
- desc->u.name = s;
- break;
-
- case '=': /* exact compare */
- mode = KEYDB_SEARCH_MODE_EXACT;
- s++;
- desc->u.name = s;
- break;
-
- case '*': /* case insensitive substring search */
- mode = KEYDB_SEARCH_MODE_SUBSTR;
- s++;
- desc->u.name = s;
- break;
-
- case '+': /* compare individual words */
- mode = KEYDB_SEARCH_MODE_WORDS;
- s++;
- desc->u.name = s;
- break;
-
- case '/': /* subject's DN */
- s++;
- if (!*s || spacep (s))
- return 0; /* no DN or prefixed with a space */
- desc->u.name = s;
- mode = KEYDB_SEARCH_MODE_SUBJECT;
- break;
-
- case '#':
- {
- const char *si;
-
- s++;
- if ( *s == '/')
- { /* "#/" indicates an issuer's DN */
- s++;
- if (!*s || spacep (s))
- return 0; /* no DN or prefixed with a space */
- desc->u.name = s;
- mode = KEYDB_SEARCH_MODE_ISSUER;
- }
- else
- { /* serialnumber + optional issuer ID */
- for (si=s; *si && *si != '/'; si++)
- {
- if (!strchr("01234567890abcdefABCDEF", *si))
- return 0; /* invalid digit in serial number*/
- }
- desc->sn = s;
- desc->snlen = -1;
- if (!*si)
- mode = KEYDB_SEARCH_MODE_SN;
- else
- {
- s = si+1;
- if (!*s || spacep (s))
- return 0; /* no DN or prefixed with a space */
- desc->u.name = s;
- mode = KEYDB_SEARCH_MODE_ISSUER_SN;
- }
- }
- }
- break;
-
- case ':': /*Unified fingerprint */
- {
- const char *se, *si;
- int i;
-
- se = strchr (++s,':');
- if (!se)
- return 0;
- for (i=0,si=s; si < se; si++, i++ )
- {
- if (!strchr("01234567890abcdefABCDEF", *si))
- return 0; /* invalid digit */
- }
- if (i != 32 && i != 40)
- return 0; /* invalid length of fpr*/
- for (i=0,si=s; si < se; i++, si +=2)
- desc->u.fpr[i] = hextobyte(si);
- for (; i < 20; i++)
- desc->u.fpr[i]= 0;
- s = se + 1;
- mode = KEYDB_SEARCH_MODE_FPR;
- }
- break;
-
- default:
- if (s[0] == '0' && s[1] == 'x')
- {
- hexprefix = 1;
- s += 2;
- }
-
- hexlength = strspn(s, "0123456789abcdefABCDEF");
- if (hexlength >= 8 && s[hexlength] =='!')
- {
- *force_exact = 1;
- hexlength++; /* just for the following check */
- }
-
- /* check if a hexadecimal number is terminated by EOS or blank */
- if (hexlength && s[hexlength] && !spacep (s+hexlength))
- {
- if (hexprefix) /* a "0x" prefix without correct */
- return 0; /* termination is an error */
- /* The first chars looked like a hex number, but really is
- not */
- hexlength = 0;
- }
-
- if (*force_exact)
- hexlength--; /* remove the bang */
-
- if (hexlength == 8
- || (!hexprefix && hexlength == 9 && *s == '0'))
- { /* short keyid */
- unsigned long kid;
- if (hexlength == 9)
- s++;
- kid = strtoul( s, NULL, 16 );
- desc->u.kid[4] = kid >> 24;
- desc->u.kid[5] = kid >> 16;
- desc->u.kid[6] = kid >> 8;
- desc->u.kid[7] = kid;
- mode = KEYDB_SEARCH_MODE_SHORT_KID;
- }
- else if (hexlength == 16
- || (!hexprefix && hexlength == 17 && *s == '0'))
- { /* complete keyid */
- unsigned long kid0, kid1;
- char buf[9];
- if (hexlength == 17)
- s++;
- mem2str(buf, s, 9 );
- kid0 = strtoul (buf, NULL, 16);
- kid1 = strtoul (s+8, NULL, 16);
- desc->u.kid[0] = kid0 >> 24;
- desc->u.kid[1] = kid0 >> 16;
- desc->u.kid[2] = kid0 >> 8;
- desc->u.kid[3] = kid0;
- desc->u.kid[4] = kid1 >> 24;
- desc->u.kid[5] = kid1 >> 16;
- desc->u.kid[6] = kid1 >> 8;
- desc->u.kid[7] = kid1;
- mode = KEYDB_SEARCH_MODE_LONG_KID;
- }
- else if (hexlength == 32
- || (!hexprefix && hexlength == 33 && *s == '0'))
- { /* md5 fingerprint */
- int i;
- if (hexlength == 33)
- s++;
- memset(desc->u.fpr+16, 0, 4);
- for (i=0; i < 16; i++, s+=2)
- {
- int c = hextobyte(s);
- if (c == -1)
- return 0;
- desc->u.fpr[i] = c;
- }
- mode = KEYDB_SEARCH_MODE_FPR16;
- }
- else if (hexlength == 40
- || (!hexprefix && hexlength == 41 && *s == '0'))
- { /* sha1/rmd160 fingerprint */
- int i;
- if (hexlength == 41)
- s++;
- for (i=0; i < 20; i++, s+=2)
- {
- int c = hextobyte(s);
- if (c == -1)
- return 0;
- desc->u.fpr[i] = c;
- }
- mode = KEYDB_SEARCH_MODE_FPR20;
- }
- else if (!hexprefix)
- {
- /* The fingerprint in an X.509 listing is often delimited by
- colons, so we try to single this case out. */
- mode = 0;
- hexlength = strspn (s, ":0123456789abcdefABCDEF");
- if (hexlength == 59 && (!s[hexlength] || spacep (s+hexlength)))
- {
- int i;
-
- for (i=0; i < 20; i++, s += 3)
- {
- int c = hextobyte(s);
- if (c == -1 || (i < 19 && s[2] != ':'))
- break;
- desc->u.fpr[i] = c;
- }
- if (i == 20)
- mode = KEYDB_SEARCH_MODE_FPR20;
- }
- if (!mode) /* default is substring search */
- {
- *force_exact = 0;
- desc->u.name = s;
- mode = KEYDB_SEARCH_MODE_SUBSTR;
- }
- }
- else
- { /* hex number with a prefix but a wrong length */
- return 0;
- }
- }
-
- desc->mode = mode;
- return mode;
-}
-
-
-int
-keydb_classify_name (const char *name, KEYDB_SEARCH_DESC *desc)
-{
- int dummy;
- KEYDB_SEARCH_DESC dummy_desc;
-
- if (!desc)
- desc = &dummy_desc;
-
- if (!classify_user_id (name, desc, &dummy))
- return GNUPG_Invalid_Name;
- return 0;
-}
-
-
-/* Store the certificate in the key DB but make sure that it does not
- already exists. We do this simply by comparing the fingerprint.
- If EXISTED is not NULL it will be set to true if the certificate
- was already in the DB. */
-int
-keydb_store_cert (KsbaCert cert, int ephemeral, int *existed)
-{
- KEYDB_HANDLE kh;
- int rc;
- unsigned char fpr[20];
-
- if (existed)
- *existed = 0;
-
- if (!gpgsm_get_fingerprint (cert, 0, fpr, NULL))
- {
- log_error (_("failed to get the fingerprint\n"));
- return GNUPG_General_Error;
- }
-
- kh = keydb_new (0);
- if (!kh)
- {
- log_error (_("failed to allocate keyDB handle\n"));
- return GNUPG_Out_Of_Core;
- }
-
- if (ephemeral)
- keydb_set_ephemeral (kh, 1);
-
- rc = keydb_search_fpr (kh, fpr);
- if (rc != -1)
- {
- keydb_release (kh);
- if (!rc)
- {
- if (existed)
- *existed = 1;
- return 0; /* okay */
- }
- log_error (_("problem looking for existing certificate: %s\n"),
- gnupg_strerror (rc));
- return rc;
- }
-
- rc = keydb_locate_writable (kh, 0);
- if (rc)
- {
- log_error (_("error finding writable keyDB: %s\n"), gnupg_strerror (rc));
- keydb_release (kh);
- return rc;
- }
-
- rc = keydb_insert_cert (kh, cert);
- if (rc)
- {
- log_error (_("error storing certificate: %s\n"), gnupg_strerror (rc));
- keydb_release (kh);
- return rc;
- }
- keydb_release (kh);
- return 0;
-}
-
-
-
diff --git a/sm/keylist.c b/sm/keylist.c
deleted file mode 100644
index 96a8469ba..000000000
--- a/sm/keylist.c
+++ /dev/null
@@ -1,616 +0,0 @@
-/* keylist.c
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-struct list_external_parm_s {
- FILE *fp;
- int print_header;
- int with_colons;
- int with_chain;
-};
-
-
-
-static void
-print_key_data (KsbaCert cert, FILE *fp)
-{
-#if 0
- int n = pk ? pubkey_get_npkey( pk->pubkey_algo ) : 0;
- int i;
-
- for(i=0; i < n; i++ )
- {
- fprintf (fp, "pkd:%d:%u:", i, mpi_get_nbits( pk->pkey[i] ) );
- mpi_print(stdout, pk->pkey[i], 1 );
- putchar(':');
- putchar('\n');
- }
-#endif
-}
-
-static void
-print_capabilities (KsbaCert cert, FILE *fp)
-{
- KsbaError err;
- unsigned int use;
-
- err = ksba_cert_get_key_usage (cert, &use);
- if (err == KSBA_No_Data)
- {
- putc ('e', fp);
- putc ('s', fp);
- putc ('c', fp);
- putc ('E', fp);
- putc ('S', fp);
- putc ('C', fp);
- return;
- }
- if (err)
- {
- log_error (_("error getting key usage information: %s\n"),
- ksba_strerror (err));
- return;
- }
-
- if ((use & (KSBA_KEYUSAGE_KEY_ENCIPHERMENT|KSBA_KEYUSAGE_DATA_ENCIPHERMENT)))
- putc ('e', fp);
- if ((use & (KSBA_KEYUSAGE_DIGITAL_SIGNATURE|KSBA_KEYUSAGE_NON_REPUDIATION)))
- putc ('s', fp);
- if ((use & KSBA_KEYUSAGE_KEY_CERT_SIGN))
- putc ('c', fp);
- if ((use & (KSBA_KEYUSAGE_KEY_ENCIPHERMENT|KSBA_KEYUSAGE_DATA_ENCIPHERMENT)))
- putc ('E', fp);
- if ((use & (KSBA_KEYUSAGE_DIGITAL_SIGNATURE|KSBA_KEYUSAGE_NON_REPUDIATION)))
- putc ('S', fp);
- if ((use & KSBA_KEYUSAGE_KEY_CERT_SIGN))
- putc ('C', fp);
-}
-
-
-static void
-print_time (time_t t, FILE *fp)
-{
- if (!t)
- ;
- else if ( t == (time_t)(-1) )
- putc ('?', fp);
- else
- fprintf (fp, "%lu", (unsigned long)t);
-}
-
-
-/* return an allocated string with the email address extracted from a
- DN */
-static char *
-email_kludge (const char *name)
-{
- const unsigned char *p;
- unsigned char *buf;
- int n;
-
- if (strncmp (name, "1.2.840.113549.1.9.1=#", 22))
- return NULL;
- /* This looks pretty much like an email address in the subject's DN
- we use this to add an additional user ID entry. This way,
- openSSL generated keys get a nicer and usable listing */
- name += 22;
- for (n=0, p=name; hexdigitp (p) && hexdigitp (p+1); p +=2, n++)
- ;
- if (*p != '#' || !n)
- return NULL;
- buf = xtrymalloc (n+3);
- if (!buf)
- return NULL; /* oops, out of core */
- *buf = '<';
- for (n=1, p=name; *p != '#'; p +=2, n++)
- buf[n] = xtoi_2 (p);
- buf[n++] = '>';
- buf[n] = 0;
- return buf;
-}
-
-
-
-
-/* List one certificate in colon mode */
-static void
-list_cert_colon (KsbaCert cert, FILE *fp, int have_secret)
-{
- int idx, trustletter = 0;
- char *p;
- KsbaSexp sexp;
- char *fpr;
-
- fputs (have_secret? "crs:":"crt:", fp);
- trustletter = 0;
-#if 0
- if (is_not_valid (cert))
- putc ('i', fp);
- else if ( is_revoked (cert) )
- putc ('r', fp);
- else if ( has_expired (cert))
- putcr ('e', fp);
- else
-#endif
- {
- trustletter = '?'; /*get_validity_info ( pk, NULL );*/
- putc (trustletter, fp);
- }
-
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- fprintf (fp, ":%u:%d:%s:",
- /*keylen_of_cert (cert)*/1024,
- /* pubkey_algo_of_cert (cert)*/1,
- fpr+24);
-
- /* we assume --fixed-list-mode for gpgsm */
- print_time ( ksba_cert_get_validity (cert, 0), fp);
- putc (':', fp);
- print_time ( ksba_cert_get_validity (cert, 1), fp);
- putc (':', fp);
- /* field 8, serial number: */
- if ((sexp = ksba_cert_get_serial (cert)))
- {
- int len;
- const unsigned char *s = sexp;
-
- if (*s == '(')
- {
- s++;
- for (len=0; *s && *s != ':' && digitp (s); s++)
- len = len*10 + atoi_1 (s);
- if (*s == ':')
- for (s++; len; len--, s++)
- fprintf (fp,"%02X", *s);
- }
- xfree (sexp);
- }
- putc (':', fp);
- /* field 9, ownertrust - not used here */
- putc (':', fp);
- /* field 10, old user ID - we use it here for the issuer DN */
- if ((p = ksba_cert_get_issuer (cert,0)))
- {
- print_sanitized_string (fp, p, ':');
- xfree (p);
- }
- putc (':', fp);
- /* field 11, signature class - not used */
- putc (':', fp);
- /* field 12, capabilities: */
- print_capabilities (cert, fp);
- putc (':', fp);
- putc ('\n', fp);
-
- /* FPR record */
- fprintf (fp, "fpr:::::::::%s:::", fpr);
- xfree (fpr); fpr = NULL;
- /* print chaining ID (field 13)*/
- {
- KsbaCert next;
-
- if (!gpgsm_walk_cert_chain (cert, &next))
- {
- p = gpgsm_get_fingerprint_hexstring (next, GCRY_MD_SHA1);
- fputs (p, fp);
- xfree (p);
- ksba_cert_release (next);
- }
- }
- putc (':', fp);
- putc ('\n', fp);
-
-
- if (opt.with_key_data)
- {
- if ( (p = gpgsm_get_keygrip_hexstring (cert)))
- {
- fprintf (fp, "grp:::::::::%s:\n", p);
- xfree (p);
- }
- print_key_data (cert, fp);
- }
-
- for (idx=0; (p = ksba_cert_get_subject (cert,idx)); idx++)
- {
- fprintf (fp, "uid:%c::::::::", trustletter);
- print_sanitized_string (fp, p, ':');
- putc (':', fp);
- putc (':', fp);
- putc ('\n', fp);
- if (!idx)
- {
- /* It would be better to get the faked email address from
- the keydb. But as long as we don't have a way to pass
- the meta data back, we just check it the same way as the
- code used to create the keybox meta data does */
- char *pp = email_kludge (p);
- if (pp)
- {
- fprintf (fp, "uid:%c::::::::", trustletter);
- print_sanitized_string (fp, pp, ':');
- putc (':', fp);
- putc (':', fp);
- putc ('\n', fp);
- xfree (pp);
- }
- }
- xfree (p);
- }
-}
-
-
-/* List one certificate in standard mode */
-static void
-list_cert_std (KsbaCert cert, FILE *fp, int have_secret)
-{
- KsbaError kerr;
- KsbaSexp sexp;
- char *dn;
- time_t t;
- int idx;
- int is_ca, chainlen;
- unsigned int kusage;
- char *string, *p;
-
- sexp = ksba_cert_get_serial (cert);
- fputs ("Serial number: ", fp);
- gpgsm_print_serial (fp, sexp);
- ksba_free (sexp);
- putc ('\n', fp);
-
- dn = ksba_cert_get_issuer (cert, 0);
- fputs (" Issuer: ", fp);
- gpgsm_print_name (fp, dn);
- ksba_free (dn);
- putc ('\n', fp);
- for (idx=1; (dn = ksba_cert_get_issuer (cert, idx)); idx++)
- {
- fputs (" aka: ", fp);
- gpgsm_print_name (fp, dn);
- ksba_free (dn);
- putc ('\n', fp);
- }
-
- dn = ksba_cert_get_subject (cert, 0);
- fputs (" Subject: ", fp);
- gpgsm_print_name (fp, dn);
- ksba_free (dn);
- putc ('\n', fp);
- for (idx=1; (dn = ksba_cert_get_subject (cert, idx)); idx++)
- {
- fputs (" aka: ", fp);
- gpgsm_print_name (fp, dn);
- ksba_free (dn);
- putc ('\n', fp);
- }
-
- t = ksba_cert_get_validity (cert, 0);
- fputs (" validity: ", fp);
- gpgsm_print_time (fp, t);
- fputs (" through ", fp);
- t = ksba_cert_get_validity (cert, 1);
- gpgsm_print_time (fp, t);
- putc ('\n', fp);
-
- kerr = ksba_cert_get_key_usage (cert, &kusage);
- if (kerr != KSBA_No_Data)
- {
- fputs (" key usage:", fp);
- if (kerr)
- fprintf (fp, " [error: %s]", ksba_strerror (kerr));
- else
- {
- if ( (kusage & KSBA_KEYUSAGE_DIGITAL_SIGNATURE))
- fputs (" digitalSignature", fp);
- if ( (kusage & KSBA_KEYUSAGE_NON_REPUDIATION))
- fputs (" nonRepudiation", fp);
- if ( (kusage & KSBA_KEYUSAGE_KEY_ENCIPHERMENT))
- fputs (" keyEncipherment", fp);
- if ( (kusage & KSBA_KEYUSAGE_DATA_ENCIPHERMENT))
- fputs (" dataEncipherment", fp);
- if ( (kusage & KSBA_KEYUSAGE_KEY_AGREEMENT))
- fputs (" keyAgreement", fp);
- if ( (kusage & KSBA_KEYUSAGE_KEY_CERT_SIGN))
- fputs (" certSign", fp);
- if ( (kusage & KSBA_KEYUSAGE_CRL_SIGN))
- fputs (" crlSign", fp);
- if ( (kusage & KSBA_KEYUSAGE_ENCIPHER_ONLY))
- fputs (" encipherOnly", fp);
- if ( (kusage & KSBA_KEYUSAGE_DECIPHER_ONLY))
- fputs (" decipherOnly", fp);
- }
- putc ('\n', fp);
- }
-
- kerr = ksba_cert_get_cert_policies (cert, &string);
- if (kerr != KSBA_No_Data)
- {
- fputs (" policies: ", fp);
- if (kerr)
- fprintf (fp, "[error: %s]", ksba_strerror (kerr));
- else
- {
- for (p=string; *p; p++)
- {
- if (*p == '\n')
- *p = ',';
- }
- print_sanitized_string (fp, string, 0);
- xfree (string);
- }
- putc ('\n', fp);
- }
-
- kerr = ksba_cert_is_ca (cert, &is_ca, &chainlen);
- if (kerr || is_ca)
- {
- fputs (" chain length: ", fp);
- if (kerr)
- fprintf (fp, "[error: %s]", ksba_strerror (kerr));
- else if (chainlen == -1)
- fputs ("unlimited", fp);
- else
- fprintf (fp, "%d", chainlen);
- putc ('\n', fp);
- }
-
-
- dn = gpgsm_get_fingerprint_string (cert, 0);
- fprintf (fp, " fingerprint: %s\n", dn?dn:"error");
- xfree (dn);
-}
-
-/* Same as standard mode mode list all certifying certts too */
-static void
-list_cert_chain (KsbaCert cert, FILE *fp)
-{
- KsbaCert next = NULL;
-
- list_cert_std (cert, fp, 0);
- ksba_cert_ref (cert);
- while (!gpgsm_walk_cert_chain (cert, &next))
- {
- ksba_cert_release (cert);
- fputs ("Certified by\n", fp);
- list_cert_std (next, fp, 0);
- cert = next;
- }
- ksba_cert_release (cert);
- putc ('\n', fp);
-}
-
-
-
-/* List all internal keys or just the key given as NAMES.
- */
-static void
-list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
-{
- KEYDB_HANDLE hd;
- KEYDB_SEARCH_DESC *desc = NULL;
- STRLIST sl;
- int ndesc;
- KsbaCert cert = NULL;
- int rc=0;
- const char *lastresname, *resname;
- int have_secret;
-
- hd = keydb_new (0);
- if (!hd)
- {
- log_error ("keydb_new failed\n");
- goto leave;
- }
-
- if (!names)
- ndesc = 1;
- else
- {
- for (sl=names, ndesc=0; sl; sl = sl->next, ndesc++)
- ;
- }
-
- desc = xtrycalloc (ndesc, sizeof *desc);
- if (!ndesc)
- {
- log_error ("out of core\n");
- goto leave;
- }
-
- if (!names)
- desc[0].mode = KEYDB_SEARCH_MODE_FIRST;
- else
- {
- for (ndesc=0, sl=names; sl; sl = sl->next)
- {
- rc = keydb_classify_name (sl->d, desc+ndesc);
- if (rc)
- {
- log_error ("key `%s' not found: %s\n",
- sl->d, gnupg_strerror (rc));
- rc = 0;
- }
- else
- ndesc++;
- }
-
- }
-
- /* it would be nice to see which of the given users did actually
- match one in the keyring. To implement this we need to have a
- found flag for each entry in desc and to set this we must check
- all those entries after a match to mark all matched one -
- currently we stop at the first match. To do this we need an
- extra flag to enable this feature so */
-
- lastresname = NULL;
- while (!(rc = keydb_search (hd, desc, ndesc)))
- {
- if (!names)
- desc[0].mode = KEYDB_SEARCH_MODE_NEXT;
-
- rc = keydb_get_cert (hd, &cert);
- if (rc)
- {
- log_error ("keydb_get_cert failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- resname = keydb_get_resource_name (hd);
-
- if (lastresname != resname )
- {
- int i;
-
- if (ctrl->no_server)
- {
- fprintf (fp, "%s\n", resname );
- for (i=strlen(resname); i; i-- )
- putchar('-');
- putc ('\n', fp);
- lastresname = resname;
- }
- }
-
- have_secret = 0;
- if (mode)
- {
- char *p = gpgsm_get_keygrip_hexstring (cert);
- if (p)
- {
- if (!gpgsm_agent_havekey (p))
- have_secret = 1;
- xfree (p);
- }
- }
-
- if (!mode
- || ((mode & 1) && !have_secret)
- || ((mode & 2) && have_secret) )
- {
- if (ctrl->with_colons)
- list_cert_colon (cert, fp, have_secret);
- else if (ctrl->with_chain)
- list_cert_chain (cert, fp);
- else
- {
- list_cert_std (cert, fp, have_secret);
- putc ('\n', fp);
- }
- }
- ksba_cert_release (cert);
- cert = NULL;
- }
- if (rc && rc != -1)
- log_error ("keydb_search failed: %s\n", gnupg_strerror (rc));
-
- leave:
- ksba_cert_release (cert);
- xfree (desc);
- keydb_release (hd);
-}
-
-
-
-static void
-list_external_cb (void *cb_value, KsbaCert cert)
-{
- struct list_external_parm_s *parm = cb_value;
-
- if (keydb_store_cert (cert, 1, NULL))
- log_error ("error storing certificate as ephemeral\n");
-
- if (parm->print_header)
- {
- const char *resname = "[external keys]";
- int i;
-
- fprintf (parm->fp, "%s\n", resname );
- for (i=strlen(resname); i; i-- )
- putchar('-');
- putc ('\n', parm->fp);
- parm->print_header = 0;
- }
-
- if (parm->with_colons)
- list_cert_colon (cert, parm->fp, 0);
- else if (parm->with_chain)
- list_cert_chain (cert, parm->fp);
- else
- {
- list_cert_std (cert, parm->fp, 0);
- putc ('\n', parm->fp);
- }
-}
-
-
-/* List external keys similar to internal one. Note: mode does not
- make sense here because it would be unwise to list external secret
- keys */
-static void
-list_external_keys (CTRL ctrl, STRLIST names, FILE *fp)
-{
- int rc;
- struct list_external_parm_s parm;
-
- parm.fp = fp;
- parm.print_header = ctrl->no_server;
- parm.with_colons = ctrl->with_colons;
- parm.with_chain = ctrl->with_chain;
-
- rc = gpgsm_dirmngr_lookup (ctrl, names, list_external_cb, &parm);
- if (rc)
- log_error ("listing external keys failed: %s\n", gnupg_strerror (rc));
-}
-
-/* List all keys or just the key given as NAMES.
- MODE controls the operation mode:
- Bit 0-2:
- 0 = list all public keys but don't flag secret ones
- 1 = list only public keys
- 2 = list only secret keys
- 3 = list secret and public keys
- Bit 6: list internal keys
- Bit 7: list external keys
- */
-void
-gpgsm_list_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
-{
- if ((mode & (1<<6)))
- list_internal_keys (ctrl, names, fp, (mode & 3));
- if ((mode & (1<<7)))
- list_external_keys (ctrl, names, fp);
-}
diff --git a/sm/server.c b/sm/server.c
deleted file mode 100644
index e8200feda..000000000
--- a/sm/server.c
+++ /dev/null
@@ -1,1057 +0,0 @@
-/* server.c - Server mode and main entry point
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include "gpgsm.h"
-#include "../assuan/assuan.h"
-
-#define set_error(e,t) assuan_set_error (ctx, ASSUAN_ ## e, (t))
-
-
-/* The filepointer for status message used in non-server mode */
-static FILE *statusfp;
-
-/* Data used to assuciate an Assuan context with local server data */
-struct server_local_s {
- ASSUAN_CONTEXT assuan_ctx;
- int message_fd;
- int list_internal;
- int list_external;
- CERTLIST recplist;
- CERTLIST signerlist;
-};
-
-
-
-/* note, that it is sufficient to allocate the target string D as
- long as the source string S, i.e.: strlen(s)+1; */
-static void
-strcpy_escaped_plus (char *d, const unsigned char *s)
-{
- while (*s)
- {
- if (*s == '%' && s[1] && s[2])
- {
- s++;
- *d++ = xtoi_2 ( s);
- s += 2;
- }
- else if (*s == '+')
- *d++ = ' ', s++;
- else
- *d++ = *s++;
- }
- *d = 0;
-}
-
-
-
-
-/* Check whether the option NAME appears in LINE */
-static int
-has_option (const char *line, const char *name)
-{
- const char *s;
- int n = strlen (name);
-
- s = strstr (line, name);
- return (s && (s == line || spacep (s-1)) && (!s[n] || spacep (s+n)));
-}
-
-
-static void
-close_message_fd (CTRL ctrl)
-{
- if (ctrl->server_local->message_fd != -1)
- {
- close (ctrl->server_local->message_fd);
- ctrl->server_local->message_fd = -1;
- }
-}
-
-
-static int
-option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- if (!strcmp (key, "include-certs"))
- {
- int i = *value? atoi (value) : -1;
- if (ctrl->include_certs < -2)
- return ASSUAN_Parameter_Error;
- ctrl->include_certs = i;
- }
- else if (!strcmp (key, "display"))
- {
- if (opt.display)
- free (opt.display);
- opt.display = strdup (value);
- if (!opt.display)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "ttyname"))
- {
- if (opt.ttyname)
- free (opt.ttyname);
- opt.ttyname = strdup (value);
- if (!opt.ttyname)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "ttytype"))
- {
- if (opt.ttytype)
- free (opt.ttytype);
- opt.ttytype = strdup (value);
- if (!opt.ttytype)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "lc-ctype"))
- {
- if (opt.lc_ctype)
- free (opt.lc_ctype);
- opt.lc_ctype = strdup (value);
- if (!opt.lc_ctype)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "lc-messages"))
- {
- if (opt.lc_messages)
- free (opt.lc_messages);
- opt.lc_messages = strdup (value);
- if (!opt.lc_messages)
- return ASSUAN_Out_Of_Core;
- }
- else if (!strcmp (key, "list-mode"))
- {
- int i = *value? atoi (value) : 0;
- if (!i || i == 1) /* default and mode 1 */
- {
- ctrl->server_local->list_internal = 1;
- ctrl->server_local->list_external = 0;
- }
- else if (i == 2)
- {
- ctrl->server_local->list_internal = 0;
- ctrl->server_local->list_external = 1;
- }
- else if (i == 3)
- {
- ctrl->server_local->list_internal = 1;
- ctrl->server_local->list_external = 1;
- }
- else
- return ASSUAN_Parameter_Error;
- }
- else
- return ASSUAN_Invalid_Option;
-
- return 0;
-}
-
-
-
-
-static void
-reset_notify (ASSUAN_CONTEXT ctx)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- gpgsm_release_certlist (ctrl->server_local->recplist);
- gpgsm_release_certlist (ctrl->server_local->signerlist);
- ctrl->server_local->recplist = NULL;
- ctrl->server_local->signerlist = NULL;
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-}
-
-
-static void
-input_notify (ASSUAN_CONTEXT ctx, const char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- ctrl->autodetect_encoding = 0;
- ctrl->is_pem = 0;
- ctrl->is_base64 = 0;
- if (strstr (line, "--armor"))
- ctrl->is_pem = 1;
- else if (strstr (line, "--base64"))
- ctrl->is_base64 = 1;
- else if (strstr (line, "--binary"))
- ;
- else
- ctrl->autodetect_encoding = 1;
-}
-
-static void
-output_notify (ASSUAN_CONTEXT ctx, const char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
-
- ctrl->create_pem = 0;
- ctrl->create_base64 = 0;
- if (strstr (line, "--armor"))
- ctrl->create_pem = 1;
- else if (strstr (line, "--base64"))
- ctrl->create_base64 = 1; /* just the raw output */
-}
-
-
-
-/* RECIPIENT <userID>
-
- Set the recipient for the encryption. <userID> should be the
- internal representation of the key; the server may accept any other
- way of specification [we will support this]. If this is a valid and
- trusted recipient the server does respond with OK, otherwise the
- return is an ERR with the reason why the recipient can't be used,
- the encryption will then not be done for this recipient. IF the
- policy is not to encrypt at all if not all recipients are valid, the
- client has to take care of this. All RECIPIENT commands are
- cumulative until a RESET or an successful ENCRYPT command. */
-static int
-cmd_recipient (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
-
- rc = gpgsm_add_to_certlist (ctrl, line, 0, &ctrl->server_local->recplist);
- if (rc)
- gpgsm_status2 (ctrl, STATUS_INV_RECP,
- rc == -1? "1":
- rc == GNUPG_No_Public_Key? "1":
- rc == GNUPG_Ambiguous_Name? "2":
- rc == GNUPG_Wrong_Key_Usage? "3":
- rc == GNUPG_Certificate_Revoked? "4":
- rc == GNUPG_Certificate_Expired? "5":
- rc == GNUPG_No_CRL_Known? "6":
- rc == GNUPG_CRL_Too_Old? "7":
- rc == GNUPG_No_Policy_Match? "8":
- "0",
- line, NULL);
-
- return map_to_assuan_status (rc);
-}
-
-/* SIGNER <userID>
-
- Set the signer's keys for the signature creation. <userID> should
- be the internal representation of the key; the server may accept any
- other way of specification [we will support this]. If this is a
- valid and usable signing key the server does respond with OK,
- otherwise it returns an ERR with the reason why the key can't be
- used, the signing will then not be done for this key. If the policy
- is not to sign at all if not all signer keys are valid, the client
- has to take care of this. All SIGNER commands are cumulative until
- a RESET but they are *not* reset by an SIGN command becuase it can
- be expected that set of signers are used for more than one sign
- operation.
-
- Note that this command returns an INV_RECP status which is a bit
- strange, but they are very similar. */
-static int
-cmd_signer (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
-
- rc = gpgsm_add_to_certlist (ctrl, line, 1, &ctrl->server_local->signerlist);
- if (rc)
- gpgsm_status2 (ctrl, STATUS_INV_RECP,
- rc == -1? "1":
- rc == GNUPG_No_Public_Key? "1":
- rc == GNUPG_Ambiguous_Name? "2":
- rc == GNUPG_Wrong_Key_Usage? "3":
- rc == GNUPG_Certificate_Revoked? "4":
- rc == GNUPG_Certificate_Expired? "5":
- rc == GNUPG_No_CRL_Known? "6":
- rc == GNUPG_CRL_Too_Old? "7":
- rc == GNUPG_No_Policy_Match? "8":
- rc == GNUPG_No_Secret_Key? "9":
- "0",
- line, NULL);
-
- return map_to_assuan_status (rc);
-}
-
-
-/* ENCRYPT
-
- Do the actual encryption process. Takes the plaintext from the INPUT
- command, writes to the ciphertext to the file descriptor set with
- the OUTPUT command, take the recipients form all the recipients set
- so far. If this command fails the clients should try to delete all
- output currently done or otherwise mark it as invalid. GPGSM does
- ensure that there won't be any security problem with leftover data
- on the output in this case.
-
- This command should in general not fail, as all necessary checks
- have been done while setting the recipients. The input and output
- pipes are closed. */
-static int
-cmd_encrypt (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int inp_fd, out_fd;
- FILE *out_fp;
- int rc;
-
- inp_fd = assuan_get_input_fd (ctx);
- if (inp_fd == -1)
- return set_error (No_Input, NULL);
- out_fd = assuan_get_output_fd (ctx);
- if (out_fd == -1)
- return set_error (No_Output, NULL);
-
- out_fp = fdopen ( dup(out_fd), "w");
- if (!out_fp)
- return set_error (General_Error, "fdopen() failed");
- rc = gpgsm_encrypt (assuan_get_pointer (ctx),
- ctrl->server_local->recplist,
- inp_fd, out_fp);
- fclose (out_fp);
-
- gpgsm_release_certlist (ctrl->server_local->recplist);
- ctrl->server_local->recplist = NULL;
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- return map_to_assuan_status (rc);
-}
-
-/* DECRYPT
-
- This performs the decrypt operation after doing some check on the
- internal state. (e.g. that only needed data has been set). Because
- it utilizes the GPG-Agent for the session key decryption, there is
- no need to ask the client for a protecting passphrase - GpgAgent
- does take care of this by requesting this from the user. */
-static int
-cmd_decrypt (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int inp_fd, out_fd;
- FILE *out_fp;
- int rc;
-
- inp_fd = assuan_get_input_fd (ctx);
- if (inp_fd == -1)
- return set_error (No_Input, NULL);
- out_fd = assuan_get_output_fd (ctx);
- if (out_fd == -1)
- return set_error (No_Output, NULL);
-
- out_fp = fdopen ( dup(out_fd), "w");
- if (!out_fp)
- return set_error (General_Error, "fdopen() failed");
- rc = gpgsm_decrypt (ctrl, inp_fd, out_fp);
- fclose (out_fp);
-
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-
- return map_to_assuan_status (rc);
-}
-
-
-/* VERIFY
-
- This does a verify operation on the message send to the input-FD.
- The result is written out using status lines. If an output FD was
- given, the signed text will be written to that.
-
- If the signature is a detached one, the server will inquire about
- the signed material and the client must provide it.
- */
-static int
-cmd_verify (ASSUAN_CONTEXT ctx, char *line)
-{
- int rc;
- CTRL ctrl = assuan_get_pointer (ctx);
- int fd = assuan_get_input_fd (ctx);
- int out_fd = assuan_get_output_fd (ctx);
- FILE *out_fp = NULL;
-
- if (fd == -1)
- return set_error (No_Input, NULL);
-
- if (out_fd != -1)
- {
- out_fp = fdopen ( dup(out_fd), "w");
- if (!out_fp)
- return set_error (General_Error, "fdopen() failed");
- }
-
- rc = gpgsm_verify (assuan_get_pointer (ctx), fd,
- ctrl->server_local->message_fd, out_fp);
- if (out_fp)
- fclose (out_fp);
-
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-
- return map_to_assuan_status (rc);
-}
-
-
-/* SIGN [--detached]
-
- Sign the data set with the INPUT command and write it to the sink
- set by OUTPUT. With "--detached" specified, a detached signature is
- created (surprise). */
-static int
-cmd_sign (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int inp_fd, out_fd;
- FILE *out_fp;
- int detached;
- int rc;
-
- inp_fd = assuan_get_input_fd (ctx);
- if (inp_fd == -1)
- return set_error (No_Input, NULL);
- out_fd = assuan_get_output_fd (ctx);
- if (out_fd == -1)
- return set_error (No_Output, NULL);
-
- detached = has_option (line, "--detached");
-
- out_fp = fdopen ( dup(out_fd), "w");
- if (!out_fp)
- return set_error (General_Error, "fdopen() failed");
-
- rc = gpgsm_sign (assuan_get_pointer (ctx), ctrl->server_local->signerlist,
- inp_fd, detached, out_fp);
- fclose (out_fp);
-
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-
- return map_to_assuan_status (rc);
-}
-
-
-/* IMPORT
-
- Import the certificates read form the input-fd, return status
- message for each imported one. The import checks the validity of
- the certificate but not of the entire chain. It is possible to
- import expired certificates. */
-static int
-cmd_import (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int rc;
- int fd = assuan_get_input_fd (ctx);
-
- if (fd == -1)
- return set_error (No_Input, NULL);
-
- rc = gpgsm_import (assuan_get_pointer (ctx), fd);
-
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-
- return map_to_assuan_status (rc);
-}
-
-
-static int
-cmd_export (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int fd = assuan_get_output_fd (ctx);
- FILE *out_fp;
- char *p;
- STRLIST list, sl;
-
- if (fd == -1)
- return set_error (No_Output, NULL);
-
- /* break the line down into an STRLIST */
- list = NULL;
- for (p=line; *p; line = p)
- {
- while (*p && *p != ' ')
- p++;
- if (*p)
- *p++ = 0;
- if (*line)
- {
- sl = xtrymalloc (sizeof *sl + strlen (line));
- if (!sl)
- {
- free_strlist (list);
- return ASSUAN_Out_Of_Core;
- }
- sl->flags = 0;
- strcpy_escaped_plus (sl->d, line);
- sl->next = list;
- list = sl;
- }
- }
-
- out_fp = fdopen ( dup(fd), "w");
- if (!out_fp)
- {
- free_strlist (list);
- return set_error (General_Error, "fdopen() failed");
- }
-
- gpgsm_export (ctrl, list, out_fp);
- fclose (out_fp);
- free_strlist (list);
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
- return 0;
-}
-
-
-static int
-cmd_delkeys (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- char *p;
- STRLIST list, sl;
- int rc;
-
- /* break the line down into an STRLIST */
- list = NULL;
- for (p=line; *p; line = p)
- {
- while (*p && *p != ' ')
- p++;
- if (*p)
- *p++ = 0;
- if (*line)
- {
- sl = xtrymalloc (sizeof *sl + strlen (line));
- if (!sl)
- {
- free_strlist (list);
- return ASSUAN_Out_Of_Core;
- }
- sl->flags = 0;
- strcpy_escaped_plus (sl->d, line);
- sl->next = list;
- list = sl;
- }
- }
-
- rc = gpgsm_delete (ctrl, list);
- free_strlist (list);
-
- /* close and reset the fd */
- close_message_fd (ctrl);
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-
- return map_to_assuan_status (rc);
-}
-
-
-
-/* MESSAGE FD=<n>
-
- Set the file descriptor to read a message which is used with
- detached signatures */
-static int
-cmd_message (ASSUAN_CONTEXT ctx, char *line)
-{
- char *endp;
- int fd;
- CTRL ctrl = assuan_get_pointer (ctx);
-
- if (strncmp (line, "FD=", 3))
- return set_error (Syntax_Error, "FD=<n> expected");
- line += 3;
- if (!digitp (line))
- return set_error (Syntax_Error, "number required");
- fd = strtoul (line, &endp, 10);
- if (*endp)
- return set_error (Syntax_Error, "garbage found");
- if (fd == -1)
- return set_error (No_Input, NULL);
-
- ctrl->server_local->message_fd = fd;
- return 0;
-}
-
-
-static int
-do_listkeys (ASSUAN_CONTEXT ctx, char *line, int mode)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- FILE *fp = assuan_get_data_fp (ctx);
- char *p;
- STRLIST list, sl;
- unsigned int listmode;
-
- if (!fp)
- return set_error (General_Error, "no data stream");
-
- /* break the line down into an STRLIST */
- list = NULL;
- for (p=line; *p; line = p)
- {
- while (*p && *p != ' ')
- p++;
- if (*p)
- *p++ = 0;
- if (*line)
- {
- sl = xtrymalloc (sizeof *sl + strlen (line));
- if (!sl)
- {
- free_strlist (list);
- return ASSUAN_Out_Of_Core;
- }
- sl->flags = 0;
- strcpy_escaped_plus (sl->d, line);
- sl->next = list;
- list = sl;
- }
- }
-
- ctrl->with_colons = 1;
- listmode = mode;
- if (ctrl->server_local->list_internal)
- listmode |= (1<<6);
- if (ctrl->server_local->list_external)
- listmode |= (1<<7);
- gpgsm_list_keys (assuan_get_pointer (ctx), list, fp, listmode);
- free_strlist (list);
- return 0;
-}
-
-static int
-cmd_listkeys (ASSUAN_CONTEXT ctx, char *line)
-{
- return do_listkeys (ctx, line, 3);
-}
-
-static int
-cmd_listsecretkeys (ASSUAN_CONTEXT ctx, char *line)
-{
- return do_listkeys (ctx, line, 2);
-}
-
-
-/* GENKEY
-
- Read the parameters in native format from the input fd and write a
- certificate request to the output.
- */
-static int
-cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
-{
- CTRL ctrl = assuan_get_pointer (ctx);
- int inp_fd, out_fd;
- FILE *out_fp;
- int rc;
-
- inp_fd = assuan_get_input_fd (ctx);
- if (inp_fd == -1)
- return set_error (No_Input, NULL);
- out_fd = assuan_get_output_fd (ctx);
- if (out_fd == -1)
- return set_error (No_Output, NULL);
-
- out_fp = fdopen ( dup(out_fd), "w");
- if (!out_fp)
- return set_error (General_Error, "fdopen() failed");
- rc = gpgsm_genkey (ctrl, inp_fd, out_fp);
- fclose (out_fp);
-
- /* close and reset the fds */
- assuan_close_input_fd (ctx);
- assuan_close_output_fd (ctx);
-
- return map_to_assuan_status (rc);
-}
-
-
-
-
-
-/* Tell the assuan library about our commands */
-static int
-register_commands (ASSUAN_CONTEXT ctx)
-{
- static struct {
- const char *name;
- int cmd_id;
- int (*handler)(ASSUAN_CONTEXT, char *line);
- } table[] = {
- { "RECIPIENT", 0, cmd_recipient },
- { "SIGNER", 0, cmd_signer },
- { "ENCRYPT", 0, cmd_encrypt },
- { "DECRYPT", 0, cmd_decrypt },
- { "VERIFY", 0, cmd_verify },
- { "SIGN", 0, cmd_sign },
- { "IMPORT", 0, cmd_import },
- { "EXPORT", 0, cmd_export },
- { "", ASSUAN_CMD_INPUT, NULL },
- { "", ASSUAN_CMD_OUTPUT, NULL },
- { "MESSAGE", 0, cmd_message },
- { "LISTKEYS", 0, cmd_listkeys },
- { "LISTSECRETKEYS", 0, cmd_listsecretkeys },
- { "GENKEY", 0, cmd_genkey },
- { "DELKEYS", 0, cmd_delkeys },
- { NULL }
- };
- int i, j, rc;
-
- for (i=j=0; table[i].name; i++)
- {
- rc = assuan_register_command (ctx,
- table[i].cmd_id? table[i].cmd_id
- : (ASSUAN_CMD_USER + j++),
- table[i].name, table[i].handler);
- if (rc)
- return rc;
- }
- return 0;
-}
-
-/* Startup the server */
-void
-gpgsm_server (void)
-{
- int rc;
- int filedes[2];
- ASSUAN_CONTEXT ctx;
- struct server_control_s ctrl;
-
- memset (&ctrl, 0, sizeof ctrl);
- gpgsm_init_default_ctrl (&ctrl);
-
- /* For now we use a simple pipe based server so that we can work
- from scripts. We will later add options to run as a daemon and
- wait for requests on a Unix domain socket */
- filedes[0] = 0;
- filedes[1] = 1;
- rc = assuan_init_pipe_server (&ctx, filedes);
- if (rc)
- {
- log_error ("failed to initialize the server: %s\n",
- assuan_strerror(rc));
- gpgsm_exit (2);
- }
- rc = register_commands (ctx);
- if (rc)
- {
- log_error ("failed to the register commands with Assuan: %s\n",
- assuan_strerror(rc));
- gpgsm_exit (2);
- }
- assuan_set_hello_line (ctx, "GNU Privacy Guard's S/M server ready");
-
- assuan_register_reset_notify (ctx, reset_notify);
- assuan_register_input_notify (ctx, input_notify);
- assuan_register_output_notify (ctx, output_notify);
- assuan_register_option_handler (ctx, option_handler);
-
- assuan_set_pointer (ctx, &ctrl);
- ctrl.server_local = xcalloc (1, sizeof *ctrl.server_local);
- ctrl.server_local->assuan_ctx = ctx;
- ctrl.server_local->message_fd = -1;
- ctrl.server_local->list_internal = 1;
- ctrl.server_local->list_external = 0;
-
- if (DBG_ASSUAN)
- assuan_set_log_stream (ctx, log_get_stream ());
-
- for (;;)
- {
- rc = assuan_accept (ctx);
- if (rc == -1)
- {
- break;
- }
- else if (rc)
- {
- log_info ("Assuan accept problem: %s\n", assuan_strerror (rc));
- break;
- }
-
- rc = assuan_process (ctx);
- if (rc)
- {
- log_info ("Assuan processing failed: %s\n", assuan_strerror (rc));
- continue;
- }
- }
-
- gpgsm_release_certlist (ctrl.server_local->recplist);
- ctrl.server_local->recplist = NULL;
- gpgsm_release_certlist (ctrl.server_local->signerlist);
- ctrl.server_local->signerlist = NULL;
-
- assuan_deinit_server (ctx);
-}
-
-
-static const char *
-get_status_string ( int no )
-{
- const char *s;
-
- switch (no)
- {
- case STATUS_ENTER : s = "ENTER"; break;
- case STATUS_LEAVE : s = "LEAVE"; break;
- case STATUS_ABORT : s = "ABORT"; break;
- case STATUS_GOODSIG: s = "GOODSIG"; break;
- case STATUS_SIGEXPIRED: s = "SIGEXPIRED"; break;
- case STATUS_KEYREVOKED: s = "KEYREVOKED"; break;
- case STATUS_BADSIG : s = "BADSIG"; break;
- case STATUS_ERRSIG : s = "ERRSIG"; break;
- case STATUS_BADARMOR : s = "BADARMOR"; break;
- case STATUS_RSA_OR_IDEA : s= "RSA_OR_IDEA"; break;
- case STATUS_TRUST_UNDEFINED: s = "TRUST_UNDEFINED"; break;
- case STATUS_TRUST_NEVER : s = "TRUST_NEVER"; break;
- case STATUS_TRUST_MARGINAL : s = "TRUST_MARGINAL"; break;
- case STATUS_TRUST_FULLY : s = "TRUST_FULLY"; break;
- case STATUS_TRUST_ULTIMATE : s = "TRUST_ULTIMATE"; break;
- case STATUS_GET_BOOL : s = "GET_BOOL"; break;
- case STATUS_GET_LINE : s = "GET_LINE"; break;
- case STATUS_GET_HIDDEN : s = "GET_HIDDEN"; break;
- case STATUS_GOT_IT : s = "GOT_IT"; break;
- case STATUS_SHM_INFO : s = "SHM_INFO"; break;
- case STATUS_SHM_GET : s = "SHM_GET"; break;
- case STATUS_SHM_GET_BOOL : s = "SHM_GET_BOOL"; break;
- case STATUS_SHM_GET_HIDDEN : s = "SHM_GET_HIDDEN"; break;
- case STATUS_NEED_PASSPHRASE: s = "NEED_PASSPHRASE"; break;
- case STATUS_VALIDSIG : s = "VALIDSIG"; break;
- case STATUS_SIG_ID : s = "SIG_ID"; break;
- case STATUS_ENC_TO : s = "ENC_TO"; break;
- case STATUS_NODATA : s = "NODATA"; break;
- case STATUS_BAD_PASSPHRASE : s = "BAD_PASSPHRASE"; break;
- case STATUS_NO_PUBKEY : s = "NO_PUBKEY"; break;
- case STATUS_NO_SECKEY : s = "NO_SECKEY"; break;
- case STATUS_NEED_PASSPHRASE_SYM: s = "NEED_PASSPHRASE_SYM"; break;
- case STATUS_DECRYPTION_FAILED: s = "DECRYPTION_FAILED"; break;
- case STATUS_DECRYPTION_OKAY: s = "DECRYPTION_OKAY"; break;
- case STATUS_MISSING_PASSPHRASE: s = "MISSING_PASSPHRASE"; break;
- case STATUS_GOOD_PASSPHRASE : s = "GOOD_PASSPHRASE"; break;
- case STATUS_GOODMDC : s = "GOODMDC"; break;
- case STATUS_BADMDC : s = "BADMDC"; break;
- case STATUS_ERRMDC : s = "ERRMDC"; break;
- case STATUS_IMPORTED : s = "IMPORTED"; break;
- case STATUS_IMPORT_RES : s = "IMPORT_RES"; break;
- case STATUS_FILE_START : s = "FILE_START"; break;
- case STATUS_FILE_DONE : s = "FILE_DONE"; break;
- case STATUS_FILE_ERROR : s = "FILE_ERROR"; break;
- case STATUS_BEGIN_DECRYPTION:s = "BEGIN_DECRYPTION"; break;
- case STATUS_END_DECRYPTION : s = "END_DECRYPTION"; break;
- case STATUS_BEGIN_ENCRYPTION:s = "BEGIN_ENCRYPTION"; break;
- case STATUS_END_ENCRYPTION : s = "END_ENCRYPTION"; break;
- case STATUS_DELETE_PROBLEM : s = "DELETE_PROBLEM"; break;
- case STATUS_PROGRESS : s = "PROGRESS"; break;
- case STATUS_SIG_CREATED : s = "SIG_CREATED"; break;
- case STATUS_SESSION_KEY : s = "SESSION_KEY"; break;
- case STATUS_NOTATION_NAME : s = "NOTATION_NAME" ; break;
- case STATUS_NOTATION_DATA : s = "NOTATION_DATA" ; break;
- case STATUS_POLICY_URL : s = "POLICY_URL" ; break;
- case STATUS_BEGIN_STREAM : s = "BEGIN_STREAM"; break;
- case STATUS_END_STREAM : s = "END_STREAM"; break;
- case STATUS_KEY_CREATED : s = "KEY_CREATED"; break;
- case STATUS_UNEXPECTED : s = "UNEXPECTED"; break;
- case STATUS_INV_RECP : s = "INV_RECP"; break;
- case STATUS_NO_RECP : s = "NO_RECP"; break;
- case STATUS_ALREADY_SIGNED : s = "ALREADY_SIGNED"; break;
- case STATUS_EXPSIG : s = "EXPSIG"; break;
- case STATUS_EXPKEYSIG : s = "EXPKEYSIG"; break;
- case STATUS_TRUNCATED : s = "TRUNCATED"; break;
- case STATUS_ERROR : s = "ERROR"; break;
- case STATUS_IMPORT_PROBLEM : s = "IMPORT_PROBLEM"; break;
- default: s = "?"; break;
- }
- return s;
-}
-
-
-void
-gpgsm_status2 (CTRL ctrl, int no, ...)
-{
- va_list arg_ptr;
- const char *text;
-
- va_start (arg_ptr, no);
-
- if (ctrl->no_server)
- {
- if (ctrl->status_fd == -1)
- return; /* no status wanted */
- if (!statusfp)
- {
- if (ctrl->status_fd == 1)
- statusfp = stdout;
- else if (ctrl->status_fd == 2)
- statusfp = stderr;
- else
- statusfp = fdopen (ctrl->status_fd, "w");
-
- if (!statusfp)
- {
- log_fatal ("can't open fd %d for status output: %s\n",
- ctrl->status_fd, strerror(errno));
- }
- }
-
- fputs ("[GNUPG:] ", statusfp);
- fputs (get_status_string (no), statusfp);
-
- while ( (text = va_arg (arg_ptr, const char*) ))
- {
- putc ( ' ', statusfp );
- for (; *text; text++)
- {
- if (*text == '\n')
- fputs ( "\\n", statusfp );
- else if (*text == '\r')
- fputs ( "\\r", statusfp );
- else
- putc ( *(const byte *)text, statusfp );
- }
- }
- putc ('\n', statusfp);
- fflush (statusfp);
- }
- else
- {
- ASSUAN_CONTEXT ctx = ctrl->server_local->assuan_ctx;
- char buf[950], *p;
- size_t n;
-
- p = buf;
- n = 0;
- while ( (text = va_arg (arg_ptr, const char *)) )
- {
- if (n)
- {
- *p++ = ' ';
- n++;
- }
- for ( ; *text && n < DIM (buf)-2; n++)
- *p++ = *text++;
- }
- *p = 0;
- assuan_write_status (ctx, get_status_string (no), buf);
- }
-
- va_end (arg_ptr);
-}
-
-void
-gpgsm_status (CTRL ctrl, int no, const char *text)
-{
- gpgsm_status2 (ctrl, no, text, NULL);
-}
-
-
-
-#if 0
-/*
- * Write a status line with a buffer using %XX escapes. If WRAP is >
- * 0 wrap the line after this length. If STRING is not NULL it will
- * be prepended to the buffer, no escaping is done for string.
- * A wrap of -1 forces spaces not to be encoded as %20.
- */
-void
-write_status_text_and_buffer ( int no, const char *string,
- const char *buffer, size_t len, int wrap )
-{
- const char *s, *text;
- int esc, first;
- int lower_limit = ' ';
- size_t n, count, dowrap;
-
- if( !statusfp )
- return; /* not enabled */
-
- if (wrap == -1) {
- lower_limit--;
- wrap = 0;
- }
-
- text = get_status_string (no);
- count = dowrap = first = 1;
- do {
- if (dowrap) {
- fprintf (statusfp, "[GNUPG:] %s ", text );
- count = dowrap = 0;
- if (first && string) {
- fputs (string, statusfp);
- count += strlen (string);
- }
- first = 0;
- }
- for (esc=0, s=buffer, n=len; n && !esc; s++, n-- ) {
- if ( *s == '%' || *(const byte*)s <= lower_limit
- || *(const byte*)s == 127 )
- esc = 1;
- if ( wrap && ++count > wrap ) {
- dowrap=1;
- break;
- }
- }
- if (esc) {
- s--; n++;
- }
- if (s != buffer)
- fwrite (buffer, s-buffer, 1, statusfp );
- if ( esc ) {
- fprintf (statusfp, "%%%02X", *(const byte*)s );
- s++; n--;
- }
- buffer = s;
- len = n;
- if ( dowrap && len )
- putc ( '\n', statusfp );
- } while ( len );
-
- putc ('\n',statusfp);
- fflush (statusfp);
-}
-#endif
diff --git a/sm/sign.c b/sm/sign.c
deleted file mode 100644
index 061dfeebc..000000000
--- a/sm/sign.c
+++ /dev/null
@@ -1,622 +0,0 @@
-/* sign.c - Sign a message
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-
-static void
-hash_data (int fd, GCRY_MD_HD md)
-{
- FILE *fp;
- char buffer[4096];
- int nread;
-
- fp = fdopen ( dup (fd), "rb");
- if (!fp)
- {
- log_error ("fdopen(%d) failed: %s\n", fd, strerror (errno));
- return;
- }
-
- do
- {
- nread = fread (buffer, 1, DIM(buffer), fp);
- gcry_md_write (md, buffer, nread);
- }
- while (nread);
- if (ferror (fp))
- log_error ("read error on fd %d: %s\n", fd, strerror (errno));
- fclose (fp);
-}
-
-static int
-hash_and_copy_data (int fd, GCRY_MD_HD md, KsbaWriter writer)
-{
- KsbaError err;
- FILE *fp;
- char buffer[4096];
- int nread;
- int rc = 0;
- int any = 0;
-
- fp = fdopen ( dup (fd), "rb");
- if (!fp)
- {
- log_error ("fdopen(%d) failed: %s\n", fd, strerror (errno));
- return GNUPG_File_Open_Error;
- }
-
- do
- {
- nread = fread (buffer, 1, DIM(buffer), fp);
- if (nread)
- {
- any = 1;
- gcry_md_write (md, buffer, nread);
- err = ksba_writer_write_octet_string (writer, buffer, nread, 0);
- if (err)
- {
- log_error ("write failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- }
- }
- }
- while (nread && !rc);
- if (ferror (fp))
- {
- log_error ("read error on fd %d: %s\n", fd, strerror (errno));
- rc = GNUPG_Read_Error;
- }
- fclose (fp);
- if (!any)
- {
- /* We can't allow to sign an empty message becuase it does not
- make mnuch sense and more seriously, ksba-cms_build has
- already written the tag for data and now expects an octet
- string but an octet string of zeize 0 is illegal. */
- log_error ("cannot sign an empty message\n");
- rc = GNUPG_No_Data;
- }
- if (!rc)
- {
- err = ksba_writer_write_octet_string (writer, NULL, 0, 1);
- if (err)
- {
- log_error ("write failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- }
- }
-
- return rc;
-}
-
-
-/* Get the default certificate which is defined as the first one our
- keyDB retruns and has a secret key available */
-int
-gpgsm_get_default_cert (KsbaCert *r_cert)
-{
- KEYDB_HANDLE hd;
- KsbaCert cert = NULL;
- int rc;
- char *p;
-
- hd = keydb_new (0);
- if (!hd)
- return GNUPG_General_Error;
- rc = keydb_search_first (hd);
- if (rc)
- {
- keydb_release (hd);
- return rc;
- }
-
- do
- {
- rc = keydb_get_cert (hd, &cert);
- if (rc)
- {
- log_error ("keydb_get_cert failed: %s\n", gnupg_strerror (rc));
- keydb_release (hd);
- return rc;
- }
-
- p = gpgsm_get_keygrip_hexstring (cert);
- if (p)
- {
- if (!gpgsm_agent_havekey (p))
- {
- xfree (p);
- keydb_release (hd);
- *r_cert = cert;
- return 0; /* got it */
- }
- xfree (p);
- }
-
- ksba_cert_release (cert);
- cert = NULL;
- }
- while (!(rc = keydb_search_next (hd)));
- if (rc && rc != -1)
- log_error ("keydb_search_next failed: %s\n", gnupg_strerror (rc));
-
- ksba_cert_release (cert);
- keydb_release (hd);
- return rc;
-}
-
-
-static KsbaCert
-get_default_signer (void)
-{
- KEYDB_SEARCH_DESC desc;
- KsbaCert cert = NULL;
- KEYDB_HANDLE kh = NULL;
- int rc;
-
- if (!opt.local_user)
- {
- rc = gpgsm_get_default_cert (&cert);
- if (rc)
- {
- if (rc != -1)
- log_debug ("failed to find default certificate: %s\n",
- gnupg_strerror (rc));
- return NULL;
- }
- return cert;
- }
-
- rc = keydb_classify_name (opt.local_user, &desc);
- if (rc)
- {
- log_error ("failed to find default signer: %s\n", gnupg_strerror (rc));
- return NULL;
- }
-
- kh = keydb_new (0);
- if (!kh)
- return NULL;
-
- rc = keydb_search (kh, &desc, 1);
- if (rc)
- {
- log_debug ("failed to find default certificate: rc=%d\n", rc);
- }
- else
- {
- rc = keydb_get_cert (kh, &cert);
- if (rc)
- {
- log_debug ("failed to get cert: rc=%d\n", rc);
- }
- }
-
- keydb_release (kh);
- return cert;
-}
-
-/* Depending on the options in CTRL add the certificate CERT as well as
- other certificate up in the chain to the Root-CA to the CMS
- object. */
-static int
-add_certificate_list (CTRL ctrl, KsbaCMS cms, KsbaCert cert)
-{
- KsbaError err;
- int rc = 0;
- KsbaCert next = NULL;
- int n;
- int not_root = 0;
-
- ksba_cert_ref (cert);
-
- n = ctrl->include_certs;
- if (n == -2)
- {
- not_root = 1;
- n = -1;
- }
- if (n < 0 || n > 50)
- n = 50; /* We better apply an upper bound */
-
- if (n)
- {
- if (not_root && gpgsm_is_root_cert (cert))
- err = 0;
- else
- err = ksba_cms_add_cert (cms, cert);
- if (err)
- goto ksba_failure;
- }
- while ( n-- && !(rc = gpgsm_walk_cert_chain (cert, &next)) )
- {
- if (not_root && gpgsm_is_root_cert (next))
- err = 0;
- else
- err = ksba_cms_add_cert (cms, next);
- ksba_cert_release (cert);
- cert = next; next = NULL;
- if (err)
- goto ksba_failure;
- }
- ksba_cert_release (cert);
-
- return rc == -1? 0: rc;
-
- ksba_failure:
- ksba_cert_release (cert);
- log_error ("ksba_cms_add_cert failed: %s\n", ksba_strerror (err));
- return map_ksba_err (err);
-}
-
-
-
-
-/* Perform a sign operation.
-
- Sign the data received on DATA-FD in embedded mode or in detached
- mode when DETACHED is true. Write the signature to OUT_FP. The
- keys used to sign are taken from SIGNERLIST or the default one will
- be used if the value of this argument is NULL. */
-int
-gpgsm_sign (CTRL ctrl, CERTLIST signerlist,
- int data_fd, int detached, FILE *out_fp)
-{
- int i, rc;
- KsbaError err;
- Base64Context b64writer = NULL;
- KsbaWriter writer;
- KsbaCMS cms = NULL;
- KsbaStopReason stopreason;
- KEYDB_HANDLE kh = NULL;
- GCRY_MD_HD data_md = NULL;
- int signer;
- const char *algoid;
- int algo;
- time_t signed_at;
- CERTLIST cl;
- int release_signerlist = 0;
-
- kh = keydb_new (0);
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
- ctrl->pem_name = "SIGNED MESSAGE";
- rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, &writer);
- if (rc)
- {
- log_error ("can't create writer: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- cms = ksba_cms_new ();
- if (!cms)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- err = ksba_cms_set_reader_writer (cms, NULL, writer);
- if (err)
- {
- log_debug ("ksba_cms_set_reader_writer failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- /* We are going to create signed data with data as encap. content */
- err = ksba_cms_set_content_type (cms, 0, KSBA_CT_SIGNED_DATA);
- if (!err)
- err = ksba_cms_set_content_type (cms, 1, KSBA_CT_DATA);
- if (err)
- {
- log_debug ("ksba_cms_set_content_type failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- /* If no list of signers is given, use a default one. */
- if (!signerlist)
- {
- KsbaCert cert = get_default_signer ();
- if (!cert)
- {
- log_error ("no default signer found\n");
- rc = seterr (General_Error);
- goto leave;
- }
- signerlist = xtrycalloc (1, sizeof *signerlist);
- if (!signerlist)
- {
- rc = GNUPG_Out_Of_Core;
- ksba_cert_release (cert);
- goto leave;
- }
- signerlist->cert = cert;
- release_signerlist = 1;
- }
-
-
- /* Gather certificates of signers and store them in the CMS object. */
- for (cl=signerlist; cl; cl = cl->next)
- {
- rc = gpgsm_cert_use_sign_p (cl->cert);
- if (rc)
- goto leave;
-
- err = ksba_cms_add_signer (cms, cl->cert);
- if (err)
- {
- log_error ("ksba_cms_add_signer failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- rc = add_certificate_list (ctrl, cms, cl->cert);
- if (rc)
- {
- log_error ("failed to store list of certificates: %s\n",
- gnupg_strerror(rc));
- goto leave;
- }
- /* Set the hash algorithm we are going to use */
- err = ksba_cms_add_digest_algo (cms, "1.3.14.3.2.26" /*SHA-1*/);
- if (err)
- {
- log_debug ("ksba_cms_add_digest_algo failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
-
- /* Prepare hashing (actually we are figuring out what we have set above)*/
- data_md = gcry_md_open (0, 0);
- if (!data_md)
- {
- rc = map_gcry_err (gcry_errno());
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- goto leave;
- }
- if (DBG_HASHING)
- gcry_md_start_debug (data_md, "sign.data");
-
- for (i=0; (algoid=ksba_cms_get_digest_algo_list (cms, i)); i++)
- {
- algo = gcry_md_map_name (algoid);
- if (!algo)
- {
- log_error ("unknown hash algorithm `%s'\n", algoid? algoid:"?");
- rc = GNUPG_Bug;
- goto leave;
- }
- gcry_md_enable (data_md, algo);
- }
-
- if (detached)
- { /* we hash the data right now so that we can store the message
- digest. ksba_cms_build() takes this as an flag that detached
- data is expected. */
- unsigned char *digest;
- size_t digest_len;
- /* Fixme do this for all signers and get the algo to use from
- the signer's certificate - does not make mich sense, bu we
- should do this consistent as we have already done it above */
- algo = GCRY_MD_SHA1;
- hash_data (data_fd, data_md);
- digest = gcry_md_read (data_md, algo);
- digest_len = gcry_md_get_algo_dlen (algo);
- if ( !digest || !digest_len)
- {
- log_error ("problem getting the hash of the data\n");
- rc = GNUPG_Bug;
- goto leave;
- }
- for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
- {
- err = ksba_cms_set_message_digest (cms, signer, digest, digest_len);
- if (err)
- {
- log_error ("ksba_cms_set_message_digest failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
- }
-
- signed_at = gnupg_get_time ();
- for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
- {
- err = ksba_cms_set_signing_time (cms, signer, signed_at);
- if (err)
- {
- log_error ("ksba_cms_set_signing_time failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
-
- do
- {
- err = ksba_cms_build (cms, &stopreason);
- if (err)
- {
- log_debug ("ksba_cms_build failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- if (stopreason == KSBA_SR_BEGIN_DATA)
- { /* hash the data and store the message digest */
- unsigned char *digest;
- size_t digest_len;
-
- assert (!detached);
- /* Fixme: get the algo to use from the signer's certificate
- - does not make much sense, but we should do this
- consistent as we have already done it above. Code is
- mostly duplicated above. */
-
- algo = GCRY_MD_SHA1;
- rc = hash_and_copy_data (data_fd, data_md, writer);
- if (rc)
- goto leave;
- digest = gcry_md_read (data_md, algo);
- digest_len = gcry_md_get_algo_dlen (algo);
- if ( !digest || !digest_len)
- {
- log_error ("problem getting the hash of the data\n");
- rc = GNUPG_Bug;
- goto leave;
- }
- for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
- {
- err = ksba_cms_set_message_digest (cms, signer,
- digest, digest_len);
- if (err)
- {
- log_error ("ksba_cms_set_message_digest failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
- }
- }
- else if (stopreason == KSBA_SR_NEED_SIG)
- { /* calculate the signature for all signers */
- GCRY_MD_HD md;
-
- algo = GCRY_MD_SHA1;
- md = gcry_md_open (algo, 0);
- if (DBG_HASHING)
- gcry_md_start_debug (md, "sign.attr");
-
- if (!md)
- {
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- goto leave;
- }
- ksba_cms_set_hash_function (cms, HASH_FNC, md);
- for (cl=signerlist,signer=0; cl; cl = cl->next, signer++)
- {
- char *sigval = NULL;
- char *buf, *fpr;
-
- if (signer)
- gcry_md_reset (md);
- rc = ksba_cms_hash_signed_attrs (cms, signer);
- if (rc)
- {
- log_debug ("hashing signed attrs failed: %s\n",
- ksba_strerror (rc));
- gcry_md_close (md);
- goto leave;
- }
-
- rc = gpgsm_create_cms_signature (cl->cert, md, algo, &sigval);
- if (rc)
- {
- gcry_md_close (md);
- goto leave;
- }
-
- err = ksba_cms_set_sig_val (cms, signer, sigval);
- xfree (sigval);
- if (err)
- {
- log_error ("failed to store the signature: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- gcry_md_close (md);
- goto leave;
- }
-
- /* write a status message */
- fpr = gpgsm_get_fingerprint_hexstring (cl->cert, GCRY_MD_SHA1);
- if (!fpr)
- {
- rc = seterr (Out_Of_Core);
- gcry_md_close (md);
- goto leave;
- }
- rc = asprintf (&buf, "%c %d %d 00 %lu %s",
- detached? 'D':'S',
- GCRY_PK_RSA, /* FIXME: get pk algo from cert */
- algo,
- (ulong)signed_at,
- fpr);
- xfree (fpr);
- if (rc < 0)
- {
- rc = seterr (Out_Of_Core);
- gcry_md_close (md);
- goto leave;
- }
- rc = 0;
- gpgsm_status (ctrl, STATUS_SIG_CREATED, buf);
- free (buf); /* yes, we must use the regular free() here */
- }
- gcry_md_close (md);
-
- }
- }
- while (stopreason != KSBA_SR_READY);
-
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- log_info ("signature created\n");
-
-
- leave:
- if (release_signerlist)
- gpgsm_release_certlist (signerlist);
- ksba_cms_release (cms);
- gpgsm_destroy_writer (b64writer);
- keydb_release (kh);
- gcry_md_close (data_md);
- return rc;
-}
diff --git a/sm/verify.c b/sm/verify.c
deleted file mode 100644
index df7c8bfe8..000000000
--- a/sm/verify.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/* verify.c - Verify a messages signature
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-#include <ksba.h>
-
-#include "gpgsm.h"
-#include "keydb.h"
-#include "i18n.h"
-
-/* fixme: Move this to jnlib */
-static char *
-strtimestamp (time_t atime)
-{
- char *buffer = xmalloc (15);
-
- if (atime < 0)
- strcpy (buffer, "????" "-??" "-??");
- else if (!atime)
- strcpy (buffer, "none");
- else
- {
- struct tm *tp;
-
- tp = gmtime( &atime );
- sprintf (buffer, "%04d-%02d-%02d",
- 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday);
- }
- return buffer;
-}
-
-
-
-/* Hash the data for a detached signature */
-static void
-hash_data (int fd, GCRY_MD_HD md)
-{
- FILE *fp;
- char buffer[4096];
- int nread;
-
- fp = fdopen ( dup (fd), "rb");
- if (!fp)
- {
- log_error ("fdopen(%d) failed: %s\n", fd, strerror (errno));
- return;
- }
-
- do
- {
- nread = fread (buffer, 1, DIM(buffer), fp);
- gcry_md_write (md, buffer, nread);
- }
- while (nread);
- if (ferror (fp))
- log_error ("read error on fd %d: %s\n", fd, strerror (errno));
- fclose (fp);
-}
-
-
-
-
-/* Perform a verify operation. To verify detached signatures, data_fd
- must be different than -1. With OUT_FP given and a non-detached
- signature, the signed material is written to that stream. */
-int
-gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
-{
- int i, rc;
- Base64Context b64reader = NULL;
- Base64Context b64writer = NULL;
- KsbaError err;
- KsbaReader reader;
- KsbaWriter writer = NULL;
- KsbaCMS cms = NULL;
- KsbaStopReason stopreason;
- KsbaCert cert;
- KEYDB_HANDLE kh;
- GCRY_MD_HD data_md = NULL;
- int signer;
- const char *algoid;
- int algo;
- int is_detached;
- FILE *fp = NULL;
- char *p;
-
- kh = keydb_new (0);
- if (!kh)
- {
- log_error (_("failed to allocated keyDB handle\n"));
- rc = GNUPG_General_Error;
- goto leave;
- }
-
-
- fp = fdopen ( dup (in_fd), "rb");
- if (!fp)
- {
- log_error ("fdopen() failed: %s\n", strerror (errno));
- rc = seterr (IO_Error);
- goto leave;
- }
-
- rc = gpgsm_create_reader (&b64reader, ctrl, fp, &reader);
- if (rc)
- {
- log_error ("can't create reader: %s\n", gnupg_strerror (rc));
- goto leave;
- }
-
- if (out_fp)
- {
- rc = gpgsm_create_writer (&b64writer, ctrl, out_fp, &writer);
- if (rc)
- {
- log_error ("can't create writer: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- }
-
- cms = ksba_cms_new ();
- if (!cms)
- {
- rc = seterr (Out_Of_Core);
- goto leave;
- }
-
- err = ksba_cms_set_reader_writer (cms, reader, writer);
- if (err)
- {
- log_error ("ksba_cms_set_reader_writer failed: %s\n",
- ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- data_md = gcry_md_open (0, 0);
- if (!data_md)
- {
- rc = map_gcry_err (gcry_errno());
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- goto leave;
- }
- if (DBG_HASHING)
- gcry_md_start_debug (data_md, "vrfy.data");
-
- is_detached = 0;
- do
- {
- err = ksba_cms_parse (cms, &stopreason);
- if (err)
- {
- log_error ("ksba_cms_parse failed: %s\n", ksba_strerror (err));
- rc = map_ksba_err (err);
- goto leave;
- }
-
- if (stopreason == KSBA_SR_NEED_HASH)
- {
- is_detached = 1;
- if (opt.verbose)
- log_info ("detached signature\n");
- }
-
- if (stopreason == KSBA_SR_NEED_HASH
- || stopreason == KSBA_SR_BEGIN_DATA)
- { /* We are now able to enable the hash algorithms */
- for (i=0; (algoid=ksba_cms_get_digest_algo_list (cms, i)); i++)
- {
- algo = gcry_md_map_name (algoid);
- if (!algo)
- log_error ("unknown hash algorithm `%s'\n",
- algoid? algoid:"?");
- else
- gcry_md_enable (data_md, algo);
- }
- if (is_detached)
- {
- if (data_fd == -1)
- log_info ("detached signature w/o data "
- "- assuming certs-only\n");
- else
- hash_data (data_fd, data_md);
- }
- else
- {
- ksba_cms_set_hash_function (cms, HASH_FNC, data_md);
- }
- }
- else if (stopreason == KSBA_SR_END_DATA)
- { /* The data bas been hashed */
-
- }
- }
- while (stopreason != KSBA_SR_READY);
-
- if (b64writer)
- {
- rc = gpgsm_finish_writer (b64writer);
- if (rc)
- {
- log_error ("write failed: %s\n", gnupg_strerror (rc));
- goto leave;
- }
- }
-
- if (data_fd != -1 && !is_detached)
- {
- log_error ("data given for a non-detached signature\n");
- rc = GNUPG_Conflict;
- goto leave;
- }
-
- for (i=0; (cert=ksba_cms_get_cert (cms, i)); i++)
- {
- /* Fixme: it might be better to check the validity of the
- certificate first before entering it into the DB. This way
- we would avoid cluttering the DB with invalid
- certificates. */
- keydb_store_cert (cert, 0, NULL);
- ksba_cert_release (cert);
- }
-
- cert = NULL;
- err = 0;
- for (signer=0; ; signer++)
- {
- char *issuer = NULL;
- KsbaSexp sigval = NULL;
- time_t sigtime, keyexptime;
- KsbaSexp serial;
- char *msgdigest = NULL;
- size_t msgdigestlen;
-
- err = ksba_cms_get_issuer_serial (cms, signer, &issuer, &serial);
- if (!signer && err == KSBA_No_Data && data_fd == -1 && is_detached)
- {
- log_info ("certs-only message accepted\n");
- err = 0;
- break;
- }
- if (err)
- {
- if (signer && err == -1)
- err = 0;
- break;
- }
- if (DBG_X509)
- {
- log_debug ("signer %d - issuer: `%s'\n",
- signer, issuer? issuer:"[NONE]");
- log_debug ("signer %d - serial: ", signer);
- gpgsm_dump_serial (serial);
- log_printf ("\n");
- }
-
- err = ksba_cms_get_signing_time (cms, signer, &sigtime);
- if (err == KSBA_No_Data)
- sigtime = 0;
- else if (err)
- {
- log_error ("error getting signing time: %s\n", ksba_strerror (err));
- sigtime = (time_t)-1;
- }
-
- err = ksba_cms_get_message_digest (cms, signer,
- &msgdigest, &msgdigestlen);
- if (!err)
- {
- algoid = ksba_cms_get_digest_algo (cms, signer);
- algo = gcry_md_map_name (algoid);
- if (DBG_X509)
- log_debug ("signer %d - digest algo: %d\n", signer, algo);
- if ( !gcry_md_info (data_md, GCRYCTL_IS_ALGO_ENABLED, &algo, NULL) )
- {
- log_error ("digest algo %d has not been enabled\n", algo);
- goto next_signer;
- }
- }
- else if (err == KSBA_No_Data)
- {
- assert (!msgdigest);
- err = 0;
- algoid = NULL;
- algo = 0;
- }
- else /* real error */
- break;
-
- sigval = ksba_cms_get_sig_val (cms, signer);
- if (!sigval)
- {
- log_error ("no signature value available\n");
- goto next_signer;
- }
- if (DBG_X509)
- log_debug ("signer %d - signature available", signer);
-
- /* Find the certificate of the signer */
- keydb_search_reset (kh);
- rc = keydb_search_issuer_sn (kh, issuer, serial);
- if (rc)
- {
- if (rc == -1)
- {
- log_error ("certificate not found\n");
- rc = GNUPG_No_Public_Key;
- }
- else
- log_error ("failed to find the certificate: %s\n",
- gnupg_strerror(rc));
- gpgsm_status2 (ctrl, STATUS_ERROR, "verify.findkey",
- gnupg_error_token (rc), NULL);
- /* fixme: we might want to append the issuer and serial
- using our standard notation */
- goto next_signer;
- }
-
- rc = keydb_get_cert (kh, &cert);
- if (rc)
- {
- log_error ("failed to get cert: %s\n", gnupg_strerror (rc));
- goto next_signer;
- }
-
- log_info (_("Signature made "));
- if (sigtime)
- gpgsm_dump_time (sigtime);
- else
- log_printf (_("[date not given]"));
- log_printf (_(" using certificate ID %08lX\n"),
- gpgsm_get_short_fingerprint (cert));
-
-
- if (msgdigest)
- { /* Signed attributes are available. */
- GCRY_MD_HD md;
- unsigned char *s;
-
- /* check that the message digest in the signed attributes
- matches the one we calculated on the data */
- s = gcry_md_read (data_md, algo);
- if ( !s || !msgdigestlen
- || gcry_md_get_algo_dlen (algo) != msgdigestlen
- || !s || memcmp (s, msgdigest, msgdigestlen) )
- {
- char *fpr;
-
- log_error ("invalid signature: message digest attribute "
- "does not match calculated one\n");
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- gpgsm_status (ctrl, STATUS_BADSIG, fpr);
- xfree (fpr);
- goto next_signer;
- }
-
- md = gcry_md_open (algo, 0);
- if (!md)
- {
- log_error ("md_open failed: %s\n", gcry_strerror (-1));
- goto next_signer;
- }
- if (DBG_HASHING)
- gcry_md_start_debug (md, "vrfy.attr");
-
- ksba_cms_set_hash_function (cms, HASH_FNC, md);
- rc = ksba_cms_hash_signed_attrs (cms, signer);
- if (rc)
- {
- log_error ("hashing signed attrs failed: %s\n",
- ksba_strerror (rc));
- gcry_md_close (md);
- goto next_signer;
- }
- rc = gpgsm_check_cms_signature (cert, sigval, md, algo);
- gcry_md_close (md);
- }
- else
- {
- rc = gpgsm_check_cms_signature (cert, sigval, data_md, algo);
- }
-
- if (rc)
- {
- char *fpr;
-
- log_error ("invalid signature: %s\n", gnupg_strerror (rc));
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- gpgsm_status (ctrl, STATUS_BADSIG, fpr);
- xfree (fpr);
- goto next_signer;
- }
- rc = gpgsm_cert_use_verify_p (cert); /*(this displays an info message)*/
- if (rc)
- {
- gpgsm_status2 (ctrl, STATUS_ERROR, "verify.keyusage",
- gnupg_error_token (rc), NULL);
- rc = 0;
- }
-
- if (DBG_X509)
- log_debug ("signature okay - checking certs\n");
- rc = gpgsm_validate_chain (ctrl, cert, &keyexptime);
- if (rc == GNUPG_Certificate_Expired)
- {
- gpgsm_status (ctrl, STATUS_EXPKEYSIG, NULL);
- rc = 0;
- }
- else
- gpgsm_status (ctrl, STATUS_GOODSIG, NULL);
-
- {
- char *buf, *fpr, *tstr;
-
- fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
- tstr = strtimestamp (sigtime);
- buf = xmalloc ( strlen(fpr) + strlen (tstr) + 120);
- sprintf (buf, "%s %s %lu %lu", fpr, tstr,
- (unsigned long)sigtime, (unsigned long)keyexptime );
- xfree (tstr);
- xfree (fpr);
- gpgsm_status (ctrl, STATUS_VALIDSIG, buf);
- xfree (buf);
- }
-
- if (rc) /* of validate_chain */
- {
- log_error ("invalid certification chain: %s\n", gnupg_strerror (rc));
- if (rc == GNUPG_Bad_Certificate_Chain
- || rc == GNUPG_Bad_Certificate
- || rc == GNUPG_Bad_CA_Certificate
- || rc == GNUPG_Certificate_Revoked)
- gpgsm_status (ctrl, STATUS_TRUST_NEVER, gnupg_error_token (rc));
- else
- gpgsm_status (ctrl, STATUS_TRUST_UNDEFINED, gnupg_error_token (rc));
- goto next_signer;
- }
-
- for (i=0; (p = ksba_cert_get_subject (cert, i)); i++)
- {
- log_info (!i? _("Good signature from")
- : _(" aka"));
- log_printf (" \"");
- gpgsm_print_name (log_get_stream (), p);
- log_printf ("\"\n");
- ksba_free (p);
- }
-
- gpgsm_status (ctrl, STATUS_TRUST_FULLY, NULL);
-
-
- next_signer:
- rc = 0;
- xfree (issuer);
- xfree (serial);
- xfree (sigval);
- xfree (msgdigest);
- ksba_cert_release (cert);
- cert = NULL;
- }
- rc = 0;
- if (err)
- {
- log_error ("ksba error: %s\n", ksba_strerror (err));
- rc = map_ksba_err (rc);
- }
-
-
-
- leave:
- ksba_cms_release (cms);
- gpgsm_destroy_reader (b64reader);
- gpgsm_destroy_writer (b64writer);
- keydb_release (kh);
- gcry_md_close (data_md);
- if (fp)
- fclose (fp);
-
- if (rc)
- gpgsm_status2 (ctrl, STATUS_ERROR, "verify.leave",
- gnupg_error_token (rc), NULL);
- return rc;
-}
-
diff --git a/stamp-h.in b/stamp-h.in
deleted file mode 100644
index 9788f7023..000000000
--- a/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/tests/ChangeLog b/tests/ChangeLog
deleted file mode 100644
index d9ff7eb8f..000000000
--- a/tests/ChangeLog
+++ /dev/null
@@ -1,52 +0,0 @@
-2002-09-04 Neal H. Walfield <neal@g10code.de>
-
- * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH, but
- rather prepend it. Be more robust and prefer printf over echo -n.
-
-2002-09-04 Marcus Brinkmann <marcus@g10code.de>
-
- * asschk.c (start_server): Close the parent's file descriptors in
- the child.
- (read_assuan): Variable NREAD removed. Cut off the received line
- currectly if more than one line was read.
-
-2002-09-03 Neal H. Walfield <neal@g10code.de>
-
- * Makefile.am (inittests.stamp): Construct an LD_LIBRARY_PATH from
- LDFLAGS.
-
-2002-08-09 Werner Koch <wk@gnupg.org>
-
- * asschk.c (cmd_getenv): New.
- (expand_line): Allow / as variable name delimiter.
- * sm-sign+verify, sm-verify: Use $srcdir so that a VPATH build works.
-
- * Makefile.am: Fixes for make dist.
- * samplekets/Makefile.am: New.
-
-2002-08-08 Werner Koch <wk@gnupg.org>
-
- * asschk.c: Added some new features.
- * runtest, inittests: New.
- * text-1.txt, text-2.txt, text-3.txt: New.
- * text-1.osig.pem, text-1.dsig.pem, text-1.osig-bad.pem: New.
- * text-2.osig.pem, text-2.osig-bad.pem: New.
- * samplekeys : New directory
- * sm-verify, sm-sign+verify: The first test scripts.
-
-2002-08-06 Werner Koch <wk@gnupg.org>
-
- * Makefile.am, asschk.c: New.
-
-
- Copyright 2002 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index b2fa56704..000000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,78 +0,0 @@
-# Makefile.am -tests makefile for libxtime
-# Copyright (C) 2002 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-GPGSM = ../sm/gpgsm
-
-# We can't unset a variable here so we unset GPG_AGENT_INFO in runtest
-TESTS_ENVIRONMENT = GNUPGHOME=`pwd` LC_ALL=C GPGSM=$(GPGSM) $(srcdir)/runtest
-
-testscripts = sm-sign+verify sm-verify
-
-EXTRA_DIST = runtest inittests $(testscripts) \
- text-1.txt text-2.txt text-3.txt \
- text-1.osig.pem text-1.dsig.pem text-1.osig-bad.pem \
- text-2.osig.pem text-2.osig-bad.pem \
- samplekeys/32100C27173EF6E9C4E9A25D3D69F86D37A4F939.key \
- samplekeys/cert_g10code_pete1.pem \
- samplekeys/cert_g10code_test1.pem \
- samplekeys/cert_g10code_theo1.pem
-
-TESTS = $(testscripts)
-
-CLEANFILES = inittests.stamp x y y z out err
- *.lock .\#lk*
-
-DISTCLEANFILES = pubring.kbx~ random_seed
-
-noinst_PROGRAMS = asschk
-
-asschk_SOURCES = asschk.c
-
-
-all-local: inittests.stamp
-
-clean-local:
- srcdir=$(srcdir) $(TESTS_ENVIRONMENT) $(srcdir)/inittests --clean
-
-inittests.stamp: inittests
- LD_LIBRARY_PATH=$$(seen=0; \
- for i in $(LDFLAGS); \
- do \
- if echo "$$i" | egrep '^-L' >/dev/null 2>&1; \
- then \
- if test $$seen = 0; \
- then \
- seen=1; \
- else \
- printf ":"; \
- fi; \
- printf "%s" "$${i}" | sed 's/^-L//'; \
- fi; \
- done; \
- if test $$seen != 0 \
- && test x$${LD_LIBRARY_PATH} != x; \
- then \
- printf ":"; \
- fi; \
- printf "%s" "$${LD_LIBRARY_PATH}") \
- srcdir=$(srcdir) $(TESTS_ENVIRONMENT) $(srcdir)/inittests
- echo timestamp >./inittests.stamp
-
diff --git a/tests/asschk.c b/tests/asschk.c
deleted file mode 100644
index 1a11ead33..000000000
--- a/tests/asschk.c
+++ /dev/null
@@ -1,1046 +0,0 @@
-/* asschk.c - Assuan Server Checker
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/* This is a simple stand-alone Assuan server test program. We don't
- want to use the assuan library because we don't want to hide errors
- in that library.
-
- The script language is line based. Empty lines or lines containing
- only white spaces are ignored, line with a hash sign as first non
- white space character are treated as comments.
-
- A simple macro mechanism is implemnted. Macros are expanded before
- a line is processed but after comment processing. Macros are only
- expanded once and non existing macros expand to the empty string.
- A macro is dereferenced by prefixing its name with a dollar sign;
- the end of the name is currently indicated by a white space, a
- dollar sign or a slash. To use a dollor sign verbatim, double it.
-
- A macro is assigned by prefixing a statement with the macro name
- and an equal sign. The value is assigned verbatim if it does not
- resemble a command, otherwise the return value of the command will
- get assigned. The command "let" may be used to assign values
- unambigiously and it should be used if the value starts with a
- letter.
-
- Conditions are not yes implemented except for a simple evaluation
- which yields false for an empty string or the string "0". The
- result may be negated by prefixing with a '!'.
-
- The general syntax of a command is:
-
- [<name> =] <statement> [<args>]
-
- If NAME is not specifed but the statement returns a value it is
- assigned to the name "?" so that it can be referenced using "$?".
- The following commands are implemented:
-
- let <value>
- Return VALUE.
-
- echo <value>
- Print VALUE.
-
- openfile <filename>
- Open file FILENAME for read access and retrun the file descriptor.
-
- createfile <filename>
- Create file FILENAME, open for write access and retrun the file
- descriptor.
-
- pipeserver <program>
- Connect to the Assuan server PROGRAM.
-
- send <line>
- Send LINE to the server.
-
- expect-ok
- Expect an OK response from the server. Status and data out put
- is ignored.
-
- expect-err
- Expect an ERR response from the server. Status and data out put
- is ignored.
-
- count-status <code>
- Initialize the assigned variable to 0 and assign it as an counter for
- status code CODE. This command must be called with an assignment.
-
- quit
- Terminate the process.
-
- quit-if <condition>
- Terminate the process if CONDITION evaluates to true.
-
- fail-if <condition>
- Terminate the process with an exit code of 1 if CONDITION
- evaluates to true.
-
- cmpfiles <first> <second>
- Returns true when the content of the files FIRST and SECOND match.
-
- getenv <name>
- Return the value of the environment variable NAME.
-
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
-# define ATTR_PRINTF(f,a) __attribute__ ((format (printf,f,a)))
-#else
-# define ATTR_PRINTF(f,a)
-#endif
-
-#define spacep(p) (*(p) == ' ' || *(p) == '\t')
-
-#define MAX_LINELEN 2048
-
-typedef enum {
- LINE_OK = 0,
- LINE_ERR,
- LINE_STAT,
- LINE_DATA,
- LINE_END,
-} LINETYPE;
-
-typedef enum {
- VARTYPE_SIMPLE = 0,
- VARTYPE_FD,
- VARTYPE_COUNTER
-} VARTYPE;
-
-
-struct variable_s {
- struct variable_s *next;
- VARTYPE type;
- unsigned int count;
- char *value;
- char name[1];
-};
-typedef struct variable_s *VARIABLE;
-
-
-static void die (const char *format, ...) ATTR_PRINTF(1,2);
-
-
-/* Name of this program to be printed in error messages. */
-static const char *invocation_name;
-
-/* Talk a bit about what is going on. */
-static int opt_verbose;
-
-/* Option to ignore the echo command. */
-static int opt_no_echo;
-
-/* File descriptors used to communicate with the current server. */
-static int server_send_fd = -1;
-static int server_recv_fd = -1;
-
-/* The Assuan protocol limits the line length to 1024, so we can
- safely use a (larger) buffer. The buffer is filled using the
- read_assuan(). */
-static char recv_line[MAX_LINELEN];
-/* Tell the status of the current line. */
-static LINETYPE recv_type;
-
-/* This is our variable storage. */
-static VARIABLE variable_list;
-
-
-static void
-die (const char *format, ...)
-{
- va_list arg_ptr;
-
- fflush (stdout);
- fprintf (stderr, "%s: ", invocation_name);
-
- va_start (arg_ptr, format);
- vfprintf (stderr, format, arg_ptr);
- va_end (arg_ptr);
- putc ('\n', stderr);
-
- exit (1);
-}
-
-static void
-err (const char *format, ...)
-{
- va_list arg_ptr;
-
- fflush (stdout);
- fprintf (stderr, "%s: ", invocation_name);
-
- va_start (arg_ptr, format);
- vfprintf (stderr, format, arg_ptr);
- va_end (arg_ptr);
- putc ('\n', stderr);
-}
-
-static void *
-xmalloc (size_t n)
-{
- void *p = malloc (n);
- if (!p)
- die ("out of core");
- return p;
-}
-
-static void *
-xcalloc (size_t n, size_t m)
-{
- void *p = calloc (n, m);
- if (!p)
- die ("out of core");
- return p;
-}
-
-static char *
-xstrdup (const char *s)
-{
- char *p = xmalloc (strlen (s)+1);
- strcpy (p, s);
- return p;
-}
-
-
-/* Write LENGTH bytes from BUFFER to FD. */
-static int
-writen (int fd, const char *buffer, size_t length)
-{
- while (length)
- {
- int nwritten = write (fd, buffer, length);
-
- if (nwritten < 0)
- {
- if (errno == EINTR)
- continue;
- return -1; /* write error */
- }
- length -= nwritten;
- buffer += nwritten;
- }
- return 0; /* okay */
-}
-
-
-
-
-/* Assuan specific stuff. */
-
-/* Read a line from FD, store it in the global recv_line, analyze the
- type and store that in recv_type. The function terminates on a
- communication error. Returns a pointer into the inputline to the
- first byte of the arguments. The parsing is very strict to match
- excalty what we want to send. */
-static char *
-read_assuan (int fd)
-{
- static char pending[MAX_LINELEN];
- static size_t pending_len;
- size_t nleft = sizeof recv_line;
- char *buf = recv_line;
- char *p;
-
- while (nleft > 0)
- {
- int n;
-
- if (pending_len)
- {
- if (pending_len >= nleft)
- die ("received line too large");
- memcpy (buf, pending, pending_len);
- n = pending_len;
- pending_len = 0;
- }
- else
- n = read (fd, buf, nleft);
- if (n < 0)
- {
- if (errno == EINTR)
- continue;
- die ("reading fd %d failed: %s", fd, strerror (errno));
- }
- else if (!n)
- die ("received incomplete line on fd %d", fd);
- p = buf;
- nleft -= n;
- buf += n;
-
- for (; n && *p != '\n'; n--, p++)
- ;
- if (n)
- {
- if (n>1)
- {
- n--;
- memcpy (pending, p + 1, n);
- pending_len = n;
- }
- *p = '\0';
- break;
- }
- }
- if (!nleft)
- die ("received line too large");
-
- p = recv_line;
- if (p[0] == 'O' && p[1] == 'K' && (p[2] == ' ' || !p[2]))
- {
- recv_type = LINE_OK;
- p += 3;
- }
- else if (p[0] == 'E' && p[1] == 'R' && p[2] == 'R'
- && (p[3] == ' ' || !p[3]))
- {
- recv_type = LINE_ERR;
- p += 4;
- }
- else if (p[0] == 'S' && (p[1] == ' ' || !p[1]))
- {
- recv_type = LINE_STAT;
- p += 2;
- }
- else if (p[0] == 'D' && p[1] == ' ')
- {
- recv_type = LINE_DATA;
- p += 2;
- }
- else if (p[0] == 'E' && p[1] == 'N' && p[2] == 'D' && !p[3])
- {
- recv_type = LINE_END;
- p += 3;
- }
- else
- die ("invalid line type (%.5s)", p);
-
- return p;
-}
-
-/* Write LINE to the server using FD. It is expected that the line
- contains the terminating linefeed as last character. */
-static void
-write_assuan (int fd, const char *line)
-{
- char buffer[1026];
- size_t n = strlen (line);
-
- if (n > 1024)
- die ("line too long for Assuan protocol");
- strcpy (buffer, line);
- if (!n || buffer[n-1] != '\n')
- buffer[n++] = '\n';
-
- if (writen (fd, buffer, n))
- die ("sending line to %d failed: %s", fd, strerror (errno));
-}
-
-
-/* Start the server with path PGMNAME and connect its stdout and
- strerr to a newly created pipes; the file descriptors are then
- store in the gloabl variables SERVER_SEND_FD and
- SERVER_RECV_FD. The initial handcheck is performed.*/
-static void
-start_server (const char *pgmname)
-{
- int rp[2];
- int wp[2];
- pid_t pid;
-
- if (pipe (rp) < 0)
- die ("pipe creation failed: %s", strerror (errno));
- if (pipe (wp) < 0)
- die ("pipe creation failed: %s", strerror (errno));
-
- fflush (stdout);
- fflush (stderr);
- pid = fork ();
- if (pid < 0)
- die ("fork failed");
-
- if (!pid)
- {
- const char *arg0;
-
- arg0 = strrchr (pgmname, '/');
- if (arg0)
- arg0++;
- else
- arg0 = pgmname;
-
- if (wp[0] != STDIN_FILENO)
- {
- if (dup2 (wp[0], STDIN_FILENO) == -1)
- die ("dup2 failed in child: %s", strerror (errno));
- close (wp[0]);
- }
- if (rp[1] != STDOUT_FILENO)
- {
- if (dup2 (rp[1], STDOUT_FILENO) == -1)
- die ("dup2 failed in child: %s", strerror (errno));
- close (rp[1]);
- }
- if (!opt_verbose)
- {
- int fd = open ("/dev/null", O_WRONLY);
- if (fd == -1)
- die ("can't open `/dev/null': %s", strerror (errno));
- if (dup2 (fd, STDERR_FILENO) == -1)
- die ("dup2 failed in child: %s", strerror (errno));
- close (fd);
- }
-
- close (wp[1]);
- close (rp[0]);
- execl (pgmname, arg0, "--server", NULL);
- die ("exec failed for `%s': %s", pgmname, strerror (errno));
- }
- close (wp[0]);
- close (rp[1]);
- server_send_fd = wp[1];
- server_recv_fd = rp[0];
-
- read_assuan (server_recv_fd);
- if (recv_type != LINE_OK)
- die ("no greating message");
-}
-
-
-
-
-
-/* Script intepreter. */
-
-static void
-unset_var (const char *name)
-{
- VARIABLE var;
-
- for (var=variable_list; var && strcmp (var->name, name); var = var->next)
- ;
- if (!var)
- return;
-/* fprintf (stderr, "unsetting `%s'\n", name); */
-
- if (var->type == VARTYPE_FD && var->value)
- {
- int fd;
-
- fd = atoi (var->value);
- if (fd != -1 && fd != 0 && fd != 1 && fd != 2)
- close (fd);
- }
-
- free (var->value);
- var->value = NULL;
- var->type = 0;
- var->count = 0;
-}
-
-
-static void
-set_type_var (const char *name, const char *value, VARTYPE type)
-{
- VARIABLE var;
-
- if (!name)
- name = "?";
- for (var=variable_list; var && strcmp (var->name, name); var = var->next)
- ;
- if (!var)
- {
- var = xcalloc (1, sizeof *var + strlen (name));
- strcpy (var->name, name);
- var->next = variable_list;
- variable_list = var;
- }
- else
- free (var->value);
-
- if (var->type == VARTYPE_FD && var->value)
- {
- int fd;
-
- fd = atoi (var->value);
- if (fd != -1 && fd != 0 && fd != 1 && fd != 2)
- close (fd);
- }
-
- var->type = type;
- var->count = 0;
- if (var->type == VARTYPE_COUNTER)
- {
- /* We need some extra sapce as scratch area for get_var. */
- var->value = xmalloc (strlen (value) + 1 + 20);
- strcpy (var->value, value);
- }
- else
- var->value = xstrdup (value);
-}
-
-static void
-set_var (const char *name, const char *value)
-{
- set_type_var (name, value, 0);
-}
-
-
-static const char *
-get_var (const char *name)
-{
- VARIABLE var;
-
- for (var=variable_list; var && strcmp (var->name, name); var = var->next)
- ;
- if (!var)
- return NULL;
- if (var->type == VARTYPE_COUNTER && var->value)
- { /* Use the scratch space allocated by set_var. */
- char *p = var->value + strlen(var->value)+1;
- sprintf (p, "%u", var->count);
- return p;
- }
- else
- return var->value;
-}
-
-
-/* Incremente all counter type variables with NAME in their VALUE. */
-static void
-inc_counter (const char *name)
-{
- VARIABLE var;
-
- if (!*name)
- return;
- for (var=variable_list; var; var = var->next)
- {
- if (var->type == VARTYPE_COUNTER
- && var->value && !strcmp (var->value, name))
- var->count++;
- }
-}
-
-
-/* Expand variables in LINE and return a new allocated buffer if
- required. The function might modify LINE if the expanded version
- fits into it. */
-static char *
-expand_line (char *buffer)
-{
- char *line = buffer;
- char *p, *pend;
- const char *value;
- size_t valuelen, n;
- char *result = NULL;
-
- while (*line)
- {
- p = strchr (line, '$');
- if (!p)
- return result; /* nothing more to expand */
-
- if (p[1] == '$') /* quoted */
- {
- memmove (p, p+1, strlen (p+1)+1);
- line = p + 1;
- continue;
- }
- for (pend=p+1; *pend && !spacep (pend)
- && *pend != '$' && *pend != '/'; pend++)
- ;
- if (*pend)
- {
- int save = *pend;
- *pend = 0;
- value = get_var (p+1);
- *pend = save;
- }
- else
- value = get_var (p+1);
- if (!value)
- value = "";
- valuelen = strlen (value);
- if (valuelen <= pend - p)
- {
- memcpy (p, value, valuelen);
- p += valuelen;
- n = pend - p;
- if (n)
- memmove (p, p+n, strlen (p+n)+1);
- line = p;
- }
- else
- {
- char *src = result? result : buffer;
- char *dst;
-
- dst = xmalloc (strlen (src) + valuelen + 1);
- n = p - src;
- memcpy (dst, src, n);
- memcpy (dst + n, value, valuelen);
- n += valuelen;
- strcpy (dst + n, pend);
- line = dst + n;
- free (result);
- result = dst;
- }
- }
- return result;
-}
-
-
-/* Evaluate COND and return the result. */
-static int
-eval_boolean (const char *cond)
-{
- int true = 1;
-
- for ( ; *cond == '!'; cond++)
- true = !true;
- if (!*cond || (*cond == '0' && !cond[1]))
- return !true;
- return true;
-}
-
-
-
-
-
-static void
-cmd_let (const char *assign_to, char *arg)
-{
- set_var (assign_to, arg);
-}
-
-
-static void
-cmd_echo (const char *assign_to, char *arg)
-{
- if (!opt_no_echo)
- printf ("%s\n", arg);
-}
-
-static void
-cmd_send (const char *assign_to, char *arg)
-{
- if (opt_verbose)
- fprintf (stderr, "sending `%s'\n", arg);
- write_assuan (server_send_fd, arg);
-}
-
-static void
-handle_status_line (char *arg)
-{
- char *p;
-
- for (p=arg; *p && !spacep (p); p++)
- ;
- if (*p)
- {
- int save = *p;
- *p = 0;
- inc_counter (arg);
- *p = save;
- }
- else
- inc_counter (arg);
-}
-
-static void
-cmd_expect_ok (const char *assign_to, char *arg)
-{
- if (opt_verbose)
- fprintf (stderr, "expecting OK\n");
- do
- {
- char *p = read_assuan (server_recv_fd);
- if (opt_verbose > 1)
- fprintf (stderr, "got line `%s'\n", recv_line);
- if (recv_type == LINE_STAT)
- handle_status_line (p);
- }
- while (recv_type != LINE_OK && recv_type != LINE_ERR);
- if (recv_type != LINE_OK)
- die ("expected OK but got `%s'", recv_line);
-}
-
-static void
-cmd_expect_err (const char *assign_to, char *arg)
-{
- if (opt_verbose)
- fprintf (stderr, "expecting ERR\n");
- do
- {
- char *p = read_assuan (server_recv_fd);
- if (opt_verbose > 1)
- fprintf (stderr, "got line `%s'\n", recv_line);
- if (recv_type == LINE_STAT)
- handle_status_line (p);
- }
- while (recv_type != LINE_OK && recv_type != LINE_ERR);
- if (recv_type != LINE_ERR)
- die ("expected ERR but got `%s'", recv_line);
-}
-
-static void
-cmd_count_status (const char *assign_to, char *arg)
-{
- char *p;
-
- if (!*assign_to || !*arg)
- die ("syntax error: count-status requires an argument and a variable");
-
- for (p=arg; *p && !spacep (p); p++)
- ;
- if (*p)
- {
- for (*p++ = 0; spacep (p); p++)
- ;
- if (*p)
- die ("cmpfiles: syntax error");
- }
- set_type_var (assign_to, arg, VARTYPE_COUNTER);
-}
-
-static void
-cmd_openfile (const char *assign_to, char *arg)
-{
- int fd;
- char numbuf[20];
-
- do
- fd = open (arg, O_RDONLY);
- while (fd == -1 && errno == EINTR);
- if (fd == -1)
- die ("error opening `%s': %s", arg, strerror (errno));
-
- sprintf (numbuf, "%d", fd);
- set_type_var (assign_to, numbuf, VARTYPE_FD);
-}
-
-static void
-cmd_createfile (const char *assign_to, char *arg)
-{
- int fd;
- char numbuf[20];
-
- do
- fd = open (arg, O_WRONLY|O_CREAT|O_TRUNC, 0666);
- while (fd == -1 && errno == EINTR);
- if (fd == -1)
- die ("error creating `%s': %s", arg, strerror (errno));
-
- sprintf (numbuf, "%d", fd);
- set_type_var (assign_to, numbuf, VARTYPE_FD);
-}
-
-
-static void
-cmd_pipeserver (const char *assign_to, char *arg)
-{
- if (!*arg)
- die ("syntax error: servername missing");
-
- start_server (arg);
-}
-
-
-static void
-cmd_quit_if(const char *assign_to, char *arg)
-{
- if (eval_boolean (arg))
- exit (0);
-}
-
-static void
-cmd_fail_if(const char *assign_to, char *arg)
-{
- if (eval_boolean (arg))
- exit (1);
-}
-
-
-static void
-cmd_cmpfiles (const char *assign_to, char *arg)
-{
- char *p = arg;
- char *second;
- FILE *fp1, *fp2;
- char buffer1[2048]; /* note: both must be of equal size. */
- char buffer2[2048];
- size_t nread1, nread2;
- int rc = 0;
-
- set_var (assign_to, "0");
- for (p=arg; *p && !spacep (p); p++)
- ;
- if (!*p)
- die ("cmpfiles: syntax error");
- for (*p++ = 0; spacep (p); p++)
- ;
- second = p;
- for (; *p && !spacep (p); p++)
- ;
- if (*p)
- {
- for (*p++ = 0; spacep (p); p++)
- ;
- if (*p)
- die ("cmpfiles: syntax error");
- }
-
- fp1 = fopen (arg, "rb");
- if (!fp1)
- {
- err ("can't open `%s': %s", arg, strerror (errno));
- return;
- }
- fp2 = fopen (second, "rb");
- if (!fp2)
- {
- err ("can't open `%s': %s", second, strerror (errno));
- fclose (fp1);
- return;
- }
- while ( (nread1 = fread (buffer1, 1, sizeof buffer1, fp1)))
- {
- if (ferror (fp1))
- break;
- nread2 = fread (buffer2, 1, sizeof buffer2, fp2);
- if (ferror (fp2))
- break;
- if (nread1 != nread2 || memcmp (buffer1, buffer2, nread1))
- {
- rc = 1;
- break;
- }
- }
- if (feof (fp1) && feof (fp2) && !rc)
- {
- if (opt_verbose)
- err ("files match");
- set_var (assign_to, "1");
- }
- else if (!rc)
- err ("cmpfiles: read error: %s", strerror (errno));
- else
- err ("cmpfiles: mismatch");
- fclose (fp1);
- fclose (fp2);
-}
-
-static void
-cmd_getenv (const char *assign_to, char *arg)
-{
- const char *s;
- s = *arg? getenv (arg):"";
- set_var (assign_to, s? s:"");
-}
-
-
-
-
-/* Process the current script line LINE. */
-static int
-interpreter (char *line)
-{
- static struct {
- const char *name;
- void (*fnc)(const char*, char*);
- } cmdtbl[] = {
- { "let" , cmd_let },
- { "echo" , cmd_echo },
- { "send" , cmd_send },
- { "expect-ok" , cmd_expect_ok },
- { "expect-err", cmd_expect_err },
- { "count-status", cmd_count_status },
- { "openfile" , cmd_openfile },
- { "createfile", cmd_createfile },
- { "pipeserver", cmd_pipeserver },
- { "quit" , NULL },
- { "quit-if" , cmd_quit_if },
- { "fail-if" , cmd_fail_if },
- { "cmpfiles" , cmd_cmpfiles },
- { "getenv" , cmd_getenv },
- { NULL }
- };
- char *p, *save_p;
- int i, save_c;
- char *stmt = NULL;
- char *assign_to = NULL;
- char *must_free = NULL;
-
- for ( ;spacep (line); line++)
- ;
- if (!*line || *line == '#')
- return 0; /* empty or comment */
- p = expand_line (line);
- if (p)
- {
- must_free = p;
- line = p;
- for ( ;spacep (line); line++)
- ;
- if (!*line || *line == '#')
- {
- free (must_free);
- return 0; /* empty or comment */
- }
- }
- for (p=line; *p && !spacep (p) && *p != '='; p++)
- ;
- if (*p == '=')
- {
- *p = 0;
- assign_to = line;
- }
- else if (*p)
- {
- for (*p++ = 0; spacep (p); p++)
- ;
- if (*p == '=')
- assign_to = line;
- }
- if (!*line)
- die ("syntax error");
- stmt = line;
- save_c = 0;
- save_p = NULL;
- if (assign_to)
- { /* this is an assignment */
- for (p++; spacep (p); p++)
- ;
- if (!*p)
- {
- unset_var (assign_to);
- free (must_free);
- return 0;
- }
- stmt = p;
- for (; *p && !spacep (p); p++)
- ;
- if (*p)
- {
- save_p = p;
- save_c = *p;
- for (*p++ = 0; spacep (p); p++)
- ;
- }
- }
- for (i=0; cmdtbl[i].name && strcmp (stmt, cmdtbl[i].name); i++)
- ;
- if (!cmdtbl[i].name)
- {
- if (!assign_to)
- die ("invalid statement `%s'\n", stmt);
- if (save_p)
- *save_p = save_c;
- set_var (assign_to, stmt);
- free (must_free);
- return 0;
- }
-
- if (cmdtbl[i].fnc)
- cmdtbl[i].fnc (assign_to, p);
- free (must_free);
- return cmdtbl[i].fnc? 0:1;
-}
-
-
-
-int
-main (int argc, char **argv)
-{
- char buffer[2048];
- char *p, *pend;
-
- if (!argc)
- invocation_name = "asschk";
- else
- {
- invocation_name = *argv++;
- argc--;
- p = strrchr (invocation_name, '/');
- if (p)
- invocation_name = p+1;
- }
-
-
- set_var ("?","1"); /* defaults to true */
-
- for (; argc; argc--, argv++)
- {
- p = *argv;
- if (*p != '-')
- break;
- if (!strcmp (p, "--verbose"))
- opt_verbose++;
- else if (!strcmp (p, "--no-echo"))
- opt_no_echo++;
- else if (*p == '-' && p[1] == 'D')
- {
- p += 2;
- pend = strchr (p, '=');
- if (pend)
- {
- int tmp = *pend;
- *pend = 0;
- set_var (p, pend+1);
- *pend = tmp;
- }
- else
- set_var (p, "1");
- }
- else if (*p == '-' && p[1] == '-' && !p[2])
- {
- argc--; argv++;
- break;
- }
- else
- break;
- }
- if (argc)
- die ("usage: asschk [--verbose] {-D<name>[=<value>]}");
-
-
- while (fgets (buffer, sizeof buffer, stdin))
- {
- p = strchr (buffer,'\n');
- if (!p)
- die ("incomplete script line");
- *p = 0;
- if (interpreter (buffer))
- break;
- fflush (stdout);
- }
- return 0;
-}
-
diff --git a/tests/inittests b/tests/inittests
deleted file mode 100755
index b1860f5fd..000000000
--- a/tests/inittests
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2002 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This file is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-set -e
-
-sample_certs='
-cert_g10code_test1.pem
-cert_g10code_pete1.pem
-cert_g10code_theo1.pem
-'
-
-private_keys='
-32100C27173EF6E9C4E9A25D3D69F86D37A4F939
-'
-
-clean_files='
-gpgsm.conf gpg-agent.conf trustlist.txt pubring.kbx
-msg msg.sig msg.unsig
-'
-
-
-[ -z "$srcdir" ] && srcdir=.
-[ -z "$GPGSM" ] && GPGSM=../sm/gpgsm
-
-if [ -d $srcdir/samplekeys ] \
- && grep TESTS_ENVIRONMENT Makefile >/dev/null 2>&1; then
- :
-else
- # During make distclean the Makefile has already been removed,
- # so we need this extra test.
- if ! grep gnupg-test-directory testdir.stamp >/dev/null 2>&1; then
- echo "inittests: please cd to the tests directory first" >&2
- exit 1
- fi
-fi
-
-if [ "$1" = "--clean" ]; then
- if [ -d private-keys-v1.d ]; then
- rm private-keys-v1.d/* 2>/dev/null || true
- rmdir private-keys-v1.d
- fi
- rm ${clean_files} testdir.stamp 2>/dev/null || true
- exit 0
-fi
-
-if [ "$GNUPGHOME" != "`pwd`" ]; then
- echo "inittests: please set GNUPGHOME to the test directory" >&2
- exit 1
-fi
-
-if [ -n "$GPG_AGENT_INFO" ]; then
- echo "inittests: please unset GPG_AGENT_INFO" >&2
- exit 1
-fi
-
-# A stamp file used with --clean
-echo gnupg-test-directory > testdir.stamp
-
-
-# Create the private key directy if it does not exists and copy
-# the sample keys.
-[ -d private-keys-v1.d ] || mkdir private-keys-v1.d
-for i in ${private_keys}; do
- cat ${srcdir}/samplekeys/$i.key >private-keys-v1.d/$i.key
-done
-
-# Create the configuration scripts
-cat > gpgsm.conf <<EOF
-no-secmem-warning
-disable-crl-checks
-agent-program ../agent/gpg-agent
-EOF
-
-cat > gpg-agent.conf <<EOF
-no-grab
-pinentry-program /home/wk/work/pinentry/gtk/pinentry-gtk
-EOF
-
-cat > trustlist.txt <<EOF
-# CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=Düsseldorf,C=DE
-3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E S
-EOF
-
-# Make sure that the sample certs are available but ignore errors here
-# because we are not a test script.
-for i in ${sample_certs}; do
- $GPGSM --import ${srcdir}/samplekeys/$i || true
-done
diff --git a/tools/ChangeLog b/tools/ChangeLog
deleted file mode 100644
index 5260c5605..000000000
--- a/tools/ChangeLog
+++ /dev/null
@@ -1,102 +0,0 @@
-2002-09-25 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: Link bftest with EGDLIBS (i.e. NETLIBS) as EGD uses
- sockets.
-
-2002-05-07 Stefan Bellon <sbellon@sbellon.de>
-
- * gpgsplit.c (create_filename): Use EXTSEP_S instead of ".".
-
-2002-04-23 David Shaw <dshaw@jabberwocky.com>
-
- * Makefile.am: Do not list libraries in -lxxx format in a
- dependency line.
-
-2002-01-02 Stefan Bellon <sbellon@sbellon.de>
-
- * gpgsplit.c [__riscos__]: Added RISC OS specific file name
- code.
-
- * gpgsplit.c (write_part): Introduced two explicit casts.
-
-2001-12-21 David Shaw <dshaw@jabberwocky.com>
-
- * gpgsplit.c (pkttype_to_string): PKT_PHOTO_ID -> PKT_ATTRIBUTE
-
-2001-10-23 Werner Koch <wk@gnupg.org>
-
- * Makefile.am (gpgsplit_LDADD): Add ZLIBS.
-
-2001-09-18 Werner Koch <wk@gnupg.org>
-
- * gpgsplit.c: New option --uncompress.
- (write_part): Handle old style uncompressing.
-
-2001-06-20 Werner Koch <wk@gnupg.org>
-
- * gpgsplit.c: New.
- * Makefile.am (bin_PROGRAMS): Install gpgsplit.
-
-2001-03-27 Werner Koch <wk@gnupg.org>
-
- * mail-signed-keys: Add option --dry-run.
-
-2001-03-21 Werner Koch <wk@gnupg.org>
-
- * shmtest.c: Add sys/types.h
-
-Fri Sep 15 18:40:36 CEST 2000 Werner Koch <wk@openit.de>
-
- * ring-a-party: An array start at offset 1 no 0. Many thanks to Mike
- for finding this bug.
-
-Thu Sep 14 14:20:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * ring-a-party: Flush the last key.
-
-Wed Jul 5 13:28:45 CEST 2000 Werner Koch <wk@>
-
- * mail-signed-keys: New.
-
-Tue May 23 09:19:00 CEST 2000 Werner Koch <wk@openit.de>
-
- * ring-a-party: New.
-
-Thu Jul 8 16:21:27 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * lspgpot: New
-
-Wed Jul 7 13:08:40 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Support for libtool.
-
-Tue Jun 8 13:36:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpicalc.c (main): hex digits may now be lowercase
- (do_mulm): new.
-
-Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * mpicalc.c (main): Moved initialization out of definition.
-
-Mon May 18 15:39:22 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * mk-tdata.c: New.
-
-Tue Apr 7 19:50:41 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * bftest.c: Now supports all availabe ciphers.
-
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/tools/Makefile.am b/tools/Makefile.am
deleted file mode 100644
index 2d5e681eb..000000000
--- a/tools/Makefile.am
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = lspgpot ring-a-party mail-signed-keys
-INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl
-needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a
-
-bin_PROGRAMS = gpgsplit
-noinst_PROGRAMS = mpicalc bftest clean-sat mk-tdata shmtest
-
-mpicalc_SOURCES = mpicalc.c
-
-bftest_SOURCES = bftest.c
-
-clean_sat_SOURCES = clean-sat.c
-mk_tdata_SOURCES = mk-tdata.c
-shmtest_SOURCES = shmtest.c
-
-gpgsplit_SOURCES = gpgsplit.c
-
-
-mpicalc_LDADD = $(needed_libs) @INTLLIBS@
-bftest_LDADD = $(needed_libs) @EGDLIBS@ @INTLLIBS@
-
-shmtest_LDADD = $(needed_libs) @INTLLIBS@
-gpgsplit_LDADD = @ZLIBS@ $(needed_libs) @INTLLIBS@
-
-mpicalc bftest shmtest gpgsplit: $(needed_libs)
diff --git a/tools/bftest.c b/tools/bftest.c
deleted file mode 100644
index b15f4a1da..000000000
--- a/tools/bftest.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* bftest.c - Blowfish test program
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef HAVE_DOSISH_SYSTEM
- #include <io.h>
- #include <fcntl.h>
-#endif
-
-#include "util.h"
-#include "cipher.h"
-#include "i18n.h"
-
-static void
-my_usage(void)
-{
- fprintf(stderr, "usage: bftest [-e][-d] algo key\n");
- exit(1);
-}
-
-const char *
-strusage( int level )
-{
- return default_strusage(level);
-}
-
-static void
-i18n_init(void)
-{
- #ifdef ENABLE_NLS
- #ifdef HAVE_LC_MESSAGES
- setlocale( LC_MESSAGES, "" );
- #else
- setlocale( LC_ALL, "" );
- #endif
- bindtextdomain( PACKAGE, G10_LOCALEDIR );
- textdomain( PACKAGE );
- #endif
-}
-
-int
-main(int argc, char **argv)
-{
- int encode=0;
- CIPHER_HANDLE hd;
- char buf[4096];
- int n, size=4096;
- int algo;
-
- #ifdef HAVE_DOSISH_SYSTEM
- setmode( fileno(stdin), O_BINARY );
- setmode( fileno(stdout), O_BINARY );
- #endif
-
- i18n_init();
- if( argc > 1 && !strcmp(argv[1], "-e") ) {
- encode++;
- argc--; argv++;
- }
- else if( argc > 1 && !strcmp(argv[1], "-E") ) {
- encode++;
- argc--; argv++;
- size = 10;
- }
- else if( argc > 1 && !strcmp(argv[1], "-d") ) {
- argc--; argv++;
- }
- else if( argc > 1 && !strcmp(argv[1], "-D") ) {
- argc--; argv++;
- size = 10;
- }
- if( argc != 3 )
- my_usage();
- argc--; argv++;
- algo = string_to_cipher_algo( *argv );
- argc--; argv++;
-
- hd = cipher_open( algo, CIPHER_MODE_CFB, 0 );
- cipher_setkey( hd, *argv, strlen(*argv) );
- cipher_setiv( hd, NULL, 0 );
- while( (n = fread( buf, 1, size, stdin )) > 0 ) {
- if( encode )
- cipher_encrypt( hd, buf, buf, n );
- else
- cipher_decrypt( hd, buf, buf, n );
- if( fwrite( buf, 1, n, stdout) != n )
- log_fatal("write error\n");
- }
- cipher_close(hd);
- return 0;
-}
-
diff --git a/tools/clean-sat.c b/tools/clean-sat.c
deleted file mode 100644
index 8b6bfd77a..000000000
--- a/tools/clean-sat.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* clean-sat.c
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is free software; as a special exception the author gives
- * unlimited permission to copy and/or distribute it, with or without
- * modifications, as long as this notice is preserved.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <stdio.h>
-
-int
-main(int argc, char **argv)
-{
- int c;
-
- if( argc > 1 ) {
- fprintf(stderr, "no arguments, please\n");
- return 1;
- }
-
- while( (c=getchar()) == '\n' )
- ;
- while( c != EOF ) {
- putchar(c);
- c = getchar();
- }
-
- return 0;
-}
-
diff --git a/tools/crlf.c b/tools/crlf.c
deleted file mode 100644
index e6ac8c70f..000000000
--- a/tools/crlf.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* crlf.c
- * Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is free software; as a special exception the author gives
- * unlimited permission to copy and/or distribute it, with or without
- * modifications, as long as this notice is preserved.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <stdio.h>
-
-int
-main(int argc, char **argv)
-{
- int c, lc;
- int off=0;
-
- if( argc > 1 ) {
- fprintf(stderr, "no arguments, please\n");
- return 1;
- }
-
- lc = -1;
- while( (c=getchar()) != EOF ) {
- #if 0
- if( c == '\r' && lc == ' ' )
- fprintf(stderr,"SP,CR at %d\n", off );
- if( c == '\n' && lc == ' ' )
- fprintf(stderr,"SP,LF at %d\n", off );
- #endif
- if( c == '\n' && lc == '\r' )
- putchar(c);
- else if( c == '\n' ) {
- putchar('\r');
- putchar(c);
- }
- else if( c != '\n' && lc == '\r' ) {
- putchar('\n');
- putchar(c);
- }
- else
- putchar(c);
-
- lc = c;
- off++;
- }
-
- return 0;
-}
-
diff --git a/tools/gpgsplit.c b/tools/gpgsplit.c
deleted file mode 100644
index 8d89b1b9d..000000000
--- a/tools/gpgsplit.c
+++ /dev/null
@@ -1,553 +0,0 @@
-/* gpgsplit.c - An OpenPGP packet splitting tool
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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
- */
-
-/*
- * TODO: Add an option to uncompress packets. This should come quite handy.
- */
-
-#include <config.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <assert.h>
-#ifdef HAVE_DOSISH_SYSTEM
- #include <fcntl.h> /* for setmode() */
-#endif
-#include <zlib.h>
-#ifdef __riscos__
-#include <unixlib/local.h>
-#endif /* __riscos__ */
-
-#define INCLUDED_BY_MAIN_MODULE 1
-#include "../g10/packet.h"
-#include "util.h"
-
-static int opt_verbose;
-static const char *opt_prefix = "";
-static int opt_uncompress;
-
-static void g10_exit( int rc );
-static void split_packets (const char *fname);
-
-
-enum cmd_and_opt_values { aNull = 0,
- oVerbose = 'v',
- oPrefix = 'p',
- oUncompress = 500,
-aTest };
-
-
-static ARGPARSE_OPTS opts[] = {
-
- { 301, NULL, 0, "@Options:\n " },
-
- { oVerbose, "verbose", 0, "verbose" },
- { oPrefix, "prefix", 2, "|STRING|Prepend filenames with STRING" },
- { oUncompress, "uncompress", 0, "uncompress a packet"},
-{0} };
-
-
-const char *
-strusage( int level )
-{
- const char *p;
- switch( level ) {
- case 11: p = "gpgsplit (GnuPG)";
- break;
- case 13: p = VERSION; break;
- case 17: p = PRINTABLE_OS_NAME; break;
- case 19: p =
- "Please report bugs to <bug-gnupg@gnu.org>.\n";
- break;
- case 1:
- case 40: p =
- "Usage: gpgsplit [options] [files] (-h for help)";
- break;
- case 41: p =
- "Syntax: gpgsplit [options] [files]\n"
- "Split an OpenPGP message into packets\n";
- break;
-
- default: p = default_strusage(level);
- }
- return p;
-}
-
-
-
-int
-main( int argc, char **argv )
-{
- ARGPARSE_ARGS pargs;
-
- #ifdef __riscos__
- /* set global RISC OS specific properties */
- __riscosify_control = __RISCOSIFY_NO_PROCESS;
- #endif /* __riscos__ */
- #ifdef HAVE_DOSISH_SYSTEM
- setmode( fileno(stdin), O_BINARY );
- setmode( fileno(stdout), O_BINARY );
- #endif
- log_set_name("gpgsplit");
-
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags= 1; /* do not remove the args */
- while( optfile_parse( NULL, NULL, NULL, &pargs, opts) ) {
- switch( pargs.r_opt ) {
- case oVerbose: opt_verbose = 1; break;
- case oPrefix: opt_prefix = pargs.r.ret_str; break;
- case oUncompress: opt_uncompress = 1; break;
- default : pargs.err = 2; break;
- }
- }
-
- if( log_get_errorcount(0) )
- g10_exit(2);
-
- if (!argc)
- split_packets (NULL);
- else {
- for ( ;argc; argc--, argv++)
- split_packets (*argv);
- }
-
- g10_exit (0);
- return 0;
-}
-
-
-static void
-g10_exit( int rc )
-{
- rc = rc? rc : log_get_errorcount(0)? 2 : 0;
- exit(rc );
-}
-
-static const char *
-pkttype_to_string (int pkttype)
-{
- const char *s;
- switch (pkttype) {
- case PKT_PUBKEY_ENC : s = "pk_enc"; break;
- case PKT_SIGNATURE : s = "sig"; break;
- case PKT_SYMKEY_ENC : s = "sym_enc"; break;
- case PKT_ONEPASS_SIG : s = "onepass_sig"; break;
- case PKT_SECRET_KEY : s = "secret_key"; break;
- case PKT_PUBLIC_KEY : s = "public_key"; break;
- case PKT_SECRET_SUBKEY : s = "secret_subkey"; break;
- case PKT_COMPRESSED :
- s = opt_uncompress? "uncompressed":"compressed";
- break;
- case PKT_ENCRYPTED : s = "encrypted"; break;
- case PKT_MARKER : s = "marker"; break;
- case PKT_PLAINTEXT : s = "plaintext"; break;
- case PKT_RING_TRUST : s = "ring_trust"; break;
- case PKT_USER_ID : s = "user_id"; break;
- case PKT_PUBLIC_SUBKEY : s = "public_subkey"; break;
- case PKT_OLD_COMMENT : s = "old_comment"; break;
- case PKT_ATTRIBUTE : s = "attribute"; break;
- case PKT_ENCRYPTED_MDC : s = "encrypted_mdc"; break;
- case PKT_MDC : s = "mdc"; break;
- case PKT_COMMENT : s = "comment"; break;
- case PKT_GPG_CONTROL : s = "gpg_control"; break;
- default: s = "unknown"; break;
- }
- return s;
-}
-
-
-/*
- * Create a new filename and a return a pointer to a statically
- * allocated buffer
- */
-static char *
-create_filename (int pkttype)
-{
- static unsigned int partno = 0;
- static char *name;
-
- if (!name)
- name = m_alloc (strlen (opt_prefix) + 100 );
-
- assert (pkttype < 1000 && pkttype >= 0 );
- partno++;
- sprintf (name, "%s%06u-%03d" EXTSEP_S "%.40s",
- opt_prefix, partno, pkttype, pkttype_to_string (pkttype));
- return name;
-}
-
-static int
-read_u16 (FILE *fp, size_t *rn)
-{
- int c;
-
- if ( (c = getc (fp)) == EOF )
- return -1;
- *rn = c << 8;
- if ( (c = getc (fp)) == EOF )
- return -1;
- *rn |= c;
- return 0;
-}
-
-static int
-read_u32 (FILE *fp, unsigned long *rn)
-{
- size_t tmp;
-
- if (read_u16 (fp, &tmp))
- return -1;
- *rn = tmp << 16;
- if (read_u16 (fp, &tmp))
- return -1;
- *rn |= tmp;
- return 0;
-}
-
-
-/* hdr must pint to a buffer large enough to hold all header bytes */
-static int
-write_part ( const char *fname, FILE *fpin, unsigned long pktlen,
- int pkttype, int partial, unsigned char *hdr, size_t hdrlen)
-{
- FILE *fpout;
- int c, first;
- unsigned char *p;
- const char *outname = create_filename (pkttype);
-
- /* fixme: should we check that this file does not yet exist? */
- if (opt_verbose)
- log_info ("writing `%s'\n", outname);
- fpout = fopen (outname, "wb");
- if (!fpout) {
- log_error ("error creating `%s': %s\n", outname, strerror(errno));
- /* stop right now, otherwise we would mess up the sequence of
- * the part numbers */
- g10_exit (1);
- }
-
- if (!opt_uncompress) {
- for (p=hdr; hdrlen; p++, hdrlen--) {
- if ( putc (*p, fpout) == EOF )
- goto write_error;
- }
- }
-
- first = 1;
- while (partial) {
- size_t partlen;
-
- if (partial == 1) { /* openpgp */
- if( first ) {
- c = pktlen;
- assert( c >= 224 && c < 255 );
- first = 0;
- }
- else if( (c = getc (fpin)) == EOF ) {
- goto read_error;
- }
- else
- hdr[hdrlen++] = c;
-
- if( c < 192 ) {
- pktlen = c;
- partial = 0; /* (last segment may follow) */
- }
- else if( c < 224 ) {
- pktlen = (c - 192) * 256;
- if( (c = getc (fpin)) == EOF )
- goto read_error;
- hdr[hdrlen++] = c;
- pktlen += c + 192;
- partial = 0;
- }
- else if( c == 255 ) {
- if (read_u32 (fpin, &pktlen))
- goto read_error;
- hdr[hdrlen++] = pktlen >> 24;
- hdr[hdrlen++] = pktlen >> 16;
- hdr[hdrlen++] = pktlen >> 8;
- hdr[hdrlen++] = pktlen;
- partial = 0;
- }
- else { /* next partial body length */
- for (p=hdr; hdrlen; p++, hdrlen--) {
- if ( putc (*p, fpout) == EOF )
- goto write_error;
- }
- partlen = 1 << (c & 0x1f);
- for (; partlen; partlen--) {
- if ((c = getc (fpin)) == EOF)
- goto read_error;
- if ( putc (c, fpout) == EOF )
- goto write_error;
- }
- }
- }
- else if (partial == 2) { /* old gnupg */
- assert (!pktlen);
- if ( read_u16 (fpin, &partlen) )
- goto read_error;
- hdr[hdrlen++] = partlen >> 8;
- hdr[hdrlen++] = partlen;
- for (p=hdr; hdrlen; p++, hdrlen--) {
- if ( putc (*p, fpout) == EOF )
- goto write_error;
- }
- if (!partlen)
- partial = 0; /* end of packet */
- for (; partlen; partlen--) {
- c = getc (fpin);
- if (c == EOF)
- goto read_error;
- if ( putc (c, fpout) == EOF )
- goto write_error;
- }
- }
- else { /* compressed: read to end */
- pktlen = 0;
- partial = 0;
- hdrlen = 0;
- if (opt_uncompress) {
- z_stream zs;
- byte *inbuf, *outbuf;
- unsigned int inbufsize, outbufsize;
- int algo, zinit_done, zrc, nread, count;
- size_t n;
-
- if ((c = getc (fpin)) == EOF)
- goto read_error;
- algo = c;
-
- memset (&zs, 0, sizeof zs);
- inbufsize = 2048;
- inbuf = m_alloc (inbufsize);
- outbufsize = 8192;
- outbuf = m_alloc (outbufsize);
- zs.avail_in = 0;
- zinit_done = 0;
-
- do {
- if (zs.avail_in < inbufsize) {
- n = zs.avail_in;
- if (!n)
- zs.next_in = (Bytef *) inbuf;
- count = inbufsize - n;
- for (nread=0;
- nread < count && (c=getc (fpin)) != EOF;
- nread++) {
- inbuf[n+nread] = c;
- }
- n += nread;
- if (nread < count && algo == 1) {
- inbuf[n] = 0xFF; /* chew dummy byte */
- n++;
- }
- zs.avail_in = n;
- }
- zs.next_out = (Bytef *) outbuf;
- zs.avail_out = outbufsize;
-
- if (!zinit_done) {
- zrc = algo == 1? inflateInit2 ( &zs, -13)
- : inflateInit ( &zs );
- if (zrc != Z_OK) {
- log_fatal ("zlib problem: %s\n", zs.msg? zs.msg :
- zrc == Z_MEM_ERROR ? "out of core" :
- zrc == Z_VERSION_ERROR ?
- "invalid lib version" :
- "unknown error" );
- }
- zinit_done = 1;
- }
- else {
-#ifdef Z_SYNC_FLUSH
- zrc = inflate (&zs, Z_SYNC_FLUSH);
-#else
- zrc = inflate (&zs, Z_PARTIAL_FLUSH);
-#endif
- if (zrc == Z_STREAM_END)
- ; /* eof */
- else if (zrc != Z_OK && zrc != Z_BUF_ERROR) {
- if (zs.msg)
- log_fatal ("zlib inflate problem: %s\n", zs.msg );
- else
- log_fatal ("zlib inflate problem: rc=%d\n", zrc );
- }
- for (n=0; n < outbufsize - zs.avail_out; n++) {
- if (putc (outbuf[n], fpout) == EOF )
- goto write_error;
- }
- }
- } while (zrc != Z_STREAM_END && zrc != Z_BUF_ERROR);
- inflateEnd (&zs);
- }
- else {
- while ( (c=getc (fpin)) != EOF ) {
- if ( putc (c, fpout) == EOF )
- goto write_error;
- }
- }
- if (!feof (fpin))
- goto read_error;
- }
-
- }
-
- for (p=hdr; hdrlen; p++, hdrlen--) {
- if ( putc (*p, fpout) == EOF )
- goto write_error;
- }
- /* standard packet or last segment of partial length encoded packet */
- for (; pktlen; pktlen--) {
- c = getc (fpin);
- if (c == EOF)
- goto read_error;
- if ( putc (c, fpout) == EOF )
- goto write_error;
- }
-
-
- if ( fclose (fpout) )
- log_error ("error closing `%s': %s\n", outname, strerror (errno));
- return 0;
-
- write_error:
- log_error ("error writing `%s': %s\n", outname, strerror (errno));
- fclose (fpout);
- return 2;
-
- read_error: {
- int save = errno;
- fclose (fpout);
- errno = save;
- }
- return -1;
-}
-
-
-
-static int
-do_split (const char *fname, FILE *fp)
-{
- int c, ctb, pkttype;
- unsigned long pktlen = 0;
- int partial = 0;
- unsigned char header[20];
- int header_idx = 0;
-
- ctb = getc (fp);
- if (ctb == EOF)
- return 3; /* ready */
- header[header_idx++] = ctb;
-
- if( !(ctb & 0x80) ) {
- log_error("invalid CTB %02x\n", ctb );
- return 1;
- }
- if ( (ctb & 0x40) ) { /* new CTB */
- pkttype = (ctb & 0x3f);
- if( (c = getc (fp)) == EOF )
- return -1;
- header[header_idx++] = c;
-
- if( c < 192 )
- pktlen = c;
- else if( c < 224 ) {
- pktlen = (c - 192) * 256;
- if( (c = getc (fp)) == EOF )
- return -1;
- header[header_idx++] = c;
- pktlen += c + 192;
- }
- else if( c == 255 ) {
- if (read_u32 (fp, &pktlen))
- return -1;
- header[header_idx++] = pktlen >> 24;
- header[header_idx++] = pktlen >> 16;
- header[header_idx++] = pktlen >> 8;
- header[header_idx++] = pktlen;
- }
- else { /* partial body length */
- pktlen = c;
- partial = 1;
- }
- }
- else {
- int lenbytes;
-
- pkttype = (ctb>>2)&0xf;
- lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
- if( !lenbytes ) {
- pktlen = 0; /* don't know the value */
- if( pkttype == PKT_COMPRESSED )
- partial = 3;
- else
- partial = 2; /* the old GnuPG partial length encoding */
- }
- else {
- for( ; lenbytes; lenbytes-- ) {
- pktlen <<= 8;
- if( (c = getc (fp)) == EOF )
- return -1;
- header[header_idx++] = c;
-
- pktlen |= c;
- }
- }
- }
-
- return write_part (fname, fp, pktlen, pkttype, partial,
- header, header_idx);
-}
-
-
-static void
-split_packets (const char *fname)
-{
- FILE *fp;
- int rc;
-
- if (!fname || !strcmp (fname, "-")) {
- fp = stdin;
- fname = "-";
- }
- else if ( !(fp = fopen (fname,"rb")) ) {
- log_error ("can't open `%s': %s\n", fname, strerror (errno));
- return;
- }
-
- while ( !(rc = do_split (fname, fp)) )
- ;
- if ( rc > 0 )
- ; /* error already handled */
- else if ( ferror (fp) )
- log_error ("error reading `%s': %s\n", fname, strerror (errno));
- else
- log_error ("premature EOF while reading `%s'\n", fname );
-
- if ( fp != stdin )
- fclose (fp);
-}
-
diff --git a/tools/lspgpot b/tools/lspgpot
deleted file mode 100755
index 8dc9c3047..000000000
--- a/tools/lspgpot
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-# lspgpot - script to extract the ownertrust values
-# from PGP keyrings and list them in GnuPG ownertrust format.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-../g10/gpg --dry-run --with-fingerprint --with-colons $* | awk '
-BEGIN { FS=":"
- printf "# Ownertrust listing generated by lspgpot\n"
- printf "# This can be imported using the command:\n"
- printf "# ggp --import-ownertrust\n\n" }
-$1 == "fpr" { fpr = $10 }
-$1 == "rtv" && $2 == 1 && $3 == 2 { printf "%s:3:\n", fpr; next }
-$1 == "rtv" && $2 == 1 && $3 == 5 { printf "%s:4:\n", fpr; next }
-$1 == "rtv" && $2 == 1 && $3 == 6 { printf "%s:5:\n", fpr; next }
-'
-
diff --git a/tools/mail-signed-keys b/tools/mail-signed-keys
deleted file mode 100755
index 80fbb3481..000000000
--- a/tools/mail-signed-keys
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-# FIXME: Add --dry-run, use only valid email addreses, extract only given keys
-
-dryrun=0
-if [ "$1" = "--dry-run" ]; then
- dryrun=1
- shift
-fi
-
-if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
- echo "usage: mail-signed-keys keyring signedby signame" >&2
- exit 1
-fi
-
-signame="$3"
-
-if [ ! -f $1 ]; then
- echo "mail-signed-keys: '$1': no such file" >&2
- exit 1
-fi
-
-[ -f '.#tdb.tmp' ] && rm '.#tdb.tmp'
-ro="--homedir . --no-options --trustdb-name=./.#tdb.tmp --dry-run --lock-never --no-default-keyring --keyring $1"
-
-signedby=`gpg $ro --list-keys --with-colons $2 \
- 2>/dev/null | awk -F: '$1=="pub" {print $5; exit 0}'`
-
-if [ -z "$signedby" ]; then
- echo "mail-signed-keys: '$2': no such signator" >&2
- exit 1
-fi
-
-if [ "$dryrun" = "0" ]; then
- echo "About to send the the keys signed by $signedby" >&2
- echo -n "to their owners. Do you really want to do this? (y/N)" >&2
- read
- [ "$REPLY" != "y" -a "$REPLY" != "Y" ] && exit 0
-fi
-
-gpg $ro --check-sigs --with-colons 2>/dev/null \
- | awk -F: -v signedby="$signedby" -v gpgopt="$ro" \
- -v dryrun="$dryrun" -v signame="$signame" '
-BEGIN { sendmail="/usr/lib/sendmail -oi -t " }
-$1 == "pub" { nextkid=$5; nextuid=$10
- if( uidcount > 0 ) { myflush() }
- kid=nextkid; uid=nextuid; next
- }
-$1 == "uid" { uid=$10 ; next }
-$1 == "sig" && $2 == "!" && $5 == signedby { uids[uidcount++] = uid; next }
-END { if( uidcount > 0 ) { myflush() } }
-
-function myflush()
-{
- if ( kid == signedby ) { uidcount=0; return }
- print "sending key " substr(kid,9) " to" | "cat >&2"
- for(i=0; i < 1; i++ ) {
- print " " uids[i] | "cat >&2"
- if( dryrun == 0 ) {
- if( i == 0 ) {
- printf "To: %s", uids[i] | sendmail
- }
- else {
- printf ",\n %s", uids[i] | sendmail
- }
- }
- }
- if(dryrun == 0) {
- printf "\n" | sendmail
- print "Subject: I signed your key " substr(kid,9) | sendmail
- print "" | sendmail
- print "Hi," | sendmail
- print "" | sendmail
- print "Here you get back the signed key." | sendmail
- print "Please send it yourself to a keyserver." | sendmail
- print "" | sendmail
- print "Peace," | sendmail
- print " " signame | sendmail
- print "" | sendmail
- cmd = "gpg " gpgopt " --export -a " kid " 2>/dev/null"
- while( (cmd | getline) > 0 ) {
- print | sendmail
- }
- print "" | sendmail
- close(cmd)
- close( sendmail )
- }
- uidcount=0
-}
-'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tools/mk-tdata.c b/tools/mk-tdata.c
deleted file mode 100644
index dcfa859f1..000000000
--- a/tools/mk-tdata.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* mk-tdata.c - Create some simple random testdata
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is free software; as a special exception the author gives
- * unlimited permission to copy and/or distribute it, with or without
- * modifications, as long as this notice is preserved.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-#ifndef RAND_MAX /* for SunOS */
- #define RAND_MAX 32767
-#endif
-
-int
-main(int argc, char **argv)
-{
- int i, c;
- int limit =0;
-
- limit = argc > 1 ? atoi(argv[1]) : 0;
-
- srand(getpid());
-
- for(i=0; !limit || i < limit; i++ ) {
- #ifdef HAVE_RAND
- c = ((unsigned)(1 + (int) (256.0*rand()/(RAND_MAX+1.0)))-1);
- #else
- c = ((unsigned)(1 + (int) (256.0*random()/(RAND_MAX+1.0)))-1);
- #endif
- putchar(c);
- }
- return 0;
-}
-
diff --git a/tools/mpicalc.c b/tools/mpicalc.c
deleted file mode 100644
index 2817c9932..000000000
--- a/tools/mpicalc.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/* mpitest.c - test the mpi functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This is an RPN calculator; values must be given in hex.
- * Operation is like dc(1) except that the input/output radix is
- * always 16 and you can use a '-' to prefix a negative number.
- * Addition operators: ++ and --. All operators must be delimited by a blank
- *
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "util.h"
-#include "mpi.h"
-#include "i18n.h"
-
-#define STACKSIZE 100
-static MPI stack[STACKSIZE];
-static int stackidx;
-
-
-const char *
-strusage( int level )
-{
- const char *p;
- switch( level ) {
- case 10:
- case 0: p = "mpicalc - v" VERSION "; "
- "Copyright 1997 Werner Koch (dd9jn)" ; break;
- case 13: p = "mpicalc"; break;
- case 14: p = VERSION; break;
- case 1:
- case 11: p = "Usage: mpicalc (-h for help)";
- break;
- case 2:
- case 12: p =
- "\nSyntax: mpicalc [options] [files]\n"
- "MPI RPN calculator\n";
- break;
- default: p = default_strusage(level);
- }
- return p;
-}
-
-
-static void
-i18n_init(void)
-{
- #ifdef ENABLE_NLS
- #ifdef HAVE_LC_MESSAGES
- setlocale( LC_MESSAGES, "" );
- #else
- setlocale( LC_ALL, "" );
- #endif
- bindtextdomain( PACKAGE, G10_LOCALEDIR );
- textdomain( PACKAGE );
- #endif
-}
-
-
-static void
-do_add(void)
-{
- if( stackidx < 2 ) {
- fputs("stack underflow\n",stderr);
- return;
- }
- mpi_add( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
- stackidx--;
-}
-
-static void
-do_sub(void)
-{
- if( stackidx < 2 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_sub( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
- stackidx--;
-}
-
-static void
-do_inc(void)
-{
- if( stackidx < 1 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_add_ui( stack[stackidx-1], stack[stackidx-1], 1 );
-}
-
-static void
-do_dec(void)
-{
- if( stackidx < 1 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- /* mpi_sub_ui( stack[stackidx-1], stack[stackidx-1], 1 ); */
-}
-
-static void
-do_mul(void)
-{
- if( stackidx < 2 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_mul( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
- stackidx--;
-}
-
-static void
-do_mulm(void)
-{
- if( stackidx < 3 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_mulm( stack[stackidx-3], stack[stackidx-3],
- stack[stackidx-2], stack[stackidx-1] );
- stackidx -= 2;
-}
-
-static void
-do_div(void)
-{
- if( stackidx < 2 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_fdiv_q( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
- stackidx--;
-}
-
-static void
-do_rem(void)
-{
- if( stackidx < 2 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_fdiv_r( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
- stackidx--;
-}
-
-static void
-do_powm(void)
-{
- MPI a;
- if( stackidx < 3 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- a= mpi_alloc(10);
- mpi_powm( a, stack[stackidx-3], stack[stackidx-2], stack[stackidx-1] );
- mpi_free(stack[stackidx-3]);
- stack[stackidx-3] = a;
- stackidx -= 2;
-}
-
-static void
-do_inv(void)
-{
- MPI a = mpi_alloc(40);
- if( stackidx < 2 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_invm( a, stack[stackidx-2], stack[stackidx-1] );
- mpi_set(stack[stackidx-2],a);
- mpi_free(a);
- stackidx--;
-}
-
-static void
-do_gcd(void)
-{
- MPI a = mpi_alloc(40);
- if( stackidx < 2 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_gcd( a, stack[stackidx-2], stack[stackidx-1] );
- mpi_set(stack[stackidx-2],a);
- mpi_free(a);
- stackidx--;
-}
-
-static void
-do_rshift(void)
-{
- if( stackidx < 1 ) {
- fputs("stack underflow\n", stderr);
- return;
- }
- mpi_rshift( stack[stackidx-1],stack[stackidx-1], 1 );
-}
-
-
-int
-main(int argc, char **argv)
-{
- static ARGPARSE_OPTS opts[] = {
- {0} };
- ARGPARSE_ARGS pargs;
- int i, c;
- int state = 0;
- char strbuf[1000];
- int stridx=0;
-
- pargs.argc = &argc;
- pargs.argv = &argv;
- pargs.flags = 0;
-
- i18n_init();
- while( arg_parse( &pargs, opts) ) {
- switch( pargs.r_opt ) {
- default : pargs.err = 2; break;
- }
- }
- if( argc )
- usage(1);
-
-
- for(i=0; i < STACKSIZE; i++ )
- stack[i] = NULL;
- stackidx =0;
-
- while( (c=getc(stdin)) != EOF ) {
- if( !state ) { /* waiting */
- if( isdigit(c) ) {
- state = 1;
- ungetc(c, stdin);
- strbuf[0] = '0';
- strbuf[1] = 'x';
- stridx=2;
- }
- else if( isspace(c) )
- ;
- else {
- switch(c) {
- case '+':
- if( (c=getc(stdin)) == '+' )
- do_inc();
- else {
- ungetc(c, stdin);
- do_add();
- }
- break;
- case '-':
- if( (c=getc(stdin)) == '-' )
- do_dec();
- else if( isdigit(c) || (c >='A' && c <= 'F') ) {
- state = 1;
- ungetc(c, stdin);
- strbuf[0] = '-';
- strbuf[1] = '0';
- strbuf[2] = 'x';
- stridx=3;
- }
- else {
- ungetc(c, stdin);
- do_sub();
- }
- break;
- case '*':
- do_mul();
- break;
- case 'm':
- do_mulm();
- break;
- case '/':
- do_div();
- break;
- case '%':
- do_rem();
- break;
- case '^':
- do_powm();
- break;
- case 'I':
- do_inv();
- break;
- case 'G':
- do_gcd();
- break;
- case '>':
- do_rshift();
- break;
- case 'i': /* dummy */
- if( !stackidx )
- fputs("stack underflow\n", stderr);
- else {
- mpi_free(stack[stackidx-1]);
- stackidx--;
- }
- break;
- case 'd': /* duplicate the tos */
- if( !stackidx )
- fputs("stack underflow\n", stderr);
- else if( stackidx < STACKSIZE ) {
- mpi_free(stack[stackidx]);
- stack[stackidx] = mpi_copy( stack[stackidx-1] );
- stackidx++;
- }
- else
- fputs("stack overflow\n", stderr);
- break;
- case 'c':
- for(i=0; i < stackidx; i++ )
- mpi_free(stack[i]), stack[i] = NULL;
- stackidx = 0;
- break;
- case 'p': /* print the tos */
- if( !stackidx )
- puts("stack is empty");
- else {
- mpi_print(stdout, stack[stackidx-1], 1 );
- putchar('\n');
- }
- break;
- case 'f': /* print the stack */
- for( i = stackidx-1 ; i >= 0; i-- ) {
- printf("[%2d]: ", i );
- mpi_print(stdout, stack[i], 1 );
- putchar('\n');
- }
- break;
- default:
- fputs("invalid operator\n", stderr);
- }
- }
- }
- else if( state == 1 ) { /* in a number */
- if( !isxdigit(c) ) { /* store the number */
- state = 0;
- ungetc(c, stdin);
- if( stridx < 1000 )
- strbuf[stridx] = 0;
-
- if( stackidx < STACKSIZE ) {
- if( !stack[stackidx] )
- stack[stackidx] = mpi_alloc(10);
- if( mpi_fromstr(stack[stackidx], strbuf) )
- fputs("invalid number\n", stderr);
- else
- stackidx++;
- }
- else
- fputs("stack overflow\n", stderr);
- }
- else { /* store digit */
- if( stridx < 999 )
- strbuf[stridx++] = c;
- else if( stridx == 999 ) {
- strbuf[stridx] = 0;
- fputs("string too large - truncated\n", stderr);
- stridx++;
- }
- }
- }
-
- }
- for(i=0; i < stackidx; i++ )
- mpi_free(stack[i]);
- return 0;
-}
-
-
diff --git a/tools/ring-a-party b/tools/ring-a-party
deleted file mode 100755
index 1993e2732..000000000
--- a/tools/ring-a-party
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/sh
-# ring-a-party - print a keyring suitable for a key signing party
-# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-if [ $# -lt 1 ]; then
- echo "usage: ring-a-party keyring [headerline]" >&2
- exit 1
-fi
-
-keyring="$1"
-hdrline="$1"
-if [ $# -gt 1 ]; then
- hdrline="$2"
-fi
-
-if [ ! -f $keyring ]; then
- echo "ring-a-party: '$keyring': no such file" >&2
- exit 1
-fi
-
-echo "ring-a-party: output will be written to 'a.pub'" >&2
-
-
-gpg --dry-run --with-fingerprint --with-colons $keyring \
- | gawk -v "KEYRING=$hdrline" '
-BEGIN { FS=":"
- algos[1] = "RSA";
- algos[16] = "ElGamal";
- algos[17] = "DSA";
- any = 0;
- lines = -1;
- page = 0;
- now = strftime("%b %d %H:%M %Y");
- }
-END {
- if (any) myflush();
-}
-$1 == "pub" {
- if( any ) myflush();
- uidcount = 0;
- signencrypt = 0;
- uids[uidcount++] = $10;
- nbits = $3;
- keyid = substr($5,9);
- created = $6;
- expires = $7;
- algostr = mapalgo($4);
- if( $4 == 20 || $4 == 1 ) signencrypt = 1;
- any = 1;
- }
-$1 == "fpr" { fpr = $10 }
-$1 == "uid" { uids[uidcount++] = $10 }
-$1 == "sub" { if( $4 != 17 && $4 != 3 ) signencrypt=1 }
-
-function myflush()
-{
- # fixme: take lines to print here into account
- if( lines > 45 || lines == -1 ) {
- if( lines != -1 ) printf "\f";
- page++;
- printf "%s %-50.50s Page %d\n\n", now, KEYRING, page ;
- printf " Type Bits KeyID Created Expires Algorithm Use\n\n";
- lines = 1;
- }
- printf "[ ] pub %04d 0x%s %10s %10s %-10s %15s\n",
- nbits, keyid, created, expires == ""? "----------":expires, algostr,
- signencrypt == 1? "Sign & Encrypt":"Sign only";
- length(fpr) == 40 ? printfpr20( fpr ) : printfpr16( fpr );
- lnes += 2;
- for( i=0; i < uidcount; i++ ) {
- printf "( ) uid %s\n", uids[i];
- lines++;
- }
- printf "\n\n";
- lines += 2;
-}
-
-function mapalgo( no )
-{
- if( no in algos )
- return algos[no];
- return sprintf( "algoID=%ds", no );
-}
-
-
-function printfpr16( s )
-{
- printf " f16 Fingerprint16 =";
- for(i=0; i < 16; i++ ) {
- if( i == 8 ) printf " ";
- printf " %s", substr( s, i*2+1, 2 );
- }
- printf "\n"
-}
-
-function printfpr20( s )
-{
- printf " f20 Fingerprint20 =";
- for(i=0; i < 10; i++ ) {
- if( i == 5 ) printf " ";
- printf " %s", substr( s, i*4+1, 4 );
- }
- printf "\n"
-}
-
-' | tee a.pub | gpg --print-mds
-
-
-
-
diff --git a/tools/shmtest.c b/tools/shmtest.c
deleted file mode 100644
index fceade1e1..000000000
--- a/tools/shmtest.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* shmtest.c
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is free software; as a special exception the author gives
- * unlimited permission to copy and/or distribute it, with or without
- * modifications, as long as this notice is preserved.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <signal.h>
-#include <unistd.h>
-#ifdef HAVE_SYS_IPC_H
- #include <sys/types.h>
- #include <sys/ipc.h>
-#endif
-#ifdef HAVE_SYS_SHM_H
- #include <sys/shm.h>
-#endif
-#include "util.h"
-#include "ttyio.h"
-#include "i18n.h"
-
-#ifdef HAVE_DOSISH_SYSTEM
-int main( int argc, char **argv )
-{
- fprintf(stderr, "Sorry, not yet available for DOSish systems\n");
- exit(1);
-}
-#else
-
-static int serverpid = -1;
-
-static void
-my_usage(void)
-{
- fprintf(stderr, "usage: shmtest gpg-command-line\n");
- exit(1);
-}
-
-const char *
-strusage( int level )
-{
- return default_strusage(level);
-}
-
-static void
-i18n_init(void)
-{
- #ifdef ENABLE_NLS
- #ifdef HAVE_LC_MESSAGES
- setlocale( LC_MESSAGES, "" );
- #else
- setlocale( LC_ALL, "" );
- #endif
- bindtextdomain( PACKAGE, G10_LOCALEDIR );
- textdomain( PACKAGE );
- #endif
-}
-
-
-static void
-do_get_string( int mode, const char *keyword, byte *area, size_t areasize )
-{
- size_t n, len;
- char *p=NULL;
- int yes=0;
-
- n = area[0] << 8 | area[1];
- /* fixme: do some sanity checks here */
- if( mode == 1 )
- p = tty_get( keyword );
- else if( mode == 3 )
- p = tty_get_hidden( keyword );
- else
- yes = tty_get_answer_is_yes( keyword );
- if( p ) {
- len = strlen(p);
- memcpy( area+n+2, p, len );
- area[n] = len >> 8;
- area[n+1] = len;
- m_free(p);
- }
- else { /* bool */
- area[n] = 0;
- area[n+1] = 1;
- area[n+2] = yes;
- }
- area[3] = 1; /* we should better use a semaphore */
- kill( serverpid, SIGUSR1 );
-}
-
-
-
-int
-main(int argc, char **argv)
-{
- void *area = NULL;
- size_t areasize = 4096;
- int shm_id = -1;
- FILE *fp;
- char buf[200];
- char *p, *p2;
- size_t n;
- int i;
-
- log_set_name("shmtest");
- i18n_init();
- #ifndef USE_SHM_COPROCESSING
- log_info("SHM_COPRPOCESSING is not available\n");
- #else
- if( argc < 1 )
- my_usage();
-
- for(n=0,i=1; i < argc; i++ )
- n += strlen(argv[i]) + 1;
- p = m_alloc( 100 + n );
- strcpy( p, "../g10/gpg --status-fd 1 --run-as-shm-coprocess 0");
- for(i=1; i < argc; i++ ) {
- strcat(p, " " );
- strcat(p, argv[i] );
- }
-
- fp = popen( p, "r" );
- m_free( p );
- if( !fp )
- log_error("popen failed: %s\n", strerror(errno));
-
- while ( fgets (buf, sizeof (buf) - 1, fp ) != NULL ) {
- size_t len = strlen(buf);
- if( len >= 9 && !memcmp( buf, "[GNUPG:] ", 9 ) ) {
- int word=0;
- int is_info = 0, is_get = 0;
-
- for( p = strtok(buf+9, " \n"); p ; p = strtok(NULL, " \n")) {
- word++;
- if( word==1 && !strcmp(p,"SHM_INFO") ) {
- if( !area )
- is_info=1;
- else
- log_error("duplicate SHM_INFO ignored\n" );
- }
- else if( is_info && (p2 = strchr(p, '=' )) ) {
- int val;
- *p2++ = 0;
- val = atoi(p2); /* should be atou() for some values */
- if( !strcmp(p, "pv" ) ) {
- if( atoi(p2) != 1 )
- log_fatal("invalid protocol version %d\n", val );
- is_info = 2;
- }
- else if( !strcmp(p, "pid" ) )
- serverpid = val;
- else if( !strcmp(p, "shmid" ) )
- shm_id = val;
- }
- else if( word == 1 && !strcmp(p,"SHM_GET") )
- is_get = 1;
- else if( word == 1 && !strcmp(p,"SHM_GET_BOOL") )
- is_get = 2;
- else if( word == 1 && !strcmp(p,"SHM_GET_HIDDEN") )
- is_get = 3;
- else if( word == 2 && is_get ) {
- do_get_string( is_get, p, area, areasize );
- break;
- }
- else if( word == 1 )
- log_info("Status: %s\n", p);
- }
- if( is_info ) {
- if( is_info < 2 )
- log_fatal("SHM info without protocol version\n");
- if( serverpid == -1 )
- log_fatal("SHM info without server's pid\n");
- if( shm_id == -1 )
- log_fatal("SHM info without id\n");
- log_info("Shared memory info: server=%d shm_id=%d\n",
- serverpid, shm_id);
- area = shmat( shm_id, 0, 0 );
- if( area == (void*)-1 )
- log_fatal("attach to shared memory failed: %s\n",
- strerror(errno));
- }
- }
- else
- fputs (buf, stdout);
- }
-
-
- if( pclose(fp) )
- log_error("pclose failed\n");
-
- return 0;
- #endif
-}
-
-
-#endif
diff --git a/tools/signmany b/tools/signmany
deleted file mode 100644
index 9b453d436..000000000
--- a/tools/signmany
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-if [ ! -f ./$1 ]; then
- echo "usage: signmany keyring" >&2
- exit 1
-fi
-
-
-ro="--trustdb-name=./tdb.tmp --no-default-keyring --secret-keyring /floppy/secring.gpg --keyring ./$1"
-
-kis=`gpg $ro --fast-list-mode --list-keys --with-colons \
- | awk -F: '$1=="pub" { print $5 }'`
-
-for k in $kis; do
- echo "Keyid: $k"
- answer=A
- while [ "$answer" = "A" ]; do
- gpg $ro --lock-never --sign-key $k
- answer=""
- while [ "$answer" = "" ]; do
- read -p 'Okay, Again or Quit? (O/A/Q) '
- case "$REPLY" in
- o|O) answer=O ;;
- a|A) answer=A ;;
- q|Q) answer=Q ;;
- *) ;;
- esac
- done
- done
- [ "$answer" = "Q" ] && break
-done
-
-
diff --git a/util/ChangeLog b/util/ChangeLog
deleted file mode 100644
index e9caf465a..000000000
--- a/util/ChangeLog
+++ /dev/null
@@ -1,1021 +0,0 @@
-2002-10-17 David Shaw <dshaw@jabberwocky.com>
-
- * http.c (connect_server): Try all A records for names with
- multiple addresses until one answers for both MINGW32 and not
- MINGW32.
-
-2002-10-10 David Shaw <dshaw@jabberwocky.com>
-
- * http.c (connect_server): Properly handle a single A record that
- fails connect().
-
-2002-10-03 David Shaw <dshaw@jabberwocky.com>
-
- * logger.c (g10_log_warning, log_set_strict): Add new log_warning
- logger command which can be switched between log_info and
- log_error via log_set_strict.
-
-2002-09-24 David Shaw <dshaw@jabberwocky.com>
-
- * http.c (connect_server): Try all A records for names with
- multiple addresses until one answers (not MINGW32).
-
-2002-09-16 Werner Koch <wk@gnupg.org>
-
- * w32reg.c (read_w32_registry_string): Fallback to HLM.
-
-2002-09-12 Stefan Bellon <sbellon@sbellon.de>
-
- * fileutil.c (make_filename): Removed variable for RISC OS to
- avoid compiler warning.
-
- * secmem.c: Removed static variable for RISC OS to avoid
- compiler warning.
-
-2002-09-11 Werner Koch <wk@gnupg.org>
-
- * simple-gettext.c: Disable charset mappings. We do it now when
- installing the files.
-
-2002-09-09 Werner Koch <wk@gnupg.org>
-
- * w32reg.c (read_w32_registry_string): Handle REG_EXPAND_SZ.
- Suggested by Ryan Malayter.
-
- * strgutil.c (ascii_strcasecmp): Replaced by code from gnulib.
- (ascii_strncasecmp): New.
-
-2002-09-02 Werner Koch <wk@gnupg.org>
-
- * simple-gettext.c (set_gettext_file): Make sure that we only use
- backslashes.
-
- * strgutil.c (set_native_charset): Allow NULL as argument to use
- nl_langinfo for selection. Mapped latin-15 to latin-1.
-
-2002-08-30 Werner Koch <wk@gnupg.org>
-
- * iobuf.c (block_filter): Removed the assert, so that one can pass
- the first character of a message and use the block filter for
- non partial length encoded packets.
-
-2002-08-06 Stefan Bellon <sbellon@sbellon.de>
-
- * ttyio.c [__riscos__]: Moved low-level RISC OS stuff to riscos.c.
- * riscos.c: Use new SWI calling mechanism of UnixLib.
-
-2002-08-03 Stefan Bellon <sbellon@sbellon.de>
-
- * secmem.c (init_pool, secmem_term): Changed #if to #ifdef in
- order to avoid warning with RISC OS' Norcroft C.
-
-2002-07-25 David Shaw <dshaw@jabberwocky.com>
-
- * secmem.c: "Warning" -> "WARNING"
-
-2002-07-05 Werner Koch <wk@gnupg.org>
-
- * argparse.c (initialize): We better exit after a read error so
- that we don't run into an endless loop when reading a directory.
- Noted by Andrew Suffield.
-
-2002-07-01 David Shaw <dshaw@jabberwocky.com>
-
- * argparse.c (optfile_parse): Fix variable typo - 'p2' should be
- 'p' :)
-
-2002-06-29 Werner Koch <wk@gnupg.org>
-
- * argparse.c (optfile_parse): Renamed an auto I to P2 to avoid
- shadowing warning.
-
-2002-06-21 Stefan Bellon <sbellon@sbellon.de>
-
- * riscos.c (riscos_global_defaults): New.
-
-2002-06-20 Stefan Bellon <sbellon@sbellon.de>
-
- * riscos.c (riscos_set_filetype_by_number, riscos_set_filetype):
- New. Set RISC OS filetype according to MIME type.
-
-2002-06-14 David Shaw <dshaw@jabberwocky.com>
-
- * strgutil.c (pop_strlist): New function to pop the head off of a
- strlist.
-
-2002-06-05 Timo Schulz <ts@winpt.org>
-
- * fileutil.c (is_file_compressed): Corrected the magic values
- for bzip2 and gzip. Noted by David.
-
-2002-05-22 Werner Koch <wk@gnupg.org>
-
- * fileutil.c (compare_filenames): Replaced stricmp by strcasecmp.
- * miscutil.c (answer_is_yes_no_quit,answer_is_yes_no_default): Ditto.
-
- * strgutil.c (strncasecmp): New.
- (memicmp): Removed.
-
-2002-05-10 Stefan Bellon <sbellon@sbellon.de>
-
- * memory.c (add_entry) [M_DEBUG]: Added some missing EXTRA_ALIGN.
- (free_entry) [M_DEBUG]: Free secure memory via secmem_free.
- (alloc_secure): Malloc at least 1 byte.
- (realloc) [M_GUARD]: Added missing FNAMEARG to function call.
-
- * logger.c (g10_log_bug0) [__riscos__]: Make use of first
- g10_log_bug0 function for later Norcroft compiler.
-
- * riscos.c: Added stdlib.h include.
-
-2002-05-04 Werner Koch <wk@gnupg.org>
-
- * http.c (write_server) [__MINGW32__]: Replaced WriteFile by send
- because sockets don't work with WriteFile under NT anymore.
-
-2002-05-03 David Shaw <dshaw@jabberwocky.com>
-
- * argparse.c (optfile_parse): Remove quotes only if they totally
- enclose the string, and do not occur within the string. This
- makes specifying a program under Win32 easier when you need quotes
- around part of a string, but not around the whole string.
-
-2002-05-02 Werner Koch <wk@gnupg.org>
-
- * memory.c (alloc): Malloc at least 1 byte. Noted by Winona Brown.
-
-2002-04-23 David Shaw <dshaw@jabberwocky.com>
-
- * miscutil.c: New function answer_is_yes_no_default() to give a
- default answer.
-
-2002-04-22 Stefan Bellon <sbellon@sbellon.de>
-
- * riscos.c (riscos_open, riscos_fopen, riscos_fstat, set_filetype):
- Removed as they're not needed anymore.
-
- * iobuf.c (direct_open) [__riscos__]: Don't allow opening of
- directories.
-
-2002-04-08 Werner Koch <wk@gnupg.org>
-
- Fixed filename of last entry.
-
-2002-03-29 David Shaw <dshaw@jabberwocky.com>
-
- * miscutil.c (print_string, utf8_to_native): If a delimiter is
- used, then quote the backslash character as well. Problem noted
- by Rainer Perske.
-
-2002-03-15 Werner Koch <wk@gnupg.org>
-
- * argparse.c (optfile_parse): Fixed missing argument handling.
-
-2002-02-28 Timo Schulz <ts@winpt.org>
-
- * http.c (write_server): Convert integer to a HANDLE for W32.
-
-2002-01-27 David Shaw <dshaw@jabberwocky.com>
-
- * iobuf.c (iobuf_fdopen, iobuf_sockopen): Do not cache fdopened
- fds on close.
-
-2002-01-08 Werner Koch <wk@gnupg.org>
-
- * secmem.c (print_warn): Print a pointer to the FAQ.
-
-2002-01-05 Werner Koch <wk@gnupg.org>
-
- * argparse.c (default_strusage): Set default copyright date to 2002.
-
-2002-01-02 Stefan Bellon <sbellon@sbellon.de>
-
- * iobuf.c [__riscos__]: Updated include file name.
-
- * fileutil.c [__riscos__]: Ditto.
-
- * ttyio.d [__riscos__]: Ditto.
-
- * riscos.c [__riscos__]: Ditto. Added debugging code and
- unified error messages.
-
-2001-12-27 David Shaw <dshaw@jabberwocky.com>
-
- * errors.c (g10_errstr): Added G10ERR_KEYSERVER
-
-2001-12-27 Werner Koch <wk@gnupg.org>
-
- * simple-gettext.c [MINGW32]: Fixed last changed.
-
-2001-12-22 Stefan Bellon <sbellon@sbellon.de>
-
- * memory.c (realloc): Fixed realloc not working when M_GUARD is
- defined and first parameter is NULL.
-
-2001-12-22 Timo Schulz <ts@winpt.org>
-
- * fileutil.c (is_file_compressed): New.
-
-2001-12-19 Werner Koch <wk@gnupg.org>
-
- * simple-gettext.c, w32reg.c [CYGWIN32]: Allow to use this file
-
-2001-10-11 Werner Koch <wk@gnupg.org>
-
- * http.c (do_parse_uri): Changed initialization of the port number
- so that it does also work with x-hkp. By David Shaw.
-
-2001-09-19 Werner Koch <wk@gnupg.org>
-
- * w32reg.c (get_root_key): New.
- (read_w32_registry_string): Use it here.
- (write_w32_registry_string): New. Contributed by Timo.
-
- * iobuf.c (iobuf_ioctl): New command to disable fd
- caching. Implemented no_cache flag where needed.
- (iobuf_sockopen): Always set no_cache flag.
-
- * strgutil.c (utf8_to_native): Add a delim arg and changed all
- callers. Make sure that quoting is done when translation is
- disabled.
- * miscutil.c (print_utf8_string2): New.
-
-2001-09-17 Werner Koch <wk@gnupg.org>
-
- * miscutil.c (print_string): Use explicit ranges and not iscntrl().
- (make_printable_string): Ditto.
-
-2001-09-07 Werner Koch <wk@gnupg.org>
-
- * strgutil.c (strsep): New, taken from glibc 2.2.1.
-
-2001-09-03 Werner Koch <wk@gnupg.org>
-
- * miscutil.c (strtimestamp,asctimestamp): Avoid trigraphs.
-
-2001-08-21 Stefan Bellon <sbellon@sbellon.de>
-
- * riscos.c [__riscos__] (close_fds): Fixed possible endless loop.
-
-2001-08-20 Werner Koch <wk@gnupg.org>
-
- Applied patches from Stefan Bellon <sbellon@sbellon.de> to support
- RISC OS. Nearly all of these patches are identified by the
- __riscos__ macro.
- * secmem.c [__riscos__]: Disabled secure memory stuff.
- * dotlock.c, ttyio.c [__riscos__]: Adapted for RISC OS
- * fileutil.c, iobuf.c: Adapted for RISC OS; mainly replaced
- hardcoded path separators with EXTSEP_S like macros.
- * http.c (send_request): Use macros for the env-var name.
- * logger.c [__riscos__]: Do an fflush at the end of each log
- function.
- * memory.c [__riscos__]: Minor patches
- * riscos.c (set_filetype): New.
-
- * secmem.c (lock_pool): Under HPUX mlock is broken but we might
- have plock, so we use this to lock the entire process. By Albert
- Chin.
-
-2001-07-03 Werner Koch <wk@gnupg.org>
-
- * strgutil.c (utf8_to_native): Fixed printing of invalid utf-8
- characters. Thomas Roessler reported that the escaping didn't work
- correct.
-
-2001-06-12 Werner Koch <wk@gnupg.org>
-
- * strgutil.c (ascii_memistr,ascii_isupper,ascii_islower,
- ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New.
- (set_native_charset): Use ascii_strcasecmp()
- * fileutil.c (compare_filenames): Ditto
- * miscutil.c (answer_is_yes): Ditto.
- (answer_is_yes_no_quit): Ditto.
-
-2001-06-06 Werner Koch <wk@gnupg.org>
-
- * strgutil.c (vasprintf) [__MINGW32__]: New. Taken from libiberty.
- * ttyio.c (tty_printf) [__MINGW32__]: Replaced the sprintf with
- the new vasprintf.
-
-2001-06-05 Werner Koch <wk@gnupg.org>
-
- * dotlock.c (make_dotlock): Typo fixes.
-
-2001-05-25 Werner Koch <wk@gnupg.org>
-
- * ttyio.c (do_get): Fixed a serious format string bug. Thanks to
- fish stiqz.
-
-2001-05-23 Werner Koch <wk@gnupg.org>
-
- * secmem.c (EPERM): Try to work around a Slackware problem.
-
-2001-05-05 Werner Koch <wk@gnupg.org>
-
- * http.c (http_start_data): Flush before writing.
- (http_wait_response): No need to flush here.
-
-2001-04-27 Werner Koch <wk@gnupg.org>
-
- * memory.c (out_of_core): Print an explanation on reasons why
- secret memory can get exhausted.
-
-2001-04-23 Werner Koch <wk@gnupg.org>
-
- * http.c (http_wait_response): Implement new flag to inhibit the
- TCP shutdown.
-
-2001-04-20 Werner Koch <wk@gnupg.org>
-
- * http.c (http_start_data): Use write_server and not the iobuf
- stuff. I wonder why we are at all using write_server - shouldn't
- it be handled by iobuf?
-
- * strgutil.c (set_native_charset): Allow utf-8 by introducing the
- new no_translation variable.
- (native_to_utf8): Handle no_translation.
- (utf8_to_native): Ditto.
-
-2001-04-19 Werner Koch <wk@gnupg.org>
-
- * miscutil.c (asctimestamp): Handle negative times. We must do
- this because Windoze segvs on negative times passed to gmtime().
- (strtimestamp): Ditto.
-
-2001-04-14 Werner Koch <wk@gnupg.org>
-
- * strgutil.c (utf8_to_native): Fixed a segv. Thanks to Keith Clayton.
-
-2001-04-13 Werner Koch <wk@gnupg.org>
-
- * iobuf.c (iobuf_fopen): Removed because it is not used and
- furthermore mode is ignored for an fname of "-". Suggested by
- Florian Weimer.
-
-2001-04-02 Werner Koch <wk@gnupg.org>
-
- * iobuf.c (translate_file_handle): New. Use this function
- everywhere in this file.
- (iobuf_translate_file_handle): Always use the osfhandle stuff here
- because callers don't know the implementation details of iobuf and
- they expect that the handles are translated.
-
-2001-03-29 Werner Koch <wk@gnupg.org>
-
- * miscutil.c (answer_is_yes): An empty string does now return no.
- (answer_is_yes_no_quit): Likewise.
-
- * iobuf.c (iobuf_close): Burn the buffers.
-
-2001-03-26 Werner Koch <wk@gnupg.org>
-
- * ttyio.c: Define TERMDEVICE depending on OS.
-
- * http.c (http_start_data): send a CRLF and not just a LF.
- Pointed out by Steven Murdoch.
-
-2001-03-13 Werner Koch <wk@gnupg.org>
-
- * iobuf.c (iobuf_sockopen): New.
- (sock_filter) [__MINGW32__]: New.
- (iobuf_ioctl): New.
- (file_filter): Implemented keep_open mode.
- * http.c (http_open, http_wait_response): Replaced iobuf_fdopen by
- iobuf_sockopen and use an iobuf_ioctl to avoid the dup().
- (deinit_sockets, init_sockets) [__MINGW32__]: New.
- (connect_server, write_server): Add code to work with W32 sockets.
-
-2001-03-12 Werner Koch <wk@gnupg.org>
-
- * strgutil.c (check_trailing_chars,check_trailing_ws): New.
-
-2001-03-08 Werner Koch <wk@gnupg.org>
-
- * argparse.c (default_strusage): Changed year of printed copyright
- to 2001.
-
- * iobuf.c (fd_cache_invalidate, fd_cache_close, fd_cache_open): New.
- (direct_open): Invalidate the fd_cache for read access.
- (file_filter): Cache the close here.
- (iobuf_open): Use new my_fopen_ro macro to try the cache first.
-
-2001-03-07 Werner Koch <wk@gnupg.org>
-
- * iobuf.c: Made the old stdio file handling cpp conditional
- controlled by FILE_FILTER_USES_STDIO and added a new
- open/read/close based one. We don't need the stdio buffering
- becuase we are doing our own buffering anyway. And it is a
- prerequesite to allow the use of ReadFile et al for W32 which in
- turn is needed to make the http stuff work there. The new W32
- stuff has also been implemented. Minor changes to all open functions.
- (direct_open): New.
- (file_filter): Core of the new read/write handling.
- (iobuf_get_filelength): Use W32 API function here. But it is
- currently limited to 2GB files.
- (iobuf_seek): Ditto.
-
-2001-03-01 Werner Koch <wk@gnupg.org>
-
- * errors.c (g10_errstr): New codes UNU_SECKEY and UNU_PUBKEY.
-
-2000-12-28 Werner Koch <wk@gnupg.org>
-
- * dotlock.c: Made all_lockfiles volatile.
- (remove_lockfiles): Made public.
-
-2000-11-30 Werner Koch <wk@gnupg.org>
-
- * iobuf.c (iobuf_translate_file_handle): New.
- (iobuf_open, iobuf_create): Use it for special filenames
-
-2000-11-11 Paul Eggert <eggert@twinsun.com>
-
- * iobuf.c (iobuf_get_filelength): Now returns off_t, not u32.
- Remove kludges to worry about large files; the callers check
- for files that are too large, and they should already be doing
- the right thing in an implementation-independent way.
- (fopen, fstat): Remove macros.
-
- * iobuf.c (iobuf_set_limit, iobuf_tell, iobuf_seek):
- Use off_t, not ulong, for file offsets.
- (<limits.h>): Include if needed.
- (LONG_MAX, LONG_MIN): Define a substitute if needed.
- (fseeko): Define a substitute if needed.
-
- * iobuf.c (iobuf_seek): Do not use %lu to report file
-
-2000-11-09 Werner Koch <wk@gnupg.org>
-
- * iobuf.c (iobuf_enable_special_filenames): New.
- (check_special_filename): New.
- (iobuf_open): check for special filenames.
- (iobuf_create): Ditto.
-
-2000-10-23 Werner Koch <wk@gnupg.org>
-
- * secmem.c (lock_pool): Don't print warning for Windows.
-
-2000-10-16 Werner Koch <wk@gnupg.org>
-
- * secmem.c (lock_pool): Fixed error checking for Linux.
- By James Troup.
-
-Thu Sep 14 14:20:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * miscutil.c (answer_is_yes_no_quit): Swapped order of yes/no test
- so that no is returned for an empty input. By David Champion.
-
-Wed Sep 6 17:55:47 CEST 2000 Werner Koch <wk@openit.de>
-
- * iobuf.c: Use fopen64 insead of fopen when available.
- (iobuf_get_filelength): Use fstat64 when available but return
- 2^32-1 if the file is larger than this value.
-
-Wed Sep 6 14:59:09 CEST 2000 Werner Koch <wk@openit.de>
-
- * secmem.c (secmem_realloc): check for failed secmem_malloc. By
- Matt Kraai.
-
- * strgutil.c (utf8_to_native): Fixed null ptr problem. By
- Giampaolo Tomassoni.
-
-Thu Jul 27 10:02:38 CEST 2000 Werner Koch <wk@openit.de>
-
- * iobuf.c: Use setmode() at several places to set stdin and stdout
- to binary mode for MSDOS based systems
-
- * iobuf.c (underflow): Initialize dummy_len to keep memory checker happy.
-
-Fri Jun 9 10:09:52 CEST 2000 Werner Koch <wk@openit.de>
-
- * ttyio.c: Simulate termios with termios. By Dave Dykstra.
-
-Thu Jun 8 20:22:00 CEST 2000 Werner Koch <wk@openit.de>
-
- * secmem.c (lock_pool,secmem_init): Additional check for dropped privs.
-
-Tue May 30 16:37:55 CEST 2000 Werner Koch <wk@openit.de>
-
- * iobuf.c (iobuf_cancel): Fix for MSDOS.
-
-Fri Apr 14 19:37:08 CEST 2000 Werner Koch <wk@openit.de>
-
- * dotlock.c (disable_dotlock): New. Implmented this in the module.
-
-2000-03-09 14:04:22 Werner Koch (wk@habibti.openit.de)
-
- * argparse.c (default_strusage): Changed year of default copyright.
-
-Tue Mar 7 18:45:31 CET 2000 Werner Koch <wk@gnupg.de>
-
- * secmem.c (lock_pool): No more warning for QNX. By Sam Roberts.
-
-2000-03-02 15:51:04 Werner Koch (wk@habibti.gnupg.de)
-
- * ttyio.c (tty_print_utf8_string): Oops.
-
-Thu Mar 2 15:37:46 CET 2000 Werner Koch <wk@gnupg.de>
-
- * ttyio.c (tty_print_utf8_string2): New to allow a max output size.
-
-Wed Feb 23 10:07:57 CET 2000 Werner Koch <wk@gnupg.de>
-
- * miscutil.c (asctimestamp): Fix for possible buffer overflow by
- large system returned date format string.
-
-Fri Dec 31 14:08:15 CET 1999 Werner Koch <wk@gnupg.de>
-
- * logger.c (log_inc_errorcount): New.
-
-Sat Dec 4 12:30:28 CET 1999 Werner Koch <wk@gnupg.de>
-
- * iobuf.c (iobuf_cancel): Broadcast the new Cancel mesaage to all
- filters.
-
-Mon Nov 22 11:14:53 CET 1999 Werner Koch <wk@gnupg.de>
-
- * strgutil.c (strcasecmp): New.
-
- * secmem.c (pool_is_mmapped): Made volatile.
-
-Sat Oct 9 20:34:41 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * Makefile.am: Removed libtool.
-
-Fri Oct 8 20:32:01 CEST 1999 Werner Koch <wk@gnupg.de>
-
- * w32reg.c: New.
- * simple-gettext.c: Use the Registry to locate the mo file.
-
- * http.c (send_request): Add support for proxys; suggested by
- Walter Hofmann.
- (http_open_document): Pass flags to http_open.
-
-Fri Sep 17 12:56:42 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * secmem.c (lock_pool): Check for ENOSYS return my mlock() on
- old SCOs.
-
- * ttyio.c (do_get): Replaced #if __MINGW32__ by #ifdef becuase
- gcc 2.95.1 assigns a floating point value (0.2) to this macro,
- which in turn can't be used in an expression.
-
-Wed Sep 15 16:22:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * simple-gettext.c: New.
-
-Wed Sep 1 15:30:44 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * argparse.c (arg_parse): Add standard options to the dump-options
- output.
-
-Tue Aug 31 17:20:44 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * strgutil (utf8_to_native): Implemented.
- (check_utf8_string): Removed.
-
- * miscutil.c (make_printable_string): Fixed possible buffer overflow.
- (print_utf8_string): New.
-
- * ttyio.c (tty_print_utf8_string): New.
-
-Mon Aug 30 20:38:33 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * secmem.c (pool_okay): declared volatile.
-
- * miscutil.c (answer_is_yes): Always check for plain "yes".
- (answer_is_yes_no_quit): Likewise.
-
- * dotlock.c (create_dotlock): Fixed segv during cleanup.
-
-Mon Jul 12 14:55:34 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * argparse.c (initialize): Init ret_xxx.
- (optfile_parse): Remove quotes from arguments.
-
-Wed Jul 7 13:08:40 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * memory.c (membug): Use if either M_DEBUG or M_GUARD is used.
-
- * miscutil.c (scan_isodatestr): New.
-
- * logger.c (g10_log_mpidump): Moved to ../mpi/mpicoder.c
- (g10_log_print_prefix): Renamed from print_prefix and made global.
-
- * Makefile.am: Support for libtool.
-
-Thu Jul 1 12:47:31 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * miscutil.c (make_printable_string): New.
-
- * strgutil.c (add_to_strlist2,append_to_strlist2): New.
-
-Tue Jun 29 21:44:25 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * secmem.c (USE_CAPABILITIES): Capabilities support (Remi).
-
-Sat Jun 26 12:15:59 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
-
- * dotlock.c (create_dotlock): s/uts/utsbuf/ cause there an Amdahl
- system with the name UTS (Dave Dykstra).
-
- * secmem.c (DEFAULT_POOLSIZE): Doubled the size.
-
-Fri Jun 18 00:18:02 CEST 1999 Michael Roth <mroth@nessie.de>
-
- * iobuf.c: file_filter() Detection of EOF on terminals
- improved/fixed (see Bug #21).
-
-Mon Jun 14 21:18:54 CEST 1999 Michael Roth <mroth@nessie.de>
-
- * ttyio.c: tty_no_terminal() new.
-
-Sat Jun 5 15:30:33 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * strgutil.c (set_native_charset): Support Latin-2
-
-Tue Jun 1 16:01:46 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * iobuf.c (iobuf_get_real_fname): Made global and now keep a
- copy of the name in the iobuf struct.
-
-Mon May 31 19:41:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * iobuf.c (file_filter,block_filter): Speed patches (Rémi).
-
-Thu May 27 09:40:55 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * miscutil.c (answer_is_yes_no_quit): New.
-
-Sun May 23 14:20:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * dotlock.c: Tweaked to make it compile under mingw32
- * http.c: Disabled for mingw32.
-
-Sat May 22 22:47:26 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * logger.c (log_set_logfile): New.
-
-Thu May 20 14:04:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * memory.c (membug): Nanu, there was a const instead of a static.
-
- * strgutil.c (trim_trailing_chars): New.
-
-Mon May 17 21:54:43 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * logger.c (g10_log_hexdump): Made 2nd arg a const.
-
-Wed Apr 28 13:03:03 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * miscutil.c (asctimestamp): Use nl_langinfo (Gaël Quéri).
-
-Sun Apr 18 10:11:28 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * argparse.c (store_alias): Disabled becuase it is not used.
-
- * ttyio.c (tty_batchmode): New
-
-Sat Mar 20 11:44:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * http.c: Swapped to includes.
-
-Tue Mar 2 16:44:57 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * strgutil.c (get_native_charset): New.
-
-Fri Feb 26 17:55:41 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * secmem.c (memblock_struct): Force align (Rémi Guyomarch)
-
-Wed Feb 24 11:07:27 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * iobuf.c (block_filter): Fixed the oscillating partial packet chunks.
-
-Fri Feb 19 15:49:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * iobuf.c (iobuf_push_filter2): New to allow transer of context
- ownership to the iobuf. Released the context where needed.
-
-Tue Feb 16 14:10:02 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * strgutil.c (add_to_strglist): Clear the new flags field
- (append_to_strglist): Ditto.
-
- * dotlock.c (read_lockfile): terminate pidstr (Michael).
-
-Wed Feb 10 17:15:39 CET 1999 Werner Koch <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
-
-Wed Jan 20 18:59:49 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * http.c (send_request): Removed double LF
-
-Tue Jan 19 19:34:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * * iobuf.c (iobuf_push_filter): Allow filters for temp streams
-
- (iobuf_write_temp): Ditto.
- (iobuf_flush_temp): New.
- (iobuf_unget_and_close_temp): Removed.
-
- * http.c (close_http_document): Renamed to http_close().
- (open_http_document): Renamed to http_open_document().
- (http_open): New.
- (http_start_data): New.
- (http_wait_response): New.
-
-
-Sun Jan 17 11:04:33 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * strgutil.c (trim_trailing_ws): New.
-
-Sat Jan 16 12:03:27 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * http.c (connect_server): Fixed stupid bug.
-
-Sat Jan 16 09:27:30 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * http.c: New
-
-
-Wed Jan 13 14:10:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * iobuf.c (iobuf_fdopen): New.
-
-Sat Jan 9 16:02:23 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * secmem.c (lock_pool): add another check that setuid() worked.
- (secmem_init): Ditto.
-
-Thu Jan 7 18:00:58 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * iobuf.c (iobuf_clear_eof): Removed.
- (underflow): Changed the eof handling.
- (iobuf_pop_filter): Made static and renamed to pop_filter.
-
- * iobuf.c (iobuf_read_line): New.
-
-Sun Jan 3 15:28:44 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * dotlock.c (make_dotlock): print another informal message.
-
- (make_dotlock): Removed the cpp checks.
-
-
-Tue Dec 29 14:41:47 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * secmem.c: Moved unistd.h out of the #ifdef
-
- * dotlock.c (make_dotlock): Sun has no SYS_NMLN
-
- * iobuf.c (iobuf_unget_and_close_temp): Reset .start
-
-Sat Dec 12 18:40:32 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * argparse.c (arg_pars): fixed opts[i] with negative index.
-
-Fri Nov 27 21:37:41 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
-
- * dotlock.c: Implemented
-
-Wed Nov 25 11:30:07 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.c (iobuf_pop_filter): Fixed sigsegv after error.
-
-Thu Nov 19 07:09:55 1998 Werner Koch <werner.koch@guug.de>
-
- * miscutil.c (strtimevalue): New.
-
-Tue Nov 10 10:01:53 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * strgutil.c (set_native_charset): New.
- (native_to_utf8): Now handles koi8-r.
-
-Tue Nov 3 16:17:56 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * strgutil.c (native_to_utf8): New.
- (utf8_to_native): New, but only as a stub.
-
- * argparse.c (optfile_parse): Trimmed spaces from args.
-
-
-Wed Oct 28 08:01:49 1998 me,,, (wk@tobold)
-
- * argparse.c (find_long_option): New.
- (arg_parse): option=value is now allowed. Add a new internal
- option "--dump-options".
-
-Thu Oct 22 16:25:49 1998 Michael Roth (mroth@nessie.de)
-
- * fileutil.c (make_basename): New.
- (make_dirname): New.
-
-Wed Oct 21 12:20:29 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * util.c (iobuf_flush): autoincreasing of a temp. iobuf
- (iobuf_temp_with_content): New.
-
-Tue Oct 13 12:40:13 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * util.c (.nofast): set this variable
-
-Wed Oct 7 19:27:50 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * memory.c (m_print_stats): New.
-
-Tue Oct 6 09:53:56 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * strgutil.c (memicmp): Add HAVE_MEMICMP.
-
-Mon Sep 21 19:45:01 1998 Werner Koch (wk@(none))
-
- * secmem.c: New flags to allow suspend/resume of warnings.
-
-Fri Sep 18 16:25:47 1998 Werner Koch (wk@(none))
-
- * secmem.c (lock_pool): Kludge for broken mlock on HPUX 10.20
-
-Tue Sep 15 17:52:21 1998 Werner Koch (wk@(none))
-
- * miscutil.c (asctimestamp): New.
-
-Mon Sep 14 09:38:18 1998 Werner Koch (wk@(none))
-
- * secmem.c (init_pool): Now mmaps /dev/zero if we do not have MAP_ANON.
-
-Wed Sep 9 13:52:28 1998 Werner Koch (wk@(none))
-
- * ttyio.c (do_get): Ctrl-D is now a valid but special character
-
-Mon Sep 7 13:52:41 1998 Werner Koch (wk@(none))
-
- * iobuf.c (get_real_fname): New and changed file_filter datastructures
- and their initialization.
-
-Tue Aug 11 15:12:35 1998 Werner Koch (wk@(none))
-
- * miscutil.c (answer_is_yes): i18ned
-
-Sat Aug 8 18:35:00 1998 Werner Koch (wk@(none))
-
- * ttyio.c (cleanup): New.
-
-Mon Aug 3 17:06:00 1998 Werner Koch (wk@(none))
-
- * secmem.c (MAP_ANON): Add a macro test
-
-Wed Jul 29 14:53:34 1998 Werner Koch (wk@(none))
-
- * ttyio.c (tty_get_answer_is_yes): New.
-
-Tue Jul 21 10:35:48 1998 Werner Koch (wk@(none))
-
- * argparse.c: New option flag to distinguish options and commands.
-
-Sat Jul 18 19:49:30 1998 Werner Koch (wk@(none))
-
- * argparse.c (arg_parse): Added -? as alias for -h
-
-Thu Jul 9 14:47:20 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * secmem.c (secmem_init): Drops setuid if called with 0.
-
-Tue Jul 7 11:49:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * logger.c (log_set_filename): New.
-
-Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * strgutil.c (append_to_strlist): New.
-
-Thu Jul 2 15:55:44 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.c (block_filter): Add writing of OP partial length headers.
-
-Fri Jun 26 10:38:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ttyio.c (do_get): all iso8859-1 characters are now allowed.
-
-Thu Jun 25 15:57:21 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * secmem.c (lock_pool): Removed left over test code.
-
-Wed Jun 10 07:39:41 1998 Werner Koch,mobil,,, (wk@tobold)
-
- * fileutil.c (compare_filenames): New.
-
- * argparse.c (arg_parse): New flag bit 6 to ignore --version
-
-Thu May 14 16:45:13 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * argparse.c (show_help): Add some formatting stuff
-
-Fri May 8 17:06:49 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * errors.c (strerror): New if !HAVE_STRERROR
-
-Mon May 4 19:48:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.c (iobuf_read): Code is now faster.
- * (iobuf_write): ditto.
-
-Mon Apr 27 11:01:32 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * strgutil.c (memicmp): New.
-
-Thu Mar 19 11:29:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * strgutil.c (memistr): Add const to return and first arg.
-
-Sat Mar 7 11:54:35 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * miscutil.c (print_string): New arg delim; changed all callers.
-
-Thu Mar 5 12:19:30 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * errors.c: New strings.
-
-Thu Mar 5 12:06:31 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.c (iobuf_open): A name of "-" now opens stdin.
- * fileutil.c (print_fname_stdout, print_fname_stdin): New.
-
-Fri Feb 27 10:20:03 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * memory.c (m_is_secure): Removed.
- * secmem.c (m_is_secure): Moved to here.
-
- * secmem.c (secmem_realloc): New.
- * memory.c (M_GUARD,EXTRA_ALIGN): New (all functions).
-
-Thu Feb 26 14:36:51 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * secmem.c (lock_pool): No error if EAGAIN is returned instead
- of EPERM.
-
-Fri Feb 20 17:43:05 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * ttyio.c [MINGW32]: Add support for mingw32.
-
-Tue Feb 17 19:43:44 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * memory.c (dump_table_at_exit): New.
-
-Mon Feb 16 10:07:28 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * argparse.c (show_version, show_help, default_strusage): Changed
- according to GNU standards.
-
-Mon Feb 16 08:58:25 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.c (iobuf_peek): New
-
-Fri Feb 13 19:34:59 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * iobuf.c (iobuf_seek): Set counters to new offset.
-
-Fri Feb 13 17:13:04 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * logger.c (log_set_name, log_get_name): New.
- (print_prefix, pgm_name): New, changed all function to make use it.
- (log_mpidump): Removed the "DBG" prefix.
- (log_hexdump): Ditto.
-
- * logger.c (printstr): Removed.
-
-Fri Feb 13 15:14:13 1998 Werner Koch (wk@isil.d.shuttle.de)
-
- * argparse.c (show_help): New '\v' kludge.
-
-
-
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-
diff --git a/util/Makefile.am b/util/Makefile.am
deleted file mode 100644
index a8d40da2d..000000000
--- a/util/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-#
-# This file is part of GnuPG.
-#
-# GnuPG is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# GnuPG is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-## Process this file with automake to produce Makefile.in
-
-INCLUDES = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl
-
-noinst_LIBRARIES = libutil.a
-
-
-#libutil_a_LDFLAGS =
-libutil_a_SOURCES = g10u.c logger.c fileutil.c miscutil.c strgutil.c \
- ttyio.c argparse.c memory.c secmem.c errors.c iobuf.c \
- dotlock.c http.c simple-gettext.c w32reg.c
-
-
-http-test: http.c
- gcc -DHAVE_CONFIG_H -I. -I. -I.. $(INCLUDES) -g -Wall -DTEST \
- -o http-test http.c libutil.a ../mpi/libmpi.a @INTLLIBS@
-
-
-
diff --git a/util/argparse.c b/util/argparse.c
deleted file mode 100644
index 2ca0ff8ff..000000000
--- a/util/argparse.c
+++ /dev/null
@@ -1,1000 +0,0 @@
-/* [argparse.c wk 17.06.97] Argument Parser for option handling
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- *
- * Note: This is an independent version of the one in WkLib
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-
-#include "util.h"
-#include "i18n.h"
-
-
-/*********************************
- * @Summary arg_parse
- * #include <wk/lib.h>
- *
- * typedef struct {
- * char *argc; pointer to argc (value subject to change)
- * char ***argv; pointer to argv (value subject to change)
- * unsigned flags; Global flags (DO NOT CHANGE)
- * int err; print error about last option
- * 1 = warning, 2 = abort
- * int r_opt; return option
- * int r_type; type of return value (0 = no argument found)
- * union {
- * int ret_int;
- * long ret_long
- * ulong ret_ulong;
- * char *ret_str;
- * } r; Return values
- * struct {
- * int idx;
- * const char *last;
- * void *aliases;
- * } internal; DO NOT CHANGE
- * } ARGPARSE_ARGS;
- *
- * typedef struct {
- * int short_opt;
- * const char *long_opt;
- * unsigned flags;
- * } ARGPARSE_OPTS;
- *
- * int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts );
- *
- * @Description
- * This is my replacement for getopt(). See the example for a typical usage.
- * Global flags are:
- * Bit 0 : Do not remove options form argv
- * Bit 1 : Do not stop at last option but return other args
- * with r_opt set to -1.
- * Bit 2 : Assume options and real args are mixed.
- * Bit 3 : Do not use -- to stop option processing.
- * Bit 4 : Do not skip the first arg.
- * Bit 5 : allow usage of long option with only one dash
- * Bit 6 : ignore --version and --help
- * all other bits must be set to zero, this value is modified by the
- * function, so assume this is write only.
- * Local flags (for each option):
- * Bit 2-0 : 0 = does not take an argument
- * 1 = takes int argument
- * 2 = takes string argument
- * 3 = takes long argument
- * 4 = takes ulong argument
- * Bit 3 : argument is optional (r_type will the be set to 0)
- * Bit 4 : allow 0x etc. prefixed values.
- * Bit 7 : this is a command and not an option
- * You stop the option processing by setting opts to NULL, the function will
- * then return 0.
- * @Return Value
- * Returns the args.r_opt or 0 if ready
- * r_opt may be -2/-7 to indicate an unknown option/command.
- * @See Also
- * ArgExpand
- * @Notes
- * You do not need to process the options 'h', '--help' or '--version'
- * because this function includes standard help processing; but if you
- * specify '-h', '--help' or '--version' you have to do it yourself.
- * The option '--' stops argument processing; if bit 1 is set the function
- * continues to return normal arguments.
- * To process float args or unsigned args you must use a string args and do
- * the conversion yourself.
- * @Example
- *
- * ARGPARSE_OPTS opts[] = {
- * { 'v', "verbose", 0 },
- * { 'd', "debug", 0 },
- * { 'o', "output", 2 },
- * { 'c', "cross-ref", 2|8 },
- * { 'm', "my-option", 1|8 },
- * { 500, "have-no-short-option-for-this-long-option", 0 },
- * {0} };
- * ARGPARSE_ARGS pargs = { &argc, &argv, 0 }
- *
- * while( ArgParse( &pargs, &opts) ) {
- * switch( pargs.r_opt ) {
- * case 'v': opt.verbose++; break;
- * case 'd': opt.debug++; break;
- * case 'o': opt.outfile = pargs.r.ret_str; break;
- * case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break;
- * case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break;
- * case 500: opt.a_long_one++; break
- * default : pargs.err = 1; break; -- force warning output --
- * }
- * }
- * if( argc > 1 )
- * log_fatal( "Too many args");
- *
- */
-
-typedef struct alias_def_s *ALIAS_DEF;
-struct alias_def_s {
- ALIAS_DEF next;
- char *name; /* malloced buffer with name, \0, value */
- const char *value; /* ptr into name */
-};
-
-static int set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s);
-static void show_help(ARGPARSE_OPTS *opts, unsigned flags);
-static void show_version(void);
-
-static void
-initialize( ARGPARSE_ARGS *arg, const char *filename, unsigned *lineno )
-{
- if( !(arg->flags & (1<<15)) ) { /* initialize this instance */
- arg->internal.idx = 0;
- arg->internal.last = NULL;
- arg->internal.inarg = 0;
- arg->internal.stopped = 0;
- arg->internal.aliases = NULL;
- arg->internal.cur_alias = NULL;
- arg->err = 0;
- arg->flags |= 1<<15; /* mark initialized */
- if( *arg->argc < 0 )
- log_bug("Invalid argument for ArgParse\n");
- }
-
-
- if( arg->err ) { /* last option was erroneous */
- const char *s;
-
- if( filename ) {
- if( arg->r_opt == -6 )
- s = "%s:%u: argument not expected\n";
- else if( arg->r_opt == -5 )
- s = "%s:%u: read error\n";
- else if( arg->r_opt == -4 )
- s = "%s:%u: keyword too long\n";
- else if( arg->r_opt == -3 )
- s = "%s:%u: missing argument\n";
- else if( arg->r_opt == -7 )
- s = "%s:%u: invalid command\n";
- else if( arg->r_opt == -10 )
- s = "%s:%u: invalid alias definition\n";
- else
- s = "%s:%u: invalid option\n";
- log_error(s, filename, *lineno );
- }
- else {
- if( arg->r_opt == -3 )
- s = "Missing argument for option \"%.50s\"\n";
- else if( arg->r_opt == -6 )
- s = "Option \"%.50s\" does not expect an argument\n";
- else if( arg->r_opt == -7 )
- s = "Invalid command \"%.50s\"\n";
- else if( arg->r_opt == -8 )
- s = "Option \"%.50s\" is ambiguous\n";
- else if( arg->r_opt == -9 )
- s = "Command \"%.50s\" is ambiguous\n";
- else
- s = "Invalid option \"%.50s\"\n";
- log_error(s, arg->internal.last? arg->internal.last:"[??]" );
- }
- if( arg->err != 1 || arg->r_opt == -5 )
- exit(2);
- arg->err = 0;
- }
-
- /* clearout the return value union */
- arg->r.ret_str = NULL;
- arg->r.ret_long= 0;
-}
-
-
-static void
-store_alias( ARGPARSE_ARGS *arg, char *name, char *value )
-{
- /* TODO: replace this dummy function with a rea one
- * and fix the probelms IRIX has with (ALIAS_DEV)arg..
- * used as lvalue
- */
-#if 0
- ALIAS_DEF a = m_alloc( sizeof *a );
- a->name = name;
- a->value = value;
- a->next = (ALIAS_DEF)arg->internal.aliases;
- (ALIAS_DEF)arg->internal.aliases = a;
-#endif
-}
-
-/****************
- * Get options from a file.
- * Lines starting with '#' are comment lines.
- * Syntax is simply a keyword and the argument.
- * Valid keywords are all keywords from the long_opt list without
- * the leading dashes. The special keywords "help", "warranty" and "version"
- * are not valid here.
- * The special keyword "alias" may be used to store alias definitions,
- * which are later expanded like long options.
- * Caller must free returned strings.
- * If called with FP set to NULL command line args are parse instead.
- *
- * Q: Should we allow the syntax
- * keyword = value
- * and accept for boolean options a value of 1/0, yes/no or true/false?
- * Note: Abbreviation of options is here not allowed.
- */
-int
-optfile_parse( FILE *fp, const char *filename, unsigned *lineno,
- ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts)
-{
- int state, i, c;
- int idx=0;
- char keyword[100];
- char *buffer = NULL;
- size_t buflen = 0;
- int inverse=0;
- int in_alias=0;
-
- if( !fp ) /* same as arg_parse() in this case */
- return arg_parse( arg, opts );
-
- initialize( arg, filename, lineno );
-
- /* find the next keyword */
- state = i = 0;
- for(;;) {
- c=getc(fp);
- if( c == '\n' || c== EOF ) {
- if( c != EOF )
- ++*lineno;
- if( state == -1 )
- break;
- else if( state == 2 ) {
- keyword[i] = 0;
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) )
- break;
- idx = i;
- arg->r_opt = opts[idx].short_opt;
- if( inverse ) /* this does not have an effect, hmmm */
- arg->r_opt = -arg->r_opt;
- if( !opts[idx].short_opt ) /* unknown command/option */
- arg->r_opt = (opts[idx].flags & 256)? -7:-2;
- else if( !(opts[idx].flags & 7) ) /* does not take an arg */
- arg->r_type = 0; /* okay */
- else if( (opts[idx].flags & 8) ) /* argument is optional */
- arg->r_type = 0; /* okay */
- else /* required argument */
- arg->r_opt = -3; /* error */
- break;
- }
- else if( state == 3 ) { /* no argument found */
- if( in_alias )
- arg->r_opt = -3; /* error */
- else if( !(opts[idx].flags & 7) ) /* does not take an arg */
- arg->r_type = 0; /* okay */
- else if( (opts[idx].flags & 8) ) /* no optional argument */
- arg->r_type = 0; /* okay */
- else /* no required argument */
- arg->r_opt = -3; /* error */
- break;
- }
- else if( state == 4 ) { /* have an argument */
- if( in_alias ) {
- if( !buffer )
- arg->r_opt = -6;
- else {
- char *p;
-
- buffer[i] = 0;
- p = strpbrk( buffer, " \t" );
- if( p ) {
- *p++ = 0;
- trim_spaces( p );
- }
- if( !p || !*p ) {
- m_free( buffer );
- arg->r_opt = -10;
- }
- else {
- store_alias( arg, buffer, p );
- }
- }
- }
- else if( !(opts[idx].flags & 7) ) /* does not take an arg */
- arg->r_opt = -6; /* error */
- else {
- char *p;
- if( !buffer ) {
- keyword[i] = 0;
- buffer = m_strdup(keyword);
- }
- else
- buffer[i] = 0;
-
- trim_spaces( buffer );
- p = buffer;
- /* remove quotes if they totally enclose the
- string, and do not occur within the string */
- if( *p == '"' && p[strlen(p)-1]=='"') {
- char *p2=p;
-
- while(*(++p2))
- if(*p2=='"')
- break;
-
- if(*p2=='"' && *(p2+1)=='\0') {
- p[strlen(p)-1] = 0;
- p++;
- }
- }
- if( !set_opt_arg(arg, opts[idx].flags, p) )
- m_free(buffer);
- }
- break;
- }
- else if( c == EOF ) {
- if( ferror(fp) )
- arg->r_opt = -5; /* read error */
- else
- arg->r_opt = 0; /* eof */
- break;
- }
- state = 0;
- i = 0;
- }
- else if( state == -1 )
- ; /* skip */
- else if( !state && isspace(c) )
- ; /* skip leading white space */
- else if( !state && c == '#' )
- state = 1; /* start of a comment */
- else if( state == 1 )
- ; /* skip comments */
- else if( state == 2 && isspace(c) ) {
- keyword[i] = 0;
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) )
- break;
- idx = i;
- arg->r_opt = opts[idx].short_opt;
- if( !opts[idx].short_opt ) {
- if( !strcmp( keyword, "alias" ) ) {
- in_alias = 1;
- state = 3;
- }
- else {
- arg->r_opt = (opts[idx].flags & 256)? -7:-2;
- state = -1; /* skip rest of line and leave */
- }
- }
- else
- state = 3;
- }
- else if( state == 3 ) { /* skip leading spaces of the argument */
- if( !isspace(c) ) {
- i = 0;
- keyword[i++] = c;
- state = 4;
- }
- }
- else if( state == 4 ) { /* collect the argument */
- if( buffer ) {
- if( i < buflen-1 )
- buffer[i++] = c;
- else {
- buflen += 50;
- buffer = m_realloc(buffer, buflen);
- buffer[i++] = c;
- }
- }
- else if( i < DIM(keyword)-1 )
- keyword[i++] = c;
- else {
- buflen = DIM(keyword)+50;
- buffer = m_alloc(buflen);
- memcpy(buffer, keyword, i);
- buffer[i++] = c;
- }
- }
- else if( i >= DIM(keyword)-1 ) {
- arg->r_opt = -4; /* keyword to long */
- state = -1; /* skip rest of line and leave */
- }
- else {
- keyword[i++] = c;
- state = 2;
- }
- }
-
- return arg->r_opt;
-}
-
-
-
-static int
-find_long_option( ARGPARSE_ARGS *arg,
- ARGPARSE_OPTS *opts, const char *keyword )
-{
- int i;
- size_t n;
-
- /* Would be better if we can do a binary search, but it is not
- possible to reorder our option table because we would mess
- up our help strings - What we can do is: Build a nice option
- lookup table wehn this function is first invoked */
- if( !*keyword )
- return -1;
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) )
- return i;
- #if 0
- {
- ALIAS_DEF a;
- /* see whether it is an alias */
- for( a = args->internal.aliases; a; a = a->next ) {
- if( !strcmp( a->name, keyword) ) {
- /* todo: must parse the alias here */
- args->internal.cur_alias = a;
- return -3; /* alias available */
- }
- }
- }
- #endif
- /* not found, see whether it is an abbreviation */
- /* aliases may not be abbreviated */
- n = strlen( keyword );
- for(i=0; opts[i].short_opt; i++ ) {
- if( opts[i].long_opt && !strncmp( opts[i].long_opt, keyword, n ) ) {
- int j;
- for(j=i+1; opts[j].short_opt; j++ ) {
- if( opts[j].long_opt
- && !strncmp( opts[j].long_opt, keyword, n ) )
- return -2; /* abbreviation is ambiguous */
- }
- return i;
- }
- }
- return -1;
-}
-
-int
-arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts)
-{
- int idx;
- int argc;
- char **argv;
- char *s, *s2;
- int i;
-
- initialize( arg, NULL, NULL );
- argc = *arg->argc;
- argv = *arg->argv;
- idx = arg->internal.idx;
-
- if( !idx && argc && !(arg->flags & (1<<4)) ) { /* skip the first entry */
- argc--; argv++; idx++;
- }
-
- next_one:
- if( !argc ) { /* no more args */
- arg->r_opt = 0;
- goto leave; /* ready */
- }
-
- s = *argv;
- arg->internal.last = s;
-
- if( arg->internal.stopped && (arg->flags & (1<<1)) ) {
- arg->r_opt = -1; /* not an option but a argument */
- arg->r_type = 2;
- arg->r.ret_str = s;
- argc--; argv++; idx++; /* set to next one */
- }
- else if( arg->internal.stopped ) { /* ready */
- arg->r_opt = 0;
- goto leave;
- }
- else if( *s == '-' && s[1] == '-' ) { /* long option */
- char *argpos;
-
- arg->internal.inarg = 0;
- if( !s[2] && !(arg->flags & (1<<3)) ) { /* stop option processing */
- arg->internal.stopped = 1;
- argc--; argv++; idx++;
- goto next_one;
- }
-
- argpos = strchr( s+2, '=' );
- if( argpos )
- *argpos = 0;
- i = find_long_option( arg, opts, s+2 );
- if( argpos )
- *argpos = '=';
-
- if( i < 0 && !strcmp( "help", s+2) ) {
- if( !(arg->flags & (1<<6)) ) {
- show_help(opts, arg->flags);
- }
- }
- else if( i < 0 && !strcmp( "version", s+2) ) {
- if( !(arg->flags & (1<<6)) ) {
- show_version();
- exit(0);
- }
- }
- else if( i < 0 && !strcmp( "warranty", s+2) ) {
- puts( strusage(16) );
- exit(0);
- }
- else if( i < 0 && !strcmp( "dump-options", s+2) ) {
- for(i=0; opts[i].short_opt; i++ ) {
- if( opts[i].long_opt )
- printf( "--%s\n", opts[i].long_opt );
- }
- fputs("--dump-options\n--help\n--version\n--warranty\n", stdout );
- exit(0);
- }
-
- if( i == -2 ) /* ambiguous option */
- arg->r_opt = -8;
- else if( i == -1 ) {
- arg->r_opt = -2;
- arg->r.ret_str = s+2;
- }
- else
- arg->r_opt = opts[i].short_opt;
- if( i < 0 )
- ;
- else if( (opts[i].flags & 7) ) {
- if( argpos ) {
- s2 = argpos+1;
- if( !*s2 )
- s2 = NULL;
- }
- else
- s2 = argv[1];
- if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/
- arg->r_type = 0; /* because it is optional */
- }
- else if( !s2 ) {
- arg->r_opt = -3; /* missing argument */
- }
- else if( !argpos && *s2 == '-' && (opts[i].flags & 8) ) {
- /* the argument is optional and the next seems to be
- * an option. We do not check this possible option
- * but assume no argument */
- arg->r_type = 0;
- }
- else {
- set_opt_arg(arg, opts[i].flags, s2);
- if( !argpos ) {
- argc--; argv++; idx++; /* skip one */
- }
- }
- }
- else { /* does not take an argument */
- if( argpos )
- arg->r_type = -6; /* argument not expected */
- else
- arg->r_type = 0;
- }
- argc--; argv++; idx++; /* set to next one */
- }
- else if( (*s == '-' && s[1]) || arg->internal.inarg ) { /* short option */
- int dash_kludge = 0;
- i = 0;
- if( !arg->internal.inarg ) {
- arg->internal.inarg++;
- if( arg->flags & (1<<5) ) {
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].long_opt && !strcmp( opts[i].long_opt, s+1)) {
- dash_kludge=1;
- break;
- }
- }
- }
- s += arg->internal.inarg;
-
- if( !dash_kludge ) {
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].short_opt == *s )
- break;
- }
-
- if( !opts[i].short_opt && ( *s == 'h' || *s == '?' ) ) {
- if( !(arg->flags & (1<<6)) ) {
- show_help(opts, arg->flags);
- }
- }
-
- arg->r_opt = opts[i].short_opt;
- if( !opts[i].short_opt ) {
- arg->r_opt = (opts[i].flags & 256)? -7:-2;
- arg->internal.inarg++; /* point to the next arg */
- arg->r.ret_str = s;
- }
- else if( (opts[i].flags & 7) ) {
- if( s[1] && !dash_kludge ) {
- s2 = s+1;
- set_opt_arg(arg, opts[i].flags, s2);
- }
- else {
- s2 = argv[1];
- if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/
- arg->r_type = 0; /* because it is optional */
- }
- else if( !s2 ) {
- arg->r_opt = -3; /* missing argument */
- }
- else if( *s2 == '-' && s2[1] && (opts[i].flags & 8) ) {
- /* the argument is optional and the next seems to be
- * an option. We do not check this possible option
- * but assume no argument */
- arg->r_type = 0;
- }
- else {
- set_opt_arg(arg, opts[i].flags, s2);
- argc--; argv++; idx++; /* skip one */
- }
- }
- s = "x"; /* so that !s[1] yields false */
- }
- else { /* does not take an argument */
- arg->r_type = 0;
- arg->internal.inarg++; /* point to the next arg */
- }
- if( !s[1] || dash_kludge ) { /* no more concatenated short options */
- arg->internal.inarg = 0;
- argc--; argv++; idx++;
- }
- }
- else if( arg->flags & (1<<2) ) {
- arg->r_opt = -1; /* not an option but a argument */
- arg->r_type = 2;
- arg->r.ret_str = s;
- argc--; argv++; idx++; /* set to next one */
- }
- else {
- arg->internal.stopped = 1; /* stop option processing */
- goto next_one;
- }
-
- leave:
- *arg->argc = argc;
- *arg->argv = argv;
- arg->internal.idx = idx;
- return arg->r_opt;
-}
-
-
-
-static int
-set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s)
-{
- int base = (flags & 16)? 0 : 10;
-
- switch( arg->r_type = (flags & 7) ) {
- case 1: /* takes int argument */
- arg->r.ret_int = (int)strtol(s,NULL,base);
- return 0;
- case 3: /* takes long argument */
- arg->r.ret_long= strtol(s,NULL,base);
- return 0;
- case 4: /* takes ulong argument */
- arg->r.ret_ulong= strtoul(s,NULL,base);
- return 0;
- case 2: /* takes string argument */
- default:
- arg->r.ret_str = s;
- return 1;
- }
-}
-
-
-static size_t
-long_opt_strlen( ARGPARSE_OPTS *o )
-{
- size_t n = strlen(o->long_opt);
-
- if( o->description && *o->description == '|' ) {
- const char *s;
-
- s=o->description+1;
- if( *s != '=' )
- n++;
- for(; *s && *s != '|'; s++ )
- n++;
- }
- return n;
-}
-
-/****************
- * Print formatted help. The description string has some special
- * meanings:
- * - A description string which is "@" suppresses help output for
- * this option
- * - a description,ine which starts with a '@' and is followed by
- * any other characters is printed as is; this may be used for examples
- * ans such.
- * - A description which starts with a '|' outputs the string between this
- * bar and the next one as arguments of the long option.
- */
-static void
-show_help( ARGPARSE_OPTS *opts, unsigned flags )
-{
- const char *s;
-
- show_version();
- putchar('\n');
- s = strusage(41);
- puts(s);
- if( opts[0].description ) { /* auto format the option description */
- int i,j, indent;
- /* get max. length of long options */
- for(i=indent=0; opts[i].short_opt; i++ ) {
- if( opts[i].long_opt )
- if( !opts[i].description || *opts[i].description != '@' )
- if( (j=long_opt_strlen(opts+i)) > indent && j < 35 )
- indent = j;
- }
- /* example: " -v, --verbose Viele Sachen ausgeben" */
- indent += 10;
- if( *opts[0].description != '@' )
- puts("Options:");
- for(i=0; opts[i].short_opt; i++ ) {
- s = _( opts[i].description );
- if( s && *s== '@' && !s[1] ) /* hide this line */
- continue;
- if( s && *s == '@' ) { /* unindented comment only line */
- for(s++; *s; s++ ) {
- if( *s == '\n' ) {
- if( s[1] )
- putchar('\n');
- }
- else
- putchar(*s);
- }
- putchar('\n');
- continue;
- }
-
- j = 3;
- if( opts[i].short_opt < 256 ) {
- printf(" -%c", opts[i].short_opt );
- if( !opts[i].long_opt ) {
- if(s && *s == '|' ) {
- putchar(' '); j++;
- for(s++ ; *s && *s != '|'; s++, j++ )
- putchar(*s);
- if( *s )
- s++;
- }
- }
- }
- else
- fputs(" ", stdout);
- if( opts[i].long_opt ) {
- j += printf("%c --%s", opts[i].short_opt < 256?',':' ',
- opts[i].long_opt );
- if(s && *s == '|' ) {
- if( *++s != '=' ) {
- putchar(' ');
- j++;
- }
- for( ; *s && *s != '|'; s++, j++ )
- putchar(*s);
- if( *s )
- s++;
- }
- fputs(" ", stdout);
- j += 3;
- }
- for(;j < indent; j++ )
- putchar(' ');
- if( s ) {
- if( *s && j > indent ) {
- putchar('\n');
- for(j=0;j < indent; j++ )
- putchar(' ');
- }
- for(; *s; s++ ) {
- if( *s == '\n' ) {
- if( s[1] ) {
- putchar('\n');
- for(j=0;j < indent; j++ )
- putchar(' ');
- }
- }
- else
- putchar(*s);
- }
- }
- putchar('\n');
- }
- if( flags & 32 )
- puts("\n(A single dash may be used instead of the double ones)");
- }
- if( (s=strusage(19)) ) { /* bug reports to ... */
- putchar('\n');
- fputs(s, stdout);
- }
- fflush(stdout);
- exit(0);
-}
-
-static void
-show_version()
-{
- const char *s;
- int i;
- /* version line */
- fputs(strusage(11), stdout);
- if( (s=strusage(12)) )
- printf(" (%s)", s );
- printf(" %s\n", strusage(13) );
- /* additional version lines */
- for(i=20; i < 30; i++ )
- if( (s=strusage(i)) )
- printf("%s\n", s );
- /* copyright string */
- if( (s=strusage(14)) )
- printf("%s\n", s );
- /* copying conditions */
- if( (s=strusage(15)) )
- fputs(s, stdout);
- /* thanks */
- if( (s=strusage(18)) )
- fputs(s, stdout);
- /* additional program info */
- for(i=30; i < 40; i++ )
- if( (s=strusage(i)) )
- fputs( (const byte*)s, stdout);
- fflush(stdout);
-}
-
-
-void
-usage( int level )
-{
- if( !level ) {
- fprintf(stderr,"%s %s; %s\n", strusage(11), strusage(13),
- strusage(14) );
- fflush(stderr);
- }
- else if( level == 1 ) {
- fputs(strusage(40),stderr);
- exit(2);
- }
- else if( level == 2 ) {
- puts(strusage(41));
- exit(0);
- }
-}
-
-/* Level
- * 0: Copyright String auf stderr ausgeben
- * 1: Kurzusage auf stderr ausgeben und beenden
- * 2: Langusage auf stdout ausgeben und beenden
- * 11: name of program
- * 12: optional name of package which includes this program.
- * 13: version string
- * 14: copyright string
- * 15: Short copying conditions (with LFs)
- * 16: Long copying conditions (with LFs)
- * 17: Optional printable OS name
- * 18: Optional thanks list (with LFs)
- * 19: Bug report info
- *20..29: Additional lib version strings.
- *30..39: Additional program info (with LFs)
- * 40: short usage note (with LF)
- * 41: long usage note (with LF)
- */
-const char *
-default_strusage( int level )
-{
- const char *p = NULL;
- switch( level ) {
- case 11: p = "foo"; break;
- case 13: p = "0.0"; break;
- case 14: p = "Copyright (C) 2002 Free Software Foundation, Inc."; break;
- case 15: p =
-"This program comes with ABSOLUTELY NO WARRANTY.\n"
-"This is free software, and you are welcome to redistribute it\n"
-"under certain conditions. See the file COPYING for details.\n"; break;
- case 16: p =
-"This is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n\n"
-"It is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n";
- break;
- case 40: /* short and long usage */
- case 41: p = ""; break;
- }
-
- return p;
-}
-
-
-
-#ifdef TEST
-static struct {
- int verbose;
- int debug;
- char *outfile;
- char *crf;
- int myopt;
- int echo;
- int a_long_one;
-}opt;
-
-int
-main(int argc, char **argv)
-{
- ARGPARSE_OPTS opts[] = {
- { 'v', "verbose", 0 , "Laut sein"},
- { 'e', "echo" , 0 , "Zeile ausgeben, damit wir sehen, was wir einegegeben haben"},
- { 'd', "debug", 0 , "Debug\nfalls mal etasws\nSchief geht"},
- { 'o', "output", 2 },
- { 'c', "cross-ref", 2|8, "cross-reference erzeugen\n" },
- { 'm', "my-option", 1|8 },
- { 500, "a-long-option", 0 },
- {0} };
- ARGPARSE_ARGS pargs = { &argc, &argv, 2|4|32 };
- int i;
-
- while( ArgParse( &pargs, opts) ) {
- switch( pargs.r_opt ) {
- case -1 : printf( "arg=`%s'\n", pargs.r.ret_str); break;
- case 'v': opt.verbose++; break;
- case 'e': opt.echo++; break;
- case 'd': opt.debug++; break;
- case 'o': opt.outfile = pargs.r.ret_str; break;
- case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break;
- case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break;
- case 500: opt.a_long_one++; break;
- default : pargs.err = 1; break; /* force warning output */
- }
- }
- for(i=0; i < argc; i++ )
- printf("%3d -> (%s)\n", i, argv[i] );
- puts("Options:");
- if( opt.verbose )
- printf(" verbose=%d\n", opt.verbose );
- if( opt.debug )
- printf(" debug=%d\n", opt.debug );
- if( opt.outfile )
- printf(" outfile=`%s'\n", opt.outfile );
- if( opt.crf )
- printf(" crffile=`%s'\n", opt.crf );
- if( opt.myopt )
- printf(" myopt=%d\n", opt.myopt );
- if( opt.a_long_one )
- printf(" a-long-one=%d\n", opt.a_long_one );
- if( opt.echo )
- printf(" echo=%d\n", opt.echo );
- return 0;
-}
-#endif
-
-/**** bottom of file ****/
diff --git a/util/dotlock.c b/util/dotlock.c
deleted file mode 100644
index fac825450..000000000
--- a/util/dotlock.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/* dotlock.c - dotfile locking
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#if !defined (HAVE_DOSISH_SYSTEM)
-#include <sys/utsname.h>
-#endif
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <signal.h>
-#include "types.h"
-#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 */
- int disable; /* locking */
-};
-
-
-static volatile DOTLOCK all_lockfiles;
-static int never_lock;
-
-static int read_lockfile( const char *name );
-
-void
-disable_dotlock(void)
-{
- never_lock = 1;
-}
-
-/****************
- * 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.
- */
-DOTLOCK
-create_dotlock( const char *file_to_lock )
-{
- static int initialized;
- DOTLOCK h;
- int fd = -1;
- char pidstr[16];
- #if !defined (HAVE_DOSISH_SYSTEM)
- struct utsname utsbuf;
- #endif
- const char *nodename;
- const char *dirpart;
- int dirpartlen;
-
- if( !initialized ) {
- atexit( remove_lockfiles );
- initialized = 1;
- }
- if( !file_to_lock )
- return NULL;
-
- h = m_alloc_clear( sizeof *h );
- if( never_lock ) {
- h->disable = 1;
- #ifdef _REENTRANT
- /* fixme: aquire mutex on all_lockfiles */
- #endif
- h->next = all_lockfiles;
- all_lockfiles = h;
- return h;
- }
-
-
-#if !defined (HAVE_DOSISH_SYSTEM)
- sprintf( pidstr, "%10d\n", (int)getpid() );
- /* fixme: add the hostname to the second line (FQDN or IP addr?) */
-
- /* create a temporary file */
- if( uname( &utsbuf ) )
- nodename = "unknown";
- else
- nodename = utsbuf.nodename;
-
-#ifdef __riscos__
- {
- char *iter = (char *) nodename;
- for (; iter[0]; iter++)
- if (iter[0] == '.')
- iter[0] = '/';
- }
-#endif /* __riscos__ */
-
- if( !(dirpart = strrchr( file_to_lock, DIRSEP_C )) ) {
- dirpart = EXTSEP_S;
- dirpartlen = 1;
- }
- else {
- dirpartlen = dirpart - file_to_lock;
- dirpart = file_to_lock;
- }
-
- #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 );
-#ifndef __riscos__
- sprintf( h->tname, "%.*s/.#lk%p.%s.%d",
- dirpartlen, dirpart, h, nodename, (int)getpid() );
-#else /* __riscos__ */
- sprintf( h->tname, "%.*s.lk%p/%s/%d",
- dirpartlen, dirpart, h, nodename, (int)getpid() );
-#endif /* __riscos__ */
-
- do {
- errno = 0;
- fd = open( h->tname, O_WRONLY|O_CREAT|O_EXCL,
- S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR );
- } while( fd == -1 && errno == EINTR );
- if( fd == -1 ) {
- all_lockfiles = h->next;
- log_error( "failed to create temporary file `%s': %s\n",
- h->tname, strerror(errno));
- m_free(h->tname);
- m_free(h);
- return NULL;
- }
- if( write(fd, pidstr, 11 ) != 11 ) {
- 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) ) {
- 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;
- }
-
- #ifdef _REENTRANT
- /* release mutex */
- #endif
-#endif
- h->lockname = m_alloc( strlen(file_to_lock) + 6 );
- strcpy(stpcpy(h->lockname, file_to_lock), EXTSEP_S "lock");
- return h;
-}
-
-static int
-maybe_deadlock( DOTLOCK h )
-{
- DOTLOCK r;
-
- for( r=all_lockfiles; r; r = r->next ) {
- if( r != h && r->locked )
- return 1;
- }
- 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 )
-{
-#if defined (HAVE_DOSISH_SYSTEM)
- return 0;
-#else
- int pid;
- const char *maybe_dead="";
- int backoff=0;
-
- if( h->disable ) {
- return 0;
- }
-
- if( h->locked ) {
-#ifndef __riscos__
- log_debug("oops, `%s' is already locked\n", h->lockname );
-#endif /* !__riscos__ */
- return 0;
- }
-
- for(;;) {
-#ifndef __riscos__
- 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;
- }
-#else /* __riscos__ */
- if( !renamefile(h->tname, h->lockname) ) {
- h->locked = 1;
- return 0; /* okay */
- }
- if( errno != EEXIST ) {
- log_error( "lock not made: rename() failed: %s\n", strerror(errno) );
- return -1;
- }
-#endif /* __riscos__ */
- if( (pid = read_lockfile(h->lockname)) == -1 ) {
- if( errno != ENOENT ) {
- log_info("cannot read lockfile\n");
- return -1;
- }
- log_info( "lockfile disappeared\n");
- continue;
- }
- else if( pid == getpid() ) {
- log_info( "Oops: lock already held by us\n");
- h->locked = 1;
- return 0; /* okay */
- }
- else if( kill(pid, 0) && errno == ESRCH ) {
-#ifndef __riscos__
- 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 );
- #endif
-#else /* __riscos__ */
- /* we are *pretty* sure that the other task is dead and therefore
- we remove the other lock file */
- maybe_dead = " - probably dead - removing lock";
- unlink(h->lockname);
-#endif /* __riscos__ */
- }
- if( timeout == -1 ) {
- struct timeval tv;
- log_info( "waiting for lock (held 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++ ;
- }
- else
- return -1;
- }
- /*not reached */
-#endif
-}
-
-
-/****************
- * release a lock
- * Returns: 0 := success
- */
-int
-release_dotlock( DOTLOCK h )
-{
-#if defined (HAVE_DOSISH_SYSTEM)
- return 0;
-#else
- int pid;
-
- if( h->disable ) {
- return 0;
- }
-
- 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\n");
- return -1;
- }
- if( pid != getpid() ) {
- log_error( "release_dotlock: not our lock (pid=%d)\n", pid);
- return -1;
- }
-#ifndef __riscos__
- if( unlink( h->lockname ) ) {
- log_error( "release_dotlock: error removing lockfile `%s'",
- h->lockname);
- return -1;
- }
-#else /* __riscos__ */
- if( renamefile(h->lockname, h->tname) ) {
- log_error( "release_dotlock: error renaming lockfile `%s' to `%s'",
- h->lockname, h->tname);
- return -1;
- }
-#endif /* __riscos__ */
- /* fixme: check that the link count is now 1 */
- h->locked = 0;
- return 0;
-#endif
-}
-
-
-/****************
- * Read the lock file and return the pid, returns -1 on error.
- */
-static int
-read_lockfile( const char *name )
-{
- #if defined (HAVE_DOSISH_SYSTEM)
- return 0;
- #else
- int fd, pid;
- char pidstr[16];
-
- if( (fd = open(name, O_RDONLY)) == -1 ) {
- int e = errno;
- log_debug("error opening lockfile `%s': %s\n", name, strerror(errno) );
- errno = e;
- return -1;
- }
- if( read(fd, pidstr, 10 ) != 10 ) { /* Read 10 digits w/o newline */
- log_debug("error reading lockfile `%s'", name );
- close(fd);
- errno = 0;
- return -1;
- }
- pidstr[10] = 0; /* terminate pid string */
- close(fd);
- pid = atoi(pidstr);
-#ifndef __riscos__
- if( !pid || pid == -1 ) {
-#else /* __riscos__ */
- if( (!pid && riscos_getpid()) || pid == -1 ) {
-#endif /* __riscos__ */
- log_error("invalid pid %d in lockfile `%s'", pid, name );
- errno = 0;
- return -1;
- }
- return pid;
- #endif
-}
-
-
-void
-remove_lockfiles()
-{
- #if !defined (HAVE_DOSISH_SYSTEM)
- DOTLOCK h, h2;
-
- h = all_lockfiles;
- all_lockfiles = NULL;
-
- while( h ) {
- h2 = h->next;
- if( !h->disable ) {
- 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/errors.c b/util/errors.c
deleted file mode 100644
index 25d5a088a..000000000
--- a/util/errors.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* errors.c - error strings
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "errors.h"
-#include "i18n.h"
-
-#ifndef HAVE_STRERROR
-char *
-strerror( int n )
-{
- extern char *sys_errlist[];
- extern int sys_nerr;
- static char buf[15];
-
- if( n >= 0 && n < sys_nerr )
- return sys_errlist[n];
- strcpy( buf, "Unknown error" );
- return buf;
-}
-#endif /* !HAVE_STRERROR */
-
-const char *
-g10_errstr( int err )
-{
- static char buf[50];
- const char *p;
-
- #define X(n,s) case G10ERR_##n : p = s; break;
- switch( err ) {
- case -1: p = "eof"; break;
- case 0: p = "okay"; break;
- X(GENERAL, N_("general error"))
- X(UNKNOWN_PACKET, N_("unknown packet type"))
- X(UNKNOWN_VERSION,N_("unknown version"))
- X(PUBKEY_ALGO ,N_("unknown pubkey algorithm"))
- X(DIGEST_ALGO ,N_("unknown digest algorithm"))
- X(BAD_PUBKEY ,N_("bad public key"))
- X(BAD_SECKEY ,N_("bad secret key"))
- X(BAD_SIGN ,N_("bad signature"))
- X(CHECKSUM , N_("checksum error"))
- X(BAD_PASS , N_("bad passphrase"))
- X(NO_PUBKEY ,N_("public key not found"))
- X(CIPHER_ALGO ,N_("unknown cipher algorithm"))
- X(KEYRING_OPEN ,N_("can't open the keyring"))
- X(INVALID_PACKET ,N_("invalid packet"))
- X(INVALID_ARMOR ,N_("invalid armor"))
- X(NO_USER_ID ,N_("no such user id"))
- X(NO_SECKEY ,N_("secret key not available"))
- X(WRONG_SECKEY ,N_("wrong secret key used"))
- X(UNSUPPORTED ,N_("not supported"))
- X(BAD_KEY ,N_("bad key"))
- X(READ_FILE ,N_("file read error"))
- X(WRITE_FILE ,N_("file write error"))
- X(COMPR_ALGO ,N_("unknown compress algorithm"))
- X(OPEN_FILE ,N_("file open error"))
- X(CREATE_FILE ,N_("file create error"))
- X(PASSPHRASE ,N_("invalid passphrase"))
- X(NI_PUBKEY ,N_("unimplemented pubkey algorithm"))
- X(NI_CIPHER ,N_("unimplemented cipher algorithm"))
- X(SIG_CLASS ,N_("unknown signature class"))
- X(TRUSTDB ,N_("trust database error"))
- X(BAD_MPI ,N_("bad MPI"))
- X(RESOURCE_LIMIT ,N_("resource limit"))
- X(INV_KEYRING ,N_("invalid keyring"))
- X(BAD_CERT ,N_("bad certificate"))
- X(INV_USER_ID ,N_("malformed user id"))
- X(CLOSE_FILE ,N_("file close error"))
- X(RENAME_FILE ,N_("file rename error"))
- X(DELETE_FILE ,N_("file delete error"))
- X(UNEXPECTED ,N_("unexpected data"))
- X(TIME_CONFLICT ,N_("timestamp conflict"))
- X(WR_PUBKEY_ALGO ,N_("unusable pubkey algorithm"))
- X(FILE_EXISTS ,N_("file exists"))
- X(WEAK_KEY ,N_("weak key"))
- X(INV_ARG ,N_("invalid argument"))
- X(BAD_URI ,N_("bad URI"))
- X(INVALID_URI ,N_("unsupported URI"))
- X(NETWORK ,N_("network error"))
- X(SELFTEST_FAILED,"selftest failed")
- X(NOT_ENCRYPTED ,N_("not encrypted"))
- X(NOT_PROCESSED ,N_("not processed"))
- /* the key cannot be used for a specific usage */
- X(UNU_PUBKEY ,N_("unusable public key"))
- X(UNU_SECKEY ,N_("unusable secret key"))
- X(KEYSERVER ,N_("keyserver error"))
- default: p = buf; sprintf(buf, "g10err=%d", err); break;
- }
- #undef X
- return _(p);
-}
-
diff --git a/util/fileutil.c b/util/fileutil.c
deleted file mode 100644
index c2a2a9df2..000000000
--- a/util/fileutil.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* fileutil.c - file utilities
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <assert.h>
-#include <unistd.h>
-#ifdef __riscos__
-#include <kernel.h>
-#include <swis.h>
-#endif /* __riscos__ */
-#include "util.h"
-#include "memory.h"
-#include "ttyio.h"
-
-
-/***************
- * Extract from a given path the filename component.
- *
- */
-char *
-make_basename(const char *filepath)
-{
- char *p;
-
- if ( !(p=strrchr(filepath, DIRSEP_C)) )
- #ifdef HAVE_DRIVE_LETTERS
- if ( !(p=strrchr(filepath, '\\')) )
- if ( !(p=strrchr(filepath, ':')) )
- #endif
- {
- return m_strdup(filepath);
- }
-
- return m_strdup(p+1);
-}
-
-
-
-/***************
- * Extract from a given filename the path prepended to it.
- * If their isn't a path prepended to the filename, a dot
- * is returned ('.').
- *
- */
-char *
-make_dirname(const char *filepath)
-{
- char *dirname;
- int dirname_length;
- char *p;
-
- if ( !(p=strrchr(filepath, DIRSEP_C)) )
- #ifdef HAVE_DRIVE_LETTERS
- if ( !(p=strrchr(filepath, '\\')) )
- if ( !(p=strrchr(filepath, ':')) )
- #endif
- {
- return m_strdup(EXTSEP_S);
- }
-
- dirname_length = p-filepath;
- dirname = m_alloc(dirname_length+1);
- strncpy(dirname, filepath, dirname_length);
- dirname[dirname_length] = 0;
-
- return dirname;
-}
-
-
-
-/****************
- * Construct a filename from the NULL terminated list of parts.
- * Tilde expansion is done here.
- */
-char *
-make_filename( const char *first_part, ... )
-{
- va_list arg_ptr ;
- size_t n;
- const char *s;
-#ifndef __riscos__
- char *name, *home, *p;
-#else
- char *name, *p;
-#endif
-
- va_start( arg_ptr, first_part ) ;
- n = strlen(first_part)+1;
- while( (s=va_arg(arg_ptr, const char *)) )
- n += strlen(s) + 1;
- va_end(arg_ptr);
-
-#ifndef __riscos__
- home = NULL;
- if( *first_part == '~' && first_part[1] == DIRSEP_C
- && (home = getenv("HOME")) && *home )
- n += strlen(home);
- name = m_alloc(n);
- p = home ? stpcpy(stpcpy(name,home), first_part+1)
- : stpcpy(name, first_part);
-#else /* __riscos__ */
- name = m_alloc(n);
- p = stpcpy(name, first_part);
-#endif /* __riscos__ */
- va_start( arg_ptr, first_part ) ;
- while( (s=va_arg(arg_ptr, const char *)) )
- p = stpcpy(stpcpy(p, DIRSEP_S), s);
- va_end(arg_ptr);
-
-#ifndef __riscos__
- return name;
-#else /* __riscos__ */
- p = gstrans(name);
- m_free(name);
- return p;
-#endif /* __riscos__ */
-}
-
-
-int
-compare_filenames( const char *a, const char *b )
-{
- /* ? check whether this is an absolute filename and
- * resolve symlinks?
- */
-#ifndef __riscos__
- #ifdef HAVE_DRIVE_LETTERS
- return ascii_strcasecmp(a,b);
- #else
- return strcmp(a,b);
- #endif
-#else /* __riscos__ */
- int c = 0;
- char *abuf, *bbuf;
-
- abuf = gstrans(a);
- bbuf = gstrans(b);
-
- c = strcasecmp (abuf, bbuf);
-
- m_free(abuf);
- m_free(bbuf);
-
- return c;
-#endif /* __riscos__ */
-}
-
-
-/****************
- * A simple function to decide whether the filename is stdout
- * or a real filename.
- */
-const char *
-print_fname_stdout( const char *s )
-{
- if( !s || (*s == '-' && !s[1]) )
- return "[stdout]";
- return s;
-}
-
-
-const char *
-print_fname_stdin( const char *s )
-{
- if( !s || (*s == '-' && !s[1]) )
- return "[stdin]";
- return s;
-}
-
-/****************
- * Check if the file is compressed.
- **/
-int
-is_file_compressed( const char *s, int *ret_rc )
-{
- IOBUF a;
- byte buf[4];
- int i, rc = 0;
-
- struct magic_compress_s {
- size_t len;
- byte magic[4];
- } magic[] = {
- { 3, { 0x42, 0x5a, 0x68, 0x00 } }, /* bzip2 */
- { 3, { 0x1f, 0x8b, 0x08, 0x00 } }, /* gzip */
- { 4, { 0x50, 0x4b, 0x03, 0x04 } }, /* (pk)zip */
- };
-
- if ( !s || *s == '-' || !ret_rc )
- return 0; /* We can't check stdin or no file was given */
-
- a = iobuf_open( s );
- if ( a == NULL ) {
- *ret_rc = G10ERR_OPEN_FILE;
- return 0;
- }
-
- if ( iobuf_get_filelength( a ) < 4 ) {
- *ret_rc = 0;
- goto leave;
- }
-
- if ( iobuf_read( a, buf, 4 ) == -1 ) {
- *ret_rc = G10ERR_READ_FILE;
- goto leave;
- }
-
- for ( i = 0; i < DIM( magic ); i++ ) {
- if ( !memcmp( buf, magic[i].magic, magic[i].len ) ) {
- *ret_rc = 0;
- rc = 1;
- break;
- }
- }
-
-leave:
- iobuf_close( a );
- return rc;
-}
-
-
diff --git a/util/g10u.c b/util/g10u.c
deleted file mode 100644
index 2ce3a4e36..000000000
--- a/util/g10u.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* g10u.c - Wrapper for utility functions
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "mpi.h"
-#include "util.h"
-
-
-/* FIXME: The modules should use functions from libgcrypt */
-
-const char *g10u_revision_string(int dummy) { return "$Revision$"; }
-
-
-void *g10_malloc( size_t n ) { return m_alloc( n ); }
-void *g10_calloc( size_t n ) { return m_alloc_clear( n ); }
-void *g10_malloc_secure( size_t n ) { return m_alloc_secure( n ); }
-void *g10_calloc_secure( size_t n ) { return m_alloc_secure_clear( n ); }
-void *g10_realloc( void *a, size_t n ) { return m_realloc( a, n ); }
-void g10_free( void *p ) { m_free( p ); }
-char *g10_strdup( const char * a) { return m_strdup( a ); }
-
diff --git a/util/http.c b/util/http.c
deleted file mode 100644
index fa3d512e9..000000000
--- a/util/http.c
+++ /dev/null
@@ -1,903 +0,0 @@
-/* http.c - HTTP protocol handler
- * Copyright (C) 1999, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#ifdef __MINGW32__
- #include <windows.h>
-#else
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/time.h>
- #include <time.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <netdb.h>
-#endif
-
-#include "util.h"
-#include "iobuf.h"
-#include "i18n.h"
-
-#include "http.h"
-
-#ifdef __riscos__
- #define HTTP_PROXY_ENV "GnuPG$HttpProxy"
- #define HTTP_PROXY_ENV_PRINTABLE "<GnuPG$HttpProxy>"
-#else
- #define HTTP_PROXY_ENV "http_proxy"
- #define HTTP_PROXY_ENV_PRINTABLE "$http_proxy"
-#endif
-
-#ifdef __MINGW32__
-#define sock_close(a) closesocket(a)
-#else
-#define sock_close(a) close(a)
-#endif
-
-#define MAX_LINELEN 20000 /* max. length of a HTTP line */
-#define VALID_URI_CHARS "abcdefghijklmnopqrstuvwxyz" \
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
- "01234567890@" \
- "!\"#$%&'()*+,-./:;<=>?[\\]^_{|}~"
-
-#ifndef EAGAIN
- #define EAGAIN EWOULDBLOCK
-#endif
-
-static int parse_uri( PARSED_URI *ret_uri, const char *uri );
-static void release_parsed_uri( PARSED_URI uri );
-static int do_parse_uri( PARSED_URI uri, int only_local_part );
-static int remove_escapes( byte *string );
-static int insert_escapes( byte *buffer, const byte *string,
- const byte *special );
-static URI_TUPLE parse_tuple( byte *string );
-static int send_request( HTTP_HD hd );
-static byte *build_rel_path( PARSED_URI uri );
-static int parse_response( HTTP_HD hd );
-
-static int connect_server( const char *server, ushort port );
-static int write_server( int sock, const char *data, size_t length );
-
-#ifdef __MINGW32__
-static void
-deinit_sockets (void)
-{
- WSACleanup();
-}
-
-static void
-init_sockets (void)
-{
- static int initialized;
- static WSADATA wsdata;
-
- if (initialized)
- return;
-
- if( WSAStartup( 0x0101, &wsdata ) ) {
- log_error ("error initializing socket library: ec=%d\n",
- (int)WSAGetLastError () );
- return;
- }
- if( wsdata.wVersion < 0x0001 ) {
- log_error ("socket library version is %x.%x - but 1.1 needed\n",
- LOBYTE(wsdata.wVersion), HIBYTE(wsdata.wVersion));
- WSACleanup();
- return;
- }
- atexit ( deinit_sockets );
- initialized = 1;
-}
-#endif /*__MINGW32__*/
-
-
-int
-http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url,
- unsigned int flags )
-{
- int rc;
-
- if( !(reqtype == HTTP_REQ_GET || reqtype == HTTP_REQ_POST) )
- return G10ERR_INV_ARG;
-
- /* initialize the handle */
- memset( hd, 0, sizeof *hd );
- hd->sock = -1;
- hd->initialized = 1;
- hd->req_type = reqtype;
- hd->flags = flags;
-
- rc = parse_uri( &hd->uri, url );
- if( !rc ) {
- rc = send_request( hd );
- if( !rc ) {
- hd->fp_write = iobuf_sockopen( hd->sock , "w" );
- if( hd->fp_write )
- return 0;
- rc = G10ERR_GENERAL;
- }
- }
-
- if( !hd->fp_read && !hd->fp_write && hd->sock != -1 )
- sock_close( hd->sock );
- iobuf_close( hd->fp_read );
- iobuf_close( hd->fp_write);
- release_parsed_uri( hd->uri );
- hd->initialized = 0;
-
- return rc;
-}
-
-
-void
-http_start_data( HTTP_HD hd )
-{
- iobuf_flush ( hd->fp_write );
- if( !hd->in_data ) {
- write_server (hd->sock, "\r\n", 2);
- hd->in_data = 1;
- }
-}
-
-
-int
-http_wait_response( HTTP_HD hd, unsigned int *ret_status )
-{
- int rc;
-
- http_start_data( hd ); /* make sure that we are in the data */
-
- #if 0
- hd->sock = dup( hd->sock );
- if( hd->sock == -1 )
- return G10ERR_GENERAL;
- #endif
- iobuf_ioctl (hd->fp_write, 1, 1, NULL); /* keep the socket open */
- iobuf_close (hd->fp_write);
- hd->fp_write = NULL;
- if ( !(hd->flags & HTTP_FLAG_NO_SHUTDOWN) )
- shutdown( hd->sock, 1 );
- hd->in_data = 0;
-
- hd->fp_read = iobuf_sockopen( hd->sock , "r" );
- if( !hd->fp_read )
- return G10ERR_GENERAL;
-
- rc = parse_response( hd );
- if( !rc && ret_status )
- *ret_status = hd->status_code;
-
- return rc;
-}
-
-
-int
-http_open_document( HTTP_HD hd, const char *document, unsigned int flags )
-{
- int rc;
-
- rc = http_open( hd, HTTP_REQ_GET, document, flags );
- if( rc )
- return rc;
-
- rc = http_wait_response( hd, NULL );
- if( rc )
- http_close( hd );
-
- return rc;
-}
-
-
-
-
-void
-http_close( HTTP_HD hd )
-{
- if( !hd || !hd->initialized )
- return;
- if( !hd->fp_read && !hd->fp_write && hd->sock != -1 )
- sock_close( hd->sock );
- iobuf_close( hd->fp_read );
- iobuf_close( hd->fp_write );
- release_parsed_uri( hd->uri );
- m_free( hd->buffer );
- hd->initialized = 0;
-}
-
-
-
-/****************
- * Parse an URI and put the result into the newly allocated ret_uri.
- * The caller must always use release_parsed_uri to releases the
- * resources (even on an error).
- */
-static int
-parse_uri( PARSED_URI *ret_uri, const char *uri )
-{
- *ret_uri = m_alloc_clear( sizeof(**ret_uri) + strlen(uri) );
- strcpy( (*ret_uri)->buffer, uri );
- return do_parse_uri( *ret_uri, 0 );
-}
-
-static void
-release_parsed_uri( PARSED_URI uri )
-{
- if( uri )
- {
- URI_TUPLE r, r2;
-
- for( r = uri->query; r; r = r2 ) {
- r2 = r->next;
- m_free( r );
- }
- m_free( uri );
- }
-}
-
-static int
-do_parse_uri( PARSED_URI uri, int only_local_part )
-{
- URI_TUPLE *tail;
- char *p, *p2, *p3;
- int n;
-
- p = uri->buffer;
- n = strlen( uri->buffer );
- /* initialize all fields to an empty string or an empty list */
- uri->scheme = uri->host = uri->path = p + n;
- uri->port = 0;
- uri->params = uri->query = NULL;
-
- /* a quick validity check */
- if( strspn( p, VALID_URI_CHARS) != n )
- return G10ERR_BAD_URI; /* invalid characters found */
-
- if( !only_local_part ) {
- /* find the scheme */
- if( !(p2 = strchr( p, ':' ) ) || p2 == p )
- return G10ERR_BAD_URI; /* No scheme */
- *p2++ = 0;
- strlwr( p );
- uri->scheme = p;
- uri->port = 80;
- if( !strcmp( uri->scheme, "http" ) )
- ;
- else if( !strcmp( uri->scheme, "x-hkp" ) ) /* same as HTTP */
- uri->port = 11371;
- else
- return G10ERR_INVALID_URI; /* Unsupported scheme */
-
- p = p2;
-
- /* find the hostname */
- if( *p != '/' )
- return G10ERR_INVALID_URI; /* does not start with a slash */
-
- p++;
- if( *p == '/' ) { /* there seems to be a hostname */
- p++;
- if( (p2 = strchr(p, '/')) )
- *p2++ = 0;
- strlwr( p );
- uri->host = p;
- if( (p3=strchr( p, ':' )) ) {
- *p3++ = 0;
- uri->port = atoi( p3 );
- }
-
- uri->host = p;
- if( (n = remove_escapes( uri->host )) < 0 )
- return G10ERR_BAD_URI;
- if( n != strlen( p ) )
- return G10ERR_BAD_URI; /* hostname with a Nul in it */
- p = p2 ? p2 : NULL;
- }
- } /* end global URI part */
-
- /* parse the pathname part */
- if( !p || !*p ) /* we don't have a path */
- return 0; /* and this is okay */
-
- /* todo: here we have to check params */
-
- /* do we have a query part */
- if( (p2 = strchr( p, '?' )) )
- *p2++ = 0;
-
- uri->path = p;
- if( (n = remove_escapes( p )) < 0 )
- return G10ERR_BAD_URI;
- if( n != strlen( p ) )
- return G10ERR_BAD_URI; /* path with a Nul in it */
- p = p2 ? p2 : NULL;
-
- if( !p || !*p ) /* we don't have a query string */
- return 0; /* okay */
-
- /* now parse the query string */
- tail = &uri->query;
- for(;;) {
- URI_TUPLE elem;
-
- if( (p2 = strchr( p, '&' )) )
- *p2++ = 0;
- if( !(elem = parse_tuple( p )) )
- return G10ERR_BAD_URI;
- *tail = elem;
- tail = &elem->next;
-
- if( !p2 )
- break; /* ready */
- p = p2;
- }
-
- return 0;
-}
-
-
-
-/****************
- * Remove all %xx escapes; this is done inplace.
- * Returns: new length of the string.
- */
-static int
-remove_escapes( byte *string )
-{
- int n = 0;
- byte *p, *s;
-
- for(p=s=string; *s ; s++ ) {
- if( *s == '%' ) {
- if( s[1] && s[2] && isxdigit(s[1]) && isxdigit(s[2]) ) {
- s++;
- *p = *s >= '0' && *s <= '9' ? *s - '0' :
- *s >= 'A' && *s <= 'F' ? *s - 'A' + 10 : *s - 'a' + 10 ;
- *p <<= 4;
- s++;
- *p |= *s >= '0' && *s <= '9' ? *s - '0' :
- *s >= 'A' && *s <= 'F' ? *s - 'A' + 10 : *s - 'a' + 10 ;
- p++;
- n++;
- }
- else {
- *p++ = *s++;
- if( *s )
- *p++ = *s++;
- if( *s )
- *p++ = *s++;
- if( *s )
- *p = 0;
- return -1; /* bad URI */
- }
- }
- else
- {
- *p++ = *s;
- n++;
- }
- }
- *p = 0; /* always keep a string terminator */
- return n;
-}
-
-
-static int
-insert_escapes( byte *buffer, const byte *string, const byte *special )
-{
- int n = 0;
-
- for( ; *string; string++ ) {
- if( strchr( VALID_URI_CHARS, *string )
- && !strchr( special, *string ) ) {
- if( buffer )
- *buffer++ = *string;
- n++;
- }
- else {
- if( buffer ) {
- sprintf( buffer, "%02X", *string );
- buffer += 3;
- }
- n += 3;
- }
- }
- return n;
-}
-
-
-
-
-
-static URI_TUPLE
-parse_tuple( byte *string )
-{
- byte *p = string;
- byte *p2;
- int n;
- URI_TUPLE tuple;
-
- if( (p2 = strchr( p, '=' )) )
- *p2++ = 0;
- if( (n = remove_escapes( p )) < 0 )
- return NULL; /* bad URI */
- if( n != strlen( p ) )
- return NULL; /* name with a Nul in it */
- tuple = m_alloc_clear( sizeof *tuple );
- tuple->name = p;
- if( !p2 ) {
- /* we have only the name, so we assume an empty value string */
- tuple->value = p + strlen(p);
- tuple->valuelen = 0;
- }
- else { /* name and value */
- if( (n = remove_escapes( p2 )) < 0 ) {
- m_free( tuple );
- return NULL; /* bad URI */
- }
- tuple->value = p2;
- tuple->valuelen = n;
- }
- return tuple;
-}
-
-
-/****************
- * Send a HTTP request to the server
- * Returns 0 if the request was successful
- */
-static int
-send_request( HTTP_HD hd )
-{
- const byte *server;
- byte *request, *p;
- ushort port;
- int rc;
- const char *http_proxy = NULL;
-
- server = *hd->uri->host? hd->uri->host : "localhost";
- port = hd->uri->port? hd->uri->port : 80;
-
- if( (hd->flags & HTTP_FLAG_TRY_PROXY)
- && (http_proxy = getenv( HTTP_PROXY_ENV )) ) {
- PARSED_URI uri;
-
- rc = parse_uri( &uri, http_proxy );
- if (rc) {
- log_error("invalid " HTTP_PROXY_ENV_PRINTABLE ": %s\n",
- g10_errstr(rc));
- release_parsed_uri( uri );
- return G10ERR_NETWORK;
- }
- hd->sock = connect_server( *uri->host? uri->host : "localhost",
- uri->port? uri->port : 80 );
- release_parsed_uri( uri );
- }
- else
- hd->sock = connect_server( server, port );
-
- if( hd->sock == -1 )
- return G10ERR_NETWORK;
-
- p = build_rel_path( hd->uri );
- request = m_alloc( strlen(server) + strlen(p) + 50 );
- if( http_proxy ) {
- sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\n",
- hd->req_type == HTTP_REQ_GET ? "GET" :
- hd->req_type == HTTP_REQ_HEAD? "HEAD":
- hd->req_type == HTTP_REQ_POST? "POST": "OOPS",
- server, port, *p == '/'? "":"/", p );
- }
- else {
- sprintf( request, "%s %s%s HTTP/1.0\r\n",
- hd->req_type == HTTP_REQ_GET ? "GET" :
- hd->req_type == HTTP_REQ_HEAD? "HEAD":
- hd->req_type == HTTP_REQ_POST? "POST": "OOPS",
- *p == '/'? "":"/", p );
- }
- m_free(p);
-
- rc = write_server( hd->sock, request, strlen(request) );
- m_free( request );
-
- return rc;
-}
-
-
-
-
-/****************
- * Build the relative path from the parsed URI.
- * Minimal implementation.
- */
-static byte*
-build_rel_path( PARSED_URI uri )
-{
- URI_TUPLE r;
- byte *rel_path, *p;
- int n;
-
- /* count the needed space */
- n = insert_escapes( NULL, uri->path, "%;?&" );
- /* todo: build params */
- for( r=uri->query; r; r = r->next ) {
- n++; /* '?'/'&' */
- n += insert_escapes( NULL, r->name, "%;?&=" );
- n++; /* '='*/
- n += insert_escapes( NULL, r->value, "%;?&=" );
- }
- n++;
-
- /* now allocate and copy */
- p = rel_path = m_alloc( n );
- n = insert_escapes( p, uri->path, "%;?&" );
- p += n;
- /* todo: add params */
- for( r=uri->query; r; r = r->next ) {
- *p++ = r == uri->query? '?':'&';
- n = insert_escapes( p, r->name, "%;?&=" );
- p += n;
- *p++ = '=';
- /* todo: use valuelen */
- n = insert_escapes( p, r->value, "%;?&=" );
- p += n;
- }
- *p = 0;
- return rel_path;
-}
-
-
-
-/***********************
- * Parse the response from a server.
- * Returns: errorcode and sets some fileds in the handle
- */
-static int
-parse_response( HTTP_HD hd )
-{
- byte *line, *p, *p2;
- unsigned maxlen, len;
-
- /* Wait for the status line */
- do {
- maxlen = MAX_LINELEN;
- len = iobuf_read_line( hd->fp_read, &hd->buffer,
- &hd->buffer_size, &maxlen );
- line = hd->buffer;
- if( !maxlen )
- return -1; /* line has been truncated */
- if( !len )
- return -1; /* eof */
- } while( !*line );
-
- if( (p = strchr( line, '/')) )
- *p++ = 0;
- if( !p || strcmp( line, "HTTP" ) )
- return 0; /* assume http 0.9 */
-
- if( (p2 = strpbrk( p, " \t" ) ) ) {
- *p2++ = 0;
- p2 += strspn( p2, " \t" );
- }
- if( !p2 )
- return 0; /* assume http 0.9 */
- p = p2;
- /* todo: add HTTP version number check here */
- if( (p2 = strpbrk( p, " \t" ) ) )
- *p2++ = 0;
- if( !isdigit(p[0]) || !isdigit(p[1]) || !isdigit(p[2]) || p[3] ) {
- /* malformed HTTP statuscode - assume HTTP 0.9 */
- hd->is_http_0_9 = 1;
- hd->status_code = 200;
- return 0;
- }
- hd->status_code = atoi( p );
-
- /* skip all the header lines and wait for the empty line */
- do {
- maxlen = MAX_LINELEN;
- len = iobuf_read_line( hd->fp_read, &hd->buffer,
- &hd->buffer_size, &maxlen );
- line = hd->buffer;
- /* we ignore truncated lines */
- if( !len )
- return -1; /* eof */
- /* time lineendings */
- if( (*line == '\r' && line[1] == '\n') || *line == '\n' )
- *line = 0;
- } while( len && *line );
-
- return 0;
-}
-
-#if 0
-static int
-start_server()
-{
- struct sockaddr_in mya;
- struct sockaddr_in peer;
- int fd, client;
- fd_set rfds;
- int addrlen;
- int i;
-
- if( (fd=socket(AF_INET,SOCK_STREAM, 0)) == -1 ) {
- log_error("socket() failed: %s\n", strerror(errno));
- return -1;
- }
- i = 1;
- if( setsockopt( fd, SOL_SOCKET, SO_REUSEADDR, (byte*)&i, sizeof(i) ) )
- log_info("setsockopt(SO_REUSEADDR) failed: %s\n", strerror(errno) );
-
- mya.sin_family=AF_INET;
- memset(&mya.sin_addr, 0, sizeof(mya.sin_addr));
- mya.sin_port=htons(11371);
-
- if( bind( fd, (struct sockaddr *)&mya, sizeof(mya)) ) {
- log_error("bind to port 11371 failed: %s\n", strerror(errno) );
- sock_close( fd );
- return -1;
- }
-
- if( listen( fd, 5 ) ) {
- log_error("listen failed: %s\n", strerror(errno) );
- sock_close( fd );
- return -1;
- }
-
- for(;;) {
- FD_ZERO(&rfds);
- FD_SET( fd, &rfds );
-
- if( select( fd+1, &rfds, NULL, NULL, NULL) <= 0 )
- continue; /* ignore any errors */
-
- if( !FD_ISSET( fd, &rfds ) )
- continue;
-
- addrlen = sizeof peer;
- client = accept( fd, (struct sockaddr *)&peer, &addrlen);
- if( client == -1 )
- continue; /* oops */
-
- log_info("connect from %s\n", inet_ntoa( peer.sin_addr ) );
-
- fflush(stdout);
- fflush(stderr);
- if( !fork() ) {
- int c;
- FILE *fp;
-
- fp = fdopen( client , "r" );
- while( (c=getc(fp)) != EOF )
- putchar(c);
- fclose(fp);
- exit(0);
- }
- sock_close( client );
- }
-
-
- return 0;
-}
-#endif
-
-
-
-static int
-connect_server( const char *server, ushort port )
-{
- int sock,i=0;
- struct sockaddr_in addr;
- struct hostent *host=NULL;
- unsigned long l;
-
- memset(&addr,0,sizeof(addr));
-
- addr.sin_family = AF_INET;
- addr.sin_port = htons(port);
-
-#ifdef __MINGW32__
- init_sockets ();
-
- if((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)
- {
- log_error("error creating socket: ec=%d\n",(int)WSAGetLastError());
- return -1;
- }
-#else
- if((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
- {
- log_error("error creating socket\n");
- return -1;
- }
-#endif
-
-#ifdef __MINGW32__
- /* Win32 gethostbyname doesn't handle IP addresses internally, so we
- try inet_addr first on that platform only. */
- if((l=inet_addr(server))==SOCKET_ERROR)
-#endif
- if((host=gethostbyname(server))==NULL)
- {
-#ifdef __MINGW32__
- log_error("%s: host not found: ec=%d\n",server,(int)WSAGetLastError());
-#else
- log_error("%s: host not found\n",server);
-#endif
- sock_close(sock);
- return -1;
- }
-
- if(host)
- {
- if(host->h_addrtype != AF_INET)
- {
- log_error ("%s: unknown address family\n", server);
- sock_close(sock);
- return -1;
- }
-
- if(host->h_length != 4 )
- {
- log_error ("%s: illegal address length\n", server);
- sock_close(sock);
- return -1;
- }
-
- /* Try all A records until one responds. */
- while(host->h_addr_list[i])
- {
- memcpy(&addr.sin_addr,host->h_addr_list[i],host->h_length);
-
- if(connect(sock,(struct sockaddr *)&addr,sizeof(addr))==0)
- break;
-
- i++;
- }
-
- if(host->h_addr_list[i]==0)
- {
- sock_close(sock);
- return -1;
- }
- }
- else
- {
- memcpy(&addr.sin_addr,&l,sizeof(l));
-
- if(connect(sock,(struct sockaddr *)&addr,sizeof(addr))!=0)
- {
- sock_close(sock);
- return -1;
- }
- }
-
- return sock;
-}
-
-
-static int
-write_server( int sock, const char *data, size_t length )
-{
- int nleft;
-
- nleft = length;
- while( nleft > 0 ) {
- #ifdef __MINGW32__
- int nwritten;
-
- nwritten = send (sock, data, nleft, 0);
- if ( nwritten == SOCKET_ERROR ) {
- log_info ("write failed: ec=%d\n", (int)WSAGetLastError ());
- return G10ERR_NETWORK;
- }
- #else
- int nwritten = write( sock, data, nleft );
- if( nwritten == -1 ) {
- if( errno == EINTR )
- continue;
- if( errno == EAGAIN ) {
- struct timeval tv;
-
- tv.tv_sec = 0;
- tv.tv_usec = 50000;
- select(0, NULL, NULL, NULL, &tv);
- continue;
- }
- log_info("write failed: %s\n", strerror(errno));
- return G10ERR_NETWORK;
- }
- #endif
- nleft -=nwritten;
- data += nwritten;
- }
-
- return 0;
-}
-
-/**** Test code ****/
-#ifdef TEST
-
-int
-main(int argc, char **argv)
-{
- int rc;
- PARSED_URI uri;
- URI_TUPLE r;
- struct http_context hd;
- int c;
-
- log_set_name("http-test");
- if( argc == 1 ) {
- start_server();
- return 0;
- }
-
- if( argc != 2 ) {
- fprintf(stderr,"usage: http-test uri\n");
- return 1;
- }
- argc--; argv++;
-
- rc = parse_uri( &uri, *argv );
- if( rc ) {
- log_error("`%s': %s\n", *argv, g10_errstr(rc));
- release_parsed_uri( uri );
- return 1;
- }
-
- printf("Scheme: %s\n", uri->scheme );
- printf("Host : %s\n", uri->host );
- printf("Port : %u\n", uri->port );
- printf("Path : %s\n", uri->path );
- for( r=uri->params; r; r = r->next ) {
- printf("Params: %s=%s", r->name, r->value );
- if( strlen( r->value ) != r->valuelen )
- printf(" [real length=%d]", (int)r->valuelen );
- putchar('\n');
- }
- for( r=uri->query; r; r = r->next ) {
- printf("Query : %s=%s", r->name, r->value );
- if( strlen( r->value ) != r->valuelen )
- printf(" [real length=%d]", (int)r->valuelen );
- putchar('\n');
- }
- release_parsed_uri( uri ); uri = NULL;
-
- rc = http_open_document( &hd, *argv, 0 );
- if( rc ) {
- log_error("can't get `%s': %s\n", *argv, g10_errstr(rc));
- return 1;
- }
- log_info("open_http_document succeeded; status=%u\n", hd.status_code );
- while( (c=iobuf_get( hd.fp_read)) != -1 )
- putchar(c);
- http_close( &hd );
- return 0;
-}
-#endif /*TEST*/
diff --git a/util/iobuf.c b/util/iobuf.c
deleted file mode 100644
index a3e9ad3e6..000000000
--- a/util/iobuf.c
+++ /dev/null
@@ -1,2189 +0,0 @@
-/* iobuf.c - file handling
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#ifdef HAVE_DOSISH_SYSTEM
- #include <windows.h>
-#endif
-#ifdef __riscos__
-#include <kernel.h>
-#include <swis.h>
-#endif /* __riscos__ */
-
-#include "memory.h"
-#include "util.h"
-#include "iobuf.h"
-
-#undef FILE_FILTER_USES_STDIO
-
-#ifdef HAVE_DOSISH_SYSTEM
- #define USE_SETMODE 1
-#endif
-
-#ifdef FILE_FILTER_USES_STDIO
- #define my_fileno(a) fileno ((a))
- #define my_fopen_ro(a,b) fopen ((a),(b))
- #define my_fopen(a,b) fopen ((a),(b))
- typedef FILE *FILEP_OR_FD;
- #define INVALID_FP NULL
- #define FILEP_OR_FD_FOR_STDIN (stdin)
- #define FILEP_OR_FD_FOR_STDOUT (stdout)
- typedef struct {
- FILE *fp; /* open file handle */
- int keep_open;
- int no_cache;
- int print_only_name; /* flags indicating that fname is not a real file*/
- char fname[1]; /* name of the file */
- } file_filter_ctx_t ;
-#else
- #define my_fileno(a) (a)
- #define my_fopen_ro(a,b) fd_cache_open ((a),(b))
- #define my_fopen(a,b) direct_open ((a),(b))
- #ifdef HAVE_DOSISH_SYSTEM
- typedef HANDLE FILEP_OR_FD;
- #define INVALID_FP ((HANDLE)-1)
- #define FILEP_OR_FD_FOR_STDIN (GetStdHandle (STD_INPUT_HANDLE))
- #define FILEP_OR_FD_FOR_STDOUT (GetStdHandle (STD_OUTPUT_HANDLE))
- #undef USE_SETMODE
- #else
- typedef int FILEP_OR_FD;
- #define INVALID_FP (-1)
- #define FILEP_OR_FD_FOR_STDIN (0)
- #define FILEP_OR_FD_FOR_STDOUT (1)
- #endif
- typedef struct {
- FILEP_OR_FD fp; /* open file handle */
- int keep_open;
- int no_cache;
- int eof_seen;
- int print_only_name; /* flags indicating that fname is not a real file*/
- char fname[1]; /* name of the file */
- } file_filter_ctx_t ;
-
- struct close_cache_s {
- struct close_cache_s *next;
- FILEP_OR_FD fp;
- char fname[1];
- };
- typedef struct close_cache_s *CLOSE_CACHE;
- static CLOSE_CACHE close_cache;
-#endif
-
-#ifdef __MINGW32__
-typedef struct {
- int sock;
- int keep_open;
- int no_cache;
- int eof_seen;
- int print_only_name; /* flags indicating that fname is not a real file*/
- char fname[1]; /* name of the file */
-} sock_filter_ctx_t ;
-#endif /*__MINGW32__*/
-
-/* The first partial length header block must be of size 512
- * to make it easier (and efficienter) we use a min. block size of 512
- * for all chunks (but the last one) */
-#define OP_MIN_PARTIAL_CHUNK 512
-#define OP_MIN_PARTIAL_CHUNK_2POW 9
-
-typedef struct {
- int use;
- size_t size;
- size_t count;
- int partial; /* 1 = partial header, 2 in last partial packet */
- char *buffer; /* used for partial header */
- size_t buflen; /* used size of buffer */
- int first_c; /* of partial header (which is > 0)*/
- int eof;
-} block_filter_ctx_t;
-
-static int special_names_enabled;
-
-static int underflow(IOBUF a);
-static int translate_file_handle ( int fd, int for_write );
-
-#ifndef FILE_FILTER_USES_STDIO
-
-/*
- * Invalidate (i.e. close) a cached iobuf
- */
-static void
-fd_cache_invalidate (const char *fname)
-{
- CLOSE_CACHE cc;
-
- assert (fname);
- if( DBG_IOBUF )
- log_debug ("fd_cache_invalidate (%s)\n", fname);
-
- for (cc=close_cache; cc; cc = cc->next ) {
- if ( cc->fp != INVALID_FP && !strcmp (cc->fname, fname) ) {
- if( DBG_IOBUF )
- log_debug (" did (%s)\n", cc->fname);
- #ifdef HAVE_DOSISH_SYSTEM
- CloseHandle (cc->fp);
- #else
- close(cc->fp);
- #endif
- cc->fp = INVALID_FP;
- }
- }
-}
-
-
-
-static FILEP_OR_FD
-direct_open (const char *fname, const char *mode)
-{
-#ifdef HAVE_DOSISH_SYSTEM
- unsigned long da, cd, sm;
- HANDLE hfile;
-
- /* Note, that we do not handle all mode combinations */
-
- /* According to the ReactOS source it seems that open() of the
- * standard MSW32 crt does open the file in share mode which is
- * something new for MS applications ;-)
- */
- if ( strchr (mode, '+') ) {
- fd_cache_invalidate (fname);
- da = GENERIC_READ|GENERIC_WRITE;
- cd = OPEN_EXISTING;
- sm = FILE_SHARE_READ | FILE_SHARE_WRITE;
- }
- else if ( strchr (mode, 'w') ) {
- fd_cache_invalidate (fname);
- da = GENERIC_WRITE;
- cd = CREATE_ALWAYS;
- sm = FILE_SHARE_WRITE;
- }
- else {
- da = GENERIC_READ;
- cd = OPEN_EXISTING;
- sm = FILE_SHARE_READ;
- }
-
- hfile = CreateFile (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL);
- return hfile;
-#else
- int oflag;
- int cflag = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH;
-
- /* Note, that we do not handle all mode combinations */
- if ( strchr (mode, '+') ) {
- fd_cache_invalidate (fname);
- oflag = O_RDWR;
- }
- else if ( strchr (mode, 'w') ) {
- fd_cache_invalidate (fname);
- oflag = O_WRONLY | O_CREAT | O_TRUNC;
- }
- else {
- oflag = O_RDONLY;
- }
-#ifndef __riscos__
- return open (fname, oflag, cflag );
-#else
- {
- struct stat buf;
- int rc = stat( fname, &buf );
-
- /* Don't allow iobufs on directories */
- if( !rc && S_ISDIR(buf.st_mode) && !S_ISREG(buf.st_mode) )
- return __set_errno( EISDIR );
- else
- return open( fname, oflag, cflag );
- }
-#endif
-#endif
-}
-
-
-/*
- * Instead of closing an FD we keep it open and cache it for later reuse
- * Note that this caching strategy only works if the process does not chdir.
- */
-static void
-fd_cache_close (const char *fname, FILEP_OR_FD fp)
-{
- CLOSE_CACHE cc;
-
- assert (fp);
- if ( !fname || !*fname ) {
-#ifdef HAVE_DOSISH_SYSTEM
- CloseHandle (fp);
-#else
- close(fp);
-#endif
- if( DBG_IOBUF )
- log_debug ("fd_cache_close (%p) real\n", (void*)fp);
- return;
- }
- /* try to reuse a slot */
- for (cc=close_cache; cc; cc = cc->next ) {
- if ( cc->fp == INVALID_FP && !strcmp (cc->fname, fname) ) {
- cc->fp = fp;
- if( DBG_IOBUF )
- log_debug ("fd_cache_close (%s) used existing slot\n", fname);
- return;
- }
- }
- /* add a new one */
- if( DBG_IOBUF )
- log_debug ("fd_cache_close (%s) new slot created\n", fname);
- cc = m_alloc_clear (sizeof *cc + strlen (fname));
- strcpy (cc->fname, fname);
- cc->fp = fp;
- cc->next = close_cache;
- close_cache = cc;
-}
-
-/*
- * Do an direct_open on FNAME but first try to reuse one from the fd_cache
- */
-static FILEP_OR_FD
-fd_cache_open (const char *fname, const char *mode)
-{
- CLOSE_CACHE cc;
-
- assert (fname);
- for (cc=close_cache; cc; cc = cc->next ) {
- if ( cc->fp != INVALID_FP && !strcmp (cc->fname, fname) ) {
- FILEP_OR_FD fp = cc->fp;
- cc->fp = INVALID_FP;
- if( DBG_IOBUF )
- log_debug ("fd_cache_open (%s) using cached fp\n", fname);
- #ifdef HAVE_DOSISH_SYSTEM
- if (SetFilePointer (fp, 0, NULL, FILE_BEGIN) == 0xffffffff ) {
- log_error ("rewind file failed on handle %p: ec=%d\n",
- fp, (int)GetLastError () );
- fp = INVALID_FP;
- }
- #else
- if ( lseek (fp, 0, SEEK_SET) == (off_t)-1 ) {
- log_error("can't rewind fd %d: %s\n", fp, strerror(errno) );
- fp = INVALID_FP;
- }
- #endif
- return fp;
- }
- }
- if( DBG_IOBUF )
- log_debug ("fd_cache_open (%s) not cached\n", fname);
- return direct_open (fname, mode);
-}
-
-
-#endif /*FILE_FILTER_USES_STDIO*/
-
-
-/****************
- * Read data from a file into buf which has an allocated length of *LEN.
- * return the number of read bytes in *LEN. OPAQUE is the FILE * of
- * the stream. A is not used.
- * control may be:
- * IOBUFCTRL_INIT: called just before the function is linked into the
- * list of function. This can be used to prepare internal
- * data structures of the function.
- * IOBUFCTRL_FREE: called just before the function is removed from the
- * list of functions and can be used to release internal
- * data structures or close a file etc.
- * IOBUFCTRL_UNDERFLOW: called by iobuf_underflow to fill the buffer
- * with new stuff. *RET_LEN is the available size of the
- * buffer, and should be set to the number of bytes
- * which were put into the buffer. The function
- * returns 0 to indicate success, -1 on EOF and
- * G10ERR_xxxxx for other errors.
- *
- * IOBUFCTRL_FLUSH: called by iobuf_flush() to write out the collected stuff.
- * *RET_LAN is the number of bytes in BUF.
- *
- * IOBUFCTRL_CANCEL: send to all filters on behalf of iobuf_cancel. The
- * filter may take appropriate action on this message.
- */
-static int
-file_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len)
-{
- file_filter_ctx_t *a = opaque;
- FILEP_OR_FD f = a->fp;
- size_t size = *ret_len;
- size_t nbytes = 0;
- int rc = 0;
-
-#ifdef FILE_FILTER_USES_STDIO
- if( control == IOBUFCTRL_UNDERFLOW ) {
- assert( size ); /* need a buffer */
- if ( feof(f)) { /* On terminals you could easiely read as many EOFs as you call */
- rc = -1; /* fread() or fgetc() repeatly. Every call will block until you press */
- *ret_len = 0; /* CTRL-D. So we catch this case before we call fread() again. */
- }
- else {
- clearerr( f );
- nbytes = fread( buf, 1, size, f );
- if( feof(f) && !nbytes ) {
- rc = -1; /* okay: we can return EOF now. */
- }
- else if( ferror(f) && errno != EPIPE ) {
- log_error("%s: read error: %s\n",
- a->fname, strerror(errno));
- rc = G10ERR_READ_FILE;
- }
- *ret_len = nbytes;
- }
- }
- else if( control == IOBUFCTRL_FLUSH ) {
- if( size ) {
- clearerr( f );
- nbytes = fwrite( buf, 1, size, f );
- if( ferror(f) ) {
- log_error("%s: write error: %s\n", a->fname, strerror(errno));
- rc = G10ERR_WRITE_FILE;
- }
- }
- *ret_len = nbytes;
- }
- else if( control == IOBUFCTRL_INIT ) {
- a->keep_open = a->no_cache = 0;
- }
- else if( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "file_filter";
- }
- else if( control == IOBUFCTRL_FREE ) {
- if( f != stdin && f != stdout ) {
- if( DBG_IOBUF )
- log_debug("%s: close fd %d\n", a->fname, fileno(f) );
- if (!a->keep_open)
- fclose(f);
- }
- f = NULL;
- m_free(a); /* we can free our context now */
- }
-#else /* !stdio implementation */
-
- if( control == IOBUFCTRL_UNDERFLOW ) {
- assert( size ); /* need a buffer */
- if ( a->eof_seen) {
- rc = -1;
- *ret_len = 0;
- }
- else {
- #ifdef HAVE_DOSISH_SYSTEM
- unsigned long nread;
-
- nbytes = 0;
- if ( !ReadFile ( f, buf, size, &nread, NULL ) ) {
- int ec = (int)GetLastError ();
- if ( ec != ERROR_BROKEN_PIPE ) {
- log_error("%s: read error: ec=%d\n", a->fname, ec);
- rc = G10ERR_READ_FILE;
- }
- }
- else if ( !nread ) {
- a->eof_seen = 1;
- rc = -1;
- }
- else {
- nbytes = nread;
- }
-
- #else
-
- int n;
-
- nbytes = 0;
- do {
- n = read ( f, buf, size );
- } while (n == -1 && errno == EINTR );
- if ( n == -1 ) { /* error */
- if (errno != EPIPE) {
- log_error("%s: read error: %s\n",
- a->fname, strerror(errno));
- rc = G10ERR_READ_FILE;
- }
- }
- else if ( !n ) { /* eof */
- a->eof_seen = 1;
- rc = -1;
- }
- else {
- nbytes = n;
- }
- #endif
- *ret_len = nbytes;
- }
- }
- else if( control == IOBUFCTRL_FLUSH ) {
- if( size ) {
- #ifdef HAVE_DOSISH_SYSTEM
- byte *p = buf;
- unsigned long n;
-
- nbytes = size;
- do {
- if ( size && !WriteFile ( f, p, nbytes, &n, NULL) ) {
- int ec = (int)GetLastError ();
- log_error("%s: write error: ec=%d\n", a->fname, ec);
- rc = G10ERR_WRITE_FILE;
- break;
- }
- p += n;
- nbytes -= n;
- } while ( nbytes );
- nbytes = p - buf;
- #else
- byte *p = buf;
- int n;
-
- nbytes = size;
- do {
- do {
- n = write ( f, p, nbytes );
- } while ( n == -1 && errno == EINTR );
- if ( n > 0 ) {
- p += n;
- nbytes -= n;
- }
- } while ( n != -1 && nbytes );
- if( n == -1 ) {
- log_error("%s: write error: %s\n", a->fname, strerror(errno));
- rc = G10ERR_WRITE_FILE;
- }
- nbytes = p - buf;
- #endif
- }
- *ret_len = nbytes;
- }
- else if ( control == IOBUFCTRL_INIT ) {
- a->eof_seen = 0;
- a->keep_open = 0;
- a->no_cache = 0;
- }
- else if ( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "file_filter(fd)";
- }
- else if ( control == IOBUFCTRL_FREE ) {
- #ifdef HAVE_DOSISH_SYSTEM
- if ( f != FILEP_OR_FD_FOR_STDIN && f != FILEP_OR_FD_FOR_STDOUT ) {
- if( DBG_IOBUF )
- log_debug("%s: close handle %p\n", a->fname, f );
- if (!a->keep_open)
- fd_cache_close (a->no_cache?NULL:a->fname, f);
- }
- #else
- if ( (int)f != 0 && (int)f != 1 ) {
- if( DBG_IOBUF )
- log_debug("%s: close fd %d\n", a->fname, f );
- if (!a->keep_open)
- fd_cache_close (a->no_cache?NULL:a->fname, f);
- }
- f = INVALID_FP;
- #endif
- m_free (a); /* we can free our context now */
- }
-#endif /* !stdio implementation */
- return rc;
-}
-
-#ifdef __MINGW32__
-/* Becuase sockets are an special object under Lose32 we have to
- * use a special filter */
-static int
-sock_filter (void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len)
-{
- sock_filter_ctx_t *a = opaque;
- size_t size = *ret_len;
- size_t nbytes = 0;
- int rc = 0;
-
- if( control == IOBUFCTRL_UNDERFLOW ) {
- assert( size ); /* need a buffer */
- if ( a->eof_seen) {
- rc = -1;
- *ret_len = 0;
- }
- else {
- int nread;
-
- nread = recv ( a->sock, buf, size, 0 );
- if ( nread == SOCKET_ERROR ) {
- int ec = (int)WSAGetLastError ();
- log_error("socket read error: ec=%d\n", ec);
- rc = G10ERR_READ_FILE;
- }
- else if ( !nread ) {
- a->eof_seen = 1;
- rc = -1;
- }
- else {
- nbytes = nread;
- }
- *ret_len = nbytes;
- }
- }
- else if( control == IOBUFCTRL_FLUSH ) {
- if( size ) {
- byte *p = buf;
- int n;
-
- nbytes = size;
- do {
- n = send (a->sock, p, nbytes, 0);
- if ( n == SOCKET_ERROR ) {
- int ec = (int)WSAGetLastError ();
- log_error("socket write error: ec=%d\n", ec);
- rc = G10ERR_WRITE_FILE;
- break;
- }
- p += n;
- nbytes -= n;
- } while ( nbytes );
- nbytes = p - buf;
- }
- *ret_len = nbytes;
- }
- else if ( control == IOBUFCTRL_INIT ) {
- a->eof_seen = 0;
- a->keep_open = 0;
- a->no_cache = 0;
- }
- else if ( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "sock_filter";
- }
- else if ( control == IOBUFCTRL_FREE ) {
- if (!a->keep_open)
- closesocket (a->sock);
- m_free (a); /* we can free our context now */
- }
- return rc;
-}
-#endif /*__MINGW32__*/
-
-/****************
- * This is used to implement the block write mode.
- * Block reading is done on a byte by byte basis in readbyte(),
- * without a filter
- */
-static int
-block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len)
-{
- block_filter_ctx_t *a = opaque;
- size_t size = *ret_len;
- int c, needed, rc = 0;
- char *p;
-
- if( control == IOBUFCTRL_UNDERFLOW ) {
- size_t n=0;
-
- p = buf;
- assert( size ); /* need a buffer */
- if( a->eof ) /* don't read any further */
- rc = -1;
- while( !rc && size ) {
- if( !a->size ) { /* get the length bytes */
- if( a->partial == 2 ) {
- a->eof = 1;
- if( !n )
- rc = -1;
- break;
- }
- else if( a->partial ) {
- /* These OpenPGP introduced huffman like encoded length
- * bytes are really a mess :-( */
- if( a->first_c ) {
- c = a->first_c;
- a->first_c = 0;
- }
- else if( (c = iobuf_get(chain)) == -1 ) {
- log_error("block_filter: 1st length byte missing\n");
- rc = G10ERR_READ_FILE;
- break;
- }
- if( c < 192 ) {
- a->size = c;
- a->partial = 2;
- if( !a->size ) {
- a->eof = 1;
- if( !n )
- rc = -1;
- break;
- }
- }
- else if( c < 224 ) {
- a->size = (c - 192) * 256;
- if( (c = iobuf_get(chain)) == -1 ) {
- log_error("block_filter: 2nd length byte missing\n");
- rc = G10ERR_READ_FILE;
- break;
- }
- a->size += c + 192;
- a->partial = 2;
- if( !a->size ) {
- a->eof = 1;
- if( !n )
- rc = -1;
- break;
- }
- }
- else if( c == 255 ) {
- a->size = iobuf_get(chain) << 24;
- a->size |= iobuf_get(chain) << 16;
- a->size |= iobuf_get(chain) << 8;
- if( (c = iobuf_get(chain)) == -1 ) {
- log_error("block_filter: invalid 4 byte length\n");
- rc = G10ERR_READ_FILE;
- break;
- }
- a->size |= c;
- }
- else { /* next partial body length */
- a->size = 1 << (c & 0x1f);
- }
- /* log_debug("partial: ctx=%p c=%02x size=%u\n", a, c, a->size);*/
- }
- else { /* the gnupg partial length scheme - much better :-) */
- c = iobuf_get(chain);
- a->size = c << 8;
- c = iobuf_get(chain);
- a->size |= c;
- if( c == -1 ) {
- log_error("block_filter: error reading length info\n");
- rc = G10ERR_READ_FILE;
- }
- if( !a->size ) {
- a->eof = 1;
- if( !n )
- rc = -1;
- break;
- }
- }
- }
-
- while( !rc && size && a->size ) {
- needed = size < a->size ? size : a->size;
- c = iobuf_read( chain, p, needed );
- if( c < needed ) {
- if( c == -1 ) c = 0;
- log_error("block_filter %p: read error (size=%lu,a->size=%lu)\n",
- a, (ulong)size+c, (ulong)a->size+c);
- rc = G10ERR_READ_FILE;
- }
- else {
- size -= c;
- a->size -= c;
- p += c;
- n += c;
- }
- }
- }
- *ret_len = n;
- }
- else if( control == IOBUFCTRL_FLUSH ) {
- if( a->partial ) { /* the complicated openpgp scheme */
- size_t blen, n, nbytes = size + a->buflen;
-
- assert( a->buflen <= OP_MIN_PARTIAL_CHUNK );
- if( nbytes < OP_MIN_PARTIAL_CHUNK ) {
- /* not enough to write a partial block out; so we store it*/
- if( !a->buffer )
- a->buffer = m_alloc( OP_MIN_PARTIAL_CHUNK );
- memcpy( a->buffer + a->buflen, buf, size );
- a->buflen += size;
- }
- else { /* okay, we can write out something */
- /* do this in a loop to use the most efficient block lengths */
- p = buf;
- do {
- /* find the best matching block length - this is limited
- * by the size of the internal buffering */
- for( blen=OP_MIN_PARTIAL_CHUNK*2,
- c=OP_MIN_PARTIAL_CHUNK_2POW+1; blen <= nbytes;
- blen *=2, c++ )
- ;
- blen /= 2; c--;
- /* write the partial length header */
- assert( c <= 0x1f ); /*;-)*/
- c |= 0xe0;
- iobuf_put( chain, c );
- if( (n=a->buflen) ) { /* write stuff from the buffer */
- assert( n == OP_MIN_PARTIAL_CHUNK);
- if( iobuf_write(chain, a->buffer, n ) )
- rc = G10ERR_WRITE_FILE;
- a->buflen = 0;
- nbytes -= n;
- }
- if( (n = nbytes) > blen )
- n = blen;
- if( n && iobuf_write(chain, p, n ) )
- rc = G10ERR_WRITE_FILE;
- p += n;
- nbytes -= n;
- } while( !rc && nbytes >= OP_MIN_PARTIAL_CHUNK );
- /* store the rest in the buffer */
- if( !rc && nbytes ) {
- assert( !a->buflen );
- assert( nbytes < OP_MIN_PARTIAL_CHUNK );
- if( !a->buffer )
- a->buffer = m_alloc( OP_MIN_PARTIAL_CHUNK );
- memcpy( a->buffer, p, nbytes );
- a->buflen = nbytes;
- }
- }
- }
- else { /* the gnupg scheme (which is not openpgp compliant) */
- size_t avail, n;
-
- for(p=buf; !rc && size; ) {
- n = size;
- avail = a->size - a->count;
- if( !avail ) {
- if( n > a->size ) {
- iobuf_put( chain, (a->size >> 8) & 0xff );
- iobuf_put( chain, a->size & 0xff );
- avail = a->size;
- a->count = 0;
- }
- else {
- iobuf_put( chain, (n >> 8) & 0xff );
- iobuf_put( chain, n & 0xff );
- avail = n;
- a->count = a->size - n;
- }
- }
- if( n > avail )
- n = avail;
- if( iobuf_write(chain, p, n ) )
- rc = G10ERR_WRITE_FILE;
- a->count += n;
- p += n;
- size -= n;
- }
- }
- }
- else if( control == IOBUFCTRL_INIT ) {
- if( DBG_IOBUF )
- log_debug("init block_filter %p\n", a );
- if( a->partial )
- a->count = 0;
- else if( a->use == 1 )
- a->count = a->size = 0;
- else
- a->count = a->size; /* force first length bytes */
- a->eof = 0;
- a->buffer = NULL;
- a->buflen = 0;
- }
- else if( control == IOBUFCTRL_DESC ) {
- *(char**)buf = "block_filter";
- }
- else if( control == IOBUFCTRL_FREE ) {
- if( a->use == 2 ) { /* write the end markers */
- if( a->partial ) {
- u32 len;
- /* write out the remaining bytes without a partial header
- * the length of this header may be 0 - but if it is
- * the first block we are not allowed to use a partial header
- * and frankly we can't do so, because this length must be
- * a power of 2. This is _really_ complicated because we
- * have to check the possible length of a packet prior
- * to it's creation: a chain of filters becomes complicated
- * and we need a lot of code to handle compressed packets etc.
- * :-(((((((
- */
- /* construct header */
- len = a->buflen;
- /*log_debug("partial: remaining length=%u\n", len );*/
- if( len < 192 )
- rc = iobuf_put(chain, len );
- else if( len < 8384 ) {
- if( !(rc=iobuf_put( chain, ((len-192) / 256) + 192)) )
- rc = iobuf_put( chain, ((len-192) % 256));
- }
- else { /* use a 4 byte header */
- if( !(rc=iobuf_put( chain, 0xff )) )
- if( !(rc=iobuf_put( chain, (len >> 24)&0xff )) )
- if( !(rc=iobuf_put( chain, (len >> 16)&0xff )) )
- if( !(rc=iobuf_put( chain, (len >> 8)&0xff )))
- rc=iobuf_put( chain, len & 0xff );
- }
- if( !rc && len )
- rc = iobuf_write(chain, a->buffer, len );
- if( rc ) {
- log_error("block_filter: write error: %s\n",strerror(errno));
- rc = G10ERR_WRITE_FILE;
- }
- m_free( a->buffer ); a->buffer = NULL; a->buflen = 0;
- }
- else {
- iobuf_writebyte(chain, 0);
- iobuf_writebyte(chain, 0);
- }
- }
- else if( a->size ) {
- log_error("block_filter: pending bytes!\n");
- }
- if( DBG_IOBUF )
- log_debug("free block_filter %p\n", a );
- m_free(a); /* we can free our context now */
- }
-
- return rc;
-}
-
-
-static void
-print_chain( IOBUF a )
-{
- if( !DBG_IOBUF )
- return;
- for(; a; a = a->chain ) {
- size_t dummy_len = 0;
- const char *desc = "[none]";
-
- if( a->filter )
- a->filter( a->filter_ov, IOBUFCTRL_DESC, NULL,
- (byte*)&desc, &dummy_len );
-
- log_debug("iobuf chain: %d.%d `%s' filter_eof=%d start=%d len=%d\n",
- a->no, a->subno, desc, a->filter_eof,
- (int)a->d.start, (int)a->d.len );
- }
-}
-
-int
-iobuf_print_chain( IOBUF a )
-{
- print_chain(a);
- return 0;
-}
-
-/****************
- * Allocate a new io buffer, with no function assigned.
- * Use is the desired usage: 1 for input, 2 for output, 3 for temp buffer
- * BUFSIZE is a suggested buffer size.
- */
-IOBUF
-iobuf_alloc(int use, size_t bufsize)
-{
- IOBUF a;
- static int number=0;
-
- a = m_alloc_clear(sizeof *a);
- a->use = use;
- a->d.buf = m_alloc( bufsize );
- a->d.size = bufsize;
- a->no = ++number;
- a->subno = 0;
- a->opaque = NULL;
- a->real_fname = NULL;
- return a;
-}
-
-int
-iobuf_close ( IOBUF a )
-{
- IOBUF a2;
- size_t dummy_len=0;
- int rc=0;
-
- if( a && a->directfp ) {
- fclose( a->directfp );
- m_free( a->real_fname );
- if( DBG_IOBUF )
- log_debug("iobuf_close -> %p\n", a->directfp );
- return 0;
- }
-
- for( ; a && !rc ; a = a2 ) {
- a2 = a->chain;
- if( a->use == 2 && (rc=iobuf_flush(a)) )
- log_error("iobuf_flush failed on close: %s\n", g10_errstr(rc));
-
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: close `%s'\n", a->no, a->subno, a->desc );
- if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE,
- a->chain, NULL, &dummy_len)) )
- log_error("IOBUFCTRL_FREE failed on close: %s\n", g10_errstr(rc) );
- m_free(a->real_fname);
- if (a->d.buf) {
- memset (a->d.buf, 0, a->d.size); /* erase the buffer */
- m_free(a->d.buf);
- }
- m_free(a);
- }
- return rc;
-}
-
-int
-iobuf_cancel( IOBUF a )
-{
- const char *s;
- IOBUF a2;
- int rc;
- #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- char *remove_name = NULL;
- #endif
-
- if( a && a->use == 2 ) {
- s = iobuf_get_real_fname(a);
- if( s && *s ) {
- #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- remove_name = m_strdup ( s );
- #else
- remove(s);
- #endif
- }
- }
-
- /* send a cancel message to all filters */
- for( a2 = a; a2 ; a2 = a2->chain ) {
- size_t dummy;
- if( a2->filter )
- a2->filter( a2->filter_ov, IOBUFCTRL_CANCEL, a2->chain,
- NULL, &dummy );
- }
-
- rc = iobuf_close(a);
- #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__)
- if ( remove_name ) {
- /* Argg, MSDOS does not allow to remove open files. So
- * we have to do it here */
- remove ( remove_name );
- m_free ( remove_name );
- }
- #endif
- return rc;
-}
-
-
-/****************
- * create a temporary iobuf, which can be used to collect stuff
- * in an iobuf and later be written by iobuf_write_temp() to another
- * iobuf.
- */
-IOBUF
-iobuf_temp()
-{
- IOBUF a;
-
- a = iobuf_alloc(3, 8192 );
-
- return a;
-}
-
-IOBUF
-iobuf_temp_with_content( const char *buffer, size_t length )
-{
- IOBUF a;
-
- a = iobuf_alloc(3, length );
- memcpy( a->d.buf, buffer, length );
- a->d.len = length;
-
- return a;
-}
-
-void
-iobuf_enable_special_filenames ( int yes )
-{
- special_names_enabled = yes;
-}
-
-/*
- * see whether the filename has the for "-&nnnn", where n is a
- * non-zero number.
- * Returns this number or -1 if it is not the case.
- */
-static int
-check_special_filename ( const char *fname )
-{
- if ( special_names_enabled
- && fname && *fname == '-' && fname[1] == '&' ) {
- int i;
-
- fname += 2;
- for (i=0; isdigit (fname[i]); i++ )
- ;
- if ( !fname[i] )
- return atoi (fname);
- }
- return -1;
-}
-
-/****************
- * Create a head iobuf for reading from a file
- * returns: NULL if an error occures and sets errno
- */
-IOBUF
-iobuf_open( const char *fname )
-{
- IOBUF a;
- FILEP_OR_FD fp;
- file_filter_ctx_t *fcx;
- size_t len;
- int print_only = 0;
- int fd;
-
- if( !fname || (*fname=='-' && !fname[1]) ) {
- fp = FILEP_OR_FD_FOR_STDIN;
- #ifdef USE_SETMODE
- setmode ( my_fileno(fp) , O_BINARY );
- #endif
- fname = "[stdin]";
- print_only = 1;
- }
- else if ( (fd = check_special_filename ( fname )) != -1 )
- return iobuf_fdopen ( translate_file_handle (fd,0), "rb" );
- else if( (fp = my_fopen_ro(fname, "rb")) == INVALID_FP )
- return NULL;
- a = iobuf_alloc(1, 8192 );
- fcx = m_alloc( sizeof *fcx + strlen(fname) );
- fcx->fp = fp;
- fcx->print_only_name = print_only;
- strcpy(fcx->fname, fname );
- if( !print_only )
- a->real_fname = m_strdup( fname );
- a->filter = file_filter;
- a->filter_ov = fcx;
- file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
- file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len );
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: open `%s' fd=%d\n",
- a->no, a->subno, fname, (int)my_fileno(fcx->fp) );
-
- return a;
-}
-
-/****************
- * Create a head iobuf for reading from a file
- * returns: NULL if an error occures and sets errno
- */
-IOBUF
-iobuf_fdopen( int fd, const char *mode )
-{
- IOBUF a;
- FILEP_OR_FD fp;
- file_filter_ctx_t *fcx;
- size_t len;
-
-#ifdef FILE_FILTER_USES_STDIO
- if( !(fp = fdopen(fd, mode)) )
- return NULL;
-#else
- fp = (FILEP_OR_FD)fd;
-#endif
- a = iobuf_alloc( strchr( mode, 'w')? 2:1, 8192 );
- fcx = m_alloc( sizeof *fcx + 20 );
- fcx->fp = fp;
- fcx->print_only_name = 1;
- sprintf(fcx->fname, "[fd %d]", fd );
- a->filter = file_filter;
- a->filter_ov = fcx;
- file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
- file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len );
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: fdopen `%s'\n", a->no, a->subno, fcx->fname );
- iobuf_ioctl (a,3,1,NULL); /* disable fd caching */
- return a;
-}
-
-
-IOBUF
-iobuf_sockopen ( int fd, const char *mode )
-{
- IOBUF a;
-#ifdef __MINGW32__
- sock_filter_ctx_t *scx;
- size_t len;
-
- a = iobuf_alloc( strchr( mode, 'w')? 2:1, 8192 );
- scx = m_alloc( sizeof *scx + 25 );
- scx->sock = fd;
- scx->print_only_name = 1;
- sprintf(scx->fname, "[sock %d]", fd );
- a->filter = sock_filter;
- a->filter_ov = scx;
- sock_filter( scx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
- sock_filter( scx, IOBUFCTRL_INIT, NULL, NULL, &len );
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: sockopen `%s'\n", a->no, a->subno, scx->fname);
- iobuf_ioctl (a,3,1,NULL); /* disable fd caching */
-#else
- a = iobuf_fdopen (fd, mode);
-#endif
- return a;
-}
-
-/****************
- * create an iobuf for writing to a file; the file will be created.
- */
-IOBUF
-iobuf_create( const char *fname )
-{
- IOBUF a;
- FILEP_OR_FD fp;
- file_filter_ctx_t *fcx;
- size_t len;
- int print_only = 0;
- int fd;
-
- if( !fname || (*fname=='-' && !fname[1]) ) {
- fp = FILEP_OR_FD_FOR_STDOUT;
- #ifdef USE_SETMODE
- setmode ( my_fileno(fp) , O_BINARY );
- #endif
- fname = "[stdout]";
- print_only = 1;
- }
- else if ( (fd = check_special_filename ( fname )) != -1 )
- return iobuf_fdopen ( translate_file_handle (fd, 1), "wb" );
- else if( (fp = my_fopen(fname, "wb")) == INVALID_FP )
- return NULL;
- a = iobuf_alloc(2, 8192 );
- fcx = m_alloc( sizeof *fcx + strlen(fname) );
- fcx->fp = fp;
- fcx->print_only_name = print_only;
- strcpy(fcx->fname, fname );
- if( !print_only )
- a->real_fname = m_strdup( fname );
- a->filter = file_filter;
- a->filter_ov = fcx;
- file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
- file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len );
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: create `%s'\n", a->no, a->subno, a->desc );
-
- return a;
-}
-
-/****************
- * append to an iobuf; if the file does not exist, create it.
- * cannot be used for stdout.
- * Note: This is not used.
- */
-#if 0 /* not used */
-IOBUF
-iobuf_append( const char *fname )
-{
- IOBUF a;
- FILE *fp;
- file_filter_ctx_t *fcx;
- size_t len;
-
- if( !fname )
- return NULL;
- else if( !(fp = my_fopen(fname, "ab")) )
- return NULL;
- a = iobuf_alloc(2, 8192 );
- fcx = m_alloc( sizeof *fcx + strlen(fname) );
- fcx->fp = fp;
- strcpy(fcx->fname, fname );
- a->real_fname = m_strdup( fname );
- a->filter = file_filter;
- a->filter_ov = fcx;
- file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
- file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len );
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: append `%s'\n", a->no, a->subno, a->desc );
-
- return a;
-}
-#endif
-
-IOBUF
-iobuf_openrw( const char *fname )
-{
- IOBUF a;
- FILEP_OR_FD fp;
- file_filter_ctx_t *fcx;
- size_t len;
-
- if( !fname )
- return NULL;
- else if( (fp = my_fopen(fname, "r+b")) == INVALID_FP )
- return NULL;
- a = iobuf_alloc(2, 8192 );
- fcx = m_alloc( sizeof *fcx + strlen(fname) );
- fcx->fp = fp;
- strcpy(fcx->fname, fname );
- a->real_fname = m_strdup( fname );
- a->filter = file_filter;
- a->filter_ov = fcx;
- file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len );
- file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len );
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: openrw `%s'\n", a->no, a->subno, a->desc );
-
- return a;
-}
-
-
-int
-iobuf_ioctl ( IOBUF a, int cmd, int intval, void *ptrval )
-{
- if ( cmd == 1 ) { /* keep system filepointer/descriptor open */
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: ioctl `%s' keep=%d\n",
- a? a->no:-1, a?a->subno:-1, a?a->desc:"?", intval );
- for( ; a; a = a->chain )
- if( !a->chain && a->filter == file_filter ) {
- file_filter_ctx_t *b = a->filter_ov;
- b->keep_open = intval;
- return 0;
- }
- #ifdef __MINGW32__
- else if( !a->chain && a->filter == sock_filter ) {
- sock_filter_ctx_t *b = a->filter_ov;
- b->keep_open = intval;
- return 0;
- }
- #endif
- }
- else if ( cmd == 2 ) { /* invalidate cache */
- if( DBG_IOBUF )
- log_debug("iobuf-*.*: ioctl `%s' invalidate\n",
- ptrval? (char*)ptrval:"?");
- if ( !a && !intval && ptrval ) {
- #ifndef FILE_FILTER_USES_STDIO
- fd_cache_invalidate (ptrval);
- #endif
- return 0;
- }
- }
- else if ( cmd == 3 ) { /* disallow/allow caching */
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: ioctl `%s' no_cache=%d\n",
- a? a->no:-1, a?a->subno:-1, a?a->desc:"?", intval );
- for( ; a; a = a->chain )
- if( !a->chain && a->filter == file_filter ) {
- file_filter_ctx_t *b = a->filter_ov;
- b->no_cache = intval;
- return 0;
- }
- #ifdef __MINGW32__
- else if( !a->chain && a->filter == sock_filter ) {
- sock_filter_ctx_t *b = a->filter_ov;
- b->no_cache = intval;
- return 0;
- }
- #endif
- }
-
- return -1;
-}
-
-
-/****************
- * Register an i/o filter.
- */
-int
-iobuf_push_filter( IOBUF a,
- int (*f)(void *opaque, int control,
- IOBUF chain, byte *buf, size_t *len), void *ov )
-{
- return iobuf_push_filter2( a, f, ov, 0 );
-}
-
-int
-iobuf_push_filter2( IOBUF a,
- int (*f)(void *opaque, int control,
- IOBUF chain, byte *buf, size_t *len),
- void *ov, int rel_ov )
-{
- IOBUF b;
- size_t dummy_len=0;
- int rc=0;
-
- if( a->directfp )
- BUG();
-
- if( a->use == 2 && (rc=iobuf_flush(a)) )
- return rc;
- /* make a copy of the current stream, so that
- * A is the new stream and B the original one.
- * The contents of the buffers are transferred to the
- * new stream.
- */
- b = m_alloc(sizeof *b);
- memcpy(b, a, sizeof *b );
- /* fixme: it is stupid to keep a copy of the name at every level
- * but we need the name somewhere because the name known by file_filter
- * may have been released when we need the name of the file */
- b->real_fname = a->real_fname? m_strdup(a->real_fname):NULL;
- /* remove the filter stuff from the new stream */
- a->filter = NULL;
- a->filter_ov = NULL;
- a->filter_ov_owner = 0;
- a->filter_eof = 0;
- if( a->use == 3 )
- a->use = 2; /* make a write stream from a temp stream */
-
- if( a->use == 2 ) { /* allocate a fresh buffer for the original stream */
- b->d.buf = m_alloc( a->d.size );
- b->d.len = 0;
- b->d.start = 0;
- }
- else { /* allocate a fresh buffer for the new stream */
- a->d.buf = m_alloc( a->d.size );
- a->d.len = 0;
- a->d.start = 0;
- }
- /* disable nlimit for the new stream */
- a->ntotal = b->ntotal + b->nbytes;
- a->nlimit = a->nbytes = 0;
- a->nofast &= ~1;
- /* make a link from the new stream to the original stream */
- a->chain = b;
- a->opaque = b->opaque;
-
- /* setup the function on the new stream */
- a->filter = f;
- a->filter_ov = ov;
- a->filter_ov_owner = rel_ov;
-
- a->subno = b->subno + 1;
- f( ov, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &dummy_len );
-
- if( DBG_IOBUF ) {
- log_debug("iobuf-%d.%d: push `%s'\n", a->no, a->subno, a->desc );
- print_chain( a );
- }
-
- /* now we can initialize the new function if we have one */
- if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_INIT, a->chain,
- NULL, &dummy_len)) )
- log_error("IOBUFCTRL_INIT failed: %s\n", g10_errstr(rc) );
- return rc;
-}
-
-/****************
- * Remove an i/o filter.
- */
-int
-pop_filter( IOBUF a, int (*f)(void *opaque, int control,
- IOBUF chain, byte *buf, size_t *len), void *ov )
-{
- IOBUF b;
- size_t dummy_len=0;
- int rc=0;
-
- if( a->directfp )
- BUG();
-
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: pop `%s'\n", a->no, a->subno, a->desc );
- if( !a->filter ) { /* this is simple */
- b = a->chain;
- assert(b);
- m_free(a->d.buf);
- m_free(a->real_fname);
- memcpy(a,b, sizeof *a);
- m_free(b);
- return 0;
- }
- for(b=a ; b; b = b->chain )
- if( b->filter == f && (!ov || b->filter_ov == ov) )
- break;
- if( !b )
- log_bug("pop_filter(): filter function not found\n");
-
- /* flush this stream if it is an output stream */
- if( a->use == 2 && (rc=iobuf_flush(b)) ) {
- log_error("iobuf_flush failed in pop_filter: %s\n", g10_errstr(rc));
- return rc;
- }
- /* and tell the filter to free it self */
- if( b->filter && (rc = b->filter(b->filter_ov, IOBUFCTRL_FREE, b->chain,
- NULL, &dummy_len)) ) {
- log_error("IOBUFCTRL_FREE failed: %s\n", g10_errstr(rc) );
- return rc;
- }
- if( b->filter_ov && b->filter_ov_owner ) {
- m_free( b->filter_ov );
- b->filter_ov = NULL;
- }
-
-
- /* and see how to remove it */
- if( a == b && !b->chain )
- log_bug("can't remove the last filter from the chain\n");
- else if( a == b ) { /* remove the first iobuf from the chain */
- /* everything from b is copied to a. This is save because
- * a flush has been done on the to be removed entry
- */
- b = a->chain;
- m_free(a->d.buf);
- m_free(a->real_fname);
- memcpy(a,b, sizeof *a);
- m_free(b);
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: popped filter\n", a->no, a->subno );
- }
- else if( !b->chain ) { /* remove the last iobuf from the chain */
- log_bug("Ohh jeee, trying to remove a head filter\n");
- }
- else { /* remove an intermediate iobuf from the chain */
- log_bug("Ohh jeee, trying to remove an intermediate filter\n");
- }
-
- return rc;
-}
-
-
-/****************
- * read underflow: read more bytes into the buffer and return
- * the first byte or -1 on EOF.
- */
-static int
-underflow(IOBUF a)
-{
- size_t len;
- int rc;
-
- assert( a->d.start == a->d.len );
- if( a->use == 3 )
- return -1; /* EOF because a temp buffer can't do an underflow */
-
- if( a->filter_eof ) {
- if( a->chain ) {
- IOBUF b = a->chain;
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: pop `%s' in underflow\n",
- a->no, a->subno, a->desc );
- m_free(a->d.buf);
- m_free(a->real_fname);
- memcpy(a, b, sizeof *a);
- m_free(b);
- print_chain(a);
- }
- else
- a->filter_eof = 0; /* for the top level filter */
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: underflow: eof (due to filter eof)\n",
- a->no, a->subno );
- return -1; /* return one(!) EOF */
- }
- if( a->error ) {
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: error\n", a->no, a->subno );
- return -1;
- }
-
- if( a->directfp ) {
- FILE *fp = a->directfp;
-
- len = fread( a->d.buf, 1, a->d.size, fp);
- if( len < a->d.size ) {
- if( ferror(fp) )
- a->error = 1;
- }
- a->d.len = len;
- a->d.start = 0;
- return len? a->d.buf[a->d.start++] : -1;
- }
-
-
- if( a->filter ) {
- len = a->d.size;
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: underflow: req=%lu\n",
- a->no, a->subno, (ulong)len );
- rc = a->filter( a->filter_ov, IOBUFCTRL_UNDERFLOW, a->chain,
- a->d.buf, &len );
- if( DBG_IOBUF ) {
- log_debug("iobuf-%d.%d: underflow: got=%lu rc=%d\n",
- a->no, a->subno, (ulong)len, rc );
-/* if( a->no == 1 ) */
-/* log_hexdump (" data:", a->d.buf, len); */
- }
- if( a->use == 1 && rc == -1 ) { /* EOF: we can remove the filter */
- size_t dummy_len=0;
-
- /* and tell the filter to free itself */
- if( (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE, a->chain,
- NULL, &dummy_len)) )
- log_error("IOBUFCTRL_FREE failed: %s\n", g10_errstr(rc) );
- if( a->filter_ov && a->filter_ov_owner ) {
- m_free( a->filter_ov );
- a->filter_ov = NULL;
- }
- a->filter = NULL;
- a->desc = NULL;
- a->filter_ov = NULL;
- a->filter_eof = 1;
- if( !len && a->chain ) {
- IOBUF b = a->chain;
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: pop `%s' in underflow (!len)\n",
- a->no, a->subno, a->desc );
- m_free(a->d.buf);
- m_free(a->real_fname);
- memcpy(a,b, sizeof *a);
- m_free(b);
- print_chain(a);
- }
- }
- else if( rc )
- a->error = 1;
-
- if( !len ) {
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: underflow: eof\n", a->no, a->subno );
- return -1;
- }
- a->d.len = len;
- a->d.start = 0;
- return a->d.buf[a->d.start++];
- }
- else {
- if( DBG_IOBUF )
- log_debug("iobuf-%d.%d: underflow: eof (no filter)\n",
- a->no, a->subno );
- return -1; /* no filter; return EOF */
- }
-}
-
-
-int
-iobuf_flush(IOBUF a)
-{
- size_t len;
- int rc;
-
- if( a->directfp )
- return 0;
-
- if( a->use == 3 ) { /* increase the temp buffer */
- char *newbuf;
- size_t newsize = a->d.size + 8192;
-
- log_debug("increasing temp iobuf from %lu to %lu\n",
- (ulong)a->d.size, (ulong)newsize );
- newbuf = m_alloc( newsize );
- memcpy( newbuf, a->d.buf, a->d.len );
- m_free(a->d.buf);
- a->d.buf = newbuf;
- a->d.size = newsize;
- return 0;
- }
- else if( a->use != 2 )
- log_bug("flush on non-output iobuf\n");
- else if( !a->filter )
- log_bug("iobuf_flush: no filter\n");
- len = a->d.len;
- rc = a->filter( a->filter_ov, IOBUFCTRL_FLUSH, a->chain, a->d.buf, &len );
- if( !rc && len != a->d.len ) {
- log_info("iobuf_flush did not write all!\n");
- rc = G10ERR_WRITE_FILE;
- }
- else if( rc )
- a->error = 1;
- a->d.len = 0;
-
- return rc;
-}
-
-
-/****************
- * Read a byte from the iobuf; returns -1 on EOF
- */
-int
-iobuf_readbyte(IOBUF a)
-{
- int c;
-
- /* nlimit does not work together with unget */
- /* nbytes is also not valid! */
- if( a->unget.buf ) {
- if( a->unget.start < a->unget.len )
- return a->unget.buf[a->unget.start++];
- m_free(a->unget.buf);
- a->unget.buf = NULL;
- a->nofast &= ~2;
- }
-
- if( a->nlimit && a->nbytes >= a->nlimit )
- return -1; /* forced EOF */
-
- if( a->d.start < a->d.len ) {
- c = a->d.buf[a->d.start++];
- }
- else if( (c=underflow(a)) == -1 )
- return -1; /* EOF */
-
- a->nbytes++;
- return c;
-}
-
-
-int
-iobuf_read(IOBUF a, byte *buf, unsigned buflen )
-{
- int c, n;
-
- if( a->unget.buf || a->nlimit ) {
- /* handle special cases */
- for(n=0 ; n < buflen; n++ ) {
- if( (c = iobuf_readbyte(a)) == -1 ) {
- if( !n )
- return -1; /* eof */
- break;
- }
- else
- if( buf ) *buf = c;
- if( buf ) buf++;
- }
- return n;
- }
-
- n = 0;
- do {
- if( n < buflen && a->d.start < a->d.len ) {
- unsigned size = a->d.len - a->d.start;
- if( size > buflen - n )
- size = buflen - n;
- if( buf )
- memcpy( buf, a->d.buf + a->d.start, size );
- n += size;
- a->d.start += size;
- if( buf )
- buf += size;
- }
- if( n < buflen ) {
- if( (c=underflow(a)) == -1 ) {
- a->nbytes += n;
- return n? n : -1/*EOF*/;
- }
- if( buf )
- *buf++ = c;
- n++;
- }
- } while( n < buflen );
- a->nbytes += n;
- return n;
-}
-
-
-/****************
- * Have a look at the iobuf.
- * NOTE: This only works in special cases.
- */
-int
-iobuf_peek(IOBUF a, byte *buf, unsigned buflen )
-{
- int n=0;
-
- if( a->filter_eof )
- return -1;
-
- if( !(a->d.start < a->d.len) ) {
- if( underflow(a) == -1 )
- return -1;
- /* and unget this character */
- assert(a->d.start == 1);
- a->d.start = 0;
- }
-
- for(n=0 ; n < buflen && (a->d.start+n) < a->d.len ; n++, buf++ )
- *buf = a->d.buf[n];
- return n;
-}
-
-
-
-
-int
-iobuf_writebyte(IOBUF a, unsigned c)
-{
-
- if( a->directfp )
- BUG();
-
- if( a->d.len == a->d.size )
- if( iobuf_flush(a) )
- return -1;
-
- assert( a->d.len < a->d.size );
- a->d.buf[a->d.len++] = c;
- return 0;
-}
-
-
-int
-iobuf_write(IOBUF a, byte *buf, unsigned buflen )
-{
-
- if( a->directfp )
- BUG();
-
- do {
- if( buflen && a->d.len < a->d.size ) {
- unsigned size = a->d.size - a->d.len;
- if( size > buflen ) size = buflen;
- memcpy( a->d.buf + a->d.len, buf, size );
- buflen -= size;
- buf += size;
- a->d.len += size;
- }
- if( buflen ) {
- if( iobuf_flush(a) )
- return -1;
- }
- } while( buflen );
- return 0;
-}
-
-
-int
-iobuf_writestr(IOBUF a, const char *buf )
-{
- for( ; *buf; buf++ )
- if( iobuf_writebyte(a, *buf) )
- return -1;
- return 0;
-}
-
-
-
-/****************
- * copy the contents of TEMP to A.
- */
-int
-iobuf_write_temp( IOBUF a, IOBUF temp )
-{
- while( temp->chain )
- pop_filter( temp, temp->filter, NULL );
- return iobuf_write(a, temp->d.buf, temp->d.len );
-}
-
-/****************
- * copy the contents of the temp io stream to BUFFER.
- */
-size_t
-iobuf_temp_to_buffer( IOBUF a, byte *buffer, size_t buflen )
-{
- size_t n = a->d.len;
-
- if( n > buflen )
- n = buflen;
- memcpy( buffer, a->d.buf, n );
- return n;
-}
-
-
-/****************
- * Call this function to terminate processing of the temp stream
- * without closing it. This removes all filters from the stream
- * makes sure that iobuf_get_temp_{buffer,length}() returns correct
- * values.
- */
-void
-iobuf_flush_temp( IOBUF temp )
-{
- while( temp->chain )
- pop_filter( temp, temp->filter, NULL );
-}
-
-
-/****************
- * Set a limit on how many bytes may be read from the input stream A.
- * Setting the limit to 0 disables this feature.
- */
-void
-iobuf_set_limit( IOBUF a, off_t nlimit )
-{
- if( nlimit )
- a->nofast |= 1;
- else
- a->nofast &= ~1;
- a->nlimit = nlimit;
- a->ntotal += a->nbytes;
- a->nbytes = 0;
-}
-
-
-
-/****************
- * Return the length of an open file
- */
-off_t
-iobuf_get_filelength( IOBUF a )
-{
- struct stat st;
-
- if( a->directfp ) {
- FILE *fp = a->directfp;
-
- if( !fstat(fileno(fp), &st) )
- return st.st_size;
- log_error("fstat() failed: %s\n", strerror(errno) );
- return 0;
- }
-
- /* Hmmm: file_filter may have already been removed */
- for( ; a; a = a->chain )
- if( !a->chain && a->filter == file_filter ) {
- file_filter_ctx_t *b = a->filter_ov;
- FILEP_OR_FD fp = b->fp;
-
- #if defined(HAVE_DOSISH_SYSTEM) && !defined(FILE_FILTER_USES_STDIO)
- ulong size;
-
- if ( (size=GetFileSize (fp, NULL)) != 0xffffffff )
- return size;
- log_error ("GetFileSize for handle %p failed: ec=%d\n",
- fp, (int)GetLastError () );
- #else
- if( !fstat(my_fileno(fp), &st) )
- return st.st_size;
- log_error("fstat() failed: %s\n", strerror(errno) );
- #endif
- break;
- }
-
- return 0;
-}
-
-/****************
- * Tell the file position, where the next read will take place
- */
-off_t
-iobuf_tell( IOBUF a )
-{
- return a->ntotal + a->nbytes;
-}
-
-
-#if !defined(HAVE_FSEEKO) && !defined(fseeko)
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-#ifndef LONG_MAX
-# define LONG_MAX ((long) ((unsigned long) -1 >> 1))
-#endif
-#ifndef LONG_MIN
-# define LONG_MIN (-1 - LONG_MAX)
-#endif
-
-/****************
- * A substitute for fseeko, for hosts that don't have it.
- */
-static int
-fseeko( FILE *stream, off_t newpos, int whence )
-{
- while( newpos != (long) newpos ) {
- long pos = newpos < 0 ? LONG_MIN : LONG_MAX;
- if( fseek( stream, pos, whence ) != 0 )
- return -1;
- newpos -= pos;
- whence = SEEK_CUR;
- }
- return fseek( stream, (long)newpos, whence );
-}
-#endif
-
-/****************
- * This is a very limited implementation. It simply discards all internal
- * buffering and removes all filters but the first one.
- */
-int
-iobuf_seek( IOBUF a, off_t newpos )
-{
- file_filter_ctx_t *b = NULL;
-
- if( a->directfp ) {
- FILE *fp = a->directfp;
- if( fseeko( fp, newpos, SEEK_SET ) ) {
- log_error("can't seek: %s\n", strerror(errno) );
- return -1;
- }
- clearerr(fp);
- }
- else {
- for( ; a; a = a->chain ) {
- if( !a->chain && a->filter == file_filter ) {
- b = a->filter_ov;
- break;
- }
- }
- if( !a )
- return -1;
-#ifdef FILE_FILTER_USES_STDIO
- if( fseeko( b->fp, newpos, SEEK_SET ) ) {
- log_error("can't fseek: %s\n", strerror(errno) );
- return -1;
- }
-#else
- #ifdef HAVE_DOSISH_SYSTEM
- if (SetFilePointer (b->fp, newpos, NULL, FILE_BEGIN) == 0xffffffff ) {
- log_error ("SetFilePointer failed on handle %p: ec=%d\n",
- b->fp, (int)GetLastError () );
- return -1;
- }
- #else
- if ( lseek (b->fp, newpos, SEEK_SET) == (off_t)-1 ) {
- log_error("can't lseek: %s\n", strerror(errno) );
- return -1;
- }
- #endif
-#endif
- }
- a->d.len = 0; /* discard buffer */
- a->d.start = 0;
- a->nbytes = 0;
- a->nlimit = 0;
- a->nofast &= ~1;
- a->ntotal = newpos;
- a->error = 0;
- /* remove filters, but the last */
- if( a->chain )
- log_debug("pop_filter called in iobuf_seek - please report\n");
- while( a->chain )
- pop_filter( a, a->filter, NULL );
-
- return 0;
-}
-
-
-
-
-
-
-/****************
- * Retrieve the real filename
- */
-const char *
-iobuf_get_real_fname( IOBUF a )
-{
- if( a->real_fname )
- return a->real_fname;
-
- /* the old solution */
- for( ; a; a = a->chain )
- if( !a->chain && a->filter == file_filter ) {
- file_filter_ctx_t *b = a->filter_ov;
- return b->print_only_name? NULL : b->fname;
- }
-
- return NULL;
-}
-
-
-/****************
- * Retrieve the filename
- */
-const char *
-iobuf_get_fname( IOBUF a )
-{
- for( ; a; a = a->chain )
- if( !a->chain && a->filter == file_filter ) {
- file_filter_ctx_t *b = a->filter_ov;
- return b->fname;
- }
-
- return NULL;
-}
-
-/****************
- * Start the block write mode, see rfc1991.new for details.
- * A value of 0 for N stops this mode (flushes and writes
- * the end marker)
- */
-void
-iobuf_set_block_mode( IOBUF a, size_t n )
-{
- block_filter_ctx_t *ctx = m_alloc_clear( sizeof *ctx );
-
- assert( a->use == 1 || a->use == 2 );
- ctx->use = a->use;
- if( !n ) {
- if( a->use == 1 )
- log_debug("pop_filter called in set_block_mode - please report\n");
- pop_filter(a, block_filter, NULL );
- }
- else {
- ctx->size = n; /* only needed for use 2 */
- iobuf_push_filter(a, block_filter, ctx );
- }
-}
-
-/****************
- * enable partial block mode as described in the OpenPGP draft.
- * LEN is the first length byte on read, but ignored on writes.
- */
-void
-iobuf_set_partial_block_mode( IOBUF a, size_t len )
-{
- block_filter_ctx_t *ctx = m_alloc_clear( sizeof *ctx );
-
- assert( a->use == 1 || a->use == 2 );
- ctx->use = a->use;
- if( !len ) {
- if( a->use == 1 )
- log_debug("pop_filter called in set_partial_block_mode"
- " - please report\n");
- pop_filter(a, block_filter, NULL );
- }
- else {
- ctx->partial = 1;
- ctx->size = 0;
- ctx->first_c = len;
- iobuf_push_filter(a, block_filter, ctx );
- }
-}
-
-
-/****************
- * Checks whether the stream is in block mode
- * Note: This does not work if other filters are pushed on the stream.
- */
-int
-iobuf_in_block_mode( IOBUF a )
-{
- if( a && a->filter == block_filter )
- return 1; /* yes */
- return 0; /* no */
-}
-
-
-/****************
- * Same as fgets() but if the buffer is too short a larger one will
- * be allocated up to some limit *max_length.
- * A line is considered a byte stream ending in a LF.
- * Returns the length of the line. EOF is indicated by a line of
- * length zero. The last LF may be missing due to an EOF.
- * is max_length is zero on return, the line has been truncated.
- *
- * Note: The buffer is allocated with enough space to append a CR,LF,EOL
- */
-unsigned
-iobuf_read_line( IOBUF a, byte **addr_of_buffer,
- unsigned *length_of_buffer, unsigned *max_length )
-{
- int c;
- char *buffer = *addr_of_buffer;
- unsigned length = *length_of_buffer;
- unsigned nbytes = 0;
- unsigned maxlen = *max_length;
- char *p;
-
- if( !buffer ) { /* must allocate a new buffer */
- length = 256;
- buffer = m_alloc( length );
- *addr_of_buffer = buffer;
- *length_of_buffer = length;
- }
-
- length -= 3; /* reserve 3 bytes (cr,lf,eol) */
- p = buffer;
- while( (c=iobuf_get(a)) != -1 ) {
- if( nbytes == length ) { /* increase the buffer */
- if( length > maxlen ) { /* this is out limit */
- /* skip the rest of the line */
- while( c != '\n' && (c=iobuf_get(a)) != -1 )
- ;
- *p++ = '\n'; /* always append a LF (we have reserved space) */
- nbytes++;
- *max_length = 0; /* indicate truncation */
- break;
- }
- length += 3; /* correct for the reserved byte */
- length += length < 1024? 256 : 1024;
- buffer = m_realloc( buffer, length );
- *addr_of_buffer = buffer;
- *length_of_buffer = length;
- length -= 3; /* and reserve again */
- p = buffer + nbytes;
- }
- *p++ = c;
- nbytes++;
- if( c == '\n' )
- break;
- }
- *p = 0; /* make sure the line is a string */
-
- return nbytes;
-}
-
-/* This is the non iobuf specific function */
-int
-iobuf_translate_file_handle ( int fd, int for_write )
-{
- #ifdef __MINGW32__
- {
- int x;
-
- if ( fd <= 2 )
- return fd; /* do not do this for error, stdin, stdout, stderr */
-
- x = _open_osfhandle ( fd, for_write? 1:0 );
- if (x==-1 )
- log_error ("failed to translate osfhandle %p\n", (void*)fd );
- else {
- /*log_info ("_open_osfhandle %p yields %d%s\n",
- (void*)fd, x, for_write? " for writing":"" );*/
- fd = x;
- }
- }
- #endif
- return fd;
-}
-
-static int
-translate_file_handle ( int fd, int for_write )
-{
- #ifdef __MINGW32__
- #ifdef FILE_FILTER_USES_STDIO
- fd = iobuf_translate_file_handle (fd, for_write);
- #else
- {
- int x;
-
- if ( fd == 0 )
- x = (int)GetStdHandle (STD_INPUT_HANDLE);
- else if (fd == 1)
- x = (int)GetStdHandle (STD_OUTPUT_HANDLE);
- else if (fd == 2)
- x = (int)GetStdHandle (STD_ERROR_HANDLE);
- else
- x = fd;
-
- if (x == -1)
- log_debug ("GetStdHandle(%d) failed: ec=%d\n",
- fd, (int)GetLastError () );
-
- fd = x;
- }
- #endif
- #endif
- return fd;
-}
-
-
diff --git a/util/logger.c b/util/logger.c
deleted file mode 100644
index 6990473b2..000000000
--- a/util/logger.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/* logger.c - log functions
- * Copyright (C) 1998, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-
-#include "util.h"
-#include "i18n.h"
-
-static char pidstring[15];
-static char *pgm_name;
-static int errorcount;
-static int strict;
-static FILE *logfp;
-
-/****************
- * Set the logfile to use (not yet implemneted) or, if logfile is NULL,
- * the Fd where logoutputs should go.
- */
-void
-log_set_logfile( const char *name, int fd )
-{
- if( name )
- BUG();
-
- if( logfp && logfp != stderr && logfp != stdout )
- fclose( logfp );
- if( fd == 1 )
- logfp = stdout;
- else if( fd == 2 )
- logfp = stderr;
- else
- logfp = fdopen( fd, "a" );
- if( !logfp ) {
- logfp = stderr;
- log_fatal("can't open fd %d for logging: %s\n", fd, strerror(errno));
- }
-}
-
-FILE *
-log_stream()
-{
- if( !logfp )
- logfp = stderr;
- return logfp;
-}
-
-
-void
-log_set_name( const char *name )
-{
- m_free(pgm_name);
- if( name )
- pgm_name = m_strdup(name);
- else
- pgm_name = NULL;
-}
-
-const char *
-log_get_name(void)
-{
- return pgm_name? pgm_name : "";
-}
-
-
-void
-log_set_pid( int pid )
-{
- if( pid )
- sprintf(pidstring,"[%u]", (unsigned)pid );
- else
- *pidstring = 0;
-}
-
-int
-log_get_errorcount( int clear)
-{
- int n = errorcount;
- if( clear )
- errorcount = 0;
- return n;
-}
-
-void
-log_inc_errorcount()
-{
- errorcount++;
-}
-
-int
-log_set_strict(int val)
-{
- int old=strict;
- strict=val;
- return old;
-}
-
-void
-g10_log_print_prefix(const char *text)
-{
- if( !logfp )
- logfp = stderr;
- if( pgm_name )
- fprintf(logfp, "%s%s: %s", pgm_name, pidstring, text );
- else
- fprintf(logfp, "?%s: %s", pidstring, text );
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-static void
-print_prefix_f(const char *text, const char *fname)
-{
- if( !logfp )
- logfp = stderr;
- if( pgm_name )
- fprintf(logfp, "%s%s:%s: %s", pgm_name, pidstring, fname, text );
- else
- fprintf(logfp, "?%s:%s: %s", pidstring, fname, text );
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-void
-g10_log_info( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- g10_log_print_prefix("");
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-void
-g10_log_info_f( const char *fname, const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- print_prefix_f("", fname);
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-void
-g10_log_warning( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- if(strict)
- {
- errorcount++;
- g10_log_print_prefix(_("ERROR: "));
- }
- else
- g10_log_print_prefix(_("WARNING: "));
-
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-
-void
-g10_log_error( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- g10_log_print_prefix("");
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
- errorcount++;
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-void
-g10_log_error_f( const char *fname, const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- print_prefix_f("", fname);
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
- errorcount++;
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-void
-g10_log_fatal( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- g10_log_print_prefix("fatal: ");
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
- secmem_dump_stats();
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
- exit(2);
-}
-
-void
-g10_log_fatal_f( const char *fname, const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- print_prefix_f("fatal: ", fname);
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
- secmem_dump_stats();
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
- exit(2);
-}
-
-void
-g10_log_bug( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- putc('\n', stderr );
- g10_log_print_prefix("Ohhhh jeeee: ");
- va_start( arg_ptr, fmt ) ;
- vfprintf(stderr,fmt,arg_ptr) ;
- va_end(arg_ptr);
- fflush(stderr);
- secmem_dump_stats();
- abort();
-}
-
-#if defined (__riscos__) \
- || ( __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ))
-void
-g10_log_bug0( const char *file, int line, const char *func )
-{
- log_bug(_("... this is a bug (%s:%d:%s)\n"), file, line, func );
-}
-#else
-void
-g10_log_bug0( const char *file, int line )
-{
- log_bug(_("you found a bug ... (%s:%d)\n"), file, line);
-}
-#endif
-
-void
-g10_log_debug( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- g10_log_print_prefix("DBG: ");
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-void
-g10_log_debug_f( const char *fname, const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- print_prefix_f("DBG: ", fname);
- va_start( arg_ptr, fmt ) ;
- vfprintf(logfp,fmt,arg_ptr) ;
- va_end(arg_ptr);
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-
-
-void
-g10_log_hexdump( const char *text, const char *buf, size_t len )
-{
- int i;
-
- g10_log_print_prefix(text);
- for(i=0; i < len; i++ )
- fprintf(logfp, " %02X", ((const byte*)buf)[i] );
- fputc('\n', logfp);
-#ifdef __riscos__
- fflush( logfp );
-#endif /* __riscos__ */
-}
-
-
-
diff --git a/util/memory.c b/util/memory.c
deleted file mode 100644
index 9fab9ea3b..000000000
--- a/util/memory.c
+++ /dev/null
@@ -1,634 +0,0 @@
-/* memory.c - memory allocation
- * Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- *
- *
- * We use our own memory allocation functions instead of plain malloc(),
- * so that we can provide some special enhancements:
- * a) functions to provide memory from a secure memory.
- * b) by looking at the requested allocation size we
- * can reuse memory very quickly (e.g. MPI storage)
- * (really needed?)
- * c) memory usage reporting if compiled with M_DEBUG
- * d) memory checking if compiled with M_GUARD
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include "types.h"
-#include "memory.h"
-#include "util.h"
-
-
-#define MAGIC_NOR_BYTE 0x55
-#define MAGIC_SEC_BYTE 0xcc
-#define MAGIC_END_BYTE 0xaa
-
-/* This is a very crude alignment check which does not work on all CPUs
- * IIRC, I once introduced it for testing on an Alpha. We should better
- * replace this guard stuff with one provided by a modern malloc library
- */
-#if SIZEOF_UNSIGNED_LONG == 8
- #define EXTRA_ALIGN 4
-#else
- #define EXTRA_ALIGN 0
-#endif
-
-#if defined(M_DEBUG) || defined(M_GUARD)
- static void membug( const char *fmt, ... );
-#endif
-
-#ifdef M_DEBUG
-
- #ifndef M_GUARD
- #define M_GUARD 1
- #endif
- #undef m_alloc
- #undef m_alloc_clear
- #undef m_alloc_secure
- #undef m_alloc_secure_clear
- #undef m_realloc
- #undef m_free
- #undef m_check
- #undef m_strdup
- #define FNAME(a) m_debug_ ##a
- #define FNAMEPRT , const char *info
- #define FNAMEARG , info
- #ifndef __riscos__
- #define store_len(p,n,m) do { add_entry(p,n,m, \
- info, __FUNCTION__); } while(0)
- #else
- #define store_len(p,n,m) do { add_entry(p,n,m, \
- info, __func__ ); } while(0)
- #endif
-#else
- #define FNAME(a) m_ ##a
- #define FNAMEPRT
- #define FNAMEARG
- #define store_len(p,n,m) do { ((byte*)p)[EXTRA_ALIGN+0] = n; \
- ((byte*)p)[EXTRA_ALIGN+1] = n >> 8 ; \
- ((byte*)p)[EXTRA_ALIGN+2] = n >> 16 ; \
- ((byte*)p)[EXTRA_ALIGN+3] = m? MAGIC_SEC_BYTE \
- : MAGIC_NOR_BYTE; \
- } while(0)
-#endif
-
-
-#ifdef M_GUARD
-static long used_memory;
-#endif
-
-#ifdef M_DEBUG /* stuff used for memory debuging */
-
-struct info_entry {
- struct info_entry *next;
- unsigned count; /* call count */
- const char *info; /* the reference to the info string */
-};
-
-struct memtbl_entry {
- const void *user_p; /* for reference: the pointer given to the user */
- size_t user_n; /* length requested by the user */
- struct memtbl_entry *next; /* to build a list of unused entries */
- const struct info_entry *info; /* points into the table with */
- /* the info strings */
- unsigned inuse:1; /* this entry is in use */
- unsigned count:31;
-};
-
-
-#define INFO_BUCKETS 53
-#define info_hash(p) ( *(u32*)((p)) % INFO_BUCKETS )
-static struct info_entry *info_strings[INFO_BUCKETS]; /* hash table */
-
-static struct memtbl_entry *memtbl; /* the table with the memory info */
-static unsigned memtbl_size; /* number of allocated entries */
-static unsigned memtbl_len; /* number of used entries */
-static struct memtbl_entry *memtbl_unused;/* to keep track of unused entries */
-
-static void dump_table_at_exit(void);
-static void dump_table(void);
-static void check_allmem( const char *info );
-
-/****************
- * Put the new P into the debug table and return a pointer to the table entry.
- * mode is true for security. BY is the name of the function which called us.
- */
-static void
-add_entry( byte *p, unsigned n, int mode, const char *info, const char *by )
-{
- unsigned index;
- struct memtbl_entry *e;
- struct info_entry *ie;
-
- if( memtbl_len < memtbl_size )
- index = memtbl_len++;
- else {
- struct memtbl_entry *e;
- /* look for a used entry in the table. We take the first one,
- * so that freed entries remain as long as possible in the table
- * (free appends a new one)
- */
- if( (e = memtbl_unused) ) {
- index = e - memtbl;
- memtbl_unused = e->next;
- e->next = NULL;
- }
- else { /* no free entries in the table: extend the table */
- if( !memtbl_size ) { /* first time */
- memtbl_size = 100;
- if( !(memtbl = calloc( memtbl_size, sizeof *memtbl )) )
- membug("memory debug table malloc failed\n");
- index = 0;
- memtbl_len = 1;
- atexit( dump_table_at_exit );
- }
- else { /* realloc */
- unsigned n = memtbl_size / 4; /* enlarge by 25% */
- if(!(memtbl = realloc(memtbl, (memtbl_size+n)*sizeof *memtbl)))
- membug("memory debug table realloc failed\n");
- memset(memtbl+memtbl_size, 0, n*sizeof *memtbl );
- memtbl_size += n;
- index = memtbl_len++;
- }
- }
- }
- e = memtbl+index;
- if( e->inuse )
- membug("Ooops: entry %u is flagged as in use\n", index);
- e->user_p = p + EXTRA_ALIGN + 4;
- e->user_n = n;
- e->count++;
- if( e->next )
- membug("Ooops: entry is in free entry list\n");
- /* do we already have this info string */
- for( ie = info_strings[info_hash(info)]; ie; ie = ie->next )
- if( ie->info == info )
- break;
- if( !ie ) { /* no: make a new entry */
- if( !(ie = malloc( sizeof *ie )) )
- membug("can't allocate info entry\n");
- ie->next = info_strings[info_hash(info)];
- info_strings[info_hash(info)] = ie;
- ie->info = info;
- ie->count = 0;
- }
- ie->count++;
- e->info = ie;
- e->inuse = 1;
-
- /* put the index at the start of the memory */
- p[EXTRA_ALIGN+0] = index;
- p[EXTRA_ALIGN+1] = index >> 8 ;
- p[EXTRA_ALIGN+2] = index >> 16 ;
- p[EXTRA_ALIGN+3] = mode? MAGIC_SEC_BYTE : MAGIC_NOR_BYTE ;
- if( DBG_MEMORY )
- log_debug( "%s allocates %u bytes using %s\n", info, e->user_n, by );
-}
-
-
-
-/****************
- * Check that the memory block is correct. The magic byte has already been
- * checked. Checks which are done here:
- * - see whether the index points into our memory table
- * - see whether P is the same as the one stored in the table
- * - see whether we have already freed this block.
- */
-struct memtbl_entry *
-check_mem( const byte *p, const char *info )
-{
- unsigned n;
- struct memtbl_entry *e;
-
- n = p[EXTRA_ALIGN+0];
- n |= p[EXTRA_ALIGN+1] << 8;
- n |= p[EXTRA_ALIGN+2] << 16;
-
- if( n >= memtbl_len )
- membug("memory at %p corrupted: index=%u table_len=%u (%s)\n",
- p+EXTRA_ALIGN+4, n, memtbl_len, info );
- e = memtbl+n;
-
- if( e->user_p != p+EXTRA_ALIGN+4 )
- membug("memory at %p corrupted: reference mismatch (%s)\n",
- p+EXTRA_ALIGN+4, info );
- if( !e->inuse )
- membug("memory at %p corrupted: marked as free (%s)\n",
- p+EXTRA_ALIGN+4, info );
-
- if( !(p[EXTRA_ALIGN+3] == MAGIC_NOR_BYTE
- || p[EXTRA_ALIGN+3] == MAGIC_SEC_BYTE) )
- membug("memory at %p corrupted: underflow=%02x (%s)\n",
- p+EXTRA_ALIGN+4, p[EXTRA_ALIGN+3], info );
- if( p[EXTRA_ALIGN+4+e->user_n] != MAGIC_END_BYTE )
- membug("memory at %p corrupted: overflow=%02x (%s)\n",
- p+EXTRA_ALIGN+4, p[EXTRA_ALIGN+4+e->user_n], info );
- return e;
-}
-
-
-/****************
- * free the entry and the memory (replaces free)
- */
-static void
-free_entry( byte *p, const char *info )
-{
- struct memtbl_entry *e, *e2;
-
- check_allmem("add_entry");
-
- e = check_mem(p, info);
- if( DBG_MEMORY )
- log_debug( "%s frees %u bytes alloced by %s\n",
- info, e->user_n, e->info->info );
- if( !e->inuse ) {
- if( e->user_p == p + EXTRA_ALIGN+ 4 )
- membug("freeing an already freed pointer at %p\n", p+EXTRA_ALIGN+4 );
- else
- membug("freeing pointer %p which is flagged as freed\n", p+EXTRA_ALIGN+4 );
- }
-
- e->inuse = 0;
- e->next = NULL;
- if( !memtbl_unused )
- memtbl_unused = e;
- else {
- for(e2=memtbl_unused; e2->next; e2 = e2->next )
- ;
- e2->next = e;
- }
- if( m_is_secure(p+EXTRA_ALIGN+4) )
- secmem_free(p);
- else {
- memset(p,'f', e->user_n+5);
- free(p);
- }
-}
-
-static void
-dump_entry(struct memtbl_entry *e )
-{
- unsigned n = e - memtbl;
-
- fprintf(stderr, "mem %4u%c %5u %p %5u %s (%u)\n",
- n, e->inuse?'a':'u', e->count, e->user_p, e->user_n,
- e->info->info, e->info->count );
-
-
-}
-
-
-static void
-dump_table_at_exit( void)
-{
- if( DBG_MEMSTAT )
- dump_table();
-}
-
-static void
-dump_table( void)
-{
- unsigned n;
- struct memtbl_entry *e;
- ulong sum = 0, chunks =0;
-
- for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) {
- if(e->inuse) {
- dump_entry(e);
- sum += e->user_n;
- chunks++;
- }
- }
- fprintf(stderr, " memory used: %8lu bytes in %ld chunks\n",
- sum, chunks );
-}
-
-
-static void
-check_allmem( const char *info )
-{
- unsigned n;
- struct memtbl_entry *e;
-
- for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) {
- if( e->inuse ) {
- #ifndef __riscos__
- check_mem(e->user_p-4-EXTRA_ALIGN, info);
- #else
- check_mem((const byte *) e->user_p-4-EXTRA_ALIGN, info);
- #endif
- }
- }
-}
-
-#endif /* M_DEBUG */
-
-#if defined(M_DEBUG) || defined(M_GUARD)
-static void
-membug( const char *fmt, ... )
-{
- va_list arg_ptr ;
-
- fprintf(stderr, "\nMemory Error: " ) ;
- va_start( arg_ptr, fmt ) ;
- vfprintf(stderr,fmt,arg_ptr) ;
- va_end(arg_ptr);
- fflush(stderr);
- #ifdef M_DEBUG
- if( DBG_MEMSTAT )
- dump_table();
- #endif
- abort();
-}
-#endif
-
-void
-m_print_stats( const char *prefix )
-{
- #ifdef M_DEBUG
- unsigned n;
- struct memtbl_entry *e;
- ulong sum = 0, chunks =0;
-
- for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) {
- if(e->inuse) {
- sum += e->user_n;
- chunks++;
- }
- }
-
- log_debug( "%s%smemstat: %8lu bytes in %ld chunks used\n",
- prefix? prefix:"", prefix? ": ":"", sum, chunks );
- #elif defined(M_GUARD)
- log_debug( "%s%smemstat: %8ld bytes\n",
- prefix? prefix:"", prefix? ": ":"", used_memory );
- #endif
-}
-
-void
-m_dump_table( const char *prefix )
-{
- #ifdef M_DEBUG
- fprintf(stderr,"Memory-Table-Dump: %s\n", prefix);
- dump_table();
- #endif
- m_print_stats( prefix );
-}
-
-
-static void
-out_of_core(size_t n, int secure)
-{
- log_error ("out of %s memory while allocating %u bytes\n",
- secure? "secure":"" ,(unsigned)n );
- if (secure) {
- /*secmem_dump_stats ();*/
- log_info ("(this may be caused by too many secret keys used "
- "simultaneously or due to excessive large key sizes)\n");
- }
- exit (2);
-}
-
-/****************
- * Allocate memory of size n.
- * This function gives up if we do not have enough memory
- */
-void *
-FNAME(alloc)( size_t n FNAMEPRT )
-{
- char *p;
-
- #ifdef M_GUARD
- if(!n)
- out_of_core(n,0); /* should never happen */
- if( !(p = malloc( n + EXTRA_ALIGN+5 )) )
- out_of_core(n,0);
- store_len(p,n,0);
- used_memory += n;
- p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE;
- return p+EXTRA_ALIGN+4;
- #else
- /* mallocing zero bytes is undefined by ISO-C, so we better make
- sure that it won't happen */
- if (!n)
- n = 1;
- if( !(p = malloc( n )) )
- out_of_core(n,0);
- return p;
- #endif
-}
-
-/****************
- * Allocate memory of size n from the secure memory pool.
- * This function gives up if we do not have enough memory
- */
-void *
-FNAME(alloc_secure)( size_t n FNAMEPRT )
-{
- char *p;
-
- #ifdef M_GUARD
- if(!n)
- out_of_core(n,1); /* should never happen */
- if( !(p = secmem_malloc( n +EXTRA_ALIGN+ 5 )) )
- out_of_core(n,1);
- store_len(p,n,1);
- p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE;
- return p+EXTRA_ALIGN+4;
- #else
- /* mallocing zero bytes is undefined by ISO-C, so we better make
- sure that it won't happen */
- if (!n)
- n = 1;
- if( !(p = secmem_malloc( n )) )
- out_of_core(n,1);
- return p;
- #endif
-}
-
-void *
-FNAME(alloc_clear)( size_t n FNAMEPRT )
-{
- void *p;
- p = FNAME(alloc)( n FNAMEARG );
- memset(p, 0, n );
- return p;
-}
-
-void *
-FNAME(alloc_secure_clear)( size_t n FNAMEPRT)
-{
- void *p;
- p = FNAME(alloc_secure)( n FNAMEARG );
- memset(p, 0, n );
- return p;
-}
-
-
-/****************
- * realloc and clear the old space
- */
-void *
-FNAME(realloc)( void *a, size_t n FNAMEPRT )
-{
- void *b;
-
- #ifdef M_GUARD
- if( a ) {
- unsigned char *p = a;
- size_t len = m_size(a);
-
- if( len >= n ) /* we don't shrink for now */
- return a;
- if( p[-1] == MAGIC_SEC_BYTE )
- b = FNAME(alloc_secure_clear)(n FNAMEARG);
- else
- b = FNAME(alloc_clear)(n FNAMEARG);
- FNAME(check)(NULL FNAMEARG);
- memcpy(b, a, len );
- FNAME(free)(p FNAMEARG);
- }
- else
- b = FNAME(alloc)(n FNAMEARG);
- #else
- if( m_is_secure(a) ) {
- if( !(b = secmem_realloc( a, n )) )
- out_of_core(n,1);
- }
- else {
- if( !(b = realloc( a, n )) )
- out_of_core(n,0);
- }
- #endif
-
- return b;
-}
-
-
-
-/****************
- * Free a pointer
- */
-void
-FNAME(free)( void *a FNAMEPRT )
-{
- byte *p = a;
-
- if( !p )
- return;
- #ifdef M_DEBUG
- free_entry(p-EXTRA_ALIGN-4, info);
- #elif defined M_GUARD
- m_check(p);
- if( m_is_secure(a) )
- secmem_free(p-EXTRA_ALIGN-4);
- else {
- used_memory -= m_size(a);
- free(p-EXTRA_ALIGN-4);
- }
- #else
- if( m_is_secure(a) )
- secmem_free(p);
- else
- free(p);
- #endif
-}
-
-
-void
-FNAME(check)( const void *a FNAMEPRT )
-{
- #ifdef M_GUARD
- const byte *p = a;
-
- #ifdef M_DEBUG
- if( p )
- check_mem(p-EXTRA_ALIGN-4, info);
- else
- check_allmem(info);
- #else
- if( !p )
- return;
- if( !(p[-1] == MAGIC_NOR_BYTE || p[-1] == MAGIC_SEC_BYTE) )
- membug("memory at %p corrupted (underflow=%02x)\n", p, p[-1] );
- else if( p[m_size(p)] != MAGIC_END_BYTE )
- membug("memory at %p corrupted (overflow=%02x)\n", p, p[-1] );
- #endif
- #endif
-}
-
-
-size_t
-m_size( const void *a )
-{
- #ifndef M_GUARD
- log_debug("dummy m_size called\n");
- return 0;
- #else
- const byte *p = a;
- size_t n;
-
- #ifdef M_DEBUG
- n = check_mem(p-EXTRA_ALIGN-4, "m_size")->user_n;
- #else
- n = ((byte*)p)[-4];
- n |= ((byte*)p)[-3] << 8;
- n |= ((byte*)p)[-2] << 16;
- #endif
- return n;
- #endif
-}
-
-
-#if 0 /* not used */
-/****************
- * Make a copy of the memory block at a
- */
-void *
-FNAME(copy)( const void *a FNAMEPRT )
-{
- void *b;
- size_t n;
-
- if( !a )
- return NULL;
-
- n = m_size(a); Aiiiih woher nehmen
- if( m_is_secure(a) )
- b = FNAME(alloc_secure)(n FNAMEARG);
- else
- b = FNAME(alloc)(n FNAMEARG);
- memcpy(b, a, n );
- return b;
-}
-#endif
-
-char *
-FNAME(strdup)( const char *a FNAMEPRT )
-{
- size_t n = strlen(a);
- char *p = FNAME(alloc)(n+1 FNAMEARG);
- strcpy(p, a);
- return p;
-}
-
diff --git a/util/miscutil.c b/util/miscutil.c
deleted file mode 100644
index e1735cd59..000000000
--- a/util/miscutil.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/* miscutil.c - miscellaneous utilities
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-#ifdef HAVE_LANGINFO_H
- #include <langinfo.h>
-#endif
-#include "types.h"
-#include "util.h"
-#include "i18n.h"
-
-/****************
- * I know that the OpenPGP protocol has a Y2106 problem ;-)
- */
-u32
-make_timestamp()
-{
- return time(NULL);
-}
-
-/****************
- * Scan a date string and return a timestamp.
- * The only supported format is "yyyy-mm-dd"
- * Returns 0 for an invalid date.
- */
-u32
-scan_isodatestr( const char *string )
-{
- int year, month, day;
- struct tm tmbuf;
- time_t stamp;
- int i;
-
- if( strlen(string) != 10 || string[4] != '-' || string[7] != '-' )
- return 0;
- for( i=0; i < 4; i++ )
- if( !isdigit(string[i]) )
- return 0;
- if( !isdigit(string[5]) || !isdigit(string[6]) )
- return 0;
- if( !isdigit(string[8]) || !isdigit(string[9]) )
- return 0;
- year = atoi(string);
- month = atoi(string+5);
- day = atoi(string+8);
- /* some basic checks */
- if( year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 )
- return 0;
- memset( &tmbuf, 0, sizeof tmbuf );
- tmbuf.tm_mday = day;
- tmbuf.tm_mon = month-1;
- tmbuf.tm_year = year - 1900;
- tmbuf.tm_isdst = -1;
- stamp = mktime( &tmbuf );
- if( stamp == (time_t)-1 )
- return 0;
- return stamp;
-}
-
-
-u32
-add_days_to_timestamp( u32 stamp, u16 days )
-{
- return stamp + days*86400L;
-}
-
-
-/****************
- * Return a string with a time value in the form: x Y, n D, n H
- */
-
-const char *
-strtimevalue( u32 value )
-{
- static char buffer[30];
- unsigned int years, days, hours, minutes;
-
- value /= 60;
- minutes = value % 60;
- value /= 60;
- hours = value % 24;
- value /= 24;
- days = value % 365;
- value /= 365;
- years = value;
-
- sprintf(buffer,"%uy%ud%uh%um", years, days, hours, minutes );
- if( years )
- return buffer;
- if( days )
- return strchr( buffer, 'y' ) + 1;
- return strchr( buffer, 'd' ) + 1;
-}
-
-
-/****************
- * Note: this function returns GMT
- */
-const char *
-strtimestamp( u32 stamp )
-{
- static char buffer[11+5];
- struct tm *tp;
- time_t atime = stamp;
-
- if (atime < 0) {
- strcpy (buffer, "????" "-??" "-??");
- }
- else {
- tp = gmtime( &atime );
- sprintf(buffer,"%04d-%02d-%02d",
- 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday );
- }
- return buffer;
-}
-
-/****************
- * Note: this function returns local time
- */
-const char *
-asctimestamp( u32 stamp )
-{
- static char buffer[50];
- #if defined (HAVE_STRFTIME) && defined (HAVE_NL_LANGINFO)
- static char fmt[50];
- #endif
- struct tm *tp;
- time_t atime = stamp;
-
- if (atime < 0) {
- strcpy (buffer, "????" "-??" "-??");
- return buffer;
- }
-
- tp = localtime( &atime );
- #ifdef HAVE_STRFTIME
- #if defined(HAVE_NL_LANGINFO)
- mem2str( fmt, nl_langinfo(D_T_FMT), DIM(fmt)-3 );
- if( strstr( fmt, "%Z" ) == NULL )
- strcat( fmt, " %Z");
- strftime( buffer, DIM(buffer)-1, fmt, tp );
- #else
- /* fixme: we should check whether the locale appends a " %Z"
- * These locales from glibc don't put the " %Z":
- * fi_FI hr_HR ja_JP lt_LT lv_LV POSIX ru_RU ru_SU sv_FI sv_SE zh_CN
- */
- strftime( buffer, DIM(buffer)-1, "%c %Z", tp );
- #endif
- buffer[DIM(buffer)-1] = 0;
- #else
- mem2str( buffer, asctime(tp), DIM(buffer) );
- #endif
- return buffer;
-}
-
-/****************
- * Print a string to FP, but filter all control characters out.
- */
-void
-print_string( FILE *fp, const byte *p, size_t n, int delim )
-{
- for( ; n; n--, p++ )
- if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim ||
- (delim && *p=='\\')) {
- putc('\\', fp);
- if( *p == '\n' )
- putc('n', fp);
- else if( *p == '\r' )
- putc('r', fp);
- else if( *p == '\f' )
- putc('f', fp);
- else if( *p == '\v' )
- putc('v', fp);
- else if( *p == '\b' )
- putc('b', fp);
- else if( !*p )
- putc('0', fp);
- else
- fprintf(fp, "x%02x", *p );
- }
- else
- putc(*p, fp);
-}
-
-/****************
- * Print an UTF8 string to FP and filter all control characters out.
- */
-void
-print_utf8_string2 ( FILE *fp, const byte *p, size_t n, int delim )
-{
- size_t i;
- char *buf;
-
- /* we can handle plain ascii simpler, so check for it first */
- for(i=0; i < n; i++ ) {
- if( p[i] & 0x80 )
- break;
- }
- if( i < n ) {
- buf = utf8_to_native ( p, n, delim );
- /*(utf8 conversion already does the control character quoting)*/
- fputs( buf, fp );
- m_free( buf );
- }
- else
- print_string( fp, p, n, delim );
-}
-
-void
-print_utf8_string( FILE *fp, const byte *p, size_t n )
-{
- print_utf8_string2 (fp, p, n, 0);
-}
-
-/****************
- * This function returns a string which is suitable for printing
- * Caller must release it with m_free()
- */
-char *
-make_printable_string( const byte *p, size_t n, int delim )
-{
- size_t save_n, buflen;
- const byte *save_p;
- char *buffer, *d;
-
- /* first count length */
- for(save_n = n, save_p = p, buflen=1 ; n; n--, p++ ) {
- if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim ||
- (delim && *p=='\\')) {
- if( *p=='\n' || *p=='\r' || *p=='\f'
- || *p=='\v' || *p=='\b' || !*p )
- buflen += 2;
- else
- buflen += 4;
- }
- else
- buflen++;
- }
- p = save_p;
- n = save_n;
- /* and now make the string */
- d = buffer = m_alloc( buflen );
- for( ; n; n--, p++ ) {
- if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim ||
- (delim && *p=='\\')) {
- *d++ = '\\';
- if( *p == '\n' )
- *d++ = 'n';
- else if( *p == '\r' )
- *d++ = 'r';
- else if( *p == '\f' )
- *d++ = 'f';
- else if( *p == '\v' )
- *d++ = 'v';
- else if( *p == '\b' )
- *d++ = 'b';
- else if( !*p )
- *d++ = '0';
- else {
- sprintf(d, "x%02x", *p );
- d += 2;
- }
- }
- else
- *d++ = *p;
- }
- *d = 0;
- return buffer;
-}
-
-int
-answer_is_yes_no_default( const char *s, int def_answer )
-{
- const char *long_yes = _("yes");
- const char *short_yes = _("yY");
- const char *long_no = _("no");
- const char *short_no = _("nN");
-
- /* Note: we have to use the local dependent strcasecmp here */
- if( !strcasecmp(s, long_yes ) )
- return 1;
- if( *s && strchr( short_yes, *s ) && !s[1] )
- return 1;
- /* test for no strings to catch ambiguities for the next test */
- if( !strcasecmp(s, long_no ) )
- return 0;
- if( *s && strchr( short_no, *s ) && !s[1] )
- return 0;
- /* test for the english version (for those who are used to type yes) */
- if( !ascii_strcasecmp(s, "yes" ) )
- return 1;
- if( *s && strchr( "yY", *s ) && !s[1] )
- return 1;
- return def_answer;
-}
-
-int
-answer_is_yes( const char *s )
-{
- return answer_is_yes_no_default(s,0);
-}
-
-/****************
- * Return 1 for yes, -1 for quit, or 0 for no
- */
-int
-answer_is_yes_no_quit( const char *s )
-{
- const char *long_yes = _("yes");
- const char *long_no = _("no");
- const char *long_quit = _("quit");
- const char *short_yes = _("yY");
- const char *short_no = _("nN");
- const char *short_quit = _("qQ");
-
- /* Note: We have to use the locale dependent strcasecmp */
- if( !strcasecmp(s, long_no ) )
- return 0;
- if( !strcasecmp(s, long_yes ) )
- return 1;
- if( !strcasecmp(s, long_quit ) )
- return -1;
- if( *s && strchr( short_no, *s ) && !s[1] )
- return 0;
- if( *s && strchr( short_yes, *s ) && !s[1] )
- return 1;
- if( *s && strchr( short_quit, *s ) && !s[1] )
- return -1;
- /* but not here */
- if( !ascii_strcasecmp(s, "yes" ) )
- return 1;
- if( !ascii_strcasecmp(s, "quit" ) )
- return -1;
- if( *s && strchr( "yY", *s ) && !s[1] )
- return 1;
- if( *s && strchr( "qQ", *s ) && !s[1] )
- return -1;
- return 0;
-}
diff --git a/util/riscos.c b/util/riscos.c
deleted file mode 100644
index c64da3751..000000000
--- a/util/riscos.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* riscos.c - RISC OS stuff
- * Copyright (C) 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG for RISC OS.
- *
- * GnuPG is free software; you can 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 __RISCOS__C__
-#define __RISCOS__C__
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <kernel.h>
-#include <swis.h>
-#include "util.h"
-#include "memory.h"
-
-#define __UNIXLIB_INTERNALS
-#include <unixlib/unix.h>
-#undef __UNIXLIB_INTERNALS
-
-/* RISC OS specific defines that are not yet in UnixLib */
-
-#define MimeMap_Translate 0x50B00
-#define MMM_TYPE_RISCOS 0
-#define MMM_TYPE_RISCOS_STRING 1
-#define MMM_TYPE_MIME 2
-#define MMM_TYPE_DOT_EXTN 3
-
-/* RISC OS file open descriptor control list */
-
-struct fds_item {
- int fd;
- struct fds_item *next;
-};
-static struct fds_item *fds_list = NULL;
-static int initialized = 0;
-
-
-/* local RISC OS functions */
-
-static int
-is_read_only(const char *filename)
-{
- int type, attr;
-
- if (_swix(OS_File, _INR(0,1) | _OUT(0) | _OUT(5),
- 17, filename, &type, &attr))
- log_fatal("Can't get file attributes for %s!\n", filename);
-
- if (type == 0)
- log_fatal("Can't find file %s!\n", filename);
-
- if (_swix(OS_File, _INR(0,1) | _IN(5), 4, filename, attr))
- return 1;
-
- return 0;
-}
-
-static void
-riscos_set_filetype_by_number(const char *filename, int type)
-{
- if (_swix(OS_File, _INR(0,2), 18, filename, type))
- log_fatal("Can't set filetype for file %s!\n"
- "Is the file on a read-only file system?\n", filename);
-}
-
-/* exported RISC OS functions */
-
-void
-riscos_global_defaults(void)
-{
- __riscosify_control = __RISCOSIFY_NO_PROCESS;
- __feature_imagefs_is_file = 1;
-}
-
-void
-riscos_set_filetype(const char *filename, const char *mimetype)
-{
- int result;
-
- if (_swix(MimeMap_Translate, _INR(0,2) | _OUT(3),
- MMM_TYPE_MIME, mimetype, MMM_TYPE_RISCOS, &result))
- log_fatal("Can't translate MIME type %s!\n", mimetype);
-
- riscos_set_filetype_by_number(filename, result);
-}
-
-pid_t
-riscos_getpid(void)
-{
- int state;
-
- if (_swix(Wimp_ReadSysInfo, _IN(0) | _OUT(0), 3, &state))
- log_fatal("Wimp_ReadSysInfo failed: Can't get WimpState (R0=3)!\n");
-
- if (state)
- if (_swix(Wimp_ReadSysInfo, _IN(0) | _OUT(0), 5, &state))
- log_fatal("Wimp_ReadSysInfo failed: Can't get task handle (R0=5)!\n");
-
- return (pid_t) state;
-}
-
-int
-riscos_kill(pid_t pid, int sig)
-{
- int buf[4], iter = 0;
-
- if (sig)
- kill(pid, sig);
-
- do {
- if (_swix(TaskManager_EnumerateTasks, _INR(0,2) | _OUT(0),
- iter, buf, 16, &iter))
- log_fatal("TaskManager_EnumerateTasks failed!\n");
- if (buf[0] == pid)
- return 0;
- } while (iter >= 0);
-
- return __set_errno(ESRCH);
-}
-
-int
-riscos_access(const char *path, int amode)
-{
- /* Do additional check, i.e. whether path is on write-protected floppy */
- if ((amode & W_OK) && is_read_only(path))
- return 1;
- return access(path, amode);
-}
-
-int
-riscos_getchar(void)
-{
- int c, flags;
-
- if (_swix(OS_ReadC, _OUT(0) | _OUT(_FLAGS), &c, &flags))
- log_fatal("OS_ReadC failed: Couldn't read from keyboard!\n");
- if (flags & _C)
- log_fatal("OS_ReadC failed: Return Code = %i!\n", c);
-
- return c;
-}
-
-#ifdef DEBUG
-void
-dump_fdlist(void)
-{
- struct fds_item *iter = fds_list;
- printf("List of open file descriptors:\n");
- while (iter) {
- printf(" %i\n", iter->fd);
- iter = iter->next;
- }
-}
-#endif /* DEBUG */
-
-int
-fdopenfile(const char *filename, const int allow_write)
-{
- struct fds_item *h;
- int fd;
- if (allow_write)
- fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR);
- else
- fd = open(filename, O_RDONLY);
- if (fd == -1)
- log_error("Can't open file %s: %i, %s!\n", filename, errno, strerror(errno));
-
- if (!initialized) {
- atexit (close_fds);
- initialized = 1;
- }
-
- h = fds_list;
- fds_list = (struct fds_item *) m_alloc(sizeof(struct fds_item));
- fds_list->fd = fd;
- fds_list->next = h;
-
- return fd;
-}
-
-void
-close_fds(void)
-{
- FILE *fp;
- struct fds_item *h = fds_list;
- while( fds_list ) {
- h = fds_list->next;
- fp = fdopen (fds_list->fd, "a");
- if (fp)
- fflush(fp);
- close(fds_list->fd);
- m_free(fds_list);
- fds_list = h;
- }
-}
-
-int
-renamefile(const char *old, const char *new)
-{
- _kernel_oserror *e;
-
- if (e = _swix(OS_FSControl, _INR(0,2), 25, old, new)) {
- if (e->errnum == 214)
- return __set_errno(ENOENT);
- if (e->errnum == 176)
- return __set_errno(EEXIST);
- printf("Error during renaming: %i, %s!\n", e->errnum, e->errmess);
- return __set_errno(EOPSYS);
- }
- return 0;
-}
-
-char *
-gstrans(const char *old)
-{
- int size = 256, last;
- char *buf, *tmp;
-
- buf = (char *) m_alloc(size);
- if (!buf)
- log_fatal("Can't claim memory for OS_GSTrans buffer!\n");
- while (_C & _swi(OS_GSTrans, _INR(0,2) | _OUT(2) | _RETURN(_FLAGS),
- old, buf, size, &last)) {
- size += 256;
- tmp = (char *) m_realloc(buf, size);
- if (!tmp)
- log_fatal("Can't claim memory for OS_GSTrans buffer!\n");
- buf = tmp;
- }
-
- buf[last] = '\0';
- tmp = (char *) m_realloc(buf, last + 1);
- if (!tmp)
- log_fatal("Can't realloc memory after OS_GSTrans!\n");
-
- return tmp;
-}
-
-#ifdef DEBUG
-void
-list_openfiles(void)
-{
- char *name;
- int i, len;
-
- for (i = 255; i >= 0; --i) {
- if (_swix(OS_Args, _INR(0,2) | _IN(5) | _OUT(5), 7, i, 0, 0, &len))
- continue;
-
- name = (char *) m_alloc(1-len);
- if (!name)
- log_fatal("Can't claim memory for OS_Args buffer!\n");
-
- if (_swix(OS_Args, _INR(0,2) | _IN(5), 7, i, name, 1-len)) {
- m_free(name);
- log_fatal("Error when calling OS_Args(7)!\n");
- }
-
- if (_swix(OS_Args, _INR(0,1) | _OUT(0), 254, i, &len)) {
- m_free(name);
- log_fatal("Error when calling OS_Args(254)!\n");
- }
-
- printf("%3i: %s (%c%c)\n", i, name,
- (len & 0x40) ? 'R' : 0,
- (len & 0x80) ? 'W' : 0);
- m_free(name);
- }
-}
-#endif
-
-void
-not_implemented(const char *feature)
-{
- log_info("%s is not implemented in the RISC OS version!\n", feature);
-}
-
-#endif /* !__RISCOS__C__ */
diff --git a/util/secmem.c b/util/secmem.c
deleted file mode 100644
index d077fed17..000000000
--- a/util/secmem.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/* secmem.c - memory allocation from a secure heap
- * Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <unistd.h>
-#if defined(HAVE_MLOCK) || defined(HAVE_MMAP)
- #include <sys/mman.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #ifdef USE_CAPABILITIES
- #include <sys/capability.h>
- #endif
- #ifdef HAVE_PLOCK
- #include <sys/lock.h>
- #endif
-#endif
-
-#include "types.h"
-#include "memory.h"
-#include "util.h"
-#include "i18n.h"
-
-#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
- #define MAP_ANONYMOUS MAP_ANON
-#endif
-/* It seems that Slackware 7.1 does not know about EPERM */
-#if !defined(EPERM) && defined(ENOMEM)
- #define EPERM ENOMEM
-#endif
-
-
-#define DEFAULT_POOLSIZE 16384
-
-typedef struct memblock_struct MEMBLOCK;
-struct memblock_struct {
- unsigned size;
- union {
- MEMBLOCK *next;
- PROPERLY_ALIGNED_TYPE aligned;
- } u;
-};
-
-
-
-static void *pool;
-static volatile int pool_okay; /* may be checked in an atexit function */
-#ifdef HAVE_MMAP
-static volatile int pool_is_mmapped;
-#endif
-static size_t poolsize; /* allocated length */
-static size_t poollen; /* used length */
-static MEMBLOCK *unused_blocks;
-static unsigned max_alloced;
-static unsigned cur_alloced;
-static unsigned max_blocks;
-static unsigned cur_blocks;
-static int disable_secmem;
-static int show_warning;
-static int no_warning;
-static int suspend_warning;
-
-
-static void
-print_warn(void)
-{
- if (!no_warning)
- {
- log_info(_("WARNING: using insecure memory!\n"));
- log_info(_("please see http://www.gnupg.org/faq.html "
- "for more information\n"));
- }
-}
-
-
-static void
-lock_pool( void *p, size_t n )
-{
- #if defined(USE_CAPABILITIES) && defined(HAVE_MLOCK)
- int err;
-
- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
- err = mlock( p, n );
- if( err && errno )
- err = errno;
- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-
- if( err ) {
- if( errno != EPERM
- #ifdef EAGAIN /* OpenBSD returns this */
- && errno != EAGAIN
- #endif
- #ifdef ENOSYS /* Some SCOs return this (function not implemented) */
- && errno != ENOSYS
- #endif
- #ifdef ENOMEM /* Linux can return this */
- && errno != ENOMEM
- #endif
- )
- log_error("can't lock memory: %s\n", strerror(err));
- show_warning = 1;
- }
-
- #elif defined(HAVE_MLOCK)
- uid_t uid;
- int err;
-
- uid = getuid();
-
- #ifdef HAVE_BROKEN_MLOCK
- /* ick. but at least we get secured memory. about to lock
- entire data segment. */
- #ifdef HAVE_PLOCK
- err = plock( DATLOCK );
- if( err && errno )
- err = errno;
-#else /*!HAVE_PLOCK*/
- if( uid ) {
- errno = EPERM;
- err = errno;
- }
- else {
- err = mlock( p, n );
- if( err && errno )
- err = errno;
- }
- #endif /*!HAVE_PLOCK*/
- #else
- err = mlock( p, n );
- if( err && errno )
- err = errno;
- #endif
-
- if( uid && !geteuid() ) {
- /* check that we really dropped the privs.
- * Note: setuid(0) should always fail */
- if( setuid( uid ) || getuid() != geteuid() || !setuid(0) )
- log_fatal("failed to reset uid: %s\n", strerror(errno));
- }
-
- if( err ) {
- if( errno != EPERM
- #ifdef EAGAIN /* OpenBSD returns this */
- && errno != EAGAIN
- #endif
- #ifdef ENOSYS /* Some SCOs return this (function not implemented) */
- && errno != ENOSYS
- #endif
- #ifdef ENOMEM /* Linux can return this */
- && errno != ENOMEM
- #endif
- )
- log_error("can't lock memory: %s\n", strerror(err));
- show_warning = 1;
- }
-
- #elif defined ( __QNX__ )
- /* QNX does not page at all, so the whole secure memory stuff does
- * not make much sense. However it is still of use because it
- * wipes out the memory on a free().
- * Therefore it is sufficient to suppress the warning
- */
- #elif defined (HAVE_DOSISH_SYSTEM)
- /* It does not make sense to print such a warning, given the fact that
- * this whole Windows !@#$% and their user base are inherently insecure
- */
- #elif defined (__riscos__)
- /* no virtual memory on RISC OS, so no pages are swapped to disc,
- * besides we don't have mmap, so we don't use it! ;-)
- * But don't complain, as explained above.
- */
- #else
- log_info("Please note that you don't have secure memory on this system\n");
- #endif
-}
-
-
-static void
-init_pool( size_t n)
-{
- size_t pgsize;
-
- poolsize = n;
-
- if( disable_secmem )
- log_bug("secure memory is disabled");
-
- #ifdef HAVE_GETPAGESIZE
- pgsize = getpagesize();
- #else
- pgsize = 4096;
- #endif
-
- #ifdef HAVE_MMAP
- poolsize = (poolsize + pgsize -1 ) & ~(pgsize-1);
- #ifdef MAP_ANONYMOUS
- pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
- #else /* map /dev/zero instead */
- { int fd;
-
- fd = open("/dev/zero", O_RDWR);
- if( fd == -1 ) {
- log_error("can't open /dev/zero: %s\n", strerror(errno) );
- pool = (void*)-1;
- }
- else {
- pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE,
- MAP_PRIVATE, fd, 0);
- }
- }
- #endif
- if( pool == (void*)-1 )
- log_info("can't mmap pool of %u bytes: %s - using malloc\n",
- (unsigned)poolsize, strerror(errno));
- else {
- pool_is_mmapped = 1;
- pool_okay = 1;
- }
-
- #endif
- if( !pool_okay ) {
- pool = malloc( poolsize );
- if( !pool )
- log_fatal("can't allocate memory pool of %u bytes\n",
- (unsigned)poolsize);
- else
- pool_okay = 1;
- }
- lock_pool( pool, poolsize );
- poollen = 0;
-}
-
-
-/* concatenate unused blocks */
-static void
-compress_pool(void)
-{
- /* fixme: we really should do this */
-}
-
-void
-secmem_set_flags( unsigned flags )
-{
- int was_susp = suspend_warning;
-
- no_warning = flags & 1;
- suspend_warning = flags & 2;
-
- /* and now issue the warning if it is not longer suspended */
- if( was_susp && !suspend_warning && show_warning ) {
- show_warning = 0;
- print_warn();
- }
-}
-
-unsigned
-secmem_get_flags(void)
-{
- unsigned flags;
-
- flags = no_warning ? 1:0;
- flags |= suspend_warning ? 2:0;
- return flags;
-}
-
-void
-secmem_init( size_t n )
-{
- if( !n ) {
-#ifndef __riscos__
- #ifdef USE_CAPABILITIES
- /* drop all capabilities */
- cap_set_proc( cap_from_text("all-eip") );
-
- #elif !defined(HAVE_DOSISH_SYSTEM)
- uid_t uid;
-
- disable_secmem=1;
- uid = getuid();
- if( uid != geteuid() ) {
- if( setuid( uid ) || getuid() != geteuid() || !setuid(0) )
- log_fatal("failed to drop setuid\n" );
- }
- #endif
-#endif /* !__riscos__ */
- }
- else {
- if( n < DEFAULT_POOLSIZE )
- n = DEFAULT_POOLSIZE;
- if( !pool_okay )
- init_pool(n);
- else
- log_error("Oops, secure memory pool already initialized\n");
- }
-}
-
-
-void *
-secmem_malloc( size_t size )
-{
- MEMBLOCK *mb, *mb2;
- int compressed=0;
-
- if( !pool_okay ) {
- log_info(
- _("operation is not possible without initialized secure memory\n"));
- log_info(_("(you may have used the wrong program for this task)\n"));
- exit(2);
- }
- if( show_warning && !suspend_warning ) {
- show_warning = 0;
- print_warn();
- }
-
- /* blocks are always a multiple of 32 */
- size += sizeof(MEMBLOCK);
- size = ((size + 31) / 32) * 32;
-
- retry:
- /* try to get it from the used blocks */
- for(mb = unused_blocks,mb2=NULL; mb; mb2=mb, mb = mb->u.next )
- if( mb->size >= size ) {
- if( mb2 )
- mb2->u.next = mb->u.next;
- else
- unused_blocks = mb->u.next;
- goto leave;
- }
- /* allocate a new block */
- if( (poollen + size <= poolsize) ) {
- mb = (void*)((char*)pool + poollen);
- poollen += size;
- mb->size = size;
- }
- else if( !compressed ) {
- compressed=1;
- compress_pool();
- goto retry;
- }
- else
- return NULL;
-
- leave:
- cur_alloced += mb->size;
- cur_blocks++;
- if( cur_alloced > max_alloced )
- max_alloced = cur_alloced;
- if( cur_blocks > max_blocks )
- max_blocks = cur_blocks;
-
- return &mb->u.aligned.c;
-}
-
-
-void *
-secmem_realloc( void *p, size_t newsize )
-{
- MEMBLOCK *mb;
- size_t size;
- void *a;
-
- mb = (MEMBLOCK*)((char*)p - ((size_t) &((MEMBLOCK*)0)->u.aligned.c));
- size = mb->size;
- if( newsize < size )
- return p; /* it is easier not to shrink the memory */
- a = secmem_malloc( newsize );
- if ( a ) {
- memcpy(a, p, size);
- memset((char*)a+size, 0, newsize-size);
- secmem_free(p);
- }
- return a;
-}
-
-
-void
-secmem_free( void *a )
-{
- MEMBLOCK *mb;
- size_t size;
-
- if( !a )
- return;
-
- mb = (MEMBLOCK*)((char*)a - ((size_t) &((MEMBLOCK*)0)->u.aligned.c));
- size = mb->size;
- /* This does not make much sense: probably this memory is held in the
- * cache. We do it anyway: */
- memset(mb, 0xff, size );
- memset(mb, 0xaa, size );
- memset(mb, 0x55, size );
- memset(mb, 0x00, size );
- mb->size = size;
- mb->u.next = unused_blocks;
- unused_blocks = mb;
- cur_blocks--;
- cur_alloced -= size;
-}
-
-int
-m_is_secure( const void *p )
-{
- return p >= pool && p < (void*)((char*)pool+poolsize);
-}
-
-
-
-/****************
- * Warning: This code might be called by an interrupt handler
- * and frankly, there should really be such a handler,
- * to make sure that the memory is wiped out.
- * We hope that the OS wipes out mlocked memory after
- * receiving a SIGKILL - it really should do so, otherwise
- * there is no chance to get the secure memory cleaned.
- */
-void
-secmem_term()
-{
- if( !pool_okay )
- return;
-
- memset( pool, 0xff, poolsize);
- memset( pool, 0xaa, poolsize);
- memset( pool, 0x55, poolsize);
- memset( pool, 0x00, poolsize);
- #ifdef HAVE_MMAP
- if( pool_is_mmapped )
- munmap( pool, poolsize );
- #endif
- pool = NULL;
- pool_okay = 0;
- poolsize=0;
- poollen=0;
- unused_blocks=NULL;
-}
-
-
-void
-secmem_dump_stats()
-{
- if( disable_secmem )
- return;
- fprintf(stderr,
- "secmem usage: %u/%u bytes in %u/%u blocks of pool %lu/%lu\n",
- cur_alloced, max_alloced, cur_blocks, max_blocks,
- (ulong)poollen, (ulong)poolsize );
-}
-
diff --git a/util/simple-gettext.c b/util/simple-gettext.c
deleted file mode 100644
index b5ee446cb..000000000
--- a/util/simple-gettext.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/* simple-gettext.c - a simplified version of gettext.
- * Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-/* This is a simplified version of gettext written by Ulrich Drepper.
- * It is used for the Win32 version of GnuPG beucase all the overhead
- * of gettext is not needed and we have to do some special Win32 stuff.
- * I decided that this is far easier than to tweak gettext for the special
- * cases (I tried it but it is a lot of code). wk 15.09.99
- */
-
-#include <config.h>
-#ifdef USE_SIMPLE_GETTEXT
-#if !defined (__MINGW32__) && !defined (__CYGWIN32__)
-#error This file can only be used with MingW32 or Cygwin32
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <windows.h>
-#include "types.h"
-#include "util.h"
-
-
-/* The magic number of the GNU message catalog format. */
-#define MAGIC 0x950412de
-#define MAGIC_SWAPPED 0xde120495
-
-/* Revision number of the currently used .mo (binary) file format. */
-#define MO_REVISION_NUMBER 0
-
-
-/* Header for binary .mo file format. */
-struct mo_file_header
-{
- /* The magic number. */
- u32 magic;
- /* The revision number of the file format. */
- u32 revision;
- /* The number of strings pairs. */
- u32 nstrings;
- /* Offset of table with start offsets of original strings. */
- u32 orig_tab_offset;
- /* Offset of table with start offsets of translation strings. */
- u32 trans_tab_offset;
- /* Size of hashing table. */
- u32 hash_tab_size;
- /* Offset of first hashing entry. */
- u32 hash_tab_offset;
-};
-
-struct string_desc
-{
- /* Length of addressed string. */
- u32 length;
- /* Offset of string in file. */
- u32 offset;
-};
-
-
-
-struct loaded_domain
-{
- char *data;
- int must_swap;
- u32 nstrings;
-/* char *mapped; */
- struct string_desc *orig_tab;
- struct string_desc *trans_tab;
- u32 hash_size;
- u32 *hash_tab;
-};
-
-
-static struct loaded_domain *the_domain;
-
-static __inline__ u32
-do_swap_u32( u32 i )
-{
- return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
-}
-
-#define SWAPIT(flag, data) ((flag) ? do_swap_u32(data) : (data) )
-
-
-/* We assume to have `unsigned long int' value with at least 32 bits. */
-#define HASHWORDBITS 32
-
-/* The so called `hashpjw' function by P.J. Weinberger
- [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
- 1986, 1987 Bell Telephone Laboratories, Inc.] */
-
-static __inline__ ulong
-hash_string( const char *str_param )
-{
- unsigned long int hval, g;
- const char *str = str_param;
-
- hval = 0;
- while (*str != '\0')
- {
- hval <<= 4;
- hval += (unsigned long int) *str++;
- g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
- if (g != 0)
- {
- hval ^= g >> (HASHWORDBITS - 8);
- hval ^= g;
- }
- }
- return hval;
-}
-
-
-static struct loaded_domain *
-load_domain( const char *filename )
-{
- FILE *fp;
- size_t size;
- struct stat st;
- struct mo_file_header *data = NULL;
- struct loaded_domain *domain = NULL;
- size_t to_read;
- char *read_ptr;
-
- fp = fopen( filename, "rb" );
- if( !fp )
- return NULL; /* can't open the file */
- /* we must know about the size of the file */
- if( fstat( fileno(fp ), &st )
- || (size = (size_t)st.st_size) != st.st_size
- || size < sizeof (struct mo_file_header) ) {
- fclose( fp );
- return NULL;
- }
-
- data = malloc( size );
- if( !data ) {
- fclose( fp );
- return NULL; /* out of memory */
- }
-
- to_read = size;
- read_ptr = (char *) data;
- do {
- long int nb = fread( read_ptr, 1, to_read, fp );
- if( nb < to_read ) {
- fclose (fp);
- free(data);
- return NULL; /* read error */
- }
- read_ptr += nb;
- to_read -= nb;
- } while( to_read > 0 );
- fclose (fp);
-
- /* Using the magic number we can test whether it really is a message
- * catalog file. */
- if( data->magic != MAGIC && data->magic != MAGIC_SWAPPED ) {
- /* The magic number is wrong: not a message catalog file. */
- free( data );
- return NULL;
- }
-
- domain = calloc( 1, sizeof *domain );
- if( !domain ) {
- free( data );
- return NULL;
- }
- domain->data = (char *) data;
- domain->must_swap = data->magic != MAGIC;
-
- /* Fill in the information about the available tables. */
- switch( SWAPIT(domain->must_swap, data->revision) ) {
- case 0:
- domain->nstrings = SWAPIT(domain->must_swap, data->nstrings);
- domain->orig_tab = (struct string_desc *)
- ((char *) data + SWAPIT(domain->must_swap, data->orig_tab_offset));
- domain->trans_tab = (struct string_desc *)
- ((char *) data + SWAPIT(domain->must_swap, data->trans_tab_offset));
- domain->hash_size = SWAPIT(domain->must_swap, data->hash_tab_size);
- domain->hash_tab = (u32 *)
- ((char *) data + SWAPIT(domain->must_swap, data->hash_tab_offset));
- break;
-
- default: /* This is an invalid revision. */
- free( data );
- free( domain );
- return NULL;
- }
-
- /* allocate an array to keep track of code page mappings */
-/* domain->mapped = calloc( 1, domain->nstrings ); */
-/* if( !domain->mapped ) { */
-/* free( data ); */
-/* free( domain ); */
-/* return NULL; */
-/* } */
-
- return domain;
-}
-
-
-/****************
- * Set the file used for translations. Pass a NULL to disable
- * translation. A new filename may be set at anytime.
- * WARNING: After changing the filename you shoudl not access any data
- * retrieved by gettext().
- */
-int
-set_gettext_file( const char *filename )
-{
- struct loaded_domain *domain = NULL;
-
- if( filename && *filename ) {
- if( filename[0] == '/'
- #ifdef HAVE_DRIVE_LETTERS
- || ( isalpha(filename[0])
- && filename[1] == ':'
- && (filename[2] == '/' || filename[2] == '\\') )
- #endif
- ) {
- /* absolute path - use it as is */
- domain = load_domain( filename );
- }
- else { /* relative path - append ".mo" and get dir from the environment */
- char *buf = NULL;
- char *dir;
- char *p;
-
- dir = read_w32_registry_string( NULL,
- "Control Panel\\Mingw32\\NLS",
- "MODir" );
- if( dir && (buf=malloc(strlen(dir)+strlen(filename)+1+3+1)) ) {
- strcpy(stpcpy(stpcpy(stpcpy( buf, dir),"\\"), filename),".mo");
- /* Better make sure that we don't mix forward and
- backward slashes. It seems that some Windoze
- versions don't accept this. */
- for (p=buf; *p; p++)
- {
- if (*p == '/')
- *p = '\\';
- }
- domain = load_domain( buf );
- free(buf);
- }
- free(dir);
- }
- if( !domain )
- return -1;
- }
-
- if( the_domain ) {
- free( the_domain->data );
-/* free( the_domain->mapped ); */
- free( the_domain );
- the_domain = NULL;
- }
- the_domain = domain;
- return NULL;
-}
-
-
-static const char*
-get_string( struct loaded_domain *domain, u32 idx )
-{
- char *p = domain->data + SWAPIT(domain->must_swap,
- domain->trans_tab[idx].offset);
-#if 0 /* Mapping is not used any more. Instead we convert the files when
- Creating the binary distribution. */
- if( !domain->mapped[idx] ) {
- byte *pp;
-
- domain->mapped[idx] = 1;
- /* we assume Latin1 -> CP 850 for now */
- for( pp=p; *pp; pp++ ) {
- if( (*pp & 0x80) ) {
- switch( *pp ) {
- /* ISO-8859-1 to IBM-CP-850 */
- case 0xa0: *pp = '\xff' ; break; /* nobreakspace */
- case 0xa1: *pp = '\xad' ; break; /* exclamdown */
- case 0xa2: *pp = '\xbd' ; break; /* cent */
- case 0xa3: *pp = '\x9c' ; break; /* sterling */
- case 0xa4: *pp = '\xcf' ; break; /* currency */
- case 0xa5: *pp = '\xbe' ; break; /* yen */
- case 0xa6: *pp = '\xdd' ; break; /* brokenbar */
- case 0xa7: *pp = '\xf5' ; break; /* section */
- case 0xa8: *pp = '\xf9' ; break; /* diaeresis */
- case 0xa9: *pp = '\xb8' ; break; /* copyright */
- case 0xaa: *pp = '\xa6' ; break; /* ordfeminine */
- case 0xab: *pp = '\xae' ; break; /* guillemotleft */
- case 0xac: *pp = '\xaa' ; break; /* notsign */
- case 0xad: *pp = '\xf0' ; break; /* hyphen */
- case 0xae: *pp = '\xa9' ; break; /* registered */
- case 0xaf: *pp = '\xee' ; break; /* macron */
- case 0xb0: *pp = '\xf8' ; break; /* degree */
- case 0xb1: *pp = '\xf1' ; break; /* plusminus */
- case 0xb2: *pp = '\xfd' ; break; /* twosuperior */
- case 0xb3: *pp = '\xfc' ; break; /* threesuperior */
- case 0xb4: *pp = '\xef' ; break; /* acute */
- case 0xb5: *pp = '\xe6' ; break; /* mu */
- case 0xb6: *pp = '\xf4' ; break; /* paragraph */
- case 0xb7: *pp = '\xfa' ; break; /* periodcentered */
- case 0xb8: *pp = '\xf7' ; break; /* cedilla */
- case 0xb9: *pp = '\xfb' ; break; /* onesuperior */
- case 0xba: *pp = '\xa7' ; break; /* masculine */
- case 0xbb: *pp = '\xaf' ; break; /* guillemotright */
- case 0xbc: *pp = '\xac' ; break; /* onequarter */
- case 0xbd: *pp = '\xab' ; break; /* onehalf */
- case 0xbe: *pp = '\xf3' ; break; /* threequarters */
- case 0xbf: *pp = '\xa8' ; break; /* questiondown */
- case 0xc0: *pp = '\xb7' ; break; /* Agrave */
- case 0xc1: *pp = '\xb5' ; break; /* Aacute */
- case 0xc2: *pp = '\xb6' ; break; /* Acircumflex */
- case 0xc3: *pp = '\xc7' ; break; /* Atilde */
- case 0xc4: *pp = '\x8e' ; break; /* Adiaeresis */
- case 0xc5: *pp = '\x8f' ; break; /* Aring */
- case 0xc6: *pp = '\x92' ; break; /* AE */
- case 0xc7: *pp = '\x80' ; break; /* Ccedilla */
- case 0xc8: *pp = '\xd4' ; break; /* Egrave */
- case 0xc9: *pp = '\x90' ; break; /* Eacute */
- case 0xca: *pp = '\xd2' ; break; /* Ecircumflex */
- case 0xcb: *pp = '\xd3' ; break; /* Ediaeresis */
- case 0xcc: *pp = '\xde' ; break; /* Igrave */
- case 0xcd: *pp = '\xd6' ; break; /* Iacute */
- case 0xce: *pp = '\xd7' ; break; /* Icircumflex */
- case 0xcf: *pp = '\xd8' ; break; /* Idiaeresis */
- case 0xd0: *pp = '\xd1' ; break; /* Eth */
- case 0xd1: *pp = '\xa5' ; break; /* Ntilde */
- case 0xd2: *pp = '\xe3' ; break; /* Ograve */
- case 0xd3: *pp = '\xe0' ; break; /* Oacute */
- case 0xd4: *pp = '\xe2' ; break; /* Ocircumflex */
- case 0xd5: *pp = '\xe5' ; break; /* Otilde */
- case 0xd6: *pp = '\x99' ; break; /* Odiaeresis */
- case 0xd7: *pp = '\x9e' ; break; /* multiply */
- case 0xd8: *pp = '\x9d' ; break; /* Ooblique */
- case 0xd9: *pp = '\xeb' ; break; /* Ugrave */
- case 0xda: *pp = '\xe9' ; break; /* Uacute */
- case 0xdb: *pp = '\xea' ; break; /* Ucircumflex */
- case 0xdc: *pp = '\x9a' ; break; /* Udiaeresis */
- case 0xdd: *pp = '\xed' ; break; /* Yacute */
- case 0xde: *pp = '\xe8' ; break; /* Thorn */
- case 0xdf: *pp = '\xe1' ; break; /* ssharp */
- case 0xe0: *pp = '\x85' ; break; /* agrave */
- case 0xe1: *pp = '\xa0' ; break; /* aacute */
- case 0xe2: *pp = '\x83' ; break; /* acircumflex */
- case 0xe3: *pp = '\xc6' ; break; /* atilde */
- case 0xe4: *pp = '\x84' ; break; /* adiaeresis */
- case 0xe5: *pp = '\x86' ; break; /* aring */
- case 0xe6: *pp = '\x91' ; break; /* ae */
- case 0xe7: *pp = '\x87' ; break; /* ccedilla */
- case 0xe8: *pp = '\x8a' ; break; /* egrave */
- case 0xe9: *pp = '\x82' ; break; /* eacute */
- case 0xea: *pp = '\x88' ; break; /* ecircumflex */
- case 0xeb: *pp = '\x89' ; break; /* ediaeresis */
- case 0xec: *pp = '\x8d' ; break; /* igrave */
- case 0xed: *pp = '\xa1' ; break; /* iacute */
- case 0xee: *pp = '\x8c' ; break; /* icircumflex */
- case 0xef: *pp = '\x8b' ; break; /* idiaeresis */
- case 0xf0: *pp = '\xd0' ; break; /* eth */
- case 0xf1: *pp = '\xa4' ; break; /* ntilde */
- case 0xf2: *pp = '\x95' ; break; /* ograve */
- case 0xf3: *pp = '\xa2' ; break; /* oacute */
- case 0xf4: *pp = '\x93' ; break; /* ocircumflex */
- case 0xf5: *pp = '\xe4' ; break; /* otilde */
- case 0xf6: *pp = '\x94' ; break; /* odiaeresis */
- case 0xf7: *pp = '\xf6' ; break; /* division */
- case 0xf8: *pp = '\x9b' ; break; /* oslash */
- case 0xf9: *pp = '\x97' ; break; /* ugrave */
- case 0xfa: *pp = '\xa3' ; break; /* uacute */
- case 0xfb: *pp = '\x96' ; break; /* ucircumflex */
- case 0xfc: *pp = '\x81' ; break; /* udiaeresis */
- case 0xfd: *pp = '\xec' ; break; /* yacute */
- case 0xfe: *pp = '\xe7' ; break; /* thorn */
- case 0xff: *pp = '\x98' ; break; /* ydiaeresis */
- default : break;
- }
- }
- }
-
- }
-#endif /* unused code */
- return (const char*)p;
-}
-
-
-
-const char *
-gettext( const char *msgid )
-{
- struct loaded_domain *domain;
- size_t act = 0;
- size_t top, bottom;
-
- if( !(domain = the_domain) )
- goto not_found;
-
- /* Locate the MSGID and its translation. */
- if( domain->hash_size > 2 && domain->hash_tab ) {
- /* Use the hashing table. */
- u32 len = strlen (msgid);
- u32 hash_val = hash_string (msgid);
- u32 idx = hash_val % domain->hash_size;
- u32 incr = 1 + (hash_val % (domain->hash_size - 2));
- u32 nstr = SWAPIT (domain->must_swap, domain->hash_tab[idx]);
-
- if ( !nstr ) /* Hash table entry is empty. */
- goto not_found;
-
- if( SWAPIT(domain->must_swap,
- domain->orig_tab[nstr - 1].length) == len
- && !strcmp( msgid,
- domain->data + SWAPIT(domain->must_swap,
- domain->orig_tab[nstr - 1].offset)) )
- return get_string( domain, nstr - 1 );
-
- for(;;) {
- if (idx >= domain->hash_size - incr)
- idx -= domain->hash_size - incr;
- else
- idx += incr;
-
- nstr = SWAPIT(domain->must_swap, domain->hash_tab[idx]);
- if( !nstr )
- goto not_found; /* Hash table entry is empty. */
-
- if ( SWAPIT(domain->must_swap,
- domain->orig_tab[nstr - 1].length) == len
- && !strcmp (msgid,
- domain->data + SWAPIT(domain->must_swap,
- domain->orig_tab[nstr - 1].offset)))
- return get_string( domain, nstr-1 );
- }
- /* NOTREACHED */
- }
-
- /* Now we try the default method: binary search in the sorted
- array of messages. */
- bottom = 0;
- top = domain->nstrings;
- while( bottom < top ) {
- int cmp_val;
-
- act = (bottom + top) / 2;
- cmp_val = strcmp(msgid, domain->data
- + SWAPIT(domain->must_swap,
- domain->orig_tab[act].offset));
- if (cmp_val < 0)
- top = act;
- else if (cmp_val > 0)
- bottom = act + 1;
- else
- return get_string( domain, act );
- }
-
- not_found:
- return msgid;
-}
-
-#if 0
- unsigned int cp1, cp2;
-
- cp1 = GetConsoleCP();
- cp2 = GetConsoleOutputCP();
-
- log_info("InputCP=%u OutputCP=%u\n", cp1, cp2 );
-
- if( !SetConsoleOutputCP( 1252 ) )
- log_info("SetConsoleOutputCP failed: %d\n", (int)GetLastError() );
-
- cp1 = GetConsoleCP();
- cp2 = GetConsoleOutputCP();
- log_info("InputCP=%u OutputCP=%u after switch1\n", cp1, cp2 );
-#endif
-
-#endif /* USE_SIMPLE_GETTEXT */
diff --git a/util/strgutil.c b/util/strgutil.c
deleted file mode 100644
index e793fc1ce..000000000
--- a/util/strgutil.c
+++ /dev/null
@@ -1,955 +0,0 @@
-/* strgutil.c - string utilities
- * Copyright (C) 1994, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#ifdef HAVE_LANGINFO_CODESET
-#include <langinfo.h>
-#endif
-
-#include "types.h"
-#include "util.h"
-#include "memory.h"
-
-
-static ushort koi8_unicode[128] = {
- 0x2500,0x2502,0x250c,0x2510,0x2514,0x2518,0x251c,0x2524,
- 0x252c,0x2534,0x253c,0x2580,0x2584,0x2588,0x258c,0x2590,
- 0x2591,0x2592,0x2593,0x2320,0x25a0,0x2219,0x221a,0x2248,
- 0x2264,0x2265,0x00a0,0x2321,0x00b0,0x00b2,0x00b7,0x00f7,
- 0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556,
- 0x2557,0x2558,0x2559,0x255a,0x255b,0x255c,0x255d,0x255e,
- 0x255f,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565,
- 0x2566,0x2567,0x2568,0x2569,0x256a,0x256b,0x256c,0x00a9,
- 0x044e,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,
- 0x0445,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,
- 0x043f,0x044f,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,
- 0x044c,0x044b,0x0437,0x0448,0x044d,0x0449,0x0447,0x044a,
- 0x042e,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,
- 0x0425,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,
- 0x041f,0x042f,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,
- 0x042c,0x042b,0x0417,0x0428,0x042d,0x0429,0x0427,0x042a
-};
-
-static ushort latin2_unicode[128] = {
- 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
- 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
- 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
- 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
- 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7,
- 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B,
- 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7,
- 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C,
- 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
- 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
- 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
- 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
- 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
- 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
- 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
- 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9
-};
-
-
-static const char *active_charset_name = "iso-8859-1";
-static ushort *active_charset = NULL;
-static int no_translation = 0;
-
-void
-free_strlist( STRLIST sl )
-{
- STRLIST sl2;
-
- for(; sl; sl = sl2 ) {
- sl2 = sl->next;
- m_free(sl);
- }
-}
-
-
-STRLIST
-add_to_strlist( STRLIST *list, const char *string )
-{
- STRLIST sl;
-
- sl = m_alloc( sizeof *sl + strlen(string));
- sl->flags = 0;
- strcpy(sl->d, string);
- sl->next = *list;
- *list = sl;
- return sl;
-}
-
-/****************
- * ame as add_to_strlist() but if is_utf8 is *not* set a conversion
- * to UTF8 is done
- */
-STRLIST
-add_to_strlist2( STRLIST *list, const char *string, int is_utf8 )
-{
- STRLIST sl;
-
- if( is_utf8 )
- sl = add_to_strlist( list, string );
- else {
- char *p = native_to_utf8( string );
- sl = add_to_strlist( list, p );
- m_free( p );
- }
- return sl;
-}
-
-STRLIST
-append_to_strlist( STRLIST *list, const char *string )
-{
- STRLIST r, sl;
-
- sl = m_alloc( sizeof *sl + strlen(string));
- sl->flags = 0;
- strcpy(sl->d, string);
- sl->next = NULL;
- if( !*list )
- *list = sl;
- else {
- for( r = *list; r->next; r = r->next )
- ;
- r->next = sl;
- }
- return sl;
-}
-
-STRLIST
-append_to_strlist2( STRLIST *list, const char *string, int is_utf8 )
-{
- STRLIST sl;
-
- if( is_utf8 )
- sl = append_to_strlist( list, string );
- else {
- char *p = native_to_utf8( string );
- sl = append_to_strlist( list, p );
- m_free( p );
- }
- return sl;
-}
-
-
-STRLIST
-strlist_prev( STRLIST head, STRLIST node )
-{
- STRLIST n;
-
- for(n=NULL; head && head != node; head = head->next )
- n = head;
- return n;
-}
-
-STRLIST
-strlist_last( STRLIST node )
-{
- if( node )
- for( ; node->next ; node = node->next )
- ;
- return node;
-}
-
-char *
-pop_strlist( STRLIST *list )
-{
- char *str=NULL;
- STRLIST sl=*list;
-
- if(sl)
- {
- str=m_alloc(strlen(sl->d)+1);
- strcpy(str,sl->d);
-
- *list=sl->next;
- m_free(sl);
- }
-
- return str;
-}
-
-/****************
- * look for the substring SUB in buffer and return a pointer to that
- * substring in BUF or NULL if not found.
- * Comparison is case-insensitive.
- */
-const char *
-memistr( const char *buf, size_t buflen, const char *sub )
-{
- const byte *t, *s ;
- size_t n;
-
- for( t=buf, n=buflen, s=sub ; n ; t++, n-- )
- if( toupper(*t) == toupper(*s) ) {
- for( buf=t++, buflen = n--, s++;
- n && toupper(*t) == toupper(*s); t++, s++, n-- )
- ;
- if( !*s )
- return buf;
- t = buf; n = buflen; s = sub ;
- }
-
- return NULL ;
-}
-
-const char *
-ascii_memistr( const char *buf, size_t buflen, const char *sub )
-{
- const byte *t, *s ;
- size_t n;
-
- for( t=buf, n=buflen, s=sub ; n ; t++, n-- )
- if( ascii_toupper(*t) == ascii_toupper(*s) ) {
- for( buf=t++, buflen = n--, s++;
- n && ascii_toupper(*t) == ascii_toupper(*s); t++, s++, n-- )
- ;
- if( !*s )
- return buf;
- t = buf; n = buflen; s = sub ;
- }
-
- return NULL ;
-}
-
-/****************
- * Wie strncpy(), aber es werden maximal n-1 zeichen kopiert und ein
- * '\0' angehängt. Ist n = 0, so geschieht nichts, ist Destination
- * gleich NULL, so wird via m_alloc Speicher besorgt, ist dann nicht
- * genügend Speicher vorhanden, so bricht die funktion ab.
- */
-char *
-mem2str( char *dest , const void *src , size_t n )
-{
- char *d;
- const char *s;
-
- if( n ) {
- if( !dest )
- dest = m_alloc( n ) ;
- d = dest;
- s = src ;
- for(n--; n && *s; n-- )
- *d++ = *s++;
- *d = '\0' ;
- }
-
- return dest ;
-}
-
-
-/****************
- * remove leading and trailing white spaces
- */
-char *
-trim_spaces( char *str )
-{
- char *string, *p, *mark;
-
- string = str;
- /* find first non space character */
- for( p=string; *p && isspace( *(byte*)p ) ; p++ )
- ;
- /* move characters */
- for( (mark = NULL); (*string = *p); string++, p++ )
- if( isspace( *(byte*)p ) ) {
- if( !mark )
- mark = string ;
- }
- else
- mark = NULL ;
- if( mark )
- *mark = '\0' ; /* remove trailing spaces */
-
- return str ;
-}
-
-
-
-unsigned int
-trim_trailing_chars( byte *line, unsigned len, const char *trimchars )
-{
- byte *p, *mark;
- unsigned n;
-
- for(mark=NULL, p=line, n=0; n < len; n++, p++ ) {
- if( strchr(trimchars, *p ) ) {
- if( !mark )
- mark = p;
- }
- else
- mark = NULL;
- }
-
- if( mark ) {
- *mark = 0;
- return mark - line;
- }
- return len;
-}
-
-/****************
- * remove trailing white spaces and return the length of the buffer
- */
-unsigned
-trim_trailing_ws( byte *line, unsigned len )
-{
- return trim_trailing_chars( line, len, " \t\r\n" );
-}
-
-unsigned int
-check_trailing_chars( const byte *line, unsigned int len,
- const char *trimchars )
-{
- const byte *p, *mark;
- unsigned int n;
-
- for(mark=NULL, p=line, n=0; n < len; n++, p++ ) {
- if( strchr(trimchars, *p ) ) {
- if( !mark )
- mark = p;
- }
- else
- mark = NULL;
- }
-
- if( mark ) {
- return mark - line;
- }
- return len;
-}
-
-/****************
- * remove trailing white spaces and return the length of the buffer
- */
-unsigned int
-check_trailing_ws( const byte *line, unsigned int len )
-{
- return check_trailing_chars( line, len, " \t\r\n" );
-}
-
-
-
-int
-string_count_chr( const char *string, int c )
-{
- int count;
- for(count=0; *string; string++ )
- if( *string == c )
- count++;
- return count;
-}
-
-
-int
-set_native_charset( const char *newset )
-{
- if (!newset)
-#ifdef HAVE_LANGINFO_CODESET
- newset = nl_langinfo (CODESET);
-#else
- newset = "8859-1";
-#endif
-
- if (strlen (newset) > 3 && !ascii_memcasecmp (newset, "iso", 3)) {
- newset += 3;
- if (*newset == '-' || *newset == '_')
- newset++;
- }
-
- if( !*newset
- || !ascii_strcasecmp (newset, "8859-1" )
- || !ascii_strcasecmp (newset, "8859-15" ) ) {
- active_charset_name = "iso-8859-1";
- no_translation = 0;
- active_charset = NULL;
- }
- else if( !ascii_strcasecmp( newset, "8859-2" ) ) {
- active_charset_name = "iso-8859-2";
- no_translation = 0;
- active_charset = latin2_unicode;
- }
- else if( !ascii_strcasecmp( newset, "koi8-r" ) ) {
- active_charset_name = "koi8-r";
- no_translation = 0;
- active_charset = koi8_unicode;
- }
- else if( !ascii_strcasecmp (newset, "utf8" )
- || !ascii_strcasecmp(newset, "utf-8") ) {
- active_charset_name = "utf-8";
- no_translation = 1;
- active_charset = NULL;
- }
- else
- return G10ERR_GENERAL;
- return 0;
-}
-
-const char*
-get_native_charset()
-{
- return active_charset_name;
-}
-
-/****************
- * Convert string, which is in native encoding to UTF8 and return the
- * new allocated UTF8 string.
- */
-char *
-native_to_utf8( const char *string )
-{
- const byte *s;
- char *buffer;
- byte *p;
- size_t length=0;
-
- if (no_translation) {
- buffer = m_strdup (string);
- }
- else if( active_charset ) {
- for(s=string; *s; s++ ) {
- length++;
- if( *s & 0x80 )
- length += 2; /* we may need 3 bytes */
- }
- buffer = m_alloc( length + 1 );
- for(p=buffer, s=string; *s; s++ ) {
- if( *s & 0x80 ) {
- ushort val = active_charset[ *s & 0x7f ];
- if( val < 0x0800 ) {
- *p++ = 0xc0 | ( (val >> 6) & 0x1f );
- *p++ = 0x80 | ( val & 0x3f );
- }
- else {
- *p++ = 0xe0 | ( (val >> 12) & 0x0f );
- *p++ = 0x80 | ( (val >> 6) & 0x3f );
- *p++ = 0x80 | ( val & 0x3f );
- }
- }
- else
- *p++ = *s;
- }
- *p = 0;
- }
- else {
- for(s=string; *s; s++ ) {
- length++;
- if( *s & 0x80 )
- length++;
- }
- buffer = m_alloc( length + 1 );
- for(p=buffer, s=string; *s; s++ ) {
- if( *s & 0x80 ) {
- *p++ = 0xc0 | ((*s >> 6) & 3);
- *p++ = 0x80 | ( *s & 0x3f );
- }
- else
- *p++ = *s;
- }
- *p = 0;
- }
- return buffer;
-}
-
-
-/****************
- * Convert string, which is in UTF8 to native encoding. illegal
- * encodings by some "\xnn" and quote all control characters. A
- * character with value DELIM will always be quoted, it must be a
- * vanilla ASCII character.
- */
-char *
-utf8_to_native( const char *string, size_t length, int delim )
-{
- int nleft;
- int i;
- byte encbuf[8];
- int encidx;
- const byte *s;
- size_t n;
- byte *buffer = NULL, *p = NULL;
- unsigned long val = 0;
- size_t slen;
- int resync = 0;
-
- /* 1. pass (p==NULL): count the extended utf-8 characters */
- /* 2. pass (p!=NULL): create string */
- for( ;; ) {
- for( slen=length, nleft=encidx=0, n=0, s=string; slen; s++, slen-- ) {
- if( resync ) {
- if( !(*s < 128 || (*s >= 0xc0 && *s <= 0xfd)) ) {
- /* still invalid */
- if( p ) {
- sprintf(p, "\\x%02x", *s );
- p += 4;
- }
- n += 4;
- continue;
- }
- resync = 0;
- }
- if( !nleft ) {
- if( !(*s & 0x80) ) { /* plain ascii */
- if( *s < 0x20 || *s == 0x7f || *s == delim ||
- (delim && *s=='\\')) {
- n++;
- if( p )
- *p++ = '\\';
- switch( *s ) {
- case '\n': n++; if( p ) *p++ = 'n'; break;
- case '\r': n++; if( p ) *p++ = 'r'; break;
- case '\f': n++; if( p ) *p++ = 'f'; break;
- case '\v': n++; if( p ) *p++ = 'v'; break;
- case '\b': n++; if( p ) *p++ = 'b'; break;
- case 0 : n++; if( p ) *p++ = '0'; break;
- default:
- n += 3;
- if ( p ) {
- sprintf( p, "x%02x", *s );
- p += 3;
- }
- break;
- }
- }
- else {
- if( p ) *p++ = *s;
- n++;
- }
- }
- else if( (*s & 0xe0) == 0xc0 ) { /* 110x xxxx */
- val = *s & 0x1f;
- nleft = 1;
- encidx = 0;
- encbuf[encidx++] = *s;
- }
- else if( (*s & 0xf0) == 0xe0 ) { /* 1110 xxxx */
- val = *s & 0x0f;
- nleft = 2;
- encidx = 0;
- encbuf[encidx++] = *s;
- }
- else if( (*s & 0xf8) == 0xf0 ) { /* 1111 0xxx */
- val = *s & 0x07;
- nleft = 3;
- encidx = 0;
- encbuf[encidx++] = *s;
- }
- else if( (*s & 0xfc) == 0xf8 ) { /* 1111 10xx */
- val = *s & 0x03;
- nleft = 4;
- encidx = 0;
- encbuf[encidx++] = *s;
- }
- else if( (*s & 0xfe) == 0xfc ) { /* 1111 110x */
- val = *s & 0x01;
- nleft = 5;
- encidx = 0;
- encbuf[encidx++] = *s;
- }
- else { /* invalid encoding: print as \xnn */
- if( p ) {
- sprintf(p, "\\x%02x", *s );
- p += 4;
- }
- n += 4;
- resync = 1;
- }
- }
- else if( *s < 0x80 || *s >= 0xc0 ) { /* invalid */
- if( p ) {
- for(i=0; i < encidx; i++ ) {
- sprintf(p, "\\x%02x", encbuf[i] );
- p += 4;
- }
- sprintf(p, "\\x%02x", *s );
- p += 4;
- }
- n += 4 + 4*encidx;
- nleft = 0;
- encidx = 0;
- resync = 1;
- }
- else {
- encbuf[encidx++] = *s;
- val <<= 6;
- val |= *s & 0x3f;
- if( !--nleft ) { /* ready */
- if (no_translation) {
- if( p ) {
- for(i=0; i < encidx; i++ )
- *p++ = encbuf[i];
- }
- n += encidx;
- encidx = 0;
- }
- else if( active_charset ) { /* table lookup */
- for(i=0; i < 128; i++ ) {
- if( active_charset[i] == val )
- break;
- }
- if( i < 128 ) { /* we can print this one */
- if( p ) *p++ = i+128;
- n++;
- }
- else { /* we do not have a translation: print utf8 */
- if( p ) {
- for(i=0; i < encidx; i++ ) {
- sprintf(p, "\\x%02x", encbuf[i] );
- p += 4;
- }
- }
- n += encidx*4;
- encidx = 0;
- }
- }
- else { /* native set */
- if( val >= 0x80 && val < 256 ) {
- n++; /* we can simply print this character */
- if( p ) *p++ = val;
- }
- else { /* we do not have a translation: print utf8 */
- if( p ) {
- for(i=0; i < encidx; i++ ) {
- sprintf(p, "\\x%02x", encbuf[i] );
- p += 4;
- }
- }
- n += encidx*4;
- encidx = 0;
- }
- }
- }
-
- }
- }
- if( !buffer ) { /* allocate the buffer after the first pass */
- buffer = p = m_alloc( n + 1 );
- }
- else {
- *p = 0; /* make a string */
- return buffer;
- }
- }
-}
-
-/****************************************************
- ******** locale insensitive ctype functions ********
- ****************************************************/
-/* FIXME: replace them by a table lookup and macros */
-int
-ascii_isupper (int c)
-{
- return c >= 'A' && c <= 'Z';
-}
-
-int
-ascii_islower (int c)
-{
- return c >= 'a' && c <= 'z';
-}
-
-int
-ascii_toupper (int c)
-{
- if (c >= 'a' && c <= 'z')
- c &= ~0x20;
- return c;
-}
-
-int
-ascii_tolower (int c)
-{
- if (c >= 'A' && c <= 'Z')
- c |= 0x20;
- return c;
-}
-
-
-int
-ascii_strcasecmp (const char *a, const char *b)
-{
- const unsigned char *p1 = (const unsigned char *)a;
- const unsigned char *p2 = (const unsigned char *)b;
- unsigned char c1, c2;
-
- if (p1 == p2)
- return 0;
-
- do
- {
- c1 = ascii_tolower (*p1);
- c2 = ascii_tolower (*p2);
-
- if (c1 == '\0')
- break;
-
- ++p1;
- ++p2;
- }
- while (c1 == c2);
-
- return c1 - c2;
-}
-
-int
-ascii_strncasecmp (const char *a, const char *b, size_t n)
-{
- const unsigned char *p1 = (const unsigned char *)a;
- const unsigned char *p2 = (const unsigned char *)b;
- unsigned char c1, c2;
-
- if (p1 == p2 || !n )
- return 0;
-
- do
- {
- c1 = ascii_tolower (*p1);
- c2 = ascii_tolower (*p2);
-
- if ( !--n || c1 == '\0')
- break;
-
- ++p1;
- ++p2;
- }
- while (c1 == c2);
-
- return c1 - c2;
-}
-
-
-int
-ascii_memcasecmp( const char *a, const char *b, size_t n )
-{
- if (a == b)
- return 0;
- for ( ; n; n--, a++, b++ ) {
- if( *a != *b && ascii_toupper (*a) != ascii_toupper (*b) )
- return *a == *b? 0 : (ascii_toupper (*a) - ascii_toupper (*b));
- }
- return 0;
-}
-
-
-
-/*********************************************
- ********** missing string functions *********
- *********************************************/
-
-#ifndef HAVE_STPCPY
-char *
-stpcpy(char *a,const char *b)
-{
- while( *b )
- *a++ = *b++;
- *a = 0;
-
- return (char*)a;
-}
-#endif
-
-
-#ifndef HAVE_STRSEP
-/* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */
-char *
-strsep (char **stringp, const char *delim)
-{
- char *begin, *end;
-
- begin = *stringp;
- if (begin == NULL)
- return NULL;
-
- /* A frequent case is when the delimiter string contains only one
- character. Here we don't need to call the expensive `strpbrk'
- function and instead work using `strchr'. */
- if (delim[0] == '\0' || delim[1] == '\0')
- {
- char ch = delim[0];
-
- if (ch == '\0')
- end = NULL;
- else
- {
- if (*begin == ch)
- end = begin;
- else if (*begin == '\0')
- end = NULL;
- else
- end = strchr (begin + 1, ch);
- }
- }
- else
- /* Find the end of the token. */
- end = strpbrk (begin, delim);
-
- if (end)
- {
- /* Terminate the token and set *STRINGP past NUL character. */
- *end++ = '\0';
- *stringp = end;
- }
- else
- /* No more delimiters; this is the last token. */
- *stringp = NULL;
-
- return begin;
-}
-#endif /*HAVE_STRSEP*/
-
-
-#ifndef HAVE_STRLWR
-char *
-strlwr(char *s)
-{
- char *p;
- for(p=s; *p; p++ )
- *p = tolower(*p);
- return s;
-}
-#endif
-
-#ifndef HAVE_STRCASECMP
-int
-strcasecmp( const char *a, const char *b )
-{
- for( ; *a && *b; a++, b++ ) {
- if( *a != *b && toupper(*a) != toupper(*b) )
- break;
- }
- return *(const byte*)a - *(const byte*)b;
-}
-#endif
-
-#ifndef HAVE_STRNCASECMP
-int
-strncasecmp( const char *a, const char *b, size_t n )
-{
- for( ; n && *a && *b; a++, b++, n--) {
- if( *a != *b && toupper(*a) != toupper(*b) )
- break;
- }
- if (!n)
- return 0;
- return *(const byte*)a - *(const byte*)b;
-}
-#endif
-
-
-#ifdef __MINGW32__
-/*
- * Like vsprintf but provides a pointer to malloc'd storage, which
- * must be freed by the caller (m_free). Taken from libiberty as
- * found in gcc-2.95.2 and a little bit modernized.
- * FIXME: Write a new CRT for W32.
- */
-int
-vasprintf ( char **result, const char *format, va_list args)
-{
- const char *p = format;
- /* Add one to make sure that it is never zero, which might cause malloc
- to return NULL. */
- int total_width = strlen (format) + 1;
- va_list ap;
-
- /* this is not really portable but works under Windows */
- memcpy ( &ap, &args, sizeof (va_list));
-
- while (*p != '\0')
- {
- if (*p++ == '%')
- {
- while (strchr ("-+ #0", *p))
- ++p;
- if (*p == '*')
- {
- ++p;
- total_width += abs (va_arg (ap, int));
- }
- else
- {
- char *endp;
- total_width += strtoul (p, &endp, 10);
- p = endp;
- }
- if (*p == '.')
- {
- ++p;
- if (*p == '*')
- {
- ++p;
- total_width += abs (va_arg (ap, int));
- }
- else
- {
- char *endp;
- total_width += strtoul (p, &endp, 10);
- p = endp;
- }
- }
- while (strchr ("hlL", *p))
- ++p;
- /* Should be big enough for any format specifier except %s
- and floats. */
- total_width += 30;
- switch (*p)
- {
- case 'd':
- case 'i':
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- case 'c':
- (void) va_arg (ap, int);
- break;
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- (void) va_arg (ap, double);
- /* Since an ieee double can have an exponent of 307, we'll
- make the buffer wide enough to cover the gross case. */
- total_width += 307;
-
- case 's':
- total_width += strlen (va_arg (ap, char *));
- break;
- case 'p':
- case 'n':
- (void) va_arg (ap, char *);
- break;
- }
- }
- }
- *result = m_alloc (total_width);
- if (*result != NULL)
- return vsprintf (*result, format, args);
- else
- return 0;
-}
-
-#endif /*__MINGW32__*/
-
diff --git a/util/ttyio.c b/util/ttyio.c
deleted file mode 100644
index 40fe7eb52..000000000
--- a/util/ttyio.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/* ttyio.c - tty i/O functions
- * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <unistd.h>
-#ifdef HAVE_TCGETATTR
- #include <termios.h>
-#else
- #ifdef HAVE_TERMIO_H
- /* simulate termios with termio */
- #include <termio.h>
- #define termios termio
- #define tcsetattr ioctl
- #define TCSAFLUSH TCSETAF
- #define tcgetattr(A,B) ioctl(A,TCGETA,B)
- #define HAVE_TCGETATTR
- #endif
-#endif
-#ifdef __MINGW32__ /* use the odd Win32 functions */
- #include <windows.h>
- #ifdef HAVE_TCGETATTR
- #error mingw32 and termios
- #endif
-#endif
-#include <errno.h>
-#include <ctype.h>
-#include "util.h"
-#include "memory.h"
-#include "ttyio.h"
-
-#define CONTROL_D ('D' - 'A' + 1)
-#ifdef __VMS
- #define TERMDEVICE "/dev/tty"
-#else
- #define TERMDEVICE "/dev/tty"
-#endif
-
-#ifdef __MINGW32__ /* use the odd Win32 functions */
-static struct {
- HANDLE in, out;
-} con;
-#define DEF_INPMODE (ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT \
- |ENABLE_PROCESSED_INPUT )
-#define HID_INPMODE (ENABLE_LINE_INPUT|ENABLE_PROCESSED_INPUT )
-#define DEF_OUTMODE (ENABLE_WRAP_AT_EOL_OUTPUT|ENABLE_PROCESSED_OUTPUT)
-
-#else /* yeah, we have a real OS */
-static FILE *ttyfp = NULL;
-#endif
-
-static int initialized;
-static int last_prompt_len;
-static int batchmode;
-static int no_terminal;
-
-#ifdef HAVE_TCGETATTR
- static struct termios termsave;
- static int restore_termios;
-#endif
-
-
-#ifdef HAVE_TCGETATTR
-static void
-cleanup(void)
-{
- if( restore_termios ) {
- restore_termios = 0; /* do it prios in case it is interrupted again */
- if( tcsetattr(fileno(ttyfp), TCSAFLUSH, &termsave) )
- log_error("tcsetattr() failed: %s\n", strerror(errno) );
- }
-}
-#endif
-
-static void
-init_ttyfp(void)
-{
- if( initialized )
- return;
-
- #if defined(__MINGW32__)
- {
- SECURITY_ATTRIBUTES sa;
-
- memset(&sa, 0, sizeof(sa));
- sa.nLength = sizeof(sa);
- sa.bInheritHandle = TRUE;
- con.out = CreateFileA( "CONOUT$", GENERIC_READ|GENERIC_WRITE,
- FILE_SHARE_READ|FILE_SHARE_WRITE,
- &sa, OPEN_EXISTING, 0, 0 );
- if( con.out == INVALID_HANDLE_VALUE )
- log_fatal("open(CONOUT$) failed: rc=%d", (int)GetLastError() );
- memset(&sa, 0, sizeof(sa));
- sa.nLength = sizeof(sa);
- sa.bInheritHandle = TRUE;
- con.in = CreateFileA( "CONIN$", GENERIC_READ|GENERIC_WRITE,
- FILE_SHARE_READ|FILE_SHARE_WRITE,
- &sa, OPEN_EXISTING, 0, 0 );
- if( con.in == INVALID_HANDLE_VALUE )
- log_fatal("open(CONIN$) failed: rc=%d", (int)GetLastError() );
- }
- SetConsoleMode(con.in, DEF_INPMODE );
- SetConsoleMode(con.out, DEF_OUTMODE );
-
- #elif defined(__EMX__)
- ttyfp = stdout; /* Fixme: replace by the real functions: see wklib */
- #else
- ttyfp = batchmode? stderr : fopen(TERMDEVICE, "r+");
- if( !ttyfp ) {
- log_error("cannot open /dev/tty: %s\n", strerror(errno) );
- exit(2);
- }
- #endif
- #ifdef HAVE_TCGETATTR
- atexit( cleanup );
- #endif
- initialized = 1;
-}
-
-int
-tty_batchmode( int onoff )
-{
- int old = batchmode;
- if( onoff != -1 )
- batchmode = onoff;
- return old;
-}
-
-int
-tty_no_terminal(int onoff)
-{
- int old = no_terminal;
- no_terminal = onoff ? 1 : 0;
- return old;
-}
-
-void
-tty_printf( const char *fmt, ... )
-{
- va_list arg_ptr;
-
- if (no_terminal)
- return;
-
- if( !initialized )
- init_ttyfp();
-
- va_start( arg_ptr, fmt ) ;
- #ifdef __MINGW32__
- {
- char *buf = NULL;
- int n;
- DWORD nwritten;
-
- n = vasprintf(&buf, fmt, arg_ptr);
- if( !buf )
- log_bug("vasprintf() failed\n");
-
- if( !WriteConsoleA( con.out, buf, n, &nwritten, NULL ) )
- log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() );
- if( n != nwritten )
- log_fatal("WriteConsole failed: %d != %d\n", n, (int)nwritten );
- last_prompt_len += n;
- m_free (buf);
- }
- #else
- last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ;
- fflush(ttyfp);
- #endif
- va_end(arg_ptr);
-}
-
-
-/****************
- * Print a string, but filter all control characters out.
- */
-void
-tty_print_string( byte *p, size_t n )
-{
- if (no_terminal)
- return;
-
- if( !initialized )
- init_ttyfp();
-
- #ifdef __MINGW32__
- /* not so effective, change it if you want */
- for( ; n; n--, p++ )
- if( iscntrl( *p ) ) {
- if( *p == '\n' )
- tty_printf("\\n");
- else if( !*p )
- tty_printf("\\0");
- else
- tty_printf("\\x%02x", *p);
- }
- else
- tty_printf("%c", *p);
- #else
- for( ; n; n--, p++ )
- if( iscntrl( *p ) ) {
- putc('\\', ttyfp);
- if( *p == '\n' )
- putc('n', ttyfp);
- else if( !*p )
- putc('0', ttyfp);
- else
- fprintf(ttyfp, "x%02x", *p );
- }
- else
- putc(*p, ttyfp);
- #endif
-}
-
-void
-tty_print_utf8_string2( byte *p, size_t n, size_t max_n )
-{
- size_t i;
- char *buf;
-
- if (no_terminal)
- return;
-
- /* we can handle plain ascii simpler, so check for it first */
- for(i=0; i < n; i++ ) {
- if( p[i] & 0x80 )
- break;
- }
- if( i < n ) {
- buf = utf8_to_native( p, n, 0 );
- if( strlen( buf ) > max_n ) {
- buf[max_n] = 0;
- }
- /*(utf8 conversion already does the control character quoting)*/
- tty_printf("%s", buf );
- m_free( buf );
- }
- else {
- if( n > max_n ) {
- n = max_n;
- }
- tty_print_string( p, n );
- }
-}
-
-void
-tty_print_utf8_string( byte *p, size_t n )
-{
- tty_print_utf8_string2( p, n, n );
-}
-
-
-static char *
-do_get( const char *prompt, int hidden )
-{
- char *buf;
- #ifndef __riscos__
- byte cbuf[1];
- #endif
- int c, n, i;
-
- if( batchmode ) {
- log_error("Sorry, we are in batchmode - can't get input\n");
- exit(2);
- }
-
- if (no_terminal) {
- log_error("Sorry, no terminal at all requested - can't get input\n");
- exit(2);
- }
-
- if( !initialized )
- init_ttyfp();
-
- last_prompt_len = 0;
- tty_printf( "%s", prompt );
- buf = m_alloc(n=50);
- i = 0;
-
- #ifdef __MINGW32__ /* windoze version */
- if( hidden )
- SetConsoleMode(con.in, HID_INPMODE );
-
- for(;;) {
- DWORD nread;
-
- if( !ReadConsoleA( con.in, cbuf, 1, &nread, NULL ) )
- log_fatal("ReadConsole failed: rc=%d", (int)GetLastError() );
- if( !nread )
- continue;
- if( *cbuf == '\n' )
- break;
-
- if( !hidden )
- last_prompt_len++;
- c = *cbuf;
- if( c == '\t' )
- c = ' ';
- else if( c > 0xa0 )
- ; /* we don't allow 0xa0, as this is a protected blank which may
- * confuse the user */
- else if( iscntrl(c) )
- continue;
- if( !(i < n-1) ) {
- n += 50;
- buf = m_realloc( buf, n );
- }
- buf[i++] = c;
- }
-
- if( hidden )
- SetConsoleMode(con.in, DEF_INPMODE );
-
- #elif defined(__riscos__)
- do {
- c = riscos_getchar();
- if (c == 0xa || c == 0xd) { /* Return || Enter */
- c = (int) '\n';
- } else if (c == 0x8 || c == 0x7f) { /* Backspace || Delete */
- if (i>0) {
- i--;
- if (!hidden) {
- last_prompt_len--;
- fputc(8, ttyfp);
- fputc(32, ttyfp);
- fputc(8, ttyfp);
- fflush(ttyfp);
- }
- } else {
- fputc(7, ttyfp);
- fflush(ttyfp);
- }
- continue;
- } else if (c == (int) '\t') { /* Tab */
- c = ' ';
- } else if (c > 0xa0) {
- ; /* we don't allow 0xa0, as this is a protected blank which may
- * confuse the user */
- } else if (iscntrl(c)) {
- continue;
- }
- if(!(i < n-1)) {
- n += 50;
- buf = m_realloc(buf, n);
- }
- buf[i++] = c;
- if (!hidden) {
- last_prompt_len++;
- fputc(c, ttyfp);
- fflush(ttyfp);
- }
- } while (c != '\n');
- i = (i>0) ? i-1 : 0;
- #else /* unix version */
- if( hidden ) {
- #ifdef HAVE_TCGETATTR
- struct termios term;
-
- if( tcgetattr(fileno(ttyfp), &termsave) )
- log_fatal("tcgetattr() failed: %s\n", strerror(errno) );
- restore_termios = 1;
- term = termsave;
- term.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
- if( tcsetattr( fileno(ttyfp), TCSAFLUSH, &term ) )
- log_fatal("tcsetattr() failed: %s\n", strerror(errno) );
- #endif
- }
-
- /* fixme: How can we avoid that the \n is echoed w/o disabling
- * canonical mode - w/o this kill_prompt can't work */
- while( read(fileno(ttyfp), cbuf, 1) == 1 && *cbuf != '\n' ) {
- if( !hidden )
- last_prompt_len++;
- c = *cbuf;
- if( c == CONTROL_D )
- log_info("control d found\n");
- if( c == '\t' )
- c = ' ';
- else if( c > 0xa0 )
- ; /* we don't allow 0xa0, as this is a protected blank which may
- * confuse the user */
- else if( iscntrl(c) )
- continue;
- if( !(i < n-1) ) {
- n += 50;
- buf = m_realloc( buf, n );
- }
- buf[i++] = c;
- }
- if( *cbuf != '\n' ) {
- buf[0] = CONTROL_D;
- i = 1;
- }
-
-
- if( hidden ) {
- #ifdef HAVE_TCGETATTR
- if( tcsetattr(fileno(ttyfp), TCSAFLUSH, &termsave) )
- log_error("tcsetattr() failed: %s\n", strerror(errno) );
- restore_termios = 0;
- #endif
- }
- #endif /* end unix version */
- buf[i] = 0;
- return buf;
-}
-
-
-char *
-tty_get( const char *prompt )
-{
- return do_get( prompt, 0 );
-}
-
-char *
-tty_get_hidden( const char *prompt )
-{
- return do_get( prompt, 1 );
-}
-
-
-void
-tty_kill_prompt()
-{
- if ( no_terminal )
- return;
-
- if( !initialized )
- init_ttyfp();
-
- if( batchmode )
- last_prompt_len = 0;
- if( !last_prompt_len )
- return;
- #ifdef __MINGW32__
- tty_printf("\r%*s\r", last_prompt_len, "");
- #else
- {
- int i;
- putc('\r', ttyfp);
- for(i=0; i < last_prompt_len; i ++ )
- putc(' ', ttyfp);
- putc('\r', ttyfp);
- fflush(ttyfp);
- }
- #endif
- last_prompt_len = 0;
-}
-
-
-int
-tty_get_answer_is_yes( const char *prompt )
-{
- int yes;
- char *p = tty_get( prompt );
- tty_kill_prompt();
- yes = answer_is_yes(p);
- m_free(p);
- return yes;
-}
-
diff --git a/util/w32reg.c b/util/w32reg.c
deleted file mode 100644
index 5391c8027..000000000
--- a/util/w32reg.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* w32reg.c - MS-Windows Registry access
- * Copyright (C) 1999, 2002 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
- /* This module is only used in this environment */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <windows.h>
-#include "util.h"
-#include "memory.h"
-
-static HKEY
-get_root_key(const char *root)
-{
- HKEY root_key;
-
- if( !root )
- root_key = HKEY_CURRENT_USER;
- else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) )
- root_key = HKEY_CLASSES_ROOT;
- else if( !strcmp( root, "HKEY_CURRENT_USER" ) )
- root_key = HKEY_CURRENT_USER;
- else if( !strcmp( root, "HKEY_LOCAL_MACHINE" ) )
- root_key = HKEY_LOCAL_MACHINE;
- else if( !strcmp( root, "HKEY_USERS" ) )
- root_key = HKEY_USERS;
- else if( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) )
- root_key = HKEY_PERFORMANCE_DATA;
- else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) )
- root_key = HKEY_CURRENT_CONFIG;
- else
- return NULL;
-
- return root_key;
-}
-
-
-/****************
- * Return a string from the Win32 Registry or NULL in case of
- * error. Caller must release the return value. A NULL for root
- * is an alias for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn.
- * NOTE: The value is allocated with a plain malloc() - use free() and not
- * the usual m_free()!!!
- */
-char *
-read_w32_registry_string( const char *root, const char *dir, const char *name )
-{
- HKEY root_key, key_handle;
- DWORD n1, nbytes, type;
- char *result = NULL;
-
- if ( !(root_key = get_root_key(root) ) )
- return NULL;
-
- if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) )
- {
- if (root)
- return NULL; /* no need for a RegClose, so return direct */
- /* It seems to be common practise to fall back to HLM. */
- if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
- return NULL; /* still no need for a RegClose, so return direct */
- }
-
- nbytes = 1;
- if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) )
- goto leave;
- result = malloc( (n1=nbytes+1) );
- if( !result )
- goto leave;
- if( RegQueryValueEx( key_handle, name, 0, &type, result, &n1 ) ) {
- free(result); result = NULL;
- goto leave;
- }
- result[nbytes] = 0; /* make sure it is really a string */
- if (type == REG_EXPAND_SZ && strchr (result, '%')) {
- char *tmp;
-
- n1 += 1000;
- tmp = malloc (n1+1);
- if (!tmp)
- goto leave;
- nbytes = ExpandEnvironmentStrings (result, tmp, n1);
- if (nbytes && nbytes > n1) {
- free (tmp);
- tmp = malloc (n1 + 1);
- if (!tmp)
- goto leave;
- nbytes = ExpandEnvironmentStrings (result, tmp, n1);
- if (nbytes && nbytes > n1) {
- free (tmp); /* oops - truncated, better don't expand at all */
- goto leave;
- }
- tmp[nbytes] = 0;
- free (result);
- result = tmp;
- }
- else if (nbytes) { /* okay, reduce the length */
- tmp[nbytes] = 0;
- free (result);
- result = malloc (strlen (tmp)+1);
- if (!result)
- result = tmp;
- else {
- strcpy (result, tmp);
- free (tmp);
- }
- }
- else { /* error - don't expand */
- free (tmp);
- }
- }
-
- leave:
- RegCloseKey( key_handle );
- return result;
-}
-
-
-int
-write_w32_registry_string(const char *root, const char *dir,
- const char *name, const char *value)
-{
- HKEY root_key, reg_key;
-
- if ( !(root_key = get_root_key(root) ) )
- return -1;
-
- if ( RegOpenKeyEx( root_key, dir, 0, KEY_WRITE, &reg_key )
- != ERROR_SUCCESS )
- return -1;
-
- if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value,
- strlen( value ) ) != ERROR_SUCCESS ) {
- if ( RegCreateKey( root_key, name, &reg_key ) != ERROR_SUCCESS ) {
- RegCloseKey(reg_key);
- return -1;
- }
- if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value,
- strlen( value ) ) != ERROR_SUCCESS ) {
- RegCloseKey(reg_key);
- return -1;
- }
- }
-
- RegCloseKey( reg_key );
-
- return 0;
-}
-
-#endif /* __MINGW32__ || __CYGWIN32__ */
diff --git a/zlib/ChangeLog b/zlib/ChangeLog
deleted file mode 100644
index 5f06bcc7b..000000000
--- a/zlib/ChangeLog
+++ /dev/null
@@ -1,505 +0,0 @@
-2002-03-12 Werner Koch <wk@gnupg.org>
-
- Merged changes from zlib 1.1.4.
-
-Sat Feb 13 12:04:43 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Removed -Wall
-
-Wed Jan 20 21:40:21 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- * Makefile.am: Corrected the list of sources
-
-Wed Jan 13 14:10:15 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
-
- Merged version 1.1.3 with the previousy used 1.0.4
-
-Thu Feb 12 12:20:45 1998 Werner Koch (wk@frodo)
-
- Removed a couple of files, as this is only used if zlib is
- missing on a system. Added automake stuff
-
-
- ChangeLog file for zlib
-
-
-Changes in 1.1.4 (11 March 2002)
-- ZFREE was repeated on same allocation on some error conditions.
- This creates a security problem described in
- http://www.zlib.org/advisory-2002-03-11.txt
-- Returned incorrect error (Z_MEM_ERROR) on some invalid data
-- Avoid accesses before window for invalid distances with inflate window
- less than 32K.
-- force windowBits > 8 to avoid a bug in the encoder for a window size
- of 256 bytes. (A complete fix will be available in 1.1.5).
-
-Changes in 1.1.3 (9 July 1998)
-- fix "an inflate input buffer bug that shows up on rare but persistent
- occasions" (Mark)
-- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
-- fix gzseek(..., SEEK_SET) in write mode
-- fix crc check after a gzeek (Frank Faubert)
-- fix miniunzip when the last entry in a zip file is itself a zip file
- (J Lillge)
-- add contrib/asm586 and contrib/asm686 (Brian Raiter)
- See http://www.muppetlabs.com/~breadbox/software/assembly.html
-- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
-- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
-- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
-- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
-- added a FAQ file
-
-- Support gzdopen on Mac with Metrowerks (Jason Linhart)
-- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart)
-- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young)
-- avoid some warnings with Borland C (Tom Tanner)
-- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant)
-- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant)
-- allow several arguments to configure (Tim Mooney, Frodo Looijaard)
-- use libdir and includedir in Makefile.in (Tim Mooney)
-- support shared libraries on OSF1 V4 (Tim Mooney)
-- remove so_locations in "make clean" (Tim Mooney)
-- fix maketree.c compilation error (Glenn, Mark)
-- Python interface to zlib now in Python 1.5 (Jeremy Hylton)
-- new Makefile.riscos (Rich Walker)
-- initialize static descriptors in trees.c for embedded targets (Nick Smith)
-- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith)
-- add the OS/2 files in Makefile.in too (Andrew Zabolotny)
-- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane)
-- fix maketree.c to allow clean compilation of inffixed.h (Mark)
-- fix parameter check in deflateCopy (Gunther Nikl)
-- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler)
-- Many portability patches by Christian Spieler:
- . zutil.c, zutil.h: added "const" for zmem*
- . Make_vms.com: fixed some typos
- . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists
- . msdos/Makefile.msc: remove "default rtl link library" info from obj files
- . msdos/Makefile.*: use model-dependent name for the built zlib library
- . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc:
- new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT)
-- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane)
-- replace __far with _far for better portability (Christian Spieler, Tom Lane)
-- fix test for errno.h in configure (Tim Newsham)
-
-Changes in 1.1.2 (19 March 98)
-- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant)
- See http://www.winimage.com/zLibDll/unzip.html
-- preinitialize the inflate tables for fixed codes, to make the code
- completely thread safe (Mark)
-- some simplifications and slight speed-up to the inflate code (Mark)
-- fix gzeof on non-compressed files (Allan Schrum)
-- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs)
-- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn)
-- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny)
-- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori)
-- do not wrap extern "C" around system includes (Tom Lane)
-- mention zlib binding for TCL in README (Andreas Kupries)
-- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert)
-- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson)
-- allow "configure --prefix $HOME" (Tim Mooney)
-- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson)
-- move Makefile.sas to amiga/Makefile.sas
-
-Changes in 1.1.1 (27 Feb 98)
-- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson)
-- remove block truncation heuristic which had very marginal effect for zlib
- (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
- compression ratio on some files. This also allows inlining _tr_tally for
- matches in deflate_slow.
-- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
-
-Changes in 1.1.0 (24 Feb 98)
-- do not return STREAM_END prematurely in inflate (John Bowler)
-- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
-- compile with -DFASTEST to get compression code optimized for speed only
-- in minigzip, try mmap'ing the input file first (Miguel Albrecht)
-- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain
- on Sun but significant on HP)
-
-- add a pointer to experimental unzip library in README (Gilles Vollant)
-- initialize variable gcc in configure (Chris Herborth)
-
-Changes in 1.0.9 (17 Feb 1998)
-- added gzputs and gzgets functions
-- do not clear eof flag in gzseek (Mark Diekhans)
-- fix gzseek for files in transparent mode (Mark Diekhans)
-- do not assume that vsprintf returns the number of bytes written (Jens Krinke)
-- replace EXPORT with ZEXPORT to avoid conflict with other programs
-- added compress2 in zconf.h, zlib.def, zlib.dnt
-- new asm code from Gilles Vollant in contrib/asm386
-- simplify the inflate code (Mark):
- . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new()
- . ZALLOC the length list in inflate_trees_fixed() instead of using stack
- . ZALLOC the value area for huft_build() instead of using stack
- . Simplify Z_FINISH check in inflate()
-
-- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8
-- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)
-- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with
- the declaration of FAR (Gilles VOllant)
-- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)
-- read_buf buf parameter of type Bytef* instead of charf*
-- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)
-- do not redeclare unlink in minigzip.c for WIN32 (John Bowler)
-- fix check for presence of directories in "make install" (Ian Willis)
-
-Changes in 1.0.8 (27 Jan 1998)
-- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant)
-- fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
-- added compress2() to allow setting the compression level
-- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
-- use constant arrays for the static trees in trees.c instead of computing
- them at run time (thanks to Ken Raeburn for this suggestion). To create
- trees.h, compile with GEN_TREES_H and run "make test".
-- check return code of example in "make test" and display result
-- pass minigzip command line options to file_compress
-- simplifying code of inflateSync to avoid gcc 2.8 bug
-
-- support CC="gcc -Wall" in configure -s (QingLong)
-- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn)
-- fix test for shared library support to avoid compiler warnings
-- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant)
-- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit)
-- do not use fdopen for Metrowerks on Mac (Brad Pettit))
-- add checks for gzputc and gzputc in example.c
-- avoid warnings in gzio.c and deflate.c (Andreas Kleinert)
-- use const for the CRC table (Ken Raeburn)
-- fixed "make uninstall" for shared libraries
-- use Tracev instead of Trace in infblock.c
-- in example.c use correct compressed length for test_sync
-- suppress +vnocompatwarnings in configure for HPUX (not always supported)
-
-Changes in 1.0.7 (20 Jan 1998)
-- fix gzseek which was broken in write mode
-- return error for gzseek to negative absolute position
-- fix configure for Linux (Chun-Chung Chen)
-- increase stack space for MSC (Tim Wegner)
-- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
-- define EXPORTVA for gzprintf (Gilles Vollant)
-- added man page zlib.3 (Rick Rodgers)
-- for contrib/untgz, fix makedir() and improve Makefile
-
-- check gzseek in write mode in example.c
-- allocate extra buffer for seeks only if gzseek is actually called
-- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)
-- add inflateSyncPoint in zconf.h
-- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def
-
-Changes in 1.0.6 (19 Jan 1998)
-- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
- gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
-- Fix a deflate bug occuring only with compression level 0 (thanks to
- Andy Buckler for finding this one).
-- In minigzip, pass transparently also the first byte for .Z files.
-- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
-- check Z_FINISH in inflate (thanks to Marc Schluper)
-- Implement deflateCopy (thanks to Adam Costello)
-- make static libraries by default in configure, add --shared option.
-- move MSDOS or Windows specific files to directory msdos
-- suppress the notion of partial flush to simplify the interface
- (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
-- suppress history buffer provided by application to simplify the interface
- (this feature was not implemented anyway in 1.0.4)
-- next_in and avail_in must be initialized before calling inflateInit or
- inflateInit2
-- add EXPORT in all exported functions (for Windows DLL)
-- added Makefile.nt (thanks to Stephen Williams)
-- added the unsupported "contrib" directory:
- contrib/asm386/ by Gilles Vollant <info@winimage.com>
- 386 asm code replacing longest_match().
- contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
- A C++ I/O streams interface to the zlib gz* functions
- contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
- Another C++ I/O streams interface
- contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
- A very simple tar.gz file extractor using zlib
- contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
- How to use compress(), uncompress() and the gz* functions from VB.
-- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
- level) in minigzip (thanks to Tom Lane)
-
-- use const for rommable constants in deflate
-- added test for gzseek and gztell in example.c
-- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
-- add undocumented function zError to convert error code to string
- (for Tim Smithers)
-- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
-- Use default memcpy for Symantec MSDOS compiler.
-- Add EXPORT keyword for check_func (needed for Windows DLL)
-- add current directory to LD_LIBRARY_PATH for "make test"
-- create also a link for libz.so.1
-- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
-- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
-- added -soname for Linux in configure (Chun-Chung Chen,
-- assign numbers to the exported functions in zlib.def (for Windows DLL)
-- add advice in zlib.h for best usage of deflateSetDictionary
-- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
-- allow compilation with ANSI keywords only enabled for TurboC in large model
-- avoid "versionString"[0] (Borland bug)
-- add NEED_DUMMY_RETURN for Borland
-- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
-- allow compilation with CC
-- defined STDC for OS/2 (David Charlap)
-- limit external names to 8 chars for MVS (Thomas Lund)
-- in minigzip.c, use static buffers only for 16-bit systems
-- fix suffix check for "minigzip -d foo.gz"
-- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
-- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
-- added makelcc.bat for lcc-win32 (Tom St Denis)
-- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
-- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
-- check for unistd.h in configure (for off_t)
-- remove useless check parameter in inflate_blocks_free
-- avoid useless assignment of s->check to itself in inflate_blocks_new
-- do not flush twice in gzclose (thanks to Ken Raeburn)
-- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
-- use NO_ERRNO_H instead of enumeration of operating systems with errno.h
-- work around buggy fclose on pipes for HP/UX
-- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)
-- fix configure if CC is already equal to gcc
-
-Changes in 1.0.5 (3 Jan 98)
-- Fix inflate to terminate gracefully when fed corrupted or invalid data
-- Use const for rommable constants in inflate
-- Eliminate memory leaks on error conditions in inflate
-- Removed some vestigial code in inflate
-- Update web address in README
-
-Changes in 1.0.4 (24 Jul 96)
-- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
- bit, so the decompressor could decompress all the correct data but went
- on to attempt decompressing extra garbage data. This affected minigzip too.
-- zlibVersion and gzerror return const char* (needed for DLL)
-- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
-- use z_error only for DEBUG (avoid problem with DLLs)
-
-Changes in 1.0.3 (2 Jul 96)
-- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS
- small and medium models; this makes the library incompatible with previous
- versions for these models. (No effect in large model or on other systems.)
-- return OK instead of BUF_ERROR if previous deflate call returned with
- avail_out as zero but there is nothing to do
-- added memcmp for non STDC compilers
-- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly)
-- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO)
-- better check for 16-bit mode MSC (avoids problem with Symantec)
-
-Changes in 1.0.2 (23 May 96)
-- added Windows DLL support
-- added a function zlibVersion (for the DLL support)
-- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model)
-- Bytef is define's instead of typedef'd only for Borland C
-- avoid reading uninitialized memory in example.c
-- mention in README that the zlib format is now RFC1950
-- updated Makefile.dj2
-- added algorithm.doc
-
-Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
-- fix array overlay in deflate.c which sometimes caused bad compressed data
-- fix inflate bug with empty stored block
-- fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generated bad compressed data.
-- Bytef is define'd instead of typedef'ed (work around Borland bug)
-- added an INDEX file
-- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
- Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
-- speed up adler32 for modern machines without auto-increment
-- added -ansi for IRIX in configure
-- static_init_done in trees.c is an int
-- define unlink as delete for VMS
-- fix configure for QNX
-- add configure branch for SCO and HPUX
-- avoid many warnings (unused variables, dead assignments, etc...)
-- no fdopen for BeOS
-- fix the Watcom fix for 32 bit mode (define FAR as empty)
-- removed redefinition of Byte for MKWERKS
-- work around an MWKERKS bug (incorrect merge of all .h files)
-
-Changes in 0.99 (27 Jan 96)
-- allow preset dictionary shared between compressor and decompressor
-- allow compression level 0 (no compression)
-- add deflateParams in zlib.h: allow dynamic change of compression level
- and compression strategy.
-- test large buffers and deflateParams in example.c
-- add optional "configure" to build zlib as a shared library
-- suppress Makefile.qnx, use configure instead
-- fixed deflate for 64-bit systems (detected on Cray)
-- fixed inflate_blocks for 64-bit systems (detected on Alpha)
-- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2)
-- always return Z_BUF_ERROR when deflate() has nothing to do
-- deflateInit and inflateInit are now macros to allow version checking
-- prefix all global functions and types with z_ with -DZ_PREFIX
-- make falloc completely reentrant (inftrees.c)
-- fixed very unlikely race condition in ct_static_init
-- free in reverse order of allocation to help memory manager
-- use zlib-1.0/* instead of zlib/* inside the tar.gz
-- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith
- -Wconversion -Wstrict-prototypes -Wmissing-prototypes"
-- allow gzread on concatenated .gz files
-- deflateEnd now returns Z_DATA_ERROR if it was premature
-- deflate is finally (?) fully deterministic (no matches beyond end of input)
-- Document Z_SYNC_FLUSH
-- add uninstall in Makefile
-- Check for __cpluplus in zlib.h
-- Better test in ct_align for partial flush
-- avoid harmless warnings for Borland C++
-- initialize hash_head in deflate.c
-- avoid warning on fdopen (gzio.c) for HP cc -Aa
-- include stdlib.h for STDC compilers
-- include errno.h for Cray
-- ignore error if ranlib doesn't exist
-- call ranlib twice for NeXTSTEP
-- use exec_prefix instead of prefix for libz.a
-- renamed ct_* as _tr_* to avoid conflict with applications
-- clear z->msg in inflateInit2 before any error return
-- initialize opaque in example.c, gzio.c, deflate.c and inflate.c
-- fixed typo in zconf.h (_GNUC__ => __GNUC__)
-- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode)
-- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
-- in fcalloc, normalize pointer if size > 65520 bytes
-- don't use special fcalloc for 32 bit Borland C++
-- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
-- use Z_BINARY instead of BINARY
-- document that gzclose after gzdopen will close the file
-- allow "a" as mode in gzopen.
-- fix error checking in gzread
-- allow skipping .gz extra-field on pipes
-- added reference to Perl interface in README
-- put the crc table in FAR data (I dislike more and more the medium model :)
-- added get_crc_table
-- added a dimension to all arrays (Borland C can't count).
-- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
-- guard against multiple inclusion of *.h (for precompiled header on Mac)
-- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
-- don't use unsized arrays to avoid silly warnings by Visual C++:
- warning C4746: 'inflate_mask' : unsized array treated as '__far'
- (what's wrong with far data in far model?).
-- define enum out of inflate_blocks_state to allow compilation with C++
-
-Changes in 0.95 (16 Aug 95)
-- fix MSDOS small and medium model (now easier to adapt to any compiler)
-- inlined send_bits
-- fix the final (:-) bug for deflate with flush (output was correct but
- not completely flushed in rare occasions).
-- default window size is same for compression and decompression
- (it's now sufficient to set MAX_WBITS in zconf.h).
-- voidp -> voidpf and voidnp -> voidp (for consistency with other
- typedefs and because voidnp was not near in large model).
-
-Changes in 0.94 (13 Aug 95)
-- support MSDOS medium model
-- fix deflate with flush (could sometimes generate bad output)
-- fix deflateReset (zlib header was incorrectly suppressed)
-- added support for VMS
-- allow a compression level in gzopen()
-- gzflush now calls fflush
-- For deflate with flush, flush even if no more input is provided.
-- rename libgz.a as libz.a
-- avoid complex expression in infcodes.c triggering Turbo C bug
-- work around a problem with gcc on Alpha (in INSERT_STRING)
-- don't use inline functions (problem with some gcc versions)
-- allow renaming of Byte, uInt, etc... with #define.
-- avoid warning about (unused) pointer before start of array in deflate.c
-- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
-- avoid reserved word 'new' in trees.c
-
-Changes in 0.93 (25 June 95)
-- temporarily disable inline functions
-- make deflate deterministic
-- give enough lookahead for PARTIAL_FLUSH
-- Set binary mode for stdin/stdout in minigzip.c for OS/2
-- don't even use signed char in inflate (not portable enough)
-- fix inflate memory leak for segmented architectures
-
-Changes in 0.92 (3 May 95)
-- don't assume that char is signed (problem on SGI)
-- Clear bit buffer when starting a stored block
-- no memcpy on Pyramid
-- suppressed inftest.c
-- optimized fill_window, put longest_match inline for gcc
-- optimized inflate on stored blocks.
-- untabify all sources to simplify patches
-
-Changes in 0.91 (2 May 95)
-- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
-- Document the memory requirements in zconf.h
-- added "make install"
-- fix sync search logic in inflateSync
-- deflate(Z_FULL_FLUSH) now works even if output buffer too short
-- after inflateSync, don't scare people with just "lo world"
-- added support for DJGPP
-
-Changes in 0.9 (1 May 95)
-- don't assume that zalloc clears the allocated memory (the TurboC bug
- was Mark's bug after all :)
-- let again gzread copy uncompressed data unchanged (was working in 0.71)
-- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
-- added a test of inflateSync in example.c
-- moved MAX_WBITS to zconf.h because users might want to change that.
-- document explicitly that zalloc(64K) on MSDOS must return a normalized
- pointer (zero offset)
-- added Makefiles for Microsoft C, Turbo C, Borland C++
-- faster crc32()
-
-Changes in 0.8 (29 April 95)
-- added fast inflate (inffast.c)
-- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
- is incompatible with previous versions of zlib which returned Z_OK.
-- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
- (actually that was not a compiler bug, see 0.81 above)
-- gzread no longer reads one extra byte in certain cases
-- In gzio destroy(), don't reference a freed structure
-- avoid many warnings for MSDOS
-- avoid the ERROR symbol which is used by MS Windows
-
-Changes in 0.71 (14 April 95)
-- Fixed more MSDOS compilation problems :( There is still a bug with
- TurboC large model.
-
-Changes in 0.7 (14 April 95)
-- Added full inflate support.
-- Simplified the crc32() interface. The pre- and post-conditioning
- (one's complement) is now done inside crc32(). WARNING: this is
- incompatible with previous versions; see zlib.h for the new usage.
-
-Changes in 0.61 (12 April 95)
-- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
-
-Changes in 0.6 (11 April 95)
-- added minigzip.c
-- added gzdopen to reopen a file descriptor as gzFile
-- added transparent reading of non-gziped files in gzread.
-- fixed bug in gzread (don't read crc as data)
-- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
-- don't allocate big arrays in the stack (for MSDOS)
-- fix some MSDOS compilation problems
-
-Changes in 0.5:
-- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
- not yet Z_FULL_FLUSH.
-- support decompression but only in a single step (forced Z_FINISH)
-- added opaque object for zalloc and zfree.
-- added deflateReset and inflateReset
-- added a variable zlib_version for consistency checking.
-- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
- Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
-
-Changes in 0.4:
-- avoid "zip" everywhere, use zlib instead of ziplib.
-- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
- if compression method == 8.
-- added adler32 and crc32
-- renamed deflateOptions as deflateInit2, call one or the other but not both
-- added the method parameter for deflateInit2.
-- added inflateInit2
-- simplied considerably deflateInit and inflateInit by not supporting
- user-provided history buffer. This is supported only in deflateInit2
- and inflateInit2.
-
-Changes in 0.3:
-- prefix all macro names with Z_
-- use Z_FINISH instead of deflateEnd to finish compression.
-- added Z_HUFFMAN_ONLY
-- added gzerror()
-
-
diff --git a/zlib/Makefile.am b/zlib/Makefile.am
deleted file mode 100644
index 2c1e9cda4..000000000
--- a/zlib/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
-# Process this file with automake to produce Makefile.in
-# Copyright (C) 1995-1996 Jean-loup Gailly.
-# For conditions of distribution and use, see copyright notice in zlib.h
-# This is used if a systems lacks support of zlib
-
-EXTRA_DIST = README algorithm.doc ChangeLog
-
-# I found no other easy way to use this only if zlib is neede
-# doing this with SUBDIR = @xxx@ in the top Makefile.am does not
-# work because automake doesn't scan this Makefile.am here.
-if ENABLE_LOCAL_ZLIB
-noinst_LIBRARIES = libzlib.a
-endif
-
-
-libzlib_a_SOURCES = adler32.c compress.c crc32.c \
- uncompr.c deflate.c trees.c zutil.c \
- inflate.c infblock.c inftrees.c \
- infcodes.c infutil.c inffast.c \
- deflate.h infblock.h infcodes.h inffast.h \
- inffixed.h inftrees.h infutil.h trees.h \
- zconf.h zlib.h zutil.h
-
-
-CLEANFILES = foo.gz
-
-
-
diff --git a/zlib/README b/zlib/README
deleted file mode 100644
index 8ff458799..000000000
--- a/zlib/README
+++ /dev/null
@@ -1,148 +0,0 @@
-zlib 1.1.3 is a general purpose data compression library. All the code
-is thread safe. The data format used by the zlib library
-is described by RFCs (Request for Comments) 1950 to 1952 in the files
-ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate
-format) and rfc1952.txt (gzip format). These documents are also available in
-other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
-
-All functions of the compression library are documented in the file zlib.h
-(volunteer to write man pages welcome, contact jloup@gzip.org). A usage
-example of the library is given in the file example.c which also tests that
-the library is working correctly. Another example is given in the file
-minigzip.c. The compression library itself is composed of all source files
-except example.c and minigzip.c.
-
-To compile all files and run the test program, follow the instructions
-given at the top of Makefile. In short "make test; make install"
-should work for most machines. For Unix: "configure; make test; make install"
-For MSDOS, use one of the special makefiles such as Makefile.msc.
-For VMS, use Make_vms.com or descrip.mms.
-
-Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov>, or to
-Gilles Vollant <info@winimage.com> for the Windows DLL version.
-The zlib home page is http://www.cdrom.com/pub/infozip/zlib/
-The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/
-Before reporting a problem, please check those sites to verify that
-you have the latest version of zlib; otherwise get the latest version and
-check whether the problem still exists or not.
-
-Mark Nelson <markn@tiny.com> wrote an article about zlib for the Jan. 1997
-issue of Dr. Dobb's Journal; a copy of the article is available in
-http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm
-
-The changes made in version 1.1.3 are documented in the file ChangeLog.
-The main changes since 1.1.2 are:
-
-- fix "an inflate input buffer bug that shows up on rare but persistent
- occasions" (Mark)
-- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
-- fix gzseek(..., SEEK_SET) in write mode
-- fix crc check after a gzeek (Frank Faubert)
-- fix miniunzip when the last entry in a zip file is itself a zip file
- (J Lillge)
-- add contrib/asm586 and contrib/asm686 (Brian Raiter)
- See http://www.muppetlabs.com/~breadbox/software/assembly.html
-- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
-- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
-- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
-- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
-- added a FAQ file
-
-plus many changes for portability.
-
-Unsupported third party contributions are provided in directory "contrib".
-
-A Java implementation of zlib is available in the Java Development Kit 1.1
-http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html
-See the zlib home page http://www.cdrom.com/pub/infozip/zlib/ for details.
-
-A Perl interface to zlib written by Paul Marquess <pmarquess@bfsec.bt.co.uk>
-is in the CPAN (Comprehensive Perl Archive Network) sites, such as:
-ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib*
-
-A Python interface to zlib written by A.M. Kuchling <amk@magnet.com>
-is available in Python 1.5 and later versions, see
-http://www.python.org/doc/lib/module-zlib.html
-
-A zlib binding for TCL written by Andreas Kupries <a.kupries@westend.com>
-is availlable at http://www.westend.com/~kupries/doc/trf/man/man.html
-
-An experimental package to read and write files in .zip format,
-written on top of zlib by Gilles Vollant <info@winimage.com>, is
-available at http://www.winimage.com/zLibDll/unzip.html
-and also in the contrib/minizip directory of zlib.
-
-
-Notes for some targets:
-
-- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc
- and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL
- The zlib DLL support was initially done by Alessandro Iacopetti and is
- now maintained by Gilles Vollant <info@winimage.com>. Check the zlib DLL
- home page at http://www.winimage.com/zLibDll
-
- From Visual Basic, you can call the DLL functions which do not take
- a structure as argument: compress, uncompress and all gz* functions.
- See contrib/visual-basic.txt for more information, or get
- http://www.tcfb.com/dowseware/cmp-z-it.zip
-
-- For 64-bit Irix, deflate.c must be compiled without any optimization.
- With -O, one libpng test fails. The test works in 32 bit mode (with
- the -n32 compiler flag). The compiler bug has been reported to SGI.
-
-- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1
- it works when compiled with cc.
-
-- on Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1
- is necessary to get gzprintf working correctly. This is done by configure.
-
-- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works
- with other compilers. Use "make test" to check your compiler.
-
-- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers.
-
-- For Turbo C the small model is supported only with reduced performance to
- avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
-
-- For PalmOs, see http://www.cs.uit.no/~perm/PASTA/pilot/software.html
- Per Harald Myrvang <perm@stud.cs.uit.no>
-
-
-Acknowledgments:
-
- The deflate format used by zlib was defined by Phil Katz. The deflate
- and zlib specifications were written by L. Peter Deutsch. Thanks to all the
- people who reported problems and suggested various improvements in zlib;
- they are too numerous to cite here.
-
-Copyright notice:
-
- (C) 1995-1998 Jean-loup Gailly and Mark Adler
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jean-loup Gailly Mark Adler
- jloup@gzip.org madler@alumni.caltech.edu
-
-If you use the zlib library in a product, we would appreciate *not*
-receiving lengthy legal documents to sign. The sources are provided
-for free but without warranty of any kind. The library has been
-entirely written by Jean-loup Gailly and Mark Adler; it does not
-include third-party code.
-
-If you redistribute modified sources, we would appreciate that you include
-in the file ChangeLog history information documenting your changes.
diff --git a/zlib/adler32.c b/zlib/adler32.c
deleted file mode 100644
index fae88b655..000000000
--- a/zlib/adler32.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zlib.h"
-
-#define BASE 65521L /* largest prime smaller than 65536 */
-#define NMAX 5552
-/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
-
-#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
-#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
-#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
-#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
-#define DO16(buf) DO8(buf,0); DO8(buf,8);
-
-/* ========================================================================= */
-uLong ZEXPORT adler32(adler, buf, len)
- uLong adler;
- const Bytef *buf;
- uInt len;
-{
- unsigned long s1 = adler & 0xffff;
- unsigned long s2 = (adler >> 16) & 0xffff;
- int k;
-
- if (buf == Z_NULL) return 1L;
-
- while (len > 0) {
- k = len < NMAX ? len : NMAX;
- len -= k;
- while (k >= 16) {
- DO16(buf);
- buf += 16;
- k -= 16;
- }
- if (k != 0) do {
- s1 += *buf++;
- s2 += s1;
- } while (--k);
- s1 %= BASE;
- s2 %= BASE;
- }
- return (s2 << 16) | s1;
-}
diff --git a/zlib/algorithm.doc b/zlib/algorithm.doc
deleted file mode 100644
index 01902aff6..000000000
--- a/zlib/algorithm.doc
+++ /dev/null
@@ -1,105 +0,0 @@
-1. Compression algorithm (deflate)
-
-The deflation algorithm used by zlib (also zip and gzip) is a variation of
-LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in
-the input data. The second occurrence of a string is replaced by a
-pointer to the previous string, in the form of a pair (distance,
-length). Distances are limited to 32K bytes, and lengths are limited
-to 258 bytes. When a string does not occur anywhere in the previous
-32K bytes, it is emitted as a sequence of literal bytes. (In this
-description, `string' must be taken as an arbitrary sequence of bytes,
-and is not restricted to printable characters.)
-
-Literals or match lengths are compressed with one Huffman tree, and
-match distances are compressed with another tree. The trees are stored
-in a compact form at the start of each block. The blocks can have any
-size (except that the compressed data for one block must fit in
-available memory). A block is terminated when deflate() determines that
-it would be useful to start another block with fresh trees. (This is
-somewhat similar to the behavior of LZW-based _compress_.)
-
-Duplicated strings are found using a hash table. All input strings of
-length 3 are inserted in the hash table. A hash index is computed for
-the next 3 bytes. If the hash chain for this index is not empty, all
-strings in the chain are compared with the current input string, and
-the longest match is selected.
-
-The hash chains are searched starting with the most recent strings, to
-favor small distances and thus take advantage of the Huffman encoding.
-The hash chains are singly linked. There are no deletions from the
-hash chains, the algorithm simply discards matches that are too old.
-
-To avoid a worst-case situation, very long hash chains are arbitrarily
-truncated at a certain length, determined by a runtime option (level
-parameter of deflateInit). So deflate() does not always find the longest
-possible match but generally finds a match which is long enough.
-
-deflate() also defers the selection of matches with a lazy evaluation
-mechanism. After a match of length N has been found, deflate() searches for a
-longer match at the next input byte. If a longer match is found, the
-previous match is truncated to a length of one (thus producing a single
-literal byte) and the longer match is emitted afterwards. Otherwise,
-the original match is kept, and the next match search is attempted only
-N steps later.
-
-The lazy match evaluation is also subject to a runtime parameter. If
-the current match is long enough, deflate() reduces the search for a longer
-match, thus speeding up the whole process. If compression ratio is more
-important than speed, deflate() attempts a complete second search even if
-the first match is already long enough.
-
-The lazy match evaluation is not performed for the fastest compression
-modes (level parameter 1 to 3). For these fast modes, new strings
-are inserted in the hash table only when no match was found, or
-when the match is not too long. This degrades the compression ratio
-but saves time since there are both fewer insertions and fewer searches.
-
-
-2. Decompression algorithm (inflate)
-
-The real question is, given a Huffman tree, how to decode fast. The most
-important realization is that shorter codes are much more common than
-longer codes, so pay attention to decoding the short codes fast, and let
-the long codes take longer to decode.
-
-inflate() sets up a first level table that covers some number of bits of
-input less than the length of longest code. It gets that many bits from the
-stream, and looks it up in the table. The table will tell if the next
-code is that many bits or less and how many, and if it is, it will tell
-the value, else it will point to the next level table for which inflate()
-grabs more bits and tries to decode a longer code.
-
-How many bits to make the first lookup is a tradeoff between the time it
-takes to decode and the time it takes to build the table. If building the
-table took no time (and if you had infinite memory), then there would only
-be a first level table to cover all the way to the longest code. However,
-building the table ends up taking a lot longer for more bits since short
-codes are replicated many times in such a table. What inflate() does is
-simply to make the number of bits in the first table a variable, and set it
-for the maximum speed.
-
-inflate() sends new trees relatively often, so it is possibly set for a
-smaller first level table than an application that has only one tree for
-all the data. For inflate, which has 286 possible codes for the
-literal/length tree, the size of the first table is nine bits. Also the
-distance trees have 30 possible values, and the size of the first table is
-six bits. Note that for each of those cases, the table ended up one bit
-longer than the ``average'' code length, i.e. the code length of an
-approximately flat code which would be a little more than eight bits for
-286 symbols and a little less than five bits for 30 symbols. It would be
-interesting to see if optimizing the first level table for other
-applications gave values within a bit or two of the flat code size.
-
-
-Jean-loup Gailly Mark Adler
-gzip@prep.ai.mit.edu madler@alumni.caltech.edu
-
-
-References:
-
-[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data
-Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3,
-pp. 337-343.
-
-``DEFLATE Compressed Data Format Specification'' available in
-ftp://ds.internic.net/rfc/rfc1951.txt
diff --git a/zlib/compress.c b/zlib/compress.c
deleted file mode 100644
index 814bd9d60..000000000
--- a/zlib/compress.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zlib.h"
-
-/* ===========================================================================
- Compresses the source buffer into the destination buffer. The level
- parameter has the same meaning as in deflateInit. sourceLen is the byte
- length of the source buffer. Upon entry, destLen is the total size of the
- destination buffer, which must be at least 0.1% larger than sourceLen plus
- 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-
- compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_BUF_ERROR if there was not enough room in the output buffer,
- Z_STREAM_ERROR if the level parameter is invalid.
-*/
-int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
- Bytef *dest;
- uLongf *destLen;
- const Bytef *source;
- uLong sourceLen;
- int level;
-{
- z_stream stream;
- int err;
-
- stream.next_in = (Bytef*)source;
- stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
- stream.zalloc = (alloc_func)0;
- stream.zfree = (free_func)0;
- stream.opaque = (voidpf)0;
-
- err = deflateInit(&stream, level);
- if (err != Z_OK) return err;
-
- err = deflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd(&stream);
- return err == Z_OK ? Z_BUF_ERROR : err;
- }
- *destLen = stream.total_out;
-
- err = deflateEnd(&stream);
- return err;
-}
-
-/* ===========================================================================
- */
-int ZEXPORT compress (dest, destLen, source, sourceLen)
- Bytef *dest;
- uLongf *destLen;
- const Bytef *source;
- uLong sourceLen;
-{
- return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
-}
diff --git a/zlib/crc32.c b/zlib/crc32.c
deleted file mode 100644
index 60deca2dd..000000000
--- a/zlib/crc32.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zlib.h"
-
-#define local static
-
-#ifdef DYNAMIC_CRC_TABLE
-
-local int crc_table_empty = 1;
-local uLongf crc_table[256];
-local void make_crc_table OF((void));
-
-/*
- Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
- x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
-
- Polynomials over GF(2) are represented in binary, one bit per coefficient,
- with the lowest powers in the most significant bit. Then adding polynomials
- is just exclusive-or, and multiplying a polynomial by x is a right shift by
- one. If we call the above polynomial p, and represent a byte as the
- polynomial q, also with the lowest power in the most significant bit (so the
- byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
- where a mod b means the remainder after dividing a by b.
-
- This calculation is done using the shift-register method of multiplying and
- taking the remainder. The register is initialized to zero, and for each
- incoming bit, x^32 is added mod p to the register if the bit is a one (where
- x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
- x (which is shifting right by one and adding x^32 mod p if the bit shifted
- out is a one). We start with the highest power (least significant bit) of
- q and repeat for all eight bits of q.
-
- The table is simply the CRC of all possible eight bit values. This is all
- the information needed to generate CRC's on data a byte at a time for all
- combinations of CRC register values and incoming bytes.
-*/
-local void make_crc_table()
-{
- uLong c;
- int n, k;
- uLong poly; /* polynomial exclusive-or pattern */
- /* terms of polynomial defining this crc (except x^32): */
- static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
-
- /* make exclusive-or pattern from polynomial (0xedb88320L) */
- poly = 0L;
- for (n = 0; n < sizeof(p)/sizeof(Byte); n++)
- poly |= 1L << (31 - p[n]);
-
- for (n = 0; n < 256; n++)
- {
- c = (uLong)n;
- for (k = 0; k < 8; k++)
- c = c & 1 ? poly ^ (c >> 1) : c >> 1;
- crc_table[n] = c;
- }
- crc_table_empty = 0;
-}
-#else
-/* ========================================================================
- * Table of CRC-32's of all single-byte values (made by make_crc_table)
- */
-local const uLongf crc_table[256] = {
- 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
- 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
- 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
- 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
- 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
- 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
- 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
- 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
- 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
- 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
- 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
- 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
- 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
- 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
- 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
- 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
- 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
- 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
- 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
- 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
- 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
- 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
- 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
- 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
- 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
- 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
- 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
- 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
- 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
- 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
- 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
- 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
- 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
- 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
- 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
- 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
- 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
- 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
- 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
- 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
- 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
- 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
- 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
- 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
- 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
- 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
- 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
- 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
- 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
- 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
- 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
- 0x2d02ef8dL
-};
-#endif
-
-/* =========================================================================
- * This function can be used by asm versions of crc32()
- */
-const uLongf * ZEXPORT get_crc_table()
-{
-#ifdef DYNAMIC_CRC_TABLE
- if (crc_table_empty) make_crc_table();
-#endif
- return (const uLongf *)crc_table;
-}
-
-/* ========================================================================= */
-#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
-#define DO2(buf) DO1(buf); DO1(buf);
-#define DO4(buf) DO2(buf); DO2(buf);
-#define DO8(buf) DO4(buf); DO4(buf);
-
-/* ========================================================================= */
-uLong ZEXPORT crc32(crc, buf, len)
- uLong crc;
- const Bytef *buf;
- uInt len;
-{
- if (buf == Z_NULL) return 0L;
-#ifdef DYNAMIC_CRC_TABLE
- if (crc_table_empty)
- make_crc_table();
-#endif
- crc = crc ^ 0xffffffffL;
- while (len >= 8)
- {
- DO8(buf);
- len -= 8;
- }
- if (len) do {
- DO1(buf);
- } while (--len);
- return crc ^ 0xffffffffL;
-}
diff --git a/zlib/deflate.c b/zlib/deflate.c
deleted file mode 100644
index 16ebdade3..000000000
--- a/zlib/deflate.c
+++ /dev/null
@@ -1,1350 +0,0 @@
-/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- * ALGORITHM
- *
- * The "deflation" process depends on being able to identify portions
- * of the input text which are identical to earlier input (within a
- * sliding window trailing behind the input currently being processed).
- *
- * The most straightforward technique turns out to be the fastest for
- * most input files: try all possible matches and select the longest.
- * The key feature of this algorithm is that insertions into the string
- * dictionary are very simple and thus fast, and deletions are avoided
- * completely. Insertions are performed at each input character, whereas
- * string matches are performed only when the previous match ends. So it
- * is preferable to spend more time in matches to allow very fast string
- * insertions and avoid deletions. The matching algorithm for small
- * strings is inspired from that of Rabin & Karp. A brute force approach
- * is used to find longer strings when a small match has been found.
- * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
- * (by Leonid Broukhis).
- * A previous version of this file used a more sophisticated algorithm
- * (by Fiala and Greene) which is guaranteed to run in linear amortized
- * time, but has a larger average cost, uses more memory and is patented.
- * However the F&G algorithm may be faster for some highly redundant
- * files if the parameter max_chain_length (described below) is too large.
- *
- * ACKNOWLEDGEMENTS
- *
- * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
- * I found it in 'freeze' written by Leonid Broukhis.
- * Thanks to many people for bug reports and testing.
- *
- * REFERENCES
- *
- * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
- * Available in ftp://ds.internic.net/rfc/rfc1951.txt
- *
- * A description of the Rabin and Karp algorithm is given in the book
- * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
- *
- * Fiala,E.R., and Greene,D.H.
- * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
- *
- */
-
-/* @(#) $Id$ */
-
-#include "deflate.h"
-
-const char deflate_copyright[] =
- " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly ";
-/*
- If you use the zlib library in a product, an acknowledgment is welcome
- in the documentation of your product. If for some reason you cannot
- include such an acknowledgment, I would appreciate that you keep this
- copyright string in the executable of your product.
- */
-
-/* ===========================================================================
- * Function prototypes.
- */
-typedef enum {
- need_more, /* block not completed, need more input or more output */
- block_done, /* block flush performed */
- finish_started, /* finish started, need only more output at next deflate */
- finish_done /* finish done, accept no more input or output */
-} block_state;
-
-typedef block_state (*compress_func) OF((deflate_state *s, int flush));
-/* Compression function. Returns the block state after the call. */
-
-local void fill_window OF((deflate_state *s));
-local block_state deflate_stored OF((deflate_state *s, int flush));
-local block_state deflate_fast OF((deflate_state *s, int flush));
-local block_state deflate_slow OF((deflate_state *s, int flush));
-local void lm_init OF((deflate_state *s));
-local void putShortMSB OF((deflate_state *s, uInt b));
-local void flush_pending OF((z_streamp strm));
-local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
-#ifdef ASMV
- void match_init OF((void)); /* asm code initialization */
- uInt longest_match OF((deflate_state *s, IPos cur_match));
-#else
-local uInt longest_match OF((deflate_state *s, IPos cur_match));
-#endif
-
-#ifdef DEBUG
-local void check_match OF((deflate_state *s, IPos start, IPos match,
- int length));
-#endif
-
-/* ===========================================================================
- * Local data
- */
-
-#define NIL 0
-/* Tail of hash chains */
-
-#ifndef TOO_FAR
-# define TOO_FAR 4096
-#endif
-/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
-
-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
-/* Minimum amount of lookahead, except at the end of the input file.
- * See deflate.c for comments about the MIN_MATCH+1.
- */
-
-/* Values for max_lazy_match, good_match and max_chain_length, depending on
- * the desired pack level (0..9). The values given below have been tuned to
- * exclude worst case performance for pathological files. Better values may be
- * found for specific files.
- */
-typedef struct config_s {
- ush good_length; /* reduce lazy search above this match length */
- ush max_lazy; /* do not perform lazy search above this match length */
- ush nice_length; /* quit search above this match length */
- ush max_chain;
- compress_func func;
-} config;
-
-local const config configuration_table[10] = {
-/* good lazy nice chain */
-/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
-/* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */
-/* 2 */ {4, 5, 16, 8, deflate_fast},
-/* 3 */ {4, 6, 32, 32, deflate_fast},
-
-/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
-/* 5 */ {8, 16, 32, 32, deflate_slow},
-/* 6 */ {8, 16, 128, 128, deflate_slow},
-/* 7 */ {8, 32, 128, 256, deflate_slow},
-/* 8 */ {32, 128, 258, 1024, deflate_slow},
-/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */
-
-/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
- * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
- * meaning.
- */
-
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-
-/* ===========================================================================
- * Update a hash value with the given input byte
- * IN assertion: all calls to to UPDATE_HASH are made with consecutive
- * input characters, so that a running hash key can be computed from the
- * previous key instead of complete recalculation each time.
- */
-#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
-
-
-/* ===========================================================================
- * Insert string str in the dictionary and set match_head to the previous head
- * of the hash chain (the most recent string with same hash key). Return
- * the previous length of the hash chain.
- * If this file is compiled with -DFASTEST, the compression level is forced
- * to 1, and no hash chains are maintained.
- * IN assertion: all calls to to INSERT_STRING are made with consecutive
- * input characters and the first MIN_MATCH bytes of str are valid
- * (except for the last MIN_MATCH-1 bytes of the input file).
- */
-#ifdef FASTEST
-#define INSERT_STRING(s, str, match_head) \
- (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
- match_head = s->head[s->ins_h], \
- s->head[s->ins_h] = (Pos)(str))
-#else
-#define INSERT_STRING(s, str, match_head) \
- (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
- s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
- s->head[s->ins_h] = (Pos)(str))
-#endif
-
-/* ===========================================================================
- * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
- * prev[] will be initialized on the fly.
- */
-#define CLEAR_HASH(s) \
- s->head[s->hash_size-1] = NIL; \
- zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
-
-/* ========================================================================= */
-int ZEXPORT deflateInit_(strm, level, version, stream_size)
- z_streamp strm;
- int level;
- const char *version;
- int stream_size;
-{
- return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
- Z_DEFAULT_STRATEGY, version, stream_size);
- /* To do: ignore strm->next_in if we use it as window */
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
- version, stream_size)
- z_streamp strm;
- int level;
- int method;
- int windowBits;
- int memLevel;
- int strategy;
- const char *version;
- int stream_size;
-{
- deflate_state *s;
- int noheader = 0;
- static const char* my_version = ZLIB_VERSION;
-
- ushf *overlay;
- /* We overlay pending_buf and d_buf+l_buf. This works since the average
- * output size for (length,distance) codes is <= 24 bits.
- */
-
- if (version == Z_NULL || version[0] != my_version[0] ||
- stream_size != sizeof(z_stream)) {
- return Z_VERSION_ERROR;
- }
- if (strm == Z_NULL) return Z_STREAM_ERROR;
-
- strm->msg = Z_NULL;
- if (strm->zalloc == Z_NULL) {
- strm->zalloc = zcalloc;
- strm->opaque = (voidpf)0;
- }
- if (strm->zfree == Z_NULL) strm->zfree = zcfree;
-
- if (level == Z_DEFAULT_COMPRESSION) level = 6;
-#ifdef FASTEST
- level = 1;
-#endif
-
- if (windowBits < 0) { /* undocumented feature: suppress zlib header */
- noheader = 1;
- windowBits = -windowBits;
- }
- if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
- windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
- strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
- return Z_STREAM_ERROR;
- }
- s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
- if (s == Z_NULL) return Z_MEM_ERROR;
- strm->state = (struct internal_state FAR *)s;
- s->strm = strm;
-
- s->noheader = noheader;
- s->w_bits = windowBits;
- s->w_size = 1 << s->w_bits;
- s->w_mask = s->w_size - 1;
-
- s->hash_bits = memLevel + 7;
- s->hash_size = 1 << s->hash_bits;
- s->hash_mask = s->hash_size - 1;
- s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
-
- s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
- s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
- s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
-
- s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
-
- overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
- s->pending_buf = (uchf *) overlay;
- s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
-
- if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
- s->pending_buf == Z_NULL) {
- strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
- deflateEnd (strm);
- return Z_MEM_ERROR;
- }
- s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
- s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
-
- s->level = level;
- s->strategy = strategy;
- s->method = (Byte)method;
-
- return deflateReset(strm);
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
- z_streamp strm;
- const Bytef *dictionary;
- uInt dictLength;
-{
- deflate_state *s;
- uInt length = dictLength;
- uInt n;
- IPos hash_head = 0;
-
- if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
- strm->state->status != INIT_STATE) return Z_STREAM_ERROR;
-
- s = strm->state;
- strm->adler = adler32(strm->adler, dictionary, dictLength);
-
- if (length < MIN_MATCH) return Z_OK;
- if (length > MAX_DIST(s)) {
- length = MAX_DIST(s);
-#ifndef USE_DICT_HEAD
- dictionary += dictLength - length; /* use the tail of the dictionary */
-#endif
- }
- zmemcpy(s->window, dictionary, length);
- s->strstart = length;
- s->block_start = (long)length;
-
- /* Insert all strings in the hash table (except for the last two bytes).
- * s->lookahead stays null, so s->ins_h will be recomputed at the next
- * call of fill_window.
- */
- s->ins_h = s->window[0];
- UPDATE_HASH(s, s->ins_h, s->window[1]);
- for (n = 0; n <= length - MIN_MATCH; n++) {
- INSERT_STRING(s, n, hash_head);
- }
- if (hash_head) hash_head = 0; /* to make compiler happy */
- return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateReset (strm)
- z_streamp strm;
-{
- deflate_state *s;
-
- if (strm == Z_NULL || strm->state == Z_NULL ||
- strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;
-
- strm->total_in = strm->total_out = 0;
- strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
- strm->data_type = Z_UNKNOWN;
-
- s = (deflate_state *)strm->state;
- s->pending = 0;
- s->pending_out = s->pending_buf;
-
- if (s->noheader < 0) {
- s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
- }
- s->status = s->noheader ? BUSY_STATE : INIT_STATE;
- strm->adler = 1;
- s->last_flush = Z_NO_FLUSH;
-
- _tr_init(s);
- lm_init(s);
-
- return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateParams(strm, level, strategy)
- z_streamp strm;
- int level;
- int strategy;
-{
- deflate_state *s;
- compress_func func;
- int err = Z_OK;
-
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
- s = strm->state;
-
- if (level == Z_DEFAULT_COMPRESSION) {
- level = 6;
- }
- if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
- return Z_STREAM_ERROR;
- }
- func = configuration_table[s->level].func;
-
- if (func != configuration_table[level].func && strm->total_in != 0) {
- /* Flush the last buffer: */
- err = deflate(strm, Z_PARTIAL_FLUSH);
- }
- if (s->level != level) {
- s->level = level;
- s->max_lazy_match = configuration_table[level].max_lazy;
- s->good_match = configuration_table[level].good_length;
- s->nice_match = configuration_table[level].nice_length;
- s->max_chain_length = configuration_table[level].max_chain;
- }
- s->strategy = strategy;
- return err;
-}
-
-/* =========================================================================
- * Put a short in the pending buffer. The 16-bit value is put in MSB order.
- * IN assertion: the stream state is correct and there is enough room in
- * pending_buf.
- */
-local void putShortMSB (s, b)
- deflate_state *s;
- uInt b;
-{
- put_byte(s, (Byte)(b >> 8));
- put_byte(s, (Byte)(b & 0xff));
-}
-
-/* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
- */
-local void flush_pending(strm)
- z_streamp strm;
-{
- unsigned len = strm->state->pending;
-
- if (len > strm->avail_out) len = strm->avail_out;
- if (len == 0) return;
-
- zmemcpy(strm->next_out, strm->state->pending_out, len);
- strm->next_out += len;
- strm->state->pending_out += len;
- strm->total_out += len;
- strm->avail_out -= len;
- strm->state->pending -= len;
- if (strm->state->pending == 0) {
- strm->state->pending_out = strm->state->pending_buf;
- }
-}
-
-/* ========================================================================= */
-int ZEXPORT deflate (strm, flush)
- z_streamp strm;
- int flush;
-{
- int old_flush; /* value of flush param for previous deflate call */
- deflate_state *s;
-
- if (strm == Z_NULL || strm->state == Z_NULL ||
- flush > Z_FINISH || flush < 0) {
- return Z_STREAM_ERROR;
- }
- s = strm->state;
-
- if (strm->next_out == Z_NULL ||
- (strm->next_in == Z_NULL && strm->avail_in != 0) ||
- (s->status == FINISH_STATE && flush != Z_FINISH)) {
- ERR_RETURN(strm, Z_STREAM_ERROR);
- }
- if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
-
- s->strm = strm; /* just in case */
- old_flush = s->last_flush;
- s->last_flush = flush;
-
- /* Write the zlib header */
- if (s->status == INIT_STATE) {
-
- uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
- uInt level_flags = (s->level-1) >> 1;
-
- if (level_flags > 3) level_flags = 3;
- header |= (level_flags << 6);
- if (s->strstart != 0) header |= PRESET_DICT;
- header += 31 - (header % 31);
-
- s->status = BUSY_STATE;
- putShortMSB(s, header);
-
- /* Save the adler32 of the preset dictionary: */
- if (s->strstart != 0) {
- putShortMSB(s, (uInt)(strm->adler >> 16));
- putShortMSB(s, (uInt)(strm->adler & 0xffff));
- }
- strm->adler = 1L;
- }
-
- /* Flush as much pending output as possible */
- if (s->pending != 0) {
- flush_pending(strm);
- if (strm->avail_out == 0) {
- /* Since avail_out is 0, deflate will be called again with
- * more output space, but possibly with both pending and
- * avail_in equal to zero. There won't be anything to do,
- * but this is not an error situation so make sure we
- * return OK instead of BUF_ERROR at next call of deflate:
- */
- s->last_flush = -1;
- return Z_OK;
- }
-
- /* Make sure there is something to do and avoid duplicate consecutive
- * flushes. For repeated and useless calls with Z_FINISH, we keep
- * returning Z_STREAM_END instead of Z_BUFF_ERROR.
- */
- } else if (strm->avail_in == 0 && flush <= old_flush &&
- flush != Z_FINISH) {
- ERR_RETURN(strm, Z_BUF_ERROR);
- }
-
- /* User must not provide more input after the first FINISH: */
- if (s->status == FINISH_STATE && strm->avail_in != 0) {
- ERR_RETURN(strm, Z_BUF_ERROR);
- }
-
- /* Start a new block or continue the current one.
- */
- if (strm->avail_in != 0 || s->lookahead != 0 ||
- (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
- block_state bstate;
-
- bstate = (*(configuration_table[s->level].func))(s, flush);
-
- if (bstate == finish_started || bstate == finish_done) {
- s->status = FINISH_STATE;
- }
- if (bstate == need_more || bstate == finish_started) {
- if (strm->avail_out == 0) {
- s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
- }
- return Z_OK;
- /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
- * of deflate should use the same flush parameter to make sure
- * that the flush is complete. So we don't have to output an
- * empty block here, this will be done at next call. This also
- * ensures that for a very small output buffer, we emit at most
- * one empty block.
- */
- }
- if (bstate == block_done) {
- if (flush == Z_PARTIAL_FLUSH) {
- _tr_align(s);
- } else { /* FULL_FLUSH or SYNC_FLUSH */
- _tr_stored_block(s, (char*)0, 0L, 0);
- /* For a full flush, this empty block will be recognized
- * as a special marker by inflate_sync().
- */
- if (flush == Z_FULL_FLUSH) {
- CLEAR_HASH(s); /* forget history */
- }
- }
- flush_pending(strm);
- if (strm->avail_out == 0) {
- s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
- return Z_OK;
- }
- }
- }
- Assert(strm->avail_out > 0, "bug2");
-
- if (flush != Z_FINISH) return Z_OK;
- if (s->noheader) return Z_STREAM_END;
-
- /* Write the zlib trailer (adler32) */
- putShortMSB(s, (uInt)(strm->adler >> 16));
- putShortMSB(s, (uInt)(strm->adler & 0xffff));
- flush_pending(strm);
- /* If avail_out is zero, the application will call deflate again
- * to flush the rest.
- */
- s->noheader = -1; /* write the trailer only once! */
- return s->pending != 0 ? Z_OK : Z_STREAM_END;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateEnd (strm)
- z_streamp strm;
-{
- int status;
-
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-
- status = strm->state->status;
- if (status != INIT_STATE && status != BUSY_STATE &&
- status != FINISH_STATE) {
- return Z_STREAM_ERROR;
- }
-
- /* Deallocate in reverse order of allocations: */
- TRY_FREE(strm, strm->state->pending_buf);
- TRY_FREE(strm, strm->state->head);
- TRY_FREE(strm, strm->state->prev);
- TRY_FREE(strm, strm->state->window);
-
- ZFREE(strm, strm->state);
- strm->state = Z_NULL;
-
- return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
-}
-
-/* =========================================================================
- * Copy the source state to the destination state.
- * To simplify the source, this is not supported for 16-bit MSDOS (which
- * doesn't have enough memory anyway to duplicate compression states).
- */
-int ZEXPORT deflateCopy (dest, source)
- z_streamp dest;
- z_streamp source;
-{
-#ifdef MAXSEG_64K
- return Z_STREAM_ERROR;
-#else
- deflate_state *ds;
- deflate_state *ss;
- ushf *overlay;
-
-
- if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
- return Z_STREAM_ERROR;
- }
-
- ss = source->state;
-
- *dest = *source;
-
- ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
- if (ds == Z_NULL) return Z_MEM_ERROR;
- dest->state = (struct internal_state FAR *) ds;
- *ds = *ss;
- ds->strm = dest;
-
- ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
- ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
- ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
- overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
- ds->pending_buf = (uchf *) overlay;
-
- if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
- ds->pending_buf == Z_NULL) {
- deflateEnd (dest);
- return Z_MEM_ERROR;
- }
- /* following zmemcpy do not work for 16-bit MSDOS */
- zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
- zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
- zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
- zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
-
- ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
- ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
- ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
-
- ds->l_desc.dyn_tree = ds->dyn_ltree;
- ds->d_desc.dyn_tree = ds->dyn_dtree;
- ds->bl_desc.dyn_tree = ds->bl_tree;
-
- return Z_OK;
-#endif
-}
-
-/* ===========================================================================
- * Read a new buffer from the current input stream, update the adler32
- * and total number of bytes read. All deflate() input goes through
- * this function so some applications may wish to modify it to avoid
- * allocating a large strm->next_in buffer and copying from it.
- * (See also flush_pending()).
- */
-local int read_buf(strm, buf, size)
- z_streamp strm;
- Bytef *buf;
- unsigned size;
-{
- unsigned len = strm->avail_in;
-
- if (len > size) len = size;
- if (len == 0) return 0;
-
- strm->avail_in -= len;
-
- if (!strm->state->noheader) {
- strm->adler = adler32(strm->adler, strm->next_in, len);
- }
- zmemcpy(buf, strm->next_in, len);
- strm->next_in += len;
- strm->total_in += len;
-
- return (int)len;
-}
-
-/* ===========================================================================
- * Initialize the "longest match" routines for a new zlib stream
- */
-local void lm_init (s)
- deflate_state *s;
-{
- s->window_size = (ulg)2L*s->w_size;
-
- CLEAR_HASH(s);
-
- /* Set the default configuration parameters:
- */
- s->max_lazy_match = configuration_table[s->level].max_lazy;
- s->good_match = configuration_table[s->level].good_length;
- s->nice_match = configuration_table[s->level].nice_length;
- s->max_chain_length = configuration_table[s->level].max_chain;
-
- s->strstart = 0;
- s->block_start = 0L;
- s->lookahead = 0;
- s->match_length = s->prev_length = MIN_MATCH-1;
- s->match_available = 0;
- s->ins_h = 0;
-#ifdef ASMV
- match_init(); /* initialize the asm code */
-#endif
-}
-
-/* ===========================================================================
- * Set match_start to the longest match starting at the given string and
- * return its length. Matches shorter or equal to prev_length are discarded,
- * in which case the result is equal to prev_length and match_start is
- * garbage.
- * IN assertions: cur_match is the head of the hash chain for the current
- * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
- * OUT assertion: the match length is not greater than s->lookahead.
- */
-#ifndef ASMV
-/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
- * match.S. The code will be functionally equivalent.
- */
-#ifndef FASTEST
-local uInt longest_match(s, cur_match)
- deflate_state *s;
- IPos cur_match; /* current match */
-{
- unsigned chain_length = s->max_chain_length;/* max hash chain length */
- register Bytef *scan = s->window + s->strstart; /* current string */
- register Bytef *match; /* matched string */
- register int len; /* length of current match */
- int best_len = s->prev_length; /* best match length so far */
- int nice_match = s->nice_match; /* stop if match long enough */
- IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
- s->strstart - (IPos)MAX_DIST(s) : NIL;
- /* Stop when cur_match becomes <= limit. To simplify the code,
- * we prevent matches with the string of window index 0.
- */
- Posf *prev = s->prev;
- uInt wmask = s->w_mask;
-
-#ifdef UNALIGNED_OK
- /* Compare two bytes at a time. Note: this is not always beneficial.
- * Try with and without -DUNALIGNED_OK to check.
- */
- register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
- register ush scan_start = *(ushf*)scan;
- register ush scan_end = *(ushf*)(scan+best_len-1);
-#else
- register Bytef *strend = s->window + s->strstart + MAX_MATCH;
- register Byte scan_end1 = scan[best_len-1];
- register Byte scan_end = scan[best_len];
-#endif
-
- /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
- * It is easy to get rid of this optimization if necessary.
- */
- Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
- /* Do not waste too much time if we already have a good match: */
- if (s->prev_length >= s->good_match) {
- chain_length >>= 2;
- }
- /* Do not look for matches beyond the end of the input. This is necessary
- * to make deflate deterministic.
- */
- if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-
- Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
- do {
- Assert(cur_match < s->strstart, "no future");
- match = s->window + cur_match;
-
- /* Skip to next match if the match length cannot increase
- * or if the match length is less than 2:
- */
-#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
- /* This code assumes sizeof(unsigned short) == 2. Do not use
- * UNALIGNED_OK if your compiler uses a different size.
- */
- if (*(ushf*)(match+best_len-1) != scan_end ||
- *(ushf*)match != scan_start) continue;
-
- /* It is not necessary to compare scan[2] and match[2] since they are
- * always equal when the other bytes match, given that the hash keys
- * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
- * strstart+3, +5, ... up to strstart+257. We check for insufficient
- * lookahead only every 4th comparison; the 128th check will be made
- * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
- * necessary to put more guard bytes at the end of the window, or
- * to check more often for insufficient lookahead.
- */
- Assert(scan[2] == match[2], "scan[2]?");
- scan++, match++;
- do {
- } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
- *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
- *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
- *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
- scan < strend);
- /* The funny "do {}" generates better code on most compilers */
-
- /* Here, scan <= window+strstart+257 */
- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
- if (*scan == *match) scan++;
-
- len = (MAX_MATCH - 1) - (int)(strend-scan);
- scan = strend - (MAX_MATCH-1);
-
-#else /* UNALIGNED_OK */
-
- if (match[best_len] != scan_end ||
- match[best_len-1] != scan_end1 ||
- *match != *scan ||
- *++match != scan[1]) continue;
-
- /* The check at best_len-1 can be removed because it will be made
- * again later. (This heuristic is not always a win.)
- * It is not necessary to compare scan[2] and match[2] since they
- * are always equal when the other bytes match, given that
- * the hash keys are equal and that HASH_BITS >= 8.
- */
- scan += 2, match++;
- Assert(*scan == *match, "match[2]?");
-
- /* We check for insufficient lookahead only every 8th comparison;
- * the 256th check will be made at strstart+258.
- */
- do {
- } while (*++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- scan < strend);
-
- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
- len = MAX_MATCH - (int)(strend - scan);
- scan = strend - MAX_MATCH;
-
-#endif /* UNALIGNED_OK */
-
- if (len > best_len) {
- s->match_start = cur_match;
- best_len = len;
- if (len >= nice_match) break;
-#ifdef UNALIGNED_OK
- scan_end = *(ushf*)(scan+best_len-1);
-#else
- scan_end1 = scan[best_len-1];
- scan_end = scan[best_len];
-#endif
- }
- } while ((cur_match = prev[cur_match & wmask]) > limit
- && --chain_length != 0);
-
- if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
- return s->lookahead;
-}
-
-#else /* FASTEST */
-/* ---------------------------------------------------------------------------
- * Optimized version for level == 1 only
- */
-local uInt longest_match(s, cur_match)
- deflate_state *s;
- IPos cur_match; /* current match */
-{
- register Bytef *scan = s->window + s->strstart; /* current string */
- register Bytef *match; /* matched string */
- register int len; /* length of current match */
- register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-
- /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
- * It is easy to get rid of this optimization if necessary.
- */
- Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
- Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
- Assert(cur_match < s->strstart, "no future");
-
- match = s->window + cur_match;
-
- /* Return failure if the match length is less than 2:
- */
- if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
-
- /* The check at best_len-1 can be removed because it will be made
- * again later. (This heuristic is not always a win.)
- * It is not necessary to compare scan[2] and match[2] since they
- * are always equal when the other bytes match, given that
- * the hash keys are equal and that HASH_BITS >= 8.
- */
- scan += 2, match += 2;
- Assert(*scan == *match, "match[2]?");
-
- /* We check for insufficient lookahead only every 8th comparison;
- * the 256th check will be made at strstart+258.
- */
- do {
- } while (*++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- scan < strend);
-
- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
- len = MAX_MATCH - (int)(strend - scan);
-
- if (len < MIN_MATCH) return MIN_MATCH - 1;
-
- s->match_start = cur_match;
- return len <= s->lookahead ? len : s->lookahead;
-}
-#endif /* FASTEST */
-#endif /* ASMV */
-
-#ifdef DEBUG
-/* ===========================================================================
- * Check that the match at match_start is indeed a match.
- */
-local void check_match(s, start, match, length)
- deflate_state *s;
- IPos start, match;
- int length;
-{
- /* check that the match is indeed a match */
- if (zmemcmp(s->window + match,
- s->window + start, length) != EQUAL) {
- fprintf(stderr, " start %u, match %u, length %d\n",
- start, match, length);
- do {
- fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
- } while (--length != 0);
- z_error("invalid match");
- }
- if (z_verbose > 1) {
- fprintf(stderr,"\\[%d,%d]", start-match, length);
- do { putc(s->window[start++], stderr); } while (--length != 0);
- }
-}
-#else
-# define check_match(s, start, match, length)
-#endif
-
-/* ===========================================================================
- * Fill the window when the lookahead becomes insufficient.
- * Updates strstart and lookahead.
- *
- * IN assertion: lookahead < MIN_LOOKAHEAD
- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
- * At least one byte has been read, or avail_in == 0; reads are
- * performed for at least two bytes (required for the zip translate_eol
- * option -- not supported here).
- */
-local void fill_window(s)
- deflate_state *s;
-{
- register unsigned n, m;
- register Posf *p;
- unsigned more; /* Amount of free space at the end of the window. */
- uInt wsize = s->w_size;
-
- do {
- more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
-
- /* Deal with !@#$% 64K limit: */
- if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
- more = wsize;
-
- } else if (more == (unsigned)(-1)) {
- /* Very unlikely, but possible on 16 bit machine if strstart == 0
- * and lookahead == 1 (input done one byte at time)
- */
- more--;
-
- /* If the window is almost full and there is insufficient lookahead,
- * move the upper half to the lower one to make room in the upper half.
- */
- } else if (s->strstart >= wsize+MAX_DIST(s)) {
-
- zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
- s->match_start -= wsize;
- s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
- s->block_start -= (long) wsize;
-
- /* Slide the hash table (could be avoided with 32 bit values
- at the expense of memory usage). We slide even when level == 0
- to keep the hash table consistent if we switch back to level > 0
- later. (Using level 0 permanently is not an optimal usage of
- zlib, so we don't care about this pathological case.)
- */
- n = s->hash_size;
- p = &s->head[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- } while (--n);
-
- n = wsize;
-#ifndef FASTEST
- p = &s->prev[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- /* If n is not on any hash chain, prev[n] is garbage but
- * its value will never be used.
- */
- } while (--n);
-#endif
- more += wsize;
- }
- if (s->strm->avail_in == 0) return;
-
- /* If there was no sliding:
- * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
- * more == window_size - lookahead - strstart
- * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
- * => more >= window_size - 2*WSIZE + 2
- * In the BIG_MEM or MMAP case (not yet supported),
- * window_size == input_size + MIN_LOOKAHEAD &&
- * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
- * Otherwise, window_size == 2*WSIZE so more >= 2.
- * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
- */
- Assert(more >= 2, "more < 2");
-
- n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
- s->lookahead += n;
-
- /* Initialize the hash value now that we have some input: */
- if (s->lookahead >= MIN_MATCH) {
- s->ins_h = s->window[s->strstart];
- UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
-#if MIN_MATCH != 3
- Call UPDATE_HASH() MIN_MATCH-3 more times
-#endif
- }
- /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
- * but this is not important since only literal bytes will be emitted.
- */
-
- } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
-}
-
-/* ===========================================================================
- * Flush the current block, with given end-of-file flag.
- * IN assertion: strstart is set to the end of the current match.
- */
-#define FLUSH_BLOCK_ONLY(s, eof) { \
- _tr_flush_block(s, (s->block_start >= 0L ? \
- (charf *)&s->window[(unsigned)s->block_start] : \
- (charf *)Z_NULL), \
- (ulg)((long)s->strstart - s->block_start), \
- (eof)); \
- s->block_start = s->strstart; \
- flush_pending(s->strm); \
- Tracev((stderr,"[FLUSH]")); \
-}
-
-/* Same but force premature exit if necessary. */
-#define FLUSH_BLOCK(s, eof) { \
- FLUSH_BLOCK_ONLY(s, eof); \
- if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
-}
-
-/* ===========================================================================
- * Copy without compression as much as possible from the input stream, return
- * the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
- */
-local block_state deflate_stored(s, flush)
- deflate_state *s;
- int flush;
-{
- /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
- * to pending_buf_size, and each stored block has a 5 byte header:
- */
- ulg max_block_size = 0xffff;
- ulg max_start;
-
- if (max_block_size > s->pending_buf_size - 5) {
- max_block_size = s->pending_buf_size - 5;
- }
-
- /* Copy as much as possible from input to output: */
- for (;;) {
- /* Fill the window as much as possible: */
- if (s->lookahead <= 1) {
-
- Assert(s->strstart < s->w_size+MAX_DIST(s) ||
- s->block_start >= (long)s->w_size, "slide too late");
-
- fill_window(s);
- if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
-
- if (s->lookahead == 0) break; /* flush the current block */
- }
- Assert(s->block_start >= 0L, "block gone");
-
- s->strstart += s->lookahead;
- s->lookahead = 0;
-
- /* Emit a stored block if pending_buf will be full: */
- max_start = s->block_start + max_block_size;
- if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
- /* strstart == 0 is possible when wraparound on 16-bit machine */
- s->lookahead = (uInt)(s->strstart - max_start);
- s->strstart = (uInt)max_start;
- FLUSH_BLOCK(s, 0);
- }
- /* Flush if we may have to slide, otherwise block_start may become
- * negative and the data will be gone:
- */
- if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
- FLUSH_BLOCK(s, 0);
- }
- }
- FLUSH_BLOCK(s, flush == Z_FINISH);
- return flush == Z_FINISH ? finish_done : block_done;
-}
-
-/* ===========================================================================
- * Compress as much as possible from the input stream, return the current
- * block state.
- * This function does not perform lazy evaluation of matches and inserts
- * new strings in the dictionary only for unmatched strings or for short
- * matches. It is used only for the fast compression options.
- */
-local block_state deflate_fast(s, flush)
- deflate_state *s;
- int flush;
-{
- IPos hash_head = NIL; /* head of the hash chain */
- int bflush; /* set if current block must be flushed */
-
- for (;;) {
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the next match, plus MIN_MATCH bytes to insert the
- * string following the next match.
- */
- if (s->lookahead < MIN_LOOKAHEAD) {
- fill_window(s);
- if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
- return need_more;
- }
- if (s->lookahead == 0) break; /* flush the current block */
- }
-
- /* Insert the string window[strstart .. strstart+2] in the
- * dictionary, and set hash_head to the head of the hash chain:
- */
- if (s->lookahead >= MIN_MATCH) {
- INSERT_STRING(s, s->strstart, hash_head);
- }
-
- /* Find the longest match, discarding those <= prev_length.
- * At this point we have always match_length < MIN_MATCH
- */
- if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
- /* To simplify the code, we prevent matches with the string
- * of window index 0 (in particular we have to avoid a match
- * of the string with itself at the start of the input file).
- */
- if (s->strategy != Z_HUFFMAN_ONLY) {
- s->match_length = longest_match (s, hash_head);
- }
- /* longest_match() sets match_start */
- }
- if (s->match_length >= MIN_MATCH) {
- check_match(s, s->strstart, s->match_start, s->match_length);
-
- _tr_tally_dist(s, s->strstart - s->match_start,
- s->match_length - MIN_MATCH, bflush);
-
- s->lookahead -= s->match_length;
-
- /* Insert new strings in the hash table only if the match length
- * is not too large. This saves time but degrades compression.
- */
-#ifndef FASTEST
- if (s->match_length <= s->max_insert_length &&
- s->lookahead >= MIN_MATCH) {
- s->match_length--; /* string at strstart already in hash table */
- do {
- s->strstart++;
- INSERT_STRING(s, s->strstart, hash_head);
- /* strstart never exceeds WSIZE-MAX_MATCH, so there are
- * always MIN_MATCH bytes ahead.
- */
- } while (--s->match_length != 0);
- s->strstart++;
- } else
-#endif
- {
- s->strstart += s->match_length;
- s->match_length = 0;
- s->ins_h = s->window[s->strstart];
- UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
-#if MIN_MATCH != 3
- Call UPDATE_HASH() MIN_MATCH-3 more times
-#endif
- /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
- * matter since it will be recomputed at next deflate call.
- */
- }
- } else {
- /* No match, output a literal byte */
- Tracevv((stderr,"%c", s->window[s->strstart]));
- _tr_tally_lit (s, s->window[s->strstart], bflush);
- s->lookahead--;
- s->strstart++;
- }
- if (bflush) FLUSH_BLOCK(s, 0);
- }
- FLUSH_BLOCK(s, flush == Z_FINISH);
- return flush == Z_FINISH ? finish_done : block_done;
-}
-
-/* ===========================================================================
- * Same as above, but achieves better compression. We use a lazy
- * evaluation for matches: a match is finally adopted only if there is
- * no better match at the next window position.
- */
-local block_state deflate_slow(s, flush)
- deflate_state *s;
- int flush;
-{
- IPos hash_head = NIL; /* head of hash chain */
- int bflush; /* set if current block must be flushed */
-
- /* Process the input block. */
- for (;;) {
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the next match, plus MIN_MATCH bytes to insert the
- * string following the next match.
- */
- if (s->lookahead < MIN_LOOKAHEAD) {
- fill_window(s);
- if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
- return need_more;
- }
- if (s->lookahead == 0) break; /* flush the current block */
- }
-
- /* Insert the string window[strstart .. strstart+2] in the
- * dictionary, and set hash_head to the head of the hash chain:
- */
- if (s->lookahead >= MIN_MATCH) {
- INSERT_STRING(s, s->strstart, hash_head);
- }
-
- /* Find the longest match, discarding those <= prev_length.
- */
- s->prev_length = s->match_length, s->prev_match = s->match_start;
- s->match_length = MIN_MATCH-1;
-
- if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
- s->strstart - hash_head <= MAX_DIST(s)) {
- /* To simplify the code, we prevent matches with the string
- * of window index 0 (in particular we have to avoid a match
- * of the string with itself at the start of the input file).
- */
- if (s->strategy != Z_HUFFMAN_ONLY) {
- s->match_length = longest_match (s, hash_head);
- }
- /* longest_match() sets match_start */
-
- if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
- (s->match_length == MIN_MATCH &&
- s->strstart - s->match_start > TOO_FAR))) {
-
- /* If prev_match is also MIN_MATCH, match_start is garbage
- * but we will ignore the current match anyway.
- */
- s->match_length = MIN_MATCH-1;
- }
- }
- /* If there was a match at the previous step and the current
- * match is not better, output the previous match:
- */
- if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
- uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
- /* Do not insert strings in hash table beyond this. */
-
- check_match(s, s->strstart-1, s->prev_match, s->prev_length);
-
- _tr_tally_dist(s, s->strstart -1 - s->prev_match,
- s->prev_length - MIN_MATCH, bflush);
-
- /* Insert in hash table all strings up to the end of the match.
- * strstart-1 and strstart are already inserted. If there is not
- * enough lookahead, the last two strings are not inserted in
- * the hash table.
- */
- s->lookahead -= s->prev_length-1;
- s->prev_length -= 2;
- do {
- if (++s->strstart <= max_insert) {
- INSERT_STRING(s, s->strstart, hash_head);
- }
- } while (--s->prev_length != 0);
- s->match_available = 0;
- s->match_length = MIN_MATCH-1;
- s->strstart++;
-
- if (bflush) FLUSH_BLOCK(s, 0);
-
- } else if (s->match_available) {
- /* If there was no match at the previous position, output a
- * single literal. If there was a match but the current match
- * is longer, truncate the previous match to a single literal.
- */
- Tracevv((stderr,"%c", s->window[s->strstart-1]));
- _tr_tally_lit(s, s->window[s->strstart-1], bflush);
- if (bflush) {
- FLUSH_BLOCK_ONLY(s, 0);
- }
- s->strstart++;
- s->lookahead--;
- if (s->strm->avail_out == 0) return need_more;
- } else {
- /* There is no previous match to compare with, wait for
- * the next step to decide.
- */
- s->match_available = 1;
- s->strstart++;
- s->lookahead--;
- }
- }
- Assert (flush != Z_NO_FLUSH, "no flush?");
- if (s->match_available) {
- Tracevv((stderr,"%c", s->window[s->strstart-1]));
- _tr_tally_lit(s, s->window[s->strstart-1], bflush);
- s->match_available = 0;
- }
- FLUSH_BLOCK(s, flush == Z_FINISH);
- return flush == Z_FINISH ? finish_done : block_done;
-}
diff --git a/zlib/deflate.h b/zlib/deflate.h
deleted file mode 100644
index b99a48a52..000000000
--- a/zlib/deflate.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/* deflate.h -- internal compression state
- * Copyright (C) 1995-2002 Jean-loup Gailly
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id$ */
-
-#ifndef _DEFLATE_H
-#define _DEFLATE_H
-
-#include "zutil.h"
-
-/* ===========================================================================
- * Internal compression state.
- */
-
-#define LENGTH_CODES 29
-/* number of length codes, not counting the special END_BLOCK code */
-
-#define LITERALS 256
-/* number of literal bytes 0..255 */
-
-#define L_CODES (LITERALS+1+LENGTH_CODES)
-/* number of Literal or Length codes, including the END_BLOCK code */
-
-#define D_CODES 30
-/* number of distance codes */
-
-#define BL_CODES 19
-/* number of codes used to transfer the bit lengths */
-
-#define HEAP_SIZE (2*L_CODES+1)
-/* maximum heap size */
-
-#define MAX_BITS 15
-/* All codes must not exceed MAX_BITS bits */
-
-#define INIT_STATE 42
-#define BUSY_STATE 113
-#define FINISH_STATE 666
-/* Stream status */
-
-
-/* Data structure describing a single value and its code string. */
-typedef struct ct_data_s {
- union {
- ush freq; /* frequency count */
- ush code; /* bit string */
- } fc;
- union {
- ush dad; /* father node in Huffman tree */
- ush len; /* length of bit string */
- } dl;
-} FAR ct_data;
-
-#define Freq fc.freq
-#define Code fc.code
-#define Dad dl.dad
-#define Len dl.len
-
-typedef struct static_tree_desc_s static_tree_desc;
-
-typedef struct tree_desc_s {
- ct_data *dyn_tree; /* the dynamic tree */
- int max_code; /* largest code with non zero frequency */
- static_tree_desc *stat_desc; /* the corresponding static tree */
-} FAR tree_desc;
-
-typedef ush Pos;
-typedef Pos FAR Posf;
-typedef unsigned IPos;
-
-/* A Pos is an index in the character window. We use short instead of int to
- * save space in the various tables. IPos is used only for parameter passing.
- */
-
-typedef struct internal_state {
- z_streamp strm; /* pointer back to this zlib stream */
- int status; /* as the name implies */
- Bytef *pending_buf; /* output still pending */
- ulg pending_buf_size; /* size of pending_buf */
- Bytef *pending_out; /* next pending byte to output to the stream */
- int pending; /* nb of bytes in the pending buffer */
- int noheader; /* suppress zlib header and adler32 */
- Byte data_type; /* UNKNOWN, BINARY or ASCII */
- Byte method; /* STORED (for zip only) or DEFLATED */
- int last_flush; /* value of flush param for previous deflate call */
-
- /* used by deflate.c: */
-
- uInt w_size; /* LZ77 window size (32K by default) */
- uInt w_bits; /* log2(w_size) (8..16) */
- uInt w_mask; /* w_size - 1 */
-
- Bytef *window;
- /* Sliding window. Input bytes are read into the second half of the window,
- * and move to the first half later to keep a dictionary of at least wSize
- * bytes. With this organization, matches are limited to a distance of
- * wSize-MAX_MATCH bytes, but this ensures that IO is always
- * performed with a length multiple of the block size. Also, it limits
- * the window size to 64K, which is quite useful on MSDOS.
- * To do: use the user input buffer as sliding window.
- */
-
- ulg window_size;
- /* Actual size of window: 2*wSize, except when the user input buffer
- * is directly used as sliding window.
- */
-
- Posf *prev;
- /* Link to older string with same hash index. To limit the size of this
- * array to 64K, this link is maintained only for the last 32K strings.
- * An index in this array is thus a window index modulo 32K.
- */
-
- Posf *head; /* Heads of the hash chains or NIL. */
-
- uInt ins_h; /* hash index of string to be inserted */
- uInt hash_size; /* number of elements in hash table */
- uInt hash_bits; /* log2(hash_size) */
- uInt hash_mask; /* hash_size-1 */
-
- uInt hash_shift;
- /* Number of bits by which ins_h must be shifted at each input
- * step. It must be such that after MIN_MATCH steps, the oldest
- * byte no longer takes part in the hash key, that is:
- * hash_shift * MIN_MATCH >= hash_bits
- */
-
- long block_start;
- /* Window position at the beginning of the current output block. Gets
- * negative when the window is moved backwards.
- */
-
- uInt match_length; /* length of best match */
- IPos prev_match; /* previous match */
- int match_available; /* set if previous match exists */
- uInt strstart; /* start of string to insert */
- uInt match_start; /* start of matching string */
- uInt lookahead; /* number of valid bytes ahead in window */
-
- uInt prev_length;
- /* Length of the best match at previous step. Matches not greater than this
- * are discarded. This is used in the lazy match evaluation.
- */
-
- uInt max_chain_length;
- /* To speed up deflation, hash chains are never searched beyond this
- * length. A higher limit improves compression ratio but degrades the
- * speed.
- */
-
- uInt max_lazy_match;
- /* Attempt to find a better match only when the current match is strictly
- * smaller than this value. This mechanism is used only for compression
- * levels >= 4.
- */
-# define max_insert_length max_lazy_match
- /* Insert new strings in the hash table only if the match length is not
- * greater than this length. This saves time but degrades compression.
- * max_insert_length is used only for compression levels <= 3.
- */
-
- int level; /* compression level (1..9) */
- int strategy; /* favor or force Huffman coding*/
-
- uInt good_match;
- /* Use a faster search when the previous match is longer than this */
-
- int nice_match; /* Stop searching when current match exceeds this */
-
- /* used by trees.c: */
- /* Didn't use ct_data typedef below to supress compiler warning */
- struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
- struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
- struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
-
- struct tree_desc_s l_desc; /* desc. for literal tree */
- struct tree_desc_s d_desc; /* desc. for distance tree */
- struct tree_desc_s bl_desc; /* desc. for bit length tree */
-
- ush bl_count[MAX_BITS+1];
- /* number of codes at each bit length for an optimal tree */
-
- int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
- int heap_len; /* number of elements in the heap */
- int heap_max; /* element of largest frequency */
- /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
- * The same heap array is used to build all trees.
- */
-
- uch depth[2*L_CODES+1];
- /* Depth of each subtree used as tie breaker for trees of equal frequency
- */
-
- uchf *l_buf; /* buffer for literals or lengths */
-
- uInt lit_bufsize;
- /* Size of match buffer for literals/lengths. There are 4 reasons for
- * limiting lit_bufsize to 64K:
- * - frequencies can be kept in 16 bit counters
- * - if compression is not successful for the first block, all input
- * data is still in the window so we can still emit a stored block even
- * when input comes from standard input. (This can also be done for
- * all blocks if lit_bufsize is not greater than 32K.)
- * - if compression is not successful for a file smaller than 64K, we can
- * even emit a stored file instead of a stored block (saving 5 bytes).
- * This is applicable only for zip (not gzip or zlib).
- * - creating new Huffman trees less frequently may not provide fast
- * adaptation to changes in the input data statistics. (Take for
- * example a binary file with poorly compressible code followed by
- * a highly compressible string table.) Smaller buffer sizes give
- * fast adaptation but have of course the overhead of transmitting
- * trees more frequently.
- * - I can't count above 4
- */
-
- uInt last_lit; /* running index in l_buf */
-
- ushf *d_buf;
- /* Buffer for distances. To simplify the code, d_buf and l_buf have
- * the same number of elements. To use different lengths, an extra flag
- * array would be necessary.
- */
-
- ulg opt_len; /* bit length of current block with optimal trees */
- ulg static_len; /* bit length of current block with static trees */
- uInt matches; /* number of string matches in current block */
- int last_eob_len; /* bit length of EOB code for last block */
-
-#ifdef DEBUG
- ulg compressed_len; /* total bit length of compressed file mod 2^32 */
- ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
-#endif
-
- ush bi_buf;
- /* Output buffer. bits are inserted starting at the bottom (least
- * significant bits).
- */
- int bi_valid;
- /* Number of valid bits in bi_buf. All bits above the last valid bit
- * are always zero.
- */
-
-} FAR deflate_state;
-
-/* Output a byte on the stream.
- * IN assertion: there is enough room in pending_buf.
- */
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
-
-
-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
-/* Minimum amount of lookahead, except at the end of the input file.
- * See deflate.c for comments about the MIN_MATCH+1.
- */
-
-#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
-/* In order to simplify the code, particularly on 16 bit machines, match
- * distances are limited to MAX_DIST instead of WSIZE.
- */
-
- /* in trees.c */
-void _tr_init OF((deflate_state *s));
-int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
-void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
- int eof));
-void _tr_align OF((deflate_state *s));
-void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
- int eof));
-
-#define d_code(dist) \
- ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
-/* Mapping from a distance to a distance code. dist is the distance - 1 and
- * must not have side effects. _dist_code[256] and _dist_code[257] are never
- * used.
- */
-
-#ifndef DEBUG
-/* Inline versions of _tr_tally for speed: */
-
-#if defined(GEN_TREES_H) || !defined(STDC)
- extern uch _length_code[];
- extern uch _dist_code[];
-#else
- extern const uch _length_code[];
- extern const uch _dist_code[];
-#endif
-
-# define _tr_tally_lit(s, c, flush) \
- { uch cc = (c); \
- s->d_buf[s->last_lit] = 0; \
- s->l_buf[s->last_lit++] = cc; \
- s->dyn_ltree[cc].Freq++; \
- flush = (s->last_lit == s->lit_bufsize-1); \
- }
-# define _tr_tally_dist(s, distance, length, flush) \
- { uch len = (length); \
- ush dist = (distance); \
- s->d_buf[s->last_lit] = dist; \
- s->l_buf[s->last_lit++] = len; \
- dist--; \
- s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
- s->dyn_dtree[d_code(dist)].Freq++; \
- flush = (s->last_lit == s->lit_bufsize-1); \
- }
-#else
-# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
-# define _tr_tally_dist(s, distance, length, flush) \
- flush = _tr_tally(s, distance, length)
-#endif
-
-#endif
diff --git a/zlib/example.c b/zlib/example.c
deleted file mode 100644
index e7e367333..000000000
--- a/zlib/example.c
+++ /dev/null
@@ -1,556 +0,0 @@
-/* example.c -- usage example of the zlib compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include <stdio.h>
-#include "zlib.h"
-
-#ifdef STDC
-# include <string.h>
-# include <stdlib.h>
-#else
- extern void exit OF((int));
-#endif
-
-#if defined(VMS) || defined(RISCOS)
-# define TESTFILE "foo-gz"
-#else
-# define TESTFILE "foo.gz"
-#endif
-
-#define CHECK_ERR(err, msg) { \
- if (err != Z_OK) { \
- fprintf(stderr, "%s error: %d\n", msg, err); \
- exit(1); \
- } \
-}
-
-const char hello[] = "hello, hello!";
-/* "hello world" would be more standard, but the repeated "hello"
- * stresses the compression code better, sorry...
- */
-
-const char dictionary[] = "hello";
-uLong dictId; /* Adler32 value of the dictionary */
-
-void test_compress OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_gzio OF((const char *out, const char *in,
- Byte *uncompr, int uncomprLen));
-void test_deflate OF((Byte *compr, uLong comprLen));
-void test_inflate OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_large_deflate OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_large_inflate OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_flush OF((Byte *compr, uLong *comprLen));
-void test_sync OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_dict_deflate OF((Byte *compr, uLong comprLen));
-void test_dict_inflate OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-int main OF((int argc, char *argv[]));
-
-/* ===========================================================================
- * Test compress() and uncompress()
- */
-void test_compress(compr, comprLen, uncompr, uncomprLen)
- Byte *compr, *uncompr;
- uLong comprLen, uncomprLen;
-{
- int err;
- uLong len = strlen(hello)+1;
-
- err = compress(compr, &comprLen, (const Bytef*)hello, len);
- CHECK_ERR(err, "compress");
-
- strcpy((char*)uncompr, "garbage");
-
- err = uncompress(uncompr, &uncomprLen, compr, comprLen);
- CHECK_ERR(err, "uncompress");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad uncompress\n");
- exit(1);
- } else {
- printf("uncompress(): %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Test read/write of .gz files
- */
-void test_gzio(out, in, uncompr, uncomprLen)
- const char *out; /* compressed output file */
- const char *in; /* compressed input file */
- Byte *uncompr;
- int uncomprLen;
-{
- int err;
- int len = strlen(hello)+1;
- gzFile file;
- z_off_t pos;
-
- file = gzopen(out, "wb");
- if (file == NULL) {
- fprintf(stderr, "gzopen error\n");
- exit(1);
- }
- gzputc(file, 'h');
- if (gzputs(file, "ello") != 4) {
- fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (gzprintf(file, ", %s!", "hello") != 8) {
- fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
- exit(1);
- }
- gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
- gzclose(file);
-
- file = gzopen(in, "rb");
- if (file == NULL) {
- fprintf(stderr, "gzopen error\n");
- }
- strcpy((char*)uncompr, "garbage");
-
- uncomprLen = gzread(file, uncompr, (unsigned)uncomprLen);
- if (uncomprLen != len) {
- fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad gzread: %s\n", (char*)uncompr);
- exit(1);
- } else {
- printf("gzread(): %s\n", (char *)uncompr);
- }
-
- pos = gzseek(file, -8L, SEEK_CUR);
- if (pos != 6 || gztell(file) != pos) {
- fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
- (long)pos, (long)gztell(file));
- exit(1);
- }
-
- if (gzgetc(file) != ' ') {
- fprintf(stderr, "gzgetc error\n");
- exit(1);
- }
-
- gzgets(file, (char*)uncompr, uncomprLen);
- uncomprLen = strlen((char*)uncompr);
- if (uncomprLen != 6) { /* "hello!" */
- fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (strcmp((char*)uncompr, hello+7)) {
- fprintf(stderr, "bad gzgets after gzseek\n");
- exit(1);
- } else {
- printf("gzgets() after gzseek: %s\n", (char *)uncompr);
- }
-
- gzclose(file);
-}
-
-/* ===========================================================================
- * Test deflate() with small buffers
- */
-void test_deflate(compr, comprLen)
- Byte *compr;
- uLong comprLen;
-{
- z_stream c_stream; /* compression stream */
- int err;
- int len = strlen(hello)+1;
-
- c_stream.zalloc = (alloc_func)0;
- c_stream.zfree = (free_func)0;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_in = (Bytef*)hello;
- c_stream.next_out = compr;
-
- while (c_stream.total_in != (uLong)len && c_stream.total_out < comprLen) {
- c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
- }
- /* Finish the stream, still forcing small buffers: */
- for (;;) {
- c_stream.avail_out = 1;
- err = deflate(&c_stream, Z_FINISH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "deflate");
- }
-
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with small buffers
- */
-void test_inflate(compr, comprLen, uncompr, uncomprLen)
- Byte *compr, *uncompr;
- uLong comprLen, uncomprLen;
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = (alloc_func)0;
- d_stream.zfree = (free_func)0;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = 0;
- d_stream.next_out = uncompr;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
- d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "inflate");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad inflate\n");
- exit(1);
- } else {
- printf("inflate(): %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Test deflate() with large buffers and dynamic change of compression level
- */
-void test_large_deflate(compr, comprLen, uncompr, uncomprLen)
- Byte *compr, *uncompr;
- uLong comprLen, uncomprLen;
-{
- z_stream c_stream; /* compression stream */
- int err;
-
- c_stream.zalloc = (alloc_func)0;
- c_stream.zfree = (free_func)0;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_BEST_SPEED);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_out = compr;
- c_stream.avail_out = (uInt)comprLen;
-
- /* At this point, uncompr is still mostly zeroes, so it should compress
- * very well:
- */
- c_stream.next_in = uncompr;
- c_stream.avail_in = (uInt)uncomprLen;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
- if (c_stream.avail_in != 0) {
- fprintf(stderr, "deflate not greedy\n");
- exit(1);
- }
-
- /* Feed in already compressed data and switch to no compression: */
- deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);
- c_stream.next_in = compr;
- c_stream.avail_in = (uInt)comprLen/2;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
-
- /* Switch back to compressing mode: */
- deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED);
- c_stream.next_in = uncompr;
- c_stream.avail_in = (uInt)uncomprLen;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "deflate should report Z_STREAM_END\n");
- exit(1);
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with large buffers
- */
-void test_large_inflate(compr, comprLen, uncompr, uncomprLen)
- Byte *compr, *uncompr;
- uLong comprLen, uncomprLen;
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = (alloc_func)0;
- d_stream.zfree = (free_func)0;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = (uInt)comprLen;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- for (;;) {
- d_stream.next_out = uncompr; /* discard the output */
- d_stream.avail_out = (uInt)uncomprLen;
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "large inflate");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (d_stream.total_out != 2*uncomprLen + comprLen/2) {
- fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out);
- exit(1);
- } else {
- printf("large_inflate(): OK\n");
- }
-}
-
-/* ===========================================================================
- * Test deflate() with full flush
- */
-void test_flush(compr, comprLen)
- Byte *compr;
- uLong *comprLen;
-{
- z_stream c_stream; /* compression stream */
- int err;
- int len = strlen(hello)+1;
-
- c_stream.zalloc = (alloc_func)0;
- c_stream.zfree = (free_func)0;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_in = (Bytef*)hello;
- c_stream.next_out = compr;
- c_stream.avail_in = 3;
- c_stream.avail_out = (uInt)*comprLen;
- err = deflate(&c_stream, Z_FULL_FLUSH);
- CHECK_ERR(err, "deflate");
-
- compr[3]++; /* force an error in first compressed block */
- c_stream.avail_in = len - 3;
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- CHECK_ERR(err, "deflate");
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-
- *comprLen = c_stream.total_out;
-}
-
-/* ===========================================================================
- * Test inflateSync()
- */
-void test_sync(compr, comprLen, uncompr, uncomprLen)
- Byte *compr, *uncompr;
- uLong comprLen, uncomprLen;
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = (alloc_func)0;
- d_stream.zfree = (free_func)0;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = 2; /* just read the zlib header */
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- d_stream.next_out = uncompr;
- d_stream.avail_out = (uInt)uncomprLen;
-
- inflate(&d_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "inflate");
-
- d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
- err = inflateSync(&d_stream); /* but skip the damaged part */
- CHECK_ERR(err, "inflateSync");
-
- err = inflate(&d_stream, Z_FINISH);
- if (err != Z_DATA_ERROR) {
- fprintf(stderr, "inflate should report DATA_ERROR\n");
- /* Because of incorrect adler32 */
- exit(1);
- }
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- printf("after inflateSync(): hel%s\n", (char *)uncompr);
-}
-
-/* ===========================================================================
- * Test deflate() with preset dictionary
- */
-void test_dict_deflate(compr, comprLen)
- Byte *compr;
- uLong comprLen;
-{
- z_stream c_stream; /* compression stream */
- int err;
-
- c_stream.zalloc = (alloc_func)0;
- c_stream.zfree = (free_func)0;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_BEST_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- err = deflateSetDictionary(&c_stream,
- (const Bytef*)dictionary, sizeof(dictionary));
- CHECK_ERR(err, "deflateSetDictionary");
-
- dictId = c_stream.adler;
- c_stream.next_out = compr;
- c_stream.avail_out = (uInt)comprLen;
-
- c_stream.next_in = (Bytef*)hello;
- c_stream.avail_in = (uInt)strlen(hello)+1;
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "deflate should report Z_STREAM_END\n");
- exit(1);
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with a preset dictionary
- */
-void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
- Byte *compr, *uncompr;
- uLong comprLen, uncomprLen;
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = (alloc_func)0;
- d_stream.zfree = (free_func)0;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = (uInt)comprLen;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- d_stream.next_out = uncompr;
- d_stream.avail_out = (uInt)uncomprLen;
-
- for (;;) {
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- if (err == Z_NEED_DICT) {
- if (d_stream.adler != dictId) {
- fprintf(stderr, "unexpected dictionary");
- exit(1);
- }
- err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
- sizeof(dictionary));
- }
- CHECK_ERR(err, "inflate with dict");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad inflate with dict\n");
- exit(1);
- } else {
- printf("inflate with dictionary: %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Usage: example [output.gz [input.gz]]
- */
-
-int main(argc, argv)
- int argc;
- char *argv[];
-{
- Byte *compr, *uncompr;
- uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
- uLong uncomprLen = comprLen;
- static const char* myVersion = ZLIB_VERSION;
-
- if (zlibVersion()[0] != myVersion[0]) {
- fprintf(stderr, "incompatible zlib version\n");
- exit(1);
-
- } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) {
- fprintf(stderr, "warning: different zlib version\n");
- }
-
- compr = (Byte*)calloc((uInt)comprLen, 1);
- uncompr = (Byte*)calloc((uInt)uncomprLen, 1);
- /* compr and uncompr are cleared to avoid reading uninitialized
- * data and to ensure that uncompr compresses well.
- */
- if (compr == Z_NULL || uncompr == Z_NULL) {
- printf("out of memory\n");
- exit(1);
- }
- test_compress(compr, comprLen, uncompr, uncomprLen);
-
- test_gzio((argc > 1 ? argv[1] : TESTFILE),
- (argc > 2 ? argv[2] : TESTFILE),
- uncompr, (int)uncomprLen);
-
- test_deflate(compr, comprLen);
- test_inflate(compr, comprLen, uncompr, uncomprLen);
-
- test_large_deflate(compr, comprLen, uncompr, uncomprLen);
- test_large_inflate(compr, comprLen, uncompr, uncomprLen);
-
- test_flush(compr, &comprLen);
- test_sync(compr, comprLen, uncompr, uncomprLen);
- comprLen = uncomprLen;
-
- test_dict_deflate(compr, comprLen);
- test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
-
- exit(0);
- return 0; /* to avoid warning */
-}
diff --git a/zlib/infblock.c b/zlib/infblock.c
deleted file mode 100644
index dd7a6d40a..000000000
--- a/zlib/infblock.c
+++ /dev/null
@@ -1,403 +0,0 @@
-/* infblock.c -- interpret and process block types to last block
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-#include "inftrees.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-struct inflate_codes_state {int dummy;}; /* for buggy compilers */
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-/* Table for deflate from PKZIP's appnote.txt. */
-local const uInt border[] = { /* Order of the bit length code lengths */
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-/*
- Notes beyond the 1.93a appnote.txt:
-
- 1. Distance pointers never point before the beginning of the output
- stream.
- 2. Distance pointers can point back across blocks, up to 32k away.
- 3. There is an implied maximum of 7 bits for the bit length table and
- 15 bits for the actual data.
- 4. If only one code exists, then it is encoded using one bit. (Zero
- would be more efficient, but perhaps a little confusing.) If two
- codes exist, they are coded using one bit each (0 and 1).
- 5. There is no way of sending zero distance codes--a dummy must be
- sent if there are none. (History: a pre 2.0 version of PKZIP would
- store blocks with no distance codes, but this was discovered to be
- too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
- zero distance codes, which is sent as one code of zero bits in
- length.
- 6. There are up to 286 literal/length codes. Code 256 represents the
- end-of-block. Note however that the static length tree defines
- 288 codes just to fill out the Huffman codes. Codes 286 and 287
- cannot be used though, since there is no length base or extra bits
- defined for them. Similarily, there are up to 30 distance codes.
- However, static trees define 32 codes (all 5 bits) to fill out the
- Huffman codes, but the last two had better not show up in the data.
- 7. Unzip can check dynamic Huffman blocks for complete code sets.
- The exception is that a single code would not be complete (see #4).
- 8. The five bits following the block type is really the number of
- literal codes sent minus 257.
- 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
- (1+6+6). Therefore, to output three times the length, you output
- three codes (1+1+1), whereas to output four times the same length,
- you only need two codes (1+3). Hmm.
- 10. In the tree reconstruction algorithm, Code = Code + Increment
- only if BitLength(i) is not zero. (Pretty obvious.)
- 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
- 12. Note: length code 284 can represent 227-258, but length code 285
- really is 258. The last length deserves its own, short code
- since it gets used a lot in very redundant files. The length
- 258 is special since 258 - 3 (the min match length) is 255.
- 13. The literal/length and distance code bit lengths are read as a
- single stream of lengths. It is possible (and advantageous) for
- a repeat code (16, 17, or 18) to go across the boundary between
- the two sets of lengths.
- */
-
-
-void inflate_blocks_reset(s, z, c)
-inflate_blocks_statef *s;
-z_streamp z;
-uLongf *c;
-{
- if (c != Z_NULL)
- *c = s->check;
- if (s->mode == BTREE || s->mode == DTREE)
- ZFREE(z, s->sub.trees.blens);
- if (s->mode == CODES)
- inflate_codes_free(s->sub.decode.codes, z);
- s->mode = TYPE;
- s->bitk = 0;
- s->bitb = 0;
- s->read = s->write = s->window;
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
- Tracev((stderr, "inflate: blocks reset\n"));
-}
-
-
-inflate_blocks_statef *inflate_blocks_new(z, c, w)
-z_streamp z;
-check_func c;
-uInt w;
-{
- inflate_blocks_statef *s;
-
- if ((s = (inflate_blocks_statef *)ZALLOC
- (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
- return s;
- if ((s->hufts =
- (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
- {
- ZFREE(z, s);
- return Z_NULL;
- }
- if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
- {
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- return Z_NULL;
- }
- s->end = s->window + w;
- s->checkfn = c;
- s->mode = TYPE;
- Tracev((stderr, "inflate: blocks allocated\n"));
- inflate_blocks_reset(s, z, Z_NULL);
- return s;
-}
-
-
-int inflate_blocks(s, z, r)
-inflate_blocks_statef *s;
-z_streamp z;
-int r;
-{
- uInt t; /* temporary storage */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
-
- /* copy input/output information to locals (UPDATE macro restores) */
- LOAD
-
- /* process input based on current state */
- while (1) switch (s->mode)
- {
- case TYPE:
- NEEDBITS(3)
- t = (uInt)b & 7;
- s->last = t & 1;
- switch (t >> 1)
- {
- case 0: /* stored */
- Tracev((stderr, "inflate: stored block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- t = k & 7; /* go to byte boundary */
- DUMPBITS(t)
- s->mode = LENS; /* get length of stored block */
- break;
- case 1: /* fixed */
- Tracev((stderr, "inflate: fixed codes block%s\n",
- s->last ? " (last)" : ""));
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
-
- inflate_trees_fixed(&bl, &bd, &tl, &td, z);
- s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
- if (s->sub.decode.codes == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- }
- DUMPBITS(3)
- s->mode = CODES;
- break;
- case 2: /* dynamic */
- Tracev((stderr, "inflate: dynamic codes block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- s->mode = TABLE;
- break;
- case 3: /* illegal */
- DUMPBITS(3)
- s->mode = BAD;
- z->msg = (char*)"invalid block type";
- r = Z_DATA_ERROR;
- LEAVE
- }
- break;
- case LENS:
- NEEDBITS(32)
- if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
- {
- s->mode = BAD;
- z->msg = (char*)"invalid stored block lengths";
- r = Z_DATA_ERROR;
- LEAVE
- }
- s->sub.left = (uInt)b & 0xffff;
- b = k = 0; /* dump bits */
- Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
- s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
- break;
- case STORED:
- if (n == 0)
- LEAVE
- NEEDOUT
- t = s->sub.left;
- if (t > n) t = n;
- if (t > m) t = m;
- zmemcpy(q, p, t);
- p += t; n -= t;
- q += t; m -= t;
- if ((s->sub.left -= t) != 0)
- break;
- Tracev((stderr, "inflate: stored end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- s->mode = s->last ? DRY : TYPE;
- break;
- case TABLE:
- NEEDBITS(14)
- s->sub.trees.table = t = (uInt)b & 0x3fff;
-#ifndef PKZIP_BUG_WORKAROUND
- if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
- {
- s->mode = BAD;
- z->msg = (char*)"too many length or distance symbols";
- r = Z_DATA_ERROR;
- LEAVE
- }
-#endif
- t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
- if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- DUMPBITS(14)
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: table sizes ok\n"));
- s->mode = BTREE;
- case BTREE:
- while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
- {
- NEEDBITS(3)
- s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
- DUMPBITS(3)
- }
- while (s->sub.trees.index < 19)
- s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
- s->sub.trees.bb = 7;
- t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
- &s->sub.trees.tb, s->hufts, z);
- if (t != Z_OK)
- {
- r = t;
- if (r == Z_DATA_ERROR)
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- }
- LEAVE
- }
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: bits tree ok\n"));
- s->mode = DTREE;
- case DTREE:
- while (t = s->sub.trees.table,
- s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
- {
- inflate_huft *h;
- uInt i, j, c;
-
- t = s->sub.trees.bb;
- NEEDBITS(t)
- h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
- t = h->bits;
- c = h->base;
- if (c < 16)
- {
- DUMPBITS(t)
- s->sub.trees.blens[s->sub.trees.index++] = c;
- }
- else /* c == 16..18 */
- {
- i = c == 18 ? 7 : c - 14;
- j = c == 18 ? 11 : 3;
- NEEDBITS(t + i)
- DUMPBITS(t)
- j += (uInt)b & inflate_mask[i];
- DUMPBITS(i)
- i = s->sub.trees.index;
- t = s->sub.trees.table;
- if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
- (c == 16 && i < 1))
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- z->msg = (char*)"invalid bit length repeat";
- r = Z_DATA_ERROR;
- LEAVE
- }
- c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
- do {
- s->sub.trees.blens[i++] = c;
- } while (--j);
- s->sub.trees.index = i;
- }
- }
- s->sub.trees.tb = Z_NULL;
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
- inflate_codes_statef *c;
-
- bl = 9; /* must be <= 9 for lookahead assumptions */
- bd = 6; /* must be <= 9 for lookahead assumptions */
- t = s->sub.trees.table;
- t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
- s->sub.trees.blens, &bl, &bd, &tl, &td,
- s->hufts, z);
- if (t != Z_OK)
- {
- if (t == (uInt)Z_DATA_ERROR)
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = BAD;
- }
- r = t;
- LEAVE
- }
- Tracev((stderr, "inflate: trees ok\n"));
- if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- s->sub.decode.codes = c;
- }
- ZFREE(z, s->sub.trees.blens);
- s->mode = CODES;
- case CODES:
- UPDATE
- if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
- return inflate_flush(s, z, r);
- r = Z_OK;
- inflate_codes_free(s->sub.decode.codes, z);
- LOAD
- Tracev((stderr, "inflate: codes end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- if (!s->last)
- {
- s->mode = TYPE;
- break;
- }
- s->mode = DRY;
- case DRY:
- FLUSH
- if (s->read != s->write)
- LEAVE
- s->mode = DONE;
- case DONE:
- r = Z_STREAM_END;
- LEAVE
- case BAD:
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-}
-
-
-int inflate_blocks_free(s, z)
-inflate_blocks_statef *s;
-z_streamp z;
-{
- inflate_blocks_reset(s, z, Z_NULL);
- ZFREE(z, s->window);
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- Tracev((stderr, "inflate: blocks freed\n"));
- return Z_OK;
-}
-
-
-void inflate_set_dictionary(s, d, n)
-inflate_blocks_statef *s;
-const Bytef *d;
-uInt n;
-{
- zmemcpy(s->window, d, n);
- s->read = s->write = s->window + n;
-}
-
-
-/* Returns true if inflate is currently at the end of a block generated
- * by Z_SYNC_FLUSH or Z_FULL_FLUSH.
- * IN assertion: s != Z_NULL
- */
-int inflate_blocks_sync_point(s)
-inflate_blocks_statef *s;
-{
- return s->mode == LENS;
-}
diff --git a/zlib/infblock.h b/zlib/infblock.h
deleted file mode 100644
index 173b2267a..000000000
--- a/zlib/infblock.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* infblock.h -- header to use infblock.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-struct inflate_blocks_state;
-typedef struct inflate_blocks_state FAR inflate_blocks_statef;
-
-extern inflate_blocks_statef * inflate_blocks_new OF((
- z_streamp z,
- check_func c, /* check function */
- uInt w)); /* window size */
-
-extern int inflate_blocks OF((
- inflate_blocks_statef *,
- z_streamp ,
- int)); /* initial return code */
-
-extern void inflate_blocks_reset OF((
- inflate_blocks_statef *,
- z_streamp ,
- uLongf *)); /* check value on output */
-
-extern int inflate_blocks_free OF((
- inflate_blocks_statef *,
- z_streamp));
-
-extern void inflate_set_dictionary OF((
- inflate_blocks_statef *s,
- const Bytef *d, /* dictionary */
- uInt n)); /* dictionary length */
-
-extern int inflate_blocks_sync_point OF((
- inflate_blocks_statef *s));
diff --git a/zlib/infcodes.c b/zlib/infcodes.c
deleted file mode 100644
index 9abe5412b..000000000
--- a/zlib/infcodes.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* infcodes.c -- process literals and length/distance pairs
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "infblock.h"
-#include "infcodes.h"
-#include "infutil.h"
-#include "inffast.h"
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
- START, /* x: set up for LEN */
- LEN, /* i: get length/literal/eob next */
- LENEXT, /* i: getting length extra (have base) */
- DIST, /* i: get distance next */
- DISTEXT, /* i: getting distance extra */
- COPY, /* o: copying bytes in window, waiting for space */
- LIT, /* o: got literal, waiting for output space */
- WASH, /* o: got eob, possibly still output waiting */
- END, /* x: got eob and all data flushed */
- BADCODE} /* x: got error */
-inflate_codes_mode;
-
-/* inflate codes private state */
-struct inflate_codes_state {
-
- /* mode */
- inflate_codes_mode mode; /* current inflate_codes mode */
-
- /* mode dependent information */
- uInt len;
- union {
- struct {
- inflate_huft *tree; /* pointer into tree */
- uInt need; /* bits needed */
- } code; /* if LEN or DIST, where in tree */
- uInt lit; /* if LIT, literal */
- struct {
- uInt get; /* bits to get for extra */
- uInt dist; /* distance back to copy from */
- } copy; /* if EXT or COPY, where and how much */
- } sub; /* submode */
-
- /* mode independent information */
- Byte lbits; /* ltree bits decoded per branch */
- Byte dbits; /* dtree bits decoder per branch */
- inflate_huft *ltree; /* literal/length/eob tree */
- inflate_huft *dtree; /* distance tree */
-
-};
-
-
-inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
-uInt bl, bd;
-inflate_huft *tl;
-inflate_huft *td; /* need separate declaration for Borland C++ */
-z_streamp z;
-{
- inflate_codes_statef *c;
-
- if ((c = (inflate_codes_statef *)
- ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
- {
- c->mode = START;
- c->lbits = (Byte)bl;
- c->dbits = (Byte)bd;
- c->ltree = tl;
- c->dtree = td;
- Tracev((stderr, "inflate: codes new\n"));
- }
- return c;
-}
-
-
-int inflate_codes(s, z, r)
-inflate_blocks_statef *s;
-z_streamp z;
-int r;
-{
- uInt j; /* temporary storage */
- inflate_huft *t; /* temporary pointer */
- uInt e; /* extra bits or operation */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
- Bytef *f; /* pointer to copy strings from */
- inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
-
- /* copy input/output information to locals (UPDATE macro restores) */
- LOAD
-
- /* process input and output based on current state */
- while (1) switch (c->mode)
- { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
- case START: /* x: set up for LEN */
-#ifndef SLOW
- if (m >= 258 && n >= 10)
- {
- UPDATE
- r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
- LOAD
- if (r != Z_OK)
- {
- c->mode = r == Z_STREAM_END ? WASH : BADCODE;
- break;
- }
- }
-#endif /* !SLOW */
- c->sub.code.need = c->lbits;
- c->sub.code.tree = c->ltree;
- c->mode = LEN;
- case LEN: /* i: get length/literal/eob next */
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e == 0) /* literal */
- {
- c->sub.lit = t->base;
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: literal '%c'\n" :
- "inflate: literal 0x%02x\n", t->base));
- c->mode = LIT;
- break;
- }
- if (e & 16) /* length */
- {
- c->sub.copy.get = e & 15;
- c->len = t->base;
- c->mode = LENEXT;
- break;
- }
- if ((e & 64) == 0) /* next table */
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- if (e & 32) /* end of block */
- {
- Tracevv((stderr, "inflate: end of block\n"));
- c->mode = WASH;
- break;
- }
- c->mode = BADCODE; /* invalid code */
- z->msg = (char*)"invalid literal/length code";
- r = Z_DATA_ERROR;
- LEAVE
- case LENEXT: /* i: getting length extra (have base) */
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->len += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- c->sub.code.need = c->dbits;
- c->sub.code.tree = c->dtree;
- Tracevv((stderr, "inflate: length %u\n", c->len));
- c->mode = DIST;
- case DIST: /* i: get distance next */
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e & 16) /* distance */
- {
- c->sub.copy.get = e & 15;
- c->sub.copy.dist = t->base;
- c->mode = DISTEXT;
- break;
- }
- if ((e & 64) == 0) /* next table */
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- c->mode = BADCODE; /* invalid code */
- z->msg = (char*)"invalid distance code";
- r = Z_DATA_ERROR;
- LEAVE
- case DISTEXT: /* i: getting distance extra */
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->sub.copy.dist += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
- c->mode = COPY;
- case COPY: /* o: copying bytes in window, waiting for space */
- f = q - c->sub.copy.dist;
- while (f < s->window) /* modulo window size-"while" instead */
- f += s->end - s->window; /* of "if" handles invalid distances */
- while (c->len)
- {
- NEEDOUT
- OUTBYTE(*f++)
- if (f == s->end)
- f = s->window;
- c->len--;
- }
- c->mode = START;
- break;
- case LIT: /* o: got literal, waiting for output space */
- NEEDOUT
- OUTBYTE(c->sub.lit)
- c->mode = START;
- break;
- case WASH: /* o: got eob, possibly more output */
- if (k > 7) /* return unused byte, if any */
- {
- Assert(k < 16, "inflate_codes grabbed too many bytes")
- k -= 8;
- n++;
- p--; /* can always return one */
- }
- FLUSH
- if (s->read != s->write)
- LEAVE
- c->mode = END;
- case END:
- r = Z_STREAM_END;
- LEAVE
- case BADCODE: /* x: got error */
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-#ifdef NEED_DUMMY_RETURN
- return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
-#endif
-}
-
-
-void inflate_codes_free(c, z)
-inflate_codes_statef *c;
-z_streamp z;
-{
- ZFREE(z, c);
- Tracev((stderr, "inflate: codes free\n"));
-}
diff --git a/zlib/infcodes.h b/zlib/infcodes.h
deleted file mode 100644
index 46821a02b..000000000
--- a/zlib/infcodes.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* infcodes.h -- header to use infcodes.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-struct inflate_codes_state;
-typedef struct inflate_codes_state FAR inflate_codes_statef;
-
-extern inflate_codes_statef *inflate_codes_new OF((
- uInt, uInt,
- inflate_huft *, inflate_huft *,
- z_streamp ));
-
-extern int inflate_codes OF((
- inflate_blocks_statef *,
- z_streamp ,
- int));
-
-extern void inflate_codes_free OF((
- inflate_codes_statef *,
- z_streamp ));
-
diff --git a/zlib/inffast.c b/zlib/inffast.c
deleted file mode 100644
index aa7f1d4d2..000000000
--- a/zlib/inffast.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* inffast.c -- process literals and length/distance pairs fast
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "infblock.h"
-#include "infcodes.h"
-#include "infutil.h"
-#include "inffast.h"
-
-struct inflate_codes_state {int dummy;}; /* for buggy compilers */
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-/* macros for bit input with no checking and for returning unused bytes */
-#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
-
-/* Called with number of bytes left to write in window at least 258
- (the maximum string length) and number of input bytes available
- at least ten. The ten bytes are six bytes for the longest length/
- distance pair plus four bytes for overloading the bit buffer. */
-
-int inflate_fast(bl, bd, tl, td, s, z)
-uInt bl, bd;
-inflate_huft *tl;
-inflate_huft *td; /* need separate declaration for Borland C++ */
-inflate_blocks_statef *s;
-z_streamp z;
-{
- inflate_huft *t; /* temporary pointer */
- uInt e; /* extra bits or operation */
- uLong b; /* bit buffer */
- uInt k; /* bits in bit buffer */
- Bytef *p; /* input data pointer */
- uInt n; /* bytes available there */
- Bytef *q; /* output window write pointer */
- uInt m; /* bytes to end of window or read pointer */
- uInt ml; /* mask for literal/length tree */
- uInt md; /* mask for distance tree */
- uInt c; /* bytes to copy */
- uInt d; /* distance back to copy from */
- Bytef *r; /* copy source pointer */
-
- /* load input, output, bit values */
- LOAD
-
- /* initialize masks */
- ml = inflate_mask[bl];
- md = inflate_mask[bd];
-
- /* do until not enough input or output space for fast loop */
- do { /* assume called with m >= 258 && n >= 10 */
- /* get literal/length code */
- GRABBITS(20) /* max bits for literal/length code */
- if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
- {
- DUMPBITS(t->bits)
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: * literal '%c'\n" :
- "inflate: * literal 0x%02x\n", t->base));
- *q++ = (Byte)t->base;
- m--;
- continue;
- }
- do {
- DUMPBITS(t->bits)
- if (e & 16)
- {
- /* get extra bits for length */
- e &= 15;
- c = t->base + ((uInt)b & inflate_mask[e]);
- DUMPBITS(e)
- Tracevv((stderr, "inflate: * length %u\n", c));
-
- /* decode distance base of block to copy */
- GRABBITS(15); /* max bits for distance code */
- e = (t = td + ((uInt)b & md))->exop;
- do {
- DUMPBITS(t->bits)
- if (e & 16)
- {
- /* get extra bits to add to distance base */
- e &= 15;
- GRABBITS(e) /* get extra bits (up to 13) */
- d = t->base + ((uInt)b & inflate_mask[e]);
- DUMPBITS(e)
- Tracevv((stderr, "inflate: * distance %u\n", d));
-
- /* do the copy */
- m -= c;
- r = q - d;
- if (r < s->window) /* wrap if needed */
- {
- do {
- r += s->end - s->window; /* force pointer in window */
- } while (r < s->window); /* covers invalid distances */
- e = s->end - r;
- if (c > e)
- {
- c -= e; /* wrapped copy */
- do {
- *q++ = *r++;
- } while (--e);
- r = s->window;
- do {
- *q++ = *r++;
- } while (--c);
- }
- else /* normal copy */
- {
- *q++ = *r++; c--;
- *q++ = *r++; c--;
- do {
- *q++ = *r++;
- } while (--c);
- }
- }
- else /* normal copy */
- {
- *q++ = *r++; c--;
- *q++ = *r++; c--;
- do {
- *q++ = *r++;
- } while (--c);
- }
- break;
- }
- else if ((e & 64) == 0)
- {
- t += t->base;
- e = (t += ((uInt)b & inflate_mask[e]))->exop;
- }
- else
- {
- z->msg = (char*)"invalid distance code";
- UNGRAB
- UPDATE
- return Z_DATA_ERROR;
- }
- } while (1);
- break;
- }
- if ((e & 64) == 0)
- {
- t += t->base;
- if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
- {
- DUMPBITS(t->bits)
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: * literal '%c'\n" :
- "inflate: * literal 0x%02x\n", t->base));
- *q++ = (Byte)t->base;
- m--;
- break;
- }
- }
- else if (e & 32)
- {
- Tracevv((stderr, "inflate: * end of block\n"));
- UNGRAB
- UPDATE
- return Z_STREAM_END;
- }
- else
- {
- z->msg = (char*)"invalid literal/length code";
- UNGRAB
- UPDATE
- return Z_DATA_ERROR;
- }
- } while (1);
- } while (m >= 258 && n >= 10);
-
- /* not enough input or output--restore pointers and return */
- UNGRAB
- UPDATE
- return Z_OK;
-}
diff --git a/zlib/inffast.h b/zlib/inffast.h
deleted file mode 100644
index a31a4bbb0..000000000
--- a/zlib/inffast.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* inffast.h -- header to use inffast.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-extern int inflate_fast OF((
- uInt,
- uInt,
- inflate_huft *,
- inflate_huft *,
- inflate_blocks_statef *,
- z_streamp ));
diff --git a/zlib/inffixed.h b/zlib/inffixed.h
deleted file mode 100644
index 77f7e7631..000000000
--- a/zlib/inffixed.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* inffixed.h -- table for decoding fixed codes
- * Generated automatically by the maketree.c program
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-local uInt fixed_bl = 9;
-local uInt fixed_bd = 5;
-local inflate_huft fixed_tl[] = {
- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
- };
-local inflate_huft fixed_td[] = {
- {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
- {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
- {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
- {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
- {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
- {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
- {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
- {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
- };
diff --git a/zlib/inflate.c b/zlib/inflate.c
deleted file mode 100644
index dfb2e867d..000000000
--- a/zlib/inflate.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/* inflate.c -- zlib interface to inflate modules
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-
-struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
-
-typedef enum {
- METHOD, /* waiting for method byte */
- FLAG, /* waiting for flag byte */
- DICT4, /* four dictionary check bytes to go */
- DICT3, /* three dictionary check bytes to go */
- DICT2, /* two dictionary check bytes to go */
- DICT1, /* one dictionary check byte to go */
- DICT0, /* waiting for inflateSetDictionary */
- BLOCKS, /* decompressing blocks */
- CHECK4, /* four check bytes to go */
- CHECK3, /* three check bytes to go */
- CHECK2, /* two check bytes to go */
- CHECK1, /* one check byte to go */
- DONE, /* finished check, done */
- BAD} /* got an error--stay here */
-inflate_mode;
-
-/* inflate private state */
-struct internal_state {
-
- /* mode */
- inflate_mode mode; /* current inflate mode */
-
- /* mode dependent information */
- union {
- uInt method; /* if FLAGS, method byte */
- struct {
- uLong was; /* computed check value */
- uLong need; /* stream check value */
- } check; /* if CHECK, check values to compare */
- uInt marker; /* if BAD, inflateSync's marker bytes count */
- } sub; /* submode */
-
- /* mode independent information */
- int nowrap; /* flag for no wrapper */
- uInt wbits; /* log2(window size) (8..15, defaults to 15) */
- inflate_blocks_statef
- *blocks; /* current inflate_blocks state */
-
-};
-
-
-int ZEXPORT inflateReset(z)
-z_streamp z;
-{
- if (z == Z_NULL || z->state == Z_NULL)
- return Z_STREAM_ERROR;
- z->total_in = z->total_out = 0;
- z->msg = Z_NULL;
- z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
- inflate_blocks_reset(z->state->blocks, z, Z_NULL);
- Tracev((stderr, "inflate: reset\n"));
- return Z_OK;
-}
-
-
-int ZEXPORT inflateEnd(z)
-z_streamp z;
-{
- if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
- return Z_STREAM_ERROR;
- if (z->state->blocks != Z_NULL)
- inflate_blocks_free(z->state->blocks, z);
- ZFREE(z, z->state);
- z->state = Z_NULL;
- Tracev((stderr, "inflate: end\n"));
- return Z_OK;
-}
-
-
-int ZEXPORT inflateInit2_(z, w, version, stream_size)
-z_streamp z;
-int w;
-const char *version;
-int stream_size;
-{
- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
- stream_size != sizeof(z_stream))
- return Z_VERSION_ERROR;
-
- /* initialize state */
- if (z == Z_NULL)
- return Z_STREAM_ERROR;
- z->msg = Z_NULL;
- if (z->zalloc == Z_NULL)
- {
- z->zalloc = zcalloc;
- z->opaque = (voidpf)0;
- }
- if (z->zfree == Z_NULL) z->zfree = zcfree;
- if ((z->state = (struct internal_state FAR *)
- ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
- return Z_MEM_ERROR;
- z->state->blocks = Z_NULL;
-
- /* handle undocumented nowrap option (no zlib header or check) */
- z->state->nowrap = 0;
- if (w < 0)
- {
- w = - w;
- z->state->nowrap = 1;
- }
-
- /* set window size */
- if (w < 8 || w > 15)
- {
- inflateEnd(z);
- return Z_STREAM_ERROR;
- }
- z->state->wbits = (uInt)w;
-
- /* create inflate_blocks state */
- if ((z->state->blocks =
- inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
- == Z_NULL)
- {
- inflateEnd(z);
- return Z_MEM_ERROR;
- }
- Tracev((stderr, "inflate: allocated\n"));
-
- /* reset state */
- inflateReset(z);
- return Z_OK;
-}
-
-
-int ZEXPORT inflateInit_(z, version, stream_size)
-z_streamp z;
-const char *version;
-int stream_size;
-{
- return inflateInit2_(z, DEF_WBITS, version, stream_size);
-}
-
-
-#define NEEDBYTE {if(z->avail_in==0)return r;r=f;}
-#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
-
-int ZEXPORT inflate(z, f)
-z_streamp z;
-int f;
-{
- int r;
- uInt b;
-
- if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
- return Z_STREAM_ERROR;
- f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
- r = Z_BUF_ERROR;
- while (1) switch (z->state->mode)
- {
- case METHOD:
- NEEDBYTE
- if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
- {
- z->state->mode = BAD;
- z->msg = (char*)"unknown compression method";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
- {
- z->state->mode = BAD;
- z->msg = (char*)"invalid window size";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- z->state->mode = FLAG;
- case FLAG:
- NEEDBYTE
- b = NEXTBYTE;
- if (((z->state->sub.method << 8) + b) % 31)
- {
- z->state->mode = BAD;
- z->msg = (char*)"incorrect header check";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- Tracev((stderr, "inflate: zlib header ok\n"));
- if (!(b & PRESET_DICT))
- {
- z->state->mode = BLOCKS;
- break;
- }
- z->state->mode = DICT4;
- case DICT4:
- NEEDBYTE
- z->state->sub.check.need = (uLong)NEXTBYTE << 24;
- z->state->mode = DICT3;
- case DICT3:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 16;
- z->state->mode = DICT2;
- case DICT2:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 8;
- z->state->mode = DICT1;
- case DICT1:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE;
- z->adler = z->state->sub.check.need;
- z->state->mode = DICT0;
- return Z_NEED_DICT;
- case DICT0:
- z->state->mode = BAD;
- z->msg = (char*)"need dictionary";
- z->state->sub.marker = 0; /* can try inflateSync */
- return Z_STREAM_ERROR;
- case BLOCKS:
- r = inflate_blocks(z->state->blocks, z, r);
- if (r == Z_DATA_ERROR)
- {
- z->state->mode = BAD;
- z->state->sub.marker = 0; /* can try inflateSync */
- break;
- }
- if (r == Z_OK)
- r = f;
- if (r != Z_STREAM_END)
- return r;
- r = f;
- inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
- if (z->state->nowrap)
- {
- z->state->mode = DONE;
- break;
- }
- z->state->mode = CHECK4;
- case CHECK4:
- NEEDBYTE
- z->state->sub.check.need = (uLong)NEXTBYTE << 24;
- z->state->mode = CHECK3;
- case CHECK3:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 16;
- z->state->mode = CHECK2;
- case CHECK2:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE << 8;
- z->state->mode = CHECK1;
- case CHECK1:
- NEEDBYTE
- z->state->sub.check.need += (uLong)NEXTBYTE;
-
- if (z->state->sub.check.was != z->state->sub.check.need)
- {
- z->state->mode = BAD;
- z->msg = (char*)"incorrect data check";
- z->state->sub.marker = 5; /* can't try inflateSync */
- break;
- }
- Tracev((stderr, "inflate: zlib check ok\n"));
- z->state->mode = DONE;
- case DONE:
- return Z_STREAM_END;
- case BAD:
- return Z_DATA_ERROR;
- default:
- return Z_STREAM_ERROR;
- }
-#ifdef NEED_DUMMY_RETURN
- return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
-#endif
-}
-
-
-int ZEXPORT inflateSetDictionary(z, dictionary, dictLength)
-z_streamp z;
-const Bytef *dictionary;
-uInt dictLength;
-{
- uInt length = dictLength;
-
- if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0)
- return Z_STREAM_ERROR;
-
- if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR;
- z->adler = 1L;
-
- if (length >= ((uInt)1<<z->state->wbits))
- {
- length = (1<<z->state->wbits)-1;
- dictionary += dictLength - length;
- }
- inflate_set_dictionary(z->state->blocks, dictionary, length);
- z->state->mode = BLOCKS;
- return Z_OK;
-}
-
-
-int ZEXPORT inflateSync(z)
-z_streamp z;
-{
- uInt n; /* number of bytes to look at */
- Bytef *p; /* pointer to bytes */
- uInt m; /* number of marker bytes found in a row */
- uLong r, w; /* temporaries to save total_in and total_out */
-
- /* set up */
- if (z == Z_NULL || z->state == Z_NULL)
- return Z_STREAM_ERROR;
- if (z->state->mode != BAD)
- {
- z->state->mode = BAD;
- z->state->sub.marker = 0;
- }
- if ((n = z->avail_in) == 0)
- return Z_BUF_ERROR;
- p = z->next_in;
- m = z->state->sub.marker;
-
- /* search */
- while (n && m < 4)
- {
- static const Byte mark[4] = {0, 0, 0xff, 0xff};
- if (*p == mark[m])
- m++;
- else if (*p)
- m = 0;
- else
- m = 4 - m;
- p++, n--;
- }
-
- /* restore */
- z->total_in += p - z->next_in;
- z->next_in = p;
- z->avail_in = n;
- z->state->sub.marker = m;
-
- /* return no joy or set up to restart on a new block */
- if (m != 4)
- return Z_DATA_ERROR;
- r = z->total_in; w = z->total_out;
- inflateReset(z);
- z->total_in = r; z->total_out = w;
- z->state->mode = BLOCKS;
- return Z_OK;
-}
-
-
-/* Returns true if inflate is currently at the end of a block generated
- * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
- * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
- * but removes the length bytes of the resulting empty stored block. When
- * decompressing, PPP checks that at the end of input packet, inflate is
- * waiting for these length bytes.
- */
-int ZEXPORT inflateSyncPoint(z)
-z_streamp z;
-{
- if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
- return Z_STREAM_ERROR;
- return inflate_blocks_sync_point(z->state->blocks);
-}
diff --git a/zlib/inftrees.c b/zlib/inftrees.c
deleted file mode 100644
index 4c32ca30d..000000000
--- a/zlib/inftrees.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-
-#if !defined(BUILDFIXED) && !defined(STDC)
-# define BUILDFIXED /* non ANSI compilers may not accept inffixed.h */
-#endif
-
-const char inflate_copyright[] =
- " inflate 1.1.4 Copyright 1995-2002 Mark Adler ";
-/*
- If you use the zlib library in a product, an acknowledgment is welcome
- in the documentation of your product. If for some reason you cannot
- include such an acknowledgment, I would appreciate that you keep this
- copyright string in the executable of your product.
- */
-struct internal_state {int dummy;}; /* for buggy compilers */
-
-/* simplify the use of the inflate_huft type with some defines */
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-
-local int huft_build OF((
- uIntf *, /* code lengths in bits */
- uInt, /* number of codes */
- uInt, /* number of "simple" codes */
- const uIntf *, /* list of base values for non-simple codes */
- const uIntf *, /* list of extra bits for non-simple codes */
- inflate_huft * FAR*,/* result: starting table */
- uIntf *, /* maximum lookup bits (returns actual) */
- inflate_huft *, /* space for trees */
- uInt *, /* hufts used in space */
- uIntf * )); /* space for values */
-
-/* Tables for deflate from PKZIP's appnote.txt. */
-local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
- /* see note #13 above about 258 */
-local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
-local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
- 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
- 8193, 12289, 16385, 24577};
-local const uInt cpdext[30] = { /* Extra bits for distance codes */
- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
- 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
- 12, 12, 13, 13};
-
-/*
- Huffman code decoding is performed using a multi-level table lookup.
- The fastest way to decode is to simply build a lookup table whose
- size is determined by the longest code. However, the time it takes
- to build this table can also be a factor if the data being decoded
- is not very long. The most common codes are necessarily the
- shortest codes, so those codes dominate the decoding time, and hence
- the speed. The idea is you can have a shorter table that decodes the
- shorter, more probable codes, and then point to subsidiary tables for
- the longer codes. The time it costs to decode the longer codes is
- then traded against the time it takes to make longer tables.
-
- This results of this trade are in the variables lbits and dbits
- below. lbits is the number of bits the first level table for literal/
- length codes can decode in one step, and dbits is the same thing for
- the distance codes. Subsequent tables are also less than or equal to
- those sizes. These values may be adjusted either when all of the
- codes are shorter than that, in which case the longest code length in
- bits is used, or when the shortest code is *longer* than the requested
- table size, in which case the length of the shortest code in bits is
- used.
-
- There are two different values for the two tables, since they code a
- different number of possibilities each. The literal/length table
- codes 286 possible values, or in a flat code, a little over eight
- bits. The distance table codes 30 possible values, or a little less
- than five bits, flat. The optimum values for speed end up being
- about one bit more than those, so lbits is 8+1 and dbits is 5+1.
- The optimum values may differ though from machine to machine, and
- possibly even between compilers. Your mileage may vary.
- */
-
-
-/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
-#define BMAX 15 /* maximum bit length of any code */
-
-local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
-uIntf *b; /* code lengths in bits (all assumed <= BMAX) */
-uInt n; /* number of codes (assumed <= 288) */
-uInt s; /* number of simple-valued codes (0..s-1) */
-const uIntf *d; /* list of base values for non-simple codes */
-const uIntf *e; /* list of extra bits for non-simple codes */
-inflate_huft * FAR *t; /* result: starting table */
-uIntf *m; /* maximum lookup bits, returns actual */
-inflate_huft *hp; /* space for trees */
-uInt *hn; /* hufts used in space */
-uIntf *v; /* working area: values in order of bit length */
-/* Given a list of code lengths and a maximum table size, make a set of
- tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
- if the given code set is incomplete (the tables are still built in this
- case), or Z_DATA_ERROR if the input is invalid. */
-{
-
- uInt a; /* counter for codes of length k */
- uInt c[BMAX+1]; /* bit length count table */
- uInt f; /* i repeats in table every f entries */
- int g; /* maximum code length */
- int h; /* table level */
- register uInt i; /* counter, current code */
- register uInt j; /* counter */
- register int k; /* number of bits in current code */
- int l; /* bits per table (returned in m) */
- uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */
- register uIntf *p; /* pointer into c[], b[], or v[] */
- inflate_huft *q; /* points to current table */
- struct inflate_huft_s r; /* table entry for structure assignment */
- inflate_huft *u[BMAX]; /* table stack */
- register int w; /* bits before this table == (l * h) */
- uInt x[BMAX+1]; /* bit offsets, then code stack */
- uIntf *xp; /* pointer into x */
- int y; /* number of dummy codes added */
- uInt z; /* number of entries in current table */
-
-
- /* Generate counts for each bit length */
- p = c;
-#define C0 *p++ = 0;
-#define C2 C0 C0 C0 C0
-#define C4 C2 C2 C2 C2
- C4 /* clear c[]--assume BMAX+1 is 16 */
- p = b; i = n;
- do {
- c[*p++]++; /* assume all entries <= BMAX */
- } while (--i);
- if (c[0] == n) /* null input--all zero length codes */
- {
- *t = (inflate_huft *)Z_NULL;
- *m = 0;
- return Z_OK;
- }
-
-
- /* Find minimum and maximum length, bound *m by those */
- l = *m;
- for (j = 1; j <= BMAX; j++)
- if (c[j])
- break;
- k = j; /* minimum code length */
- if ((uInt)l < j)
- l = j;
- for (i = BMAX; i; i--)
- if (c[i])
- break;
- g = i; /* maximum code length */
- if ((uInt)l > i)
- l = i;
- *m = l;
-
-
- /* Adjust last length count to fill out codes, if needed */
- for (y = 1 << j; j < i; j++, y <<= 1)
- if ((y -= c[j]) < 0)
- return Z_DATA_ERROR;
- if ((y -= c[i]) < 0)
- return Z_DATA_ERROR;
- c[i] += y;
-
-
- /* Generate starting offsets into the value table for each length */
- x[1] = j = 0;
- p = c + 1; xp = x + 2;
- while (--i) { /* note that i == g from above */
- *xp++ = (j += *p++);
- }
-
-
- /* Make a table of values in order of bit lengths */
- p = b; i = 0;
- do {
- if ((j = *p++) != 0)
- v[x[j]++] = i;
- } while (++i < n);
- n = x[g]; /* set n to length of v */
-
-
- /* Generate the Huffman codes and for each, make the table entries */
- x[0] = i = 0; /* first Huffman code is zero */
- p = v; /* grab values in bit order */
- h = -1; /* no tables yet--level -1 */
- w = -l; /* bits decoded == (l * h) */
- u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */
- q = (inflate_huft *)Z_NULL; /* ditto */
- z = 0; /* ditto */
-
- /* go through the bit lengths (k already is bits in shortest code) */
- for (; k <= g; k++)
- {
- a = c[k];
- while (a--)
- {
- /* here i is the Huffman code of length k bits for value *p */
- /* make tables up to required level */
- while (k > w + l)
- {
- h++;
- w += l; /* previous table always l bits */
-
- /* compute minimum size table less than or equal to l bits */
- z = g - w;
- z = z > (uInt)l ? l : z; /* table size upper limit */
- if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
- { /* too few codes for k-w bit table */
- f -= a + 1; /* deduct codes from patterns left */
- xp = c + k;
- if (j < z)
- while (++j < z) /* try smaller tables up to z bits */
- {
- if ((f <<= 1) <= *++xp)
- break; /* enough codes to use up j bits */
- f -= *xp; /* else deduct codes from patterns */
- }
- }
- z = 1 << j; /* table entries for j-bit table */
-
- /* allocate new table */
- if (*hn + z > MANY) /* (note: doesn't matter for fixed) */
- return Z_DATA_ERROR; /* overflow of MANY */
- u[h] = q = hp + *hn;
- *hn += z;
-
- /* connect to last table, if there is one */
- if (h)
- {
- x[h] = i; /* save pattern for backing up */
- r.bits = (Byte)l; /* bits to dump before this table */
- r.exop = (Byte)j; /* bits in this table */
- j = i >> (w - l);
- r.base = (uInt)(q - u[h-1] - j); /* offset to this table */
- u[h-1][j] = r; /* connect to last table */
- }
- else
- *t = q; /* first table is returned result */
- }
-
- /* set up table entry in r */
- r.bits = (Byte)(k - w);
- if (p >= v + n)
- r.exop = 128 + 64; /* out of values--invalid code */
- else if (*p < s)
- {
- r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */
- r.base = *p++; /* simple code is just the value */
- }
- else
- {
- r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
- r.base = d[*p++ - s];
- }
-
- /* fill code-like entries with r */
- f = 1 << (k - w);
- for (j = i >> w; j < z; j += f)
- q[j] = r;
-
- /* backwards increment the k-bit code i */
- for (j = 1 << (k - 1); i & j; j >>= 1)
- i ^= j;
- i ^= j;
-
- /* backup over finished tables */
- mask = (1 << w) - 1; /* needed on HP, cc -O bug */
- while ((i & mask) != x[h])
- {
- h--; /* don't need to update q */
- w -= l;
- mask = (1 << w) - 1;
- }
- }
- }
-
-
- /* Return Z_BUF_ERROR if we were given an incomplete table */
- return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
-}
-
-
-int inflate_trees_bits(c, bb, tb, hp, z)
-uIntf *c; /* 19 code lengths */
-uIntf *bb; /* bits tree desired/actual depth */
-inflate_huft * FAR *tb; /* bits tree result */
-inflate_huft *hp; /* space for trees */
-z_streamp z; /* for messages */
-{
- int r;
- uInt hn = 0; /* hufts used in space */
- uIntf *v; /* work area for huft_build */
-
- if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
- r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
- tb, bb, hp, &hn, v);
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed dynamic bit lengths tree";
- else if (r == Z_BUF_ERROR || *bb == 0)
- {
- z->msg = (char*)"incomplete dynamic bit lengths tree";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
-}
-
-
-int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
-uInt nl; /* number of literal/length codes */
-uInt nd; /* number of distance codes */
-uIntf *c; /* that many (total) code lengths */
-uIntf *bl; /* literal desired/actual bit depth */
-uIntf *bd; /* distance desired/actual bit depth */
-inflate_huft * FAR *tl; /* literal/length tree result */
-inflate_huft * FAR *td; /* distance tree result */
-inflate_huft *hp; /* space for trees */
-z_streamp z; /* for messages */
-{
- int r;
- uInt hn = 0; /* hufts used in space */
- uIntf *v; /* work area for huft_build */
-
- /* allocate work area */
- if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
-
- /* build literal/length tree */
- r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
- if (r != Z_OK || *bl == 0)
- {
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed literal/length tree";
- else if (r != Z_MEM_ERROR)
- {
- z->msg = (char*)"incomplete literal/length tree";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
- }
-
- /* build distance tree */
- r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
- if (r != Z_OK || (*bd == 0 && nl > 257))
- {
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed distance tree";
- else if (r == Z_BUF_ERROR) {
-#ifdef PKZIP_BUG_WORKAROUND
- r = Z_OK;
- }
-#else
- z->msg = (char*)"incomplete distance tree";
- r = Z_DATA_ERROR;
- }
- else if (r != Z_MEM_ERROR)
- {
- z->msg = (char*)"empty distance tree with lengths";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
-#endif
- }
-
- /* done */
- ZFREE(z, v);
- return Z_OK;
-}
-
-
-/* build fixed tables only once--keep them here */
-#ifdef BUILDFIXED
-local int fixed_built = 0;
-#define FIXEDH 544 /* number of hufts used by fixed tables */
-local inflate_huft fixed_mem[FIXEDH];
-local uInt fixed_bl;
-local uInt fixed_bd;
-local inflate_huft *fixed_tl;
-local inflate_huft *fixed_td;
-#else
-#include "inffixed.h"
-#endif
-
-
-int inflate_trees_fixed(bl, bd, tl, td, z)
-uIntf *bl; /* literal desired/actual bit depth */
-uIntf *bd; /* distance desired/actual bit depth */
-inflate_huft * FAR *tl; /* literal/length tree result */
-inflate_huft * FAR *td; /* distance tree result */
-z_streamp z; /* for memory allocation */
-{
-#ifdef BUILDFIXED
- /* build fixed tables if not already */
- if (!fixed_built)
- {
- int k; /* temporary variable */
- uInt f = 0; /* number of hufts used in fixed_mem */
- uIntf *c; /* length list for huft_build */
- uIntf *v; /* work area for huft_build */
-
- /* allocate memory */
- if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
- if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- {
- ZFREE(z, c);
- return Z_MEM_ERROR;
- }
-
- /* literal table */
- for (k = 0; k < 144; k++)
- c[k] = 8;
- for (; k < 256; k++)
- c[k] = 9;
- for (; k < 280; k++)
- c[k] = 7;
- for (; k < 288; k++)
- c[k] = 8;
- fixed_bl = 9;
- huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl,
- fixed_mem, &f, v);
-
- /* distance table */
- for (k = 0; k < 30; k++)
- c[k] = 5;
- fixed_bd = 5;
- huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd,
- fixed_mem, &f, v);
-
- /* done */
- ZFREE(z, v);
- ZFREE(z, c);
- fixed_built = 1;
- }
-#endif
- *bl = fixed_bl;
- *bd = fixed_bd;
- *tl = fixed_tl;
- *td = fixed_td;
- return Z_OK;
-}
diff --git a/zlib/inftrees.h b/zlib/inftrees.h
deleted file mode 100644
index 04b73b729..000000000
--- a/zlib/inftrees.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* inftrees.h -- header to use inftrees.c
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-/* Huffman code lookup table entry--this entry is four bytes for machines
- that have 16-bit pointers (e.g. PC's in the small or medium model). */
-
-typedef struct inflate_huft_s FAR inflate_huft;
-
-struct inflate_huft_s {
- union {
- struct {
- Byte Exop; /* number of extra bits or operation */
- Byte Bits; /* number of bits in this code or subcode */
- } what;
- uInt pad; /* pad structure to a power of 2 (4 bytes for */
- } word; /* 16-bit, 8 bytes for 32-bit int's) */
- uInt base; /* literal, length base, distance base,
- or table offset */
-};
-
-/* Maximum size of dynamic tree. The maximum found in a long but non-
- exhaustive search was 1004 huft structures (850 for length/literals
- and 154 for distances, the latter actually the result of an
- exhaustive search). The actual maximum is not known, but the
- value below is more than safe. */
-#define MANY 1440
-
-extern int inflate_trees_bits OF((
- uIntf *, /* 19 code lengths */
- uIntf *, /* bits tree desired/actual depth */
- inflate_huft * FAR *, /* bits tree result */
- inflate_huft *, /* space for trees */
- z_streamp)); /* for messages */
-
-extern int inflate_trees_dynamic OF((
- uInt, /* number of literal/length codes */
- uInt, /* number of distance codes */
- uIntf *, /* that many (total) code lengths */
- uIntf *, /* literal desired/actual bit depth */
- uIntf *, /* distance desired/actual bit depth */
- inflate_huft * FAR *, /* literal/length tree result */
- inflate_huft * FAR *, /* distance tree result */
- inflate_huft *, /* space for trees */
- z_streamp)); /* for messages */
-
-extern int inflate_trees_fixed OF((
- uIntf *, /* literal desired/actual bit depth */
- uIntf *, /* distance desired/actual bit depth */
- inflate_huft * FAR *, /* literal/length tree result */
- inflate_huft * FAR *, /* distance tree result */
- z_streamp)); /* for memory allocation */
diff --git a/zlib/infutil.c b/zlib/infutil.c
deleted file mode 100644
index 9a076221f..000000000
--- a/zlib/infutil.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* inflate_util.c -- data and routines common to blocks and codes
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "infblock.h"
-#include "inftrees.h"
-#include "infcodes.h"
-#include "infutil.h"
-
-struct inflate_codes_state {int dummy;}; /* for buggy compilers */
-
-/* And'ing with mask[n] masks the lower n bits */
-uInt inflate_mask[17] = {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
-};
-
-
-/* copy as much as possible from the sliding window to the output area */
-int inflate_flush(s, z, r)
-inflate_blocks_statef *s;
-z_streamp z;
-int r;
-{
- uInt n;
- Bytef *p;
- Bytef *q;
-
- /* local copies of source and destination pointers */
- p = z->next_out;
- q = s->read;
-
- /* compute number of bytes to copy as far as end of window */
- n = (uInt)((q <= s->write ? s->write : s->end) - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- /* update counters */
- z->avail_out -= n;
- z->total_out += n;
-
- /* update check information */
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- /* copy as far as end of window */
- zmemcpy(p, q, n);
- p += n;
- q += n;
-
- /* see if more to copy at beginning of window */
- if (q == s->end)
- {
- /* wrap pointers */
- q = s->window;
- if (s->write == s->end)
- s->write = s->window;
-
- /* compute bytes to copy */
- n = (uInt)(s->write - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- /* update counters */
- z->avail_out -= n;
- z->total_out += n;
-
- /* update check information */
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- /* copy */
- zmemcpy(p, q, n);
- p += n;
- q += n;
- }
-
- /* update pointers */
- z->next_out = p;
- s->read = q;
-
- /* done */
- return r;
-}
diff --git a/zlib/infutil.h b/zlib/infutil.h
deleted file mode 100644
index 4401df82f..000000000
--- a/zlib/infutil.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* infutil.h -- types and macros common to blocks and codes
- * Copyright (C) 1995-2002 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFUTIL_H
-#define _INFUTIL_H
-
-typedef enum {
- TYPE, /* get type bits (3, including end bit) */
- LENS, /* get lengths for stored */
- STORED, /* processing stored block */
- TABLE, /* get table lengths */
- BTREE, /* get bit lengths tree for a dynamic block */
- DTREE, /* get length, distance trees for a dynamic block */
- CODES, /* processing fixed or dynamic block */
- DRY, /* output remaining window bytes */
- DONE, /* finished last block, done */
- BAD} /* got a data error--stuck here */
-inflate_block_mode;
-
-/* inflate blocks semi-private state */
-struct inflate_blocks_state {
-
- /* mode */
- inflate_block_mode mode; /* current inflate_block mode */
-
- /* mode dependent information */
- union {
- uInt left; /* if STORED, bytes left to copy */
- struct {
- uInt table; /* table lengths (14 bits) */
- uInt index; /* index into blens (or border) */
- uIntf *blens; /* bit lengths of codes */
- uInt bb; /* bit length tree depth */
- inflate_huft *tb; /* bit length decoding tree */
- } trees; /* if DTREE, decoding info for trees */
- struct {
- inflate_codes_statef
- *codes;
- } decode; /* if CODES, current state */
- } sub; /* submode */
- uInt last; /* true if this block is the last block */
-
- /* mode independent information */
- uInt bitk; /* bits in bit buffer */
- uLong bitb; /* bit buffer */
- inflate_huft *hufts; /* single malloc for tree space */
- Bytef *window; /* sliding window */
- Bytef *end; /* one byte after sliding window */
- Bytef *read; /* window read pointer */
- Bytef *write; /* window write pointer */
- check_func checkfn; /* check function */
- uLong check; /* check on output */
-
-};
-
-
-/* defines for inflate input/output */
-/* update pointers and return */
-#define UPDBITS {s->bitb=b;s->bitk=k;}
-#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
-#define UPDOUT {s->write=q;}
-#define UPDATE {UPDBITS UPDIN UPDOUT}
-#define LEAVE {UPDATE return inflate_flush(s,z,r);}
-/* get bytes and bits */
-#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
-#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
-#define NEXTBYTE (n--,*p++)
-#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#define DUMPBITS(j) {b>>=(j);k-=(j);}
-/* output bytes */
-#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
-#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
-#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
-#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
-#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
-#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
-/* load local pointers */
-#define LOAD {LOADIN LOADOUT}
-
-/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
-extern uInt inflate_mask[17];
-
-/* copy as much as possible from the sliding window to the output area */
-extern int inflate_flush OF((
- inflate_blocks_statef *,
- z_streamp ,
- int));
-
-struct internal_state {int dummy;}; /* for buggy compilers */
-
-#endif
diff --git a/zlib/trees.c b/zlib/trees.c
deleted file mode 100644
index 0a9840567..000000000
--- a/zlib/trees.c
+++ /dev/null
@@ -1,1214 +0,0 @@
-/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2002 Jean-loup Gailly
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- * ALGORITHM
- *
- * The "deflation" process uses several Huffman trees. The more
- * common source values are represented by shorter bit sequences.
- *
- * Each code tree is stored in a compressed form which is itself
- * a Huffman encoding of the lengths of all the code strings (in
- * ascending order by source values). The actual code strings are
- * reconstructed from the lengths in the inflate process, as described
- * in the deflate specification.
- *
- * REFERENCES
- *
- * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
- * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
- *
- * Storer, James A.
- * Data Compression: Methods and Theory, pp. 49-50.
- * Computer Science Press, 1988. ISBN 0-7167-8156-5.
- *
- * Sedgewick, R.
- * Algorithms, p290.
- * Addison-Wesley, 1983. ISBN 0-201-06672-6.
- */
-
-/* @(#) $Id$ */
-
-/* #define GEN_TREES_H */
-
-#include "deflate.h"
-
-#ifdef DEBUG
-# include <ctype.h>
-#endif
-
-/* ===========================================================================
- * Constants
- */
-
-#define MAX_BL_BITS 7
-/* Bit length codes must not exceed MAX_BL_BITS bits */
-
-#define END_BLOCK 256
-/* end of block literal code */
-
-#define REP_3_6 16
-/* repeat previous bit length 3-6 times (2 bits of repeat count) */
-
-#define REPZ_3_10 17
-/* repeat a zero length 3-10 times (3 bits of repeat count) */
-
-#define REPZ_11_138 18
-/* repeat a zero length 11-138 times (7 bits of repeat count) */
-
-local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
- = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
-
-local const int extra_dbits[D_CODES] /* extra bits for each distance code */
- = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
-
-local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
- = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
-
-local const uch bl_order[BL_CODES]
- = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
-/* The lengths of the bit length codes are sent in order of decreasing
- * probability, to avoid transmitting the lengths for unused bit length codes.
- */
-
-#define Buf_size (8 * 2*sizeof(char))
-/* Number of bits used within bi_buf. (bi_buf might be implemented on
- * more than 16 bits on some systems.)
- */
-
-/* ===========================================================================
- * Local data. These are initialized only once.
- */
-
-#define DIST_CODE_LEN 512 /* see definition of array dist_code below */
-
-#if defined(GEN_TREES_H) || !defined(STDC)
-/* non ANSI compilers may not accept trees.h */
-
-local ct_data static_ltree[L_CODES+2];
-/* The static literal tree. Since the bit lengths are imposed, there is no
- * need for the L_CODES extra codes used during heap construction. However
- * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
- * below).
- */
-
-local ct_data static_dtree[D_CODES];
-/* The static distance tree. (Actually a trivial tree since all codes use
- * 5 bits.)
- */
-
-uch _dist_code[DIST_CODE_LEN];
-/* Distance codes. The first 256 values correspond to the distances
- * 3 .. 258, the last 256 values correspond to the top 8 bits of
- * the 15 bit distances.
- */
-
-uch _length_code[MAX_MATCH-MIN_MATCH+1];
-/* length code for each normalized match length (0 == MIN_MATCH) */
-
-local int base_length[LENGTH_CODES];
-/* First normalized length for each code (0 = MIN_MATCH) */
-
-local int base_dist[D_CODES];
-/* First normalized distance for each code (0 = distance of 1) */
-
-#else
-# include "trees.h"
-#endif /* GEN_TREES_H */
-
-struct static_tree_desc_s {
- const ct_data *static_tree; /* static tree or NULL */
- const intf *extra_bits; /* extra bits for each code or NULL */
- int extra_base; /* base index for extra_bits */
- int elems; /* max number of elements in the tree */
- int max_length; /* max bit length for the codes */
-};
-
-local static_tree_desc static_l_desc =
-{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
-
-local static_tree_desc static_d_desc =
-{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
-
-local static_tree_desc static_bl_desc =
-{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
-
-/* ===========================================================================
- * Local (static) routines in this file.
- */
-
-local void tr_static_init OF((void));
-local void init_block OF((deflate_state *s));
-local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
-local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
-local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
-local void build_tree OF((deflate_state *s, tree_desc *desc));
-local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
-local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
-local int build_bl_tree OF((deflate_state *s));
-local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
- int blcodes));
-local void compress_block OF((deflate_state *s, ct_data *ltree,
- ct_data *dtree));
-local void set_data_type OF((deflate_state *s));
-local unsigned bi_reverse OF((unsigned value, int length));
-local void bi_windup OF((deflate_state *s));
-local void bi_flush OF((deflate_state *s));
-local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
- int header));
-
-#ifdef GEN_TREES_H
-local void gen_trees_header OF((void));
-#endif
-
-#ifndef DEBUG
-# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
- /* Send a code of the given tree. c and tree must not have side effects */
-
-#else /* DEBUG */
-# define send_code(s, c, tree) \
- { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
- send_bits(s, tree[c].Code, tree[c].Len); }
-#endif
-
-/* ===========================================================================
- * Output a short LSB first on the stream.
- * IN assertion: there is enough room in pendingBuf.
- */
-#define put_short(s, w) { \
- put_byte(s, (uch)((w) & 0xff)); \
- put_byte(s, (uch)((ush)(w) >> 8)); \
-}
-
-/* ===========================================================================
- * Send a value on a given number of bits.
- * IN assertion: length <= 16 and value fits in length bits.
- */
-#ifdef DEBUG
-local void send_bits OF((deflate_state *s, int value, int length));
-
-local void send_bits(s, value, length)
- deflate_state *s;
- int value; /* value to send */
- int length; /* number of bits */
-{
- Tracevv((stderr," l %2d v %4x ", length, value));
- Assert(length > 0 && length <= 15, "invalid length");
- s->bits_sent += (ulg)length;
-
- /* If not enough room in bi_buf, use (valid) bits from bi_buf and
- * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
- * unused bits in value.
- */
- if (s->bi_valid > (int)Buf_size - length) {
- s->bi_buf |= (value << s->bi_valid);
- put_short(s, s->bi_buf);
- s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
- s->bi_valid += length - Buf_size;
- } else {
- s->bi_buf |= value << s->bi_valid;
- s->bi_valid += length;
- }
-}
-#else /* !DEBUG */
-
-#define send_bits(s, value, length) \
-{ int len = length;\
- if (s->bi_valid > (int)Buf_size - len) {\
- int val = value;\
- s->bi_buf |= (val << s->bi_valid);\
- put_short(s, s->bi_buf);\
- s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
- s->bi_valid += len - Buf_size;\
- } else {\
- s->bi_buf |= (value) << s->bi_valid;\
- s->bi_valid += len;\
- }\
-}
-#endif /* DEBUG */
-
-
-#define MAX(a,b) (a >= b ? a : b)
-/* the arguments must not have side effects */
-
-/* ===========================================================================
- * Initialize the various 'constant' tables.
- */
-local void tr_static_init()
-{
-#if defined(GEN_TREES_H) || !defined(STDC)
- static int static_init_done = 0;
- int n; /* iterates over tree elements */
- int bits; /* bit counter */
- int length; /* length value */
- int code; /* code value */
- int dist; /* distance index */
- ush bl_count[MAX_BITS+1];
- /* number of codes at each bit length for an optimal tree */
-
- if (static_init_done) return;
-
- /* For some embedded targets, global variables are not initialized: */
- static_l_desc.static_tree = static_ltree;
- static_l_desc.extra_bits = extra_lbits;
- static_d_desc.static_tree = static_dtree;
- static_d_desc.extra_bits = extra_dbits;
- static_bl_desc.extra_bits = extra_blbits;
-
- /* Initialize the mapping length (0..255) -> length code (0..28) */
- length = 0;
- for (code = 0; code < LENGTH_CODES-1; code++) {
- base_length[code] = length;
- for (n = 0; n < (1<<extra_lbits[code]); n++) {
- _length_code[length++] = (uch)code;
- }
- }
- Assert (length == 256, "tr_static_init: length != 256");
- /* Note that the length 255 (match length 258) can be represented
- * in two different ways: code 284 + 5 bits or code 285, so we
- * overwrite length_code[255] to use the best encoding:
- */
- _length_code[length-1] = (uch)code;
-
- /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
- dist = 0;
- for (code = 0 ; code < 16; code++) {
- base_dist[code] = dist;
- for (n = 0; n < (1<<extra_dbits[code]); n++) {
- _dist_code[dist++] = (uch)code;
- }
- }
- Assert (dist == 256, "tr_static_init: dist != 256");
- dist >>= 7; /* from now on, all distances are divided by 128 */
- for ( ; code < D_CODES; code++) {
- base_dist[code] = dist << 7;
- for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
- _dist_code[256 + dist++] = (uch)code;
- }
- }
- Assert (dist == 256, "tr_static_init: 256+dist != 512");
-
- /* Construct the codes of the static literal tree */
- for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
- n = 0;
- while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
- while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
- while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
- while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
- /* Codes 286 and 287 do not exist, but we must include them in the
- * tree construction to get a canonical Huffman tree (longest code
- * all ones)
- */
- gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
-
- /* The static distance tree is trivial: */
- for (n = 0; n < D_CODES; n++) {
- static_dtree[n].Len = 5;
- static_dtree[n].Code = bi_reverse((unsigned)n, 5);
- }
- static_init_done = 1;
-
-# ifdef GEN_TREES_H
- gen_trees_header();
-# endif
-#endif /* defined(GEN_TREES_H) || !defined(STDC) */
-}
-
-/* ===========================================================================
- * Genererate the file trees.h describing the static trees.
- */
-#ifdef GEN_TREES_H
-# ifndef DEBUG
-# include <stdio.h>
-# endif
-
-# define SEPARATOR(i, last, width) \
- ((i) == (last)? "\n};\n\n" : \
- ((i) % (width) == (width)-1 ? ",\n" : ", "))
-
-void gen_trees_header()
-{
- FILE *header = fopen("trees.h", "w");
- int i;
-
- Assert (header != NULL, "Can't open trees.h");
- fprintf(header,
- "/* header created automatically with -DGEN_TREES_H */\n\n");
-
- fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
- for (i = 0; i < L_CODES+2; i++) {
- fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
- static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
- }
-
- fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
- for (i = 0; i < D_CODES; i++) {
- fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
- static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
- }
-
- fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n");
- for (i = 0; i < DIST_CODE_LEN; i++) {
- fprintf(header, "%2u%s", _dist_code[i],
- SEPARATOR(i, DIST_CODE_LEN-1, 20));
- }
-
- fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
- for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
- fprintf(header, "%2u%s", _length_code[i],
- SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
- }
-
- fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
- for (i = 0; i < LENGTH_CODES; i++) {
- fprintf(header, "%1u%s", base_length[i],
- SEPARATOR(i, LENGTH_CODES-1, 20));
- }
-
- fprintf(header, "local const int base_dist[D_CODES] = {\n");
- for (i = 0; i < D_CODES; i++) {
- fprintf(header, "%5u%s", base_dist[i],
- SEPARATOR(i, D_CODES-1, 10));
- }
-
- fclose(header);
-}
-#endif /* GEN_TREES_H */
-
-/* ===========================================================================
- * Initialize the tree data structures for a new zlib stream.
- */
-void _tr_init(s)
- deflate_state *s;
-{
- tr_static_init();
-
- s->l_desc.dyn_tree = s->dyn_ltree;
- s->l_desc.stat_desc = &static_l_desc;
-
- s->d_desc.dyn_tree = s->dyn_dtree;
- s->d_desc.stat_desc = &static_d_desc;
-
- s->bl_desc.dyn_tree = s->bl_tree;
- s->bl_desc.stat_desc = &static_bl_desc;
-
- s->bi_buf = 0;
- s->bi_valid = 0;
- s->last_eob_len = 8; /* enough lookahead for inflate */
-#ifdef DEBUG
- s->compressed_len = 0L;
- s->bits_sent = 0L;
-#endif
-
- /* Initialize the first block of the first file: */
- init_block(s);
-}
-
-/* ===========================================================================
- * Initialize a new block.
- */
-local void init_block(s)
- deflate_state *s;
-{
- int n; /* iterates over tree elements */
-
- /* Initialize the trees. */
- for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
- for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
- for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
-
- s->dyn_ltree[END_BLOCK].Freq = 1;
- s->opt_len = s->static_len = 0L;
- s->last_lit = s->matches = 0;
-}
-
-#define SMALLEST 1
-/* Index within the heap array of least frequent node in the Huffman tree */
-
-
-/* ===========================================================================
- * Remove the smallest element from the heap and recreate the heap with
- * one less element. Updates heap and heap_len.
- */
-#define pqremove(s, tree, top) \
-{\
- top = s->heap[SMALLEST]; \
- s->heap[SMALLEST] = s->heap[s->heap_len--]; \
- pqdownheap(s, tree, SMALLEST); \
-}
-
-/* ===========================================================================
- * Compares to subtrees, using the tree depth as tie breaker when
- * the subtrees have equal frequency. This minimizes the worst case length.
- */
-#define smaller(tree, n, m, depth) \
- (tree[n].Freq < tree[m].Freq || \
- (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
-
-/* ===========================================================================
- * Restore the heap property by moving down the tree starting at node k,
- * exchanging a node with the smallest of its two sons if necessary, stopping
- * when the heap property is re-established (each father smaller than its
- * two sons).
- */
-local void pqdownheap(s, tree, k)
- deflate_state *s;
- ct_data *tree; /* the tree to restore */
- int k; /* node to move down */
-{
- int v = s->heap[k];
- int j = k << 1; /* left son of k */
- while (j <= s->heap_len) {
- /* Set j to the smallest of the two sons: */
- if (j < s->heap_len &&
- smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
- j++;
- }
- /* Exit if v is smaller than both sons */
- if (smaller(tree, v, s->heap[j], s->depth)) break;
-
- /* Exchange v with the smallest son */
- s->heap[k] = s->heap[j]; k = j;
-
- /* And continue down the tree, setting j to the left son of k */
- j <<= 1;
- }
- s->heap[k] = v;
-}
-
-/* ===========================================================================
- * Compute the optimal bit lengths for a tree and update the total bit length
- * for the current block.
- * IN assertion: the fields freq and dad are set, heap[heap_max] and
- * above are the tree nodes sorted by increasing frequency.
- * OUT assertions: the field len is set to the optimal bit length, the
- * array bl_count contains the frequencies for each bit length.
- * The length opt_len is updated; static_len is also updated if stree is
- * not null.
- */
-local void gen_bitlen(s, desc)
- deflate_state *s;
- tree_desc *desc; /* the tree descriptor */
-{
- ct_data *tree = desc->dyn_tree;
- int max_code = desc->max_code;
- const ct_data *stree = desc->stat_desc->static_tree;
- const intf *extra = desc->stat_desc->extra_bits;
- int base = desc->stat_desc->extra_base;
- int max_length = desc->stat_desc->max_length;
- int h; /* heap index */
- int n, m; /* iterate over the tree elements */
- int bits; /* bit length */
- int xbits; /* extra bits */
- ush f; /* frequency */
- int overflow = 0; /* number of elements with bit length too large */
-
- for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
-
- /* In a first pass, compute the optimal bit lengths (which may
- * overflow in the case of the bit length tree).
- */
- tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
-
- for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
- n = s->heap[h];
- bits = tree[tree[n].Dad].Len + 1;
- if (bits > max_length) bits = max_length, overflow++;
- tree[n].Len = (ush)bits;
- /* We overwrite tree[n].Dad which is no longer needed */
-
- if (n > max_code) continue; /* not a leaf node */
-
- s->bl_count[bits]++;
- xbits = 0;
- if (n >= base) xbits = extra[n-base];
- f = tree[n].Freq;
- s->opt_len += (ulg)f * (bits + xbits);
- if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
- }
- if (overflow == 0) return;
-
- Trace((stderr,"\nbit length overflow\n"));
- /* This happens for example on obj2 and pic of the Calgary corpus */
-
- /* Find the first bit length which could increase: */
- do {
- bits = max_length-1;
- while (s->bl_count[bits] == 0) bits--;
- s->bl_count[bits]--; /* move one leaf down the tree */
- s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
- s->bl_count[max_length]--;
- /* The brother of the overflow item also moves one step up,
- * but this does not affect bl_count[max_length]
- */
- overflow -= 2;
- } while (overflow > 0);
-
- /* Now recompute all bit lengths, scanning in increasing frequency.
- * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
- * lengths instead of fixing only the wrong ones. This idea is taken
- * from 'ar' written by Haruhiko Okumura.)
- */
- for (bits = max_length; bits != 0; bits--) {
- n = s->bl_count[bits];
- while (n != 0) {
- m = s->heap[--h];
- if (m > max_code) continue;
- if (tree[m].Len != (unsigned) bits) {
- Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
- s->opt_len += ((long)bits - (long)tree[m].Len)
- *(long)tree[m].Freq;
- tree[m].Len = (ush)bits;
- }
- n--;
- }
- }
-}
-
-/* ===========================================================================
- * Generate the codes for a given tree and bit counts (which need not be
- * optimal).
- * IN assertion: the array bl_count contains the bit length statistics for
- * the given tree and the field len is set for all tree elements.
- * OUT assertion: the field code is set for all tree elements of non
- * zero code length.
- */
-local void gen_codes (tree, max_code, bl_count)
- ct_data *tree; /* the tree to decorate */
- int max_code; /* largest code with non zero frequency */
- ushf *bl_count; /* number of codes at each bit length */
-{
- ush next_code[MAX_BITS+1]; /* next code value for each bit length */
- ush code = 0; /* running code value */
- int bits; /* bit index */
- int n; /* code index */
-
- /* The distribution counts are first used to generate the code values
- * without bit reversal.
- */
- for (bits = 1; bits <= MAX_BITS; bits++) {
- next_code[bits] = code = (code + bl_count[bits-1]) << 1;
- }
- /* Check that the bit counts in bl_count are consistent. The last code
- * must be all ones.
- */
- Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
- "inconsistent bit counts");
- Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
-
- for (n = 0; n <= max_code; n++) {
- int len = tree[n].Len;
- if (len == 0) continue;
- /* Now reverse the bits */
- tree[n].Code = bi_reverse(next_code[len]++, len);
-
- Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
- n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
- }
-}
-
-/* ===========================================================================
- * Construct one Huffman tree and assigns the code bit strings and lengths.
- * Update the total bit length for the current block.
- * IN assertion: the field freq is set for all tree elements.
- * OUT assertions: the fields len and code are set to the optimal bit length
- * and corresponding code. The length opt_len is updated; static_len is
- * also updated if stree is not null. The field max_code is set.
- */
-local void build_tree(s, desc)
- deflate_state *s;
- tree_desc *desc; /* the tree descriptor */
-{
- ct_data *tree = desc->dyn_tree;
- const ct_data *stree = desc->stat_desc->static_tree;
- int elems = desc->stat_desc->elems;
- int n, m; /* iterate over heap elements */
- int max_code = -1; /* largest code with non zero frequency */
- int node; /* new node being created */
-
- /* Construct the initial heap, with least frequent element in
- * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
- * heap[0] is not used.
- */
- s->heap_len = 0, s->heap_max = HEAP_SIZE;
-
- for (n = 0; n < elems; n++) {
- if (tree[n].Freq != 0) {
- s->heap[++(s->heap_len)] = max_code = n;
- s->depth[n] = 0;
- } else {
- tree[n].Len = 0;
- }
- }
-
- /* The pkzip format requires that at least one distance code exists,
- * and that at least one bit should be sent even if there is only one
- * possible code. So to avoid special checks later on we force at least
- * two codes of non zero frequency.
- */
- while (s->heap_len < 2) {
- node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
- tree[node].Freq = 1;
- s->depth[node] = 0;
- s->opt_len--; if (stree) s->static_len -= stree[node].Len;
- /* node is 0 or 1 so it does not have extra bits */
- }
- desc->max_code = max_code;
-
- /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
- * establish sub-heaps of increasing lengths:
- */
- for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
-
- /* Construct the Huffman tree by repeatedly combining the least two
- * frequent nodes.
- */
- node = elems; /* next internal node of the tree */
- do {
- pqremove(s, tree, n); /* n = node of least frequency */
- m = s->heap[SMALLEST]; /* m = node of next least frequency */
-
- s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
- s->heap[--(s->heap_max)] = m;
-
- /* Create a new node father of n and m */
- tree[node].Freq = tree[n].Freq + tree[m].Freq;
- s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
- tree[n].Dad = tree[m].Dad = (ush)node;
-#ifdef DUMP_BL_TREE
- if (tree == s->bl_tree) {
- fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
- node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
- }
-#endif
- /* and insert the new node in the heap */
- s->heap[SMALLEST] = node++;
- pqdownheap(s, tree, SMALLEST);
-
- } while (s->heap_len >= 2);
-
- s->heap[--(s->heap_max)] = s->heap[SMALLEST];
-
- /* At this point, the fields freq and dad are set. We can now
- * generate the bit lengths.
- */
- gen_bitlen(s, (tree_desc *)desc);
-
- /* The field len is now set, we can generate the bit codes */
- gen_codes ((ct_data *)tree, max_code, s->bl_count);
-}
-
-/* ===========================================================================
- * Scan a literal or distance tree to determine the frequencies of the codes
- * in the bit length tree.
- */
-local void scan_tree (s, tree, max_code)
- deflate_state *s;
- ct_data *tree; /* the tree to be scanned */
- int max_code; /* and its largest code of non zero frequency */
-{
- int n; /* iterates over all tree elements */
- int prevlen = -1; /* last emitted length */
- int curlen; /* length of current code */
- int nextlen = tree[0].Len; /* length of next code */
- int count = 0; /* repeat count of the current code */
- int max_count = 7; /* max repeat count */
- int min_count = 4; /* min repeat count */
-
- if (nextlen == 0) max_count = 138, min_count = 3;
- tree[max_code+1].Len = (ush)0xffff; /* guard */
-
- for (n = 0; n <= max_code; n++) {
- curlen = nextlen; nextlen = tree[n+1].Len;
- if (++count < max_count && curlen == nextlen) {
- continue;
- } else if (count < min_count) {
- s->bl_tree[curlen].Freq += count;
- } else if (curlen != 0) {
- if (curlen != prevlen) s->bl_tree[curlen].Freq++;
- s->bl_tree[REP_3_6].Freq++;
- } else if (count <= 10) {
- s->bl_tree[REPZ_3_10].Freq++;
- } else {
- s->bl_tree[REPZ_11_138].Freq++;
- }
- count = 0; prevlen = curlen;
- if (nextlen == 0) {
- max_count = 138, min_count = 3;
- } else if (curlen == nextlen) {
- max_count = 6, min_count = 3;
- } else {
- max_count = 7, min_count = 4;
- }
- }
-}
-
-/* ===========================================================================
- * Send a literal or distance tree in compressed form, using the codes in
- * bl_tree.
- */
-local void send_tree (s, tree, max_code)
- deflate_state *s;
- ct_data *tree; /* the tree to be scanned */
- int max_code; /* and its largest code of non zero frequency */
-{
- int n; /* iterates over all tree elements */
- int prevlen = -1; /* last emitted length */
- int curlen; /* length of current code */
- int nextlen = tree[0].Len; /* length of next code */
- int count = 0; /* repeat count of the current code */
- int max_count = 7; /* max repeat count */
- int min_count = 4; /* min repeat count */
-
- /* tree[max_code+1].Len = -1; */ /* guard already set */
- if (nextlen == 0) max_count = 138, min_count = 3;
-
- for (n = 0; n <= max_code; n++) {
- curlen = nextlen; nextlen = tree[n+1].Len;
- if (++count < max_count && curlen == nextlen) {
- continue;
- } else if (count < min_count) {
- do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
-
- } else if (curlen != 0) {
- if (curlen != prevlen) {
- send_code(s, curlen, s->bl_tree); count--;
- }
- Assert(count >= 3 && count <= 6, " 3_6?");
- send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
-
- } else if (count <= 10) {
- send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
-
- } else {
- send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
- }
- count = 0; prevlen = curlen;
- if (nextlen == 0) {
- max_count = 138, min_count = 3;
- } else if (curlen == nextlen) {
- max_count = 6, min_count = 3;
- } else {
- max_count = 7, min_count = 4;
- }
- }
-}
-
-/* ===========================================================================
- * Construct the Huffman tree for the bit lengths and return the index in
- * bl_order of the last bit length code to send.
- */
-local int build_bl_tree(s)
- deflate_state *s;
-{
- int max_blindex; /* index of last bit length code of non zero freq */
-
- /* Determine the bit length frequencies for literal and distance trees */
- scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
- scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
-
- /* Build the bit length tree: */
- build_tree(s, (tree_desc *)(&(s->bl_desc)));
- /* opt_len now includes the length of the tree representations, except
- * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
- */
-
- /* Determine the number of bit length codes to send. The pkzip format
- * requires that at least 4 bit length codes be sent. (appnote.txt says
- * 3 but the actual value used is 4.)
- */
- for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
- if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
- }
- /* Update opt_len to include the bit length tree and counts */
- s->opt_len += 3*(max_blindex+1) + 5+5+4;
- Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
- s->opt_len, s->static_len));
-
- return max_blindex;
-}
-
-/* ===========================================================================
- * Send the header for a block using dynamic Huffman trees: the counts, the
- * lengths of the bit length codes, the literal tree and the distance tree.
- * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
- */
-local void send_all_trees(s, lcodes, dcodes, blcodes)
- deflate_state *s;
- int lcodes, dcodes, blcodes; /* number of codes for each tree */
-{
- int rank; /* index in bl_order */
-
- Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
- Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
- "too many codes");
- Tracev((stderr, "\nbl counts: "));
- send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
- send_bits(s, dcodes-1, 5);
- send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
- for (rank = 0; rank < blcodes; rank++) {
- Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
- send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
- }
- Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
-
- send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
- Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
-
- send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
- Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
-}
-
-/* ===========================================================================
- * Send a stored block
- */
-void _tr_stored_block(s, buf, stored_len, eof)
- deflate_state *s;
- charf *buf; /* input block */
- ulg stored_len; /* length of input block */
- int eof; /* true if this is the last block for a file */
-{
- send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */
-#ifdef DEBUG
- s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
- s->compressed_len += (stored_len + 4) << 3;
-#endif
- copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
-}
-
-/* ===========================================================================
- * Send one empty static block to give enough lookahead for inflate.
- * This takes 10 bits, of which 7 may remain in the bit buffer.
- * The current inflate code requires 9 bits of lookahead. If the
- * last two codes for the previous block (real code plus EOB) were coded
- * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
- * the last real code. In this case we send two empty static blocks instead
- * of one. (There are no problems if the previous block is stored or fixed.)
- * To simplify the code, we assume the worst case of last real code encoded
- * on one bit only.
- */
-void _tr_align(s)
- deflate_state *s;
-{
- send_bits(s, STATIC_TREES<<1, 3);
- send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
- s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
-#endif
- bi_flush(s);
- /* Of the 10 bits for the empty block, we have already sent
- * (10 - bi_valid) bits. The lookahead for the last real code (before
- * the EOB of the previous block) was thus at least one plus the length
- * of the EOB plus what we have just sent of the empty static block.
- */
- if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
- send_bits(s, STATIC_TREES<<1, 3);
- send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
- s->compressed_len += 10L;
-#endif
- bi_flush(s);
- }
- s->last_eob_len = 7;
-}
-
-/* ===========================================================================
- * Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
- */
-void _tr_flush_block(s, buf, stored_len, eof)
- deflate_state *s;
- charf *buf; /* input block, or NULL if too old */
- ulg stored_len; /* length of input block */
- int eof; /* true if this is the last block for a file */
-{
- ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
- int max_blindex = 0; /* index of last bit length code of non zero freq */
-
- /* Build the Huffman trees unless a stored block is forced */
- if (s->level > 0) {
-
- /* Check if the file is ascii or binary */
- if (s->data_type == Z_UNKNOWN) set_data_type(s);
-
- /* Construct the literal and distance trees */
- build_tree(s, (tree_desc *)(&(s->l_desc)));
- Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
- s->static_len));
-
- build_tree(s, (tree_desc *)(&(s->d_desc)));
- Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
- s->static_len));
- /* At this point, opt_len and static_len are the total bit lengths of
- * the compressed block data, excluding the tree representations.
- */
-
- /* Build the bit length tree for the above two trees, and get the index
- * in bl_order of the last bit length code to send.
- */
- max_blindex = build_bl_tree(s);
-
- /* Determine the best encoding. Compute first the block length in bytes*/
- opt_lenb = (s->opt_len+3+7)>>3;
- static_lenb = (s->static_len+3+7)>>3;
-
- Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
- opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
- s->last_lit));
-
- if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
-
- } else {
- Assert(buf != (char*)0, "lost buf");
- opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
- }
-
-#ifdef FORCE_STORED
- if (buf != (char*)0) { /* force stored block */
-#else
- if (stored_len+4 <= opt_lenb && buf != (char*)0) {
- /* 4: two words for the lengths */
-#endif
- /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
- * Otherwise we can't have processed more than WSIZE input bytes since
- * the last block flush, because compression would have been
- * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
- * transform a block into a stored block.
- */
- _tr_stored_block(s, buf, stored_len, eof);
-
-#ifdef FORCE_STATIC
- } else if (static_lenb >= 0) { /* force static trees */
-#else
- } else if (static_lenb == opt_lenb) {
-#endif
- send_bits(s, (STATIC_TREES<<1)+eof, 3);
- compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
-#ifdef DEBUG
- s->compressed_len += 3 + s->static_len;
-#endif
- } else {
- send_bits(s, (DYN_TREES<<1)+eof, 3);
- send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
- max_blindex+1);
- compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
-#ifdef DEBUG
- s->compressed_len += 3 + s->opt_len;
-#endif
- }
- Assert (s->compressed_len == s->bits_sent, "bad compressed size");
- /* The above check is made mod 2^32, for files larger than 512 MB
- * and uLong implemented on 32 bits.
- */
- init_block(s);
-
- if (eof) {
- bi_windup(s);
-#ifdef DEBUG
- s->compressed_len += 7; /* align on byte boundary */
-#endif
- }
- Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
- s->compressed_len-7*eof));
-}
-
-/* ===========================================================================
- * Save the match info and tally the frequency counts. Return true if
- * the current block must be flushed.
- */
-int _tr_tally (s, dist, lc)
- deflate_state *s;
- unsigned dist; /* distance of matched string */
- unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
-{
- s->d_buf[s->last_lit] = (ush)dist;
- s->l_buf[s->last_lit++] = (uch)lc;
- if (dist == 0) {
- /* lc is the unmatched char */
- s->dyn_ltree[lc].Freq++;
- } else {
- s->matches++;
- /* Here, lc is the match length - MIN_MATCH */
- dist--; /* dist = match distance - 1 */
- Assert((ush)dist < (ush)MAX_DIST(s) &&
- (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
- (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
-
- s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
- s->dyn_dtree[d_code(dist)].Freq++;
- }
-
-#ifdef TRUNCATE_BLOCK
- /* Try to guess if it is profitable to stop the current block here */
- if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
- /* Compute an upper bound for the compressed length */
- ulg out_length = (ulg)s->last_lit*8L;
- ulg in_length = (ulg)((long)s->strstart - s->block_start);
- int dcode;
- for (dcode = 0; dcode < D_CODES; dcode++) {
- out_length += (ulg)s->dyn_dtree[dcode].Freq *
- (5L+extra_dbits[dcode]);
- }
- out_length >>= 3;
- Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
- s->last_lit, in_length, out_length,
- 100L - out_length*100L/in_length));
- if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
- }
-#endif
- return (s->last_lit == s->lit_bufsize-1);
- /* We avoid equality with lit_bufsize because of wraparound at 64K
- * on 16 bit machines and because stored blocks are restricted to
- * 64K-1 bytes.
- */
-}
-
-/* ===========================================================================
- * Send the block data compressed using the given Huffman trees
- */
-local void compress_block(s, ltree, dtree)
- deflate_state *s;
- ct_data *ltree; /* literal tree */
- ct_data *dtree; /* distance tree */
-{
- unsigned dist; /* distance of matched string */
- int lc; /* match length or unmatched char (if dist == 0) */
- unsigned lx = 0; /* running index in l_buf */
- unsigned code; /* the code to send */
- int extra; /* number of extra bits to send */
-
- if (s->last_lit != 0) do {
- dist = s->d_buf[lx];
- lc = s->l_buf[lx++];
- if (dist == 0) {
- send_code(s, lc, ltree); /* send a literal byte */
- Tracecv(isgraph(lc), (stderr," '%c' ", lc));
- } else {
- /* Here, lc is the match length - MIN_MATCH */
- code = _length_code[lc];
- send_code(s, code+LITERALS+1, ltree); /* send the length code */
- extra = extra_lbits[code];
- if (extra != 0) {
- lc -= base_length[code];
- send_bits(s, lc, extra); /* send the extra length bits */
- }
- dist--; /* dist is now the match distance - 1 */
- code = d_code(dist);
- Assert (code < D_CODES, "bad d_code");
-
- send_code(s, code, dtree); /* send the distance code */
- extra = extra_dbits[code];
- if (extra != 0) {
- dist -= base_dist[code];
- send_bits(s, dist, extra); /* send the extra distance bits */
- }
- } /* literal or match pair ? */
-
- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
- Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");
-
- } while (lx < s->last_lit);
-
- send_code(s, END_BLOCK, ltree);
- s->last_eob_len = ltree[END_BLOCK].Len;
-}
-
-/* ===========================================================================
- * Set the data type to ASCII or BINARY, using a crude approximation:
- * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
- * IN assertion: the fields freq of dyn_ltree are set and the total of all
- * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
- */
-local void set_data_type(s)
- deflate_state *s;
-{
- int n = 0;
- unsigned ascii_freq = 0;
- unsigned bin_freq = 0;
- while (n < 7) bin_freq += s->dyn_ltree[n++].Freq;
- while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq;
- while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
- s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);
-}
-
-/* ===========================================================================
- * Reverse the first len bits of a code, using straightforward code (a faster
- * method would use a table)
- * IN assertion: 1 <= len <= 15
- */
-local unsigned bi_reverse(code, len)
- unsigned code; /* the value to invert */
- int len; /* its bit length */
-{
- register unsigned res = 0;
- do {
- res |= code & 1;
- code >>= 1, res <<= 1;
- } while (--len > 0);
- return res >> 1;
-}
-
-/* ===========================================================================
- * Flush the bit buffer, keeping at most 7 bits in it.
- */
-local void bi_flush(s)
- deflate_state *s;
-{
- if (s->bi_valid == 16) {
- put_short(s, s->bi_buf);
- s->bi_buf = 0;
- s->bi_valid = 0;
- } else if (s->bi_valid >= 8) {
- put_byte(s, (Byte)s->bi_buf);
- s->bi_buf >>= 8;
- s->bi_valid -= 8;
- }
-}
-
-/* ===========================================================================
- * Flush the bit buffer and align the output on a byte boundary
- */
-local void bi_windup(s)
- deflate_state *s;
-{
- if (s->bi_valid > 8) {
- put_short(s, s->bi_buf);
- } else if (s->bi_valid > 0) {
- put_byte(s, (Byte)s->bi_buf);
- }
- s->bi_buf = 0;
- s->bi_valid = 0;
-#ifdef DEBUG
- s->bits_sent = (s->bits_sent+7) & ~7;
-#endif
-}
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(s, buf, len, header)
- deflate_state *s;
- charf *buf; /* the input data */
- unsigned len; /* its length */
- int header; /* true if block header must be written */
-{
- bi_windup(s); /* align on byte boundary */
- s->last_eob_len = 8; /* enough lookahead for inflate */
-
- if (header) {
- put_short(s, (ush)len);
- put_short(s, (ush)~len);
-#ifdef DEBUG
- s->bits_sent += 2*16;
-#endif
- }
-#ifdef DEBUG
- s->bits_sent += (ulg)len<<3;
-#endif
- while (len--) {
- put_byte(s, *buf++);
- }
-}
diff --git a/zlib/trees.h b/zlib/trees.h
deleted file mode 100644
index 72facf900..000000000
--- a/zlib/trees.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* header created automatically with -DGEN_TREES_H */
-
-local const ct_data static_ltree[L_CODES+2] = {
-{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}},
-{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}},
-{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}},
-{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}},
-{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}},
-{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}},
-{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}},
-{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}},
-{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}},
-{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}},
-{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}},
-{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}},
-{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}},
-{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}},
-{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}},
-{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}},
-{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}},
-{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}},
-{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}},
-{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}},
-{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}},
-{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}},
-{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}},
-{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}},
-{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}},
-{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}},
-{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}},
-{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}},
-{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}},
-{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}},
-{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}},
-{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}},
-{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}},
-{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}},
-{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}},
-{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}},
-{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}},
-{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}},
-{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}},
-{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}},
-{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}},
-{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}},
-{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}},
-{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}},
-{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}},
-{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}},
-{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}},
-{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}},
-{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}},
-{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}},
-{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}},
-{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}},
-{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}},
-{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}},
-{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}},
-{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}},
-{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}},
-{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}}
-};
-
-local const ct_data static_dtree[D_CODES] = {
-{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
-{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
-{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
-{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
-{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
-{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
-};
-
-const uch _dist_code[DIST_CODE_LEN] = {
- 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
-18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
-23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
-};
-
-const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
-13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
-17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
-19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
-22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
-23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
-};
-
-local const int base_length[LENGTH_CODES] = {
-0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
-64, 80, 96, 112, 128, 160, 192, 224, 0
-};
-
-local const int base_dist[D_CODES] = {
- 0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
- 32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
- 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
-};
-
diff --git a/zlib/uncompr.c b/zlib/uncompr.c
deleted file mode 100644
index a287714f5..000000000
--- a/zlib/uncompr.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zlib.h"
-
-/* ===========================================================================
- Decompresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be large enough to hold the
- entire uncompressed data. (The size of the uncompressed data must have
- been saved previously by the compressor and transmitted to the decompressor
- by some mechanism outside the scope of this compression library.)
- Upon exit, destLen is the actual size of the compressed buffer.
- This function can be used to decompress a whole file at once if the
- input file is mmap'ed.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer, or Z_DATA_ERROR if the input data was corrupted.
-*/
-int ZEXPORT uncompress (dest, destLen, source, sourceLen)
- Bytef *dest;
- uLongf *destLen;
- const Bytef *source;
- uLong sourceLen;
-{
- z_stream stream;
- int err;
-
- stream.next_in = (Bytef*)source;
- stream.avail_in = (uInt)sourceLen;
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
- stream.zalloc = (alloc_func)0;
- stream.zfree = (free_func)0;
-
- err = inflateInit(&stream);
- if (err != Z_OK) return err;
-
- err = inflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- inflateEnd(&stream);
- return err == Z_OK ? Z_BUF_ERROR : err;
- }
- *destLen = stream.total_out;
-
- err = inflateEnd(&stream);
- return err;
-}
diff --git a/zlib/zconf.h b/zlib/zconf.h
deleted file mode 100644
index eb0ae2e1a..000000000
--- a/zlib/zconf.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#ifndef _ZCONF_H
-#define _ZCONF_H
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- */
-#ifdef Z_PREFIX
-# define deflateInit_ z_deflateInit_
-# define deflate z_deflate
-# define deflateEnd z_deflateEnd
-# define inflateInit_ z_inflateInit_
-# define inflate z_inflate
-# define inflateEnd z_inflateEnd
-# define deflateInit2_ z_deflateInit2_
-# define deflateSetDictionary z_deflateSetDictionary
-# define deflateCopy z_deflateCopy
-# define deflateReset z_deflateReset
-# define deflateParams z_deflateParams
-# define inflateInit2_ z_inflateInit2_
-# define inflateSetDictionary z_inflateSetDictionary
-# define inflateSync z_inflateSync
-# define inflateSyncPoint z_inflateSyncPoint
-# define inflateReset z_inflateReset
-# define compress z_compress
-# define compress2 z_compress2
-# define uncompress z_uncompress
-# define adler32 z_adler32
-# define crc32 z_crc32
-# define get_crc_table z_get_crc_table
-
-# define Byte z_Byte
-# define uInt z_uInt
-# define uLong z_uLong
-# define Bytef z_Bytef
-# define charf z_charf
-# define intf z_intf
-# define uIntf z_uIntf
-# define uLongf z_uLongf
-# define voidpf z_voidpf
-# define voidp z_voidp
-#endif
-
-#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-# define WIN32
-#endif
-#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
-# ifndef __32BIT__
-# define __32BIT__
-# endif
-#endif
-#if defined(__MSDOS__) && !defined(MSDOS)
-# define MSDOS
-#endif
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#if defined(MSDOS) && !defined(__32BIT__)
-# define MAXSEG_64K
-#endif
-#ifdef MSDOS
-# define UNALIGNED_OK
-#endif
-
-#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC)
-# define STDC
-#endif
-#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
-# ifndef STDC
-# define STDC
-# endif
-#endif
-
-#ifndef STDC
-# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-# define const
-# endif
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
-# define NO_DUMMY_DECL
-#endif
-
-/* Old Borland C incorrectly complains about missing returns: */
-#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-# define NEED_DUMMY_RETURN
-#endif
-
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-# ifdef MAXSEG_64K
-# define MAX_MEM_LEVEL 8
-# else
-# define MAX_MEM_LEVEL 9
-# endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-# define MAX_WBITS 15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
- (1 << (windowBits+2)) + (1 << (memLevel+9))
- that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
- make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
- The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
- /* Type declarations */
-
-#ifndef OF /* function prototypes */
-# ifdef STDC
-# define OF(args) args
-# else
-# define OF(args) ()
-# endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
- /* MSC small or medium model */
-# define SMALL_MEDIUM
-# ifdef _MSC_VER
-# define FAR _far
-# else
-# define FAR far
-# endif
-#endif
-#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
-# ifndef __32BIT__
-# define SMALL_MEDIUM
-# define FAR _far
-# endif
-#endif
-
-/* Compile with -DZLIB_DLL for Windows DLL support */
-#if defined(ZLIB_DLL)
-# if defined(_WINDOWS) || defined(WINDOWS)
-# ifdef FAR
-# undef FAR
-# endif
-# include <windows.h>
-# define ZEXPORT WINAPI
-# ifdef WIN32
-# define ZEXPORTVA WINAPIV
-# else
-# define ZEXPORTVA FAR _cdecl _export
-# endif
-# endif
-# if defined (__BORLANDC__)
-# if (__BORLANDC__ >= 0x0500) && defined (WIN32)
-# include <windows.h>
-# define ZEXPORT __declspec(dllexport) WINAPI
-# define ZEXPORTRVA __declspec(dllexport) WINAPIV
-# else
-# if defined (_Windows) && defined (__DLL__)
-# define ZEXPORT _export
-# define ZEXPORTVA _export
-# endif
-# endif
-# endif
-#endif
-
-#if defined (__BEOS__)
-# if defined (ZLIB_DLL)
-# define ZEXTERN extern __declspec(dllexport)
-# else
-# define ZEXTERN extern __declspec(dllimport)
-# endif
-#endif
-
-#ifndef ZEXPORT
-# define ZEXPORT
-#endif
-#ifndef ZEXPORTVA
-# define ZEXPORTVA
-#endif
-#ifndef ZEXTERN
-# define ZEXTERN extern
-#endif
-
-#ifndef FAR
-# define FAR
-#endif
-
-#if !defined(MACOS) && !defined(TARGET_OS_MAC)
-typedef unsigned char Byte; /* 8 bits */
-#endif
-typedef unsigned int uInt; /* 16 bits or more */
-typedef unsigned long uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
- /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-# define Bytef Byte FAR
-#else
- typedef Byte FAR Bytef;
-#endif
-typedef char FAR charf;
-typedef int FAR intf;
-typedef uInt FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
- typedef void FAR *voidpf;
- typedef void *voidp;
-#else
- typedef Byte FAR *voidpf;
- typedef Byte *voidp;
-#endif
-
-#ifdef HAVE_UNISTD_H
-# include <sys/types.h> /* for off_t */
-# include <unistd.h> /* for SEEK_* and off_t */
-# define z_off_t off_t
-#endif
-#ifndef SEEK_SET
-# define SEEK_SET 0 /* Seek from beginning of file. */
-# define SEEK_CUR 1 /* Seek from current position. */
-# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
-#endif
-#ifndef z_off_t
-# define z_off_t long
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-# pragma map(deflateInit_,"DEIN")
-# pragma map(deflateInit2_,"DEIN2")
-# pragma map(deflateEnd,"DEEND")
-# pragma map(inflateInit_,"ININ")
-# pragma map(inflateInit2_,"ININ2")
-# pragma map(inflateEnd,"INEND")
-# pragma map(inflateSync,"INSY")
-# pragma map(inflateSetDictionary,"INSEDI")
-# pragma map(inflate_blocks,"INBL")
-# pragma map(inflate_blocks_new,"INBLNE")
-# pragma map(inflate_blocks_free,"INBLFR")
-# pragma map(inflate_blocks_reset,"INBLRE")
-# pragma map(inflate_codes_free,"INCOFR")
-# pragma map(inflate_codes,"INCO")
-# pragma map(inflate_fast,"INFA")
-# pragma map(inflate_flush,"INFLU")
-# pragma map(inflate_mask,"INMA")
-# pragma map(inflate_set_dictionary,"INSEDI2")
-# pragma map(inflate_copyright,"INCOPY")
-# pragma map(inflate_trees_bits,"INTRBI")
-# pragma map(inflate_trees_dynamic,"INTRDY")
-# pragma map(inflate_trees_fixed,"INTRFI")
-# pragma map(inflate_trees_free,"INTRFR")
-#endif
-
-#endif /* _ZCONF_H */
diff --git a/zlib/zlib.h b/zlib/zlib.h
deleted file mode 100644
index 52cb529f6..000000000
--- a/zlib/zlib.h
+++ /dev/null
@@ -1,893 +0,0 @@
-/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.1.4, March 11th, 2002
-
- Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jean-loup Gailly Mark Adler
- jloup@gzip.org madler@alumni.caltech.edu
-
-
- The data format used by the zlib library is described by RFCs (Request for
- Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
- (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
-*/
-
-#ifndef _ZLIB_H
-#define _ZLIB_H
-
-#include "zconf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZLIB_VERSION "1.1.4"
-
-/*
- The 'zlib' compression library provides in-memory compression and
- decompression functions, including integrity checks of the uncompressed
- data. This version of the library supports only one compression method
- (deflation) but other algorithms will be added later and will have the same
- stream interface.
-
- Compression can be done in a single step if the buffers are large
- enough (for example if an input file is mmap'ed), or can be done by
- repeated calls of the compression function. In the latter case, the
- application must provide more input and/or consume the output
- (providing more output space) before each call.
-
- The library also supports reading and writing files in gzip (.gz) format
- with an interface similar to that of stdio.
-
- The library does not install any signal handler. The decoder checks
- the consistency of the compressed data, so the library should never
- crash even in case of corrupted input.
-*/
-
-typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
-typedef void (*free_func) OF((voidpf opaque, voidpf address));
-
-struct internal_state;
-
-typedef struct z_stream_s {
- Bytef *next_in; /* next input byte */
- uInt avail_in; /* number of bytes available at next_in */
- uLong total_in; /* total nb of input bytes read so far */
-
- Bytef *next_out; /* next output byte should be put there */
- uInt avail_out; /* remaining free space at next_out */
- uLong total_out; /* total nb of bytes output so far */
-
- char *msg; /* last error message, NULL if no error */
- struct internal_state FAR *state; /* not visible by applications */
-
- alloc_func zalloc; /* used to allocate the internal state */
- free_func zfree; /* used to free the internal state */
- voidpf opaque; /* private data object passed to zalloc and zfree */
-
- int data_type; /* best guess about the data type: ascii or binary */
- uLong adler; /* adler32 value of the uncompressed data */
- uLong reserved; /* reserved for future use */
-} z_stream;
-
-typedef z_stream FAR *z_streamp;
-
-/*
- The application must update next_in and avail_in when avail_in has
- dropped to zero. It must update next_out and avail_out when avail_out
- has dropped to zero. The application must initialize zalloc, zfree and
- opaque before calling the init function. All other fields are set by the
- compression library and must not be updated by the application.
-
- The opaque value provided by the application will be passed as the first
- parameter for calls of zalloc and zfree. This can be useful for custom
- memory management. The compression library attaches no meaning to the
- opaque value.
-
- zalloc must return Z_NULL if there is not enough memory for the object.
- If zlib is used in a multi-threaded application, zalloc and zfree must be
- thread safe.
-
- On 16-bit systems, the functions zalloc and zfree must be able to allocate
- exactly 65536 bytes, but will not be required to allocate more than this
- if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
- pointers returned by zalloc for objects of exactly 65536 bytes *must*
- have their offset normalized to zero. The default allocation function
- provided by this library ensures this (see zutil.c). To reduce memory
- requirements and avoid any allocation of 64K objects, at the expense of
- compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
-
- The fields total_in and total_out can be used for statistics or
- progress reports. After compression, total_in holds the total size of
- the uncompressed data and may be saved for use in the decompressor
- (particularly if the decompressor wants to decompress everything in
- a single step).
-*/
-
- /* constants */
-
-#define Z_NO_FLUSH 0
-#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
-#define Z_SYNC_FLUSH 2
-#define Z_FULL_FLUSH 3
-#define Z_FINISH 4
-/* Allowed flush values; see deflate() below for details */
-
-#define Z_OK 0
-#define Z_STREAM_END 1
-#define Z_NEED_DICT 2
-#define Z_ERRNO (-1)
-#define Z_STREAM_ERROR (-2)
-#define Z_DATA_ERROR (-3)
-#define Z_MEM_ERROR (-4)
-#define Z_BUF_ERROR (-5)
-#define Z_VERSION_ERROR (-6)
-/* Return codes for the compression/decompression functions. Negative
- * values are errors, positive values are used for special but normal events.
- */
-
-#define Z_NO_COMPRESSION 0
-#define Z_BEST_SPEED 1
-#define Z_BEST_COMPRESSION 9
-#define Z_DEFAULT_COMPRESSION (-1)
-/* compression levels */
-
-#define Z_FILTERED 1
-#define Z_HUFFMAN_ONLY 2
-#define Z_DEFAULT_STRATEGY 0
-/* compression strategy; see deflateInit2() below for details */
-
-#define Z_BINARY 0
-#define Z_ASCII 1
-#define Z_UNKNOWN 2
-/* Possible values of the data_type field */
-
-#define Z_DEFLATED 8
-/* The deflate compression method (the only one supported in this version) */
-
-#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
-
-#define zlib_version zlibVersion()
-/* for compatibility with versions < 1.0.2 */
-
- /* basic functions */
-
-ZEXTERN const char * ZEXPORT zlibVersion OF((void));
-/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
- If the first character differs, the library code actually used is
- not compatible with the zlib.h header file used by the application.
- This check is automatically made by deflateInit and inflateInit.
- */
-
-/*
-ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
-
- Initializes the internal stream state for compression. The fields
- zalloc, zfree and opaque must be initialized before by the caller.
- If zalloc and zfree are set to Z_NULL, deflateInit updates them to
- use default allocation functions.
-
- The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
- 1 gives best speed, 9 gives best compression, 0 gives no compression at
- all (the input data is simply copied a block at a time).
- Z_DEFAULT_COMPRESSION requests a default compromise between speed and
- compression (currently equivalent to level 6).
-
- deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_STREAM_ERROR if level is not a valid compression level,
- Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
- with the version assumed by the caller (ZLIB_VERSION).
- msg is set to null if there is no error message. deflateInit does not
- perform any compression: this will be done by deflate().
-*/
-
-
-ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
-/*
- deflate compresses as much data as possible, and stops when the input
- buffer becomes empty or the output buffer becomes full. It may introduce some
- output latency (reading input without producing any output) except when
- forced to flush.
-
- The detailed semantics are as follows. deflate performs one or both of the
- following actions:
-
- - Compress more input starting at next_in and update next_in and avail_in
- accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in and avail_in are updated and
- processing will resume at this point for the next call of deflate().
-
- - Provide more output starting at next_out and update next_out and avail_out
- accordingly. This action is forced if the parameter flush is non zero.
- Forcing flush frequently degrades the compression ratio, so this parameter
- should be set only when necessary (in interactive applications).
- Some output may be provided even if flush is not set.
-
- Before the call of deflate(), the application should ensure that at least
- one of the actions is possible, by providing more input and/or consuming
- more output, and updating avail_in or avail_out accordingly; avail_out
- should never be zero before the call. The application can consume the
- compressed output when it wants, for example when the output buffer is full
- (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
- and with zero avail_out, it must be called again after making room in the
- output buffer because there might be more output pending.
-
- If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
- flushed to the output buffer and the output is aligned on a byte boundary, so
- that the decompressor can get all input data available so far. (In particular
- avail_in is zero after the call if enough output space has been provided
- before the call.) Flushing may degrade compression for some compression
- algorithms and so it should be used only when necessary.
-
- If flush is set to Z_FULL_FLUSH, all output is flushed as with
- Z_SYNC_FLUSH, and the compression state is reset so that decompression can
- restart from this point if previous compressed data has been damaged or if
- random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
- the compression.
-
- If deflate returns with avail_out == 0, this function must be called again
- with the same value of the flush parameter and more output space (updated
- avail_out), until the flush is complete (deflate returns with non-zero
- avail_out).
-
- If the parameter flush is set to Z_FINISH, pending input is processed,
- pending output is flushed and deflate returns with Z_STREAM_END if there
- was enough output space; if deflate returns with Z_OK, this function must be
- called again with Z_FINISH and more output space (updated avail_out) but no
- more input data, until it returns with Z_STREAM_END or an error. After
- deflate has returned Z_STREAM_END, the only possible operations on the
- stream are deflateReset or deflateEnd.
-
- Z_FINISH can be used immediately after deflateInit if all the compression
- is to be done in a single step. In this case, avail_out must be at least
- 0.1% larger than avail_in plus 12 bytes. If deflate does not return
- Z_STREAM_END, then it must be called again as described above.
-
- deflate() sets strm->adler to the adler32 checksum of all input read
- so far (that is, total_in bytes).
-
- deflate() may update data_type if it can make a good guess about
- the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
- binary. This field is only for information purposes and does not affect
- the compression algorithm in any manner.
-
- deflate() returns Z_OK if some progress has been made (more input
- processed or more output produced), Z_STREAM_END if all input has been
- consumed and all output has been produced (only when flush is set to
- Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
- if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
- (for example avail_in or avail_out was zero).
-*/
-
-
-ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
-/*
- All dynamically allocated data structures for this stream are freed.
- This function discards any unprocessed input and does not flush any
- pending output.
-
- deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
- stream state was inconsistent, Z_DATA_ERROR if the stream was freed
- prematurely (some input or output was discarded). In the error case,
- msg may be set but then points to a static string (which must not be
- deallocated).
-*/
-
-
-/*
-ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
-
- Initializes the internal stream state for decompression. The fields
- next_in, avail_in, zalloc, zfree and opaque must be initialized before by
- the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
- value depends on the compression method), inflateInit determines the
- compression method from the zlib header and allocates all data structures
- accordingly; otherwise the allocation will be deferred to the first call of
- inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
- use default allocation functions.
-
- inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
- version assumed by the caller. msg is set to null if there is no error
- message. inflateInit does not perform any decompression apart from reading
- the zlib header if present: this will be done by inflate(). (So next_in and
- avail_in may be modified, but next_out and avail_out are unchanged.)
-*/
-
-
-ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
-/*
- inflate decompresses as much data as possible, and stops when the input
- buffer becomes empty or the output buffer becomes full. It may some
- introduce some output latency (reading input without producing any output)
- except when forced to flush.
-
- The detailed semantics are as follows. inflate performs one or both of the
- following actions:
-
- - Decompress more input starting at next_in and update next_in and avail_in
- accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in is updated and processing
- will resume at this point for the next call of inflate().
-
- - Provide more output starting at next_out and update next_out and avail_out
- accordingly. inflate() provides as much output as possible, until there
- is no more input data or no more space in the output buffer (see below
- about the flush parameter).
-
- Before the call of inflate(), the application should ensure that at least
- one of the actions is possible, by providing more input and/or consuming
- more output, and updating the next_* and avail_* values accordingly.
- The application can consume the uncompressed output when it wants, for
- example when the output buffer is full (avail_out == 0), or after each
- call of inflate(). If inflate returns Z_OK and with zero avail_out, it
- must be called again after making room in the output buffer because there
- might be more output pending.
-
- If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
- output as possible to the output buffer. The flushing behavior of inflate is
- not specified for values of the flush parameter other than Z_SYNC_FLUSH
- and Z_FINISH, but the current implementation actually flushes as much output
- as possible anyway.
-
- inflate() should normally be called until it returns Z_STREAM_END or an
- error. However if all decompression is to be performed in a single step
- (a single call of inflate), the parameter flush should be set to
- Z_FINISH. In this case all pending input is processed and all pending
- output is flushed; avail_out must be large enough to hold all the
- uncompressed data. (The size of the uncompressed data may have been saved
- by the compressor for this purpose.) The next operation on this stream must
- be inflateEnd to deallocate the decompression state. The use of Z_FINISH
- is never required, but can be used to inform inflate that a faster routine
- may be used for the single inflate() call.
-
- If a preset dictionary is needed at this point (see inflateSetDictionary
- below), inflate sets strm-adler to the adler32 checksum of the
- dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise
- it sets strm->adler to the adler32 checksum of all output produced
- so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
- an error code as described below. At the end of the stream, inflate()
- checks that its computed adler32 checksum is equal to that saved by the
- compressor and returns Z_STREAM_END only if the checksum is correct.
-
- inflate() returns Z_OK if some progress has been made (more input processed
- or more output produced), Z_STREAM_END if the end of the compressed data has
- been reached and all uncompressed output has been produced, Z_NEED_DICT if a
- preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
- corrupted (input stream not conforming to the zlib format or incorrect
- adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
- (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if no progress is possible or if there was not
- enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
- case, the application may then call inflateSync to look for a good
- compression block.
-*/
-
-
-ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
-/*
- All dynamically allocated data structures for this stream are freed.
- This function discards any unprocessed input and does not flush any
- pending output.
-
- inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
- was inconsistent. In the error case, msg may be set but then points to a
- static string (which must not be deallocated).
-*/
-
- /* Advanced functions */
-
-/*
- The following functions are needed only in some special applications.
-*/
-
-/*
-ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
- int level,
- int method,
- int windowBits,
- int memLevel,
- int strategy));
-
- This is another version of deflateInit with more compression options. The
- fields next_in, zalloc, zfree and opaque must be initialized before by
- the caller.
-
- The method parameter is the compression method. It must be Z_DEFLATED in
- this version of the library.
-
- The windowBits parameter is the base two logarithm of the window size
- (the size of the history buffer). It should be in the range 8..15 for this
- version of the library. Larger values of this parameter result in better
- compression at the expense of memory usage. The default value is 15 if
- deflateInit is used instead.
-
- The memLevel parameter specifies how much memory should be allocated
- for the internal compression state. memLevel=1 uses minimum memory but
- is slow and reduces compression ratio; memLevel=9 uses maximum memory
- for optimal speed. The default value is 8. See zconf.h for total memory
- usage as a function of windowBits and memLevel.
-
- The strategy parameter is used to tune the compression algorithm. Use the
- value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
- filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
- string match). Filtered data consists mostly of small values with a
- somewhat random distribution. In this case, the compression algorithm is
- tuned to compress them better. The effect of Z_FILTERED is to force more
- Huffman coding and less string matching; it is somewhat intermediate
- between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
- the compression ratio but not the correctness of the compressed output even
- if it is not set appropriately.
-
- deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
- method). msg is set to null if there is no error message. deflateInit2 does
- not perform any compression: this will be done by deflate().
-*/
-
-ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
- const Bytef *dictionary,
- uInt dictLength));
-/*
- Initializes the compression dictionary from the given byte sequence
- without producing any compressed output. This function must be called
- immediately after deflateInit, deflateInit2 or deflateReset, before any
- call of deflate. The compressor and decompressor must use exactly the same
- dictionary (see inflateSetDictionary).
-
- The dictionary should consist of strings (byte sequences) that are likely
- to be encountered later in the data to be compressed, with the most commonly
- used strings preferably put towards the end of the dictionary. Using a
- dictionary is most useful when the data to be compressed is short and can be
- predicted with good accuracy; the data can then be compressed better than
- with the default empty dictionary.
-
- Depending on the size of the compression data structures selected by
- deflateInit or deflateInit2, a part of the dictionary may in effect be
- discarded, for example if the dictionary is larger than the window size in
- deflate or deflate2. Thus the strings most likely to be useful should be
- put at the end of the dictionary, not at the front.
-
- Upon return of this function, strm->adler is set to the Adler32 value
- of the dictionary; the decompressor may later use this value to determine
- which dictionary has been used by the compressor. (The Adler32 value
- applies to the whole dictionary even if only a subset of the dictionary is
- actually used by the compressor.)
-
- deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
- parameter is invalid (such as NULL dictionary) or the stream state is
- inconsistent (for example if deflate has already been called for this stream
- or if the compression method is bsort). deflateSetDictionary does not
- perform any compression: this will be done by deflate().
-*/
-
-ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
- z_streamp source));
-/*
- Sets the destination stream as a complete copy of the source stream.
-
- This function can be useful when several compression strategies will be
- tried, for example when there are several ways of pre-processing the input
- data with a filter. The streams that will be discarded should then be freed
- by calling deflateEnd. Note that deflateCopy duplicates the internal
- compression state which can be quite large, so this strategy is slow and
- can consume lots of memory.
-
- deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
- (such as zalloc being NULL). msg is left unchanged in both source and
- destination.
-*/
-
-ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
-/*
- This function is equivalent to deflateEnd followed by deflateInit,
- but does not free and reallocate all the internal compression state.
- The stream will keep the same compression level and any other attributes
- that may have been set by deflateInit2.
-
- deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
- stream state was inconsistent (such as zalloc or state being NULL).
-*/
-
-ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
- int level,
- int strategy));
-/*
- Dynamically update the compression level and compression strategy. The
- interpretation of level and strategy is as in deflateInit2. This can be
- used to switch between compression and straight copy of the input data, or
- to switch to a different kind of input data requiring a different
- strategy. If the compression level is changed, the input available so far
- is compressed with the old level (and may be flushed); the new level will
- take effect only at the next call of deflate().
-
- Before the call of deflateParams, the stream state must be set as for
- a call of deflate(), since the currently available input may have to
- be compressed and flushed. In particular, strm->avail_out must be non-zero.
-
- deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
- stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
- if strm->avail_out was zero.
-*/
-
-/*
-ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
- int windowBits));
-
- This is another version of inflateInit with an extra parameter. The
- fields next_in, avail_in, zalloc, zfree and opaque must be initialized
- before by the caller.
-
- The windowBits parameter is the base two logarithm of the maximum window
- size (the size of the history buffer). It should be in the range 8..15 for
- this version of the library. The default value is 15 if inflateInit is used
- instead. If a compressed stream with a larger window size is given as
- input, inflate() will return with the error code Z_DATA_ERROR instead of
- trying to allocate a larger window.
-
- inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
- memLevel). msg is set to null if there is no error message. inflateInit2
- does not perform any decompression apart from reading the zlib header if
- present: this will be done by inflate(). (So next_in and avail_in may be
- modified, but next_out and avail_out are unchanged.)
-*/
-
-ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
- const Bytef *dictionary,
- uInt dictLength));
-/*
- Initializes the decompression dictionary from the given uncompressed byte
- sequence. This function must be called immediately after a call of inflate
- if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
- can be determined from the Adler32 value returned by this call of
- inflate. The compressor and decompressor must use exactly the same
- dictionary (see deflateSetDictionary).
-
- inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
- parameter is invalid (such as NULL dictionary) or the stream state is
- inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
- expected one (incorrect Adler32 value). inflateSetDictionary does not
- perform any decompression: this will be done by subsequent calls of
- inflate().
-*/
-
-ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
-/*
- Skips invalid compressed data until a full flush point (see above the
- description of deflate with Z_FULL_FLUSH) can be found, or until all
- available input is skipped. No output is provided.
-
- inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
- if no more input was provided, Z_DATA_ERROR if no flush point has been found,
- or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
- case, the application may save the current current value of total_in which
- indicates where valid compressed data was found. In the error case, the
- application may repeatedly call inflateSync, providing more input each time,
- until success or end of the input data.
-*/
-
-ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
-/*
- This function is equivalent to inflateEnd followed by inflateInit,
- but does not free and reallocate all the internal decompression state.
- The stream will keep attributes that may have been set by inflateInit2.
-
- inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
- stream state was inconsistent (such as zalloc or state being NULL).
-*/
-
-
- /* utility functions */
-
-/*
- The following utility functions are implemented on top of the
- basic stream-oriented functions. To simplify the interface, some
- default options are assumed (compression level and memory usage,
- standard memory allocation functions). The source code of these
- utility functions can easily be modified if you need special options.
-*/
-
-ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
- const Bytef *source, uLong sourceLen));
-/*
- Compresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be at least 0.1% larger than
- sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
- compressed buffer.
- This function can be used to compress a whole file at once if the
- input file is mmap'ed.
- compress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer.
-*/
-
-ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
- const Bytef *source, uLong sourceLen,
- int level));
-/*
- Compresses the source buffer into the destination buffer. The level
- parameter has the same meaning as in deflateInit. sourceLen is the byte
- length of the source buffer. Upon entry, destLen is the total size of the
- destination buffer, which must be at least 0.1% larger than sourceLen plus
- 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-
- compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_BUF_ERROR if there was not enough room in the output buffer,
- Z_STREAM_ERROR if the level parameter is invalid.
-*/
-
-ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
- const Bytef *source, uLong sourceLen));
-/*
- Decompresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be large enough to hold the
- entire uncompressed data. (The size of the uncompressed data must have
- been saved previously by the compressor and transmitted to the decompressor
- by some mechanism outside the scope of this compression library.)
- Upon exit, destLen is the actual size of the compressed buffer.
- This function can be used to decompress a whole file at once if the
- input file is mmap'ed.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer, or Z_DATA_ERROR if the input data was corrupted.
-*/
-
-
-typedef voidp gzFile;
-
-ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
-/*
- Opens a gzip (.gz) file for reading or writing. The mode parameter
- is as in fopen ("rb" or "wb") but can also include a compression level
- ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
- Huffman only compression as in "wb1h". (See the description
- of deflateInit2 for more information about the strategy parameter.)
-
- gzopen can be used to read a file which is not in gzip format; in this
- case gzread will directly read from the file without decompression.
-
- gzopen returns NULL if the file could not be opened or if there was
- insufficient memory to allocate the (de)compression state; errno
- can be checked to distinguish the two cases (if errno is zero, the
- zlib error is Z_MEM_ERROR). */
-
-ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
-/*
- gzdopen() associates a gzFile with the file descriptor fd. File
- descriptors are obtained from calls like open, dup, creat, pipe or
- fileno (in the file has been previously opened with fopen).
- The mode parameter is as in gzopen.
- The next call of gzclose on the returned gzFile will also close the
- file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
- descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
- gzdopen returns NULL if there was insufficient memory to allocate
- the (de)compression state.
-*/
-
-ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
-/*
- Dynamically update the compression level or strategy. See the description
- of deflateInit2 for the meaning of these parameters.
- gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
- opened for writing.
-*/
-
-ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
-/*
- Reads the given number of uncompressed bytes from the compressed file.
- If the input file was not in gzip format, gzread copies the given number
- of bytes into the buffer.
- gzread returns the number of uncompressed bytes actually read (0 for
- end of file, -1 for error). */
-
-ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
- const voidp buf, unsigned len));
-/*
- Writes the given number of uncompressed bytes into the compressed file.
- gzwrite returns the number of uncompressed bytes actually written
- (0 in case of error).
-*/
-
-ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
-/*
- Converts, formats, and writes the args to the compressed file under
- control of the format string, as in fprintf. gzprintf returns the number of
- uncompressed bytes actually written (0 in case of error).
-*/
-
-ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
-/*
- Writes the given null-terminated string to the compressed file, excluding
- the terminating null character.
- gzputs returns the number of characters written, or -1 in case of error.
-*/
-
-ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
-/*
- Reads bytes from the compressed file until len-1 characters are read, or
- a newline character is read and transferred to buf, or an end-of-file
- condition is encountered. The string is then terminated with a null
- character.
- gzgets returns buf, or Z_NULL in case of error.
-*/
-
-ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
-/*
- Writes c, converted to an unsigned char, into the compressed file.
- gzputc returns the value that was written, or -1 in case of error.
-*/
-
-ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
-/*
- Reads one byte from the compressed file. gzgetc returns this byte
- or -1 in case of end of file or error.
-*/
-
-ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
-/*
- Flushes all pending output into the compressed file. The parameter
- flush is as in the deflate() function. The return value is the zlib
- error number (see function gzerror below). gzflush returns Z_OK if
- the flush parameter is Z_FINISH and all output could be flushed.
- gzflush should be called only when strictly necessary because it can
- degrade compression.
-*/
-
-ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
- z_off_t offset, int whence));
-/*
- Sets the starting position for the next gzread or gzwrite on the
- given compressed file. The offset represents a number of bytes in the
- uncompressed data stream. The whence parameter is defined as in lseek(2);
- the value SEEK_END is not supported.
- If the file is opened for reading, this function is emulated but can be
- extremely slow. If the file is opened for writing, only forward seeks are
- supported; gzseek then compresses a sequence of zeroes up to the new
- starting position.
-
- gzseek returns the resulting offset location as measured in bytes from
- the beginning of the uncompressed stream, or -1 in case of error, in
- particular if the file is opened for writing and the new starting position
- would be before the current position.
-*/
-
-ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
-/*
- Rewinds the given file. This function is supported only for reading.
-
- gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
-*/
-
-ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
-/*
- Returns the starting position for the next gzread or gzwrite on the
- given compressed file. This position represents a number of bytes in the
- uncompressed data stream.
-
- gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
-*/
-
-ZEXTERN int ZEXPORT gzeof OF((gzFile file));
-/*
- Returns 1 when EOF has previously been detected reading the given
- input stream, otherwise zero.
-*/
-
-ZEXTERN int ZEXPORT gzclose OF((gzFile file));
-/*
- Flushes all pending output if necessary, closes the compressed file
- and deallocates all the (de)compression state. The return value is the zlib
- error number (see function gzerror below).
-*/
-
-ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
-/*
- Returns the error message for the last error which occurred on the
- given compressed file. errnum is set to zlib error number. If an
- error occurred in the file system and not in the compression library,
- errnum is set to Z_ERRNO and the application may consult errno
- to get the exact error code.
-*/
-
- /* checksum functions */
-
-/*
- These functions are not related to compression but are exported
- anyway because they might be useful in applications using the
- compression library.
-*/
-
-ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
-
-/*
- Update a running Adler-32 checksum with the bytes buf[0..len-1] and
- return the updated checksum. If buf is NULL, this function returns
- the required initial value for the checksum.
- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
- much faster. Usage example:
-
- uLong adler = adler32(0L, Z_NULL, 0);
-
- while (read_buffer(buffer, length) != EOF) {
- adler = adler32(adler, buffer, length);
- }
- if (adler != original_adler) error();
-*/
-
-ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
-/*
- Update a running crc with the bytes buf[0..len-1] and return the updated
- crc. If buf is NULL, this function returns the required initial value
- for the crc. Pre- and post-conditioning (one's complement) is performed
- within this function so it shouldn't be done by the application.
- Usage example:
-
- uLong crc = crc32(0L, Z_NULL, 0);
-
- while (read_buffer(buffer, length) != EOF) {
- crc = crc32(crc, buffer, length);
- }
- if (crc != original_crc) error();
-*/
-
-
- /* various hacks, don't look :) */
-
-/* deflateInit and inflateInit are macros to allow checking the zlib version
- * and the compiler's view of z_stream:
- */
-ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
- const char *version, int stream_size));
-ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
- const char *version, int stream_size));
-ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
- int windowBits, int memLevel,
- int strategy, const char *version,
- int stream_size));
-ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
- const char *version, int stream_size));
-#define deflateInit(strm, level) \
- deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit(strm) \
- inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
- deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
- (strategy), ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
- inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
-
-
-#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
- struct internal_state {int dummy;}; /* hack for buggy compilers */
-#endif
-
-ZEXTERN const char * ZEXPORT zError OF((int err));
-ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z));
-ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ZLIB_H */
diff --git a/zlib/zutil.c b/zlib/zutil.c
deleted file mode 100644
index dfc38ec14..000000000
--- a/zlib/zutil.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zutil.h"
-
-struct internal_state {int dummy;}; /* for buggy compilers */
-
-#ifndef STDC
-extern void exit OF((int));
-#endif
-
-const char *z_errmsg[10] = {
-"need dictionary", /* Z_NEED_DICT 2 */
-"stream end", /* Z_STREAM_END 1 */
-"", /* Z_OK 0 */
-"file error", /* Z_ERRNO (-1) */
-"stream error", /* Z_STREAM_ERROR (-2) */
-"data error", /* Z_DATA_ERROR (-3) */
-"insufficient memory", /* Z_MEM_ERROR (-4) */
-"buffer error", /* Z_BUF_ERROR (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
-
-
-const char * ZEXPORT zlibVersion()
-{
- return ZLIB_VERSION;
-}
-
-#ifdef DEBUG
-
-# ifndef verbose
-# define verbose 0
-# endif
-int z_verbose = verbose;
-
-void z_error (m)
- char *m;
-{
- fprintf(stderr, "%s\n", m);
- exit(1);
-}
-#endif
-
-/* exported to allow conversion of error code to string for compress() and
- * uncompress()
- */
-const char * ZEXPORT zError(err)
- int err;
-{
- return ERR_MSG(err);
-}
-
-
-#ifndef HAVE_MEMCPY
-
-void zmemcpy(dest, source, len)
- Bytef* dest;
- const Bytef* source;
- uInt len;
-{
- if (len == 0) return;
- do {
- *dest++ = *source++; /* ??? to be unrolled */
- } while (--len != 0);
-}
-
-int zmemcmp(s1, s2, len)
- const Bytef* s1;
- const Bytef* s2;
- uInt len;
-{
- uInt j;
-
- for (j = 0; j < len; j++) {
- if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
- }
- return 0;
-}
-
-void zmemzero(dest, len)
- Bytef* dest;
- uInt len;
-{
- if (len == 0) return;
- do {
- *dest++ = 0; /* ??? to be unrolled */
- } while (--len != 0);
-}
-#endif
-
-#ifdef __TURBOC__
-#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
-/* Small and medium model in Turbo C are for now limited to near allocation
- * with reduced MAX_WBITS and MAX_MEM_LEVEL
- */
-# define MY_ZCALLOC
-
-/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
- * and farmalloc(64K) returns a pointer with an offset of 8, so we
- * must fix the pointer. Warning: the pointer must be put back to its
- * original form in order to free it, use zcfree().
- */
-
-#define MAX_PTR 10
-/* 10*64K = 640K */
-
-local int next_ptr = 0;
-
-typedef struct ptr_table_s {
- voidpf org_ptr;
- voidpf new_ptr;
-} ptr_table;
-
-local ptr_table table[MAX_PTR];
-/* This table is used to remember the original form of pointers
- * to large buffers (64K). Such pointers are normalized with a zero offset.
- * Since MSDOS is not a preemptive multitasking OS, this table is not
- * protected from concurrent access. This hack doesn't work anyway on
- * a protected system like OS/2. Use Microsoft C instead.
- */
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
- voidpf buf = opaque; /* just to make some compilers happy */
- ulg bsize = (ulg)items*size;
-
- /* If we allocate less than 65520 bytes, we assume that farmalloc
- * will return a usable pointer which doesn't have to be normalized.
- */
- if (bsize < 65520L) {
- buf = farmalloc(bsize);
- if (*(ush*)&buf != 0) return buf;
- } else {
- buf = farmalloc(bsize + 16L);
- }
- if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
- table[next_ptr].org_ptr = buf;
-
- /* Normalize the pointer to seg:0 */
- *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
- *(ush*)&buf = 0;
- table[next_ptr++].new_ptr = buf;
- return buf;
-}
-
-void zcfree (voidpf opaque, voidpf ptr)
-{
- int n;
- if (*(ush*)&ptr != 0) { /* object < 64K */
- farfree(ptr);
- return;
- }
- /* Find the original pointer */
- for (n = 0; n < next_ptr; n++) {
- if (ptr != table[n].new_ptr) continue;
-
- farfree(table[n].org_ptr);
- while (++n < next_ptr) {
- table[n-1] = table[n];
- }
- next_ptr--;
- return;
- }
- ptr = opaque; /* just to make some compilers happy */
- Assert(0, "zcfree: ptr not found");
-}
-#endif
-#endif /* __TURBOC__ */
-
-
-#if defined(M_I86) && !defined(__32BIT__)
-/* Microsoft C in 16-bit mode */
-
-# define MY_ZCALLOC
-
-#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
-# define _halloc halloc
-# define _hfree hfree
-#endif
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
- if (opaque) opaque = 0; /* to make compiler happy */
- return _halloc((long)items, size);
-}
-
-void zcfree (voidpf opaque, voidpf ptr)
-{
- if (opaque) opaque = 0; /* to make compiler happy */
- _hfree(ptr);
-}
-
-#endif /* MSC */
-
-
-#ifndef MY_ZCALLOC /* Any system without a special alloc function */
-
-#ifndef STDC
-extern voidp calloc OF((uInt items, uInt size));
-extern void free OF((voidpf ptr));
-#endif
-
-voidpf zcalloc (opaque, items, size)
- voidpf opaque;
- unsigned items;
- unsigned size;
-{
- if (opaque) items += size - size; /* make compiler happy */
- return (voidpf)calloc(items, size);
-}
-
-void zcfree (opaque, ptr)
- voidpf opaque;
- voidpf ptr;
-{
- free(ptr);
- if (opaque) return; /* make compiler happy */
-}
-
-#endif /* MY_ZCALLOC */
diff --git a/zlib/zutil.h b/zlib/zutil.h
deleted file mode 100644
index 718ebc15b..000000000
--- a/zlib/zutil.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2002 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
- part of the implementation of the compression library and is
- subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id$ */
-
-#ifndef _Z_UTIL_H
-#define _Z_UTIL_H
-
-#include "zlib.h"
-
-#ifdef STDC
-# include <stddef.h>
-# include <string.h>
-# include <stdlib.h>
-#endif
-#ifdef NO_ERRNO_H
- extern int errno;
-#else
-# include <errno.h>
-#endif
-
-#ifndef local
-# define local static
-#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
-
-typedef unsigned char uch;
-typedef uch FAR uchf;
-typedef unsigned short ush;
-typedef ush FAR ushf;
-typedef unsigned long ulg;
-
-extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
-/* (size given to avoid silly warnings with Visual C++) */
-
-#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
-
-#define ERR_RETURN(strm,err) \
- return (strm->msg = (char*)ERR_MSG(err), (err))
-/* To be used only when the state is known to be valid */
-
- /* common constants */
-
-#ifndef DEF_WBITS
-# define DEF_WBITS MAX_WBITS
-#endif
-/* default windowBits for decompression. MAX_WBITS is for compression only */
-
-#if MAX_MEM_LEVEL >= 8
-# define DEF_MEM_LEVEL 8
-#else
-# define DEF_MEM_LEVEL MAX_MEM_LEVEL
-#endif
-/* default memLevel */
-
-#define STORED_BLOCK 0
-#define STATIC_TREES 1
-#define DYN_TREES 2
-/* The three kinds of block type */
-
-#define MIN_MATCH 3
-#define MAX_MATCH 258
-/* The minimum and maximum match lengths */
-
-#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
-
- /* target dependencies */
-
-#ifdef MSDOS
-# define OS_CODE 0x00
-# if defined(__TURBOC__) || defined(__BORLANDC__)
-# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
- /* Allow compilation with ANSI keywords only enabled */
- void _Cdecl farfree( void *block );
- void *_Cdecl farmalloc( unsigned long nbytes );
-# else
-# include <alloc.h>
-# endif
-# else /* MSC or DJGPP */
-# include <malloc.h>
-# endif
-#endif
-
-#ifdef OS2
-# define OS_CODE 0x06
-#endif
-
-#ifdef WIN32 /* Window 95 & Windows NT */
-# define OS_CODE 0x0b
-#endif
-
-#if defined(VAXC) || defined(VMS)
-# define OS_CODE 0x02
-# define F_OPEN(name, mode) \
- fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
-#endif
-
-#ifdef AMIGA
-# define OS_CODE 0x01
-#endif
-
-#if defined(ATARI) || defined(atarist)
-# define OS_CODE 0x05
-#endif
-
-#if defined(MACOS) || defined(TARGET_OS_MAC)
-# define OS_CODE 0x07
-# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-# include <unix.h> /* for fdopen */
-# else
-# ifndef fdopen
-# define fdopen(fd,mode) NULL /* No fdopen() */
-# endif
-# endif
-#endif
-
-#ifdef __50SERIES /* Prime/PRIMOS */
-# define OS_CODE 0x0F
-#endif
-
-#ifdef TOPS20
-# define OS_CODE 0x0a
-#endif
-
-#if defined(_BEOS_) || defined(RISCOS)
-# define fdopen(fd,mode) NULL /* No fdopen() */
-#endif
-
-#if (defined(_MSC_VER) && (_MSC_VER > 600))
-# define fdopen(fd,type) _fdopen(fd,type)
-#endif
-
-
- /* Common defaults */
-
-#ifndef OS_CODE
-# define OS_CODE 0x03 /* assume Unix */
-#endif
-
-#ifndef F_OPEN
-# define F_OPEN(name, mode) fopen((name), (mode))
-#endif
-
- /* functions */
-
-#ifdef HAVE_STRERROR
- extern char *strerror OF((int));
-# define zstrerror(errnum) strerror(errnum)
-#else
-# define zstrerror(errnum) ""
-#endif
-
-#if defined(pyr)
-# define NO_MEMCPY
-#endif
-#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
- /* Use our own functions for small and medium model with MSC <= 5.0.
- * You may have to use the same strategy for Borland C (untested).
- * The __SC__ check is for Symantec.
- */
-# define NO_MEMCPY
-#endif
-#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
-# define HAVE_MEMCPY
-#endif
-#ifdef HAVE_MEMCPY
-# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
-# define zmemcpy _fmemcpy
-# define zmemcmp _fmemcmp
-# define zmemzero(dest, len) _fmemset(dest, 0, len)
-# else
-# define zmemcpy memcpy
-# define zmemcmp memcmp
-# define zmemzero(dest, len) memset(dest, 0, len)
-# endif
-#else
- extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
- extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
- extern void zmemzero OF((Bytef* dest, uInt len));
-#endif
-
-/* Diagnostic functions */
-#ifdef DEBUG
-# include <stdio.h>
- extern int z_verbose;
- extern void z_error OF((char *m));
-# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
-# define Trace(x) {if (z_verbose>=0) fprintf x ;}
-# define Tracev(x) {if (z_verbose>0) fprintf x ;}
-# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
-# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
-# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
-#else
-# define Assert(cond,msg)
-# define Trace(x)
-# define Tracev(x)
-# define Tracevv(x)
-# define Tracec(c,x)
-# define Tracecv(c,x)
-#endif
-
-
-typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf,
- uInt len));
-voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
-void zcfree OF((voidpf opaque, voidpf ptr));
-
-#define ZALLOC(strm, items, size) \
- (*((strm)->zalloc))((strm)->opaque, (items), (size))
-#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
-#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
-
-#endif /* _Z_UTIL_H */

File Metadata

Mime Type
application/octet-stream
Expires
Sun, Dec 1, 8:41 PM (1 d, 22 h)
Storage Engine
chunks
Storage Format
Chunks
Storage Handle
SxKKH3_N3OYv

Event Timeline